From 1071532118bbb4a791b1f606dc1ee5f768b5eb1c Mon Sep 17 00:00:00 2001 From: Kilian Saffran Date: Mon, 16 Nov 2020 12:03:20 +0100 Subject: [PATCH] v202011161203 t1.0.16 --- .gitignore | 2 + app/index.cgi | 8 +- app/static/js/dataform.min.js | 1 - app/static/js/report.min.js | 1 - app/static/js/request.min.js | 12 -- app/static/js/timecalc.min.js | 24 ---- app/tmpl/index.tt | 2 +- app/tmpl/module/admin/companies.min.js | 4 - app/tmpl/module/admin/schemadataset.min.js | 3 - app/tmpl/module/admin/sectors.min.js | 2 - app/tmpl/module/admin/staffgroups.min.js | 7 - app/tmpl/module/admin/users.min.js | 27 ---- app/tmpl/module/admin/vacancydays.min.js | 3 - app/tmpl/module/admin/vacancytypes.min.js | 3 - app/tmpl/module/admin/worktimes.min.js | 6 - app/tmpl/module/company/company.min.js | 2 - app/tmpl/module/company/staffgroups.min.js | 8 -- app/tmpl/module/company/users.min.js | 10 -- app/tmpl/module/index/index.min.js | 1 - .../module/periods/periodvalidation.min.js | 8 -- app/tmpl/module/periods/reportperiod.min.js | 12 -- .../module/periods/staffperiodweeks.min.js | 56 -------- app/tmpl/module/staff/staff.min.js | 22 ---- app/tmpl/module/staff/staffcontract.min.js | 1 - app/tmpl/module/staff/staffperiods.min.js | 7 - app/tmpl/module/workplans/workplans.min.js | 23 ---- desktopapp/package.json | 2 +- dev/conf.sh | 1 + .../update.barto.sql} | 0 dev/db/tmp/update.brasserie_du_theatre.sql | 3 + dev/db/tmp/update.demo.sql | 3 + dev/db/tmp/update.demoold.sql | 1 + dev/db/tmp/update.elch.sql | 3 + dev/db/tmp/update.portanova.sql | 3 + dev/db/tmp/update.public.sql | 2 + dev/db/update.live.sql | 16 +++ dev/db/update.public.sql | 79 ----------- dev/dbfunctions.sh | 59 +++++++++ dev/diff_db.sh | 123 ++++++------------ install/update_app.sh | 80 ++++++++++++ 40 files changed, 216 insertions(+), 414 deletions(-) delete mode 100644 app/static/js/dataform.min.js delete mode 100644 app/static/js/report.min.js delete mode 100644 app/static/js/request.min.js delete mode 100644 app/static/js/timecalc.min.js delete mode 100644 app/tmpl/module/admin/companies.min.js delete mode 100644 app/tmpl/module/admin/schemadataset.min.js delete mode 100644 app/tmpl/module/admin/sectors.min.js delete mode 100644 app/tmpl/module/admin/staffgroups.min.js delete mode 100644 app/tmpl/module/admin/users.min.js delete mode 100644 app/tmpl/module/admin/vacancydays.min.js delete mode 100644 app/tmpl/module/admin/vacancytypes.min.js delete mode 100644 app/tmpl/module/admin/worktimes.min.js delete mode 100644 app/tmpl/module/company/company.min.js delete mode 100644 app/tmpl/module/company/staffgroups.min.js delete mode 100644 app/tmpl/module/company/users.min.js delete mode 100644 app/tmpl/module/index/index.min.js delete mode 100644 app/tmpl/module/periods/periodvalidation.min.js delete mode 100644 app/tmpl/module/periods/reportperiod.min.js delete mode 100644 app/tmpl/module/periods/staffperiodweeks.min.js delete mode 100644 app/tmpl/module/staff/staff.min.js delete mode 100644 app/tmpl/module/staff/staffcontract.min.js delete mode 100644 app/tmpl/module/staff/staffperiods.min.js delete mode 100644 app/tmpl/module/workplans/workplans.min.js rename dev/db/{update.portanova.sql => tmp/update.barto.sql} (100%) create mode 100644 dev/db/tmp/update.brasserie_du_theatre.sql create mode 100644 dev/db/tmp/update.demo.sql create mode 100644 dev/db/tmp/update.demoold.sql create mode 100644 dev/db/tmp/update.elch.sql create mode 100644 dev/db/tmp/update.portanova.sql create mode 100644 dev/db/tmp/update.public.sql create mode 100644 dev/db/update.live.sql delete mode 100644 dev/db/update.public.sql create mode 100644 dev/dbfunctions.sh create mode 100644 install/update_app.sh diff --git a/.gitignore b/.gitignore index c879b4de..b5afd0e7 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,5 @@ website/downloads desktopapp/node_modules release-builds dev/tmp/* +release +install/tmp/* diff --git a/app/index.cgi b/app/index.cgi index 15537a07..61dfee26 100644 --- a/app/index.cgi +++ b/app/index.cgi @@ -25,10 +25,10 @@ my $sess = (); my $se = session->new({db => $db}); $vars->{ua} = $ENV{HTTP_USER_AGENT}; -# if ($vars->{ua} !~ /^POT/){ -# print "Location: https://www.plandutravail.lu\n\n"; -# exit(0); -# } +if ($vars->{ua} !~ /^POT/){ + print "Location: https://www.plandutravail.lu\n\n"; + exit(0); +} $vars->{realpath} = $cgi->url({-absolute=>1}); $vars->{filepath} = substr($cgi->url({-absolute=>1}),length($vars->{basepath})+1); $vars->{baseurl} = $cgi->url({-base=>1}).'/'.$vars->{basepath}; diff --git a/app/static/js/dataform.min.js b/app/static/js/dataform.min.js deleted file mode 100644 index 5516ad33..00000000 --- a/app/static/js/dataform.min.js +++ /dev/null @@ -1 +0,0 @@ -let dataform={saveform:function(frmid,aftercallback,clientschema){var flds=form.getformcontent(frmid,null);return flds.fn="saveform",flds.schemata=clientschema,flds.table=frmid,null==clientschema&&(flds.schemata=schemata),delete flds.null,postData("db.cgi",flds).then(data=>{aftercallback?(aftercallback(data.result),form.formsaved({})):form.formsaved(data.result)}),!1},saveformdata:function(flds,aftercallback,clientschema){return flds.fn="saveform",flds.schemata=clientschema,null==clientschema&&(flds.schemata=schemata),delete flds.null,postData("db.cgi",flds).then(data=>{aftercallback?(aftercallback(data.result),form.formsaved({})):form.formsaved(data.result)}),!1},formsaved:function(data){var sb=document.getElementById("snackbar");return sb.className="show green",sb.innerHTML="Les données ont été sauvegardées!",setTimeout((function(){sb.className=sb.className.replace("show green","")}),3e3),!1},getformcontent:function(frmid,dataflds){for(var frm=document.getElementById("frm_"+frmid),flds={},i=0;i{callback&&callback(data)}),!1},saveschemafield:function(obj,schema){return fdata=obj.dataset,fdata.save="field",fdata.schemata=schema,"INPUT"!=obj.tagName&&"SELECT"!=obj.tagName&&"TEXTAREA"!=obj.tagName||("checkbox"==obj.type||"radio"==obj.type?1==obj.checked?fdata.value=1:fdata.value=null:fdata.value=obj.value),postData("db.cgi",fdata).then(data=>{}),!1},cleanfield:function(objid){document.getElementById(objid).value=""}}; \ No newline at end of file diff --git a/app/static/js/report.min.js b/app/static/js/report.min.js deleted file mode 100644 index 56cd31e4..00000000 --- a/app/static/js/report.min.js +++ /dev/null @@ -1 +0,0 @@ -var report={generate:function(repname,filename,data){return showdataloaddlg("Création PDF encours","Attendez s.v.p."),postData("report.cgi",{generate:repname,file:filename+".pdf",data:data}).then(data=>{closedataloaddlg(),report.openreport(data.result)}).catch(e=>{closedataloaddlg()}),!1},openreport(data){data&&data.file&&window.open(api+"report.cgi?open="+encodeURIComponent(data.file))}}; \ No newline at end of file diff --git a/app/static/js/request.min.js b/app/static/js/request.min.js deleted file mode 100644 index 82b32c6a..00000000 --- a/app/static/js/request.min.js +++ /dev/null @@ -1,12 +0,0 @@ -async function postData(r="",e={}){const t=await fetch(api+r,{method:"POST",mode:"same-origin",cache:"no-cache",credentials:"same-origin",headers:{"Content-Type":"application/json"},redirect:"follow",referrerPolicy:"strict-origin",body:JSON.stringify(e)}) -return t.json()}async function syncData(r,e,t,o={}){let n={"Content-Type":"application/json"} -null!=e&&""!=e&&(n["Authorization"]=Base64.encode(e+":"+t)) -const a=await fetch(r,{method:"POST",mode:"cors",cache:"no-cache",credentials:"omit",headers:n,redirect:"follow",referrerPolicy:"strict-origin",body:JSON.stringify(o)}) -return a.json()}var api=location.origin+location.pathname.substring(0,location.pathname.lastIndexOf("/"))+"/",Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(r){var e,t,o,n,a,i,c,d="",h=0 -for(r=Base64._utf8_encode(r);h>2,a=(3&e)<<4|t>>4,i=(15&t)<<2|o>>6,c=63&o,isNaN(t)?i=c=64:isNaN(o)&&(c=64),d=d+this._keyStr.charAt(n)+this._keyStr.charAt(a)+this._keyStr.charAt(i)+this._keyStr.charAt(c) -return d},decode:function(r){var e,t,o,n,a,i,c,d="",h=0 -for(r=r.replace(/[^A-Za-z0-9\+\/\=]/g,"");h>4,t=(15&a)<<4|i>>2,o=(3&i)<<6|c,d+=String.fromCharCode(e),64!=i&&(d+=String.fromCharCode(t)),64!=c&&(d+=String.fromCharCode(o)) -return d=Base64._utf8_decode(d),d},_utf8_encode:function(r){r=r.replace(/\r\n/g,"\n") -for(var e="",t=0;t127&&o<2048?(e+=String.fromCharCode(o>>6|192),e+=String.fromCharCode(63&o|128)):(e+=String.fromCharCode(o>>12|224),e+=String.fromCharCode(o>>6&63|128),e+=String.fromCharCode(63&o|128))}return e},_utf8_decode:function(r){for(var e="",t=0,o=c1=c2=0;t191&&o<224?(c2=r.charCodeAt(t+1),e+=String.fromCharCode((31&o)<<6|63&c2),t+=2):(c2=r.charCodeAt(t+1),c3=r.charCodeAt(t+2),e+=String.fromCharCode((15&o)<<12|(63&c2)<<6|63&c3),t+=3) -return e}},report={generate:function(r,e,t){return showdataloaddlg("Création PDF encours","Attendez s.v.p."),postData("report.cgi",{generate:r,file:e+".pdf",data:t}).then(r=>{closedataloaddlg(),report.openreport(r)}),!1},openreport(r){r&&r.file&&window.open(api+"report.cgi?open="+encodeURIComponent(r.file))}} diff --git a/app/static/js/timecalc.min.js b/app/static/js/timecalc.min.js deleted file mode 100644 index 28aa58ed..00000000 --- a/app/static/js/timecalc.min.js +++ /dev/null @@ -1,24 +0,0 @@ -let timecalc={MinutesToTime:function(e){if(e=parseInt(e),null==e||0==e)return"00:00" -let t=parseInt(e/60),n=e-60*t -return timecalc.lpad(t,2,"0")+":"+timecalc.lpad(n,2,"0")},TimeToMinutes:function(e){let t=60*parseInt(e.substring(0,2)),n=parseInt(e.substring(3,5)) -return t+n},lpad:function(e,t,n){let l=e.toString() -for(;l.length"23"?"":timecalc.lpad(e,2,"0")+":00" -if(3==e.length){let t=e.substring(0,1),n=e.substring(1,3) -return n>"59"?"":timecalc.lpad(t,2,"0")+":"+timecalc.lpad(n,2,"0")}if(4==e.length){let t=e.substring(0,2),n=e.substring(2,4) -return t>"23"||n>"59"?"":timecalc.lpad(t,2,"0")+":"+timecalc.lpad(n,2,"0")}return""},StringToInterval:function(e){let t="" -if(e.startsWith("-")&&(t="-"),e.indexOf(":")>0){let n=e.split(":") -return hours=n[0].replace(/\D/g,""),""==hours&&(hours="0"),minutes=n[1].replace(/\D/g,""),minutes>"59"&&(minutes="0"),t+hours+":"+timecalc.lpad(minutes,2,"0")}return""==e?"":(e=e.replace(/\D/g,""),t+e+":00")},MinutesToInterval:function(e){if(null==e||""==e)return"0:00" -let t="" -e<0&&(t="-",e*=-1) -let n=parseInt(e/60),l=e-60*n -return l=Math.round(l),t+n+":"+timecalc.lpad(l,2,"0")},IntervalToMinutes:function(e){if(""==e||null==e)return 0 -let t=1 -e.startsWith("-")&&(t=-1,e=e.replace(/-/g,"")) -let n=e.split(":"),l=60*parseInt(n[0]),a=parseInt(n[1]) -return(l+a)*t},validateTime:e=>(e.value=timecalc.StringToTime(e.value),!1),validateInterval:e=>(e.value=timecalc.StringToInterval(e.value),!1),copyInterval(e,t,n){if(n){let l=timecalc.IntervalToMinutes(e.value)*n -document.getElementById(t).value=timecalc.MinutesToInterval(l)}else document.getElementById(t).value=e.value -"0:00"==document.getElementById(t).value&&(document.getElementById(t).value="")}} diff --git a/app/tmpl/index.tt b/app/tmpl/index.tt index 6728ba23..c77540ef 100644 --- a/app/tmpl/index.tt +++ b/app/tmpl/index.tt @@ -1,4 +1,4 @@ -[% appversion = '0.9.14.6' %] +[% appversion = '1.0.15' %] [% minify = '' %] diff --git a/app/tmpl/module/admin/companies.min.js b/app/tmpl/module/admin/companies.min.js deleted file mode 100644 index 76e0aa96..00000000 --- a/app/tmpl/module/admin/companies.min.js +++ /dev/null @@ -1,4 +0,0 @@ -function initpage(){companies.inittable(),staffgroups.inittable(),worktimes.inittable(),users.inittable(),schemadataset.initform()}schemata="public",currentview=null -let periodunits=[{value:"week",text:"Semaine(s)"},{value:"month",text:"Mois"}],periodtypes=[{value:"1-14",text:"1-14"},{value:"15-49",text:"15-49"},{value:">=50",text:">=50"}],companies={tbl:null,current_company:null,current_schemata:null,current_view:"basedata",name:"companies",choices:{reportperiodunit:null,payedpauses:null,periodtypes:null,timetrackertype:null},initform:function(){flatpickr("#reportperiodstart",{altInput:!0,altFormat:"d.m.Y",dateFormat:"Y-m-d",locale:"fr",onClose:function(e,t,a){dataform.saveschemafield(document.getElementById("reportperiodstart"),"public")}}),companies.choices["reportperiodunit"]=new SlimSelect({select:"#reportperiodunit",showSearch:!1,afterClose:function(){dataform.saveschemafield(document.getElementById("reportperiodunit"),"public")}}),companies.choices["payedpauses"]=new SlimSelect({select:"#payedpauses",showSearch:!1,afterClose:function(){dataform.saveschemafield(document.getElementById("payedpauses"),"public")}}),companies.choices["periodtypes"]=new SlimSelect({select:"#periodtypes",showSearch:!1,afterClose:function(){dataform.saveschemafield(document.getElementById("periodtypes"),"public")}}),companies.choices["timetrackertype"]=new SlimSelect({select:"#timetrackertype",showSearch:!1,afterClose:function(){dataform.saveschemafield(document.getElementById("timetrackertype"),"public")}}),dataform.fillselectlist(companies.choices["reportperiodunit"],periodunits,"value","text"),companies.getCompanySizes()},inittable:function(){companies.initform(),companies.tbl=new Tabulator("#tbl_companies",{height:"calc(100vh - 55px)",layout:"fitDataFill",selectable:1,rowClick:function(e,t){companies.edit()},rowContext:function(e,t){e.preventDefault()},columns:[{title:"entreprise",field:"company",resizable:!1},{title:"dataset",field:"datasetname",resizable:!1}]}),companies.gettbldata()},gettbldata:function(e){companies.current_company=e||null,postData("db.cgi",{get:"companiesdata",schemata:"public"}).then(e=>{companies.tbl.setData(e.result.sqldata).then(function(){companies.current_company&&companies.tbl.table.selectRow(companies.current_company)})})},edit:function(){let e=companies.tbl.getSelectedData() -e[0]?(companies.current_schemata=e[0].schemata,dataform.cleanform2("companies",companies.choices),postData("db.cgi",{get:"company",schemata:e[0].schemata}).then(e=>{dataform.fillformbydataclass2("companies",companies.choices,e.result.data)}),staffgroups.gettbldata(),worktimes.gettbldata(),users.gettbldata(),companies.setview(companies.current_view)):app.viewpanel("nodata")},save:function(){dataform.saveform("companies",schemata,null),app.viewpanel("tbl_companies")},afterdeletecallback:function(e){companies.gettbldata(),app.viewpanel("tbl_companies")},setview:function(e){let t=companies.tbl.getSelectedData() -t[0]&&(companies.current_view=e,app.viewpanel(e))},getCompanySizes:function(){postData("db.cgi",{get:"companysize",schemata:"public"}).then(e=>{dataform.fillselectlist(companies.choices["periodtypes"],e.result.sqldata,"periodtype","periodtype")})}} diff --git a/app/tmpl/module/admin/schemadataset.min.js b/app/tmpl/module/admin/schemadataset.min.js deleted file mode 100644 index 2d05a5ec..00000000 --- a/app/tmpl/module/admin/schemadataset.min.js +++ /dev/null @@ -1,3 +0,0 @@ -let schemadataset={choices:{newsector:null,periodtype:null},initform:function(){schemadataset.choices["newsector"]=new SlimSelect({select:"#newsector",showSearch:!1}),schemadataset.choices["periodtype"]=new SlimSelect({select:"#periodtype",showSearch:!1}),schemadataset.getsectors(),schemadataset.getperiodtypes()},add:function(){dataform.cleanform2("dataset",{}),app.viewdialog("dataset")},remove:function(){let e=companies.tbl.getSelectedData() -e[0]&&(flds={},flds["fn"]="del_company",flds["id"]=e[0].id,flds["schemata"]="public",showinfodlg("Supprimer","Êtes vous sûre de supprimer l'entreprise sélectionnée?",schemadataset.removedata,flds,'Supprimer','Annuler'))},removedata:function(e){postData("db.cgi",e).then(e=>{companies.gettbldata()})},checkschema(){let e=document.getElementById("newdataset").value -postData("db.cgi",{fn:"getfreeschema",datasetname:e}).then(e=>{document.getElementById("newschemata").value=e.result.newschema})},save:function(){document.getElementById("dlg_dataset").style.display="none",showdataloaddlg("",'
Attendez s.v.p.!
'),postData("db.cgi",{fn:"installschema",schemaname:document.getElementById("newschemata").value,datasetname:document.getElementById("newdataset").value,sector:schemadataset.choices["newsector"].selected(),periodtype:schemadataset.choices["periodtype"].selected()}).then(e=>{companies.gettbldata(),closedataloaddlg()}).catch(e=>{companies.gettbldata(),closedataloaddlg()})},getsectors:function(){postData("db.cgi",{get:"sectors",schemata:"public"}).then(e=>{dataform.fillselectlist(schemadataset.choices["newsector"],e.result.sqldata,"sector","sector")})},getperiodtypes:function(){postData("db.cgi",{get:"companysize",schemata:"public"}).then(e=>{dataform.fillselectlist(schemadataset.choices["periodtype"],e.result.sqldata,"periodtype","periodtype")})}} diff --git a/app/tmpl/module/admin/sectors.min.js b/app/tmpl/module/admin/sectors.min.js deleted file mode 100644 index 93786cb3..00000000 --- a/app/tmpl/module/admin/sectors.min.js +++ /dev/null @@ -1,2 +0,0 @@ -function initpage(){sector.inittable()}schemata="public",currentview=null -let sector={tbl:null,initform:function(){},inittable:function(){sector.initform(),sector.tbl=new Tabulator("#tbl_sectors",{headerFilterPlaceholder:"filter...",height:"calc(100vh - 111px)",layout:"fitDataFill",selectable:1,rowContext:function(t,e){t.preventDefault()},columns:[{title:"secteur",field:"sector",headerFilter:"input",headerSort:!0},{title:"nbr. salariés",field:"periodtype",headerFilter:"input",headerSort:!0},{title:"début",field:"startdate",headerSort:!0,formatter:"datetime",formatterParams:{inputFormat:"YYYY-MM-DD",outputFormat:"DD.MM.YYYY",invalidPlaceholder:""}},{title:"fin",field:"enddate",headerSort:!0,formatter:"datetime",formatterParams:{inputFormat:"YYYY-MM-DD",outputFormat:"DD.MM.YYYY",invalidPlaceholder:""}},{title:"max heures/jour",field:"maxdayhours",headerSort:!1,formatter:timeFormatter},{title:"H/Sem.",field:"defaultweekhours",headerSort:!1,formatter:timeFormatter},{title:"max heures/semaine",field:"maxweekhours",headerSort:!1,formatter:timeFormatter},{title:"max coupure",field:"maxinterruptionhours",headerSort:!1,formatter:timeFormatter},{title:"min h. libres
quotidienne",field:"mindailyrecuperation",headerSort:!1,formatter:timeFormatter},{title:"standard",field:"isdefault",headerSort:!1,formatter:"tickCross",hozAlign:"center",formatterParams:{allowEmpty:!0,allowTruthy:!0,tickElement:""}}]}),sector.gettbldata()},gettbldata:function(t){postData("db.cgi",{get:"sectordata",schemata:"public"}).then(t=>{sector.tbl.setData(t.result.sqldata)})},add:function(){},confirmremove:function(){},remove:function(){},edit:function(){},save:function(){},setview:function(t){}},timeFormatter=function(t,e){return t.getValue().length>5?t.getValue().substring(0,5):t.getValue()} diff --git a/app/tmpl/module/admin/staffgroups.min.js b/app/tmpl/module/admin/staffgroups.min.js deleted file mode 100644 index 8bd97a46..00000000 --- a/app/tmpl/module/admin/staffgroups.min.js +++ /dev/null @@ -1,7 +0,0 @@ -let staffgroups={tbl:null,choices:{},initform:function(){},inittable:function(){staffgroups.tbl=new Tabulator("#tbl_staffgroups",{height:"254px",layout:"fitDataStretch",selectable:1,rowContext:function(t,a){t.preventDefault()},columns:[{title:"Département",field:"groupname"},{title:"salarié(s)",field:"staffmembers"}]})},gettbldata:function(){sel=companies.tbl.getSelectedData(),sel[0]&&postData("db.cgi",{get:"staffgroups",schemata:sel[0].schemata}).then(t=>{staffgroups.tbl.setData(t.result.sqldata)})},add:function(){dataform.cleanform2("staffgroups",staffgroups.choices),app.viewdialog("staffgroups")},edit:function(){let t=staffgroups.tbl.getSelectedData() -t[0]&&(dataform.cleanform2("staffgroups",staffgroups.choices),postData("db.cgi",{get:"staffgroup",schemata:companies.current_schemata,id:t[0].id}).then(t=>{t.result.data["id_staffgroups"]=t.result.data["id"],dataform.fillformbydataclass2("staffgroups",{},t.result.data),app.viewdialog("staffgroups")}))},remove:function(){let t=staffgroups.tbl.getSelectedData() -var a=staffgroups.tbl.getData() -if(a.length<=1)return!1 -if(t[0]){if(parseInt(t[0].staffmembers)>0)return!1 -flds={},flds["fn"]="del_staffgroup",flds["id"]=t[0].id,flds["schemata"]=companies.current_schemata,showinfodlg("Supprimer","Êtes vous sûre de supprimer le département sélectionné?",staffgroups.removedata,flds,'Supprimer','Annuler')}},removedata:function(t){postData("db.cgi",t).then(t=>{staffgroups.gettbldata()})},save:function(){let t={fn:"set_staffgroup",schemata:companies.current_schemata,id_staffgroup:document.getElementById("id_staffgroups").value,groupname:document.getElementById("groupname").value} -return postData("db.cgi",t).then(t=>{staffgroups.gettbldata(),document.getElementById("dlg_staffgroups").style.display="none",dataform.formsaved({})}),!1},afterdeletecallback:function(t){staffgroups.gettbldata()}} diff --git a/app/tmpl/module/admin/users.min.js b/app/tmpl/module/admin/users.min.js deleted file mode 100644 index f7d7f788..00000000 --- a/app/tmpl/module/admin/users.min.js +++ /dev/null @@ -1,27 +0,0 @@ -let users={tbl:null,current_user:"[% session.id %]",edit:null,choices:{schemaaccess:null,user_id_staffgroups:null,id_company:null,id_usergroup:null},initform:function(){users.choices["id_company"]=new SlimSelect({select:"#id_company",showSearch:!1}),users.choices["id_usergroup"]=new SlimSelect({select:"#id_usergroup",showSearch:!1}),users.choices["schemaaccess"]=new SlimSelect({select:"#schemaaccess",showSearch:!1}),users.choices["user_id_staffgroups"]=new SlimSelect({select:"#user_id_staffgroups",showSearch:!1}),users.getcompanies(),users.getusergroups(),users.getschemata(),users.getUserStaffGroups()},inittable:function(){users.initform(),users.tbl=new Tabulator("#tbl_users",{height:"calc(100vh - 111px)",layout:"fitDataFill",selectable:1,rowContext:function(e,s){e.preventDefault()},columns:[{title:"Nom",field:"surname"},{title:"Prénom",field:"prename"},{title:"Login",field:"username"},{title:"Accès",field:"groupname"},{title:"Accès Département",field:"staffgroups"},{title:"Bloqué",field:"isblocked",formatter:"tickCross",hozAlign:"center",formatterParams:{allowEmpty:!0,allowTruthy:!0,tickElement:''}}]})},gettbldata:function(){let e=companies.tbl.getSelectedData() -e[0]&&postData("db.cgi",{get:"userlist",schemata:companies.current_schemata}).then(e=>{users.tbl.setData(e.result.sqldata)})},add:function(){document.getElementById("username").disabled=!1,dataform.cleanform2("users",users.choices),users.getUserStaffGroups(),app.viewdialog("users")},edit:function(){let e=users.tbl.getSelectedData() -e[0]&&(document.getElementById("username").disabled=!0,users.getUserStaffGroups(),dataform.cleanform2("users",users.choices),postData("db.cgi",{get:"user",id:e[0].id}).then(e=>{dataform.fillformbydataclass2("users",users.choices,e.result.data),app.viewdialog("users")}))},remove:function(){let e=users.tbl.getSelectedData() -if(e[0].id==users.current_user)return!1 -e[0]&&(flds={},flds["fn"]="del_user",flds["id"]=e[0].id,flds["schemata"]="public",showinfodlg("Supprimer","Êtes vous sûre de supprimer l'utilisateur sélectionné?",users.removedata,flds,'Supprimer','Annuler'))},removedata:function(e){postData("db.cgi",e).then(e=>{users.gettbldata()})},validateform:function(){let e=users.choices["id_company"].selected() -if(""==e)return document.getElementById("usermsg").innerHTML='
Entreprise ne doit pas être vide!
',!1 -let s=users.choices["id_usergroup"].selected() -if(0==s.length)return document.getElementById("usermsg").innerHTML='
Accès Groupe ne doit pas être vide!
',!1 -let t=users.choices["schemaaccess"].selected() -return 0==t.length?(document.getElementById("usermsg").innerHTML='
Accès Entreprise ne doit pas être vide!
',!1):(users.checkemail(),!1)},confirmchangepassword:function(){ -/* @preserve [% IF session.usergroup == 'admin' %]*/ -let e=users.tbl.getSelectedData() -e[0]&&showinfodlg("Nouveau Mot de Passe","Êtes vous sûre changer le mot de passe?",users.setnewpassword,{},'Oui','Non') -/* @preserve [% END %]*/},setnewpassword:function(){ -/* @preserve [% IF session.usergroup == 'admin' %]*/ -let e=users.tbl.getSelectedData() -if(e[0]){let s={fn:"setnewpassword",email:e[0].username} -postData("db.cgi",s).then(e=>{document.getElementById("dlg_users").style.display="none",e&&e.result.data.password?showmessagedlg("Nouveau mot de passe!",'
'):showmessagedlg("Erreur!","Une erreur c'est produite pour l'envoie d'un nouveau mot de passe!")})} -/* @preserve [% END %]*/},validatenewlogin:function(){let e=document.getElementById("newuseremail").value -users.validateEmail(e)?postData("db.cgi",{fn:"validatelogin",username:e}).then(e=>{e&&e.result.found>"0"?document.getElementById("nunmsg").innerHTML='
Il existe déjà uncompte avec cette addresse E-Mail!
':(dataform.saveschemafield(document.getElementById("newuseremail"),"public"),users.gettbldata(),document.getElementById("dlgusername").style.display="none")}):document.getElementById("nunmsg").innerHTML='
inserez un email valide s.v.p.!
'},dlgchangelogin:function(){ -/* @preserve[% IF session.usergroup == 'admin' %]*/ -let e=users.tbl.getSelectedData() -e[0]&&(document.getElementById("nunmsg").innerHTML="",document.getElementById("newuseremail").dataset.id=e[0].id,document.getElementById("newuseremail").value=e[0].username,document.getElementById("dlgusername").style.display="block") -/* @preserve[% END %]*/},afterdeletecallback:function(e){users.gettbldata()},afteruseradded:function(e){return users.gettbldata(),document.getElementById("dlg_users").style.display="none",!1},getcompanies:function(){postData("db.cgi",{get:"companiesdata",schemata:"public"}).then(e=>{dataform.fillselectlist(users.choices["id_company"],e.result.sqldata,"id","company")})},getusergroups:function(){postData("db.cgi",{get:"usergrouplist",schemata:"public"}).then(e=>{dataform.fillselectlist(users.choices["id_usergroup"],e.result.sqldata,"id","groupname")})},getUserStaffGroups:function(){let e=companies.tbl.getSelectedData() -e[0]&&postData("db.cgi",{get:"staffgroups",schemata:e[0].schemata}).then(e=>{dataform.fillselectlist(users.choices["user_id_staffgroups"],e.result.sqldata,"id","groupname")})},getschemata:function(){postData("db.cgi",{get:"allschemalist",schemata:"public"}).then(e=>{dataform.fillselectlist(users.choices["schemaaccess"],e.result.sqldata,"schemata","datasetname")})},checkemail:function(){return users.saveform(),!1},saveform:function(){let e=dataform.getformcontent("users",users.choices) -e["schemata"]="public",e["fn"]="saveform",e["table"]="users",e["ident_users_id"]=e["ident_users_id_users"],delete e["null"],delete e["ident_users_id_users"],postData("db.cgi",e).then(e=>{users.gettbldata(),document.getElementById("dlg_users").style.display="none",dataform.formsaved(null)})},validateEmail:function(e){let s=/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ -return s.test(String(e).toLowerCase())},viewtable:function(){users.gettbldata()}} diff --git a/app/tmpl/module/admin/vacancydays.min.js b/app/tmpl/module/admin/vacancydays.min.js deleted file mode 100644 index 3dedc1f6..00000000 --- a/app/tmpl/module/admin/vacancydays.min.js +++ /dev/null @@ -1,3 +0,0 @@ -function initpage(){vacancydays.inittable()}schemata="public" -let vacancydays={tbl:null,initform:function(){},inittable:function(){var a=moment(new Date).year() -vacancydays.initform(),vacancydays.tbl=new Tabulator("#tbl_vacancydays",{headerFilterPlaceholder:"filtrage...",initialHeaderFilter:[{field:"daydate",value:a}],height:"calc(100vh - 96px)",layout:"fitDataFill",selectable:1,rowClick:function(a,t){vacancydays.edit()},rowContext:function(a,t){a.preventDefault()},columns:[{title:"Date",field:"daydate",headerFilter:"input",headerSort:"date",formatter:"datetime",resizable:!1,formatterParams:{inputFormat:"YYYY-MM-DD",outputFormat:"DD.MM.YYYY",invalidPlaceholder:""}},{title:"Nom",field:"vacancyname",headerFilter:"input"}]}),vacancydays.gettbldata()},gettbldata:function(a){postData("db.cgi",{get:"vacancydays",schemata:"public"}).then(a=>{vacancydays.tbl.setData(a.result.sqldata)})},add:function(){},confirmremove:function(){},remove:function(){},edit:function(){},save:function(){}} diff --git a/app/tmpl/module/admin/vacancytypes.min.js b/app/tmpl/module/admin/vacancytypes.min.js deleted file mode 100644 index d2673fcf..00000000 --- a/app/tmpl/module/admin/vacancytypes.min.js +++ /dev/null @@ -1,3 +0,0 @@ -function initpage(){vacancytypes.inittable()}schemata="public" -let vacancytypes={tbl:null,initform:function(){},inittable:function(){moment(new Date).year() -vacancytypes.initform(),vacancytypes.tbl=new Tabulator("#tbl_vacancytypes",{headerFilterPlaceholder:"filtrage...",height:"calc(100vh - 96px)",layout:"fitDataFill",selectable:1,rowClick:function(t,e){vacancytypes.edit()},rowContext:function(t,e){t.preventDefault()},columns:[{title:"Type",field:"vacancytype",headerFilter:"input"},{title:"Nom",field:"vacancyname",headerFilter:"input"},{title:"Couleur",field:"color"},{title:"Legende",field:"legend"}]}),vacancytypes.gettbldata()},gettbldata:function(){postData("db.cgi",{get:"gvacancytypes",schemata:"public"}).then(t=>{vacancytypes.tbl.setData(t.result.sqldata)})},add:function(){},confirmremove:function(){},remove:function(){},edit:function(){},save:function(){}} diff --git a/app/tmpl/module/admin/worktimes.min.js b/app/tmpl/module/admin/worktimes.min.js deleted file mode 100644 index 757a919a..00000000 --- a/app/tmpl/module/admin/worktimes.min.js +++ /dev/null @@ -1,6 +0,0 @@ -let worktimes={tbl:null,choices:{},initform:function(){flatpickr("#startdate",{altInput:!0,altFormat:"d.m.Y",dateFormat:"Y-m-d",locale:"fr"}),flatpickr("#enddate",{altInput:!0,altFormat:"d.m.Y",dateFormat:"Y-m-d",locale:"fr"})},inittable:function(){worktimes.tbl=new Tabulator("#tbl_worktimes",{headerFilterPlaceholder:"filter...",height:"calc(100vh - 111px)",layout:"fitDataFill",selectable:1,rowContext:function(t,e){t.preventDefault()},columns:[{title:"début",field:"startdate",headerSort:!0,formatter:"datetime",formatterParams:{inputFormat:"YYYY-MM-DD",outputFormat:"DD.MM.YYYY",invalidPlaceholder:""}},{title:"fin",field:"enddate",headerSort:!0,formatter:"datetime",formatterParams:{inputFormat:"YYYY-MM-DD",outputFormat:"DD.MM.YYYY",invalidPlaceholder:""}},{title:"max heures/jour",field:"maxdayhours",headerSort:!1},{title:"H/Sem.",field:"defaultweekhours",headerSort:!1},{title:"max heures/semaine",field:"maxweekhours",headerSort:!1},{title:"max coupure",field:"maxinterruptionhours",headerSort:!1},{title:"min h. libres
quotidienne",field:"mindailyrecuperation",headerSort:!1},{title:"standard",field:"isdefault",headerSort:!1,formatter:"tickCross",hozAlign:"center",formatterParams:{allowEmpty:!0,allowTruthy:!0,tickElement:""}}]}),worktimes.initform()},gettbldata:function(){let t=companies.tbl.getSelectedData() -t[0]&&postData("db.cgi",{get:"worktimeslist",schemata:t[0].schemata}).then(t=>{worktimes.tbl.setData(t.result.sqldata)})},add:function(){dataform.cleanform2("worktimes",worktimes.choices),app.viewdialog("worktimes")},edit:function(){let t=worktimes.tbl.getSelectedData() -t[0]&&(dataform.cleanform2("worktimes",worktimes.choices),postData("db.cgi",{get:"worktime",schemata:companies.current_schemata,id:t[0].id}).then(t=>{t.result.data["id_worktimes"]=t.result.data["id"],"1"==t.result.data.isdefault?document.getElementById("worktimedates").style.display="none":document.getElementById("worktimedates").style.display="block",dataform.fillformbydataclass2("worktimes",worktimes.choices,t.result.data),app.viewdialog("worktimes")}))},remove:function(){let t=worktimes.tbl.getSelectedData() -if(t[0].isdefault)return showmessagedlg("Info","Le heures Standard ne peuvent pas être supprimés!"),!1 -t[0]&&(flds={},flds["fn"]="del_worktimes",flds["id"]=t[0].id,flds["schemata"]=schemata,showinfodlg("Supprimer","Êtes vous sûre de supprimer les heures sélectionné?",worktimes.removedata,flds,'Supprimer','Annuler'))},removedata:function(t){postData("db.cgi",t).then(t=>{worktimes.gettbldata()})},save:function(){let t=dataform.getformcontent("worktimes") -return t["fn"]="saveform",t["table"]="worktimes",t["ident_worktimes_id"]=t["ident_worktimes_id_worktimes"],delete t["ident_worktimes_id_worktimes"],delete t["null"],t["schemata"]=schemata,postData("db.cgi",t).then(t=>{worktimes.gettbldata(),document.getElementById("dlg_worktimes").style.display="none"}),!1}} diff --git a/app/tmpl/module/company/company.min.js b/app/tmpl/module/company/company.min.js deleted file mode 100644 index 4d37b912..00000000 --- a/app/tmpl/module/company/company.min.js +++ /dev/null @@ -1,2 +0,0 @@ -function initpage(){company.initform(),staffgroups.inittable(),users.inittable(),company.edit()}schemata="public",currentview=null -let periodunits=[{value:"week",text:"Semaine(s)"},{value:"month",text:"Mois"}],company={current_company:null,current_schemata:null,current_view:"basedata",choices:{reportperiodunit:null,payedapuses:null},initform:function(){flatpickr("#reportperiodstart",{altInput:!0,altFormat:"d.m.Y",dateFormat:"Y-m-d",locale:"fr"}),company.choices["reportperiodunit"]=new SlimSelect({select:"#reportperiodunit",showSearch:!1,disabled:!0}),company.choices["payedpauses"]=new SlimSelect({select:"#payedpauses",showSearch:!1,disabled:!0}),dataform.fillselectlist(company.choices["reportperiodunit"],periodunits,"value","text")},edit:function(){company.current_schemata=schemata,dataform.cleanform2("company",company.choices),postData("db.cgi",{get:"company",schemata:"public",schemata:schemata}).then(e=>{dataform.fillformbydataclass2("companies",company.choices,e.result.data),company.current_company=e.result.data.id,staffgroups.gettbldata(),users.gettbldata(),company.setview(company.current_view)})},setview:function(e){company.current_view=e,app.viewpanel(e)}} diff --git a/app/tmpl/module/company/staffgroups.min.js b/app/tmpl/module/company/staffgroups.min.js deleted file mode 100644 index 4c235cb2..00000000 --- a/app/tmpl/module/company/staffgroups.min.js +++ /dev/null @@ -1,8 +0,0 @@ -let staffgroups={tbl:null,choices:{},initform:function(){},inittable:function(){staffgroups.tbl=new Tabulator("#tbl_staffgroups",{height:"254px",layout:"fitDataFill",selectable:1,rowContext:function(t,a){t.preventDefault()},columns:[{title:"Département",field:"groupname"},{title:"salarié(s)",field:"staffmembers"}]})},gettbldata:function(){postData("db.cgi",{get:"staffgroups",schemata:schemata}).then(t=>{staffgroups.tbl.setData(t.result.sqldata)})},add:function(){dataform.cleanform2("staffgroups",staffgroups.choices),app.viewdialog("staffgroups")},edit:function(){let t=staffgroups.tbl.getSelectedData() -t[0]&&(dataform.cleanform2("staffgroups",staffgroups.choices),postData("db.cgi",{get:"staffgroup",schemata:schemata,id:t[0].id}).then(t=>{t.result["id_staffgroups"]=t.result["id"],dataform.fillformbydataclass2("staffgroups",staffgroups.choices,t.result),app.viewdialog("staffgroups")}))},remove:function(){let t=staffgroups.tbl.getSelectedData() -var a=staffgroups.tbl.getData() -if(a.length<=1)return!1 -if(t[0]){if(parseInt(t[0].staffmembers)>0)return!1 -flds={},flds["fn"]="del_staffgroup",flds["id"]=t[0].id,flds["schemata"]=schemata,showinfodlg("Supprimer","Êtes vous sûre de supprimer le departement sélectionné?",staffgroups.removedata,flds,'Supprimer','Annuler')}},removedata:function(t){postData("db.cgi",t).then(t=>{staffgroups.gettbldata()})},save:function(){staffgroups.tbl.getSelectedData() -let t=dataform.getformcontent("staffgroups") -return t["ident_staffgroups_id"]=t["ident_staffgroups_id_staffgroups"],delete t["ident_staffgroups_id_staffgroups"],delete t["null"],t["table"]="staffgroups",dataform.saveformdata(t,staffgroups.aftersavedcallback,schemata),!1},afterdeletecallback:function(t){staffgroups.gettbldata()},aftersavedcallback:function(){return staffgroups.gettbldata(),document.getElementById("dlg_staffgroups").style.display="none",!1}} diff --git a/app/tmpl/module/company/users.min.js b/app/tmpl/module/company/users.min.js deleted file mode 100644 index ceb05781..00000000 --- a/app/tmpl/module/company/users.min.js +++ /dev/null @@ -1,10 +0,0 @@ -let users={tbl:null,current_user:"[% session.id %]",choices:{schemaaccess:null},initform:function(){},inittable:function(){users.initform(),users.tbl=new Tabulator("#tbl_users",{height:"calc(100vh - 111px)",layout:"fitDataFill",selectable:1,rowContext:function(e,s){e.preventDefault()},columns:[{title:"Nom",field:"surname"},{title:"Prénom",field:"prename"},{title:"Login",field:"username"},{title:"Accès",field:"groupname"},{title:"Accès Département",field:"staffgroups"},{title:"Bloqué",field:"isblocked",formatter:"tickCross",hozAlign:"center",formatterParams:{allowEmpty:!0,allowTruthy:!0,tickElement:''}}]})},gettbldata:function(){postData("db.cgi",{get:"userlist",schemata:company.current_schemata}).then(e=>{users.tbl.setData(e.result.sqldata)})},confirmchangepassword:function(){ -/* @preserve[% IF session.usergroup == 'admin' || session.usergroup == 'manager' %]*/ -let e=users.tbl.getSelectedData() -e[0]&&showinfodlg("Nouveau Mot de Passe","Êtes vous sûre changer le mot de passe?",users.setnewpassword,{},'Oui','Non') -/* @preserve[% END %]*/},setnewpassword:function(){ -/* @preserve[% IF session.usergroup == 'admin' || session.usergroup == 'manager' %]*/ -let e=users.tbl.getSelectedData() -if(e[0]){let s={fn:"setnewpassword",email:e[0].username} -postData("db.cgi",s).then(e=>{document.getElementById("dlg_users").style.display="none",e&&e.result.data.password?showmessagedlg("Nouveau mot de passe!",'
'):showmessagedlg("Erreur!","Une erreur c'est produite pour l'envoie d'un nouveau mot de passe!")})} -/* @preserve[% END %]*/}} diff --git a/app/tmpl/module/index/index.min.js b/app/tmpl/module/index/index.min.js deleted file mode 100644 index a27a0a6d..00000000 --- a/app/tmpl/module/index/index.min.js +++ /dev/null @@ -1 +0,0 @@ -function initpage(){index.initform(),index.gettermsstatus()}let index={choices:{current_schemata:null},initform:function(){document.getElementById("current_schemata").value=schemata,index.choices.current_schemata=new SlimSelect({select:"#current_schemata",showSearch:!1,afterClose:function(){app.changedataset()}}),index.getDataSets()},gettermsstatus:function(){postData("db.cgi",{get:"termsstatus"}).then(data=>{"1"!=data.result.data.terms&&(document.getElementById("dlg_terms").style.display="block")})},getDataSets(){postData("db.cgi",{get:"userschemaaccess"}).then(data=>{dataform.fillselectlist(index.choices.current_schemata,data.result.sqldata,"schemaname","datasetname")})},acceptterms:function(){postData("db.cgi",{fn:"useracceptedterms"}).then(data=>{document.getElementById("dlg_terms").style.display="none"})}}; \ No newline at end of file diff --git a/app/tmpl/module/periods/periodvalidation.min.js b/app/tmpl/module/periods/periodvalidation.min.js deleted file mode 100644 index 30875b26..00000000 --- a/app/tmpl/module/periods/periodvalidation.min.js +++ /dev/null @@ -1,8 +0,0 @@ -let periodvalidation={showdlg:function(){dataform.cleanform2("periodvalidation",{}) -let e=reportperiod.tblfilter.getSelectedData(),t=[] -if("<15"!=e[0].periodtype)t=reportperiod.tbl.getSelectedData() -else{let e=reportperiod.tblsplitted.getSelectedData() -t[0]=reportperiod.datasums[e[0].id_staffreportperiod]}return t[0]&&(null!=t[0].isvalidated?document.getElementById("btn_invalidateperiod").style.display="inline":document.getElementById("btn_invalidateperiod").style.display="none",document.getElementById("periodvalidation_infomsg").innerHTML="",document.getElementById("periodvalidation_surname").innerHTML=t[0].surname,document.getElementById("periodvalidation_prename").innerHTML=t[0].prename,document.getElementById("title_periodvalidation").innerHTML="Période du "+moment(t[0].startdate).format("DD.MM.YYYY")+" au "+moment(t[0].enddate).format("DD.MM.YYYY"),document.getElementById("id_staffreportperiod").value=t[0].id,document.getElementById("payedhours0").value=t[0].payedhours0,document.getElementById("payedhours0calc").value=t[0].payedhours0,document.getElementById("payedhours40").value=t[0].payedhours40,document.getElementById("payedhours40calc").value=t[0].payedhours40calc,document.getElementById("avgtotalweekhours").value=t[0].avgtotalweekhours,document.getElementById("hourstotransfer").value=t[0].hourstotransfer,document.getElementById("hourstotransfercalc").value=t[0].hourstotransfercalc,app.viewdialog("periodvalidation")),!1},save:function(){let e=reportperiod.tbl.getSelectedData(),t={fn:"save_payedhours",schemata:schemata,id_period:e[0].id_reportperiod,id_staff:e[0].id_staff,hourstotransfer:document.getElementById("hourstotransfer").value,hourstotransfercalc:document.getElementById("hourstotransfercalc").value,payedhours40:document.getElementById("payedhours40").value,payedhours40calc:document.getElementById("payedhours40calc").value,payedhours0:document.getElementById("payedhours0").value} -return postData("db.cgi",t).then(e=>{dataform.formsaved({}),reportperiod.gettbldata()}).catch(e=>{reportperiod.gettbldata()}),!1},validate:function(){let e=reportperiod.tbl.getSelectedData(),t={fn:"validate_period",schemata:schemata,id_period:e[0].id_reportperiod,id_staff:e[0].id_staff,hourstotransfer:document.getElementById("hourstotransfer").value,hourstotransfercalc:document.getElementById("hourstotransfercalc").value,payedhours40:document.getElementById("payedhours40").value,payedhours40calc:document.getElementById("payedhours40calc").value,payedhours0:document.getElementById("payedhours0").value} -return document.getElementById("dlg_periodvalidation").style.display="none",showdataloaddlg("",'
Attendez s.v.p.!
'),postData("db.cgi",t).then(e=>{dataform.formsaved({}),reportperiod.gettbldata(),closedataloaddlg()}).catch(e=>{closedataloaddlg()}),!1},invalidate:function(){let e=reportperiod.tbl.getSelectedData(),t={fn:"invalidate_period",schemata:schemata,id_period:e[0].id_reportperiod,id_staff:e[0].id_staff} -document.getElementById("dlg_periodvalidation").style.display="none",showdataloaddlg("",'
Attendez s.v.p.!
'),postData("db.cgi",t).then(e=>{dataform.formsaved({}),reportperiod.gettbldata(),closedataloaddlg()}).catch(e=>{closedataloaddlg()})}} diff --git a/app/tmpl/module/periods/reportperiod.min.js b/app/tmpl/module/periods/reportperiod.min.js deleted file mode 100644 index fc3174de..00000000 --- a/app/tmpl/module/periods/reportperiod.min.js +++ /dev/null @@ -1,12 +0,0 @@ -function initpage(){schemata=app.getCurrentSchemata(),reportperiod.inittable(),staffperiodweeks.inittable()}let currentview=null,reportperiod={tblfilter:null,tbl:null,tblsplitted:null,datasums:null,issplitted:null,selected:null,current_view:"periods",choices:{},initform:function(){},inittable:function(){reportperiod.tblfilter=new Tabulator("#tbl_reportperiodfilter",{height:"calc(100vh - 56px)",layout:"fitDataStretch",selectable:1,rowClick:function(t,e){reportperiod.setview("periods")},rowContext:function(t,e){t.preventDefault()},columns:[{title:"Début",field:"startdate",headerSort:"datetime",formatter:"datetime",resizable:!1,formatterParams:{inputFormat:"YYYY-MM-DD",outputFormat:"DD.MM.YYYY",invalidPlaceholder:""}},{title:"Fin",field:"enddate",sorter:"datetime",resizable:!1,formatter:"datetime",formatterParams:{inputFormat:"YYYY-MM-DD",outputFormat:"DD.MM.YYYY",invalidPlaceholder:""}}]}),reportperiod.tbl=new Tabulator("#tbl_reportperiod",{height:"calc(100vh - 56px)",layout:"fitDataFill",selectable:1,rowContext:function(t,e){t.preventDefault()},groupBy:["groupname"],groupStartOpen:[!0],groupClosedShowCalcs:!0,groupHeader:[function(t,e,r){return t}],columns:[{title:"Département",field:"groupname",visible:!1},{title:'Prénom',width:170,field:"prename",headerSort:!1},{title:'Nom',width:170,field:"surname",headerSort:!1},{title:'Contrat',width:70,field:"contracthours",hozAlign:"right",headerSort:!1},{title:'Travail',width:65,field:"workhours",hozAlign:"right",headerSort:!1},{title:'Récup',width:65,field:"recuperationhours",hozAlign:"right",headerSort:!1,formatter:periodRecupFormatter},{title:'Congé',width:65,field:"vacancynormal",hozAlign:"right",headerSort:!1},{title:'Congé
maladie
',width:65,field:"vacancyill",hozAlign:"right",headerSort:!1},{title:'Total',width:65,field:"totalhours",hozAlign:"right",headerSort:!1,formatter:periodTotalFormatter},{title:'Décompte
reporté
',width:70,field:"transferedhours",hozAlign:"right",headerSort:!1},{title:'h. suppl.
payés
',width:65,field:"payedhours",hozAlign:"right",headerSort:!1,headerVertical:!0},{title:'Décompte
fin POT
',width:70,field:"hoursdiff",hozAlign:"right",headerSort:!1},{title:'suppl.
+44h
',width:50,field:"suppvacancy44hours",hozAlign:"right",headerSort:!1,headerVertical:!0},{title:'suppl.
trav. dim.
',width:50,field:"suppvacancysunwork",hozAlign:"right",headerSort:!1,headerVertical:!0},{title:'moy.
hebd.
',width:60,field:"avgtotalweekhours",hozAlign:"right",headerSort:!1,formatter:periodAVGFormatter},{title:'validé',width:40,field:"isvalidated",hozAlign:"center",headerSort:!1,formatter:"tickCross",formatterParams:{allowEmpty:!0,allowTruthy:!1},headerVertical:!0},{title:'h. suppl.
payés
',width:65,field:"payedhours",hozAlign:"right",headerSort:!1,headerVertical:!0}]}),reportperiod.tblsplitted=new Tabulator("#tbl_rpsplitted",{height:"calc(100vh - 56px)",layout:"fitDataFill",selectable:1,rowContext:function(t,e){t.preventDefault()},groupBy:["groupname","staffname"],groupStartOpen:[!0],groupClosedShowCalcs:!0,groupHeader:[function(t,e,r){return t}],columns:[{title:"Département",field:"groupname",visible:!1},{title:'Début',width:150,field:"startdate",headerSort:!1,formatter:"datetime",formatterParams:{inputFormat:"YYYY-MM-DD",outputFormat:"DD.MM.YYYY",invalidPlaceholder:""}},{title:'Fin',width:150,field:"enddate",headerSort:!1,formatter:"datetime",formatterParams:{inputFormat:"YYYY-MM-DD",outputFormat:"DD.MM.YYYY",invalidPlaceholder:""}},{title:'Contrat',width:80,field:"contracthours",hozAlign:"right",formatter:nullrFormatter,headerSort:!1,bottomCalc:reportperiod.setcontracthours},{title:'Travail',width:75,field:"workhours",hozAlign:"right",headerSort:!1,bottomCalc:reportperiod.setworkhours},{title:'Récup',width:75,field:"recuperationhours",hozAlign:"right",headerSort:!1,formatter:periodRecupFormatter,bottomCalc:reportperiod.setrecuperationhours},{title:'Congé',width:75,field:"vacancynormal",hozAlign:"right",headerSort:!1,bottomCalc:reportperiod.setvacancynormal},{title:'Congé
maladie
',width:75,field:"vacancyill",hozAlign:"right",headerSort:!1,bottomCalc:reportperiod.setvacancyill},{title:'Total',width:75,field:"totalhours",hozAlign:"right",headerSort:!1,formatter:periodTotalFormatter,bottomCalc:reportperiod.settotalhours},{title:'Décompte
reporté
',width:75,field:"transferedhours",formatter:nullrFormatter,hozAlign:"right",headerSort:!1,bottomCalc:reportperiod.settransferedhours},{title:'h. suppl.
payés
',width:70,field:"payedhours",formatter:nullrFormatter,hozAlign:"right",headerSort:!1,headerVertical:!0,bottomCalc:reportperiod.setpayedhours},{title:'Décompte
fin POT
',width:80,field:"hoursdiff",formatter:nullrFormatter,hozAlign:"right",headerSort:!1,bottomCalc:reportperiod.sethoursdiff},{title:'suppl.
+44h
',width:50,field:"suppvacancy44hours",formatter:nullrFormatter,hozAlign:"right",headerSort:!1,headerVertical:!0,bottomCalc:reportperiod.setsuppvacancy44hours},{title:'suppl.
trav. dim.
',width:50,field:"suppvacancysunwork",formatter:nullrFormatter,hozAlign:"right",headerSort:!1,headerVertical:!0,bottomCalc:reportperiod.setsuppvacancysunwork},{title:'moy.
hebd.
',width:60,field:"avgtotalweekhours",formatter:nullrFormatter,hozAlign:"right",headerSort:!1,bottomCalc:reportperiod.setavgtotalweekhours},{title:'validé',width:40,field:"isvalidated",formatter:nullrFormatter,hozAlign:"center",headerSort:!1,headerVertical:!0,bottomCalc:reportperiod.setisvalidated,bottomCalcFormatter:"html",headerVertical:!0}]}),reportperiod.gettbldatafilter()},gettbldata:function(){let t=reportperiod.tblfilter.getSelectedData() -if(t[0]){let e="" -"<15"!=t[0].periodtype?(reportperiod.issplitted=null,document.getElementById("tbl_reportperiod").style.display="block",document.getElementById("tbl_rpsplitted").style.display="none"):(e="grouped",reportperiod.issplitted=!0,document.getElementById("tbl_reportperiod").style.display="none",document.getElementById("tbl_rpsplitted").style.display="block"),postData("db.cgi",{get:"staffperiods"+e,schemata:schemata,id_period:t[0].id}).then(r=>{"grouped"==e?(reportperiod.datasums=r.result.data,postData("db.cgi",{get:"staffperiodsplitted",schemata:schemata,id_period:t[0].id}).then(t=>{reportperiod.tblsplitted.setData(t.result.sqldata)})):reportperiod.tbl.setData(r.result.sqldata)})}else reportperiod.tbl.setData([]),reportperiod.tblsplitted.setData([])},gettbldatafilter:function(){postData("db.cgi",{get:"periods",schemata:schemata}).then(t=>{reportperiod.tblfilter.setData(t.result.sqldata)})},reloadview:function(){reportperiod.gettbldata(),app.viewpanel("tbl_reportperiod")},add:function(){let t={fn:"add_reportperiod"} -return t["schemata"]=schemata,showinfodlg("Ajouter Période de référence","Ajouter prochaine periode?",reportperiod.afteraddconfirm,t,'Ajouter','Annuler'),!1},afteraddconfirm(t){postData("db.cgi",t).then(t=>{reportperiod.gettbldata()})},generatereport:function(){let t=reportperiod.tblfilter.getSelectedData(),e=reportperiod.tbl.getSelectedData(),r=[] -for(var o in e)r.push(e[o].id_staff) -let a={schemata:schemata,id_reportperiod:t[0].id,staff_exclude:r} -t[0]&&report.generate("pot","periode_"+moment(t[0].startdate).format("YYYYMMDD")+"-"+moment(t[0].enddate).format("YYYYMMDD"),a)},datarefresh:function(){return showdataloaddlg("",'
Attendez s.v.p.!
'),postData("db.cgi",{fn:"refresh_periods",schemata:schemata}).then(t=>{reportperiod.gettbldata(),closedataloaddlg()}).catch(t=>{closedataloaddlg()}),!1},periodrestsum:function(t,e,r){let o=0 -for(let e in t)o+=timecalc.IntervalToMinutes(t[e]) -return timecalc.MinutesToInterval(o)},setview:function(t){"periods"==t&&reportperiod.gettbldata(),reportperiod.current_view=t,app.viewpanel(t)},editplan(){if(reportperiod.issplitted){let t=reportperiod.tblsplitted.getSelectedData() -t[0]&&staffperiodweeks.loadplan(reportperiod.tblsplitted)}else{let t=reportperiod.tbl.getSelectedData() -t[0]&&staffperiodweeks.loadplan(reportperiod.tbl)}},setworkhours:function(t,e,r){return reportperiod.datasums&&reportperiod.datasums[e[0].id_staffreportperiod]?reportperiod.datasums[e[0].id_staffreportperiod].workhours:""},setcontracthours:function(t,e,r){return reportperiod.datasums&&reportperiod.datasums[e[0].id_staffreportperiod]?reportperiod.datasums[e[0].id_staffreportperiod].contracthours:""},setrecuperationhours:function(t,e,r){return reportperiod.datasums&&reportperiod.datasums[e[0].id_staffreportperiod]?reportperiod.datasums[e[0].id_staffreportperiod].recuperationhours:""},setvacancynormal:function(t,e,r){return reportperiod.datasums&&reportperiod.datasums[e[0].id_staffreportperiod]?reportperiod.datasums[e[0].id_staffreportperiod].vacancynormal:""},setvacancyill:function(t,e,r){return reportperiod.datasums&&reportperiod.datasums[e[0].id_staffreportperiod]?reportperiod.datasums[e[0].id_staffreportperiod].vacancyill:""},settotalhours:function(t,e,r){return reportperiod.datasums&&reportperiod.datasums[e[0].id_staffreportperiod]?reportperiod.datasums[e[0].id_staffreportperiod].totalhours:""},settransferedhours:function(t,e,r){return reportperiod.datasums&&reportperiod.datasums[e[0].id_staffreportperiod]?reportperiod.datasums[e[0].id_staffreportperiod].transferedhours:""},sethoursdiff:function(t,e,r){return reportperiod.datasums&&reportperiod.datasums[e[0].id_staffreportperiod]?reportperiod.datasums[e[0].id_staffreportperiod].hoursdiff:""},setsuppvacancy44hours:function(t,e,r){return reportperiod.datasums&&reportperiod.datasums[e[0].id_staffreportperiod]?reportperiod.datasums[e[0].id_staffreportperiod].suppvacancy44hours:""},setsuppvacancysunwork:function(t,e,r){return reportperiod.datasums&&reportperiod.datasums[e[0].id_staffreportperiod]?reportperiod.datasums[e[0].id_staffreportperiod].suppvacancysunwork:""},setavgtotalweekhours:function(t,e,r){return reportperiod.datasums&&reportperiod.datasums[e[0].id_staffreportperiod]?reportperiod.datasums[e[0].id_staffreportperiod].avgtotalweekhours:""},setisvalidated:function(t,e,r){return reportperiod.datasums&&reportperiod.datasums[e[0].id_staffreportperiod]&&reportperiod.datasums[e[0].id_staffreportperiod].isvalidated?'':""}},periodRecupFormatter=function(t,e){return null!=t._cell.row.data.transferedhours&&t.getValue()✖',onChange:function(){staffperiodweeks.setvacancyhours()}}),staffperiodweeks.choices["id_workplan"]=new SlimSelect({select:"#id_workplan",showSearch:!1}),staffperiodweeks.choices["id_recuperationtype"]=new SlimSelect({select:"#id_recuperationtype",showSearch:!1,allowDeselect:!0,deselectLabel:'✖',onChange:function(){staffperiodweeks.setrecuperationhours()}}),staffperiodweeks.getvacancy(),staffperiodweeks.getrecuperation(),staffperiodweeks.getdefaultdaylimits() -let e=document.getElementsByClassName("timefield") -for(let t=0;ttravail",field:"dspworkdata",headerSort:!1,hozAlign:"center",formatter:worktimeFormatter},{title:"heures de
pause",field:"dsppausedata",headerSort:!1,hozAlign:"center",formatter:sizeFormatter},{title:"total
pause",field:"timepause",headerSort:!1,hozAlign:"center"},{title:"Coup.",field:"interruptionhours",headerSort:!1,hozAlign:"center",formatter:interruptFormatter},{title:"Congé",field:"vacancyhours",headerSort:!1,hozAlign:"center",formatter:vacancyformatter,bottomCalc:staffperiodweeks.setweekvacancyhours},{title:"Récup",field:"recuperationhours",hozAlign:"center",headerSort:!1,formatter:recupformatter,bottomCalc:staffperiodweeks.setweekrecuperationhours},{title:"Total",field:"dayhours",hozAlign:"center",headerSort:!1,formatter:totalFormatter,bottomCalc:staffperiodweeks.setweektotalhours,bottomCalcFormatter:"html"},{title:"diff
contrat",field:"diffhours",hozAlign:"center",formatter:nullFormatter,headerSort:!1,bottomCalc:staffperiodweeks.setweekdiffhours},{title:"moy.
hebd.",field:"avgweekhours",hozAlign:"center",headerSort:!1,formatter:nullFormatter,bottomCalc:staffperiodweeks.setavgweekhours},{title:"heures libres
après trav",field:"freehoursafter",hozAlign:"center",formatter:freetimeFormatter,headerSort:!1},{title:"pointages",field:"trackedtime",hozAlign:"center",formatter:timetrackFormatter,headerSort:!1}]}),staffperiodweeks.initform(),staffperiodweeks.inittimetracktable()},inittimetracktable:function(){staffperiodweeks.tbltimetracker=new Tabulator("#tbl_daytimetracker",{height:"400px",layout:"fitDataFill",selectable:!0,selectableRangeMode:"click",dataEdited:function(e){staffperiodweeks.timerowtracktotal(e)},rowContext:function(e,t){e.preventDefault()},columns:[{title:"Entrée",field:"stamp_in",headerSort:!1,hozAlign:"left",width:80,editor:"input",editorParams:{mask:"99:99",elementAttributes:{maxlength:5}}},{title:"Sortie",field:"stamp_out",headerSort:!1,hozAlign:"left",width:80,editor:"input",editorParams:{mask:"99:99",elementAttributes:{maxlength:5}}},{title:"Total",field:"total",headerSort:!1,hozAlign:"left",width:90,formatter:boldFormatter,bottomCalc:staffperiodweeks.settrackdaytotal,bottomCalcFormatter:"html"}]})},gettbldata:function(){staffperiodweeks.today=moment(new Date).format("YYYY-MM-DD") -let e=staffperiodweeks.parenttbl.getSelectedData(),t=moment(e[0].startdate).startOf("isoWeek").format("YYYY-MM-DD"),a=moment(e[0].enddate).endOf("isoWeek").format("YYYY-MM-DD") -postData("db.cgi",{get:"periodweeksums",schemata:schemata,id_staff:e[0].id_staff,id_period:e[0].id_reportperiod,date_start:t,date_end:a}).then(r=>{staffperiodweeks.weekdata=r.result.data,postData("db.cgi",{get:"perioddays",schemata:schemata,id_staff:e[0].id_staff,date_start:t,date_end:a}).then(e=>{e&&e.result.sqldata&&staffperiodweeks.tbl.setData(e.result.sqldata).then(e=>{null!=staffperiodweeks.selectedid&&(staffperiodweeks.tbl.selectRow(staffperiodweeks.selectedid),staffperiodweeks.tbl.scrollToRow(staffperiodweeks.selectedid,"center",!1))})})})},loadplan:function(e){staffperiodweeks.selectedrow=null,staffperiodweeks.parenttbl=e -let t=staffperiodweeks.parenttbl.getSelectedData() -t[0]&&( -/* @preserve[% IF session.usergroup == 'temleader' %] */ -"1"==t[0].isvalidated?document.getElementById("tbl_editweeks").style.display="none":document.getElementById("tbl_editweeks").style.display="inline" -/* @preserve[% ELSE %] */,document.getElementById("tbl_editweeks").style.display="inline", -/* @preserve[% END %] */ -document.getElementById("periodtitle").innerHTML=" Période "+moment(t[0].startdate).format("DD.MM.YYYY")+"-"+moment(t[0].enddate).format("DD.MM.YYYY"),document.getElementById("stafftitle").innerHTML=t[0].staffname+"("+t[0].groupname+")",staffperiodweeks.gettbldata(),app.viewpanel("staffperiodweeks"))},setweekworkhours:function(e,t,a){return staffperiodweeks.weekdata&&staffperiodweeks.weekdata[t[0].weekstart]?staffperiodweeks.weekdata[t[0].weekstart].workhours:""},setweekvacancyhours:function(e,t,a){return staffperiodweeks.weekdata&&staffperiodweeks.weekdata[t[0].weekstart]?staffperiodweeks.weekdata[t[0].weekstart].vacancyhours:""},setweekrecuperationhours:function(e,t,a){return staffperiodweeks.weekdata&&staffperiodweeks.weekdata[t[0].weekstart]?staffperiodweeks.weekdata[t[0].weekstart].recuperationhours:""},setweektotalhours:function(e,t,a){if(staffperiodweeks.weekdata&&staffperiodweeks.weekdata[t[0].weekstart]){var r="" -return staffperiodweeks.weekdata[t[0].weekstart].totalhours>staffperiodweeks.weekdata[t[0].weekstart].defaultweekhours&&(r="color: orange;"),staffperiodweeks.weekdata[t[0].weekstart].totalhours>staffperiodweeks.weekdata[t[0].weekstart].maxweekhours&&(r="color: red;"),''+staffperiodweeks.weekdata[t[0].weekstart].totalhours+""}return""},setweekdiffhours:function(e,t,a){return staffperiodweeks.weekdata&&staffperiodweeks.weekdata[t[0].weekstart]?staffperiodweeks.weekdata[t[0].weekstart].diffhours:""},setavgweekhours:function(e,t,a){return staffperiodweeks.weekdata&&staffperiodweeks.weekdata[t[0].weekstart]?staffperiodweeks.weekdata[t[0].weekstart].avgtotalhours:""},edit:function(){dataform.cleanform2("staffreportperioddays",staffperiodweeks.choices) -let e=staffperiodweeks.tbl.getSelectedData() -staffperiodweeks.dayrefdata=null,e[0]&&(staffperiodweeks.selectedid=e[0].id,staffperiodweeks.disablesave=!1,document.getElementById("staffreportperioddays_errmsg").innerHTML="",staffperiodweeks.currentday=e[0],document.getElementById("infomaxdayhours").value="",document.getElementById("infomaxweekhours").value="",document.getElementById("infomaxinterruptionhours").value="",document.getElementById("infomindailyrecuperation").value="",document.getElementById("infofreetimebefore").value="",document.getElementById("infofreetimeafter").value="",dataform.fillformbydataclass2("staffreportperioddays",staffperiodweeks.choices,staffperiodweeks.currentday),document.getElementById("display_date").innerHTML=moment(staffperiodweeks.currentday.daydate).format("dddd , DD.MM.YYY"),postData("db.cgi",{fn:"getworktimelimits",daydate:e[0].daydate,id_staff:e[0].id_staff,schemata:schemata}).then(e=>{e.result&&(staffperiodweeks.dayrefdata=e.result,document.getElementById("infomaxdayhours").value=e.result.maxdayhours,document.getElementById("infomaxinterruptionhours").value=e.result.maxinterruptionhours,document.getElementById("infomindailyrecuperation").value=e.result.mindailyrecuperation,document.getElementById("infomaxweekhours").value=e.result.maxweekhours,document.getElementById("infofreetimebefore").value=e.result.tiembefore,document.getElementById("infofreetimeafter").value=e.result.timeafter,staffperiodweeks.calcfreetime(),staffperiodweeks.checkworktime()),app.viewdialog("staffreportperioddays")}).catch(e=>{}))},save:function(){let e=dataform.getformcontent("staffreportperioddays",staffperiodweeks.choices) -return document.getElementById("dlg_staffreportperioddays").style.display="none",delete e.staffreportperioddays_workhours,delete e.staffreportperioddays_interruptionhours,delete e.staffreportperioddays_dayhours,e["fn"]="saveform",e["table"]="staffreportperioddays",e["schemata"]=schemata,showdataloaddlg("",'
Attendez s.v.p.!
'),postData("db.cgi",e).then(e=>{staffperiodweeks.updateWeekHours()}).catch(e=>{closedataloaddlg()}),!1},updateWeekHours:function(){let e=staffperiodweeks.parenttbl.getSelectedData() -postData("db.cgi",{fn:"update_staff_in_period",schemata:schemata,id_period:e[0].id_reportperiod,id_staff:e[0].id_staff}).then(e=>{staffperiodweeks.gettbldata(),dataform.formsaved({}),closedataloaddlg()}).catch(e=>{closedataloaddlg()})},getvacancy:function(){postData("db.cgi",{get:"vacancytypes",schemata:schemata}).then(e=>{for(var t in dataform.fillselectlist(staffperiodweeks.choices["id_vacancytype"],e.result.sqldata,"id","vacancyname"),e.result.sqldata)staffperiodweeks.vacancytypes[e.result.sqldata[t].id]=e.result.sqldata[t]})},getrecuperation:function(){postData("db.cgi",{get:"recuperationtypes",schemata:schemata}).then(e=>{for(var t in dataform.fillselectlist(staffperiodweeks.choices["id_recuperationtype"],e.result.sqldata,"id","vacancyname"),e.result.sqldata)staffperiodweeks.recuperationtypes[e.result.sqldata[t].id]=e.result.sqldata[t]})},getdefaultdaylimits:function(){postData("db.cgi",{get:"recuperationtypes",schemata:schemata}).then(e=>{staffperiodweeks.daylimits=e.result.data})},setvacancyhours:function(){staffperiodweeks.choices["id_vacancytype"].selected()?document.getElementById("vacancyhours").value||(document.getElementById("vacancyhours").value=staffperiodweeks.currentday.contracthours):document.getElementById("vacancyhours").value="",staffperiodweeks.checkdaytime(document.getElementById("vacancyhours"))},setrecuperationhours:function(){staffperiodweeks.choices["id_recuperationtype"].selected()?document.getElementById("recuperationhours").value||(document.getElementById("recuperationhours").value=staffperiodweeks.currentday.contracthours):document.getElementById("recuperationhours").value="",staffperiodweeks.checkdaytime("id_recuperationtype")},checkworktime:function(e){e&&timecalc.validateTime(document.getElementById(e)),staffperiodweeks.disablesave=!1 -let t=0,a=0,r=0,s=0,d=0,o=0,i=0,l=0,n=0,c=0,f=0,u=0,m=0,p=0,k=document.getElementById("timeend1"),w=document.getElementById("timestart1"),y=document.getElementById("timeend2"),g=document.getElementById("timestart2"),h=document.getElementById("pauseend1"),v=document.getElementById("pausestart1"),b=document.getElementById("pauseend2"),_=document.getElementById("pausestart2"),E=(document.getElementById("timepause"),document.getElementById("interruptionhours")),T=document.getElementById("workhours"),M=document.getElementById("payedpause"),I=document.getElementById("total1"),B=document.getElementById("total2"),D=document.getElementById("pausetotal1"),Y=document.getElementById("pausetotal2"),S="" -if(k.value&&w.value&&(o=timecalc.TimeToMinutes(w.value),i=timecalc.TimeToMinutes(k.value),ii&&(staffperiodweeks.disablesave=!0,S="les pauses doivent être dans les heures de travail!")),b.value&&_.value&&(u=timecalc.TimeToMinutes(_.value),m=timecalc.TimeToMinutes(b.value),mn&&(staffperiodweeks.disablesave=!0,S="les pauses doivent être dans les heures de travail!")),!0===staffperiodweeks.disablesave?document.getElementById("staffreportperioddays_errmsg").innerHTML='
'+S+"
":document.getElementById("staffreportperioddays_errmsg").innerHTML="",d=r+s,document.getElementById("timepause").value=timecalc.MinutesToTime(d),a>0&&t>0?(p=timecalc.TimeToMinutes(g.value)-timecalc.TimeToMinutes(k.value),E.value=timecalc.MinutesToTime(p),p>staffperiodweeks.dayrefdata.maxinterruptionhours?(E.classList.remove("text-black"),E.classList.add("text-red")):(E.classList.remove("text-red"),E.classList.add("text-black"))):(E.classList.remove("text-red"),E.classList.add("text-black"),E.value="00:00"),M.checked&&!0===M.checked){let e=t+a -T.value=timecalc.MinutesToTime(e)}else{let e=t+a-d -T.value=timecalc.MinutesToTime(e)}staffperiodweeks.checkdaytime()},checkdaytime:function(e){e&&timecalc.validateTime(e.value) -let t=0,a=0,r=0,s=document.getElementById("workhours"),d=document.getElementById("vacancyhours"),o=document.getElementById("recuperationhours"),i=document.getElementById("dayhours") -document.getElementById("interruptionhours") -s.value&&(t=timecalc.TimeToMinutes(s.value)),d.value&&(a=timecalc.TimeToMinutes(d.value)),o.value&&(r=timecalc.TimeToMinutes(o.value)) -let l=t+a+r -i.value=timecalc.MinutesToTime(l),l>timecalc.TimeToMinutes(staffperiodweeks.dayrefdata.maxdayhours)?(i.classList.remove("text-black"),i.classList.add("text-red"),staffperiodweeks.disablesave=!0):(i.classList.remove("text-red"),i.classList.add("text-black"),staffperiodweeks.disablesave=!1),staffperiodweeks.calcfreetime()},calcfreetime:function(){let e=document.getElementById("timestart1").value -if(""==e&&(e=document.getElementById("timestart2").value),staffperiodweeks.dayrefdata.datebefore&&""!=e){var t=new moment(staffperiodweeks.currentday.daydate+" "+e+":00","YYYY-MM-DD hh:mm:ss"),a=new moment(staffperiodweeks.dayrefdata.datebefore+" "+staffperiodweeks.dayrefdata.timebefore+":00","YYYY-MM-DD hh:mm"),r=moment.duration(a.diff(t)).as("minutes") -r=Math.abs(r),document.getElementById("infofreetimebefore").value=timecalc.MinutesToInterval(r)}else document.getElementById("infofreetimebefore").value="" -let s=document.getElementById("timeend2").value -if(""==s&&(s=document.getElementById("timeend1").value),this.dayrefdata.dateafter&&""!=s){var d=new moment(staffperiodweeks.currentday.daydate+" "+s+":00","YYYY-MM-DD hh:mm:ss"),o=new moment(staffperiodweeks.dayrefdata.dateafter+" "+staffperiodweeks.dayrefdata.timeafter+":00","YYYY-MM-DD hh:mm:ss") -r=moment.duration(o.diff(d)).as("minutes") -document.getElementById("infofreetimeafter").value=timecalc.MinutesToInterval(r)}else document.getElementById("infofreetimeafter").value=""},copy:function(){let e=staffperiodweeks.tbl.getSelectedData() -e[0]&&(staffperiodweeks.copy_id=e[0].id,document.getElementById("spwpasteval").innerHTML=moment(e[0]["daydate"]).format("DD.MM.YYYY"))},paste:function(){let e=staffperiodweeks.tbl.getSelectedData(),t=staffperiodweeks.parenttbl.getSelectedData() -if(e.length>0){for(staffperiodweeks.selectedid=e[0].id,asel=[],s=0;s{staffperiodweeks.gettbldata()})}},clean:function(){let e=staffperiodweeks.tbl.getSelectedData(),t=staffperiodweeks.parenttbl.getSelectedData() -if(e.length>0){for(staffperiodweeks.selectedid=e[0].id,asel=[],s=0;s{staffperiodweeks.gettbldata()})}},replacedlg:function(){let e=staffperiodweeks.tbl.getSelectedData() -e.length>0&&(document.getElementById("dlg_replacestaffdayworkplan").style.display="block")},getwptemplates:function(){postData("db.cgi",{get:"workplanlist",schemata:schemata}).then(e=>{dataform.fillselectlist(staffperiodweeks.choices["id_workplan"],e.result.sqldata,"id","dspworkplandetail")}).catch(e=>{})},replacedays:function(){let e=staffperiodweeks.tbl.getSelectedData(),t=staffperiodweeks.parenttbl.getSelectedData() -if(e.length>0){staffperiodweeks.selectedid=e[0].id -let a=staffperiodweeks.choices["id_workplan"].selected(),r=document.getElementById("keepvacancy").checked,d=document.getElementById("keeprecuperation").checked -for(asel=[],s=0;s{document.getElementById("dlg_replacestaffdayworkplan").style.display="none",staffperiodweeks.gettbldata()}).catch(e=>{})}},savetimetracker:function(){let e=staffperiodweeks.tbl.getSelectedData(),t={fn:"savetrackdatasets"} -t["schemata"]=schemata,t["id_staff"]=e[0].id_staff,t["daydate"]=e[0].daydate -let a=staffperiodweeks.tbltimetracker.getData() -staffperiodweeks.selectedid=e[0].id,trdata=[] -for(var r=0;r"00:00"){let t=e[0].daydate -a[r].stamp_in>a[r].stamp_out&&(stoutday=monment(t).add(1,"d").format("YYYY-MM-DD")),trdata.push({id:a[r].id,stamp_in:e[0].daydate+" "+a[r].stamp_in+":00",stamp_out:t+" "+a[r].stamp_out+":00"})}t["timetrackdata"]=trdata,postData("db.cgi",t).then(e=>{staffperiodweeks.gettbldata(),document.getElementById("dlg_stafftimetracker").style.display="none"}).catch(e=>{document.getElementById("dlg_stafftimetracker").style.display="none"})},edittimetracker:function(){staffperiodweeks.inittimetracktable() -let e=staffperiodweeks.tbl.getSelectedData(),t=staffperiodweeks.parenttbl.getSelectedData() -e.length>0&&e[0].daydate{staffperiodweeks.tbltimetracker.setData(a.result.sqldata),document.getElementById("dlg_stafftimetracker_staffname").innerHTML=t[0].staffname,document.getElementById("dlg_stafftimetracker_date").innerHTML=moment(e[0].daydate).format("DD.MM.YYYY"),document.getElementById("dlg_stafftimetracker").style.display="block"}))},ttadd:function(){let e=staffperiodweeks.tbl.getSelectedData() -postData("db.cgi",{get:"emptytrackdataset",schemata:schemata,id_staff:e[0].id_staff,daydate:e[0].daydate}).then(e=>{staffperiodweeks.tbltimetracker.addRow(e.result.sqldata,!0)})},ttremove:function(){let e=staffperiodweeks.tbltimetracker.getSelectedRows() -staffperiodweeks.tbltimetracker.deleteRow(e)},settrackdaytotal:function(e,t,a){var r=0 -return e.forEach(function(e){r+=timecalc.TimeToMinutes(e)}),timecalc.MinutesToTime(r)},timerowtracktotal:function(e){let t=timecalc.TimeToMinutes(timecalc.StringToTime(e[0].stamp_in)),a=timecalc.TimeToMinutes(timecalc.StringToTime(e[0].stamp_out)) -stpoutcalc=a,t>stpoutcalc&&(stpoutcalc+=1500) -let r=stpoutcalc-t -staffperiodweeks.tbltimetracker.updateData([{id:e[0].id,stamp_in:timecalc.MinutesToTime(t),stamp_out:timecalc.MinutesToTime(a),total:timecalc.MinutesToTime(r)}])}},nullFormatter=function(e,t){return e.getElement().style.backgroundColor="grey",""},boldFormatter=function(e,t){return e.getElement().style.fontWeight="bold",e.getValue()},totalFormatter=function(e,t){return e.getElement().style.fontWeight="bold",e.getValue()>"00:00"&&(e.getValue()>e._cell.row.data.defaultdayhours&&(e.getElement().style.color="orange"),e.getValue()>e._cell.row.data.maxdayhours&&(e.getElement().style.color="red")),e.getValue()},interruptFormatter=function(e,t){return e.getValue()>"00:00"&&e.getValue()>e._cell.row.data.maxinterruptionhours&&(e.getElement().style.color="red"),e.getValue()},sizeFormatter=function(e,t){return e.getElement().style.fontSize="10pt",e.getValue()},worktimeFormatter=function(e,t){return""!=e.getValue()?(e.getElement().style.fontSize="10pt",e.getValue()):null==e._cell.row.data.dayhours?"jour de repos":e.getValue()},freetimeFormatter=function(e,t){return e.getElement().style.color="grey",e.getValue()>"00:00"&&5==e.getValue().length&&e.getValue()"00:00"&&staffperiodweeks.vacancytypes[e._cell.row.data.id_vacancytype]?(e.getElement().style.backgroundColor=staffperiodweeks.vacancytypes[e._cell.row.data.id_vacancytype].color,e.getValue()+"
"+staffperiodweeks.vacancytypes[e._cell.row.data.id_vacancytype].vacancyname):e.getValue()},recupformatter=function(e,t){return e.getValue()>"00:00"&&staffperiodweeks.recuperationtypes[e._cell.row.data.id_recuperationtype]?(e.getElement().style.backgroundColor=staffperiodweeks.recuperationtypes[e._cell.row.data.id_recuperationtype].color,e.getValue()+"
"+staffperiodweeks.recuperationtypes[e._cell.row.data.id_recuperationtype].vacancyname):e.getValue()},dateFormatter=function(e,t){return null!=e._cell.row.data.vacancyname?moment(e.getValue()).format("dd, DD.MM.YYYY")+"
"+e._cell.row.data.vacancyname:moment(e.getValue()).format("dd, DD.MM.YYYY")},timetrackFormatter=function(e,t){return null==e.getValue()&&e._cell.row.data.daydate0&&(e.getElement().style.color="orange"),e.getValue())} diff --git a/app/tmpl/module/staff/staff.min.js b/app/tmpl/module/staff/staff.min.js deleted file mode 100644 index e1bed0e2..00000000 --- a/app/tmpl/module/staff/staff.min.js +++ /dev/null @@ -1,22 +0,0 @@ -function initpage(){schemata=app.getCurrentSchemata(),staff.inittable(),staffcontract.inittable(),staffperiods.inittable(),staffperiodweeks.inittable()}let staff={tbl:null,tblperiodbase:null,current_user:null,current_id:null,current_view:"basedata",staff_defaultgroup:null,choices:{id_staffgroup:null,addstaff_id_staffgroup:null,istimetrackenabled:null},initform:function(){flatpickr("#birthdate",{altInput:!0,altFormat:"d.m.Y",dateFormat:"Y-m-d",locale:"fr",onClose:function(t,a,e){dataform.savefield(document.getElementById("birthdate"),null)}}),flatpickr("#addstaff_startdate",{altInput:!0,altFormat:"d.m.Y",dateFormat:"Y-m-d",locale:"fr"}),flatpickr("#addstaff_enddate",{altInput:!0,altFormat:"d.m.Y",dateFormat:"Y-m-d",locale:"fr"}),staff.choices["id_staffgroup"]=new SlimSelect({select:"#id_staffgroup",showSearch:!1, -/* @preserve[% IF session.usergroup == 'teamleader' %]*/ -disabled:!0, -/* @preserve[% ELSE %]*/ -afterClose:function(){dataform.savefield(document.getElementById("id_staffgroup"),staff.gettbldata)} -/* @preserve[% END %]*/}),staff.choices["addstaff_id_staffgroup"]=new SlimSelect({select:"#addstaff_id_staffgroup",showSearch:!1}),staff.choices["istimetrackenabled"]=new SlimSelect({select:"#istimetrackenabled",showSearch:!1,afterClose:function(){dataform.savefield(document.getElementById("istimetrackenabled"),null)}}) - -;/* @preserve[% IF session.usergroup == 'teamleader' %]*/ -let t=document.getElementsByClassName("data_staff") -for(var a in t)t[a]._flatpickr?t[a]._flatpickr._input.setAttribute("disabled","disabled"):t[a].disabled=!0 - -;/* @preserve[% END %]*/staff.getstaffgroups()},inittable:function(){staff.initform(),staff.tbl=new Tabulator("#tbl_staff",{height:"calc(100vh - 56px)",layout:"fitDataFill",selectable:1,groupBy:["groupname"],groupStartOpen:[!0],groupHeader:[function(t,a,e){return t||""}],rowClick:function(t,a){staff.edit()},rowContext:function(t,a){t.preventDefault()},columns:[{title:"Départment",field:"groupname",visible:!1},{title:"Nom",field:"surname",resizable:!1},{title:"Prénom",field:"prename",resizable:!1}]}),staff.gettbldata()},gettbldata:function(t){let a=staff.tbl.getSelectedData() -postData("db.cgi",{get:"stafflist",schemata:schemata}).then(t=>{staff.tbl.setData(t.result.sqldata).then(function(){a[0]&&staff.tbl.selectRow(a[0]["id"])})}).catch(t=>{})},add:function(){document.getElementById("dlg_addstaff_infomsg").innerHTML="",dataform.cleanform2("addstaff",staff.choices),document.getElementById("addstaff_weekhours").value="40:00",document.getElementById("addstaff_weekdays").value="6",document.getElementById("addstaff_startdate")._flatpickr.setDate(moment(new Date).format("YYYY-MM-DD")),staff.choices["addstaff_id_staffgroup"].set(staff.staff_defaultgroup),app.viewdialog("addstaff")},savenew:function(){let t=dataform.getformcontent("addstaff",staff.choices) -for(let e in t){var a=e.replace("addstaff_","") -t[a]=t[e],delete t[e]}if(t["schemata"]=schemata,t["fn"]="add_staff",""==t["startdate"]||""==t["startdate"]||"weekhours"==t["weekdays"]||""==t["weekhours"]||""==t["id_staffgroup"])return document.getElementById("dlg_addstaff_infomsg").innerHTML='
les champs "date début","heures/semaine","jours/semaine" et "département" sont requis!
',!1 -showdataloaddlg("",'
Attendez s.v.p.!
'),postData("db.cgi",t).then(t=>{document.getElementById("dlg_addstaff").style.display="none",staff.current_view="basedata",staff.gettbldata(),staff.setview(staff.current_view),closedataloaddlg()}).catch(t=>{document.getElementById("dlg_addstaff").style.display="none",closedataloaddlg()})},edit:function(){let t=staff.tbl.getSelectedData() -t[0]?("<15"==t[0].periodtypes?document.getElementById("btnstaffeditperiod").style.display="none":document.getElementById("btnstaffeditperiod").style.display="block",staff.current_id=t[0].id,dataform.cleanform2("staff",staff.choices),postData("db.cgi",{get:"staff",schemata:schemata,id:t[0].id}).then(t=>{dataform.fillformbydataclass2("staff",staff.choices,t.result.data,"dataform.savefield(this,null);"),staffcontract.gettbldata(),staffperiods.gettbldata(),staff.setview(staff.current_view)})):app.viewpanel("nodata")},remove:function(){let t=staff.tbl.getSelectedData() -if(t[0]){var a={fn:"del_staff"} -a["id"]=t[0].id,a["schemata"]=schemata,showinfodlg("Supprimer","Êtes vous sûre de supprimer l'employé(e) sélectionnée?",staff.removedata,a,'Supprimer','Annuler')}},removedata:function(t){postData("db.cgi",t).then(t=>{let a=staff.tbl.getSelectedData() -a[0]&&staff.tbl.deselectRow(a["id"]),staff.gettbldata()})},viewtable:function(){return staff.gettbldata(),!1},save:function(){let t=dataform.getformcontent("staff") -return t["ident"]="id",t["table"]="staff",dataform.saveformdata(t,staff.aftersavecallback,schemata),!1},aftersavecallback:function(t){return t&&t.id&&(staff.current_id=t.id,document.getElementById("section_staffcontract").style.display="block"),!1},getstaffgroups:function(){postData("db.cgi",{get:"staffgroups",schemata:schemata}).then(t=>{staff.staff_defaultgroup=t.result.sqldata[0].id,dataform.fillselectlist(staff.choices["addstaff_id_staffgroup"],t.result.sqldata,"id","groupname"),dataform.fillselectlist(staff.choices["id_staffgroup"],t.result.sqldata,"id","groupname")})},fillstaffgroups:function(t){dataform.fillselectlist(staff.choices["id_staffgroup"],t.sqldata,"id","groupname")},setview:function(t){let a=staff.tbl.getSelectedData() -a[0]&&(staff.current_view=t,"periods"==t&&staffperiods.gettbldata(),app.viewpanel(t))}} diff --git a/app/tmpl/module/staff/staffcontract.min.js b/app/tmpl/module/staff/staffcontract.min.js deleted file mode 100644 index 55e64d21..00000000 --- a/app/tmpl/module/staff/staffcontract.min.js +++ /dev/null @@ -1 +0,0 @@ -let weekdays=[{label:"lundi",value:"1"},{label:"mardi",value:"2"},{label:"mercredi",value:"3"},{label:"jeudi",value:"4"},{label:"vendredi",value:"5"},{label:"samedi",value:"6"},{label:"dimanche",value:"7"}],staffcontract={tbl:null,choices:{id_workplan:null},maxfreedays:1,initform:function(){flatpickr("#startdate",{altInput:!0,altFormat:"d.m.Y",dateFormat:"Y-m-d",locale:"fr",weekNumbers:!0}),flatpickr("#enddate",{altInput:!0,altFormat:"d.m.Y",dateFormat:"Y-m-d",locale:"fr",weekNumbers:!0})},inittable:function(){staffcontract.initform(),staffcontract.tbl=new Tabulator("#tbl_staffcontract",{headerFilterPlaceholder:"filter...",height:"calc(100vh - 380px)",layout:"fitDataFill",selectable:1,rowContext:function(e,row){e.preventDefault()},columns:[{title:"début",field:"startdate",headerSort:!1,formatter:"datetime",width:100,formatterParams:{inputFormat:"YYYY-MM-DD",outputFormat:"DD.MM.YYYY",invalidPlaceholder:""}},{title:"fin",field:"enddate",headerSort:!1,formatter:"datetime",width:100,formatterParams:{inputFormat:"YYYY-MM-DD",outputFormat:"DD.MM.YYYY",invalidPlaceholder:""}},{title:"h/semaine",field:"weekhours",hozAlign:"right",headerSort:!1},{title:"j/semaine",field:"weekdays",hozAlign:"right",headerSort:!1,formatter:"money",formatterParams:{decimal:",",thousand:".",symbol:" ",symbolAfter:"",precision:0}}]})},gettbldata:function(){postData("db.cgi",{get:"staffcontractdates",schemata:schemata,id_staff:staff.current_id}).then(data=>{data&&data.result.sqldata&&(document.getElementById("btn_delete_staffcontract")&&(data.result.sqldata.length<=1?document.getElementById("btn_delete_staffcontract").style.display="none":document.getElementById("btn_delete_staffcontract").style.display="block"),staffcontract.tbl.setData(data.result.sqldata))})},add:function(){document.getElementById("contractmsg").innerHTML="",dataform.cleanform2("staffcontract",staffcontract.choices),app.viewdialog("staffcontract"),document.getElementById("id_staff").value=staff.current_id},edit:function(){document.getElementById("contractmsg").innerHTML="";let udata=staffcontract.tbl.getSelectedData();return udata[0]&&(dataform.cleanform2("staffcontract",{}),postData("db.cgi",{get:"staffcontract",schemata:schemata,id:udata[0].id}).then(data=>{dataform.fillformbydataclass2("staffcontract",staffcontract.choices,data.result.data),app.viewdialog("staffcontract")})),!1},remove:function(){let udata=staffcontract.tbl.getSelectedData();if(udata[0]){var flds={fn:"del_staffcontract"};flds.id=udata[0].id,flds.schemata=schemata,showinfodlg("Supprimer","Êtes vous sûre de supprimer les données sélectionnées?",staffcontract.removedata,flds,'Supprimer','Annuler')}},removedata:function(data){postData("db.cgi",data).then(data=>{staffcontract.gettbldata()}).catch(e=>{console.log(e)}),staffcontract.gettbldata()},save:function(){let flds=dataform.getformcontent("staffcontract",null);flds.ident_staffcontract_id=flds.ident_staffcontract_id_staffcontract,delete flds.ident_staffcontract_id_staffcontract,delete flds.null;let bok=0;for(let f in flds)"staffcontract_enddate"!=f&&"ident_staffcontract_id"!=f&&""==flds[f]&&(bok=1);return 0!=bok?(1==bok&&(document.getElementById("contractmsg").innerHTML='
Tous les champs sauf "date fin" sans requis!
'),!1):(flds.fn="saveform",flds.table="staffcontract",flds.schemata=schemata,postData("db.cgi",flds).then(data=>{staffcontract.gettbldata(),document.getElementById("dlg_staffcontract").style.display="none"}).catch(e=>{document.getElementById("dlg_staffcontract").style.display="none"}),!1)},updateStaffContractDays(){showdataloaddlg("",'
Attendez s.v.p.!
'),postData("db.cgi",{fn:"setstaffcontractdays",schemata:schemata,id_staff:staff.current_id}).then(data=>{closedataloaddlg()}).catch(e=>{closedataloaddlg()})},afterdeletecallback:function(){staffcontract.gettbldata()}}; \ No newline at end of file diff --git a/app/tmpl/module/staff/staffperiods.min.js b/app/tmpl/module/staff/staffperiods.min.js deleted file mode 100644 index 341a606b..00000000 --- a/app/tmpl/module/staff/staffperiods.min.js +++ /dev/null @@ -1,7 +0,0 @@ -let staffperiods={tbl:null,initform:function(){},inittable:function(){staffperiods.tbl=new Tabulator("#tbl_staffperiods",{height:"calc(100vh - 112px)",layout:"fitDataFill",selectable:!0,selectableRangeMode:"click",rowContext:function(t,e){t.preventDefault()},columns:[{title:'Début',field:"startdate",headerSort:"datetime",formatter:"datetime",formatterParams:{inputFormat:"YYYY-MM-DD",outputFormat:"DD.MM.YYYY",invalidPlaceholder:""}},{title:'Fin',field:"enddate",headerSort:"datetime",formatter:"datetime",formatterParams:{inputFormat:"YYYY-MM-DD",outputFormat:"DD.MM.YYYY",invalidPlaceholder:""}},{title:'Contrat',field:"contracthours",hozAlign:"right",headerSort:!1},{title:'Travail',field:"workhours",hozAlign:"right",headerSort:!1},{title:'Récup',field:"recuperationhours",hozAlign:"right",headerSort:!1,formatter:periodRecupFormatter},{title:'congé',field:"vacancynormal",hozAlign:"right",headerSort:!1},{title:'Congé
maladie
',field:"vacancyill",hozAlign:"right",headerSort:!1},{title:'Total',field:"totalhours",hozAlign:"right",headerSort:!1,formatter:periodTotalFormatter},{title:'décompte
reporté
',field:"transferedhours",hozAlign:"right",headerSort:!1},{title:'h. suppl.
payés
',field:"payedhours",hozAlign:"right",headerSort:!1,headerVertical:!0},{title:'décompte
fin POT
',field:"hoursdiff",headerSort:!1,hozAlign:"right"},{title:'suppl.
+44 h
',field:"suppvacancy44hours",hozAlign:"right",headerSort:!1,headerVertical:!0},{title:'suppl.
trav dim.
',field:"suppvacancysunwork",hozAlign:"right",headerSort:!1,headerVertical:!0},{title:'moy.
hebd.
',field:"avgtotalweekhours",hozAlign:"right",headerSort:!1,formatter:periodAVGFormatter},{title:'validé',field:"isvalidated",hozAlign:"center",headerSort:!1,formatter:"tickCross",formatterParams:{allowEmpty:!0,allowTruthy:!1}}]})},gettbldata:function(){postData("db.cgi",{get:"staffperiods",schemata:schemata,id_staff:staff.current_id}).then(t=>{staffperiods.tbl.setData(t.result.sqldata)})},periodrestsum:function(t,e,a){let r=0 -for(let e in t)r+=timecalc.IntervalToMinutes(t[e]) -return timecalc.MinutesToInterval(r)},edit:function(){let t=staffperiods.tbl.getSelectedData() -t[0]&&staffperiodweeks.loadplan(staffperiods.tbl)},generatereport:function(){let t=staffperiods.tbl.getSelectedData(),e=staff.tbl.getSelectedData(),a=[] -for(var r in t)a.push(t[r].id_reportperiod) -let o={schemata:schemata,id_staff:staff.current_id,id_periods:a} -staff.current_id&&report.generate("pot",e[0].staffname.replace(/\s+/g,"_"),o)}},periodRecupFormatter=function(t,e){return null!=t._cell.row.data.transferedhours&&t.getValue()",crossElement:""}}]}),workplans.tbl=new Tabulator("#tbl_workplandata",{headerFilterPlaceholder:"filter...",height:"calc(100vh - 111px)",layout:"fitDataFill",selectable:1,rowContext:function(e,t){e.preventDefault()},groupBy:["weeknum"],groupStartOpen:[!0],groupClosedShowCalcs:!0,groupHeader:[function(e,t,a){return"Semaine "+e}],columns:[{title:"jour",field:"weekday",formatter:wdayFormatter,headerSort:!1},{title:"heures de
travail",field:"dspworkdata",headerSort:!1,hozAlign:"center",formatter:sizeFormatter},{title:"heures de
pause",field:"dsppausedata",headerSort:!1,hozAlign:"center",formatter:sizeFormatter},{title:"total
pause",field:"pause",width:80,headerSort:!1},{title:"coupure",field:"interruption",width:90,headerSort:!1},{title:"total
travail",field:"dayhours",width:80,formatter:boldFormatter,headerSort:!1,bottomCalc:workplans.weekhourssum}]}),workplans.gettblfilterdata(),workplans.initform(),workplans.getcompanyconf()},gettblfilterdata:function(){postData("db.cgi",{get:"workplanlist",schemata:schemata}).then(e=>{workplans.tblfilter.setData(e.result.sqldata)})},getcompanyconf:function(){postData("db.cgi",{get:"company",schemata:"public",schemata:schemata}).then(e=>{workplans.payedpauses=e.result.data.payedpauses})},gettbldata:function(e){let t=workplans.tblfilter.getSelectedData() -t[0]&&postData("db.cgi",{get:"workplandayslist",id_workplan:t[0].id,schemata:schemata}).then(e=>{workplans.tbl.setData(e.result.sqldata)})},viewplan:function(){workplans.gettbldata(),workplans.setview("workplans")},setview:function(e){workplans.current_view=e,app.viewpanel(e)},edit:function(){dataform.cleanform("workplandays") -let e=workplans.tbl.getSelectedData() -e[0]&&(document.getElementById("display_date").innerHTML=weekdays[e[0].weekday],postData("db.cgi",{get:"workplanday",id:e[0].id,schemata:schemata}).then(e=>{dataform.fillformbydataclass2("workplandays",{},e.result.data),setTimeout(workplans.checktime("start1"),1e3),app.viewdialog("workplanday")}))},rename:function(){dataform.cleanform("workplan") -let e=workplans.tblfilter.getSelectedData() -e[0]&&postData("db.cgi",{get:"workplan",id:e[0].id,schemata:schemata}).then(e=>{e.result.data["id_workplan"]=e.result.data["id"],dataform.fillformbydataclass2("workplans",{},e.result.data),app.viewdialog("workplans")})},add:function(){dataform.cleanform("workplans"),app.viewdialog("workplans")},duplicate:function(){let e=workplans.tblfilter.getSelectedData() -e[0]&&postData("db.cgi",{fn:"duplicate_workplan",schemata:schemata,id:e[0].id}).then(e=>{workplans.gettblfilterdata()})},setcopyday:function(){let e=workplans.tbl.getSelectedData() -e[0]&&(document.getElementById("pasteday").innerHTML=" "+weekdays[e[0].weekday],workplans.copy_day_id=e[0].id)},pasteday:function(){let e=workplans.tbl.getSelectedData() -e[0]&&workplans.copy_day_id&&e[0].id!=workplans.copy_day_id&&postData("db.cgi",{fn:"workplan_replaceday",schemata:schemata,copyid:workplans.copy_day_id,pasteid:e[0].id}).then(e=>{workplans.gettbldata()})},remove:function(){let e=workplans.tblfilter.getSelectedData() -return e[0].isdefault?(showmessagedlg("Info","Le plan Standard ne peut pas être supprimé!"),!1):parseInt(e[0].staffcount)>0?(showmessagedlg("Info","Le plan ne peut pas être supprimé dès qu'il est utilisé par un salarié"),!1):void(e[0]&&(flds={},flds["fn"]="del_workplan",flds["id"]=e[0].id,flds["schemata"]=schemata,showinfodlg("Supprimer","Êtes vous sûre de supprimer le plan de travail '"+e.workplan+"'?",workplans.removedata,flds,'Supprimer','Annuler')))},removedata:function(e){postData("db.cgi",e).then(e=>{workplans.gettblfilterdata()})},weekhourssum:function(e,t,a){let l=0 -for(let t in e)l+=timecalc.IntervalToMinutes(e[t]) -return timecalc.MinutesToInterval(l)},save:function(){let e=dataform.getformcontent("workplandays"),t={} -for(let l in e)if(!l.endsWith("dayhours")&&!l.endsWith("interruptionhours")){var a=l.replace("workplandays_","") -t[a]=e[l]}"00:00"==t["pause"]&&(t["pause"]="") -let l={fn:"workplan_saveday"} -return l["schemata"]=schemata,l["id"]=t["ident_id"],delete t["ident_id"],l["workplanday"]=t,postData("db.cgi",l).then(e=>{document.getElementById("dlg_workplanday").style.display="none",workplans.gettbldata()}),!1},saveworkplan:function(){let e=dataform.getformcontent("workplans") -return e["ident_workplans_id"]=e["ident_workplans_id_workplan"],delete e["ident_workplans_id_workplan"],""==e["ident_workplans_id"]?postData("db.cgi",{fn:"add_workplan",name:e["workplans_workplan"],schemata:schemata}).then(e=>{document.getElementById("dlg_workplans").style.display="none",workplans.gettblfilterdata()}):(delete e["null"],e["fn"]="saveform",e["schemata"]=schemata,postData("db.cgi",e).then(e=>{document.getElementById("dlg_workplans").style.display="none",workplans.gettblfilterdata()})),!1},checktime:function(e){timecalc.validateTime(document.getElementById(e)),workplans.disablesave=!1 -let t=0,a=0,l=0,n=0,o=0,r=0,s=0,d=0,i=0,u=0,c=0,m=0,p=0,w=0,f=document.getElementById("end1"),g=document.getElementById("start1"),k=document.getElementById("end2"),y=document.getElementById("start2"),h=document.getElementById("pauseend1"),v=document.getElementById("pausestart1"),b=document.getElementById("pauseend2"),T=document.getElementById("pausestart2"),_=(document.getElementById("pause"),document.getElementById("total1")),E=document.getElementById("total2"),I=document.getElementById("totalpause1"),B=document.getElementById("totalpause2"),M=(document.getElementById("interruptionhours"),document.getElementById("dayhours")),D="" -f.value&&g.value&&(r=timecalc.TimeToMinutes(g.value),s=timecalc.TimeToMinutes(f.value),ss&&(workplans.disablesave=!0,D="les pauses doivent être dans les heures de travail!")),b.value&&T.value&&(m=timecalc.TimeToMinutes(T.value),p=timecalc.TimeToMinutes(b.value),pi&&(workplans.disablesave=!0,D="les pauses doivent être dans les heures de travail!")),1==workplans.disablesave?document.getElementById("workplanday_errmsg").innerHTML='
'+D+"
":document.getElementById("workplanday_errmsg").innerHTML="",o=l+n,document.getElementById("pause").value=timecalc.MinutesToTime(o),""!=document.getElementById("end1").value&&""!=document.getElementById("start2").value?(w=timecalc.TimeToMinutes(document.getElementById("start2").value)-timecalc.TimeToMinutes(document.getElementById("end1").value),document.getElementById("interruptionhours").value=timecalc.MinutesToTime(w)):document.getElementById("interruptionhours").value="","1"==workplans.payedpauses?M.value=timecalc.MinutesToTime(t+a):M.value=timecalc.MinutesToTime(t+a-o) -let S=/\d+:\d\d/,F=document.getElementById("dayhours").value -F&&""!=F&&("00:00"!=F&&S.test(F)||(document.getElementById("dayhours").value=""))}},wdayFormatter=function(e,t){return weekdays[e.getValue()]},boldFormatter=function(e,t){return e.getElement().style.fontWeight="bold",e.getValue()},sizeFormatter=function(e,t){return e.getElement().style.fontSize="10pt",e.getValue()},italicFormatter=function(e,t){return e.getElement().style.color="grey",e.getValue()} diff --git a/desktopapp/package.json b/desktopapp/package.json index 0b8ecd43..50f18df6 100644 --- a/desktopapp/package.json +++ b/desktopapp/package.json @@ -1,6 +1,6 @@ { "name": "POT", - "version": "1.0.0", + "version": "1.0.16", "description": "plan d'organisation du travail", "main": "main.js", "scripts": { diff --git a/dev/conf.sh b/dev/conf.sh index 28b94562..eacb96f0 100644 --- a/dev/conf.sh +++ b/dev/conf.sh @@ -5,6 +5,7 @@ export PGPASSWORD="dMY8xGB6cBLzrDGE" DBLIVEHOST="sql12.your-server.de" DBDEVHOST="localhost" DBSCHEMA="public" +DBREFSCHEMA="elch" REMOTEAPPFOLDER="public_html/app_plandutravail_lu" REMOTEWEBSITEFOLDER="public_html/plandutravail_lu" SSHUSER="dksalu" diff --git a/dev/db/update.portanova.sql b/dev/db/tmp/update.barto.sql similarity index 100% rename from dev/db/update.portanova.sql rename to dev/db/tmp/update.barto.sql diff --git a/dev/db/tmp/update.brasserie_du_theatre.sql b/dev/db/tmp/update.brasserie_du_theatre.sql new file mode 100644 index 00000000..e5367de3 --- /dev/null +++ b/dev/db/tmp/update.brasserie_du_theatre.sql @@ -0,0 +1,3 @@ + +ALTER TABLE brasserie_du_theatre.reportperiod ADD COLUMN periodtype text; +ALTER TABLE brasserie_du_theatre.reportperiod ADD COLUMN subinterval text; diff --git a/dev/db/tmp/update.demo.sql b/dev/db/tmp/update.demo.sql new file mode 100644 index 00000000..97887b5d --- /dev/null +++ b/dev/db/tmp/update.demo.sql @@ -0,0 +1,3 @@ + +ALTER TABLE demo.reportperiod ADD COLUMN periodtype text; +ALTER TABLE demo.reportperiod ADD COLUMN subinterval text; diff --git a/dev/db/tmp/update.demoold.sql b/dev/db/tmp/update.demoold.sql new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/dev/db/tmp/update.demoold.sql @@ -0,0 +1 @@ + diff --git a/dev/db/tmp/update.elch.sql b/dev/db/tmp/update.elch.sql new file mode 100644 index 00000000..b7efbb22 --- /dev/null +++ b/dev/db/tmp/update.elch.sql @@ -0,0 +1,3 @@ + +ALTER TABLE elch.reportperiod ADD COLUMN periodtype text; +ALTER TABLE elch.reportperiod ADD COLUMN subinterval text; diff --git a/dev/db/tmp/update.portanova.sql b/dev/db/tmp/update.portanova.sql new file mode 100644 index 00000000..f8241fdc --- /dev/null +++ b/dev/db/tmp/update.portanova.sql @@ -0,0 +1,3 @@ + +ALTER TABLE portanova.reportperiod ADD COLUMN periodtype text; +ALTER TABLE portanova.reportperiod ADD COLUMN subinterval text; diff --git a/dev/db/tmp/update.public.sql b/dev/db/tmp/update.public.sql new file mode 100644 index 00000000..b6c66ad7 --- /dev/null +++ b/dev/db/tmp/update.public.sql @@ -0,0 +1,2 @@ + +ALTER TABLE public.companies ADD COLUMN subinterval text; diff --git a/dev/db/update.live.sql b/dev/db/update.live.sql new file mode 100644 index 00000000..8416c62d --- /dev/null +++ b/dev/db/update.live.sql @@ -0,0 +1,16 @@ + + +ALTER TABLE brasserie_du_theatre.reportperiod ADD COLUMN periodtype text; +ALTER TABLE brasserie_du_theatre.reportperiod ADD COLUMN subinterval text; + +ALTER TABLE demo.reportperiod ADD COLUMN periodtype text; +ALTER TABLE demo.reportperiod ADD COLUMN subinterval text; + + +ALTER TABLE elch.reportperiod ADD COLUMN periodtype text; +ALTER TABLE elch.reportperiod ADD COLUMN subinterval text; + +ALTER TABLE portanova.reportperiod ADD COLUMN periodtype text; +ALTER TABLE portanova.reportperiod ADD COLUMN subinterval text; + +ALTER TABLE public.companies ADD COLUMN subinterval text; diff --git a/dev/db/update.public.sql b/dev/db/update.public.sql deleted file mode 100644 index 134c0da0..00000000 --- a/dev/db/update.public.sql +++ /dev/null @@ -1,79 +0,0 @@ - - -CREATE TABLE public.vacancydays ( - daydate date, - vacancyname text, - id text DEFAULT public.getuuid() NOT NULL, - modified timestamp without time zone DEFAULT now(), - created timestamp without time zone DEFAULT now() -); - -ALTER TABLE ONLY public.vacancydays - ADD CONSTRAINT vacancydays_pkey PRIMARY KEY (id); - -CREATE TRIGGER trg_public_before_upd_vacancydays BEFORE UPDATE ON public.vacancydays FOR EACH ROW EXECUTE PROCEDURE public.trg_update_modified(); - - -CREATE TABLE public.vacancytypes ( - vacancyname text, - isworktime boolean, - isfreetime boolean, - color text, - id text DEFAULT public.getuuid() NOT NULL, - modified timestamp without time zone DEFAULT now(), - created timestamp without time zone DEFAULT now(), - legend text -); - -ALTER TABLE ONLY public.vacancytypes - ADD CONSTRAINT vacancytypes_pkey PRIMARY KEY (id); - -CREATE TRIGGER trg_public_before_upd_vacancytypes BEFORE UPDATE ON public.vacancytypes FOR EACH ROW EXECUTE PROCEDURE public.trg_update_modified(); - -ALTER TABLE public.companies ADD COLUMN periodtypes text; -ALTER TABLE public.sectorworktime ADD COLUMN maxhourspercents numeric; -ALTER TABLE public.sectorworktime ADD COLUMN periodtype text; - -INSERT INTO public.vacancydays (daydate, vacancyname, id, modified, created) VALUES ('2020-01-01', 'Nouvel An', '093fa9d9-e7a7-736c-7cf0-ef82064035c7', '2020-09-28 10:28:09.366748', '2020-09-28 10:28:09.366748'); -INSERT INTO public.vacancydays (daydate, vacancyname, id, modified, created) VALUES ('2020-04-13', 'Lundi de Pâques', 'f310bb86-1c62-6e6f-12a1-618385d1038e', '2020-09-28 10:28:09.366748', '2020-09-28 10:28:09.366748'); -INSERT INTO public.vacancydays (daydate, vacancyname, id, modified, created) VALUES ('2020-05-09', 'Journée de l''Europe', '06b596b1-a59d-c0cb-4b9d-92f1ad0faeb1', '2020-09-28 10:28:09.366748', '2020-09-28 10:28:09.366748'); -INSERT INTO public.vacancydays (daydate, vacancyname, id, modified, created) VALUES ('2020-05-21', 'Ascension', 'cb4c99f8-3c33-0ba7-6231-82062ca75461', '2020-09-28 10:28:09.366748', '2020-09-28 10:28:09.366748'); -INSERT INTO public.vacancydays (daydate, vacancyname, id, modified, created) VALUES ('2020-06-01', 'Lundi de Pentecôte', 'd53b6aac-d1d4-2f39-717e-43f4c8259dd7', '2020-09-28 10:28:09.366748', '2020-09-28 10:28:09.366748'); -INSERT INTO public.vacancydays (daydate, vacancyname, id, modified, created) VALUES ('2020-08-15', 'Assomption', '095d822e-dea3-fa97-8123-fc2baf52eb54', '2020-09-28 10:28:09.366748', '2020-09-28 10:28:09.366748'); -INSERT INTO public.vacancydays (daydate, vacancyname, id, modified, created) VALUES ('2020-11-01', 'Toussaint', 'e03773c8-2038-0bce-b7ee-5cdbb84c94fe', '2020-09-28 10:28:09.366748', '2020-09-28 10:28:09.366748'); -INSERT INTO public.vacancydays (daydate, vacancyname, id, modified, created) VALUES ('2020-12-25', 'Noël', '04fedb33-c84b-b627-6e2f-b4e52c3546dc', '2020-09-28 10:28:09.366748', '2020-09-28 10:28:09.366748'); -INSERT INTO public.vacancydays (daydate, vacancyname, id, modified, created) VALUES ('2021-01-01', 'Nouvel An', '11a7eb98-3172-76c7-da0b-c08a30eb38c2', '2020-09-28 10:28:09.366748', '2020-09-28 10:28:09.366748'); -INSERT INTO public.vacancydays (daydate, vacancyname, id, modified, created) VALUES ('2021-04-05', 'Lundi de Pâques', '9ee4eee2-5167-51a3-bf62-2fad94d407bd', '2020-09-28 10:28:09.366748', '2020-09-28 10:28:09.366748'); -INSERT INTO public.vacancydays (daydate, vacancyname, id, modified, created) VALUES ('2021-05-09', 'Journée de l''Europe', '00d0899d-5228-faac-cae0-8e8e272be058', '2020-09-28 10:28:09.366748', '2020-09-28 10:28:09.366748'); -INSERT INTO public.vacancydays (daydate, vacancyname, id, modified, created) VALUES ('2021-05-13', 'Ascension', '9ae906c3-4f77-bdcf-9bde-9418677edfd0', '2020-09-28 10:28:09.366748', '2020-09-28 10:28:09.366748'); -INSERT INTO public.vacancydays (daydate, vacancyname, id, modified, created) VALUES ('2021-05-24', 'Lundi de Pentecôte', '802550d1-3cfe-b5b4-3fed-1cba130ce1b4', '2020-09-28 10:28:09.366748', '2020-09-28 10:28:09.366748'); -INSERT INTO public.vacancydays (daydate, vacancyname, id, modified, created) VALUES ('2021-08-15', 'Assomption', '1e63ef0e-0c29-3643-16df-d3090ea8f875', '2020-09-28 10:28:09.366748', '2020-09-28 10:28:09.366748'); -INSERT INTO public.vacancydays (daydate, vacancyname, id, modified, created) VALUES ('2021-11-01', 'Toussaint', '70c11deb-581e-8cc9-80ca-86570b3ed353', '2020-09-28 10:28:09.366748', '2020-09-28 10:28:09.366748'); -INSERT INTO public.vacancydays (daydate, vacancyname, id, modified, created) VALUES ('2021-12-25', 'Noël', 'ad79d080-674d-0172-5ed2-c1edd008935f', '2020-09-28 10:28:09.366748', '2020-09-28 10:28:09.366748'); -INSERT INTO public.vacancydays (daydate, vacancyname, id, modified, created) VALUES ('2022-01-01', 'Nouvel An', 'bdd3443d-c1c8-c8d0-98b8-f29b0dca2fa7', '2020-09-28 10:28:09.366748', '2020-09-28 10:28:09.366748'); -INSERT INTO public.vacancydays (daydate, vacancyname, id, modified, created) VALUES ('2022-04-18', 'Lundi de Pâques', '59342a7d-aeee-6263-f93d-5e3d950b8a2a', '2020-09-28 10:28:09.366748', '2020-09-28 10:28:09.366748'); -INSERT INTO public.vacancydays (daydate, vacancyname, id, modified, created) VALUES ('2022-05-09', 'Journée de l''Europe', '558c6912-665a-a70e-7fcf-2a91b5165d09', '2020-09-28 10:28:09.366748', '2020-09-28 10:28:09.366748'); -INSERT INTO public.vacancydays (daydate, vacancyname, id, modified, created) VALUES ('2022-05-26', 'Ascension', 'bda814fb-ce12-91b5-bdfb-7bd8662f493b', '2020-09-28 10:28:09.366748', '2020-09-28 10:28:09.366748'); -INSERT INTO public.vacancydays (daydate, vacancyname, id, modified, created) VALUES ('2022-06-06', 'Lundi de Pentecôte', '68bad8f6-9f58-3560-c4ff-2403e936c1b7', '2020-09-28 10:28:09.366748', '2020-09-28 10:28:09.366748'); -INSERT INTO public.vacancydays (daydate, vacancyname, id, modified, created) VALUES ('2022-08-15', 'Assomption', '9a7d9e37-0778-3071-1241-40fdaddb9e6c', '2020-09-28 10:28:09.366748', '2020-09-28 10:28:09.366748'); -INSERT INTO public.vacancydays (daydate, vacancyname, id, modified, created) VALUES ('2022-11-01', 'Toussaint', '4a21adfd-fad4-532d-d6c4-da4582d78fbf', '2020-09-28 10:28:09.366748', '2020-09-28 10:28:09.366748'); -INSERT INTO public.vacancydays (daydate, vacancyname, id, modified, created) VALUES ('2022-12-25', 'Noël', '7203f31e-5422-1afd-e764-86de25f8af0b', '2020-09-28 10:28:09.366748', '2020-09-28 10:28:09.366748'); -INSERT INTO public.vacancydays (daydate, vacancyname, id, modified, created) VALUES ('2022-12-26', 'Deuxième jour de Noël', '6702b5b0-c145-3ba9-f755-1e213b38291f', '2020-09-28 10:28:09.366748', '2020-09-28 10:28:09.366748'); -INSERT INTO public.vacancydays (daydate, vacancyname, id, modified, created) VALUES ('2020-06-23', 'Fête Nationale', '586e0454-bd87-e9b6-2a96-80f0a55aaa14', '2020-09-28 10:28:09.366748', '2020-09-28 10:28:09.366748'); -INSERT INTO public.vacancydays (daydate, vacancyname, id, modified, created) VALUES ('2021-06-23', 'Fête Nationale', 'd162f456-f967-77c6-7cd7-90fffb618c50', '2020-09-28 10:28:09.366748', '2020-09-28 10:28:09.366748'); -INSERT INTO public.vacancydays (daydate, vacancyname, id, modified, created) VALUES ('2022-06-23', 'Fête Nationale', '6a3916d1-3bf5-566a-3a1b-1b63dc631724', '2020-09-28 10:28:09.366748', '2020-09-28 10:28:09.366748'); -INSERT INTO public.vacancydays (daydate, vacancyname, id, modified, created) VALUES ('2020-05-01', 'Premier mai', '9492f628-89c0-09ce-cc4a-8c1c2f6458e2', '2020-09-28 10:28:09.366748', '2020-09-28 10:28:09.366748'); -INSERT INTO public.vacancydays (daydate, vacancyname, id, modified, created) VALUES ('2020-12-26', '2e jour de Noël', '3bf8abe4-86fc-8bc2-df89-2f564f94e6db', '2020-09-28 10:28:09.366748', '2020-09-28 10:28:09.366748'); -INSERT INTO public.vacancydays (daydate, vacancyname, id, modified, created) VALUES ('2021-12-26', '2e jour de Noël', '5cce2ee3-febd-0539-ea16-e870cdfaeaf7', '2020-09-28 10:28:09.366748', '2020-09-28 10:28:09.366748'); -INSERT INTO public.vacancydays (daydate, vacancyname, id, modified, created) VALUES ('2021-05-01', 'Premier mai', '00bcd115-8871-cf19-f094-ec78bbbb8035', '2020-09-28 10:28:09.366748', '2020-09-28 10:28:09.366748'); -INSERT INTO public.vacancydays (daydate, vacancyname, id, modified, created) VALUES ('2022-05-01', 'Premier mai', 'e58f08a0-57b0-2a90-fb0d-7a1aebf98741', '2020-09-28 10:28:09.366748', '2020-09-28 10:28:09.366748'); - - -INSERT INTO public.vacancytypes (vacancyname, isworktime, isfreetime, color, id, modified, created, legend) VALUES ('extraordinaire', true, true, '#e26b0a', 'ab2c7f5f-f591-de4c-c617-e6aadeee1ab0', '2020-09-28 10:38:56.747727', '2020-09-28 10:38:56.747727', '3'); -INSERT INTO public.vacancytypes (vacancyname, isworktime, isfreetime, color, id, modified, created, legend) VALUES ('training', true, NULL, '#b7dee8', '53ec3955-5eab-f698-86f0-6a52f74e2d4e', '2020-09-28 10:38:56.747727', '2020-09-28 10:38:56.747727', '4'); -INSERT INTO public.vacancytypes (vacancyname, isworktime, isfreetime, color, id, modified, created, legend) VALUES ('jour de repos', false, true, '#0070c0', '602a6294-7ef5-9393-dfc0-f0c16269c4d5', '2020-09-28 10:38:56.747727', '2020-09-28 10:38:56.747727', 'a'); -INSERT INTO public.vacancytypes (vacancyname, isworktime, isfreetime, color, id, modified, created, legend) VALUES ('comp. 44h', false, NULL, '#86a0af', '1ef5a8bd-da5e-d5da-cecc-c7dfb9c038a9', '2020-09-28 10:38:56.747727', '2020-09-28 10:38:56.747727', 'b'); -INSERT INTO public.vacancytypes (vacancyname, isworktime, isfreetime, color, id, modified, created, legend) VALUES ('comp. dim. trav.', false, NULL, '#aeb2b5', '83411c9e-99cd-d569-144d-dd6527c5fb0b', '2020-09-28 10:38:56.747727', '2020-09-28 10:38:56.747727', 'c'); -INSERT INTO public.vacancytypes (vacancyname, isworktime, isfreetime, color, id, modified, created, legend) VALUES ('maladie', true, true, '#e3000f', '580134fe-1fee-a38e-350b-87a9a437f267', '2020-09-28 10:38:56.747727', '2020-09-28 10:38:56.747727', '2'); -INSERT INTO public.vacancytypes (vacancyname, isworktime, isfreetime, color, id, modified, created, legend) VALUES ('normal', true, true, '#1b92bb', '219a86b8-5fc4-c5c4-a35c-89a0af912a21', '2020-09-28 10:38:56.747727', '2020-09-28 10:38:56.747727', '1'); - diff --git a/dev/dbfunctions.sh b/dev/dbfunctions.sh new file mode 100644 index 00000000..249f2703 --- /dev/null +++ b/dev/dbfunctions.sh @@ -0,0 +1,59 @@ +function updschemadiff { + #echo "" > ${CALLDIR}'/livedbupdate.sql' + echo "" > ${CALLDIR}'/db/tmp/update.'${DBSCHEMA}'.sql' + #1. check only '${DBSCHEMA}' tables not installed + # DBHOST="localhost" + psql -h ${DBDEVHOST} -U ${DBUSER} -w ${DBNAME} -t -F ";" -c "select tb.table_schema,tb.table_name,tb.table_type from information_schema.tables tb join information_schema.schemata sc + on (tb.table_schema=sc.schema_name and sc.schema_name in ('${DBSCHEMA}')) + order by tb.table_type,tb.table_schema,tb.table_name;" | sort | sed -e 's/\s//g' > ${CALLDIR}'/db/tmp/'${DBNAME}'.'${DBSCHEMA}'.tables.local.txt' + #DBHOST="sql12.your-server.de" + psql -h ${DBLIVEHOST} -U ${DBUSER} -w ${DBNAME} -t -F ";" -c "select tb.table_schema,tb.table_name,tb.table_type from information_schema.tables tb join information_schema.schemata sc + on (tb.table_schema=sc.schema_name and sc.schema_name in ('${DBSCHEMA}')) + order by tb.table_type,tb.table_schema,tb.table_name;" | sort | sed -e 's/\s//g' > ${CALLDIR}'/db/tmp/'${DBNAME}'.'${DBSCHEMA}'.tables.live.txt' + #DBHOST="localhost" + diff ${CALLDIR}'/db/tmp/'${DBNAME}'.'${DBSCHEMA}'.tables.live.txt' ${CALLDIR}'/db/tmp/'${DBNAME}'.'${DBSCHEMA}'.tables.local.txt' | grep -e "^>.*|BASETABLE" | sed -e 's/>\ //g;' > ${CALLDIR}'/db/tmp/update.'${DBSCHEMA}'.tables.txt' + FNEWTABLES=$(cat ${CALLDIR}'/db/tmp/update.'${DBSCHEMA}'.tables.txt' | awk -F"|" '{ print $2 }') + IFS=' + ' + NEWTABLES=(${FNEWTABLES}) + ARTABLES= + for t in "${NEWTABLES[@]}" + do + pg_dump -h ${DBDEVHOST} -U ${DBUSER} -O -x -s --no-comments -t $t ${DBNAME} |\ + grep -v -e "^--" |\ + grep -v -e "^SET" |\ + grep -v "SELECT pg_catalog" |\ + sed -e '/^$/N;/^\n$/D' \ + >> ${CALLDIR}'/db/tmp/update.'${DBSCHEMA}'.sql' + ARTABLES+="'"$t"'," + done + EXCLUDETABLES=${ARTABLES%?} + #echo "EXCLUSE STR: "${EXCLUDETABLES} + rm ${CALLDIR}'/db/tmp/'${DBNAME}'.'${DBSCHEMA}'.tables.local.txt' + rm ${CALLDIR}'/db/tmp/'${DBNAME}'.'${DBSCHEMA}'.tables.live.txt' + rm ${CALLDIR}'/db/tmp/update.'${DBSCHEMA}'.tables.txt' + if [ "${EXCLUDETABLE}" == "" ] + then + EXCLUDETABLES="''" + fi + #2. check only '${DBSCHEMA}' columns not installed + #DBHOST="localhost" + psql -h ${DBDEVHOST} -U ${DBUSER} -w ${DBNAME} -t -F ";" -c "select tb.table_schema,tb.table_name,tb.table_type, col.column_name,col.data_type from information_schema.tables tb + join information_schema.columns col on (tb.table_schema=col.table_Schema and tb.table_name=col.table_name) where col.table_name not in (${EXCLUDETABLES}) + and tb.table_schema='${DBSCHEMA}' order by tb.table_name,tb.table_type,col.column_name; " | sort | sed -e 's/\s//g' > ${CALLDIR}'/db/tmp/'${DBNAME}'.'${DBSCHEMA}'.columns.local.txt' + + #DBHOST="sql12.your-server.de" + psql -h ${DBLIVEHOST} -U ${DBUSER} -w ${DBNAME} -t -F ";" -c "select tb.table_schema,tb.table_name,tb.table_type, col.column_name,col.data_type from information_schema.tables tb + join information_schema.columns col on (tb.table_schema=col.table_schema and tb.table_name=col.table_name) where col.table_name not in (${EXCLUDETABLES}) + and tb.table_schema='${DBSCHEMA}' order by tb.table_name,tb.table_type,col.column_name; " | sort | sed -e 's/\s//g' > ${CALLDIR}'/db/tmp/'${DBNAME}'.'${DBSCHEMA}'.columns.live.txt' + + + diff ${CALLDIR}'/db/tmp/'${DBNAME}'.'${DBSCHEMA}'.columns.live.txt' ${CALLDIR}'/db/tmp/'${DBNAME}'.'${DBSCHEMA}'.columns.local.txt' | grep -e "^>.*|BASETABLE|" | sed -e 's/>\ //g;' > ${CALLDIR}'/db/tmp/update.'${DBSCHEMA}'.columns.txt' + cat ${CALLDIR}'/db/tmp/update.'${DBSCHEMA}'.columns.txt' | awk -F"|" '{ print "ALTER TABLE "$1"."$2" ADD COLUMN "$4" "$5";"}' >> ${CALLDIR}'/db/tmp/update.'${DBSCHEMA}'.sql' + + rm ${CALLDIR}'/db/tmp/'${DBNAME}'.'${DBSCHEMA}'.columns.local.txt' + rm ${CALLDIR}'/db/tmp/'${DBNAME}'.'${DBSCHEMA}'.columns.live.txt' + rm ${CALLDIR}'/db/tmp/update.'${DBSCHEMA}'.columns.txt' +} + + \ No newline at end of file diff --git a/dev/diff_db.sh b/dev/diff_db.sh index f1bd9c36..2748e8f9 100644 --- a/dev/diff_db.sh +++ b/dev/diff_db.sh @@ -1,88 +1,39 @@ #!/bin/bash CALLDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -DBNAME="potlu2_db" -DBUSER="potlu2_user" -export PGPASSWORD="dMY8xGB6cBLzrDGE" -if [[ $# -eq 0 ]] -then - echo "No args" - exit 0 -fi -DBSCHEMA=$1; -#echo "" > ${CALLDIR}'/livedbupdate.sql' -echo "" > ${CALLDIR}'/db/update.'${DBSCHEMA}'.sql' - - -#1. check only '${DBSCHEMA}' tables not installed -DBHOST="localhost" -psql -h ${DBHOST} -U ${DBUSER} -w ${DBNAME} -t -F ";" -c "select tb.table_schema,tb.table_name,tb.table_type from information_schema.tables tb join information_schema.schemata sc -on (tb.table_schema=sc.schema_name and sc.schema_name in ('${DBSCHEMA}')) -order by tb.table_type,tb.table_schema,tb.table_name;" | sort | sed -e 's/\s//g' > ${CALLDIR}'/db/'${DBNAME}'.'${DBSCHEMA}'.tables.local.txt' - -DBHOST="sql12.your-server.de" -psql -h ${DBHOST} -U ${DBUSER} -w ${DBNAME} -t -F ";" -c "select tb.table_schema,tb.table_name,tb.table_type from information_schema.tables tb join information_schema.schemata sc -on (tb.table_schema=sc.schema_name and sc.schema_name in ('${DBSCHEMA}')) -order by tb.table_type,tb.table_schema,tb.table_name;" | sort | sed -e 's/\s//g' > ${CALLDIR}'/db/'${DBNAME}'.'${DBSCHEMA}'.tables.live.txt' - -DBHOST="localhost" -diff ${CALLDIR}'/db/'${DBNAME}'.'${DBSCHEMA}'.tables.live.txt' ${CALLDIR}'/db/'${DBNAME}'.'${DBSCHEMA}'.tables.local.txt' | grep -e "^>.*|BASETABLE" | sed -e 's/>\ //g;' > ${CALLDIR}'/db/update.'${DBSCHEMA}'.tables.txt' - - - -FNEWTABLES=$(cat ${CALLDIR}'/db/update.'${DBSCHEMA}'.tables.txt' | awk -F"|" '{ print $2 }') -IFS=' -' -NEWTABLES=(${FNEWTABLES}) -ARTABLES= -for t in "${NEWTABLES[@]}" -do - pg_dump -h ${DBHOST} -U ${DBUSER} -O -x -s --no-comments -t $t ${DBNAME} |\ - grep -v -e "^--" |\ - grep -v -e "^SET" |\ - grep -v "SELECT pg_catalog" |\ - sed -e '/^$/N;/^\n$/D' \ - >> ${CALLDIR}'/db/update.'${DBSCHEMA}'.sql' - ARTABLES+="'"$t"'," -done - -EXCLUDETABLES=${ARTABLES%?} -#echo "EXCLUSE STR: "${EXCLUDETABLES} -rm ${CALLDIR}'/db/'${DBNAME}'.'${DBSCHEMA}'.tables.local.txt' -rm ${CALLDIR}'/db/'${DBNAME}'.'${DBSCHEMA}'.tables.live.txt' -rm ${CALLDIR}'/db/update.'${DBSCHEMA}'.tables.txt' -if [ "${EXCLUDETABLE}" == "" ] -then - EXCLUDETABLES="''" -fi -#2. check only '${DBSCHEMA}' columns not installed -DBHOST="localhost" -psql -h ${DBHOST} -U ${DBUSER} -w ${DBNAME} -t -F ";" -c "select tb.table_schema,tb.table_name,tb.table_type, col.column_name,col.data_type from information_schema.tables tb -join information_schema.columns col on (tb.table_schema=col.table_Schema and tb.table_name=col.table_name) where col.table_name not in (${EXCLUDETABLES}) -and tb.table_schema='${DBSCHEMA}' order by tb.table_name,tb.table_type,col.column_name; " | sort | sed -e 's/\s//g' > ${CALLDIR}'/db/'${DBNAME}'.'${DBSCHEMA}'.columns.local.txt' - -DBHOST="sql12.your-server.de" -psql -h ${DBHOST} -U ${DBUSER} -w ${DBNAME} -t -F ";" -c "select tb.table_schema,tb.table_name,tb.table_type, col.column_name,col.data_type from information_schema.tables tb -join information_schema.columns col on (tb.table_schema=col.table_schema and tb.table_name=col.table_name) where col.table_name not in (${EXCLUDETABLES}) -and tb.table_schema='${DBSCHEMA}' order by tb.table_name,tb.table_type,col.column_name; " | sort | sed -e 's/\s//g' > ${CALLDIR}'/db/'${DBNAME}'.'${DBSCHEMA}'.columns.live.txt' - - -diff ${CALLDIR}'/db/'${DBNAME}'.'${DBSCHEMA}'.columns.live.txt' ${CALLDIR}'/db/'${DBNAME}'.'${DBSCHEMA}'.columns.local.txt' | grep -e "^>.*|BASETABLE|" | sed -e 's/>\ //g;' > ${CALLDIR}'/update.'${DBSCHEMA}'.columns.txt' -cat ${CALLDIR}'/update.'${DBSCHEMA}'.columns.txt' | awk -F"|" '{ print "ALTER TABLE "$1"."$2" ADD COLUMN "$4" "$5";"}' >> ${CALLDIR}'/db/update.'${DBSCHEMA}'.sql' - -rm ${CALLDIR}'/db/'${DBNAME}'.'${DBSCHEMA}'.columns.local.txt' -rm ${CALLDIR}'/db/'${DBNAME}'.'${DBSCHEMA}'.columns.live.txt' -rm ${CALLDIR}'/update.'${DBSCHEMA}'.columns.txt' - -if [ "${DBSCHEMA}" = "public" ] -then - DBHOST="localhost" - for t in "${NEWTABLES[@]}" - do - pg_dump -h ${DBHOST} -U ${DBUSER} -O -x -a --column-inserts --no-comments -t $t ${DBNAME} |\ - grep -v -e "^--" |\ - grep -v -e "^SET" |\ - grep -v "SELECT pg_catalog" |\ - sed -e '/^$/N;/^\n$/D' \ - >> ${CALLDIR}'/db/update.'${DBSCHEMA}'.sql' - done -fi \ No newline at end of file +source ${CALLDIR}"/conf.sh" +source ${CALLDIR}"/dbfunctions.sh" +# if [[ $# -eq 0 ]] +# then +# echo "No args" +# exit 0 +# fi + +# IFS=' +# ' +# ALLSCHEMA=(`psql -h ${DBLIVEHOST} -U ${DBUSER} -t -A -c "select schema_name from information_schema.schemata where (catalog_name='${DBNAME}' and schema_owner = '${DBUSER}') or (catalog_name='${DBNAME}' and schema_name='public');" ${DBNAME}`) + +# #echo ${ALLSCHEMA}; +# for schema in "${ALLSCHEMA[@]}" +# do +# echo "Diff Schema $schema" +# DBSCHEMA=$schema +# updschemadiff +# done +FILES=`find ${CALLDIR}/db/tmp -type f` +cat ${FILES} > ${CALLDIR}"/db/update.live.sql" + + + +# if [ "${DBSCHEMA}" = "public" ] +# then +# #DBHOST="localhost" +# for t in "${NEWTABLES[@]}" +# do +# pg_dump -h ${DBDEVHOST} -U ${DBUSER} -O -x -a --column-inserts --no-comments -t $t ${DBNAME} |\ +# grep -v -e "^--" |\ +# grep -v -e "^SET" |\ +# grep -v "SELECT pg_catalog" |\ +# sed -e '/^$/N;/^\n$/D' \ +# >> ${CALLDIR}'/db/update.'${DBSCHEMA}'.sql' +# done +# fi \ No newline at end of file diff --git a/install/update_app.sh b/install/update_app.sh new file mode 100644 index 00000000..fbaee7b7 --- /dev/null +++ b/install/update_app.sh @@ -0,0 +1,80 @@ +#!/bin/bash +CALLDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +PROJECTDIR="$(dirname "${CALLDIR}")" +echo ${PROJECTDIR} +cd ${PROJECTDIR} +UPLOAD=$1 +CDATE=`date +%Y%m%d%H%M` + +echo "last tag" +git tag --list --sort=-creatordate | tail -n 1 +read -p "new tag:" tag +echo +echo "working tag is $tag" +TAGEXISTS=$(git tag --list | grep $tag) +echo "tag exists? ->${TAGEXISTS}<-" +if [ "${TAGEXISTS}" == "" ] +then + echo "create tag $tag" + git add -A + sed -i -e "s/^\[% appversion\s*=\s*.*/\[% appversion=\'$tag\' %\]/" tmpl/index.tt + sed -i -e "s/\"version\": \".*\",/\"version\": \"$tag\",/" desktopapp/package.json + git commit -a -m "v${CDATE} t$tag" + git tag $tag +fi +echo "export app dir of tag $tag" +if [ ! -d ${PROJECTDIR}"/release" ] +then + mkdir ${PROJECTDIR}"/release" +fi +git archive -o ${PROJECTDIR}"/release/$tag.zip" $tag:app +cd ${PROJECTDIR}"/release" +unzip $tag.zip +rm $tag.zip + +source ${CALLDIR}"/../dev/conf.sh" +find . -type f -printf "%p|%s\n" | grep -v -e "\/data\/output\/" | grep -v -e "\/data\/tmp\/" | grep -v -e "\/tools\/" | sort > ${TMPDIR}/sourcefiles.local.txt + +ssh -p ${SSHPORT} ${SSHUSER}@${SSHHOST} 'cd '${REMOTEAPPFOLDER}' && find . -type f -printf "%p|%s\n" | sort' > ${TMPDIR}/sourcefiles.remote.txt + +echo "To update:" +UPDFILES=`diff -y -W 200 ${TMPDIR}/sourcefiles.local.txt ${TMPDIR}/sourcefiles.remote.txt | grep " |" | awk '{ print $1 }' | cut -d"|" -f 1 | grep -v ".htaccess" | grep -v "dksconfig" | grep -v ".git" | grep -v "/media/"` +echo ${UPDFILES} +echo "" +echo "new files:" +INSFILES=`diff -y -W 200 ${TMPDIR}/sourcefiles.local.txt ${TMPDIR}/sourcefiles.remote.txt | grep " <" | awk '{ print $1 }' | cut -d"|" -f 1 | grep -v ".htaccess" | grep -v "dksconfig" | grep -v ".git" | grep -v "/media/"` +echo ${INSFILES} +echo "" +echo "only online or OLD files:" +diff -y -W 200 ${TMPDIR}/sourcefiles.remote.txt ${TMPDIR}/sourcefiles.local.txt | grep " <" | awk '{ print $1 }' +echo "" +echo "----------------------------" +echo "" +#cd ${CALLDIR}"/app" + +if [ -e ${TMPDIR}/update_${CDATE}.tar.gz ] +then + rm ${TMPDIR}/update_${CDATE}.tar.gz +fi +if [ "${UPDFILES}" != "" ] || [ "${INSFILES}" != "" ] +then + echo "TAR package:" + tar czvf ${TMPDIR}/update_${CDATE}.tar.gz ${UPDFILES} ${INSFILES} + #tar tzvf ${CALLDIR}/update_${CDATE}.tar.gz +fi +if [ "${UPLOAD}" == "upload" ] +then + if [ -e ${TMPDIR}/update_${CDATE}.tar.gz ] + then + echo "upload/Install files" + #scp -P ${SSHPORT} ${TMPDIR}/update_${CDATE}.tar.gz ${SSHUSER}@${SSHHOST}:${REMOTEAPPFOLDER} + #ssh -p ${SSHPORT} ${SSHUSER}@${SSHHOST} 'cd '${REMOTEAPPFOLDER}' && tar xzvf update_'${CDATE}'.tar.gz && rm update_'${CDATE}'.tar.gz' + else + echo "NO Files to Install/upload!" + fi +fi +if [ -e ${TMPDIR}/update_${CDATE}.tar.gz ] +then + rm ${TMPDIR}/update_${CDATE}.tar.gz +fi + -- 2.39.5