v202011161203 t1.0.16 1.0.16
authorKilian Saffran <ksaffran@dks.lu>
Mon, 16 Nov 2020 11:03:20 +0000 (12:03 +0100)
committerKilian Saffran <ksaffran@dks.lu>
Mon, 16 Nov 2020 11:03:20 +0000 (12:03 +0100)
40 files changed:
.gitignore
app/index.cgi
app/static/js/dataform.min.js [deleted file]
app/static/js/report.min.js [deleted file]
app/static/js/request.min.js [deleted file]
app/static/js/timecalc.min.js [deleted file]
app/tmpl/index.tt
app/tmpl/module/admin/companies.min.js [deleted file]
app/tmpl/module/admin/schemadataset.min.js [deleted file]
app/tmpl/module/admin/sectors.min.js [deleted file]
app/tmpl/module/admin/staffgroups.min.js [deleted file]
app/tmpl/module/admin/users.min.js [deleted file]
app/tmpl/module/admin/vacancydays.min.js [deleted file]
app/tmpl/module/admin/vacancytypes.min.js [deleted file]
app/tmpl/module/admin/worktimes.min.js [deleted file]
app/tmpl/module/company/company.min.js [deleted file]
app/tmpl/module/company/staffgroups.min.js [deleted file]
app/tmpl/module/company/users.min.js [deleted file]
app/tmpl/module/index/index.min.js [deleted file]
app/tmpl/module/periods/periodvalidation.min.js [deleted file]
app/tmpl/module/periods/reportperiod.min.js [deleted file]
app/tmpl/module/periods/staffperiodweeks.min.js [deleted file]
app/tmpl/module/staff/staff.min.js [deleted file]
app/tmpl/module/staff/staffcontract.min.js [deleted file]
app/tmpl/module/staff/staffperiods.min.js [deleted file]
app/tmpl/module/workplans/workplans.min.js [deleted file]
desktopapp/package.json
dev/conf.sh
dev/db/tmp/update.barto.sql [moved from dev/db/update.portanova.sql with 100% similarity]
dev/db/tmp/update.brasserie_du_theatre.sql [new file with mode: 0644]
dev/db/tmp/update.demo.sql [new file with mode: 0644]
dev/db/tmp/update.demoold.sql [new file with mode: 0644]
dev/db/tmp/update.elch.sql [new file with mode: 0644]
dev/db/tmp/update.portanova.sql [new file with mode: 0644]
dev/db/tmp/update.public.sql [new file with mode: 0644]
dev/db/update.live.sql [new file with mode: 0644]
dev/db/update.public.sql [deleted file]
dev/dbfunctions.sh [new file with mode: 0644]
dev/diff_db.sh
install/update_app.sh [new file with mode: 0644]

