COALESCE(st.surname || ' '::text, ''::text) || COALESCE(st.prename, ''::text) AS staffname,
st.id_staffgroup, sgr.groupname,
to_char(srp.payedhours, 'HH24:MI'::text) AS payedhours,
- to_char(srp.transferedhourscalc, 'HH24:MI'::text) AS transferedhourscalc,
- to_char(srp.transferedhours, 'HH24:MI'::text) AS transferedhours,
+ case when left(to_char(srp.transferedhourscalc, 'HH24:MI'),1) = '-' then '-' || replace(to_char(srp.transferedhourscalc, 'HH24:MI'),'-','') else to_char(srp.transferedhourscalc, 'HH24:MI') end as transferedhourscalc,
+ case when left(to_char(srp.transferedhours, 'HH24:MI'),1) = '-' then '-' || replace(to_char(srp.transferedhours, 'HH24:MI'),'-','') else to_char(srp.transferedhours, 'HH24:MI') end as transferedhours,
case when suppvacancysunwork is not null and suppvacancysunwork > 0 then '+' || suppvacancysunwork else null end as suppvacancysunwork,
case when suppvacancy44hours is not null and suppvacancy44hours > 0 then '+' || suppvacancy44hours else null end as suppvacancy44hours
- ,itmcontracthours,maxdays
+ ,itmcontracthours,maxdays,
+ to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours
FROM ".$schema.".staffreportperiod srp
LEFT JOIN ".$schema.".staff st ON srp.id_staff = st.id
LEFT JOIN ".$schema.".reportperiod rp ON srp.id_reportperiod = rp.id
ORDER BY sr.id_staff, sr.daydate) xx_1) yy order by yy.daydate,weekstart
) aa group by aa.weekstart order by weekstart
) bb)cc;";
-
+
my $status44count = $self->{db}->query($sql44);
+
+ my $sqlavghours = "select id_staff,avg(avgtotalhours) as avgtotalhours from (
+ select ws.weekstart, ws.id_staff,
+ AVG(ws.totalhours) over (order by ws.weekstart) as avgtotalhours
+ from (
+ SELECT weekstart, id_staff,
+sum(CASE WHEN srpd.dayhours IS NULL THEN '00:00:00'::interval ELSE srpd.dayhours::interval END) AS totalhours
+ FROM (select *,date(date_trunc('week', daydate)) AS weekstart,
+ date(date_trunc('week', daydate) + interval '6 days') AS weekend,
+ date_part('week', daydate) AS calweek,
+ date_part('isoyear', daydate) AS calyear from ".$schema.".staffreportperioddays
+ --where id_staff= '".$id_staff."' and daydate between date(date_trunc('week',date('".$prd->{startdate}."'))) and date(date_trunc('week',date('".$prd->{enddate}."')) + interval '6 days')
+ where id_staff= '".$id_staff."' and daydate between date('".$prd->{startdate}."') and date('".$prd->{enddate}."')
+ ) srpd GROUP BY srpd.weekstart,srpd.id_staff
+ ORDER BY weekstart) ws) wsavg group by id_staff;";
+ my $whavg = $self->{db}->query($sqlavghours);
#print STDERR "SQLSun:".$sqlsun."\n";
my $sql = "select id from ".$schema.".staffreportperioddays where id_staff='".$id_staff."' and daydate between date(date_trunc('week',date('".$prd->{startdate}."'))) and date(date_trunc('week',date('".$prd->{enddate}."')) + interval '6 days')";
$self->updatePeriodDaySums($schema,$sql);
--contracthours=csp.contracthours,
workhours=csp.workhours,
vacancyhours=csp.vacancyhours,
+ vacancyill=csp.vacancyill,
+ vacancynormal=csp.vacancynormal,
totalhours=csp.totalhours,
recuperationhours=csp.recuperationhours,";
#if ((defined($statussuncount) && $staffprdprev->{prevperiod} ne '')){
$sql .= "suppvacancy44hours=".(($status44count->{plusdays} gt "0")?$status44count->{plusdays}:'null').",";
$sql .= "status44hcount=".(($status44count->{weeksrest} eq "")?'null':$status44count->{weeksrest}).",";
$sql .= "last44date=".(($status44count->{maxdate} eq "")?'null':"date('".$status44count->{maxdate}."')").",";
+ $sql .= "avgtotalweekhours='".$whavg->{avgtotalhours}."'::interval,";
$sql .= "hoursdiff=csp.diffhours
- FROM(
- select contracthours,workhours,vacancyhours,totalhours,recuperationhours, totalhours-contracthours-payedhours+transferedhourscalc as diffhours,id from (
+ FROM (
+ select contracthours,workhours,vacancyhours,totalhours,recuperationhours, totalhours-contracthours-payedhours+transferedhourscalc as diffhours,id,vacancyill,vacancynormal from (
select dp.id,
sum(pd.workhours) as workhours,
sum(pd.dayhours) as totalhours,
sum(coalesce(pd.vacancyhours,'00:00:00'::time)) as vacancyhours,
+ sum(case when pd.id_vacancytype = 'ill' and pd.vacancyhours > '00:00:00'::time then coalesce(pd.vacancyhours,'00:00:00'::time) else '00:00:00'::time end) as vacancyill,
+ sum(case when pd.id_vacancytype != 'ill' and pd.vacancyhours > '00:00:00'::time then coalesce(pd.vacancyhours,'00:00:00'::time) else '00:00:00'::time end) as vacancynormal,
sum(coalesce(pd.recuperationhours,'00:00:00'::time)) as recuperationhours,
- sum(coalesce(pd.contracthours,'00:00:00'::time)) as contracthours,
+ coalesce(dp.contracthours,'00:00:00'::interval) as contracthours,
coalesce(dp.payedhours,'00:00:00'::interval) as payedhours,
coalesce(dp.transferedhourscalc,'00:00:00'::interval) as transferedhourscalc
from ".$schema.".staffreportperioddays pd
# and startdate < date('".$prddata->{enddate}."') and enddate is null or enddate > date('".$prddata->{startdate}."');";
my $defdays = $self->{db}->querysorted($contractsql);
-
+ my $firstday=$defdays->{0}->{startdate};
+ my $kl = keys(%{$defdays})-1;
+ my $lastday=$defdays->{$kl}->{enddate};
+ my $sql = "select date(date_trunc('week',date('".$firstday."'))) as firstday , date(date_trunc('week',date('".$lastday."')) + interval '6 days') as lastday";
+ my $dlim = $self->{db}->query($sql);
+ $defdays->{0}->{startdate} = $dlim->{firstday};
+ $defdays->{$kl}->{enddate} = $dlim->{lastday};
#if ($defdays->{0}->{startdate} eq $prddata->{startdate} && $prddata->{startdate} ne $prddata->{startdatealt}){
# $defdays->{0}->{startdate} = $prddata->{startdatealt};
# }
# if (($defdays->{0}->{startdate} lt $prddata->{startdate}) && ($defdays->{0}->{startdatealt} lt $prddata->{startdate})){
# $defdays->{0}->{startdate} = $defdays->{0}->{startdatealt};
# }
+ print STDERR Dumper($defdays);
my @delete = ();
# print STDERR Dumper($defdays);
# my $cpsql = "select payedpauses from public.companies where schemata='".$schema."'";
# if (($defdays->{0}->{startdate} lt $prddata->{startdate}) && ($defdays->{0}->{startdate} lt $prddata->{startdatealt})){
# $prddata->{startdate} = $prddata->{startdatealt};
# }
- my $delsql = "DELETE FROM ".$schema.".staffreportperioddays where id_staff='".$id_staff."' and (daydate > date('".$prddata->{enddate}."') or daydate < date('".$prddata->{startdate}."'))
+ my $delsql = "DELETE FROM ".$schema.".staffreportperioddays where id_staff='".$id_staff."' and (daydate > date('".$dlim->{lastday}."') or daydate < date('".$dlim->{firstday}."'))
OR (id_staff='".$id_staff."' AND ".join(" AND ",@delete).");";
- #print STDERR "DEL1:".$delsql."\n======\n";
+ print STDERR "DEL1:".$delsql."\n======\n";
$self->{db}->exec($delsql);
}
my $delstaffreportssql = "delete from ".$schema.".staffreportperiod sp where id_staff='".$id_staff."' and id_reportperiod not in (
select rp.id from ".$schema.".reportperiod rp left join ".$schema.".staffreportperioddays pd on (pd.daydate between rp.startdate and rp.enddate)
where pd.id_staff='".$id_staff."' group by rp.id);";
- #print STDERR "DEL2:".$delstaffreportssql."\n======\n";
+ print STDERR "DEL2:".$delstaffreportssql."\n======\n";
$self->{db}->exec($delstaffreportssql);
#$self->{db}->exec($delsql);
<table style=\"width: 100%;\" >
<tr><td colspan=\"2\" style=\"text-align: right;font-size: 8pt;\"><span class=\"date\"></span> <span class=\"time\"></span></td></tr>
<tr>
- <td></td>
+ <td style=\"text-align:left;font-size: 6pt;\">";
+ print FT "<div>Congé: ";
+ my $vleg = $self->{db}->querysorted("SELECT vacancyname,legend FROM ".$schema.".vacancytypes WHERE isworktime=true order by legend;");
+ foreach my $v (sort {$a <=> $b} keys(%{$vleg})){
+ print FT $vleg->{$v}->{legend}.") ".$vleg->{$v}->{vacancyname}." ";
+ }
+ print FT "</div>";
+ print FT '<div>Récupération: ';
+ my $rleg = $self->{db}->querysorted("SELECT vacancyname,legend FROM ".$schema.".vacancytypes WHERE isworktime<>true order by legend;");
+ foreach my $r (sort {$a <=> $b} keys(%{$rleg})){
+ print FT $rleg->{$r}->{legend}.") ".$rleg->{$r}->{vacancyname}." ";
+ }
+ print FT "</div></td>
<td style=\"text-align:right;font-size: 8pt;\">
Page <span class=\"page\"></span>/<span class=\"topage\"></span>
</td>
my $data = shift;
my $id_stafflist = "";
my $stafflist = ();
+ $self->{legend}->{vacancy} = $self->{db}->querybykey("id","SELECT id,legend FROM ".$schema.".vacancytypes WHERE isworktime=true order by legend;");
+ $self->{legend}->{recup} = $self->{db}->querybykey("id","SELECT id,legend FROM ".$schema.".vacancytypes WHERE isworktime<>true order by legend;");
open(CT,">".$outfile);
print CT "
<!DOCTYPE html>
to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours,
to_char(srp.workhours, 'HH24:MI'::text) AS workhours,
to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours,
+ to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill,
+ to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
- to_char(srp.hoursdiff, 'HH24:MI'::text) as hoursdiff,
+ case when left(to_char(srp.hoursdiff, 'HH24:MI'),1) = '-' then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
to_char(srp.payedhours, 'HH24:MI'::text) AS payedhours,
- to_char(srp.transferedhourscalc, 'HH24:MI'::text) AS transferedhourscalc,
+ to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours,
+ case when left(to_char(srp.transferedhourscalc, 'HH24:MI'),1) = '-' then '-' || replace(to_char(srp.transferedhourscalc, 'HH24:MI'),'-','') else to_char(srp.transferedhourscalc, 'HH24:MI') end as transferedhourscalc,
'+' || suppvacancysunwork as suppvacancysunwork,
'+' || suppvacancy44hours as suppvacancy44hours
from ".$schema.".staffreportperiod srp
to_char(srp.contracthours, 'HH24:MI'::text) AS contracthours,
to_char(srp.workhours, 'HH24:MI'::text) AS workhours,
to_char(srp.vacancyhours, 'HH24:MI'::text) AS vacancyhours,
+ to_char(srp.vacancyill, 'HH24:MI'::text) AS vacancyill,
+ to_char(srp.vacancynormal, 'HH24:MI'::text) AS vacancynormal,
to_char(srp.recuperationhours, 'HH24:MI'::text) AS recuperationhours,
- to_char(srp.hoursdiff, 'HH24:MI'::text) as hoursdiff,
+ case when left(to_char(srp.hoursdiff, 'HH24:MI'),1) = '-' then '-' || replace(to_char(srp.hoursdiff, 'HH24:MI'),'-','') else to_char(srp.hoursdiff, 'HH24:MI') end as hoursdiff,
to_char(srp.totalhours, 'HH24:MI'::text) AS totalhours,
to_char(srp.payedhours, 'HH24:MI'::text) AS payedhours,
- to_char(srp.transferedhourscalc, 'HH24:MI'::text) AS transferedhourscalc,
+ to_char(srp.avgtotalweekhours, 'HH24:MI'::text) AS avgtotalweekhours,
+ case when left(to_char(srp.transferedhourscalc, 'HH24:MI'),1) = '-' then '-' || replace(to_char(srp.transferedhourscalc, 'HH24:MI'),'-','') else to_char(srp.transferedhourscalc, 'HH24:MI') end as transferedhourscalc,
'+' || suppvacancysunwork as suppvacancysunwork,
'+' || suppvacancy44hours as suppvacancy44hours
from ".$schema.".staffreportperiod srp
my $weeksums = $self->getPeriodWeekSums($schema,$data->{id_staff},$data->{startdate},$data->{enddate});
my $tblheader = "<table>
<thead>
- <tr ><th colspan=\"5\" style=\"border-right: 0px;font-size: 10pt;\">".$data->{dspstartdate}." - ".$data->{dspenddate}."</th><th colspan=\"4\" style=\"border-left: 0px;text-align: right;font-size: 10pt;\">".$data->{surname}." ".$data->{prename}."</th></tr>
- <tr><th>Semaine</th>
- <th>Lundi</th>
- <th>Mardi</th>
- <th>Mecredi</th>
- <th>Jeudi</th>
- <th>Vendredi</th>
- <th>Samedi</th>
- <th>Dimanche</th>
- <th>Totaux</th></tr>
+ <tr ><th colspan=\"5\" style=\"border-right: 0px;font-size: 10pt;\">".$data->{dspstartdate}." - ".$data->{dspenddate}."</th><th colspan=\"4\" style=\"border-left: 0px;font-size: 10pt;\">".$data->{surname}." ".$data->{prename}."</th></tr>
+ <tr><th style=\"background-color: #e6e6e6;\">Semaine</th>
+ <th style=\"background-color: #e6e6e6;\">Lundi</th>
+ <th style=\"background-color: #e6e6e6;\">Mardi</th>
+ <th style=\"background-color: #e6e6e6;\">Mecredi</th>
+ <th style=\"background-color: #e6e6e6;\">Jeudi</th>
+ <th style=\"background-color: #e6e6e6;\">Vendredi</th>
+ <th style=\"background-color: #e6e6e6;\">Samedi</th>
+ <th style=\"background-color: #e6e6e6;\">Dimanche</th>
+ <th style=\"background-color: #e6e6e6;\">Totaux</th></tr>
</thead>
<tbody>";
my $txtpage = $tblheader;
$cntr++;
my @dspwd = split(',',$perioddata->{$pw}->{dspweekdates});
- $txtpage .="<tr><th rowspan=\"2\">".$perioddata->{$pw}->{dspweekshort}."</th>
- <th style=\"width: 44mm;\">".$dspwd[0]."</th>
- <th style=\"width: 44mm;\">".$dspwd[1]."</th>
- <th style=\"width: 44mm;\">".$dspwd[2]."</th>
- <th style=\"width: 44mm;\">".$dspwd[3]."</th>
- <th style=\"width: 44mm;\">".$dspwd[4]."</th>
- <th style=\"width: 44mm;\">".$dspwd[5]."</th>
- <th style=\"width: 44mm;\">".$dspwd[6]."</th>
- <th></th></tr><tr>
+ $txtpage .="<tr><th rowspan=\"2\" style=\"background-color: #e6e6e6;\">".$perioddata->{$pw}->{dspweekshort}."</th>
+ <th style=\"width: 44mm;background-color: #e6e6e6;\">".$dspwd[0]."</th>
+ <th style=\"width: 44mm;background-color: #e6e6e6;\">".$dspwd[1]."</th>
+ <th style=\"width: 44mm;background-color: #e6e6e6;\">".$dspwd[2]."</th>
+ <th style=\"width: 44mm;background-color: #e6e6e6;\">".$dspwd[3]."</th>
+ <th style=\"width: 44mm;background-color: #e6e6e6;\">".$dspwd[4]."</th>
+ <th style=\"width: 44mm;background-color: #e6e6e6;\">".$dspwd[5]."</th>
+ <th style=\"width: 44mm;background-color: #e6e6e6;\">".$dspwd[6]."</th>
+ <th style=\"background-color: #e6e6e6;\"> </th></tr><tr>
";
$wdk = 1;
}
while (($perioddata->{$pw}->{daydate} ne $wd[$wdk]) && $wdk le "7"){
if ($wdk == 0){$wdk++; next; }
if (($perioddata->{$pw}->{daydate} gt $data->{startdate}) || ($perioddata->{$pw}->{daydate} lt $data->{enddate})){
- $txtpage .="<td style=\"max-height: 15px!important;height: 15mm;\"> </td>";
+ $txtpage .="<td style=\"max-height: 15px!important;height: 15mm;background-color: #d6d6d6;\"> </td>";
}
$wdk++;
</tr>
<tr>
<td class=\"datavalues\" style=\"height: 5mm;border-bottom: 0.5px solid #969696;border-right: 0;\">
- ".(($perioddata->{$pw}->{vacancyhours})?"<div style=\"font-style: italic;\">".$perioddata->{$pw}->{vacancyhours}."</div>":" ")."
+ ".(($perioddata->{$pw}->{vacancyhours})?"<div style=\"font-style: italic;\">".$perioddata->{$pw}->{vacancyhours}." <sup>".$self->{legend}->{vacancy}->{$perioddata->{$pw}->{id_vacancytype}}->{legend}.")</sup></div>":" ")."
</td>
</tr>
<tr>
<td class=\"datavalues\" style=\"height: 5mm;border-right: 0;\">
- ".(($perioddata->{$pw}->{recuperationhours})?"<div style=\"text-decoration: underline;\">".$perioddata->{$pw}->{recuperationhours}."</div>":" ")."
+ ".(($perioddata->{$pw}->{recuperationhours})?"<div style=\"text-decoration: italic;\">".$perioddata->{$pw}->{recuperationhours}." <sup>".$self->{legend}->{recup}->{$perioddata->{$pw}->{id_recuperationtype}}->{legend}.")</sup></div>":" ")."
</td>
</tr>
</table>
<div style=\"font-weight: bold;border-bottom: 0.5px solid #969696;\">".$weeksums->{$ws}->{totalhours}."</div>
</td>
</tr>
- <tr>
- <td class=\"datavalues\" style=\"height: 5mm;\">
- <div style=\"font-weight: bold;text-decoration: underline;border-bottom: 0.5px solid #969696;\">".(($weeksums->{$ws}->{recperationhours} eq "00:00")?"":$weeksums->{$ws}->{recperationhours})."</div>
- </td>
- </tr>
- <tr>
- <td class=\"datavalues\" style=\"height: 5mm;\">
- <div style=\"font-weight: bold;font-style: italic;border-bottom: 0.5px solid #969696;\">".(($weeksums->{$ws}->{vacancyhours} eq "00:00")?"":$weeksums->{$ws}->{vacancyhours})."</div>
- </td>
- </tr></table>
+ </table>
";
#<div style=\"font-weight: bold;text-decoration: underline;text-decoration-style: double;border-bottom: 0.5px solid #969696;\">".(($weeksums->{$ws}->{diffhours} eq "00:00")?"":$weeksums->{$ws}->{diffhours})."</div>
}
#print STDERR "WDK: ".$wdk."\n";
if ($wdk gt "0"){
while ($wdk le "7"){
- $txtpage .="<td style=\"height: 15mm;\"> </td>";
+ $txtpage .="<td style=\"height: 15mm;background-color: #d6d6d6;\"> </td>";
$wdk++;
}
if ($wdk gt "7"){
<div style=\"font-weight: bold;border-bottom: 0.5px solid #969696;\">".$weeksums->{$ws}->{totalhours}."</div>
</td>
</tr>
- <tr>
- <td class=\"datavalues\" style=\"height: 5mm;\">
- <div style=\"font-weight: bold;text-decoration: underline;border-bottom: 0.5px solid #969696;\">".(($weeksums->{$ws}->{recperationhours} eq "00:00")?"":$weeksums->{$ws}->{recperationhours})."</div>
- </td>
- </tr>
- <tr>
- <td class=\"datavalues\" style=\"height: 5mm;\">
- <div style=\"font-weight: bold;font-style: italic;border-bottom: 0.5px solid #969696;\">".(($weeksums->{$ws}->{vacancyhours} eq "00:00")?"":$weeksums->{$ws}->{vacancyhours})."</div>
- </td>
- </tr></table>
+ </table>
";
+ # <tr>
+ # <td class=\"datavalues\" style=\"height: 5mm;\">
+ # <div style=\"font-weight: bold;text-decoration: underline;border-bottom: 0.5px solid #969696;\">".(($weeksums->{$ws}->{recperationhours} eq "00:00")?"":$weeksums->{$ws}->{recperationhours})."</div>
+ # </td>
+ # </tr>
+ # <tr>
+ # <td class=\"datavalues\" style=\"height: 5mm;\">
+ # <div style=\"font-weight: bold;font-style: italic;border-bottom: 0.5px solid #969696;\">".(($weeksums->{$ws}->{vacancyhours} eq "00:00")?"":$weeksums->{$ws}->{vacancyhours})."</div>
+ # </td>
+ # </tr>
#<div style=\"font-weight: bold;text-decoration: underline;text-decoration-style: double;border-bottom: 0.5px solid #969696;\">".(($weeksums->{$ws}->{diffhours} eq "00:00")?"":$weeksums->{$ws}->{diffhours})."</div>
}
$txtpage .= "</td></tr></table>
# my $spt = $data->{sums};
$txtpage .= "<table>
<thead>
- <tr><th colspan=\"20\">Totaux heures pour la période: ".$data->{dspstartdate}." - ".$data->{dspenddate}."</th></tr>
+ <tr><th colspan=\"20\">Résumée période de référence: ".$data->{dspstartdate}." - ".$data->{dspenddate}."</th></tr>
<tr>
- <td style=\"text-align: right;\">contrat:</td>
- <th style=\"width: 15mm;\">".$data->{contracthours}."</th>
- <td style=\"text-align: right;\">travail:</td>
- <th style=\"width: 15mm;\">".$data->{workhours}."</th>
- <td style=\"text-align: right;\">congés:</td>
- <th style=\"width: 15mm;\">".$data->{vacancyhours}."</th>
- <td style=\"text-align: right;\">récupérées:</td>
- <th style=\"width: 15mm;\">".$data->{recuperationhours}."</th>
- <td style=\"text-align: right;\">total:</td>
+ <td style=\"text-align: right;background-color: #e6e6e6;\">heures contractuelles:<br/>heures travaillées:</td>
+ <th style=\"width: 15mm;\">".$data->{contracthours}."<br/>".$data->{workhours}."</th>
+ <td style=\"text-align: right;background-color: #e6e6e6;\">congé maladie:<br>congé:</td>
+ <th style=\"width: 15mm;\">".(($data->{vacancyill} ne '')?$data->{vacancyill} :"00:00")."<br>".(($data->{vacancynormal} ne '')?$data->{vacancynormal} :"00:00")."</th>
+ <td style=\"text-align: right;background-color: #e6e6e6;\">heures<br/>récupérées:</td>
+ <th style=\"width: 15mm;\">".$data->{recuperationhours}."<br/> </th>
+ <td style=\"text-align: right;background-color: #e6e6e6;\">durée travail<br/>réel prestée:</td>
<th style=\"width: 15mm;\">".$data->{totalhours}."</th>
- <td style=\"text-align: right;\">décompte<br/>reporté:</td>
- <th style=\"width: 15mm;\">".$data->{transferedhourscalc}."</th>
- <td style=\"text-align: right;\">heures<br/>payées:</td>
- <th style=\"width: 15mm;\">".$data->{payedhours}."</th>
- <td style=\"text-align: right;\">décompte<br/>fin POT:</td>
+ <td style=\"text-align: right;background-color: #e6e6e6;\">moyenne durée<br/>travail réel:</td>
+ <th style=\"width: 15mm;\">".$data->{avgtotalweekhours}."</th>
+ <td style=\"text-align: right;background-color: #e6e6e6;\">décompte reporté:<br/>heures payées:</td>
+ <th style=\"width: 15mm;\">".(($data->{transferedhourscalc} ne '')?$data->{transferedhourscalc}:"00:00")."<br/>".(($data->{payedhours} ne '')?$data->{payedhours}:"00:00")."</th>
+ <td style=\"text-align: right;background-color: #e6e6e6;\">décompte<br/>fin POT:</td>
<th style=\"width: 15mm;\">".$data->{hoursdiff}."</th>
- <td style=\"text-align: right;\">congé suppl<br/>+44h:</td>
- <th style=\"width: 15mm;\">".$data->{suppvacancy44hours}."</th>
- <td style=\"text-align: right;\">congé suppl.<br/>dimache travaillé:</td>
- <th style=\"width: 15mm;\">".$data->{suppvacancysunwork}."</th>
+ <td style=\"text-align: right;background-color: #e6e6e6;\">congé suppl. +44h:<br/>congé suppl. dimache travaillé:</td>
+ <th style=\"width: 15mm;\">".(($data->{suppvacancy44hours} ne '')?$data->{suppvacancy44hours}:" ")."<br/>".(($data->{suppvacancysunwork} ne '')?$data->{suppvacancysunwork}:" ")."</th>
</tr>
</thead>
</table>";
my $self = shift;
my $schema = shift;
my $id_workplan= shift;
+ my $payedpause = $self->{db}->query("select payedpauses from public.companies where schemata='".$schema."';");
my $sql ="SELECT wp.workplan,
to_char(wp.weekhours, 'HH24:MI'::text) AS weekhours,
wpd.id,wpd.id_workplan,wpd.weekday,
to_char(wpd.end1::interval, 'HH24:MI'::text) AS end1,
to_char(wpd.start2::interval, 'HH24:MI'::text) AS start2,
to_char(wpd.end2::interval, 'HH24:MI'::text) AS end2,
- to_char(wpd.pause::interval, 'HH24:MI'::text) AS pause,
- to_char(
+ to_char(wpd.pause::interval, 'HH24:MI'::text) AS pause,";
+ if ($payedpause->{payedpauses} eq "1"){
+ $sql .= "to_char(
CASE WHEN wpd.end1 < wpd.start1 THEN wpd.end1::interval + '24:00:00'::interval ELSE wpd.end1::interval
END - wpd.start1::interval + COALESCE(
CASE WHEN wpd.end2 < wpd.start2 THEN wpd.end2::interval + '24:00:00'::interval
ELSE wpd.end2::interval
- END - wpd.start2::interval, '00:00:00'::interval) - COALESCE(wpd.pause::interval, '00:00:00'::interval), 'HH24:MI'::text) AS dayhours,
- NULL::bigint AS staffcount, wpd.weeknum,
+ END - wpd.start2::interval, '00:00:00'::interval), 'HH24:MI'::text) AS dayhours,";
+ } else {
+ $sql .= "to_char(
+ CASE WHEN wpd.end1 < wpd.start1 THEN wpd.end1::interval + '24:00:00'::interval ELSE wpd.end1::interval
+ END - wpd.start1::interval + COALESCE(
+ CASE WHEN wpd.end2 < wpd.start2 THEN wpd.end2::interval + '24:00:00'::interval
+ ELSE wpd.end2::interval
+ END - wpd.start2::interval, '00:00:00'::interval) - COALESCE(wpd.pause::interval, '00:00:00'::interval), 'HH24:MI'::text) AS dayhours,";
+ }
+
+
+ $sql .="NULL::bigint AS staffcount, wpd.weeknum,
CASE WHEN wpd.start2 IS NOT NULL AND wpd.end1 IS NOT NULL THEN to_char(wpd.start2::interval - wpd.end1::interval, 'HH24:MI'::text) ELSE NULL::text END AS interruption,
to_char(wpd.pausestart1::interval, 'HH24:MI'::text) AS pausestart1,
to_char(wpd.pauseend1::interval, 'HH24:MI'::text) AS pauseend1,
my $class = shift;
my $p = shift;
my $self = bless {}, $class;
- $self->{debug} = 1;
+ $self->{debug} = 0;
$self->{dbh} = DBI->connect($p->{dsn},$p->{dbuser},$p->{dbpassword},{PrintError=>1,RaiseError=>1,AutoCommit=>1}) or return "query Connection Error!".$!;
return $self;
}
where se.id= '".$self->{db}->securetext($sid)."' and se.remote_addr= '".$ENV{REMOTE_ADDR}."' and se.user_agent= '".$ENV{HTTP_USER_AGENT}."' and
us.isblocked is null group by se.id,us.id,ugrp.id;";
my $res= $self->{db}->querysorted($sql);
- print STDERR "SESSION:".$sql."\n";
- print STDERR Dumper($res)."\n";
+ #print STDERR "SESSION:".$sql."\n";
+ #print STDERR Dumper($res)."\n";
my $ret = undef;
# open FILE,">>tmp/sql.log";
# print FILE "GET DB Session\n";
return "";
},
StringToInterval: function(strin){
-
+ let minus = "";
+ if (strin.startsWith('-')){
+ minus = '-';
+ }
if (strin.indexOf(":") > 0){
let spl = strin.split(":");
hours = spl[0].replace(/\D/g,'');
if (minutes > "59"){
minutes = "0";
}
- return hours + ":" + timecalc.lpad(minutes,2,'0');
+ return minus + hours + ":" + timecalc.lpad(minutes,2,'0');
}
if (strin == ""){ return "";}
strin = strin.replace(/\D/g,'');
- return strin + ":00";
+ return minus + strin + ":00";
},
MinutesToInterval: function(minutes){
// },
copyInterval(obj,idobjout,factor){
if (factor){
+
let mval = timecalc.IntervalToMinutes(obj.value) * factor;
+ console.log("minutes:" + mval);
document.getElementById(idobjout).value = timecalc.MinutesToInterval(mval);
}else {
document.getElementById(idobjout).value=obj.value;
-[% appversion = '0.9.2.2' %]
+[% appversion = '0.9.2.3' %]
<!DOCTYPE html>
<html lang="fr">
<div class="bar border-bottom toolbar" id="toolbar">
<div class="bar-item"><img style="height: 40px;" src="[% abspath %][% staticpath %]img/potlogowhite.svg"> </div>
- <div class="bar-item PageHeadTitle hide-small">POT - Plan d'orgatisation du travail</div>
+ <div class="bar-item PageHeadTitle hide-small">Plan d'organisation du travail</div>
<a class="bar-item toolbarbtn right" href="index.html?logout=1"><span class="icon icon-logout" style="font-size: 22px;"></span>Logout</a>
<div class="bar-item right">
<select class="select data_session " id="current_schemata" data-column="current_schemata" data-selected="[% session.sessiondata.schemata %]" data-table="session" data-id="" value="portanova" name="session_current_schemata" >
{title: "congé suppl.<br/>+44 h", field:"suppvacancy44hours",headerSort: false},
{title: "congé suppl.<br/>trav dim.", field:"suppvacancysunwork",headerSort: false},
//{title: "ITM Contract", field:"itmcontracthours",headerSort: false},
- {title: "jours<br/>ouvrables", field:"maxdays",headerSort: false}
+ {title: "jours<br/>ouvrables", field:"maxdays",headerSort: false},
+ {title: "moy.<br/>hebd.", field:"avgtotalweekhours",headerSort: false}
]
});
reportperiod.gettbldatafilter();
copy_id: null,
weekdata:null,
daylimits:null,
+ selectedid: null,
vacancytypes:{},
recuperationtypes:{},
choices:{"id_vacancytype":null,"id_recuperationtype":null,"id_workplan":null},
{ title: "Récup",field: "recuperationhours",hozAlign:"center",headerSort: false,formatter:recupformatter,bottomCalc:staffperiodweeks.setweekrecuperationhours},
{ title: "Total",field: "dayhours",hozAlign:"center",headerSort: false,formatter:totalFormatter,bottomCalc:staffperiodweeks.setweektotalhours,bottomCalcFormatter:"html"},
{ title: "diff<br/>contrat",field:"diffhours",hozAlign:"center",formatter:nullFormatter,headerSort:false,bottomCalc:staffperiodweeks.setweekdiffhours},
- { title: "moyenne<br/> hebdomaire",field: "avgweekhours",hozAlign:"center",headerSort: false,formatter:nullFormatter,bottomCalc:staffperiodweeks.setavgweekhours},
+ { title: "moy.<br/>hebd.",field: "avgweekhours",hozAlign:"center",headerSort: false,formatter:nullFormatter,bottomCalc:staffperiodweeks.setavgweekhours},
{ title: "heures libres<br/>après trav",field: "freehoursafter",hozAlign:"center",formatter:freetimeFormatter,headerSort: false},
{ title: "pointages",field:"trackedtime",hozAlign:"center",formatter:timetrackFormatter,headerSort: false}
]
//console.log({ "get": "perioddays","schemata":schemata,"id_staff":selrp[0].id_staff,"date_start":weekmonstart,"date_end":weeksunend});
postData("db.cgi",{ "get": "perioddays","schemata":schemata,"id_staff":selrp[0].id_staff,"date_start":weekmonstart,"date_end":weeksunend}).then(data => {
//console.log("perioddays",data);
- if (data && data.result.sqldata) { staffperiodweeks.tbl.setData(data.result.sqldata);}
+ if (data && data.result.sqldata) {
+ staffperiodweeks.tbl.setData(data.result.sqldata).then(dd => {
+ //console.log("selected",staffperiodweeks.selectedrow);
+ if (staffperiodweeks.selectedid){
+ staffperiodweeks.tbl.selectRow(staffperiodweeks.selectedid);
+ staffperiodweeks.tbl.scrollToRow(staffperiodweeks.selectedid, "center", false);
+ }
+ });
+
+ }
});
})
},
loadplan: function(parenttbl){
+ staffperiodweeks.selectedrow = null;
staffperiodweeks.parenttbl = parenttbl;
let selrp = staffperiodweeks.parenttbl.getSelectedData();
//console.log("weekplan",selrp);
dataform.cleanform2("staffreportperioddays",staffperiodweeks.choices);
let cday = staffperiodweeks.tbl.getSelectedData();
staffperiodweeks.dayrefdata =null;
-
+
if (cday[0]){
+ staffperiodweeks.selectedid = cday[0].id;
staffperiodweeks.disablesave = false;
document.getElementById("staffreportperioddays_errmsg").innerHTML = '';
staffperiodweeks.currentday = cday[0];
let sel = staffperiodweeks.tbl.getSelectedData();
let selrp = staffperiodweeks.parenttbl.getSelectedData();
if (sel.length > 0){
+ staffperiodweeks.selectedid = sel[0].id;
asel = [];
for (s=0;s<sel.length;s++){
asel.push(sel[s].id);
//console.log("clean row");
//console.log(sel);
if (sel.length > 0){
+ staffperiodweeks.selectedid = sel[0].id;
asel = [];
for (s=0;s<sel.length;s++){
asel.push(sel[s].id);
replacedays: function(){
let sel = staffperiodweeks.tbl.getSelectedData();
let selrp = staffperiodweeks.parenttbl.getSelectedData();
+ if (sel.length > 0){
+ staffperiodweeks.selectedid = sel[0].id;
let id_workplan = staffperiodweeks.choices["id_workplan"].selected();
let keepvac = document.getElementById("keepvacancy").checked;
let keeprec = document.getElementById("keeprecuperation").checked;
document.getElementById('dlg_replacestaffdayworkplan').style.display='none';
staffperiodweeks.gettbldata();
}).catch(e => { console.log("ERROR replaceids",e);});
+ }
},
savetimetracker: function(){
let sel = staffperiodweeks.tbl.getSelectedData();
let sel = staffperiodweeks.tbl.getSelectedData();
let selrp = staffperiodweeks.parenttbl.getSelectedData();
if (sel.length > 0 && sel[0].daydate < staffperiodweeks.today){
+ staffperiodweeks.selectedid = sel[0].id;
postData("db.cgi",{"get":"gettrackday","schemata":schemata,"id_staff":sel[0].id_staff,"daydate":sel[0].daydate}).then(data => {
staffperiodweeks.tbltimetracker.setData(data.result.sqldata);
console.log("data to load",data.result.sqldata);
<button class="bar-item toolbarbtn right" id="btn_delete_staffcontract" onclick="staffcontract.remove(); return false;"><span class="icon icon-remove text-red" style="font-size: 16px;"></span>supprimer</button>
<button class="bar-item toolbarbtn right" onclick="staffcontract.edit(); return false;"><span class="icon icon-edit" style="font-size: 16px;"><br/>éditer</button>
<button class="bar-item toolbarbtn right" onclick="staffcontract.add(); return false;"><span class="icon icon-plus" style="font-size: 16px;"><br/>ajouter</button>
- <button class="bar-item toolbarbtn right" onclick="staffcontract.updateStaffContractDays(); return false;"><span class="icon icon-week" style="font-size: 16px;"><br/>valider</button>
+ <button class="bar-item toolbarbtn right" onclick="staffcontract.updateStaffContractDays(); return false;"><span class="icon icon-week" style="font-size: 16px;"><br/>actualiser périodes</button>
</div>
<div id="tbl_staffcontract" ></div>
{title: "décompte<br/>fin POT", field:"hoursdiff",headerSort: false,bottomCalc:staffperiods.periodrestsum},
{title: "congé suppl.<br/>+44 h", field:"suppvacancy44hours",headerSort: false},
{title: "congé suppl.<br/>trav dim.", field:"suppvacancysunwork",headerSort: false},
- {title: "jours<br/>ouvrables", field:"maxdays",headerSort: false}
+ {title: "jours<br/>ouvrables", field:"maxdays",headerSort: false},
+ {title: "moy.<br/>hebd.", field:"avgtotalweekhours",headerSort: false}
]
});
},