From: Kilian Saffran Date: Fri, 20 Nov 2020 14:36:55 +0000 (+0100) Subject: v202011201536 t1.0.22 X-Git-Tag: 1.0.22 X-Git-Url: http://cloud.dks.lu/git/?a=commitdiff_plain;h=22a7a24a8a5a9f3f760aa00c843a865f73bbd179;p=pot_lu.git v202011201536 t1.0.22 --- diff --git a/ChangeLog.md b/ChangeLog.md new file mode 100644 index 00000000..3ccec053 --- /dev/null +++ b/ChangeLog.md @@ -0,0 +1,4 @@ +# Journal des Modifications + +## Version 1.0.21 + - **BugFix**: Correction du calcul des heures contractuelles dans les périodes diff --git a/app/data/schemata/defaultcompany.schema.sql b/app/data/schemata/defaultcompany.schema.sql index 2d0d2aee..14f8131a 100644 --- a/app/data/schemata/defaultcompany.schema.sql +++ b/app/data/schemata/defaultcompany.schema.sql @@ -17,7 +17,9 @@ CREATE TABLE %%NEWSCHEMA%%.reportperiod ( 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 ( @@ -37,7 +39,8 @@ 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 ( @@ -251,29 +254,29 @@ ALTER TABLE ONLY %%NEWSCHEMA%%.workplans 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); diff --git a/app/db.cgi b/app/db.cgi index 1626b5f5..dbc2b868 100644 --- a/app/db.cgi +++ b/app/db.cgi @@ -240,6 +240,7 @@ if (($cgi->request_method() eq "GET") || ($cgi->request_method() eq "POST")){ 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})){ @@ -271,7 +272,7 @@ if (($cgi->request_method() eq "GET") || ($cgi->request_method() eq "POST")){ 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})); diff --git a/app/index.cgi b/app/index.cgi index 61dfee26..d59828b2 100644 --- a/app/index.cgi +++ b/app/index.cgi @@ -32,7 +32,11 @@ if ($vars->{ua} !~ /^POT/){ $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 ""){ diff --git a/app/lib/POT/Company.pm b/app/lib/POT/Company.pm index d2b24179..5d71950e 100644 --- a/app/lib/POT/Company.pm +++ b/app/lib/POT/Company.pm @@ -35,6 +35,9 @@ sub InstallCompanySchema(){ 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."';"; @@ -53,10 +56,14 @@ sub InstallCompanySchema(){ $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; } @@ -126,10 +133,21 @@ sub getSectors(){ 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;"; @@ -175,5 +193,20 @@ sub getVacancyTypes(){ $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 diff --git a/app/lib/dksdb.pm b/app/lib/dksdb.pm index 60cf28bf..0d40d53c 100644 --- a/app/lib/dksdb.pm +++ b/app/lib/dksdb.pm @@ -20,7 +20,7 @@ sub new { 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; } @@ -206,7 +206,13 @@ sub create_ddl_insert(){ 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."'"; @@ -255,11 +261,12 @@ sub create_ddl_update(){ $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); } diff --git a/app/tmpl/index.tt b/app/tmpl/index.tt index 4c19fa1a..f6a71053 100644 --- a/app/tmpl/index.tt +++ b/app/tmpl/index.tt @@ -1,11 +1,11 @@ -[% appversion='1.0.21' %] +[% appversion='1.0.22' %] [% minify = '' %] - POT - Plan d'Organtisation du Travail + POT - Plan d'Organtisation du Travail[% IF mode %][% " - ${mode}" %][% END %]