index c879b4d..b5afd0e 100644 (file)
@@ -12,3 +12,5 @@ website/downloads
 desktopapp/node_modules
 release-builds
 dev/tmp/*
+release
+install/tmp/*
index 15537a0..61dfee2 100644 (file)
@@ -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 (file)
index 5516ad3..0000000
+++ /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<frm.elements.length;i++){var field=frm.elements[i];if("null"!=field.getAttribute("name")&&("INPUT"==field.tagName||"SELECT"==field.tagName||"TEXTAREA"==field.tagName))if(field.classList.contains("tagedit")){var fvalue=field.value.trim(),ndata=null;""!=fvalue&&(ndata=fvalue.split(",")),flds[field.getAttribute("name")]=ndata}else"TEXTAREA"==field.tagName?field.classList.contains("richeditarea")?flds[field.getAttribute("name")]=tinymce.get(field.id).getContent():flds[field.getAttribute("name")]=field.innerHTML:"checkbox"==field.type?field.checked?flds[field.getAttribute("name")]="1":flds[field.getAttribute("name")]="":"SELECT"==field.tagName&&1==field.multiple?flds[field.getAttribute("name")]=dataflds[field.getAttribute("id")].selected():flds[field.getAttribute("name")]=field.value}return flds},cleanform:function(frmname){var frm=document.getElementById("frm_"+frmname);for(var f in frm)frm[f]&&frm[f].id&&("INPUT"==frm[f].tagName&&("checkbox"==frm[f].type?frm[f].checked=!1:frm[f].classList.contains("datefield")?frm[f]._flatpickr&&frm[f]._flatpickr.clear():frm[f].value=""),"SELECT"==frm[f].tagName&&(1==frm[f].multiple?frm[f].classList.contains("choices__input")&&choice[frmname][frm[f].id].removeActiveItems():frm[f].value=""),"TEXTAREA"==frm[f].tagName&&(frm[f].classList.contains("richeditarea")?tinymce.get(frm[f].id).setContent(""):frm[f].innerHTML=""));return!1},cleanform2:function(frmname,choices){var frm=document.getElementById("frm_"+frmname);for(var f in frm)frm[f]&&frm[f].id&&("INPUT"==frm[f].tagName&&("checkbox"==frm[f].type?frm[f].checked=!1:frm[f].classList.contains("datefield")?frm[f]._flatpickr&&frm[f]._flatpickr.clear():frm[f].value=""),"SELECT"==frm[f].tagName&&(1==frm[f].multiple?frm[f].classList.contains("choices__input")&&choices[frm[f].id].removeActiveItems():frm[f].value=""),"TEXTAREA"==frm[f].tagName&&(frm[f].classList.contains("richeditarea")?tinymce.get(frm[f].id).setContent(""):frm[f].innerHTML=""));return!1},fillformbydataclass2:function(dataclass,choices,data,onblur){var frm=document.getElementsByClassName("data_"+dataclass);if(data)for(var f in frm)frm[f].id&&(frm[f].dataset.id=data.id),data[frm[f].id]&&("INPUT"==frm[f].tagName&&("checkbox"==frm[f].type?"1"==data[frm[f].id]?frm[f].checked=!0:frm[f].checked=!1:frm[f].classList.contains("datefield")?frm[f]._flatpickr.setDate(data[frm[f].id]):frm[f].classList.contains("timefield")?frm[f].value=timecalc.StringToTime(data[frm[f].id]):frm[f].value=data[frm[f].id]),"SELECT"==frm[f].tagName&&(1==frm[f].multiple?choices[frm[f].id].set(JSON.parse(data[frm[f].id])):frm[f].value=data[frm[f].id]))},fillselectlist:function(obj,data,vidcol,vvalcol){var sellist=[];let csel=obj.value;if(data)for(var i in data)sellist.push({value:data[i][vidcol],text:data[i][vvalcol]});return obj.setData(sellist),obj.select.element.dataset.selected&&""!=obj.select.element.dataset.selected&&obj.set(obj.select.element.dataset.selected),!1},savefield:function(obj,callback){return fdata=obj.dataset,fdata.save="field",fdata.schemata=schemata,"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=>{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 (file)
index 56cd31e..0000000
+++ /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 (file)
index 82b32c6..0000000
+++ /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<r.length;)e=r.charCodeAt(h++),t=r.charCodeAt(h++),o=r.charCodeAt(h++),n=e>>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<r.length;)n=this._keyStr.indexOf(r.charAt(h++)),a=this._keyStr.indexOf(r.charAt(h++)),i=this._keyStr.indexOf(r.charAt(h++)),c=this._keyStr.indexOf(r.charAt(h++)),e=n<<2|a>>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;t<r.length;t++){var o=r.charCodeAt(t)
-o<128?e+=String.fromCharCode(o):o>127&&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;t<r.length;)o=r.charCodeAt(t),o<128?(e+=String.fromCharCode(o),t++):o>191&&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 (file)
index 28aa58e..0000000
+++ /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<t;)l=n+l
-return l},mondayBefore:function(e){null==e&&(e=new Date)
-let t=e.getDay(),n=new Date
-return n=0==e.getDay()?(new Date).setDate(e.getDate()-0):(new Date).setDate(e.getDate()-t),new Date(n)},sundayAfter:function(e){new Date},StringToTime:function(e){if(e=e.toString().substring(0,5),e=e.replace(/\D/g,""),0==e.length)return""
-if(e.length<=2)return e>"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="")}}
index 6728ba2..c77540e 100644 (file)
@@ -1,4 +1,4 @@
-[% appversion = '0.9.14.6' %]
+[% appversion = '1.0.15' %]
 [% minify = '' %]
 <!DOCTYPE html>
 <html lang="fr">
diff --git a/app/tmpl/module/admin/companies.min.js b/app/tmpl/module/admin/companies.min.js
deleted file mode 100644 (file)
index 76e0aa9..0000000
+++ /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 (file)
index 2d05a5e..0000000
+++ /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,'<span class="icon-Save"></span>Supprimer','<span class="icon-remove"></span>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("",'<div class="xxlarge">Attendez s.v.p.!</div>'),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 (file)
index 93786cb..0000000
+++ /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<br/>quotidienne",field:"mindailyrecuperation",headerSort:!1,formatter:timeFormatter},{title:"standard",field:"isdefault",headerSort:!1,formatter:"tickCross",hozAlign:"center",formatterParams:{allowEmpty:!0,allowTruthy:!0,tickElement:"<span>&#10004;</span>"}}]}),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 (file)
index 8bd97a4..0000000
+++ /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,'<span class="icon-Save"></span>Supprimer','<span class="icon-remove"></span>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 (file)
index f7d7f78..0000000
+++ /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:'<span style="color: red;">&#10004;</span>'}}]})},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,'<span class="icon-Save"></span>Supprimer','<span class="icon-remove"></span>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='<div class="panel red">Entreprise ne doit pas être vide!</div>',!1
-let s=users.choices["id_usergroup"].selected()
-if(0==s.length)return document.getElementById("usermsg").innerHTML='<div class="panel red">Accès Groupe ne doit pas être vide!</div>',!1
-let t=users.choices["schemaaccess"].selected()
-return 0==t.length?(document.getElementById("usermsg").innerHTML='<div class="panel red">Accès Entreprise ne doit pas être vide!</div>',!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,{},'<span class="icon-Save"></span>Oui','<span class="icon-remove"></span>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!",'<div class="container"><input class="input" type="text" value="'+e.result.data.username+'" readonly> <label class="label" for="staffgroups_groupname">Utilisateur</label></div><div class="container"><input class="input" type="text" value="'+e.result.data.password+'" readonly> <label class="label" for="staffgroups_groupname">Nouveau Mot de passe</label></div>'):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='<div class="panel red">Il existe déjà uncompte avec cette addresse E-Mail!</div>':(dataform.saveschemafield(document.getElementById("newuseremail"),"public"),users.gettbldata(),document.getElementById("dlgusername").style.display="none")}):document.getElementById("nunmsg").innerHTML='<div class="panel red">inserez un email valide s.v.p.!</div>'},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 (file)
index 3dedc1f..0000000
+++ /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 (file)
index d2673fc..0000000
+++ /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 (file)
index 757a919..0000000
+++ /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<br/>quotidienne",field:"mindailyrecuperation",headerSort:!1},{title:"standard",field:"isdefault",headerSort:!1,formatter:"tickCross",hozAlign:"center",formatterParams:{allowEmpty:!0,allowTruthy:!0,tickElement:"<span>&#10004;</span>"}}]}),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,'<span class="icon-Save"></span>Supprimer','<span class="icon-remove"></span>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 (file)
index 4d37b91..0000000
+++ /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 (file)
index 4c235cb..0000000
+++ /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,'<span class="icon-Save"></span>Supprimer','<span class="icon-remove"></span>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 (file)
index ceb0578..0000000
+++ /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:'<span style="color: red;">&#10004;</span>'}}]})},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,{},'<span class="icon-Save"></span>Oui','<span class="icon-remove"></span>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!",'<div class="container"><input class="input" type="text" value="'+e.result.data.username+'" readonly> <label class="label" for="staffgroups_groupname">Utilisateur</label></div><div class="container"><input class="input" type="text" value="'+e.result.data.password+'" readonly> <label class="label" for="staffgroups_groupname">Nouveau Mot de passe</label></div>'):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 (file)
index a27a0a6..0000000
+++ /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 (file)
index 30875b2..0000000
+++ /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("",'<div class="xxlarge">Attendez s.v.p.!</div>'),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("",'<div class="xxlarge">Attendez s.v.p.!</div>'),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 (file)
index fc3174d..0000000
+++ /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:'<span style="font-size: 9pt;">Prénom</span>',width:170,field:"prename",headerSort:!1},{title:'<span style="font-size: 9pt;">Nom</span>',width:170,field:"surname",headerSort:!1},{title:'<span style="font-size: 9pt;">Contrat</span>',width:70,field:"contracthours",hozAlign:"right",headerSort:!1},{title:'<span style="font-size: 9pt;">Travail</span>',width:65,field:"workhours",hozAlign:"right",headerSort:!1},{title:'<span style="font-size: 9pt;">Récup</span>',width:65,field:"recuperationhours",hozAlign:"right",headerSort:!1,formatter:periodRecupFormatter},{title:'<span style="font-size: 9pt;">Congé</span>',width:65,field:"vacancynormal",hozAlign:"right",headerSort:!1},{title:'<span style="font-size: 8pt;">Congé<br/>maladie</span>',width:65,field:"vacancyill",hozAlign:"right",headerSort:!1},{title:'<span style="font-size: 9pt;">Total</span>',width:65,field:"totalhours",hozAlign:"right",headerSort:!1,formatter:periodTotalFormatter},{title:'<span style="font-size: 8pt;">Décompte<br/>reporté</span>',width:70,field:"transferedhours",hozAlign:"right",headerSort:!1},{title:'<span style="font-size: 9pt;">h. suppl.<br/>payés</span>',width:65,field:"payedhours",hozAlign:"right",headerSort:!1,headerVertical:!0},{title:'<span style="font-size: 8pt;">Décompte<br/>fin POT</span>',width:70,field:"hoursdiff",hozAlign:"right",headerSort:!1},{title:'<span style="font-size: 9pt;">suppl.<br/>+44h</span>',width:50,field:"suppvacancy44hours",hozAlign:"right",headerSort:!1,headerVertical:!0},{title:'<span style="font-size: 9pt;">suppl.<br/>trav. dim.</span>',width:50,field:"suppvacancysunwork",hozAlign:"right",headerSort:!1,headerVertical:!0},{title:'<span style="font-size: 8pt;">moy.<br/>hebd.</span>',width:60,field:"avgtotalweekhours",hozAlign:"right",headerSort:!1,formatter:periodAVGFormatter},{title:'<span style="font-size: 9pt;">validé</span>',width:40,field:"isvalidated",hozAlign:"center",headerSort:!1,formatter:"tickCross",formatterParams:{allowEmpty:!0,allowTruthy:!1},headerVertical:!0},{title:'<span style="font-size: 9pt;">h. suppl.<br/>payés</span>',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:'<span style="font-size: 9pt;">Début</span>',width:150,field:"startdate",headerSort:!1,formatter:"datetime",formatterParams:{inputFormat:"YYYY-MM-DD",outputFormat:"DD.MM.YYYY",invalidPlaceholder:""}},{title:'<span style="font-size: 9pt;">Fin</span>',width:150,field:"enddate",headerSort:!1,formatter:"datetime",formatterParams:{inputFormat:"YYYY-MM-DD",outputFormat:"DD.MM.YYYY",invalidPlaceholder:""}},{title:'<span style="font-size: 9pt;">Contrat</span>',width:80,field:"contracthours",hozAlign:"right",formatter:nullrFormatter,headerSort:!1,bottomCalc:reportperiod.setcontracthours},{title:'<span style="font-size: 9pt;">Travail</span>',width:75,field:"workhours",hozAlign:"right",headerSort:!1,bottomCalc:reportperiod.setworkhours},{title:'<span style="font-size: 9pt;">Récup</span>',width:75,field:"recuperationhours",hozAlign:"right",headerSort:!1,formatter:periodRecupFormatter,bottomCalc:reportperiod.setrecuperationhours},{title:'<span style="font-size: 9pt;">Congé</span>',width:75,field:"vacancynormal",hozAlign:"right",headerSort:!1,bottomCalc:reportperiod.setvacancynormal},{title:'<span style="font-size: 8pt;">Congé<br/>maladie</span>',width:75,field:"vacancyill",hozAlign:"right",headerSort:!1,bottomCalc:reportperiod.setvacancyill},{title:'<span style="font-size: 9pt;">Total</span>',width:75,field:"totalhours",hozAlign:"right",headerSort:!1,formatter:periodTotalFormatter,bottomCalc:reportperiod.settotalhours},{title:'<span style="font-size: 8pt;">Décompte<br/>reporté</span>',width:75,field:"transferedhours",formatter:nullrFormatter,hozAlign:"right",headerSort:!1,bottomCalc:reportperiod.settransferedhours},{title:'<span style="font-size: 9pt;">h. suppl.<br/>payés</span>',width:70,field:"payedhours",formatter:nullrFormatter,hozAlign:"right",headerSort:!1,headerVertical:!0,bottomCalc:reportperiod.setpayedhours},{title:'<span style="font-size: 8pt;">Décompte<br/>fin POT</span>',width:80,field:"hoursdiff",formatter:nullrFormatter,hozAlign:"right",headerSort:!1,bottomCalc:reportperiod.sethoursdiff},{title:'<span style="font-size: 9pt;">suppl.<br/>+44h</span>',width:50,field:"suppvacancy44hours",formatter:nullrFormatter,hozAlign:"right",headerSort:!1,headerVertical:!0,bottomCalc:reportperiod.setsuppvacancy44hours},{title:'<span style="font-size: 9pt;">suppl.<br/>trav. dim.</span>',width:50,field:"suppvacancysunwork",formatter:nullrFormatter,hozAlign:"right",headerSort:!1,headerVertical:!0,bottomCalc:reportperiod.setsuppvacancysunwork},{title:'<span style="font-size: 8pt;">moy.<br/>hebd.</span>',width:60,field:"avgtotalweekhours",formatter:nullrFormatter,hozAlign:"right",headerSort:!1,bottomCalc:reportperiod.setavgtotalweekhours},{title:'<span style="font-size: 9pt;">validé</span>',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,'<span class="icon-Save"></span>Ajouter','<span class="icon-remove"></span>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("",'<div class="xxlarge">Attendez s.v.p.!</div>'),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?'<span class="text-green">&#10003;</span>':""}},periodRecupFormatter=function(t,e){return null!=t._cell.row.data.transferedhours&&t.getValue()<t._cell.row.data.transferedhours&&(t.getElement().style.color="red"),t.getValue()},intervalformatter=function(t,e){if(null!=t.getValue()){let e=t.getValue().split(":")
-return e[0]+":"+e[1]}return t.getValue()},periodTotalFormatter=function(t,e){return t._cell.row.data.hoursdiff&&t._cell.row.data.hoursdiff.startsWith("-")&&(t.getElement().style.color="red"),t.getValue()},periodAVGFormatter=function(t,e){return t._cell.row.data.hoursdiff&&t._cell.row.data.hoursdiff.startsWith("-")&&(t.getElement().style.color="red"),t.getValue()},nullrFormatter=function(t,e){return t.getElement().style.backgroundColor="grey",""}
diff --git a/app/tmpl/module/periods/staffperiodweeks.min.js b/app/tmpl/module/periods/staffperiodweeks.min.js
deleted file mode 100644 (file)
index 0a475a4..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-let staffperiodweeks={tbl:null,today:null,tbltimetracker:null,currentday:null,dayrefdata:null,parenttbl:null,copy_id:null,weekdata:null,daylimits:null,selectedid:null,vacancytypes:{},recuperationtypes:{},choices:{id_vacancytype:null,id_recuperationtype:null,id_workplan:null},disablesave:!1,initform:function(){staffperiodweeks.choices["id_vacancytype"]=new SlimSelect({select:"#id_vacancytype",showSearch:!1,allowDeselect:!0,deselectLabel:'<span class="text-red">✖</span>',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:'<span class="text-red">✖</span>',onChange:function(){staffperiodweeks.setrecuperationhours()}}),staffperiodweeks.getvacancy(),staffperiodweeks.getrecuperation(),staffperiodweeks.getdefaultdaylimits()
-let e=document.getElementsByClassName("timefield")
-for(let t=0;t<e.length;t++)"vacancyhours"!=e[t].id&&"recuperationhours"!=e[t].id&&"workhours"!=e[t].id||e[t].addEventListener("change",function(){staffperiodweeks.checkdaytime()})
-document.getElementById("id_vacancytype").addEventListener("change",function(e){}),document.getElementById("id_recuperationtype").addEventListener("change",function(e){}),staffperiodweeks.getwptemplates(),document.getElementById("keepvacancy").setAttribute("checked",!0),document.getElementById("keeprecuperation").setAttribute("checked",!0)},inittable:function(){staffperiodweeks.tbl=new Tabulator("#tbl_staffperiodweeks",{height:"calc(100vh - 112px)",layout:"fitDataFill",selectable:!0,selectableRangeMode:"click",rowContext:function(e,t){e.preventDefault()},groupBy:["weekstart"],groupStartOpen:[!0],groupClosedShowCalcs:!0,groupHeader:[function(e,t,a){return staffperiodweeks.weekdata&&staffperiodweeks.weekdata[e]?staffperiodweeks.weekdata[e].calyear+" - "+staffperiodweeks.weekdata[e].calweek+" ("+moment(staffperiodweeks.weekdata[e].weekstart).format("DD.MM.YYYY")+" - "+moment(staffperiodweeks.weekdata[e].weekend).format("DD.MM.YYYY")+") (Contrat: "+staffperiodweeks.weekdata[e].contracthours+"h / "+parseInt(staffperiodweeks.weekdata[e].contractworkdays)+" jours)":e}],columns:[{title:"date",field:"daydate",hozAlign:"right",headerSort:"datetime",formatter:dateFormatter},{title:"heures de<br/>travail",field:"dspworkdata",headerSort:!1,hozAlign:"center",formatter:worktimeFormatter},{title:"heures de<br/>pause",field:"dsppausedata",headerSort:!1,hozAlign:"center",formatter:sizeFormatter},{title:"total<br/>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<br/>contrat",field:"diffhours",hozAlign:"center",formatter:nullFormatter,headerSort:!1,bottomCalc:staffperiodweeks.setweekdiffhours},{title:"moy.<br/>hebd.",field:"avgweekhours",hozAlign:"center",headerSort:!1,formatter:nullFormatter,bottomCalc:staffperiodweeks.setavgweekhours},{title:"heures libres<br/>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="&nbsp;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;"),'<span style="'+r+'">'+staffperiodweeks.weekdata[t[0].weekstart].totalhours+"</span>"}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("",'<div class="xxlarge">Attendez s.v.p.!</div>'),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),i<o&&(i+=1440),t=i-o,I.value=timecalc.MinutesToTime(t)),y.value&&g.value&&(l=timecalc.TimeToMinutes(g.value),n=timecalc.TimeToMinutes(y.value),n<l&&(n+=1440),a=n-l,B.value=timecalc.MinutesToTime(a)),h.value&&v.value&&(c=timecalc.TimeToMinutes(v.value),f=timecalc.TimeToMinutes(h.value),f<c&&(f+=1440),r=f-c,D.value=timecalc.MinutesToTime(r),c<o&&(staffperiodweeks.disablesave=!0,S="les pauses doivent être dans les heures de travail!"),f>i&&(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),m<u&&(m+=1440),s=m-u,Y.value=timecalc.MinutesToTime(s),u<l&&(staffperiodweeks.disablesave=!0,S="les pauses doivent être dans les heures de travail!"),m>n&&(staffperiodweeks.disablesave=!0,S="les pauses doivent être dans les heures de travail!")),!0===staffperiodweeks.disablesave?document.getElementById("staffreportperioddays_errmsg").innerHTML='<div class="panel error-panel">'+S+"</div>":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<e.length;s++)asel.push(e[s].id)
-postData("db.cgi",{schemata:schemata,fn:"clone_staffperiodweekdayhours",copyid:staffperiodweeks.copy_id,id_staff:t[0].id_staff,id_period:t[0].id_reportperiod,pasteids:asel}).then(e=>{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<e.length;s++)asel.push(e[s].id)
-postData("db.cgi",{schemata:schemata,fn:"clean_staffperiodday",id_staff:t[0].id_staff,id_period:t[0].id_reportperiod,ids:asel}).then(e=>{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<e.length;s++)asel.push(e[s].id)
-postData("db.cgi",{schemata:schemata,fn:"replace_staffperiodweekdayhours",id_staff:t[0].id_staff,id_period:t[0].id_reportperiod,id_workplan:a,keepvac:r,keeprec:d,replaceids:asel}).then(e=>{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<a.length;r++)if(a[r].total>"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.today&&(staffperiodweeks.selectedid=e[0].id,postData("db.cgi",{get:"gettrackday",schemata:schemata,id_staff:e[0].id_staff,daydate:e[0].daydate}).then(a=>{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()<e._cell.row.data.mindailyrecuperation&&(e.getElement().style.color="red"),e.getValue()},vacancyformatter=function(e,t){return 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()+"<br/>"+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()+"<br/>"+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")+"<br/>"+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.daydate<staffperiodweeks.today&&null!=e._cell.row.data.dayhours?(e.getElement().style.color="red","00:00"):(e._cell.row.data.daydate<staffperiodweeks.today&&e._cell.row.data.incompletetrack>0&&(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 (file)
index e1bed0e..0000000
+++ /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='<div class="panel error-panel">les champs "date début","heures/semaine","jours/semaine" et "département" sont requis!</div>',!1
-showdataloaddlg("",'<div class="xxlarge">Attendez s.v.p.!</div>'),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,'<span class="icon-Save"></span>Supprimer','<span class="icon-remove"></span>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 (file)
index 55e64d2..0000000
+++ /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,'<span class="icon-Save"></span>Supprimer','<span class="icon-remove"></span>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='<div class="panel red">Tous les champs sauf "date fin" sans requis!</div>'),!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("",'<div class="xxlarge">Attendez s.v.p.!</div>'),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 (file)
index 341a606..0000000
+++ /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:'<span style="font-size: 9pt;">Début</span>',field:"startdate",headerSort:"datetime",formatter:"datetime",formatterParams:{inputFormat:"YYYY-MM-DD",outputFormat:"DD.MM.YYYY",invalidPlaceholder:""}},{title:'<span style="font-size: 9pt;">Fin</span>',field:"enddate",headerSort:"datetime",formatter:"datetime",formatterParams:{inputFormat:"YYYY-MM-DD",outputFormat:"DD.MM.YYYY",invalidPlaceholder:""}},{title:'<span style="font-size: 9pt;">Contrat</span>',field:"contracthours",hozAlign:"right",headerSort:!1},{title:'<span style="font-size: 9pt;">Travail</span>',field:"workhours",hozAlign:"right",headerSort:!1},{title:'<span style="font-size: 9pt;">Récup</span>',field:"recuperationhours",hozAlign:"right",headerSort:!1,formatter:periodRecupFormatter},{title:'<span style="font-size: 9pt;">congé</span>',field:"vacancynormal",hozAlign:"right",headerSort:!1},{title:'<span style="font-size: 9pt;">Congé<br/>maladie</span>',field:"vacancyill",hozAlign:"right",headerSort:!1},{title:'<span style="font-size: 9pt;">Total</span>',field:"totalhours",hozAlign:"right",headerSort:!1,formatter:periodTotalFormatter},{title:'<span style="font-size: 9pt;">décompte<br/>reporté</span>',field:"transferedhours",hozAlign:"right",headerSort:!1},{title:'<span style="font-size: 9pt;">h. suppl.<br/>payés</span>',field:"payedhours",hozAlign:"right",headerSort:!1,headerVertical:!0},{title:'<span style="font-size: 9pt;">décompte<br/>fin POT</span>',field:"hoursdiff",headerSort:!1,hozAlign:"right"},{title:'<span style="font-size: 9pt;">suppl.<br/>+44 h</span>',field:"suppvacancy44hours",hozAlign:"right",headerSort:!1,headerVertical:!0},{title:'<span style="font-size: 9pt;">suppl.<br/>trav dim.</span>',field:"suppvacancysunwork",hozAlign:"right",headerSort:!1,headerVertical:!0},{title:'<span style="font-size: 9pt;">moy.<br/>hebd.</span>',field:"avgtotalweekhours",hozAlign:"right",headerSort:!1,formatter:periodAVGFormatter},{title:'<span style="font-size: 9pt;">validé</span>',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()<t._cell.row.data.transferedhours&&(t.getElement().style.color="red"),t.getValue()},periodTotalFormatter=function(t,e){return t._cell.row.data.hoursdiff.startsWith("-")&&(t.getElement().style.color="red"),t.getValue()},periodAVGFormatter=function(t,e){return t._cell.row.data.hoursdiff.startsWith("-")&&(t.getElement().style.color="red"),t.getValue()}
diff --git a/app/tmpl/module/workplans/workplans.min.js b/app/tmpl/module/workplans/workplans.min.js
deleted file mode 100644 (file)
index ad26a31..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-function initpage(){workplans.inittable()}weekdays=["","lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche"]
-let workplans={choices:{},tbl:null,tblfilter:null,copy_day_id:null,current_view:"workplans",disablesave:!1,payedpauses:null,initform:function(){let e=document.getElementsByClassName("timefield")
-for(let t=0;t<e.length;t++)e[t].addEventListener("change",function(){timecalc.validateTime(this),workplans.checktime(this.id)})},inittable:function(){workplans.tblfilter=new Tabulator("#tbl_workplans",{headerFilterPlaceholder:"filter...",height:"calc(100vh - 56px)",layout:"fitDataFill",selectable:1,rowClick:function(e,t){workplans.viewplan()},rowContext:function(e,t){e.preventDefault()},columns:[{title:"Modèle",field:"workplan",headerSort:!0},{title:"Standard",field:"isdefault",headerSort:!1,formatter:"tickCross",formatterParams:{allowEmpty:!0,allowTruthy:!0,tickElement:"<span class='icon-check'></span>",crossElement:"<span class='icon-remove'></span>"}}]}),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<br/>travail",field:"dspworkdata",headerSort:!1,hozAlign:"center",formatter:sizeFormatter},{title:"heures de<br/>pause",field:"dsppausedata",headerSort:!1,hozAlign:"center",formatter:sizeFormatter},{title:"total<br/>pause",field:"pause",width:80,headerSort:!1},{title:"coupure",field:"interruption",width:90,headerSort:!1},{title:"total<br/>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="&nbsp;"+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,'<span class="icon-Save"></span>Supprimer','<span class="icon-remove"></span>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),s<r&&(s+=1440),t=s-r,_.value=timecalc.MinutesToTime(t)),k.value&&y.value&&(d=timecalc.TimeToMinutes(y.value),i=timecalc.TimeToMinutes(k.value),i<d&&(i+=1440),a=i-d,E.value=timecalc.MinutesToTime(a)),h.value&&v.value&&(u=timecalc.TimeToMinutes(v.value),c=timecalc.TimeToMinutes(h.value),c<u&&(c+=1440),l=c-u,I.value=timecalc.MinutesToTime(l),u<r&&(workplans.disablesave=!0,D="les pauses doivent être dans les heures de travail!"),c>s&&(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),p<m&&(p+=1440),n=p-m,B.value=timecalc.MinutesToTime(n),m<d&&(workplans.disablesave=!0,D="les pauses doivent être dans les heures de travail!"),p>i&&(workplans.disablesave=!0,D="les pauses doivent être dans les heures de travail!")),1==workplans.disablesave?document.getElementById("workplanday_errmsg").innerHTML='<div class="panel error-panel">'+D+"</div>":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()}
index 0b8ecd4..50f18df 100644 (file)
@@ -1,6 +1,6 @@
 {
   "name": "POT",
-  "version": "1.0.0",
+  "version": "1.0.16",
   "description": "plan d'organisation du travail",
   "main": "main.js",
   "scripts": {
index 28b9456..eacb96f 100644 (file)
@@ -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/tmp/update.brasserie_du_theatre.sql b/dev/db/tmp/update.brasserie_du_theatre.sql
new file mode 100644 (file)
index 0000000..e5367de
--- /dev/null
@@ -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 (file)
index 0000000..97887b5
--- /dev/null
@@ -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 (file)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
diff --git a/dev/db/tmp/update.elch.sql b/dev/db/tmp/update.elch.sql
new file mode 100644 (file)
index 0000000..b7efbb2
--- /dev/null
@@ -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 (file)
index 0000000..f8241fd
--- /dev/null
@@ -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 (file)
index 0000000..b6c66ad
--- /dev/null
@@ -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 (file)
index 0000000..8416c62
--- /dev/null
@@ -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 (file)
index 134c0da..0000000
+++ /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 (file)
index 0000000..249f270
--- /dev/null
@@ -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
index f1bd9c3..2748e8f 100644 (file)
@@ -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 (file)
index 0000000..fbaee7b
--- /dev/null
@@ -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
+