Compare commits

..

11 Commits

Author SHA1 Message Date
fabio
24f86915b4 build 2026-02-19 18:54:57 +01:00
fabio
29b4f99d9f aggiunto reddito acessorio 2026-02-19 18:54:22 +01:00
fabio
7f3543fe4c commit info 2026-02-19 12:56:08 +01:00
fabio
62da803a05 test commit 2026-02-19 12:55:29 +01:00
fabio
ed517ccc9d da ignorare 2026-02-19 12:54:19 +01:00
fabio
d5c957dd73 test gen commit info 2026-02-19 12:53:33 +01:00
fabio
00c7da9495 aggiornato gitignore 2026-02-19 12:34:58 +01:00
fabio
ec967718a7 aggiunto info cmmit sulla toolbar 2026-02-19 12:31:58 +01:00
fabio
a75f970b33 build 2026-02-19 10:41:13 +01:00
fabio
3a3e1a90c7 selexione del server 2026-02-19 10:37:43 +01:00
fabio
e752807ede aggiunto lo store ProfessionalExpenses 2026-02-19 10:29:31 +01:00
60 changed files with 349 additions and 53 deletions

1
.gitignore vendored
View File

@@ -1,2 +1,3 @@
app/node_modules app/node_modules
.DS_Store .DS_Store
app/commit-info.ts

View File

@@ -0,0 +1 @@
import{Q as q}from"./userstore-SjLknvTP.js";import{$ as F,r as v,a as i,aa as d,a3 as u,a5 as s,a4 as m,a1 as _,a7 as S,a8 as c,a9 as p,a6 as j}from"./index-GXFLJtQL.js";import{A as I}from"./AddressModal-Y6dYCZ_T.js";import{u as N}from"./vue-i18n.runtime-BXSOjn_j.js";import{_ as z}from"./IndexPage-C20RwqJI.js";const Q={class:"row items-center q-gutter-sm q-mb-sm q-mt-md"},T={class:"col-auto"},E={class:"col"},H={class:"text-caption"},M={class:"q-pa-sm bg-grey-2 q-mb-sm"},O={key:0,class:"text-negative"},D={key:1},U=F({__name:"AddressInput",props:{modelValue:{},label:{},allowForeign:{type:Boolean},hint:{}},emits:["update:modelValue","save","cancel"],setup(g,{emit:h}){const o=g,r=h,{t:l}=N(),n=v(!1),y=v(null),V=o.label||l("address"),b=o.allowForeign??!0,x=i(()=>{const e=o.modelValue;if(console.log("address input formatted",e),!e)return"";const t=e.country?.name||"";return e.country.code==="CH"?[e.street,String(e.cap||""),e.city,e.canton].filter(Boolean).join(", "):[e.street,String(e.cap||""),e.city,t].filter(Boolean).join(", ")}),A=i(()=>{const e=o.modelValue;return e?!(e.street||e.city||e.cap||e.country&&e.country.code):!0}),w=i(()=>o.hint||l("validation.insertAddress"));function B(){const e=o.modelValue;y.value=e?{street:e.street||"",zip:String(e.cap||""),city:e.city||"",country:e.country&&e.country.code||"",canton:e.canton||"",foreign:!!(e.country&&e.country.code&&e.country.code!=="CH")}:{street:"",zip:"",city:"",country:"",canton:"",foreign:!0},n.value=!0}function C(e){let t={code:"",name:""};if(!e.country)t={code:"",name:""};else if(typeof e.country=="string")t={code:e.country,name:e.country};else if(typeof e.country=="object"&&e.country!==null){const f=e.country;t={code:f.code||"",name:f.name||""}}const a={street:e.street||"",cap:e.zip||"",city:e.city||"",country:t,canton:e.canton||""};r("update:modelValue",a),r("save",a),n.value=!1}function k(){r("cancel"),n.value=!1}return(e,t)=>(u(),d("div",null,[s("div",Q,[s("div",T,[m(j,{dense:"",flat:"",round:"",icon:"edit",onClick:B},{default:_(()=>[m(q,{class:"bg-primary text-white"},{default:_(()=>[S(c(p(l)("children.editAddress")),1)]),_:1})]),_:1})]),s("div",E,[s("div",H,c(p(V)),1)])]),s("div",M,[A.value?(u(),d("div",O,c(w.value),1)):(u(),d("div",D,c(x.value),1))]),m(I,{modelValue:n.value,"onUpdate:modelValue":t[0]||(t[0]=a=>n.value=a),modelAddress:y.value,allowForeign:p(b),onSave:C,onCancel:k},null,8,["modelValue","modelAddress","allowForeign"])]))}}),P=z(U,[["__scopeId","data-v-b68f19ad"]]);export{P as A};

View File

@@ -1 +0,0 @@
import{b as q}from"./userstore-t-JK1J0e.js";import{$ as F,r as v,a as i,a9 as d,a3 as u,a5 as s,a4 as m,a1 as _,a7 as S,a8 as c,ac as p,a6 as j}from"./index-CBamscxj.js";import{A as I}from"./CommentAttachment-B387hLmi.js";import{u as N}from"./vue-i18n.runtime-BGZkCWQI.js";import{_ as z}from"./IndexPage-CArgvUEp.js";const T={class:"row items-center q-gutter-sm q-mb-sm q-mt-md"},E={class:"col-auto"},H={class:"col"},M={class:"text-caption"},O={class:"q-pa-sm bg-grey-2 q-mb-sm"},Q={key:0,class:"text-negative"},D={key:1},U=F({__name:"AddressInput",props:{modelValue:{},label:{},allowForeign:{type:Boolean},hint:{}},emits:["update:modelValue","save","cancel"],setup(g,{emit:h}){const o=g,r=h,{t:l}=N(),n=v(!1),y=v(null),V=o.label||l("address"),b=o.allowForeign??!0,x=i(()=>{const e=o.modelValue;if(console.log("address input formatted",e),!e)return"";const t=e.country?.name||"";return e.country.code==="CH"?[e.street,String(e.cap||""),e.city,e.canton].filter(Boolean).join(", "):[e.street,String(e.cap||""),e.city,t].filter(Boolean).join(", ")}),A=i(()=>{const e=o.modelValue;return e?!(e.street||e.city||e.cap||e.country&&e.country.code):!0}),w=i(()=>o.hint||l("validation.insertAddress"));function B(){const e=o.modelValue;y.value=e?{street:e.street||"",zip:String(e.cap||""),city:e.city||"",country:e.country&&e.country.code||"",canton:e.canton||"",foreign:!!(e.country&&e.country.code&&e.country.code!=="CH")}:{street:"",zip:"",city:"",country:"",canton:"",foreign:!0},n.value=!0}function C(e){let t={code:"",name:""};if(!e.country)t={code:"",name:""};else if(typeof e.country=="string")t={code:e.country,name:e.country};else if(typeof e.country=="object"&&e.country!==null){const f=e.country;t={code:f.code||"",name:f.name||""}}const a={street:e.street||"",cap:e.zip||"",city:e.city||"",country:t,canton:e.canton||""};r("update:modelValue",a),r("save",a),n.value=!1}function k(){r("cancel"),n.value=!1}return(e,t)=>(u(),d("div",null,[s("div",T,[s("div",E,[m(j,{dense:"",flat:"",round:"",icon:"edit",onClick:B},{default:_(()=>[m(q,{class:"bg-primary text-white"},{default:_(()=>[S(c(p(l)("children.editAddress")),1)]),_:1})]),_:1})]),s("div",H,[s("div",M,c(p(V)),1)])]),s("div",O,[A.value?(u(),d("div",Q,c(w.value),1)):(u(),d("div",D,c(x.value),1))]),m(I,{modelValue:n.value,"onUpdate:modelValue":t[0]||(t[0]=a=>n.value=a),modelAddress:y.value,allowForeign:p(b),onSave:C,onCancel:k},null,8,["modelValue","modelAddress","allowForeign"])]))}}),P=z(U,[["__scopeId","data-v-b68f19ad"]]);export{P as A};

View File

