--- /dev/null
+# Journal des Modifications\r
+\r
+## Version 1.0.21\r
+ - **BugFix**: Correction du calcul des heures contractuelles dans les périodes\r
id_parentreportperiod text,
id text DEFAULT public.getuuid() NOT NULL,
modified timestamp without time zone DEFAULT now(),
- created timestamp without time zone DEFAULT now()
+ created timestamp without time zone DEFAULT now(),
+ periodtype text,
+ subinterval text
);
CREATE TABLE %%NEWSCHEMA%%.staff (
id text DEFAULT public.getuuid() NOT NULL,
isdeleted boolean,
modified timestamp without time zone DEFAULT now(),
- created timestamp without time zone DEFAULT now()
+ created timestamp without time zone DEFAULT now(),
+ istimetrackenabled boolean
);
CREATE TABLE %%NEWSCHEMA%%.staffcontract (
ALTER TABLE ONLY %%NEWSCHEMA%%.worktimes
ADD CONSTRAINT worktimes_pkey PRIMARY KEY (id);
-CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_reportperiod BEFORE UPDATE ON %%NEWSCHEMA%%.reportperiod FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable();
+CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_reportperiod BEFORE UPDATE ON %%NEWSCHEMA%%.reportperiod FOR EACH ROW EXECUTE FUNCTION %%NEWSCHEMA%%.trg_before_upd_schematable();
-CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_staff BEFORE UPDATE ON %%NEWSCHEMA%%.staff FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable();
+CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_staff BEFORE UPDATE ON %%NEWSCHEMA%%.staff FOR EACH ROW EXECUTE FUNCTION %%NEWSCHEMA%%.trg_before_upd_schematable();
-CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_staffcontract BEFORE UPDATE ON %%NEWSCHEMA%%.staffcontract FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable();
+CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_staffcontract BEFORE UPDATE ON %%NEWSCHEMA%%.staffcontract FOR EACH ROW EXECUTE FUNCTION %%NEWSCHEMA%%.trg_before_upd_schematable();
-CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_staffgroups BEFORE UPDATE ON %%NEWSCHEMA%%.staffgroups FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable();
+CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_staffgroups BEFORE UPDATE ON %%NEWSCHEMA%%.staffgroups FOR EACH ROW EXECUTE FUNCTION %%NEWSCHEMA%%.trg_before_upd_schematable();
-CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_staffreportperiod BEFORE UPDATE ON %%NEWSCHEMA%%.staffreportperiod FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable();
+CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_staffreportperiod BEFORE UPDATE ON %%NEWSCHEMA%%.staffreportperiod FOR EACH ROW EXECUTE FUNCTION %%NEWSCHEMA%%.trg_before_upd_schematable();
-CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_staffreportperioddays BEFORE UPDATE ON %%NEWSCHEMA%%.staffreportperioddays FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable();
+CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_staffreportperioddays BEFORE UPDATE ON %%NEWSCHEMA%%.staffreportperioddays FOR EACH ROW EXECUTE FUNCTION %%NEWSCHEMA%%.trg_before_upd_schematable();
-CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_timetracker BEFORE UPDATE ON %%NEWSCHEMA%%.timetracker FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable();
+CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_timetracker BEFORE UPDATE ON %%NEWSCHEMA%%.timetracker FOR EACH ROW EXECUTE FUNCTION %%NEWSCHEMA%%.trg_before_upd_schematable();
-CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_vacancydays BEFORE UPDATE ON %%NEWSCHEMA%%.vacancydays FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable();
+CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_vacancydays BEFORE UPDATE ON %%NEWSCHEMA%%.vacancydays FOR EACH ROW EXECUTE FUNCTION %%NEWSCHEMA%%.trg_before_upd_schematable();
-CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_vacancytypes BEFORE UPDATE ON %%NEWSCHEMA%%.vacancytypes FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable();
+CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_vacancytypes BEFORE UPDATE ON %%NEWSCHEMA%%.vacancytypes FOR EACH ROW EXECUTE FUNCTION %%NEWSCHEMA%%.trg_before_upd_schematable();
-CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_workplandays BEFORE UPDATE ON %%NEWSCHEMA%%.workplandays FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable();
+CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_workplandays BEFORE UPDATE ON %%NEWSCHEMA%%.workplandays FOR EACH ROW EXECUTE FUNCTION %%NEWSCHEMA%%.trg_before_upd_schematable();
-CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_workplans BEFORE UPDATE ON %%NEWSCHEMA%%.workplans FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable();
+CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_workplans BEFORE UPDATE ON %%NEWSCHEMA%%.workplans FOR EACH ROW EXECUTE FUNCTION %%NEWSCHEMA%%.trg_before_upd_schematable();
-CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_worktimes BEFORE UPDATE ON %%NEWSCHEMA%%.worktimes FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable();
+CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_worktimes BEFORE UPDATE ON %%NEWSCHEMA%%.worktimes FOR EACH ROW EXECUTE FUNCTION %%NEWSCHEMA%%.trg_before_upd_schematable();
ALTER TABLE ONLY %%NEWSCHEMA%%.staffcontract
ADD CONSTRAINT staffcontract_fk FOREIGN KEY (id_staff) REFERENCES %%NEWSCHEMA%%.staff(id);
my $type = "upd";
my $table = $p->{table};
delete $p->{table};
+
my $schema = "public";
if (exists($p->{schemata})){$schema = $db->securetext($p->{schemata});}
foreach my $px (keys(%{$p})){
my $cp = POT::Company->new({db => $db});
# print STDERR $p->{fn}.": Company\n";
if ($p->{fn} eq "installschema"){
- my $linkid = $cp->InstallCompanySchema($db->securetext($p->{schemaname}),$db->securetext($p->{datasetname}),$db->securetext($p->{sector}));
+ my $linkid = $cp->InstallCompanySchema($db->securetext($p->{schemaname}),$db->securetext($p->{datasetname}),$db->securetext($p->{sector}),$db->securetext($p->{periodtype}),$db->securetext($p->{reportperiodunit}),$db->securetext($p->{reportperiodlength}),$db->securetext($p->{payedpauses}));
$html->{result}->{link} = $linkid;
}elsif ($p->{fn} eq "getfreeschema"){
$html->{result}->{newschema} = $cp->checkFreeSchema($db->securetext($p->{datasetname}));
$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};
-#$vars->{siteurl} = $cgi->url({-base=>1}).'/'.$vars->{basepath};
+$vars->{siteurl} = $cgi->url({-base=>1});
+#$vars->{mode} = $vars->{siteurl};
+if ($vars->{siteurl} ne "https://app.plandutravail.lu"){
+ $vars->{mode} = $vars->{siteurl};
+}
if ($vars->{filepath} ne ""){
my $datasetname = shift;
my $sector = shift;
my $periodtype = shift;
+ my $reportperiodunit = shift;
+ my $reportperiodlength = shift;
+ my $payedpauses = shift;
my $companyid = "";
#$self->{db}->securetext($p->{schemaname})
my $schemasql = "select count(*) as cnt from information_schema.schemata where schema_name='".$schemaname."';";
$self->{db}->exec("INSERT INTO ".$schemaname.".staffgroups (id,groupname) VALUES ('cuisine','Cuisine');");
$self->{db}->exec("INSERT INTO ".$schemaname.".staffgroups (id,groupname) VALUES ('reception','Reception');");
$self->{db}->exec("INSERT INTO ".$schemaname.".staffgroups (id,groupname) VALUES ('administration','Administration');");
+ } else {
+ $self->{db}->exec("INSERT INTO ".$schemaname.".staffgroups (id,groupname,isdefault) VALUES ('administration','Administration',true);");
}
$self->{db}->exec("INSERT INTO ".$schemaname.".vacancytypes (vacancyname, isworktime, isfreetime, color, legend) SELECT vacancyname, isworktime, isfreetime, color, legend FROM public.vacancytypes;");
$self->{db}->exec("INSERT INTO ".$schemaname.".vacancydays (daydate, vacancyname) SELECT daydate, vacancyname FROM public.vacancydays where date_part('year',daydate)::int4 >= date_part('year',CURRENT_DATE)::int4;");
- #$self->{db}->exec("INSERT INTO ")
+ my $cmpupd = "UPDATE companies set company='".$datasetname."',periodtypes='".$periodtype."', subinterval='1 ".$reportperiodunit."', sector='".$sector."',reportperiodlength='".$reportperiodlength."',reportperiodunit='".$reportperiodunit."',payedpauses=".$self->{db}->value($payedpauses)." WHERE id='".$companyid."';";
+ $self->{db}->exec($cmpupd);
+ $self->updateSchemaWorktimes($schemaname,$sector,$periodtype);
}
return $companyid;
}
sub getSectorData(){
my $self = shift;
my $schema = shift;
- my $sql = "SELECT id, sector, startdate, enddate, defaultdayhours, maxdayhours, defaultweekhours, maxweekhours, maxinterruptionhours, isdefault, mindailyrecuperation, periodtype, maxhourspercents FROM ".$schema.".sectorworktime";
+ my $sql = "SELECT * FROM ".$schema.".sectorworktime";
return $self->{db}->querysorted($sql);
}
+#TODO: add button for adding a year
+sub addSectorWorktimeYear(){
+ my $self = shift;
+ my $sql = "INSERT INTO public.sectorworktime
+(id, sector, startdate, enddate, defaultdayhours, maxdayhours, defaultweekhours, maxweekhours, maxinterruptionhours, isdefault, mindailyrecuperation, maxhourspercents, periodtype, description)
+SELECT getuuid() as id, sector, date(startdate + interval '1 year') as startdate, date(enddate + interval '1 year') as enddate , defaultdayhours, maxdayhours, defaultweekhours, maxweekhours, maxinterruptionhours, isdefault, mindailyrecuperation, maxhourspercents, periodtype, description
+FROM public.sectorworktime where startdate is not null and date_part('year',startdate) in (select max(date_part('year',startdate)) from public.sectorworktime);";
+ $self->{db}->exec($sql);
+ return 1;
+}
+
sub getCompanySize(){
my $self = shift;
my $sql = "SELECT DISTINCT sectorworktime.periodtype FROM public.sectorworktime;";
$self->{db}->querysorted($sql);
}
+#TODO: add button for sync to schemas
+sub updateSchemaWorktimes(){
+ my $self = shift;
+ my $schema = shift;
+ my $sector = shift;
+ my $periodtype= shift;
+ my $updsql = "INSERT INTO ".$schema.".worktimes
+(startdate, enddate, defaultdayhours, maxdayhours, defaultweekhours, maxweekhours, maxinterruptionhours, isdefault, id, mindailyrecuperation, maxhourspercents)
+select startdate, enddate, defaultdayhours, maxdayhours, defaultweekhours, maxweekhours, maxinterruptionhours, isdefault, id, mindailyrecuperation, maxhourspercents from public.sectorworktime gwk
+where sector='".$sector."' and periodtype='".$periodtype."' and (startdate is null or date_part('year',startdate)>=date_part('year',current_date))
+on conflict on constraint worktimes_pkey
+do update set
+startdate=excluded.startdate, enddate=excluded.enddate, defaultdayhours=excluded.defaultdayhours, maxdayhours=excluded.maxdayhours, defaultweekhours=excluded.defaultweekhours, maxweekhours=excluded.maxweekhours, maxinterruptionhours=excluded.maxinterruptionhours, isdefault=excluded.isdefault, mindailyrecuperation=excluded.mindailyrecuperation, maxhourspercents=excluded.maxhourspercents;";
+}
+
1;
\ No newline at end of file
my $class = shift;
my $p = shift;
my $self = bless {}, $class;
- $self->{debug} = 0;
+ $self->{debug} = 1;
$self->{dbh} = DBI->connect($p->{dsn},$p->{dbuser},$p->{dbpassword},{PrintError=>1,RaiseError=>1,AutoCommit=>1}) or return "query Connection Error!".$!;
return $self;
}
my $v = $fields->{$tb}->{$c};
$v =~ s/'/''/g;
push (@sqlcol,$c);
- if ($v eq ''){
+ if (ref $v eq "ARRAY"){
+ $v = "'".JSON::PP::encode_json($v)."'";
+ if ($v eq "'[]'"){
+ $v= 'null';
+ }
+ }
+ elsif ($v eq ''){
$v = 'null';
} else {
$v = "'".$v."'";
$c = 'jsonb_set(to_jsonb('.$jp[0].'),\'{"'.$jp[1].'"}\',\''.$v.'\')::json';
push (@sqlupd,$jp[0]."=".$c);
}else {
- if ($v eq ''){
- $v = 'null';
- } else {
- $v = "'".$v."'";
- }
+ if (ref $v eq "ARRAY"){
+ $v = "'".JSON::PP::encode_json($v)."'";
+ if ($v eq "'[]'"){$v= 'null';}
+ }
+ elsif ($v eq ''){$v = 'null';}
+ else {$v = "'".$v."'";}
push (@sqlupd,$c."=".$v);
}
-[% appversion='1.0.21' %]
+[% appversion='1.0.22' %]
[% minify = '' %]
<!DOCTYPE html>
<html lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
- <title>POT - Plan d'Organtisation du Travail</title>
+ <title>POT - Plan d'Organtisation du Travail[% IF mode %][% " - ${mode}" %][% END %]</title>
<meta name="language" content="fr">
<meta name="robots" content="noindex,nofollow">
<!-- <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
- <title>POT - Plan d'organisation du travail</title>
+ <title>POT - Plan d'organisation du travail [% IF mode %][% " - ${mode}" %][% END %]</title>
<meta name="language" content="fr">
<meta name="robots" content="noindex,nofollow">
<link rel="apple-touch-icon" sizes="57x57" href="img/favicon/apple-icon-57x57.png?v=[% appversion %]">
currentview = null;
let periodunits = [{"value":"week","text":"Semaine(s)"},{"value":"month","text":"Mois"}];
-let periodtypes = [{"value":"1-14","text":"1-14"},{"value":"15-49","text":"15-49"},{"value":">=50","text":">=50"}];
+let periodtypes = [{"value":"","text":"pas défini"},{"value":"1-14","text":"1-14"},{"value":"15-49","text":"15-49"},{"value":">=50","text":">=50"}];
function initpage(){
companies.inittable();
staffgroups.inittable();
<h2>DataSet</h2>
</header>
<div class="container">
+ <div id="datasetmsg"></div>
<form id="frm_dataset">
<div class="row" style="margin-top: 5px;">
<div class="row">
<div class="cell" style="width: 300px;">
+ <label for="newdataset" class="label">Nom de l'unité/entreprise</label>
<input type="text" class="input data_dataset " id="newdataset" data-column="newdataset" data-table="dataset" data-id="" name="dataset_newdataset" value="" onblur="schemadataset.checkschema()"/>
- <label for="newdataset" class="label">Nom de l'unité/entreprise</label>
+
</div>
</div>
<div class="row">
<div class="cell" style="width: 300px;">
+ <label for="newschemata" class="label">Schemata (base de données)</label>
<input type="text" class="input data_dataset readonly " id="newschemata" data-column="newschemata" data-table="dataset" data-id="" name="dataset_newschemata" value="" readonly />
- <label for="newschemata" class="label">Schemata (base de données)</label>
+
</div>
</div>
<div class="row">
<div class="cell" style="width: 150px;">
+ <label for="newsector" class="label ">secteur</label>
<select class="select data_dataset " id="newsector" data-column="newsector" data-table="dataset" data-id="" value="" name="dataset_newsector" >
</select>
- <label for="newsector" class="label ">secteur</label>
+
</div>
<div class="cell" style="width: 150px;">
+ <label for="periodtype" class="label ">Nombre de salariés</label>
<select class="select data_dataset " id="periodtype" data-column="periodtype" data-table="dataset" data-id="" value="" name="dataset_periodtype" >
</select>
- <label for="periodtype" class="label ">Nombre de salariés</label>
+
+ </div>
+ </div>
+
+ <div class="row">
+ <div class="cell container" style="width: 60px;">
+ <label for="dataset_reportperiodlength" class="label">Durée</label>
+ <input type="number" class="input text-align-right right data_dataset " id="dataset_reportperiodlength" pattern="" name="dataset_reportperiodlength" data-column="reportperiodlength" data-table="dataset" data-id="" value="" min="1" max="16" step="1" />
+
+ </div>
+ <div class="cell container" style="width: 120px;">
+ <label for="dataset_reportperiodunit" class="label ">Unité</label>
+ <select class="select data_dataset " id="dataset_reportperiodunit" data-column="reportperiodunit" data-table="dataset" data-id="" value="" name="dataset_reportperiodunit" >
+ </select>
+
+ </div>
+ <div class="cell container" style="width: 50px;">
+ <label for="dataset_payedpauses" class="label ">Pauses payées</label>
+ <select class="select data_dataset " id="dataset_payedpauses" data-column="payedpauses" data-table="dataset" data-id="" value="" name="dataset_payedpauses" >
+ <option value="">Non</option>
+ <option value="1">Oui</option>
+ </select>
+
</div>
</div>
</form>
<div class="container">
<div id="usermsg"></div>
<form id="frm_users" name="frm_users">
- <input type="hidden" class="data_users" id="id_users" name="ident_users_id_users" value="">
+ <input type="hidden" class="data_users" id="id_users" name="ident_users_id_users" value="" data-column="id" data-table="users">
<div class="row">
<div class="cell" style="width: 300px;">
- <input type="text" class="input data_users" id="username" data-column="username" data-table="users" data-id="" name="users_username" value="" />
+ <input type="text" class="input data_users" id="username" data-column="username" data-table="users" data-id="" name="users_username" value=""/>
<label for="users_username" class="label">Login</label>
</div>
<div class="cell" style="margin-left: 10px;width: 50px;">
let schemadataset= {
- choices: {"newsector":null,"periodtype":null},
+ choices: {"newsector":null,"periodtype":null,"dataset_reportperiodunit":null,"dataset_payedpauses":null},
initform: function(){
schemadataset.choices["newsector"] = new SlimSelect({
select: "#newsector",
select: "#periodtype",
showSearch: false
});
+ schemadataset.choices["dataset_reportperiodunit"] = new SlimSelect({
+ select: "#dataset_reportperiodunit",
+ showSearch: false
+ });
+ schemadataset.choices["dataset_payedpauses"] = new SlimSelect({
+ select: "#dataset_payedpauses",
+ showSearch: false
+ });
schemadataset.getsectors();
schemadataset.getperiodtypes();
+ dataform.fillselectlist(schemadataset.choices["dataset_reportperiodunit"],periodunits,'value','text');
},
add: function(){
dataform.cleanform2("dataset",{});
});
},
save: function(){
+ let newdata = {"fn":"installschema"};
+ newdata["schemaname"] = document.getElementById("newschemata").value;
+ newdata["datasetname"] = document.getElementById("newdataset").value;
+ newdata["sector"] = schemadataset.choices["newsector"].selected();
+ newdata["periodtype"] = schemadataset.choices["periodtype"].selected();
+ newdata["reportperiodunit"] = schemadataset.choices["dataset_reportperiodunit"].selected();
+ newdata["reportperiodlength"] = document.getElementById("dataset_reportperiodlength").value;
+ newdata["payedpauses"] = schemadataset.choices["dataset_payedpauses"].selected();
+ //console.log("newdatasetdata",newdata);
+ for (var n in newdata) {
+ if ((n != "payedpauses") && ((newdata[n] == null) || (newdata[n] == "") )){
+ document.getElementById("datasetmsg").innerHTML='<div class="panel error-panel">tous les champs sont requis!</div>';
+ return false;
+ }
+ }
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(data => {
+ postData("db.cgi",newdata).then(data => {
companies.gettbldata();
closedataloaddlg();
}).catch(e => {
companies.gettbldata();
closedataloaddlg();
});
+ return false;
},
getsectors: function(){
postData("db.cgi",{"get":"sectors","schemata":"public"}).then(data => {
columns: [
{ title: "secteur", field: "sector",headerFilter:"input",headerSort: true},
{ title: "nbr. salariés", field: "periodtype",headerFilter:"input",headerSort: true},
- { title: "début", field: "startdate",headerSort: true,formatter:"datetime",formatterParams:{inputFormat:"YYYY-MM-DD",outputFormat:"DD.MM.YYYY",invalidPlaceholder:""}},
- { title: "fin", field: "enddate",headerSort: true,formatter:"datetime",formatterParams:{inputFormat:"YYYY-MM-DD",outputFormat:"DD.MM.YYYY",invalidPlaceholder:""}},
+ { title: "début", field: "startdate",headerFilter:"input",headerSort: true,sorter:"date", sorterParams:{format:"YYYY-MM-DD",alignEmptyValues:"bottom"},formatter:"datetime",formatterParams:{inputFormat:"YYYY-MM-DD",outputFormat:"DD.MM.YYYY",invalidPlaceholder:""}},
+ { title: "fin", field: "enddate",headerFilter:"input",headerSort: true,sorter:"date", sorterParams:{format:"YYYY-MM-DD",alignEmptyValues:"bottom"},formatter:"datetime",formatterParams:{inputFormat:"YYYY-MM-DD",outputFormat:"DD.MM.YYYY",invalidPlaceholder:""}},
{ title: "max heures/jour", field: "maxdayhours",headerSort: false,formatter:timeFormatter},
{ title: "H/Sem.", field: "defaultweekhours",headerSort: false,formatter:timeFormatter},
{ title: "max heures/semaine", field: "maxweekhours",headerSort: false,formatter:timeFormatter},
{ title: "max coupure", field: "maxinterruptionhours",headerSort: false,formatter:timeFormatter},
{ title: "min h. libres<br/>quotidienne", field: "mindailyrecuperation",headerSort: false,formatter:timeFormatter},
{ title: "standard", field: "isdefault",headerSort: false,formatter:"tickCross",hozAlign:"center",
- formatterParams:{allowEmpty:true,allowTruthy:true,tickElement:'<span>✔</span>'}}
+ formatterParams:{allowEmpty:true,allowTruthy:true,tickElement:'<span>✔</span>'}},
+ { title: "Description", field:"description" ,headerSort: false},
]
});
sector.gettbldata();
},
add: function(){
document.getElementById("username").disabled = false;
+ document.getElementById("username").classList.remove("readonly");
+ users.tbl.selectRow();
+ let udata = users.tbl.getSelectedData();
+ if (udata[0]){
+ users.tbl.deselectRow(udata[0]["id"]);
+ }
dataform.cleanform2("users",users.choices);
users.getUserStaffGroups();
app.viewdialog("users");
edit: function(){
let udata = users.tbl.getSelectedData();
if (udata[0]) {
+ udata[0]["id_users"]=udata[0]["id"];
+
+ console.log("userdata edit",udata);
document.getElementById("username").disabled = true;
+ document.getElementById("username").classList.add("readonly");
users.getUserStaffGroups();
dataform.cleanform2("users",users.choices);
postData("db.cgi",{ "get": "user","id": udata[0].id}).then(data => {
flds["schemata"]="public";
flds["fn"] ="saveform";
flds["table"]="users";
- flds["ident_users_id"] = flds["ident_users_id_users"];
+ let udata = users.tbl.getSelectedData();
+ if (udata[0]){
+ flds["ident_users_id"] = udata[0]["id"];
+ }
+ delete flds["users_id"];
delete flds["null"];
delete flds["ident_users_id_users"];
- //console.log(flds);
+ console.log("userdata",flds);
postData("db.cgi",flds).then(data2 => {
+ console.log("data returned",data2);
users.gettbldata();
document.getElementById('dlg_users').style.display='none';
dataform.formsaved(null);
<div class="bar">
<a class="bar-item bodybtn" href="[% abspath %]company.html"><span class="icon icon-shop" style="font-size: 24px;"/></span>Entreprise</a>
<a class="bar-item bodybtn" href="[% abspath %]workplans.html"><span class="icon icon-template" style="font-size: 24px;"/></span>Modèles hebdomaires</a>
- <a class="bar-item bodybtn right" target="_blank" href="[% abspath %]/cgv/cgv.pdf"><span class="icon icon-license" style="font-size: 24px;"/></span>Conditions générales</a>
+ <a class="bar-item bodybtn right" target="_blank" href="[% abspath %]/cgv/cgv.pdf"><span class="icon icon-aggrement" style="font-size: 24px;"/></span>Conditions générales</a>
</div>
</div>
[% IF (session.usergroup == 'admin') %]
{
"name": "POT",
- "version": "1.0.21",
+ "version": "1.0.22",
"description": "plan d'organisation du travail",
"main": "main.js",
"scripts": {
if (-not (Test-Path $TMPDIR)) {
New-Item -ItemType directory -Path $TMPDIR
}
-$PROJECTDIR= Split-Path -Path PSScriptRoot
+$PROJECTDIR= Split-Path -Path $PSScriptRoot
$APPDIR= $PROJECTDIR +"/app"
$WEBDIR= $PROJECTDIR +"/website"
\ No newline at end of file
id_parentreportperiod text,
id text DEFAULT public.getuuid() NOT NULL,
modified timestamp without time zone DEFAULT now(),
- created timestamp without time zone DEFAULT now()
+ created timestamp without time zone DEFAULT now(),
+ periodtype text,
+ subinterval text
);
CREATE TABLE %%NEWSCHEMA%%.staff (
id text DEFAULT public.getuuid() NOT NULL,
isdeleted boolean,
modified timestamp without time zone DEFAULT now(),
- created timestamp without time zone DEFAULT now()
+ created timestamp without time zone DEFAULT now(),
+ istimetrackenabled boolean
);
CREATE TABLE %%NEWSCHEMA%%.staffcontract (
ALTER TABLE ONLY %%NEWSCHEMA%%.worktimes
ADD CONSTRAINT worktimes_pkey PRIMARY KEY (id);
-CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_reportperiod BEFORE UPDATE ON %%NEWSCHEMA%%.reportperiod FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable();
+CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_reportperiod BEFORE UPDATE ON %%NEWSCHEMA%%.reportperiod FOR EACH ROW EXECUTE FUNCTION %%NEWSCHEMA%%.trg_before_upd_schematable();
-CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_staff BEFORE UPDATE ON %%NEWSCHEMA%%.staff FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable();
+CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_staff BEFORE UPDATE ON %%NEWSCHEMA%%.staff FOR EACH ROW EXECUTE FUNCTION %%NEWSCHEMA%%.trg_before_upd_schematable();
-CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_staffcontract BEFORE UPDATE ON %%NEWSCHEMA%%.staffcontract FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable();
+CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_staffcontract BEFORE UPDATE ON %%NEWSCHEMA%%.staffcontract FOR EACH ROW EXECUTE FUNCTION %%NEWSCHEMA%%.trg_before_upd_schematable();
-CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_staffgroups BEFORE UPDATE ON %%NEWSCHEMA%%.staffgroups FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable();
+CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_staffgroups BEFORE UPDATE ON %%NEWSCHEMA%%.staffgroups FOR EACH ROW EXECUTE FUNCTION %%NEWSCHEMA%%.trg_before_upd_schematable();
-CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_staffreportperiod BEFORE UPDATE ON %%NEWSCHEMA%%.staffreportperiod FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable();
+CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_staffreportperiod BEFORE UPDATE ON %%NEWSCHEMA%%.staffreportperiod FOR EACH ROW EXECUTE FUNCTION %%NEWSCHEMA%%.trg_before_upd_schematable();
-CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_staffreportperioddays BEFORE UPDATE ON %%NEWSCHEMA%%.staffreportperioddays FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable();
+CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_staffreportperioddays BEFORE UPDATE ON %%NEWSCHEMA%%.staffreportperioddays FOR EACH ROW EXECUTE FUNCTION %%NEWSCHEMA%%.trg_before_upd_schematable();
-CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_timetracker BEFORE UPDATE ON %%NEWSCHEMA%%.timetracker FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable();
+CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_timetracker BEFORE UPDATE ON %%NEWSCHEMA%%.timetracker FOR EACH ROW EXECUTE FUNCTION %%NEWSCHEMA%%.trg_before_upd_schematable();
-CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_vacancydays BEFORE UPDATE ON %%NEWSCHEMA%%.vacancydays FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable();
+CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_vacancydays BEFORE UPDATE ON %%NEWSCHEMA%%.vacancydays FOR EACH ROW EXECUTE FUNCTION %%NEWSCHEMA%%.trg_before_upd_schematable();
-CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_vacancytypes BEFORE UPDATE ON %%NEWSCHEMA%%.vacancytypes FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable();
+CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_vacancytypes BEFORE UPDATE ON %%NEWSCHEMA%%.vacancytypes FOR EACH ROW EXECUTE FUNCTION %%NEWSCHEMA%%.trg_before_upd_schematable();
-CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_workplandays BEFORE UPDATE ON %%NEWSCHEMA%%.workplandays FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable();
+CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_workplandays BEFORE UPDATE ON %%NEWSCHEMA%%.workplandays FOR EACH ROW EXECUTE FUNCTION %%NEWSCHEMA%%.trg_before_upd_schematable();
-CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_workplans BEFORE UPDATE ON %%NEWSCHEMA%%.workplans FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable();
+CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_workplans BEFORE UPDATE ON %%NEWSCHEMA%%.workplans FOR EACH ROW EXECUTE FUNCTION %%NEWSCHEMA%%.trg_before_upd_schematable();
-CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_worktimes BEFORE UPDATE ON %%NEWSCHEMA%%.worktimes FOR EACH ROW EXECUTE PROCEDURE %%NEWSCHEMA%%.trg_before_upd_schematable();
+CREATE TRIGGER trg_%%NEWSCHEMA%%_before_upd_worktimes BEFORE UPDATE ON %%NEWSCHEMA%%.worktimes FOR EACH ROW EXECUTE FUNCTION %%NEWSCHEMA%%.trg_before_upd_schematable();
ALTER TABLE ONLY %%NEWSCHEMA%%.staffcontract
ADD CONSTRAINT staffcontract_fk FOREIGN KEY (id_staff) REFERENCES %%NEWSCHEMA%%.staff(id);
# #export PGPASSWORD="r2btTTRfuJz4whez"
# #echo ${CALLDIR}
-echo "export ${DBDEVHOST} ${DBNAME} ${DBSCHEMA}"
-export PGPASSWORD="dMY8xGB6cBLzrDGE"
-pg_dump -h ${DBDEVHOST} -U ${DBUSER} -n ${DBSCHEMA} -w -O -x -s ${DBNAME} > ${CALLDIR}'/db/'${DBNAME}'.'${DBSCHEMA}'.pg.schema.sql'
-cat ${CALLDIR}"/db/"${DBNAME}"."${DBSCHEMA}".pg.schema.sql" | \
+# echo "export ${DBDEVHOST} ${DBNAME} ${DBSCHEMA}"
+# export PGPASSWORD="dMY8xGB6cBLzrDGE"
+
+#pg_dump -h ${DBDEVHOST} -U ${DBUSER} -n ${DBSCHEMA} -w -O -x -s ${DBNAME} > ${CALLDIR}'/db/'${DBNAME}'.'${DBSCHEMA}'.pg.schema.sql'
+cat ${CALLDIR}"/db/dev/"${DBNAME}"."${DBSCHEMA}".pg.schema.sql" | \
grep -v -e "^--" | \
grep -v -e "^SET" | \
grep -v "AS integer" | \
--- /dev/null
+$PROJECTDIR= Split-Path -Path $PSScriptRoot\r
+Write-Host ($PROJECTDIR)\r
+$apppath = $PROJECTDIR + "/desktopapp"\r
+#$reppath = $PROJECTDIR\r
+Set-Location -Path $PROJECTDIR\r
+#$gitargs=@('describe','--tags') \r
+#$lasttag=`git.exe `\r
+$p=Start-Process -NoNewWindow -FilePath "C:\Program Files\Git\bin\git.exe" -ArgumentList "describe","--tags" -PassThru -Wait -RedirectStandardOutput stdout.txt\r
+$lasttag=Get-Content -Path "stdout.txt"\r
+#$lasttag=$process.StandardOutput.ReadToEnd()\r
+#$process.WaitForExit()\r
+Write-Host $lasttag\r
+Set-Location -Path $PSScriptRoot\r
+Set-Location -Path $apppath\r
+# #& npm run package-win32\r
+ & npm run package-win64\r
+$sd = "/DMySourceDir=" + $PROJECTDIR\r
+$file = $PROJECTDIR + "\\install\\windows\\pot_setup_64bit.iss"\r
+$setupargs= @("/DMyAppVersion=1.0.0",$sd,"/DMySetupName=POT_Setup_64bit.exe",$file) \r
+Start-Process -NoNewWindow -FilePath "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" -PassThru -Wait -ArgumentList $setupargs\r
+# $outputfile=$PROJECTDIR + "/website/downloads/POT_Setup_64bit.exe"\r
+# Start-Process -NoNewWindow -FilePath "C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x64\signtool.exe" -ArgumentList "sign","/a","/tr","http://rfc3161timestamp.globalsign.com/advanced","/td SHA256", $outputfile\r
#rm $tag.zip
#cd "$tag"
source ${CALLDIR}"/../dev/conf.sh"
-REMTAG=$(ssh -p ${SSHPORT} ${SSHUSER}@${SSHHOST} "cd '${REMOTEAPPFOLDER}' && grep 'appversion =' tmpl/index.tt | tr -cd '[:digit:].'")
+#echo "ssh -p ${SSHPORT} ${SSHUSER}@${SSHHOST} \"cd '${REMOTEAPPFOLDER}' && grep 'appversion=' tmpl/index.tt | tr -cd '[:digit:].'\""
+REMTAG=$(ssh -p ${SSHPORT} ${SSHUSER}@${SSHHOST} "cd '${REMOTEAPPFOLDER}' && grep 'appversion=' tmpl/index.tt | tr -cd '[:digit:].'")
echo "REMOTE TAG is "${REMTAG}
#if exists remote tag
echo "remote tag exists? ->${REMTAGEXISTS}<-"
if [ "${REMTAGEXISTS}" != "" ]
then
- git archive -o ${PROJECTDIR}"/release/${REMOTETAG}.zip" --prefix=${REMOTETAG}"/" ${REMOTETAG}:app
- cd ${PROJECTDIR}"/release"
- unzip -q ${REMOTETAG}.zip
+ #cd ${PROJECTDIR}
+ #git archive -o ${PROJECTDIR}"/release/${REMTAG}.zip" --prefix=${REMTAG}"/" ${REMTAG}:app
+ cd ${PROJECTDIR}"/release/"$tag
+ #unzip -q ${REMTAG}.zip
+ echo "get files to update"
+ INSFILES=`git diff ${REMTAGEXISTS} $tag --name-status --no-renames | grep -e "^[A|M]" | awk -F "\t" '{ print $2 }' | grep -e "^app/" | sed -e 's/^app\///g'`
+ echo $INSFILES
+ #diff -qr ${REMTAG} $tag
#rm ${REMOTETAG}.zip
#cd ${REMOTETAG}
else
\r
#define MyAppName "POT - Plan d'Organisation du Travail"\r
#define MyAppVersion "1.0.0"\r
-#define MyAppPublisher "POT s.à r.l."\r
+#define MyAppPublisher "POT s.� r.l."\r
#define MyAppURL "http://pot.dks.lu/"\r
#define MyAppExeName "pot.exe"\r
-#define MyOutputDir "C:\Users\kilian\Workspace\pot_lu\website\downloads"\r
-#define MySourceDir "C:\Users\kilian\Workspace\pot_lu"\r
+#define MyOutputDir "C:\Users\ksaff\Workspace\pot_lu\website\downloads"\r
+#define MySourceDir "C:\Users\ksaff\Workspace\pot_lu"\r
#define MySetupName "POT_Setup_64bit"\r
[Setup]\r
; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.\r