@@ -0,0 +1 @@
.contained-card[data-v-00430335]{min-width:420px;max-width:720px}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
.comment-attachment[data-v-a0ff9b6f]{font-size:14px}.comment-attachment__file-name[data-v-a0ff9b6f]{font-size:14px!important;width:100%;background-color:#0000001a}.text-grey[data-v-a0ff9b6f]{color:#00000073}

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
.contained-card[data-v-00430335]{min-width:420px;max-width:720px}.comment-attachment[data-v-a0ff9b6f]{font-size:14px}.comment-attachment__file-name[data-v-a0ff9b6f]{font-size:14px!important;width:100%;background-color:#0000001a}.text-grey[data-v-a0ff9b6f]{color:#00000073}

View File

@@ -1 +1 @@
import{$ as o,a9 as s,a5 as t,a4 as a,a3 as l,a6 as n}from"./index-CBamscxj.js";const r={class:"fullscreen bg-blue text-white text-center q-pa-md flex flex-center"},p=o({__name:"ErrorNotFound",setup(c){return(i,e)=>(l(),s("div",r,[t("div",null,[e[0]||(e[0]=t("div",{style:{"font-size":"30vh"}},"404",-1)),e[1]||(e[1]=t("div",{class:"text-h2",style:{opacity:"0.4"}},"Oops. Nothing here...",-1)),a(n,{class:"q-mt-xl",color:"white","text-color":"blue",unelevated:"",to:"/",label:"Go Home","no-caps":""})])]))}});export{p as default}; import{$ as o,aa as s,a5 as t,a4 as a,a3 as l,a6 as n}from"./index-GXFLJtQL.js";const r={class:"fullscreen bg-blue text-white text-center q-pa-md flex flex-center"},p=o({__name:"ErrorNotFound",setup(c){return(i,e)=>(l(),s("div",r,[t("div",null,[e[0]||(e[0]=t("div",{style:{"font-size":"30vh"}},"404",-1)),e[1]||(e[1]=t("div",{class:"text-h2",style:{opacity:"0.4"}},"Oops. Nothing here...",-1)),a(n,{class:"q-mt-xl",color:"white","text-color":"blue",unelevated:"",to:"/",label:"Go Home","no-caps":""})])]))}});export{p as default};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,2 @@
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/WelcomeStep-DnQ67BQt.js","assets/index-GXFLJtQL.js","assets/index-BQveqNql.css","assets/vue-i18n.runtime-BXSOjn_j.js","assets/QList-BZpTot_c.js","assets/WelcomeStep-BTfvnfIz.css","assets/TaxpayerStep-Bc6zztuA.js","assets/QChip-DE2_FO3B.js","assets/taxstore-CFm87Oqg.js","assets/LocalStorage-DjXJ9f5H.js","assets/AddressInput-CoglolOc.js","assets/userstore-SjLknvTP.js","assets/AddressModal-Y6dYCZ_T.js","assets/QSelect-mYEcqVHl.js","assets/QMenu-MNqKCtrf.js","assets/AddressModal-DONi1s2A.css","assets/AddressInput-DTjVpzGz.css","assets/CommentAttachment-DGUhSBXt.js","assets/CommentAttachment-CzrGSxHS.css","assets/TaxpayerStep-CWAfROv3.css","assets/MaritalStep-BHFgu04r.js","assets/MaritalStep-C-FftozQ.css","assets/ChildrenStep-Di1mJZJ4.js","assets/children-CpfEvZEN.js","assets/ChildrenStep-CyFMlGKq.css","assets/IncomeStep-DfHNzbom.js","assets/IncomeStep-Cw8mizyx.css","assets/ProfessionalExpensesStep-DDXUXgUj.js","assets/ProfessionalExpensesStep-D4g67cgn.css","assets/SideIncomeStep-BrBQMl9k.js","assets/SideIncomeStep-DriiBlt0.css"])))=>i.map(i=>d[i]);
import{c as A,g as Q,k as P,m as _,p as R,X as D,a as g,h as O,b as w,$ as S,r as L,ad as s,aa as m,a3 as d,a5 as C,a4 as v,a1 as p,ab as V,ac as $,a0 as b,a8 as I,a9 as E,ae as T,af as q,ag as B,ah as F,ai as l}from"./index-GXFLJtQL.js";import{a as z,b as N,Q as j}from"./QList-BZpTot_c.js";const H=A({name:"QPage",props:{padding:Boolean,styleFn:Function},setup(a,{slots:o}){const{proxy:{$q:i}}=Q(),t=P(R,_);if(t===_)return console.error("QPage needs to be a deep child of QLayout"),_;if(P(D,_)===_)return console.error("QPage needs to be child of QPageContainer"),_;const f=g(()=>{const n=(t.header.space===!0?t.header.size:0)+(t.footer.space===!0?t.footer.size:0);if(typeof a.styleFn=="function"){const y=t.isContainer.value===!0?t.containerHeight.value:i.screen.height;return a.styleFn(n,y)}return{minHeight:t.isContainer.value===!0?t.containerHeight.value-n+"px":i.screen.height===0?n!==0?`calc(100vh - ${n}px)`:"100vh":i.screen.height-n+"px"}}),h=g(()=>`q-page${a.padding===!0?" q-layout-padding":""}`);return()=>O("main",{class:h.value,style:f.value},w(o.default))}}),K={class:"row full-height"},M={class:"col-3 q-pa-sm bg-grey-1"},X={class:"text-body1"},G={class:"col q-pa-md full-height"},J={key:0,class:"text-h6"},U={key:2,class:"q-mt-md"},W=S({__name:"StepsStepper",setup(a){const o=[{id:"welcome",title:"Benvenuto",order:0},{id:"taxpayer",title:"Dati contribuente e dichiarazione precedente",order:1},{id:"marital",title:"Stato civile",order:2},{id:"children",title:"Figli",order:3},{id:"income",title:"Redditi",order:4},{id:"professionalExpenses",title:"Spese professionali",order:5},{id:"sideIncome",title:"Reddito accessorio",order:6},{id:"annuities",title:"Rendite",order:7},{id:"insurance",title:"Spese assicurative e mediche",order:8},{id:"pillar3",title:"Polizze 3A / 3B",order:9},{id:"bankAccounts",title:"Conti bancari",order:10},{id:"otherAssets",title:"Altri beni / averi",order:11},{id:"debts",title:"Debiti / ipoteche",order:12},{id:"properties",title:"Immobili",order:13},{id:"foreign",title:"Redditi o averi allestero",order:14}],i=Math.max(...o.map(e=>e.order)),t=new Array(i+1).fill(void 0).map(()=>({}));o.forEach(e=>{t[e.order]={id:e.id,title:e.title,order:e.order}});const r=L(0),f=g(()=>{const e=t[r.value]?.id;return e==="welcome"?s(()=>l(()=>import("./WelcomeStep-DnQ67BQt.js"),__vite__mapDeps([0,1,2,3,4,5]))):e==="taxpayer"?s(()=>l(()=>import("./TaxpayerStep-Bc6zztuA.js"),__vite__mapDeps([6,1,2,7,8,9,10,11,12,13,4,14,3,15,16,17,18,19]))):e==="marital"?s(()=>l(()=>import("./MaritalStep-BHFgu04r.js"),__vite__mapDeps([20,1,2,13,7,4,14,9,8,10,11,12,3,15,16,17,18,21]))):e==="children"?s(()=>l(()=>import("./ChildrenStep-Di1mJZJ4.js"),__vite__mapDeps([22,1,2,13,7,4,14,9,11,12,3,15,23,8,17,18,24]))):e==="income"?s(()=>l(()=>import("./IncomeStep-DfHNzbom.js"),__vite__mapDeps([25,1,2,13,7,4,14,9,11,3,26]))):e==="professionalExpenses"?s(()=>l(()=>import("./ProfessionalExpensesStep-DDXUXgUj.js"),__vite__mapDeps([27,1,2,13,7,4,14,9,3,28]))):e==="sideIncome"?s(()=>l(()=>import("./SideIncomeStep-BrBQMl9k.js"),__vite__mapDeps([29,1,2,7,9,17,11,3,18,4,30]))):null}),h=g(()=>t[r.value]);function n(e){if(typeof e=="string"){const c=t.findIndex(u=>u.id===e);if(c!==-1){r.value=c;return}}r.value<t.length-1&&r.value++}function y(e){if(typeof e=="string"){const c=t.findIndex(u=>u.id===e);if(c!==-1){r.value=c;return}}r.value>0&&r.value--}return(e,c)=>(d(),m("div",K,[C("div",M,[v(j,{dense:"",bordered:"",class:"vertical-nav"},{default:p(()=>[(d(!0),m(V,null,$(E(t),(u,x)=>(d(),b(z,{key:u.id,clickable:"",onClick:te=>r.value=x,active:r.value===x},{default:p(()=>[v(N,null,{default:p(()=>[C("div",X,I(x+1)+". "+I(u.title),1)]),_:2},1024)]),_:2},1032,["onClick","active"]))),128))]),_:1})]),C("div",G,[v(F,{flat:"",class:"q-pa-md full-height"},{default:p(()=>[v(T,null,{default:p(()=>[f.value?q("",!0):(d(),m("div",J,I(E(t)[r.value]?.title),1)),f.value&&h.value?(d(),b(B(f.value),{key:1,step:h.value,onNext:n,onPrev:y},null,40,["step"])):(d(),m("div",U))]),_:1})]),_:1})])]))}}),k=(a,o)=>{const i=a.__vccOpts||a;for(const[t,r]of o)i[t]=r;return i},Y=k(W,[["__scopeId","data-v-a035370f"]]),Z=S({__name:"IndexPage",setup(a){return(o,i)=>(d(),b(H,{class:"row full-width justify-center full-height"},{default:p(()=>[v(Y,{class:"no-shadow full-height full-width"})]),_:1}))}}),ee=k(Z,[["__scopeId","data-v-1cafec6b"]]),ae=Object.freeze(Object.defineProperty({__proto__:null,default:ee},Symbol.toStringTag,{value:"Module"}));export{ae as I,k as _};

View File

@@ -1,2 +0,0 @@
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/WelcomeStep-CceGeOSt.js","assets/index-CBamscxj.js","assets/index-BQveqNql.css","assets/vue-i18n.runtime-BGZkCWQI.js","assets/QList-1f0ZmkRo.js","assets/WelcomeStep-BTfvnfIz.css","assets/TaxpayerStep-BW5eA-Yt.js","assets/userstore-t-JK1J0e.js","assets/LocalStorage-fNBzdRj6.js","assets/taxstore-Cn_AGwIc.js","assets/AddressInput-DRy7VRhk.js","assets/CommentAttachment-B387hLmi.js","assets/CommentAttachment-M56Dxc2A.css","assets/AddressInput-DTjVpzGz.css","assets/TaxpayerStep-CWAfROv3.css","assets/MaritalStep-BE56kGyF.js","assets/MaritalStep-C-FftozQ.css","assets/ChildrenStep-DyqlyPDG.js","assets/children-ByTDTrnW.js","assets/ChildrenStep-CyFMlGKq.css","assets/IncomeStep-hqFZm4PA.js","assets/IncomeStep-Cw8mizyx.css"])))=>i.map(i=>d[i]);
import{c as Q,g as A,j as P,k as c,m as w,X as R,a as g,h as $,b as D,$ as k,r as O,ad as p,a9 as m,a3 as s,a5 as C,a4 as v,a1 as u,aa as L,ab as V,a0 as I,a8 as b,ac as S,ae as q,af as B,ag as F,ah as z,ai as f}from"./index-CBamscxj.js";import{a as T,b as j,Q as N}from"./QList-1f0ZmkRo.js";const H=Q({name:"QPage",props:{padding:Boolean,styleFn:Function},setup(r,{slots:o}){const{proxy:{$q:i}}=A(),e=P(w,c);if(e===c)return console.error("QPage needs to be a deep child of QLayout"),c;if(P(R,c)===c)return console.error("QPage needs to be child of QPageContainer"),c;const _=g(()=>{const n=(e.header.space===!0?e.header.size:0)+(e.footer.space===!0?e.footer.size:0);if(typeof r.styleFn=="function"){const y=e.isContainer.value===!0?e.containerHeight.value:i.screen.height;return r.styleFn(n,y)}return{minHeight:e.isContainer.value===!0?e.containerHeight.value-n+"px":i.screen.height===0?n!==0?`calc(100vh - ${n}px)`:"100vh":i.screen.height-n+"px"}}),h=g(()=>`q-page${r.padding===!0?" q-layout-padding":""}`);return()=>$("main",{class:h.value,style:_.value},D(o.default))}}),K={class:"row full-height"},M={class:"col-3 q-pa-sm bg-grey-1"},X={class:"text-body1"},G={class:"col q-pa-md full-height"},J={key:0,class:"text-h6"},U={key:2,class:"q-mt-md"},W=k({__name:"StepsStepper",setup(r){const o=[{id:"welcome",title:"Benvenuto",order:0},{id:"taxpayer",title:"Dati contribuente e dichiarazione precedente",order:1},{id:"marital",title:"Stato civile",order:2},{id:"children",title:"Figli",order:3},{id:"income",title:"Redditi",order:4},{id:"professionalExpenses",title:"Spese professionali",order:5},{id:"sideIncome",title:"Reddito accessorio",order:6},{id:"annuities",title:"Rendite",order:7},{id:"insurance",title:"Spese assicurative e mediche",order:8},{id:"pillar3",title:"Polizze 3A / 3B",order:9},{id:"bankAccounts",title:"Conti bancari",order:10},{id:"otherAssets",title:"Altri beni / averi",order:11},{id:"debts",title:"Debiti / ipoteche",order:12},{id:"properties",title:"Immobili",order:13},{id:"foreign",title:"Redditi o averi allestero",order:14}],i=Math.max(...o.map(t=>t.order)),e=new Array(i+1).fill(void 0).map(()=>({}));o.forEach(t=>{e[t.order]={id:t.id,title:t.title,order:t.order}});const a=O(0),_=g(()=>{const t=e[a.value]?.id;return t==="welcome"?p(()=>f(()=>import("./WelcomeStep-CceGeOSt.js"),__vite__mapDeps([0,1,2,3,4,5]))):t==="taxpayer"?p(()=>f(()=>import("./TaxpayerStep-BW5eA-Yt.js"),__vite__mapDeps([6,1,2,7,8,4,9,10,11,3,12,13,14]))):t==="marital"?p(()=>f(()=>import("./MaritalStep-BE56kGyF.js"),__vite__mapDeps([15,1,2,7,8,4,9,10,11,3,12,13,16]))):t==="children"?p(()=>f(()=>import("./ChildrenStep-DyqlyPDG.js"),__vite__mapDeps([17,1,2,7,8,4,11,3,12,18,9,19]))):t==="income"?p(()=>f(()=>import("./IncomeStep-hqFZm4PA.js"),__vite__mapDeps([20,1,2,7,8,4,3,21]))):null}),h=g(()=>e[a.value]);function n(t){if(typeof t=="string"){const l=e.findIndex(d=>d.id===t);if(l!==-1){a.value=l;return}}a.value<e.length-1&&a.value++}function y(t){if(typeof t=="string"){const l=e.findIndex(d=>d.id===t);if(l!==-1){a.value=l;return}}a.value>0&&a.value--}return(t,l)=>(s(),m("div",K,[C("div",M,[v(N,{dense:"",bordered:"",class:"vertical-nav"},{default:u(()=>[(s(!0),m(L,null,V(S(e),(d,x)=>(s(),I(T,{key:d.id,clickable:"",onClick:te=>a.value=x,active:a.value===x},{default:u(()=>[v(j,null,{default:u(()=>[C("div",X,b(x+1)+". "+b(d.title),1)]),_:2},1024)]),_:2},1032,["onClick","active"]))),128))]),_:1})]),C("div",G,[v(z,{flat:"",class:"q-pa-md full-height"},{default:u(()=>[v(q,null,{default:u(()=>[_.value?B("",!0):(s(),m("div",J,b(S(e)[a.value]?.title),1)),_.value&&h.value?(s(),I(F(_.value),{key:1,step:h.value,onNext:n,onPrev:y},null,40,["step"])):(s(),m("div",U))]),_:1})]),_:1})])]))}}),E=(r,o)=>{const i=r.__vccOpts||r;for(const[e,a]of o)i[e]=a;return i},Y=E(W,[["__scopeId","data-v-eaa5d621"]]),Z=k({__name:"IndexPage",setup(r){return(o,i)=>(s(),I(H,{class:"row full-width justify-center full-height"},{default:u(()=>[v(Y,{class:"no-shadow full-height full-width"})]),_:1}))}}),ee=E(Z,[["__scopeId","data-v-1cafec6b"]]),re=Object.freeze(Object.defineProperty({__proto__:null,default:ee},Symbol.toStringTag,{value:"Module"}));export{re as I,E as _};

View File

@@ -0,0 +1 @@
.q-stepper[data-v-a035370f]{max-width:900px;margin:0 auto}.full-height[data-v-a035370f]{height:100%}.vertical-nav .q-item[data-v-a035370f]{border-radius:4px;margin-bottom:4px;max-width:350px}.vertical-nav .q-item--active[data-v-a035370f]{background-color:var(--q-color-primary)!important}.vertical-nav .q-item--active .text-body1[data-v-a035370f],.vertical-nav .q-item--active .q-item__label[data-v-a035370f]{font-weight:700!important}[data-v-1cafec6b] .no-shadow .q-stepper{box-shadow:none!important;height:100%!important;width:100%!important}[data-v-1cafec6b] .no-shadow .q-stepper .q-step__content,[data-v-1cafec6b] .no-shadow .q-stepper .q-card{height:100%!important}

View File

@@ -1 +0,0 @@
.q-stepper[data-v-eaa5d621]{max-width:900px;margin:0 auto}.full-height[data-v-eaa5d621]{height:100%}.vertical-nav .q-item[data-v-eaa5d621]{border-radius:4px;margin-bottom:4px;max-width:350px}.vertical-nav .q-item--active[data-v-eaa5d621]{background-color:var(--q-color-primary)!important}.vertical-nav .q-item--active .text-body1[data-v-eaa5d621],.vertical-nav .q-item--active .q-item__label[data-v-eaa5d621]{font-weight:700!important}[data-v-1cafec6b] .no-shadow .q-stepper{box-shadow:none!important;height:100%!important;width:100%!important}[data-v-1cafec6b] .no-shadow .q-stepper .q-step__content,[data-v-1cafec6b] .no-shadow .q-stepper .q-card{height:100%!important}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
.full-width[data-v-22af3ece]{width:100%}.contained-card[data-v-22af3ece]{min-width:480px;max-width:720px}.contained-card .q-card-section[data-v-22af3ece]{padding:16px}.contained-card .q-card-actions[data-v-22af3ece]{padding:12px 16px}.child-modal[data-v-22af3ece]{min-width:480px}

View File

@@ -0,0 +1 @@
import{as as P,$ as q,r as A,a as M,o as S,j as Q,w as b,a0 as v,a3 as c,a1 as f,a4 as n,ae as U,a5 as r,a8 as B,a9 as e,a6 as E,am as K,aa as D,af as _,an as u,ao as O,ah as R}from"./index-GXFLJtQL.js";import{Q as I}from"./QSelect-mYEcqVHl.js";import{Q as N}from"./QChip-DE2_FO3B.js";import{P as C}from"./LocalStorage-DjXJ9f5H.js";import{u as H}from"./vue-i18n.runtime-BXSOjn_j.js";import{_ as T}from"./IndexPage-C20RwqJI.js";import"./QList-BZpTot_c.js";import"./QMenu-MNqKCtrf.js";const y="professionalExpenses:v1",h={expensesChanged:!1,workplaceDescription:"",commuteMethod:null,commuteKm:null,lunchAtHome:!1,eatsOut:!1,hasCanteenOrVouchers:!1};function j(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}const F=P("professionalexpensesstore",{state:()=>{try{let t=C.getItem(y);if(typeof t=="string")try{t=JSON.parse(t)}catch{t=null}if(j(t)){const i={...h,...t};return{data:{...i,hasCanteenOrVouchers:i.hasCanteenOrVouchers===!0}}}}catch{}return{data:{...h}}},actions:{persist(){try{C.set(y,this.data)}catch(t){console.error("professionalExpenses.store: persist error",t)}},getProfessionalExpenses(){return this.data},setProfessionalExpenses(t){this.data={...this.data,...t},this.persist()},replaceProfessionalExpenses(t){this.data=t,this.persist()},resetProfessionalExpenses(){this.data={...h},this.persist()}}}),L={class:"row items-center"},G={class:"col"},J={class:"text-h6"},W={class:"col-auto"},Y={class:"row items-center"},$={class:"col"},z={key:0,class:"q-mt-md"},X={class:"row"},Z={class:"col-6 q-pr-md"},ee={class:"col-6"},se={class:"column"},te=q({__name:"ProfessionalExpensesStep",props:{step:{}},emits:["next","prev"],setup(t,{emit:i}){const m=F(),x=t,V=i,{t:o}=H(),p=A(null),s=m.data,k=M(()=>[{label:o("professionalExpenses.commuteMethodOptions.car"),value:"CAR"},{label:o("professionalExpenses.commuteMethodOptions.bus"),value:"BUS"},{label:o("professionalExpenses.commuteMethodOptions.bike"),value:"BIKE"},{label:o("professionalExpenses.commuteMethodOptions.walk"),value:"WALK"}]);S(async()=>{await Q(),p.value?.resetValidation?.()}),b(()=>s,()=>{m.persist()},{deep:!0}),b(()=>s.eatsOut,d=>{d||(s.hasCanteenOrVouchers=!1)});async function w(){try{if(await(p.value?.validate?.()??!0)===!1)return}catch{return}m.setProfessionalExpenses(s),V("next",x.step?.next)}function g(){m.setProfessionalExpenses(s),V("prev",x.step?.prev)}return(d,a)=>(c(),v(R,{flat:"",class:"full-width q-pa-none"},{default:f(()=>[n(U,{class:"full-width"},{default:f(()=>[r("div",L,[r("div",G,[r("div",J,B(e(o)("PRO")),1)]),r("div",W,[n(E,{flat:"",label:e(o)("button.prev"),onClick:g,class:"q-mr-sm"},null,8,["label"]),n(E,{color:"primary",label:e(o)("button.next"),onClick:w},null,8,["label"])])]),n(K,{class:"q-my-sm"}),n(N,{ref_key:"formRef",ref:p,class:"q-gutter-md q-mt-md"},{default:f(()=>[r("div",Y,[r("div",$,[n(u,{modelValue:e(s).expensesChanged,"onUpdate:modelValue":a[0]||(a[0]=l=>e(s).expensesChanged=l),label:e(o)("professionalExpenses.expensesChanged")},null,8,["modelValue","label"])])]),e(s).expensesChanged?(c(),D("div",z,[n(O,{modelValue:e(s).workplaceDescription,"onUpdate:modelValue":a[1]||(a[1]=l=>e(s).workplaceDescription=l),label:e(o)("professionalExpenses.workplaceDescription"),type:"text",outlined:""},null,8,["modelValue","label"]),r("div",X,[r("div",Z,[n(I,{modelValue:e(s).commuteMethod,"onUpdate:modelValue":a[2]||(a[2]=l=>e(s).commuteMethod=l),options:k.value,label:e(o)("professionalExpenses.commuteMethod"),"emit-value":"","map-options":"",outlined:"",class:"q-mt-md"},null,8,["modelValue","options","label"])]),r("div",ee,[n(O,{modelValue:e(s).commuteKm,"onUpdate:modelValue":a[3]||(a[3]=l=>e(s).commuteKm=l),modelModifiers:{number:!0},label:e(o)("professionalExpenses.commuteKm"),type:"number",outlined:"",class:"q-mt-md"},null,8,["modelValue","label"])])]),r("div",se,[n(u,{modelValue:e(s).lunchAtHome,"onUpdate:modelValue":a[4]||(a[4]=l=>e(s).lunchAtHome=l),label:e(o)("professionalExpenses.lunchAtHome"),class:"q-mt-md"},null,8,["modelValue","label"]),n(u,{modelValue:e(s).eatsOut,"onUpdate:modelValue":a[5]||(a[5]=l=>e(s).eatsOut=l),label:e(o)("professionalExpenses.eatsOut"),class:"q-mt-md"},null,8,["modelValue","label"]),e(s).eatsOut?(c(),v(u,{key:0,modelValue:e(s).hasCanteenOrVouchers,"onUpdate:modelValue":a[6]||(a[6]=l=>e(s).hasCanteenOrVouchers=l),label:e(o)("professionalExpenses.hasCanteenOrVouchers"),class:"q-mt-md"},null,8,["modelValue","label"])):_("",!0)])])):_("",!0)]),_:1},512)]),_:1})]),_:1}))}}),pe=T(te,[["__scopeId","data-v-22af3ece"]]);export{pe as default};

1
app/dist/spa/assets/QChip-DE2_FO3B.js vendored Normal file
View File

@@ -0,0 +1 @@
import{c as I,r as V,M as F,N as A,o as E,g as P,h as f,b as D,aY as Q,H as _,j as $,aT as j,W as w,aZ as z,a_ as O,I as K,J as L,a$ as M,a as g,V as N,b0 as H,aH as k,b1 as T}from"./index-GXFLJtQL.js";const Z=I({name:"QForm",props:{autofocus:Boolean,noErrorFocus:Boolean,noResetFocus:Boolean,greedy:Boolean,onSubmit:Function},emits:["reset","validationSuccess","validationError"],setup(e,{slots:C,emit:u}){const v=P(),r=V(null);let s=0;const l=[];function S(o){const a=typeof o=="boolean"?o:e.noErrorFocus!==!0,m=++s,t=(n,i)=>{u(`validation${n===!0?"Success":"Error"}`,i)},h=n=>{const i=n.validate();return typeof i.then=="function"?i.then(c=>({valid:c,comp:n}),c=>({valid:!1,comp:n,err:c})):Promise.resolve({valid:i,comp:n})};return(e.greedy===!0?Promise.all(l.map(h)).then(n=>n.filter(i=>i.valid!==!0)):l.reduce((n,i)=>n.then(()=>h(i).then(c=>{if(c.valid===!1)return Promise.reject(c)})),Promise.resolve()).catch(n=>[n])).then(n=>{if(n===void 0||n.length===0)return m===s&&t(!0),!0;if(m===s){const{comp:i,err:c}=n[0];if(c!==void 0&&console.error(c),t(!1,i),a===!0){const B=n.find(({comp:R})=>typeof R.focus=="function"&&Q(R.$)===!1);B!==void 0&&B.comp.focus()}}return!1})}function q(){s++,l.forEach(o=>{typeof o.resetValidation=="function"&&o.resetValidation()})}function b(o){o!==void 0&&_(o);const a=s+1;S().then(m=>{a===s&&m===!0&&(e.onSubmit!==void 0?u("submit",o):o?.target!==void 0&&typeof o.target.submit=="function"&&o.target.submit())})}function y(o){o!==void 0&&_(o),u("reset"),$(()=>{q(),e.autofocus===!0&&e.noResetFocus!==!0&&d()})}function d(){j(()=>{if(r.value===null)return;(r.value.querySelector("[autofocus][tabindex], [data-autofocus][tabindex]")||r.value.querySelector("[autofocus] [tabindex], [data-autofocus] [tabindex]")||r.value.querySelector("[autofocus], [data-autofocus]")||Array.prototype.find.call(r.value.querySelectorAll("[tabindex]"),a=>a.tabIndex!==-1))?.focus({preventScroll:!0})})}w(z,{bindComponent(o){l.push(o)},unbindComponent(o){const a=l.indexOf(o);a!==-1&&l.splice(a,1)}});let x=!1;return F(()=>{x=!0}),A(()=>{x===!0&&e.autofocus===!0&&d()}),E(()=>{e.autofocus===!0&&d()}),Object.assign(v.proxy,{validate:S,resetValidation:q,submit:b,reset:y,focus:d,getValidationComponents:()=>l}),()=>f("form",{class:"q-form",ref:r,onSubmit:b,onReset:y},D(C.default))}}),J={xs:8,sm:10,md:14,lg:20,xl:24},G=I({name:"QChip",props:{...K,...O,dense:Boolean,icon:String,iconRight:String,iconRemove:String,iconSelected:String,label:[String,Number],color:String,textColor:String,modelValue:{type:Boolean,default:!0},selected:{type:Boolean,default:null},square:Boolean,outline:Boolean,clickable:Boolean,removable:Boolean,removeAriaLabel:String,tabindex:[String,Number],disable:Boolean,ripple:{type:[Boolean,Object],default:!0}},emits:["update:modelValue","update:selected","remove","click"],setup(e,{slots:C,emit:u}){const{proxy:{$q:v}}=P(),r=L(e,v),s=M(e,J),l=g(()=>e.selected===!0||e.icon!==void 0),S=g(()=>e.selected===!0?e.iconSelected||v.iconSet.chip.selected:e.icon),q=g(()=>e.iconRemove||v.iconSet.chip.remove),b=g(()=>e.disable===!1&&(e.clickable===!0||e.selected!==null)),y=g(()=>{const t=e.outline===!0&&e.color||e.textColor;return"q-chip row inline no-wrap items-center"+(e.outline===!1&&e.color!==void 0?` bg-${e.color}`:"")+(t?` text-${t} q-chip--colored`:"")+(e.disable===!0?" disabled":"")+(e.dense===!0?" q-chip--dense":"")+(e.outline===!0?" q-chip--outline":"")+(e.selected===!0?" q-chip--selected":"")+(b.value===!0?" q-chip--clickable cursor-pointer non-selectable q-hoverable":"")+(e.square===!0?" q-chip--square":"")+(r.value===!0?" q-chip--dark q-dark":"")}),d=g(()=>{const t=e.disable===!0?{tabindex:-1,"aria-disabled":"true"}:{tabindex:e.tabindex||0},h={...t,role:"button","aria-hidden":"false","aria-label":e.removeAriaLabel||v.lang.label.remove};return{chip:t,remove:h}});function x(t){t.keyCode===13&&o(t)}function o(t){e.disable||(u("update:selected",!e.selected),u("click",t))}function a(t){(t.keyCode===void 0||t.keyCode===13)&&(_(t),e.disable===!1&&(u("update:modelValue",!1),u("remove")))}function m(){const t=[];b.value===!0&&t.push(f("div",{class:"q-focus-helper"})),l.value===!0&&t.push(f(k,{class:"q-chip__icon q-chip__icon--left",name:S.value}));const h=e.label!==void 0?[f("div",{class:"ellipsis"},[e.label])]:void 0;return t.push(f("div",{class:"q-chip__content col row no-wrap items-center q-anchor--skip"},T(C.default,h))),e.iconRight&&t.push(f(k,{class:"q-chip__icon q-chip__icon--right",name:e.iconRight})),e.removable===!0&&t.push(f(k,{class:"q-chip__icon q-chip__icon--remove cursor-pointer",name:q.value,...d.value.remove,onClick:a,onKeyup:a})),t}return()=>{if(e.modelValue===!1)return;const t={class:y.value,style:s.value};return b.value===!0&&Object.assign(t,d.value.chip,{onClick:o,onKeyup:x}),N("div",t,m(),"ripple",e.ripple!==!1&&e.disable!==!0,()=>[[H,e.ripple]])}}});export{Z as Q,G as a};

View File

@@ -1 +0,0 @@
import{c as v,a,h as c,b as q,aj as I,H as k,g,I as y,ak as A,r as b,al as K,G as R,p as $}from"./index-CBamscxj.js";const D=v({name:"QItemSection",props:{avatar:Boolean,thumbnail:Boolean,side:Boolean,top:Boolean,noWrap:Boolean},setup(e,{slots:n}){const l=a(()=>`q-item__section column q-item__section--${e.avatar===!0||e.side===!0||e.thumbnail===!0?"side":"main"}`+(e.top===!0?" q-item__section--top justify-start":" justify-center")+(e.avatar===!0?" q-item__section--avatar":"")+(e.thumbnail===!0?" q-item__section--thumbnail":"")+(e.noWrap===!0?" q-item__section--nowrap":""));return()=>c("div",{class:l.value},q(n.default))}}),F=v({name:"QItem",props:{...k,...I,tag:{type:String,default:"div"},active:{type:Boolean,default:null},clickable:Boolean,dense:Boolean,insetLevel:Number,tabindex:[String,Number],focused:Boolean,manualFocus:Boolean},emits:["click","keyup"],setup(e,{slots:n,emit:l}){const{proxy:{$q:i}}=g(),d=y(e,i),{hasLink:s,linkAttrs:h,linkClass:B,linkTag:_,navigateOnClick:C}=A(),o=b(null),r=b(null),m=a(()=>e.clickable===!0||s.value===!0||e.tag==="label"),u=a(()=>e.disable!==!0&&m.value===!0),x=a(()=>"q-item q-item-type row no-wrap"+(e.dense===!0?" q-item--dense":"")+(d.value===!0?" q-item--dark":"")+(s.value===!0&&e.active===null?B.value:e.active===!0?` q-item--active${e.activeClass!==void 0?` ${e.activeClass}`:""}`:"")+(e.disable===!0?" disabled":"")+(u.value===!0?" q-item--clickable q-link cursor-pointer "+(e.manualFocus===!0?"q-manual-focusable":"q-focusable q-hoverable")+(e.focused===!0?" q-manual-focusable--focused":""):"")),L=a(()=>e.insetLevel===void 0?null:{["padding"+(i.lang.rtl===!0?"Right":"Left")]:16+e.insetLevel*56+"px"});function E(t){u.value===!0&&(r.value!==null&&t.qAvoidFocus!==!0&&(t.qKeyEvent!==!0&&document.activeElement===o.value?r.value.focus():document.activeElement===r.value&&o.value.focus()),C(t))}function Q(t){if(u.value===!0&&K(t,[13,32])===!0){R(t),t.qKeyEvent=!0;const f=new MouseEvent("click",t);f.qKeyEvent=!0,o.value.dispatchEvent(f)}l("keyup",t)}function S(){const t=$(n.default,[]);return u.value===!0&&t.unshift(c("div",{class:"q-focus-helper",tabindex:-1,ref:r})),t}return()=>{const t={ref:o,class:x.value,style:L.value,role:"listitem",onClick:E,onKeyup:Q};return u.value===!0?(t.tabindex=e.tabindex||"0",Object.assign(t,h.value)):m.value===!0&&(t["aria-disabled"]="true"),c(_.value,t,S())}}}),j=["ul","ol"],P=v({name:"QList",props:{...k,bordered:Boolean,dense:Boolean,separator:Boolean,padding:Boolean,tag:{type:String,default:"div"}},setup(e,{slots:n}){const l=g(),i=y(e,l.proxy.$q),d=a(()=>j.includes(e.tag)?null:"list"),s=a(()=>"q-list"+(e.bordered===!0?" q-list--bordered":"")+(e.dense===!0?" q-list--dense":"")+(e.separator===!0?" q-list--separator":"")+(i.value===!0?" q-list--dark":"")+(e.padding===!0?" q-list--padding":""));return()=>c(e.tag,{class:s.value,role:d.value},q(n.default))}});export{P as Q,F as a,D as b};

1
app/dist/spa/assets/QList-BZpTot_c.js vendored Normal file
View File

@@ -0,0 +1 @@
import{c as v,a,h as c,b,aj as I,I as k,g,J as y,ak as A,r as q,al as K,H as R,q as $}from"./index-GXFLJtQL.js";const D=v({name:"QItemSection",props:{avatar:Boolean,thumbnail:Boolean,side:Boolean,top:Boolean,noWrap:Boolean},setup(e,{slots:n}){const l=a(()=>`q-item__section column q-item__section--${e.avatar===!0||e.side===!0||e.thumbnail===!0?"side":"main"}`+(e.top===!0?" q-item__section--top justify-start":" justify-center")+(e.avatar===!0?" q-item__section--avatar":"")+(e.thumbnail===!0?" q-item__section--thumbnail":"")+(e.noWrap===!0?" q-item__section--nowrap":""));return()=>c("div",{class:l.value},b(n.default))}}),F=v({name:"QItem",props:{...k,...I,tag:{type:String,default:"div"},active:{type:Boolean,default:null},clickable:Boolean,dense:Boolean,insetLevel:Number,tabindex:[String,Number],focused:Boolean,manualFocus:Boolean},emits:["click","keyup"],setup(e,{slots:n,emit:l}){const{proxy:{$q:i}}=g(),d=y(e,i),{hasLink:s,linkAttrs:h,linkClass:B,linkTag:_,navigateOnClick:C}=A(),o=q(null),r=q(null),m=a(()=>e.clickable===!0||s.value===!0||e.tag==="label"),u=a(()=>e.disable!==!0&&m.value===!0),x=a(()=>"q-item q-item-type row no-wrap"+(e.dense===!0?" q-item--dense":"")+(d.value===!0?" q-item--dark":"")+(s.value===!0&&e.active===null?B.value:e.active===!0?` q-item--active${e.activeClass!==void 0?` ${e.activeClass}`:""}`:"")+(e.disable===!0?" disabled":"")+(u.value===!0?" q-item--clickable q-link cursor-pointer "+(e.manualFocus===!0?"q-manual-focusable":"q-focusable q-hoverable")+(e.focused===!0?" q-manual-focusable--focused":""):"")),L=a(()=>e.insetLevel===void 0?null:{["padding"+(i.lang.rtl===!0?"Right":"Left")]:16+e.insetLevel*56+"px"});function E(t){u.value===!0&&(r.value!==null&&t.qAvoidFocus!==!0&&(t.qKeyEvent!==!0&&document.activeElement===o.value?r.value.focus():document.activeElement===r.value&&o.value.focus()),C(t))}function Q(t){if(u.value===!0&&K(t,[13,32])===!0){R(t),t.qKeyEvent=!0;const f=new MouseEvent("click",t);f.qKeyEvent=!0,o.value.dispatchEvent(f)}l("keyup",t)}function S(){const t=$(n.default,[]);return u.value===!0&&t.unshift(c("div",{class:"q-focus-helper",tabindex:-1,ref:r})),t}return()=>{const t={ref:o,class:x.value,style:L.value,role:"listitem",onClick:E,onKeyup:Q};return u.value===!0?(t.tabindex=e.tabindex||"0",Object.assign(t,h.value)):m.value===!0&&(t["aria-disabled"]="true"),c(_.value,t,S())}}}),j=["ul","ol"],P=v({name:"QList",props:{...k,bordered:Boolean,dense:Boolean,separator:Boolean,padding:Boolean,tag:{type:String,default:"div"}},setup(e,{slots:n}){const l=g(),i=y(e,l.proxy.$q),d=a(()=>j.includes(e.tag)?null:"list"),s=a(()=>"q-list"+(e.bordered===!0?" q-list--bordered":"")+(e.dense===!0?" q-list--dense":"")+(e.separator===!0?" q-list--separator":"")+(i.value===!0?" q-list--dark":"")+(e.padding===!0?" q-list--padding":""));return()=>c(e.tag,{class:s.value,role:d.value},b(n.default))}});export{P as Q,F as a,D as b};

1
app/dist/spa/assets/QMenu-MNqKCtrf.js vendored Normal file
View File

@@ -0,0 +1 @@
import{c as ae,P as ne,t as se,aI as ue,I as le,Q as ie,g as re,r as D,a as u,J as ce,aJ as fe,R as de,aK as ve,S as ge,aL as he,w,aM as me,aN as M,aO as Pe,D as Te,aP as ye,u as Se,aQ as ke,aR as Ce,h as R,b as xe,aS as Oe,f as qe,aT as Ee,H as be}from"./index-GXFLJtQL.js";import{v as Be,a as A,u as Fe,d as De,e as we,p as H,f as Me,r as K,s as Re}from"./LocalStorage-DjXJ9f5H.js";const Ke=ae({name:"QMenu",inheritAttrs:!1,props:{...Fe,...ie,...le,...ue,persistent:Boolean,autoClose:Boolean,separateClosePopup:Boolean,noEscDismiss:Boolean,noRouteDismiss:Boolean,noRefocus:Boolean,noFocus:Boolean,fit:Boolean,cover:Boolean,square:Boolean,anchor:{type:String,validator:A},self:{type:String,validator:A},offset:{type:Array,validator:Be},scrollTarget:se,touchPosition:Boolean,maxHeight:{type:String,default:null},maxWidth:{type:String,default:null}},emits:[...ne,"click","escapeKey"],setup(t,{slots:Q,emit:c,attrs:d}){let n=null,f,l,v;const y=re(),{proxy:g}=y,{$q:o}=g,a=D(null),s=D(!1),I=u(()=>t.persistent!==!0&&t.noRouteDismiss!==!0),W=ce(t,o),{registerTick:J,removeTick:L}=fe(),{registerTimeout:S}=de(),{transitionProps:_,transitionStyle:j}=ve(t),{localScrollTarget:k,changeScrollEvent:N,unconfigureScrollTarget:U}=De(t,B),{anchorEl:i,canShow:$}=we({showing:s}),{hide:C}=ge({showing:s,canShow:$,handleShow:Y,handleHide:Z,hideOnRouteChange:I,processOnMount:!0}),{showPortal:x,hidePortal:O,renderPortal:z}=he(y,a,ee,"menu"),h={anchorEl:i,innerRef:a,onClickOutside(e){if(t.persistent!==!0&&s.value===!0)return C(e),(e.type==="touchstart"||e.target.classList.contains("q-dialog__backdrop"))&&be(e),!0}},q=u(()=>H(t.anchor||(t.cover===!0?"center middle":"bottom start"),o.lang.rtl)),G=u(()=>t.cover===!0?q.value:H(t.self||"top start",o.lang.rtl)),V=u(()=>(t.square===!0?" q-menu--square":"")+(W.value===!0?" q-menu--dark q-dark":"")),X=u(()=>t.autoClose===!0?{onClick:p}:{}),E=u(()=>s.value===!0&&t.persistent!==!0);w(E,e=>{e===!0?(me(P),Me(h)):(M(P),K(h))});function m(){Ee(()=>{let e=a.value;e&&e.contains(document.activeElement)!==!0&&(e=e.querySelector("[autofocus][tabindex], [data-autofocus][tabindex]")||e.querySelector("[autofocus] [tabindex], [data-autofocus] [tabindex]")||e.querySelector("[autofocus], [data-autofocus]")||e,e.focus({preventScroll:!0}))})}function Y(e){if(n=t.noRefocus===!1?document.activeElement:null,Pe(F),x(),B(),f=void 0,e!==void 0&&(t.touchPosition||t.contextMenu)){const T=Te(e);if(T.left!==void 0){const{top:te,left:oe}=i.value.getBoundingClientRect();f={left:T.left-oe,top:T.top-te}}}l===void 0&&(l=w(()=>o.screen.width+"|"+o.screen.height+"|"+t.self+"|"+t.anchor+"|"+o.lang.rtl,r)),t.noFocus!==!0&&document.activeElement.blur(),J(()=>{r(),t.noFocus!==!0&&m()}),S(()=>{o.platform.is.ios===!0&&(v=t.autoClose,a.value.click()),r(),x(!0),c("show",e)},t.transitionDuration)}function Z(e){L(),O(),b(!0),n!==null&&(e===void 0||e.qClickOutside!==!0)&&(((e?.type.indexOf("key")===0?n.closest('[tabindex]:not([tabindex^="-"])'):void 0)||n).focus(),n=null),S(()=>{O(!0),c("hide",e)},t.transitionDuration)}function b(e){f=void 0,l!==void 0&&(l(),l=void 0),(e===!0||s.value===!0)&&(ye(F),U(),K(h),M(P)),e!==!0&&(n=null)}function B(){(i.value!==null||t.scrollTarget!==void 0)&&(k.value=Se(i.value,t.scrollTarget),N(k.value,r))}function p(e){v!==!0?(ke(g,e),c("click",e)):v=!1}function F(e){E.value===!0&&t.noFocus!==!0&&Ce(a.value,e.target)!==!0&&m()}function P(e){t.noEscDismiss!==!0&&(c("escapeKey"),C(e))}function r(){Re({targetEl:a.value,offset:t.offset,anchorEl:i.value,anchorOrigin:q.value,selfOrigin:G.value,absoluteOffset:f,fit:t.fit,cover:t.cover,maxHeight:t.maxHeight,maxWidth:t.maxWidth})}function ee(){return R(Oe,_.value,()=>s.value===!0?R("div",{role:"menu",...d,ref:a,tabindex:-1,class:["q-menu q-position-engine scroll"+V.value,d.class],style:[d.style,j.value],...X.value},xe(Q.default)):null)}return qe(b),Object.assign(g,{focus:m,updatePosition:r}),z}});export{Ke as Q};

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
import{as as V,$ as k,r as C,o as g,j as w,w as q,a0 as f,a3 as h,a1 as m,a4 as a,ae as Q,a5 as i,a8 as A,a9 as t,a6 as I,am as D,af as N,an as B,ah as R}from"./index-GXFLJtQL.js";import{Q as T}from"./QChip-DE2_FO3B.js";import{P as S}from"./LocalStorage-DjXJ9f5H.js";import{C as E}from"./CommentAttachment-DGUhSBXt.js";import{u as P}from"./vue-i18n.runtime-BXSOjn_j.js";import{_ as U}from"./IndexPage-C20RwqJI.js";import"./userstore-SjLknvTP.js";import"./QList-BZpTot_c.js";const _="sideIncome:v1",d={hasSideIncome:!1,sideIncomeDocuments:{comments:"",attachments:[]}};function j(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}const F=V("sideincomestore",{state:()=>{try{let e=S.getItem(_);if(typeof e=="string")try{e=JSON.parse(e)}catch{e=null}if(j(e))return{data:{...d,...e}}}catch{}return{data:{...d}}},actions:{persist(){try{S.set(_,this.data)}catch(e){console.error("sideIncome.store: persist error",e)}},getSideIncome(){return this.data},setSideIncome(e){this.data={...this.data,...e},this.persist()},replaceSideIncome(e){this.data=e,this.persist()},resetSideIncome(){this.data={...d},this.persist()}}}),O={class:"row items-center"},G={class:"col"},J={class:"text-h6"},K={class:"col-auto"},L=k({__name:"SideIncomeStep",props:{step:{}},emits:["next","prev"],setup(e,{emit:y}){const u=e,p=y,{t:o}=P(),n=F(),s=n.data,c=C(null);g(async()=>{await w(),c.value?.resetValidation?.()}),q(()=>s,()=>{n.persist()},{deep:!0});async function v(){try{if(await(c.value?.validate?.()??!0)===!1)return}catch{return}n.setSideIncome(s),p("next",u.step?.next)}function b(){n.setSideIncome(s),p("prev",u.step?.prev)}return(x,r)=>(h(),f(R,{flat:"",class:"full-width q-pa-none"},{default:m(()=>[a(Q,{class:"full-width"},{default:m(()=>[i("div",O,[i("div",G,[i("div",J,A(t(o)("SID")),1)]),i("div",K,[a(I,{flat:"",label:t(o)("button.prev"),onClick:b,class:"q-mr-sm"},null,8,["label"]),a(I,{color:"primary",label:t(o)("button.next"),onClick:v},null,8,["label"])])]),a(D,{class:"q-my-sm"}),a(T,{ref_key:"formRef",ref:c,class:"q-gutter-md q-mt-md"},{default:m(()=>[a(B,{class:"q-mb-md",modelValue:t(s).hasSideIncome,"onUpdate:modelValue":r[0]||(r[0]=l=>t(s).hasSideIncome=l),label:t(o)("sideIncome.hasSideIncome")},null,8,["modelValue","label"]),t(s).hasSideIncome?(h(),f(E,{key:0,class:"q-mt-none",modelValue:t(s).sideIncomeDocuments,"onUpdate:modelValue":r[1]||(r[1]=l=>t(s).sideIncomeDocuments=l),label:t(o)("sideIncome.attachments"),id:"documents"},null,8,["modelValue","label"])):N("",!0)]),_:1},512)]),_:1})]),_:1}))}}),ee=U(L,[["__scopeId","data-v-be25d2d0"]]);export{ee as default};

View File

@@ -0,0 +1 @@
.full-width[data-v-be25d2d0]{width:100%}

View File

@@ -1 +0,0 @@
import{$ as T,Z as k,r as w,a as d,o as A,f as Q,a0 as R,a3 as b,a1 as c,a4 as r,ae as S,a5 as n,a8 as I,ac as l,a6 as x,am as F,a9 as M,af as j,an as E,ao as f,ah as L}from"./index-CBamscxj.js";import{Q as O}from"./userstore-t-JK1J0e.js";import{u as X}from"./taxstore-Cn_AGwIc.js";import{A as Z}from"./AddressInput-DRy7VRhk.js";import{C as $}from"./CommentAttachment-B387hLmi.js";import{u as z}from"./vue-i18n.runtime-BGZkCWQI.js";import{_ as G}from"./IndexPage-CArgvUEp.js";import"./LocalStorage-fNBzdRj6.js";import"./QList-1f0ZmkRo.js";const H={class:"row items-center"},J={class:"col"},K={class:"text-h5"},W={class:"col-auto"},Y={class:"row items-center q-gutter-md q-mb-sm q-ml-none"},ee={class:"col q-ml-none"},ae={key:0,class:"q-mt-sm"},te=T({__name:"TaxpayerStep",props:{step:{}},emits:["next","prev"],setup(V,{emit:N}){const _=V,v=N,y=_.step,i=X(),e=k({}),{t:s}=z(),u=w(null),D=(o="Required")=>{const a=s("validation.required");return a&&a!=="validation.required"?a:o},m=o=>a=>{const t=o||D();return a==null?t:typeof a=="string"?a.trim()!==""||t:Array.isArray(a)?a.length>0||t:!0},p=d(()=>!!e.prevPreparedByUs),g=d(()=>p.value?[]:[m()]),q=d(()=>p.value?[]:[m()]),B=d(()=>p.value?[]:[m()]);A(async()=>{const o=i.getTaxpayer()||{};Object.assign(e,o),await Q(),u.value?.resetValidation?.()});async function U(){try{if(await(u.value?.validate?.()??!0)===!1)return}catch{return}i.setTaxpayer({prevPreparedByUs:e.prevPreparedByUs,prevDeclaration:e.prevDeclaration,firstName:e.firstName,lastName:e.lastName,birthDate:e.birthDate,address:e.address}),v("next",y.next)}function h(){i.setTaxpayer({prevPreparedByUs:e.prevPreparedByUs,prevDeclaration:e.prevDeclaration,firstName:e.firstName,lastName:e.lastName,birthDate:e.birthDate,address:e.address}),v("prev",y.prev)}function C(){}function P(){}return(o,a)=>(b(),R(L,{flat:"",class:"full-width q-pa-none"},{default:c(()=>[r(S,{class:"full-width"},{default:c(()=>[n("div",H,[n("div",J,[n("div",K,I(l(s)("TAX")),1)]),n("div",W,[r(x,{flat:"",color:"secondary",label:l(s)("button.prev"),onClick:h,class:"q-mr-sm"},null,8,["label"]),r(x,{color:"primary",label:l(s)("button.next"),onClick:U},null,8,["label"])])]),r(F,{class:"q-my-sm"}),r(O,{ref_key:"formRef",ref:u,class:"q-gutter-md q-mt-md"},{default:c(()=>[n("div",Y,[n("div",ee,[r(E,{modelValue:e.prevPreparedByUs,"onUpdate:modelValue":a[0]||(a[0]=t=>e.prevPreparedByUs=t),label:l(s)("taxpayer.prevPreparedByUs")},null,8,["modelValue","label"])])]),e.prevPreparedByUs?(b(),M("div",ae,[r($,{modelValue:e.prevDeclaration,"onUpdate:modelValue":a[1]||(a[1]=t=>e.prevDeclaration=t),label:l(s)("taxpayer.prevDeclaration"),id:"taxpayer"},null,8,["modelValue","label"])])):j("",!0),n("div",null,[r(f,{modelValue:e.firstName,"onUpdate:modelValue":a[2]||(a[2]=t=>e.firstName=t),label:l(s)("taxpayer.firstName"),rules:g.value},null,8,["modelValue","label","rules"]),r(f,{modelValue:e.lastName,"onUpdate:modelValue":a[3]||(a[3]=t=>e.lastName=t),label:l(s)("taxpayer.lastName"),rules:q.value},null,8,["modelValue","label","rules"]),r(f,{modelValue:e.birthDate,"onUpdate:modelValue":a[4]||(a[4]=t=>e.birthDate=t),type:"date",label:l(s)("taxpayer.birthDate"),rules:B.value},null,8,["modelValue","label","rules"]),r(Z,{modelValue:e.address,"onUpdate:modelValue":a[5]||(a[5]=t=>e.address=t),label:l(s)("taxpayer.address"),allowForeign:!0,onSave:P,onCancel:C},null,8,["modelValue","label"])])]),_:1},512)]),_:1})]),_:1}))}}),pe=G(te,[["__scopeId","data-v-e1b08f4f"]]);export{pe as default};

View File

@@ -0,0 +1 @@
import{$ as T,Z as k,r as w,a as d,o as A,j as Q,a0 as R,a3 as b,a1 as c,a4 as r,ae as S,a5 as n,a8 as I,a9 as l,a6 as x,am as F,aa as j,af as M,an as E,ao as f,ah as L}from"./index-GXFLJtQL.js";import{Q as O}from"./QChip-DE2_FO3B.js";import{u as X}from"./taxstore-CFm87Oqg.js";import{A as Z}from"./AddressInput-CoglolOc.js";import{C as $}from"./CommentAttachment-DGUhSBXt.js";import{u as z}from"./vue-i18n.runtime-BXSOjn_j.js";import{_ as G}from"./IndexPage-C20RwqJI.js";import"./LocalStorage-DjXJ9f5H.js";import"./userstore-SjLknvTP.js";import"./AddressModal-Y6dYCZ_T.js";import"./QSelect-mYEcqVHl.js";import"./QList-BZpTot_c.js";import"./QMenu-MNqKCtrf.js";const H={class:"row items-center"},J={class:"col"},K={class:"text-h5"},W={class:"col-auto"},Y={class:"row items-center q-gutter-md q-mb-sm q-ml-none"},ee={class:"col q-ml-none"},ae={key:0,class:"q-mt-sm"},te=T({__name:"TaxpayerStep",props:{step:{}},emits:["next","prev"],setup(V,{emit:N}){const _=V,v=N,y=_.step,i=X(),e=k({}),{t:s}=z(),m=w(null),D=(o="Required")=>{const a=s("validation.required");return a&&a!=="validation.required"?a:o},u=o=>a=>{const t=o||D();return a==null?t:typeof a=="string"?a.trim()!==""||t:Array.isArray(a)?a.length>0||t:!0},p=d(()=>!!e.prevPreparedByUs),g=d(()=>p.value?[]:[u()]),q=d(()=>p.value?[]:[u()]),B=d(()=>p.value?[]:[u()]);A(async()=>{const o=i.getTaxpayer()||{};Object.assign(e,o),await Q(),m.value?.resetValidation?.()});async function U(){try{if(await(m.value?.validate?.()??!0)===!1)return}catch{return}i.setTaxpayer({prevPreparedByUs:e.prevPreparedByUs,prevDeclaration:e.prevDeclaration,firstName:e.firstName,lastName:e.lastName,birthDate:e.birthDate,address:e.address}),v("next",y.next)}function h(){i.setTaxpayer({prevPreparedByUs:e.prevPreparedByUs,prevDeclaration:e.prevDeclaration,firstName:e.firstName,lastName:e.lastName,birthDate:e.birthDate,address:e.address}),v("prev",y.prev)}function C(){}function P(){}return(o,a)=>(b(),R(L,{flat:"",class:"full-width q-pa-none"},{default:c(()=>[r(S,{class:"full-width"},{default:c(()=>[n("div",H,[n("div",J,[n("div",K,I(l(s)("TAX")),1)]),n("div",W,[r(x,{flat:"",color:"secondary",label:l(s)("button.prev"),onClick:h,class:"q-mr-sm"},null,8,["label"]),r(x,{color:"primary",label:l(s)("button.next"),onClick:U},null,8,["label"])])]),r(F,{class:"q-my-sm"}),r(O,{ref_key:"formRef",ref:m,class:"q-gutter-md q-mt-md"},{default:c(()=>[n("div",Y,[n("div",ee,[r(E,{modelValue:e.prevPreparedByUs,"onUpdate:modelValue":a[0]||(a[0]=t=>e.prevPreparedByUs=t),label:l(s)("taxpayer.prevPreparedByUs")},null,8,["modelValue","label"])])]),e.prevPreparedByUs?(b(),j("div",ae,[r($,{modelValue:e.prevDeclaration,"onUpdate:modelValue":a[1]||(a[1]=t=>e.prevDeclaration=t),label:l(s)("taxpayer.prevDeclaration"),id:"taxpayer"},null,8,["modelValue","label"])])):M("",!0),n("div",null,[r(f,{modelValue:e.firstName,"onUpdate:modelValue":a[2]||(a[2]=t=>e.firstName=t),label:l(s)("taxpayer.firstName"),rules:g.value},null,8,["modelValue","label","rules"]),r(f,{modelValue:e.lastName,"onUpdate:modelValue":a[3]||(a[3]=t=>e.lastName=t),label:l(s)("taxpayer.lastName"),rules:q.value},null,8,["modelValue","label","rules"]),r(f,{modelValue:e.birthDate,"onUpdate:modelValue":a[4]||(a[4]=t=>e.birthDate=t),type:"date",label:l(s)("taxpayer.birthDate"),rules:B.value},null,8,["modelValue","label","rules"]),r(Z,{modelValue:e.address,"onUpdate:modelValue":a[5]||(a[5]=t=>e.address=t),label:l(s)("taxpayer.address"),allowForeign:!0,onSave:P,onCancel:C},null,8,["modelValue","label"])])]),_:1},512)]),_:1})]),_:1}))}}),ye=G(te,[["__scopeId","data-v-e1b08f4f"]]);export{ye as default};

View File

@@ -1 +1 @@
import{$ as d,a0 as m,a3 as f,a1 as e,a4 as s,ae as u,a5 as t,a8 as o,ac as c,a6 as h,am as x,ah as v}from"./index-CBamscxj.js";import{u as S}from"./vue-i18n.runtime-BGZkCWQI.js";import{_ as C}from"./IndexPage-CArgvUEp.js";import"./QList-1f0ZmkRo.js";const w={class:"row items-center"},y={class:"col"},B={class:"text-h5"},N={class:"col-auto"},Q=d({__name:"WelcomeStep",props:{step:{}},emits:["next"],setup(n,{emit:r}){const i=n,l=r,a=i.step,{t:p}=S();function _(){l("next",a?.next)}return(g,k)=>(f(),m(v,{flat:"",class:"full-width q-pa-none"},{default:e(()=>[s(u,{class:"full-width"},{default:e(()=>[t("div",w,[t("div",y,[t("div",B,o(c(p)("WEL")),1)]),t("div",N,[s(h,{color:"primary",label:"Avanti",onClick:_})])]),s(x,{class:"q-my-sm"}),t("pre",null,o(JSON.stringify(c(a),null,2)),1)]),_:1})]),_:1}))}}),b=C(Q,[["__scopeId","data-v-f4c03057"]]);export{b as default}; import{$ as d,a0 as m,a3 as f,a1 as e,a4 as s,ae as u,a5 as t,a8 as o,a9 as c,a6 as h,am as x,ah as v}from"./index-GXFLJtQL.js";import{u as S}from"./vue-i18n.runtime-BXSOjn_j.js";import{_ as C}from"./IndexPage-C20RwqJI.js";import"./QList-BZpTot_c.js";const w={class:"row items-center"},y={class:"col"},B={class:"text-h5"},N={class:"col-auto"},Q=d({__name:"WelcomeStep",props:{step:{}},emits:["next"],setup(n,{emit:r}){const i=n,l=r,a=i.step,{t:p}=S();function _(){l("next",a?.next)}return(g,k)=>(f(),m(v,{flat:"",class:"full-width q-pa-none"},{default:e(()=>[s(u,{class:"full-width"},{default:e(()=>[t("div",w,[t("div",y,[t("div",B,o(c(p)("WEL")),1)]),t("div",N,[s(h,{color:"primary",label:"Avanti",onClick:_})])]),s(x,{class:"q-my-sm"}),t("pre",null,o(JSON.stringify(c(a),null,2)),1)]),_:1})]),_:1}))}}),b=C(Q,[["__scopeId","data-v-f4c03057"]]);export{b as default};

View File

@@ -1 +1 @@
import{as as i}from"./index-CBamscxj.js";import{P as r}from"./LocalStorage-fNBzdRj6.js";const s="children:v1",a={hasChildren:!1,children:[],moreThanFiveChildrenNote:""},o=i("childrenstore",{state:()=>{try{let e=r.getItem(s);if(typeof e=="string")try{e=JSON.parse(e)}catch{e=null}if(e&&typeof e=="object")return{data:{...e}}}catch{}return{data:{...a}}},actions:{persist(){try{const e={hasChildren:!!this.data.hasChildren,children:Array.isArray(this.data.children)?this.data.children.map(t=>({firstName:t.firstName,lastName:t.lastName,birthDate:t.birthDate,sameHousehold:t.sameHousehold,alimentiVersati:t.alimentiVersati??!1,school:t.school,hasCareCost:t.hasCareCost??!1,careCosts:t.careCosts,address:t.address??null})):[],moreThanFiveChildrenNote:this.data.moreThanFiveChildrenNote||""};r.set(s,e)}catch(e){console.error("children.store: persist error",e)}},getChildren(){return this.data},setChildren(e){this.data={...this.data,...e},this.persist()},replaceChildren(e){this.data=e,this.persist()},resetChildren(){this.data={...a},this.persist()}}});export{o as u}; import{as as i}from"./index-GXFLJtQL.js";import{P as r}from"./LocalStorage-DjXJ9f5H.js";const s="children:v1",a={hasChildren:!1,children:[],moreThanFiveChildrenNote:""},o=i("childrenstore",{state:()=>{try{let e=r.getItem(s);if(typeof e=="string")try{e=JSON.parse(e)}catch{e=null}if(e&&typeof e=="object")return{data:{...e}}}catch{}return{data:{...a}}},actions:{persist(){try{const e={hasChildren:!!this.data.hasChildren,children:Array.isArray(this.data.children)?this.data.children.map(t=>({firstName:t.firstName,lastName:t.lastName,birthDate:t.birthDate,sameHousehold:t.sameHousehold,alimentiVersati:t.alimentiVersati??!1,school:t.school,hasCareCost:t.hasCareCost??!1,careCosts:t.careCosts,address:t.address??null})):[],moreThanFiveChildrenNote:this.data.moreThanFiveChildrenNote||""};r.set(s,e)}catch(e){console.error("children.store: persist error",e)}},getChildren(){return this.data},setChildren(e){this.data={...this.data,...e},this.persist()},replaceChildren(e){this.data=e,this.persist()},resetChildren(){this.data={...a},this.persist()}}});export{o as u};

File diff suppressed because one or more lines are too long

1
app/dist/spa/assets/i18n-TzAMZ6Le.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{as as n}from"./index-CBamscxj.js";import{P as e}from"./LocalStorage-fNBzdRj6.js";const s="taxstore:v1",i={prevPreparedByUs:!1,prevDeclaration:{comments:"",attachments:[]},firstName:"",lastName:"",birthDate:"",address:{street:"",cap:"",city:"",country:{code:"",name:""},canton:""}},r={alimentiVersati:!1,alimentiCommenti:{comments:"",attachments:[]},maritalStatus:"",spouseFirstName:"",spouseLastName:"",spouseBirthDate:"",spouseDeadDate:"",spouseTaxNumber:"",spouseAddress:{street:"",cap:"",city:"",country:{code:"",name:""},canton:""},marriageDate:"",separated:!1,spouseAlimentiVersati:!1},c=n("taxstore",{state:()=>{try{const t=e.getItem(s);if(t&&typeof t=="object"){const a=t;if(Array.isArray(a.items))return{items:a.items}}}catch{}return{items:[{key:"taxpayer",data:{...i}},{key:"marital",data:{...r}}]}},actions:{persist(){try{e.set(s,{items:this.items})}catch{}},_findTaxpayer(){return this.items.find(t=>t.key==="taxpayer")},_findMarital(){return this.items.find(t=>t.key==="marital")},getTaxpayer(){return this._findTaxpayer()?.data},setTaxpayer(t){const a=this._findTaxpayer();a&&(a.data={...a.data,...t}),this.persist()},replaceTaxpayer(t){const a=this._findTaxpayer();a&&(a.data=t),this.persist()},resetTaxpayer(){const t=this._findTaxpayer();t&&(t.data={...i}),this.persist()},getMarital(){return this._findMarital()?.data},setMarital(t){const a=this._findMarital();a&&(a.data={...a.data,...t}),this.persist()},replaceMarital(t){const a=this._findMarital();a&&(a.data=t),this.persist()},resetMarital(){const t=this._findMarital();t&&(t.data={...r}),this.persist()}}});export{c as u}; import{as as n}from"./index-GXFLJtQL.js";import{P as e}from"./LocalStorage-DjXJ9f5H.js";const s="taxstore:v1",i={prevPreparedByUs:!1,prevDeclaration:{comments:"",attachments:[]},firstName:"",lastName:"",birthDate:"",address:{street:"",cap:"",city:"",country:{code:"",name:""},canton:""}},r={alimentiVersati:!1,alimentiCommenti:{comments:"",attachments:[]},maritalStatus:"",spouseFirstName:"",spouseLastName:"",spouseBirthDate:"",spouseDeadDate:"",spouseTaxNumber:"",spouseAddress:{street:"",cap:"",city:"",country:{code:"",name:""},canton:""},marriageDate:"",separated:!1,spouseAlimentiVersati:!1},c=n("taxstore",{state:()=>{try{const t=e.getItem(s);if(t&&typeof t=="object"){const a=t;if(Array.isArray(a.items))return{items:a.items}}}catch{}return{items:[{key:"taxpayer",data:{...i}},{key:"marital",data:{...r}}]}},actions:{persist(){try{e.set(s,{items:this.items})}catch{}},_findTaxpayer(){return this.items.find(t=>t.key==="taxpayer")},_findMarital(){return this.items.find(t=>t.key==="marital")},getTaxpayer(){return this._findTaxpayer()?.data},setTaxpayer(t){const a=this._findTaxpayer();a&&(a.data={...a.data,...t}),this.persist()},replaceTaxpayer(t){const a=this._findTaxpayer();a&&(a.data=t),this.persist()},resetTaxpayer(){const t=this._findTaxpayer();t&&(t.data={...i}),this.persist()},getMarital(){return this._findMarital()?.data},setMarital(t){const a=this._findMarital();a&&(a.data={...a.data,...t}),this.persist()},replaceMarital(t){const a=this._findMarital();a&&(a.data=t),this.persist()},resetMarital(){const t=this._findMarital();t&&(t.data={...r}),this.persist()}}});export{c as u};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,3 +1,3 @@
<!doctype html><html><head><title>dichiarazione fiscale</title><meta charset=utf-8><meta name=description content="Dichiarazione fiscale automatizzata"><meta name=format-detection content="telephone=no"><meta name=msapplication-tap-highlight content=no><meta name=viewport content="user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1,width=device-width"><link rel=icon type=image/png sizes=128x128 href=/icons/favicon-128x128.png><link rel=icon type=image/png sizes=96x96 href=/icons/favicon-96x96.png><link rel=icon type=image/png sizes=32x32 href=/icons/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=/icons/favicon-16x16.png><link rel=icon type=image/ico href=/favicon.ico> <script type="module" crossorigin src="/assets/index-CBamscxj.js"></script> <!doctype html><html><head><title>dichiarazione fiscale</title><meta charset=utf-8><meta name=description content="Dichiarazione fiscale automatizzata"><meta name=format-detection content="telephone=no"><meta name=msapplication-tap-highlight content=no><meta name=viewport content="user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1,width=device-width"><link rel=icon type=image/png sizes=128x128 href=/icons/favicon-128x128.png><link rel=icon type=image/png sizes=96x96 href=/icons/favicon-96x96.png><link rel=icon type=image/png sizes=32x32 href=/icons/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=/icons/favicon-16x16.png><link rel=icon type=image/ico href=/favicon.ico> <script type="module" crossorigin src="/assets/index-GXFLJtQL.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-BQveqNql.css"> <link rel="stylesheet" crossorigin href="/assets/index-BQveqNql.css">
</head><body><div id=q-app></div></body></html> </head><body><div id=q-app></div></body></html>

View File

@@ -7,11 +7,12 @@
"type": "module", "type": "module",
"private": true, "private": true,
"scripts": { "scripts": {
"gen:commit": "node ./scripts/generate-commit-info.mjs",
"lint": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\"", "lint": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\"",
"format": "prettier --write \"**/*.{js,ts,vue,scss,html,md,json}\" --ignore-path .gitignore", "format": "prettier --write \"**/*.{js,ts,vue,scss,html,md,json}\" --ignore-path .gitignore",
"test": "echo \"No test specified\" && exit 0", "test": "echo \"No test specified\" && exit 0",
"dev": "quasar dev", "dev": "node ./scripts/generate-commit-info.mjs && quasar dev",
"build": "quasar build", "build": "node ./scripts/generate-commit-info.mjs && quasar build",
"tsc": "vue-tsc --noEmit", "tsc": "vue-tsc --noEmit",
"docs:pdf": "pnpm -s dlx md-to-pdf ./docs/Manuale_Utente.md --launch-options '{\"executablePath\":\"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome\"}'", "docs:pdf": "pnpm -s dlx md-to-pdf ./docs/Manuale_Utente.md --launch-options '{\"executablePath\":\"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome\"}'",
"postinstall": "quasar prepare" "postinstall": "quasar prepare"

View File

@@ -53,7 +53,11 @@ export default defineConfig((ctx) => {
// publicPath: '/', // publicPath: '/',
// analyze: true, // analyze: true,
// env: {}, env: {
DEFAULT_API_BASE_URL: ctx.dev
? 'http://localhost:8082/'
: 'http://bruno.fantasticpartner.com/api/',
},
// rawDefine: {} // rawDefine: {}
// ignorePublicFolder: true, // ignorePublicFolder: true,
// minify: false, // minify: false,

View File

@@ -0,0 +1,30 @@
import { execSync } from 'node:child_process'
import { mkdirSync, writeFileSync } from 'node:fs'
import { dirname, resolve } from 'node:path'
import { fileURLToPath } from 'node:url'
const __dirname = dirname(fileURLToPath(import.meta.url))
const appRoot = resolve(__dirname, '..')
const outFile = resolve(appRoot, 'src/generated/commit-info.ts')
function readCommitCode() {
try {
return execSync('git rev-parse --short HEAD', {
cwd: appRoot,
stdio: ['ignore', 'pipe', 'ignore'],
encoding: 'utf8'
}).trim()
} catch {
return 'unknown'
}
}
const commitCode = readCommitCode()
const content =
`// Auto-generated by scripts/generate-commit-info.mjs\n` +
`export const COMMIT_CODE = ${JSON.stringify(commitCode)} as const\n`
mkdirSync(dirname(outFile), { recursive: true })
writeFileSync(outFile, content, 'utf8')
console.log(`Generated commit info: ${commitCode}`)

View File

@@ -69,6 +69,7 @@ const currentComponent = computed(() => {
if (id === 'children') return defineAsyncComponent(() => import('./steps/ChildrenStep.vue')) if (id === 'children') return defineAsyncComponent(() => import('./steps/ChildrenStep.vue'))
if (id === 'income') return defineAsyncComponent(() => import('./steps/IncomeStep.vue')) if (id === 'income') return defineAsyncComponent(() => import('./steps/IncomeStep.vue'))
if (id === 'professionalExpenses') return defineAsyncComponent(() => import('./steps/ProfessionalExpensesStep.vue')) if (id === 'professionalExpenses') return defineAsyncComponent(() => import('./steps/ProfessionalExpensesStep.vue'))
if (id === 'sideIncome') return defineAsyncComponent(() => import('./steps/SideIncomeStep.vue'))
return null return null
}) })

View File

@@ -63,7 +63,6 @@
v-if="form.eatsOut" v-if="form.eatsOut"
v-model="form.hasCanteenOrVouchers" v-model="form.hasCanteenOrVouchers"
:label="t('professionalExpenses.hasCanteenOrVouchers')" :label="t('professionalExpenses.hasCanteenOrVouchers')"
:rules="[requiredWhenEatsOut]"
class="q-mt-md" class="q-mt-md"
/> />
</div> </div>
@@ -78,9 +77,10 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { reactive, onMounted, ref, nextTick, watch, computed } from 'vue' import { onMounted, ref, nextTick, watch, computed } from 'vue'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import type { StepDescriptor } from '../../types/types' import type { StepDescriptor } from '../../types/types'
import { useProfessionalExpensesStore, type ProfessionalExpensesData } from '../../stores/professionalExpenses'
type CommuteMethod = 'CAR' | 'BUS' | 'BIKE' | 'WALK' type CommuteMethod = 'CAR' | 'BUS' | 'BIKE' | 'WALK'
@@ -94,6 +94,7 @@ type ProfessionalExpensesForm = {
hasCanteenOrVouchers: boolean hasCanteenOrVouchers: boolean
} }
const store = useProfessionalExpensesStore()
const props = defineProps<{ step?: StepDescriptor }>() const props = defineProps<{ step?: StepDescriptor }>()
const emit = defineEmits(['next', 'prev']) const emit = defineEmits(['next', 'prev'])
@@ -120,15 +121,7 @@ const minLength = (n: number, msg?: string) => (v: unknown) => {
const form = reactive<ProfessionalExpensesForm>({ const form = store.data as ProfessionalExpensesForm
expensesChanged: false,
workplaceDescription: '',
commuteMethod: null,
commuteKm: null,
lunchAtHome: false,
eatsOut: false,
hasCanteenOrVouchers: false
})
const commuteMethodOptions = computed<Array<{ label: string; value: CommuteMethod }>>(() => [ const commuteMethodOptions = computed<Array<{ label: string; value: CommuteMethod }>>(() => [
{ label: t('professionalExpenses.commuteMethodOptions.car'), value: 'CAR' }, { label: t('professionalExpenses.commuteMethodOptions.car'), value: 'CAR' },
@@ -137,11 +130,6 @@ const commuteMethodOptions = computed<Array<{ label: string; value: CommuteMetho
{ label: t('professionalExpenses.commuteMethodOptions.walk'), value: 'WALK' } { label: t('professionalExpenses.commuteMethodOptions.walk'), value: 'WALK' }
]) ])
const requiredWhenEatsOut = (v: boolean | null) => {
if (!form.eatsOut) return true
return v !== null || t('validation.required')
}
/* const professionalExpensesSchema = { /* const professionalExpensesSchema = {
fields: [ fields: [
{ key: "expensesChanged", type: "boolean", required: true }, { key: "expensesChanged", type: "boolean", required: true },
@@ -160,10 +148,13 @@ onMounted(async () => {
formRef.value?.resetValidation?.() formRef.value?.resetValidation?.()
}) })
// persist when expensesChanged toggles watch(
watch(() => form.expensesChanged, () => { () => form,
//store.setChildren(buildPayload()) () => {
}) store.persist()
},
{ deep: true }
)
watch(() => form.eatsOut, (value) => { watch(() => form.eatsOut, (value) => {
if (!value) form.hasCanteenOrVouchers = false if (!value) form.hasCanteenOrVouchers = false
@@ -179,10 +170,12 @@ async function saveAndNext() {
} catch { } catch {
return return
} }
store.setProfessionalExpenses(form as ProfessionalExpensesData)
emit('next', props.step?.next) emit('next', props.step?.next)
} }
function emitPrev() { function emitPrev() {
store.setProfessionalExpenses(form as ProfessionalExpensesData)
emit('prev', props.step?.prev) emit('prev', props.step?.prev)
} }

View File

@@ -0,0 +1,83 @@
<template>
<q-card flat class="full-width q-pa-none">
<q-card-section class="full-width">
<div class="row items-center">
<div class="col">
<div class="text-h6">{{ t('SID') }}</div>
</div>
<div class="col-auto">
<q-btn flat :label="t('button.prev')" @click="emitPrev" class="q-mr-sm" />
<q-btn color="primary" :label="t('button.next')" @click="saveAndNext" />
</div>
</div>
<q-separator class="q-my-sm" />
<q-form ref="formRef" class="q-gutter-md q-mt-md">
<q-toggle class="q-mb-md" v-model="form.hasSideIncome"
:label="t('sideIncome.hasSideIncome')"
/>
<CommentAttachment
class="q-mt-none"
v-if="form.hasSideIncome"
v-model="form.sideIncomeDocuments"
:label="t('sideIncome.attachments')"
:id="'documents'"
/>
</q-form>
</q-card-section>
</q-card>
</template>
<script setup lang="ts">
import { onMounted, ref, nextTick, watch } from 'vue'
import { useI18n } from 'vue-i18n'
import type { StepDescriptor } from '../../types/types'
import { useSideIncomeStore, type SideIncomeData } from '../../stores/sideIncome'
import CommentAttachment from '../CommentAttachment.vue'
const props = defineProps<{ step?: StepDescriptor }>()
const emit = defineEmits(['next', 'prev'])
const { t } = useI18n()
const store = useSideIncomeStore()
const form = store.data as SideIncomeData
const formRef = ref<{ validate?: () => Promise<boolean> | boolean; resetValidation?: () => void } | null>(null)
onMounted(async () => {
await nextTick()
formRef.value?.resetValidation?.()
})
watch(
() => form,
() => {
store.persist()
},
{ deep: true }
)
async function saveAndNext() {
try {
const ok = await (formRef.value?.validate?.() ?? true)
if (ok === false) return
} catch {
return
}
store.setSideIncome(form)
emit('next', props.step?.next)
}
function emitPrev() {
store.setSideIncome(form)
emit('prev', props.step?.prev)
}
</script>
<style scoped>
.full-width { width: 100%; }
</style>

View File

@@ -0,0 +1,2 @@
// Auto-generated by scripts/generate-commit-info.mjs
export const COMMIT_CODE = "29b4f99" as const

View File

@@ -96,6 +96,11 @@ export default {
noAttachments: 'Dokumente anhängen' noAttachments: 'Dokumente anhängen'
}, },
sideIncome: {
hasSideIncome: 'Haben Sie ein Nebeneinkommen?',
attachments: 'Dokumente anhängen'
},
informazionesualimenti: 'Informationen zu Unterhalt', informazionesualimenti: 'Informationen zu Unterhalt',
inserireindirizzocogniuge: 'Adresse des Ehepartners eingeben', inserireindirizzocogniuge: 'Adresse des Ehepartners eingeben',
inserireindirizzopartner: 'Adresse des Partners eingeben', inserireindirizzopartner: 'Adresse des Partners eingeben',

View File

@@ -112,6 +112,11 @@ export default {
hasCanteenOrVouchers: 'Do you have a canteen or meal vouchers?' hasCanteenOrVouchers: 'Do you have a canteen or meal vouchers?'
}, },
sideIncome: {
hasSideIncome: 'Do you have supplementary income?',
attachments: 'Attach documents'
},
informazionesualimenti: 'Alimony information', informazionesualimenti: 'Alimony information',
inserireindirizzocogniuge: 'Enter spouse address', inserireindirizzocogniuge: 'Enter spouse address',
inserireindirizzopartner: 'Enter partner address', inserireindirizzopartner: 'Enter partner address',

View File

@@ -96,6 +96,11 @@ export default {
noAttachments: 'Joindre des documents' noAttachments: 'Joindre des documents'
}, },
sideIncome: {
hasSideIncome: 'Avez-vous un revenu accessoire ?',
attachments: 'Joindre des documents'
},
informazionesualimenti: 'Informations sur la pension alimentaire', informazionesualimenti: 'Informations sur la pension alimentaire',
inserireindirizzocogniuge: "Saisir l'adresse du conjoint", inserireindirizzocogniuge: "Saisir l'adresse du conjoint",
inserireindirizzopartner: "Saisir l'adresse du partenaire", inserireindirizzopartner: "Saisir l'adresse du partenaire",

View File

@@ -112,6 +112,11 @@ export default {
hasCanteenOrVouchers: 'Hai mensa o buoni pasto?' hasCanteenOrVouchers: 'Hai mensa o buoni pasto?'
}, },
sideIncome: {
hasSideIncome: 'Hai un reddito accessorio?',
attachments: 'Allega i documenti'
},
informazionesualimenti: 'Informazioni su alimenti', informazionesualimenti: 'Informazioni su alimenti',
inserireindirizzocogniuge: "Inserire l'indirizzo del coniuge", inserireindirizzocogniuge: "Inserire l'indirizzo del coniuge",
inserireindirizzopartner: "Inserire l'indirizzo del partner", inserireindirizzopartner: "Inserire l'indirizzo del partner",

View File

@@ -3,13 +3,12 @@
<q-header elevated> <q-header elevated>
<q-toolbar> <q-toolbar>
<q-btn flat dense round icon="menu" aria-label="Menu" @click="toggleLeftDrawer" /> <q-btn flat dense round icon="menu" aria-label="Menu" @click="toggleLeftDrawer" />
<q-toolbar-title> Quasar App </q-toolbar-title> <q-toolbar-title> Quasar App </q-toolbar-title>
<q-space /> <q-space />
<div class="row items-center no-wrap"> <div class="row items-center no-wrap">
<div class="q-mr-md">Quasar v{{ $q.version }}</div> <div class="q-mr-md">Quasar v{{ $q.version }}</div>
<q-badge outline color="white" class="q-mr-sm">commit {{ commitCode }}</q-badge>
<q-btn flat dense icon="language" :label="currentLocaleLabel" aria-label="Language"> <q-btn flat dense icon="language" :label="currentLocaleLabel" aria-label="Language">
<q-menu auto-close> <q-menu auto-close>
<q-list> <q-list>
@@ -23,6 +22,8 @@
</q-toolbar> </q-toolbar>
</q-header> </q-header>
<q-drawer v-model="leftDrawerOpen" show-if-above bordered> <q-drawer v-model="leftDrawerOpen" show-if-above bordered>
<q-scroll-area class="fit"> <q-scroll-area class="fit">
<div class="q-pa-md"> <div class="q-pa-md">
@@ -71,6 +72,7 @@ import { useTaxpayerStore } from '../stores/taxpayer'
import { useMaritalStore } from '../stores/marital'; import { useMaritalStore } from '../stores/marital';
import { useChildrenStore } from '../stores/children' import { useChildrenStore } from '../stores/children'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import { COMMIT_CODE } from '../generated/commit-info'
const leftDrawerOpen = ref(false); const leftDrawerOpen = ref(false);
@@ -79,6 +81,7 @@ const marital = useMaritalStore()
const children = useChildrenStore() const children = useChildrenStore()
const { locale } = useI18n() const { locale } = useI18n()
const commitCode = COMMIT_CODE
const locales = [ const locales = [
{ code: 'it-IT', label: 'Italiano' }, { code: 'it-IT', label: 'Italiano' },

View File

@@ -0,0 +1,81 @@
import { defineStore } from 'pinia'
import { LocalStorage } from 'quasar'
export type CommuteMethod = 'CAR' | 'BUS' | 'BIKE' | 'WALK'
export interface ProfessionalExpensesData {
expensesChanged: boolean
workplaceDescription: string
commuteMethod: CommuteMethod | null
commuteKm: number | null
lunchAtHome: boolean
eatsOut: boolean
hasCanteenOrVouchers: boolean
}
const STORAGE_KEY = 'professionalExpenses:v1'
const DEFAULT: ProfessionalExpensesData = {
expensesChanged: false,
workplaceDescription: '',
commuteMethod: null,
commuteKm: null,
lunchAtHome: false,
eatsOut: false,
hasCanteenOrVouchers: false
}
function isRecord(v: unknown): v is Record<string, unknown> {
return !!v && typeof v === 'object' && !Array.isArray(v)
}
export const useProfessionalExpensesStore = defineStore('professionalexpensesstore', {
state: () => {
try {
let saved: unknown = LocalStorage.getItem(STORAGE_KEY)
if (typeof saved === 'string') {
try {
saved = JSON.parse(saved)
} catch {
saved = null
}
}
if (isRecord(saved)) {
const merged = { ...DEFAULT, ...(saved as Partial<ProfessionalExpensesData>) } as ProfessionalExpensesData
return {
data: {
...merged,
hasCanteenOrVouchers: merged.hasCanteenOrVouchers === true
}
}
}
} catch {
// ignore and fall back to default
}
return { data: { ...DEFAULT } as ProfessionalExpensesData }
},
actions: {
persist() {
try {
LocalStorage.set(STORAGE_KEY, this.data)
} catch (err) {
console.error('professionalExpenses.store: persist error', err)
}
},
getProfessionalExpenses() {
return this.data
},
setProfessionalExpenses(partial: Partial<ProfessionalExpensesData>) {
this.data = { ...this.data, ...partial }
this.persist()
},
replaceProfessionalExpenses(payload: ProfessionalExpensesData) {
this.data = payload
this.persist()
},
resetProfessionalExpenses() {
this.data = { ...DEFAULT }
this.persist()
}
}
})

View File

@@ -0,0 +1,67 @@
import { defineStore } from 'pinia'
import { LocalStorage } from 'quasar'
export interface SideIncomeData {
hasSideIncome: boolean,
sideIncomeDocuments: {
comments: string,
attachments: []
}
}
const STORAGE_KEY = 'sideIncome:v1'
const DEFAULT: SideIncomeData = {
hasSideIncome: false,
sideIncomeDocuments: { comments: '', attachments: [] }
}
function isRecord(v: unknown): v is Record<string, unknown> {
return !!v && typeof v === 'object' && !Array.isArray(v)
}
export const useSideIncomeStore = defineStore('sideincomestore', {
state: () => {
try {
let saved: unknown = LocalStorage.getItem(STORAGE_KEY)
if (typeof saved === 'string') {
try {
saved = JSON.parse(saved)
} catch {
saved = null
}
}
if (isRecord(saved)) {
return { data: { ...DEFAULT, ...(saved as Partial<SideIncomeData>) } as SideIncomeData }
}
} catch {
// ignore and fall back to default
}
return { data: { ...DEFAULT } as SideIncomeData }
},
actions: {
persist() {
try {
LocalStorage.set(STORAGE_KEY, this.data)
} catch (err) {
console.error('sideIncome.store: persist error', err)
}
},
getSideIncome() {
return this.data
},
setSideIncome(partial: Partial<SideIncomeData>) {
this.data = { ...this.data, ...partial }
this.persist()
},
replaceSideIncome(payload: SideIncomeData) {
this.data = payload
this.persist()
},
resetSideIncome() {
this.data = { ...DEFAULT }
this.persist()
}
}
})

View File

@@ -1,6 +1,7 @@
export type ApiBaseUrl = string export type ApiBaseUrl = string
export const DEFAULT_API_BASE_URL: ApiBaseUrl = 'http://bruno.fantasticpartner.com/api/' export const DEFAULT_API_BASE_URL: ApiBaseUrl =
(process.env.DEFAULT_API_BASE_URL) || 'http://bruno.fantasticpartner.com/api/'
export type UploadDocumentParams = { export type UploadDocumentParams = {
user: string user: string