creorga website corrections
authorKilian Saffran <ksaffran@dks.lu>
Mon, 6 May 2019 07:33:02 +0000 (09:33 +0200)
committerKilian Saffran <ksaffran@dks.lu>
Mon, 6 May 2019 07:33:02 +0000 (09:33 +0200)
25 files changed:
TODO/modules_todo/staff/coworker.html [deleted file]
TODO/modules_todo/staff/js/coworker.js [deleted file]
TODO/modules_todo/staff/js/staff.js [deleted file]
TODO/modules_todo/staff/stafflist.html [deleted file]
apps/api/lib/pgsql.pm
apps/data/db/lechatpotte.sqlite
apps/data/db/underatert.sqlite
apps/index.cgi
apps/js/app.js
apps/js/apps.js
apps/js/webdatabase.js
apps/lib.par [new file with mode: 0644]
apps/tmpl/creorga/index.tt
apps/tmpl/creorga/modules/staff/coworker.tt
apps/tmpl/creorga/modules/staff/js/coworker.js
apps/tmpl/skeleton/index.tt
dev/db/changes.sql [moved from apps/data/db/changes.sql with 100% similarity]
dev/db/lechatpotte.new.schema.sql [moved from apps/data/db/lechatpotte.new.schema.sql with 100% similarity]
dev/db/lechatpotte.old.schema.sql [moved from apps/data/db/lechatpotte.old.schema.sql with 100% similarity]
dev/db/lechatpotte.old.sqlite [moved from apps/data/db/lechatpotte.old.sqlite with 100% similarity]
dev/db/underatert.new.schema.sql [moved from apps/data/db/underatert.new.schema.sql with 100% similarity]
dev/db/underatert.old.schema.sql [moved from apps/data/db/underatert.old.schema.sql with 100% similarity]
dev/db/underatert.old.sqlite [moved from apps/data/db/underatert.old.sqlite with 100% similarity]
index.cgi
tmpl/foot/footer.tt

diff --git a/TODO/modules_todo/staff/coworker.html b/TODO/modules_todo/staff/coworker.html
deleted file mode 100644 (file)
index 50d07bc..0000000
+++ /dev/null
@@ -1,619 +0,0 @@
-<!DOCTYPE html>
-
-<html lang="fr">
-<head>
-  <meta charset="utf-8">
-
-  <title>Employé(e)</title>
-  <meta name="viewport" content="width=device-width, initial-scale=1">
-  
-  <link href="../../../oldvendor/css/bootstrap.min.css" rel="stylesheet" type="text/css">
-  <link href="../../../vendor/bootstrap-table/bootstrap-table.min.css" rel="stylesheet" type="text/css">
-  <link href="../../../oldvendor/css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
-  <!-- <link href="../../../oldvendor/css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
-  <link href="../../../oldvendor/css/glyphicons.css" rel="stylesheet" type="text/css">
-  <link href="../../../oldvendor/css/jquery.minicolors.css" rel="stylesheet" type="text/css">
-  <link href="../../../oldvendor/css/modules.css" rel="stylesheet" type="text/css">
-</head>
-
-<body>
-  <nav class="navbar navbar-inverse navbar-fixed-top">
-        
-    <div class="">
-      <ul class="nav navbar-nav navbar-left">
-       <li style="padding-top: 7px; padding-left: 10px; color: #fff;font-size: 24px;">Employé(e)</li>
-      </ul>
-    </div>
-    
-  </nav>
-    <div class="container-fluid" style="padding-top: 55px;">
-        <br/>
-        <!--<span class="pagehead" id="pagehead">Collaborateur</span>&nbsp;-->
-          <input type="hidden" value="" id="staff_uuid">
-                <table style="width: 100%;">
-                  <tbody>
-                    <tr>
-                      <td style="width: 50%">
-                        <form>
-                        <div class="field form-inline">
-                          <label for="staff_surname">Nom / Prénom</label>
-                          <input type="text" value="" id="staff_surname" class="form-control">
-                          <input type="text" value="" id="staff_prename" class="form-control">
-                        </div>
-
-                        <div class="field">
-                          <label for="staff_address">Adresse</label> <input type="text" value="" id="staff_address" class="form-control">
-                        </div>
-
-                        <div class="field form-inline">
-                          <label for="staff_zip">CP / Ville</label>
-                          <input type="text" value="" size="5" id="staff_zip" class="form-control">
-                          <input type="text" value="" id="staff_city" class="form-control">
-                        </div>
-
-                        <div class="field">
-                          <label for="staff_country">Pays</label> <input type="text" value="" id="staff_country" class="form-control">
-                        </div>
-                        <div class="field form-inline">
-                          <label for="staff_phone">Tel / E-Mail</label>
-                          <input type="text" value="" id="staff_phone" class="form-control">
-                          <input type="text" value="" id="staff_email" class="form-control">
-                        </div>
-                        </form>
-                        
-                      </td>
-
-                      <td style="width: 50%;">
-                        <form>
-                        <div class="field form-inline" id="date-container">
-                          <label for="staff_entrydate" style="width: 200px;">Date d'entrée / de sortie</label>
-                          <div id="dt_staff_entrydate" class="input-group date">
-                            <input type="date" class="form-control" value="" limits="0" placeholder="dd.mm.yyyy"  id="staff_entrydate"><span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span>
-                          </div>
-                        
-                          <div id="dt_staff_exitdate" class="input-group date">
-                            <input type="date" class="form-control" value="" limits="0" placeholder="dd.mm.yyyy" id="staff_exitdate"><span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span>
-                          </div>
-                        </div>
-                  
-                        <div class="field">
-                          <label for="staff_jobtitle">Position / Contrat</label> <input type="text" value="" id="staff_jobtitle" class="form-control">
-                        </div>
-                        <table style="width: 100%;">
-                        <tr><td style="width: 40%;"><div class="field">
-                          <label for="staff_weekhours">heures/semaine</label>
-                          <div class="input-group number">
-                            <input type="number" value="" id="staff_weekhours" style="text-align: right;" class="form-control">
-
-                            <div class="input-group-addon">h</div>
-                          </div>
-                        </div></td><td style="width: 40%;"><div class="field">
-                          <label for="staff_maxdayhours">heures/jour</label>
-                          <div class="input-group number">
-                            <input type="number" value="" id="staff_maxdayhours" style="text-align: right;" class="form-control">
-
-                            <div class="input-group-addon">h</div>
-                          </div>
-                        </div></td><td style="width:20%"><div class="field" >
-                            <label for="staff_color">Couleur</label>
-                            <div class="input-group">
-                            <input type="hidden" id="staff_color" class="form-control " value="">
-                            </div>
-                        </div></td></tr>
-                        </table>
-                        <div class="field">
-                          <label for="staff_iban">Compte Bancaire</label> <input type="text" value="" id="staff_iban" class="form-control">
-                        </div>
-                        <div class="field" id="pwddata">
-                          <label for="staff_password">Mot de Passe</label> 
-                          <div class="input-group">
-                               <input type="password" value="" id="staff_password" class="form-control">
-                               <div class="input-group-addon">(Min: 4 charatères)</div> 
-                          </div>
-                        </div>
-                        
-                        </form>
-                        
-                      </td>
-                    </tr>
-                  </tbody>
-                </table>
-              </div>
-              <div class="tabbable">
-            <ul class="nav nav-tabs" id="tabgrouphead">
-              <li><a data-toggle="tab" href="#activity">Organisation interne</a></li>
-              <li><a data-toggle="tab" href="#vacancy">Congé</a></li>
-            </ul>
-
-            <div class="tab-content">
-              
-              <div id="activity" class="tab-pane" id="mnuactivity">
-                <div class="form-group form-inline">
-                      <label for="year_organisation">Année:</label>
-                      <div class="input-group">
-                        <select id="year_organisation" class="selyear">
-                          
-                        </select>
-                    </div>
-                <button onclick="dlg_event({'uuid':''},'ins');" class="btn btn-primary" type="button"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span>&nbsp;Activité</button>
-                </div>
-                 <table id="tbl_activity" class="table table-striped table-bordered">
-                  <thead></thead>
-                  <tfoot></tfoot>
-                  <tbody></tbody>
-                </table>
-              </div>
-              <div id="vacancy" class="tab-pane">
-                <div class="form-group form-inline" id="mnuvac">
-                      <label for="year_vacancy">Année:</label>
-                      <div class="input-group">
-                        <select id="year_vacancy" class="selyear">
-                          
-                        </select>
-                    </div>
-                  <button onclick="dlg_vacancy({'uuid':''},'ins');" class="btn btn-primary" type="button"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span>&nbsp;Congé</button>
-                      <div class="form-group">
-                        <label for="vacancy_total">congé normale</label>
-                        
-                        <div class="input-group" style="width: 120px;">
-                          <input type="text" id="vacancyyeartotal" class="form-control" value="" onblur="saveyearvacdays();">
-                          <span class="input-group-addon">h</span>
-                        </div>
-                        
-                      </div>
-                </div>
-                    
-                        <table id="tbl_vacancy" class="table table-striped table-bordered"  data-toggle="table" data-heigth="10vh" style="width: 100%;" >
-                          <thead>
-                            <tr>
-                                <th class="noprint" style="width: 120px;"></th>
-                                <th style="width: 80px;">année</th>
-                                <th style="width: 100px;">début</th>
-                                <th style="width: 100px;">fin</th>
-                                <th style="width: 60px;">jours</th>
-                                <th style="width: 60px;">h/j</th>
-                                <th style="width: 250px;">Description</th>
-                                <th style="width: 100px;">type</th>
-                                <th style="width: 60px;" colspan="2">normal</th>
-                                <th style="width: 60px;" colspan="2">except.</th>
-                                <th style="width: 60px;" colspan="2">maladie</th>
-                           </tr>
-                          </thead>      
-                          <tbody></tbody>
-                          <tfoot></tfoot>
-                        </table>
-                      
-              
-              <div id="vacancystatus" style=" white-space: nowrap; width: 100%; text-align: center;"></div>  
-              
-            </div>
-          </div>
-              </div>
-<!-- EVENT  DLG begin -->
-<div class="modal fade" id="edit_event">
-          <div class="modal-dialog" style="width: 800px; max-width: 800px;">
-            <div class="modal-content">
-              <div class="modal-header">
-                <button data-dismiss="modal" class="close" type="button"><span aria-hidden="true">x</span><span class="sr-only">Close</span></button>
-                <h4 class="modal-title">Editer Activité</h4>
-              </div>
-              <div class="modal-body" style=" height: 550px; max-height: 550px ">
-<div id="frmeditevent">
-                  <input type="hidden" value="0" id="uuid" />
-                  <input type="hidden" value="" id="staffuuid" />
-                  <input type="hidden" value="" id="description" />
-                  <input type="hidden" value="" id="color" />
-                  <input type="hidden" value="" id="location" />
-                  <div class="form-inline row">
-                    <label for="staffname" class="col-md-2">Employé(e)</label>
-                    <input value="" id="staffname" readonly class="form-control col-md-8" style="width: 80%;" ></select>
-                  </div> 
-                  <div class="row">
-                    <div class="form-inline">
-                  <div id="date-container">
-                    <label class="col-md-3">Dates début / fin</label>
-                    <div id="dt_datefrom" class="input-group date">
-                      <input type="date" class="form-control" value="" limits="1" placeholder="dd.mm.yyyy" id="datefrom"><span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span>
-                    </div>
-                    <div id="dt_dateto" class="input-group date">
-                      <input type="date" class="form-control" value="" limits="1" placeholder="dd.mm.yyyy" id="dateto"><span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span>
-                    </div>
-                  </div>
-                  </div>
-                  </div>
-                  <div class="row">
-                  <div class="form-inline ">
-                    <label   class="col-md-3">heures début / fin</label>
-                    <div class="input-group bootstrap-timepicker time">
-                      <input type="text" class="form-control timepicker" placeholder="" value="" id="timefrom">
-                    </div>
-                    <div class="input-group bootstrap-timepicker time">
-                      <input type="text" class="form-control timepicker" placeholder="" value="" id="timeto">
-                    </div>
-                  </div>
-                  </div>
-                  <div class="row">
-                    
-                  </div>
-                  <div class="row">
-                    <div class="panel panel-default">
-                      <div class="panel-heading">
-                        <h3 class="panel-title">Récurrence
-                        <select id="freq" onchange="setfreq();">
-                          <option value="">pas de récurrence</option>
-                          <option value="daily">quotidienne</option>
-                          <option value="weekly">hebdomaire</option>
-                          <option value="monthly">mensuelle</option>
-                        </select>
-                        </h3>
-                      </div>
-                    <div class="panel-body">
-                        <div class="row">
-                        <div class="form-inline" id="freqinterval">
-                          <label>interval: tous les</label>
-                          <input class="form-control" type="number" id="interval" style="width: 50px;" value="1"/>
-                          <label id="lblfreq"></label>
-                        </div>
-                        </div>
-                        <div class="row" id="freqweekly">
-                           <div class="form-inline">
-                            <label>jours de semaine:</label>
-                            <!--<input class="col-md-2 form-control" style="width: 50px;" type="number" id="xtimes_num" value="1"/>-->
-                            <!--<label class="col-md-2">semaines,le </label>-->
-                            <div class="btn-group form-inline" id="weekly_byday" data-toggle="buttons">
-                            <label class="btn btn-primary">
-                              <input type="checkbox" id="weekly_byday_mo" value="MO" /> Lundi
-                            </label>
-                            <label class="btn btn-primary">
-                              <input type="checkbox" id="weekly_byday_tu" value="TU" /> Mardi
-                            </label>
-                            <label class="btn btn-primary">
-                              <input type="checkbox" id="weekly_byday_we" value="WE" /> Mercredi
-                            </label>
-                            <label class="btn btn-primary">
-                              <input type="checkbox" id="weekly_byday_th" value="TH" /> Jeudi
-                            </label>
-                            <label class="btn btn-primary">
-                              <input type="checkbox" id="weekly_byday_fr" value="FR" /> Vendredi
-                            </label>
-                            <label class="btn btn-primary">
-                            <input type="checkbox" id="weekly_byday_sa" value="SA" /> Samedi
-                            </label>
-                            <!--<label class="btn btn-primary">-->
-                            <!--  <input type="checkbox" id="weekly_byday_su" value="SU" /> Di-->
-                            <!--</label>-->
-                           </div>
-                           </div>
-                        </div>
-                        <div class="row" id="freqmonthly">
-                          <div class="form-inline">
-                            <div class="btn-group" data-toggle="buttons" id="monthly_by">
-                            <label class="btn btn-primary active">
-                              <input type="radio" id="pnl_monthly_byday" value="monthly_byday" checked="1"/> par jour de semaine
-                            </label>
-                            <label class="btn btn-primary">
-                              <input type="radio" id="pnl_monthly_bymonthday" value="monthly_bymonthday"/> par jour du mois
-                            </label>
-                            </div>
-                          </div>
-                          <div class="form-inline" id="freq_monthly_byday">
-                            <!--<label class="col-md-2">tous les</label>-->
-                            <!--<input class="col-md-2 form-control" type="number" id="xtimes_num"  style="width: 50px;" value="1"/>-->
-                            <!--<label class="col-formmd-2">mois, le </label><br/>-->
-                            <div class="btn-group" data-toggle="buttons" id="monthly_bydaypos">
-                            <label class="btn btn-primary">
-                              <input type="checkbox" id="monthly_bydaypos_1" value="1" /> 1ier
-                            </label>
-                            <label class="btn btn-primary">
-                              <input type="checkbox" id="monthly_bydaypos_2" value="2" /> 2ième
-                            </label>
-                            <label class="btn btn-primary">
-                              <input type="checkbox" id="monthly_bydaypos_3" value="3" /> 3ième
-                            </label>
-                            <label class="btn btn-primary">
-                              <input type="checkbox" id="monthly_bydaypos_4" value="4" /> 4ième
-                            </label>
-                            <label class="btn btn-primary">
-                              <input type="checkbox" id="monthly_bydaypos_5" value="5" /> 5ième
-                            </label>
-                            <label class="btn btn-primary">
-                              <input type="checkbox" id="monthly_bydayppos_last-1" value="-1" /> dernier
-                            </label>
-                          </div>
-                            <br/>
-                            <div class="btn-group" data-toggle="buttons" id="monthly_bydaywday">
-                            <label class="btn btn-primary">
-                              <input type="checkbox" id="monthly_bydaywday_mo" value="MO" /> Lundi
-                            </label>
-                            <label class="btn btn-primary">
-                              <input type="checkbox" id="monthly_bydaywday_tu" value="TU" /> Mardi
-                            </label>
-                            <label class="btn btn-primary">
-                              <input type="checkbox" id="monthly_bydaywday_we" value="WE" /> Merecredi
-                            </label>
-                            <label class="btn btn-primary">
-                              <input type="checkbox" id="monthly_bydaywday_th" value="TH" /> Jeudi
-                            </label>
-                            <label class="btn btn-primary">
-                              <input type="checkbox" id="monthly_bydaywday_fr" value="FR" /> Vendredi
-                            </label>
-                            <label class="btn btn-primary">
-                            <input type="checkbox" id="monthly_bydaywday_sa" value="SA" /> Samedi
-                            </label>
-                            <!--<label class="btn btn-primary">-->
-                            <!--  <input type="checkbox" id="monthly_bydaywday_su" value="SU" /> Di-->
-                            <!--</label>-->
-                           </div>
-                            </div>
-                           <div class="form-inline" id="freq_monthly_bymonthday">
-                            <div class="btn-group" data-toggle="buttons" id="monthly_bymonthday">
-                            <label class="btn btn-primary" style="width: 40px; border-radius: 0px;">
-                              <input type="checkbox" id="monthly_bymonthday_1" value="1" />1
-                            </label>
-                            <label class="btn btn-primary" style="width: 40px;">
-                              <input type="checkbox" id="monthly_bymonthday_2" value="2" />2
-                            </label>
-                            <label class="btn btn-primary" style="width: 40px;">
-                              <input type="checkbox" id="monthly_bymonthday_3" value="3" />3
-                            </label>
-                            <label class="btn btn-primary" style="width: 40px;">
-                              <input type="checkbox" id="monthly_bymonthday_4" value="4" />4
-                            </label>
-                            <label class="btn btn-primary" style="width: 40px;">
-                              <input type="checkbox" id="monthly_bymonthday_5" value="5" />5
-                            </label>
-                            <label class="btn btn-primary" style="width: 40px;">
-                              <input type="checkbox" id="monthly_bymonthday_6" value="6" />6
-                            </label>
-                            <label class="btn btn-primary" style="width: 40px;">
-                              <input type="checkbox" id="monthly_bymonthday_7" value="7" />7
-                            </label>                      
-                            <br/>
-                            <label class="btn btn-primary" style="width: 40px;">
-                              <input type="checkbox" id="monthly_bymonthday_8" value="8" />8
-                            </label>
-                            <label class="btn btn-primary" style="width: 40px;">
-                              <input type="checkbox" id="monthly_bymonthday_9" value="9" />9
-                            </label>
-                            <label class="btn btn-primary" style="width: 40px;">
-                              <input type="checkbox" id="monthly_bymonthday_10" value="10" /> 10
-                            </label>
-                            <label class="btn btn-primary" style="width: 40px;">
-                              <input type="checkbox" id="monthly_bymonthday_11" value="11" /> 11
-                            </label>
-                            <label class="btn btn-primary" style="width: 40px;">
-                              <input type="checkbox" id="monthly_bymonthday_12" value="12" /> 12
-                            </label>
-                            <label class="btn btn-primary" style="width: 40px;">
-                              <input type="checkbox" id="monthly_bymonthday_13" value="13" /> 13
-                            </label>
-                            <label class="btn btn-primary" style="width: 40px;">
-                              <input type="checkbox" id="monthly_bymonthday_14" value="14" /> 14
-                            </label>
-                           
-                            <br/>
-                            
-                            <label class="btn btn-primary" style="width: 40px;">
-                              <input type="checkbox" id="monthly_bymonthday_15" value="15" /> 15
-                            </label>
-                            <label class="btn btn-primary" style="width: 40px;">
-                              <input type="checkbox" id="monthly_bymonthday_16" value="16" /> 16
-                            </label>
-                            <label class="btn btn-primary" style="width: 40px;">
-                              <input type="checkbox" id="monthly_bymonthday_17" value="17" /> 17
-                            </label>
-                            <label class="btn btn-primary" style="width: 40px;">
-                              <input type="checkbox" id="monthly_bymonthday_18" value="18" /> 18
-                            </label>
-                            <label class="btn btn-primary" style="width: 40px;">
-                              <input type="checkbox" id="monthly_bymonthday_19" value="19" /> 19
-                            </label>
-                            <label class="btn btn-primary" style="width: 40px;">
-                              <input type="checkbox" id="monthly_bymonthday_20" value="20" /> 20
-                            </label>
-                            <label class="btn btn-primary" style="width: 40px;">
-                              <input type="checkbox" id="monthly_bymonthday_21" value="21" /> 21
-                            </label>
-                           
-                            <br/>
-                            
-                            <label class="btn btn-primary" style="width: 40px;">
-                              <input type="checkbox" id="monthly_bymonthday_22" value="22" /> 22
-                            </label>
-                            <label class="btn btn-primary" style="width: 40px;">
-                              <input type="checkbox" id="monthly_bymonthday_23" value="23" /> 23
-                            </label>
-                            <label class="btn btn-primary" style="width: 40px;">
-                              <input type="checkbox" id="monthly_bymonthday_24" value="24" /> 24
-                            </label>
-                            <label class="btn btn-primary" style="width: 40px;">
-                              <input type="checkbox" id="monthly_bymonthday_25" value="25" /> 25
-                            </label>
-                            <label class="btn btn-primary" style="width: 40px;">
-                              <input type="checkbox" id="monthly_bymonthday_26" value="26" /> 26
-                            </label>
-                            <label class="btn btn-primary" style="width: 40px;">
-                              <input type="checkbox" id="monthly_bymonthday_27" value="27" /> 27
-                            </label>
-                            <label class="btn btn-primary" style="width: 40px;">
-                              <input type="checkbox" id="monthly_bymonthday_28" value="28" /> 28
-                            </label>
-                           
-                            <br/>
-                            
-                            <label class="btn btn-primary" style="width: 40px;">
-                              <input type="checkbox" id="monthly_bymonthday_29" value="29" /> 29
-                            </label>
-                            <label class="btn btn-primary" style="width: 40px;">
-                              <input type="checkbox" id="monthly_bymonthday_31" value="31" /> 30
-                            </label>
-                            <label class="btn btn-primary" style="width: 40px;">
-                              <input type="checkbox" id="monthly_bymonthday_31" value="31" /> 31
-                            </label>
-                            <label class="btn btn-primary" style="width: 157px;" >
-                              <input type="checkbox" id="monthly_bymonthday_-1" value="-1" /> dernier
-                            </label>
-                            
-                            <br/>
-                            <label class="btn btn-primary" style="width: 138px;">
-                              <input type="checkbox" id="monthly_bymonthday_-2" value="-2" /> av.-dernier
-                            </label>
-                            <label class="btn btn-primary" style="width: 138px; border-radius: 0px;">
-                              <input type="checkbox" id="monthly_bymonthday_-3" value="-3" /> av.-av.-dernier
-                            </label>
-                           </div>
-                            
-                          </div>
-                          
-                          
-                          
-                          <br/>
-                          
-                        </div>
-                    </div>
-                    
-                  </div>
-                  </div>
-</div>
-                </div>
-              <div class="modal-footer">
-                <button aria-hidden="true" data-dismiss="modal" id="btndeleteevent" onclick="confirm_delete_event();" class="btn">Supprimer</button>
-                <button aria-hidden="true" data-dismiss="modal" class="btn">Annuler</button> <button onclick="save_event();" id="btn_save_event" class="btn btn-primary">Accepter</button>
-              </div>
-              </div>
-            </div>
-          </div>
-        <div class="modal fade" id="confirm_delete_event">
-          <div class="modal-dialog">
-            <div class="modal-content">
-              <div class="modal-header">
-                <button data-dismiss="modal" class="close" type="button"><span aria-hidden="true">x</span><span class="sr-only">Close</span></button>
-
-                <h4 class="modal-title">Supprimer Activité</h4>
-              </div><!-- dialog contents -->
-
-              <div class="modal-body">
-                Êtes vous sûre de supprimer cette Activité?<br>
-                
-              </div><!-- dialog buttons -->
-
-              <div class="modal-footer">
-                <button aria-hidden="true" data-dismiss="modal" class="btn">Non</button> <button onclick="delete_event();" class="btn btn-primary">Oui</button>
-              </div>
-            </div>
-          </div>
-        </div>
-<!-- EVENT DLG end -->
-        <div class="modal fade" id="edit_vacancy">
-          <div class="modal-dialog" style="width: 800px; max-width: 800px;">
-            <div class="modal-content">
-              <div class="modal-header">
-                <button data-dismiss="modal" class="close" type="button"><span aria-hidden="true">x</span><span class="sr-only">Close</span></button>
-                <h4 class="modal-title">Editer Congé</h4>
-              </div>
-              <div class="modal-body" style="height: 410px; max-height: 410px; ">
-<div id="frmeditvacancy">
-                  <input type="hidden" value="0" id="uuid" />
-                  <input type="hidden" value="" id="staffuuid" />
-                  <!--<div class="form-inline row">-->
-                  <!--  <label for="location" class="col-md-2">Lieu</label>-->
-                  <!--  <input type="text" value="" id="location"  nullable="true" class="form-control col-md-8" style="width: 80%;">-->
-                  <!--</div>-->
-                  
-                  <div class="form-inline row">
-                    <label for="dailyduration" class="col-md-3">Journée</label>
-                    <select value="" id="dailyduration"  class="form-control" onchange="setdailydurationfields();">
-                      <option value="1.0">Journée(s) complet(s)</option>
-                      <option value="0.4">demi(s) Journée(s)</option>
-                      <option value="0.">quelques heures</option>
-                    </select>
-                  </div>
-                  
-                    <div class="row form-inline">
-                    <label class="col-md-3">Date début</label>
-                    <div id="dt_vacdatefrom" class="input-group date">
-                      <input type="date" class="form-control" value="" limits="1" placeholder="dd.mm.yyyy" id="vacdatefrom"><span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span>
-                    </div>
-                  </div>
-                  <div class="row form-inline">
-                    <label class="col-md-3">Date fin</label>
-                    <div id="dt_vacdateto" class="input-group date">
-                      <input type="date" class="form-control" value="" limits="1" placeholder="dd.mm.yyyy" id="vacdateto"><span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span>
-                    </div>
-                  </div>
-                  
-                  <div id="ftimefrom" class="row form-inline">
-                  
-                    <label   class="col-md-3">heure début</label>
-                    <div class="input-group bootstrap-timepicker time">
-                      <input type="text" class="form-control timepicker" placeholder="" value="" id="timefrom">
-                    </div>
-                  </div>
-                  <div class="form-inline row" id="fhours">
-                    <label for="description" class="col-md-3">nbr. d'heures</label>
-                    <input type="text" value="" id="hours"  nullable="true" class="form-control col-md-6" style="width: 20%;">
-                               
-                  </div>
-                  
-                  <div class="form-inline row">
-                    <label for="type" class="col-md-3">Type de congé</label>
-                    <select id="type" value="">
-                      <option value="0">Congé normal</option>
-                      <option value="1">Congé expetionelle</option> 
-                      <option value="-1">Congé de maladie</option>
-                    </select>          
-                  </div>
-                  <div class="form-inline row">
-                    <label for="description" class="col-md-3">Description</label>
-                    <input type="text" value="" id="description"  nullable="true" class="form-control col-md-6" style="width: 70%;">
-    
-                  </div>
-                  <div class="row" style="height: 120px;"></div>
-                </div>
-              </div>
-              <div class="modal-footer">
-                <button aria-hidden="true" onclick="accept_vacancy();" data-dismiss="modal" id="btnacceptvacancy" class="btn">Valider Congé</button>
-                <button aria-hidden="true" data-dismiss="modal" class="btn">Annuler</button>
-                <button onclick="save_vacancy();" class="btn btn-primary">Accepter</button>
-              </div>
-              </div>
-            </div>
-          </div>
-          <div class="modal fade" id="confirm_delete_vacancy">
-          <div class="modal-dialog">
-            <div class="modal-content">
-              <div class="modal-header">
-                <button data-dismiss="modal" class="close" type="button"><span aria-hidden="true">x</span><span class="sr-only">Close</span></button>
-
-                <h4 class="modal-title">Supprimer Congé</h4>
-              </div><!-- dialog contents -->
-
-              <div class="modal-body">
-                Êtes vous sûre de supprimer ce congé?<br>
-                
-              </div><!-- dialog buttons -->
-
-              <div class="modal-footer">
-                <button aria-hidden="true" data-dismiss="modal" class="btn">Non</button> <button onclick="delete_vacancy();" class="btn btn-primary">Oui</button>
-              </div>
-            </div>
-          </div>
-        
-        
-      </div>
-  <script src="../../../oldvendor/js/jquery.min.js" type="text/javascript"></script>
-  <script src="../../../oldvendor/js/bootstrap.min.js" type="text/javascript"></script>
-  <script src="../../../vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
-  <script src="../../../vendor/bootstrap-table/locale/bootstrap-table-fr-FR.js" type="text/javascript"></script> 
-  <script src="../../../oldvendor/js/moment-with-locales.js" type="text/javascript"></script>
-  <script src="../../../oldvendor/js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
-  <script src="../../../oldvendor/js/jquery.minicolors.min.js" type="text/javascript"></script>
-  <script src="../../../vendor/rrule/rrule.js" type="text/javascript"></script>
-  <script src="../../../vendor/rrule/nlp.js" type="text/javascript"></script>
-  <script src="../../../js/webpreferences.js" type="text/javascript"></script>
-  <script src="../../../js/webdatabase.js" type="text/javascript"></script>
-  <script src="../../../js/module_functions.js" type="text/javascript"></script>
-  <script src="../../../js/labels.js" type="text/javascript"></script>
-  <script src="js/coworker.js" type="text/javascript"></script>
-</body>
-</html>
diff --git a/TODO/modules_todo/staff/js/coworker.js b/TODO/modules_todo/staff/js/coworker.js
deleted file mode 100644 (file)
index 9d005d8..0000000
+++ /dev/null
@@ -1,954 +0,0 @@
-//Source-code licensed under EUPL v1.2 ( Copyright 2019 By DKS s.à r.l. - Kilian Saffran - Luxembourg )
-var pconfig = {};
-var delplan = null;
-var delvacation = null;
-var wh= window.innerHeight -320;
-var curdatediff = null;
-var redate = /\d\d.\d\d.\d\d\d\d/;
-var curfreq ={};
-var maxdayhours = null;
-var maxhalfdayhours = null;
-var tblvac = null;
-//var lictype = parent.apppref.getpreference("support.lictype"); 
-
-function initdata() {
-  load_helpers();
-  var sp = getSearchParams();
-  pconfig = parent.apppref.getpreference("coworker");
-  if (sp.uuid){
-    pconfig.uuid = sp.uuid; 
-  }
-  if (pconfig == null) {
-    pconfig = {};
-  }
-  parent.appdb.dbexec("update vacancycalendar set vacyear=strftime('%Y',datefrom) where vacyear is null;");
-  //"get CoWorker cfg:" +JSON.stringify(pconfig) + "\n");
-  if (!pconfig.year) {
-    pconfig.year=new Date().getFullYear();
-  }
-  if (!pconfig.printlayout) {
-    pconfig.printlayout = 'list';
-    parent.apppref.setpreference("coworker",pconfig);
-  }
-  var cdatasql = "SELECT jobtitle, prename, surname, address, zip, city, country, strftime('%d.%m.%Y',entrydate) as entrydate, strftime('%d.%m.%Y',exitdate) as exitdate, iban, bic, accountname, phone, email, uuid,color,weekhours,maxdayhours,case when password is not null and length(password) > 3 then 1 else 0 end as passwordset  FROM staff where uuid='" + pconfig.uuid + "';";
-  var cdata = parent.appdb.dbquery(cdatasql);
-  cdata = cdata.sqldata[0];
-  for (var ci in cdata) {
-    if (document.getElementById("staff_" + ci)) {
-      document.getElementById("staff_" + ci).setAttribute('value', cdata[ci]);
-    }
-
-  }
-  
-  // var crdata = parent.appdb.dbquery("select stafflist from creche;");
-  // if ((crdata) && (crdata.sqldata[0].stafflist == "1")){
-       //   $("#pwddata").hide();
-  // }
-  // if (cdata) {
-  //   set_infoheader(cdata.prename + " " + cdata.surname);
-  // }
-  $('#staff_color').minicolors({theme:'bootstrap'});
-  set_selectyears();
-  //load_staff_selection('staffuuid');
-
-  if (pconfig && pconfig.activetab) {
-    $('a[href="#'+pconfig.activetab+'"]').tab('show');
-  }else{
-    $('a[href="#vacancy"]').tab('show');
-    pconfig.activetab = 'vacancy';
-  }
-  
-//  if (pconfig && pconfig.vacancyunit){
-//    //dump("has vacancy unit:" + pconfig.vacancyunit + "\n");
-//    $('#vacancy_unit').val(pconfig.vacancyunit);
-//  }else {
-    pconfig.vacancyunit = "hours";
-//    $('#vacancy_unit').val("days");
-//  }
-    
-
-}
-
-$('#frmeditvacancy #vacdatefrom').on("blur",function (e) {
-  var ok = true;
-  if ($('#frmeditvacancy #vacdatefrom').val().match(redate)) {
-    $('#btn_save_vacancy').removeAttr("disabled");
-  }else {
-    ok = false;
-    $('#btn_save_vacancy').attr("disabled","1");
-  }
-  if ((ok == true) && ($('#frmeditvacancy #vacdateto').val() != '')) {
-    var tmpdt1 = encodeparam($('#frmeditvacancy #vacdatefrom').val(),'date');
-    var nd = new Date(tmpdt1.replace(/'/g,''));
-    var xd = new Date(nd.getFullYear(),nd.getMonth(),nd.getDate() + curdatediff);
-    $('#frmeditvacancy #vacdateto').val(xd.toISOString().substring(0,10));
-    var tmpdt2 = encodeparam($('#frmeditvacancy #vacdateto').val(),'date');
-    if (tmpdt1 > tmpdt2) {
-      $('#btn_save_vacancy').attr("disabled","1");
-    } else {
-      $('#btn_save_vacancy').removeAttr("disabled");
-    }
-    
-  }
-});
-$('#frmeditvacancy #vacdateto').on("blur",function (e) {
-  var ok = true;
-  if ($('#frmeditvacancy #vacdateto').val().match(redate)) {
-    $('#btn_save_vacancy').removeAttr("disabled");
-  }else {
-    ok = false;
-    $('#btn_save_vacancy').attr("disabled","1");
-  }
-  curdatediff=daysBetween(new Date(encodeparam($('#frmeditvacancy #vacdatefrom').val(),'date').replace(/'/g,'')),new Date(encodeparam($('#frmeditvacancy #vacdateto').val(),'date').replace(/'/g,''))); 
-  if ((ok == true) && ($('#frmeditvacancy #vacdateto').val() != '')) {
-    var tmpdt1 = encodeparam($('#frmeditvacancy #vacdatefrom').val(),'date');
-    var tmpdt2 = encodeparam($('#frmeditvacancy #vacdateto').val(),'date');
-    if (tmpdt1 > tmpdt2) {
-      $('#btn_save_vacancy').attr("disabled","1");
-    } else {
-      $('#btn_save_vacancy').removeAttr("disabled");
-    }
-    
-  }
-});
-$('#dailyduration').on('change',function(e){
-  if ($('#dailyduration').val() == "1.0"){
-    $('#frmeditvacancy #hours').val(maxdayhours);
-  }
-  if ($('#dailyduration').val() == "0.4"){
-    $('#frmeditvacancy #hours').val(maxhalfdayhours);
-  }
-});
-$('#staff_color').on('change',function(e){
-  saveonfocusout('staff_color');
-});
-
-$("#weekly_byday :input").change(function() {
-  if (this.checked) {
-    this.setAttribute("checked",true);
-  }else {
-    this.removeAttribute("checked");
-  }
-
-});
-$("#monthly_bydaypos :input").change(function() {
-
-  if (this.checked) {
-    this.setAttribute("checked",true);
-  }else {
-    this.removeAttribute("checked");
-  }
-
-});
-$("#monthly_bydaywday :input").change(function() {
-
-  if (this.checked) {
-    this.setAttribute("checked",true);
-  }else {
-    this.removeAttribute("checked");
-  }
-
-});
-$("#monthly_bymonthday :input").change(function() {
-
-  if (this.checked) {
-    this.setAttribute("checked",true);
-  }else {
-    this.removeAttribute("checked");
-  }
-
-});
-$("#monthly_by :input").change(function() {
-  var xd = this.id.split("_");
-  curfreq.freqtype=xd[2];
-
-    this.setAttribute("checked",true);
-
-  $('#freq_monthly_byday').hide();
-  $('#freq_monthly_bymonthday').hide();
-  $('#pnl_monthly_byday').removeAttr("checked");
-  $('#pnl_monthly_bymonthday').removeAttr("checked");
-
-  $('#freq_' + this.value).show();
-
-});
-
-$('#frmeditevent #datefrom').on("blur",function (e) {
-  var ok = true;
-  if ($('#frmeditevent #datefrom').val().match(redate)) {
-    $('#btn_save_event').removeAttr("disabled");
-  }else {
-    ok = false;
-    $('#btn_save_event').attr("disabled","1");
-  }
-  if ((ok == true) && ($('#frmeditevent #dateto').val() != '')) {
-    var tmpdt1 = encodeparam($('#frmeditevent #datefrom').val(),'date');
-    var tmpdt2 = encodeparam($('#frmeditevent #dateto').val(),'date');
-    if (tmpdt1 >= tmpdt2) {
-      $('#btn_save_event').attr("disabled","1");
-    } else {
-      $('#btn_save_event').removeAttr("disabled");
-    }
-    
-  }
-});
-$('#frmeditevent #dateto').on("blur",function (e) {
-  var ok = true;
-  if ($('#frmeditevent #dateto').val().match(redate)) {
-    $('#btn_save_event').removeAttr("disabled");
-  }else {
-    ok = false;
-    $('#btn_save_event').attr("disabled","1");
-  }
-  if ((ok == true) && ($('#frmeditevent #dateto').val() != '')) {
-    var tmpdt1 = encodeparam($('#frmeditevent #datefrom').val(),'date');
-    var tmpdt2 = encodeparam($('#frmeditevent #dateto').val(),'date');
-
-    if (tmpdt1 >= tmpdt2) {
-      $('#btn_save_event').attr("disabled","1");
-    } else {
-      $('#btn_save_event').removeAttr("disabled");
-    }
-    
-  }
-});
-
-$('.selyear').on( "change", function(e){ 
-  e.preventDefault();
-
-  $(".selyear").val($(this).val());
-  pconfig.year = $(this).val();
-  parent.apppref.setpreference("coworker",pconfig);
-  if ($(this).attr('id') == "year_organisation") {
-    load_event_data();
-  }else if ($(this).attr('id') == "year_vacancy") {
-    load_table_vacancy();
-  }
-});
-
-$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
-     var tn =  e.target.toString();
-     pconfig.activetab = tn.substring(tn.lastIndexOf("#")+1);
-    
-     parent.apppref.setpreference("coworker",pconfig);
-     if (pconfig.activetab == 'activity') {
-       load_event_data();
-     }
-     if (pconfig.activetab == 'vacancy') {
-       load_table_vacancy();
-     }
- });
-
-function load_event_data() {
-  //dump("Load event Table!\n");
-  var where = new Array();
-
-    where.push(" st.uuid in ('"+ pconfig.uuid + "')");
-
-  $("div.panel-daybody").html("");
-  var sql = "SELECT cal.uuid, cal.datefrom, cal.dateto, '<div style=\"display:none;\">' || strftime('%Y%m%d',cal.datefrom) ||'</div>' || strftime('%d.%m.%Y',cal.datefrom) AS tbldatefrom ,strftime('%Y%m%d',cal.datefrom) AS strdatefrom, strftime('%Y%m%d',cal.dateto)   AS strdateto,cal.timefrom, cal.timeto, cal.description, cal.location, cal.color, cal.freq, '[\"' || GROUP_CONCAT(sp.staffuuid,'\",\"') || '\"]' as staffuuid, GROUP_CONCAT(coalesce(st.surname,'') || ' ' || coalesce(st.prename,''), '<br/>' ) as staffnames ,'[\"' || GROUP_CONCAT(st.color,'\",\"') || '\"]' as staffcolors from eventcalendar cal " +" join staffplanning sp on (cal.uuid=sp.eventcalendaruuid " + " AND sp.staffuuid in ('"+ pconfig.uuid +"')) left join staff st on (sp.staffuuid=st.uuid) "+
-  " where (cal.datefrom between '" + $('#year_organisation').val() + "-01-01' and '" + $('#year_organisation').val() + "-12-31' and (cal.dateto >= '" + $('#year_organisation').val() + "-01-01' or cal.dateto is null)) or (cal.dateto between '" + $('#year_organisation').val() + "-01-01' and '" + $('#year_organisation').val() + "-12-31' and cal.datefrom < '" + $('#year_organisation').val() + "-01-01') or ((cal.datefrom <= '" + $('#year_organisation').val() + "-01-01') and ((cal.dateto >= '" + $('#year_organisation').val() + "-12-31') or cal.dateto is null)) "+ ((where.length > 0)?" AND (" + where.join(" or ") + ")":"")+"  group by cal.uuid order by cal.datefrom,cal.dateto;";
-  
-  var caldata = parent.appdb.dbquery(sql);
-
-  caldata = caldata.sqldata;
-  
-  var headerdata = getlabels("act,datefrom,hours,recurrance");
-  $("#tbl_activity").html("");
-  
-  var hrow = headerdata;
-  var tdclass= new Array();
-  var tblheader = '<tr>';
-
-  for (var h=0;h<hrow.length;h++){
-    tdclass.push(headerdata[h].class);
-    tblheader += '<th class="' + headerdata[h].class +'">'+ headerdata[h].title+'</th>';
-  }
-  tblheader += '</tr>';
-  
-  $("#tbl_activity").append("<thead>" + tblheader + "</thead>");
-  $("#tbl_activity").append("<tbody>");
-  var tblbody = [];
-  for (var c in caldata) {
-    var tblrow = "<tr>";
-    tblrow += '<td class="noprint"><button type="button" class="btn btn-primary" onclick="dlg_event({uuid:\''+caldata[c].uuid+'\'},\'upd\');" title="editer"><span class="glyphicon glyphicon-pencil"></span></button></td>';
-    //tblrow += "<td><span style=\"display: none;\">"+caldata[c].description+"</span><strong style=\"color:"+ caldata[c].color +"\">" + caldata[c].description + "</strong></td>";
-    //tblrow += "<td>" + caldata[c].staffnames + "</td>";
-    tblrow += "<td>" + caldata[c].tbldatefrom + "</td>";
-    tblrow += "<td>" + caldata[c].timefrom + "- " + caldata[c].timeto + "</td>";
-
-    var freq2 = caldata[c].freq;
-    if (freq2 != '') {
-
-      freq2 += ';DTSTART='+caldata[c].strdatefrom + 'T000000Z';
-      if (caldata[c].dateto != ''){
-        freq2 += ';UNTIL='+caldata[c].strdateto + 'T000000Z';
-      }
-    }
-
-    try {
-
-    var rule2 = RRule.fromString(freq2);
-
-    
-    tblrow += "<td>" + rule2.toText() + "</td>";
-
-    } catch (ex){
-      //"ERROR! loading data!" + ex  + " FREQ:" + freq2 + "\n");
-    }
-    tblrow += "</tr>";
-    tblbody.push(tblrow);
-  }
-  
-  //load table
-  $("#tbl_activity").append(tblbody.join(''));
-  $("#tbl_activity").append("</tbody>");
-
-  $("#tbl_activity").bootstrapTable({
-    locale: 'fr-FR',
-    pagination: false,
-    search: false,
-    height: wh,
-    toolbar: "#mnuact"
-  });
-  
-}
-
-function load_table_vacancy() {
-  tblvac =null;
-  var yearvacanysql = "select hours from staffvacancydays where staffuuid='"+ pconfig.uuid+"' and vacancyyear='"+ $("#year_vacancy").val() +"';";
-  var yearvac = parent.appdb.dbquery(yearvacanysql);
-  var nvyear = "";
-  if ((yearvac) && (yearvac.sqldata)){
-    nvyear = yearvac.sqldata[0].hours;
-  }
-  $("#vacancyyeartotal").val(nvyear);
-  var vacdatasql = "SELECT '<button type=\"button\" class=\"btn btn-primary\" onclick=\"dlg_vacancy({''uuid'':'''|| uuid || '''},''upd'');\"><span class=\"glyphicon glyphicon-pencil\"></span></button>" +
-  "<button type=\"button\" class=\"btn btn-danger\" onclick=\"confirm_delete_vacancy(''' || uuid || ''');\"><span class=\"glyphicon glyphicon-remove\"></span></button>' AS action," + "vacyear," +
-  "strftime('%d.%m.%Y', datefrom) as datefrom,strftime('%d.%m.%Y', dateto) as dateto,printf(\"%.2f\",dayhours)  as dayhours,totaldays,description," +
-  "case when type = 0 and accepted != '1' then printf(\"%.2f\", hours) else '' end as thnormalnv," +
-       "case when type = 1 and accepted != '1' then printf(\"%.2f\", hours) else '' end as thextranv," +
-       "case when type =-1 and accepted != '1' then printf(\"%.2f\", hours) else '' end as thillnv," +
-       "case when type = 0 and accepted = '1' then printf(\"%.2f\", hours) else '' end as thnormalval," +
-       "case when type = 1 and accepted = '1' then printf(\"%.2f\", hours) else '' end as thextraval," +
-  "case when type =-1 and accepted = '1' then printf(\"%.2f\", hours) else '' end as thillval," +
-       "case when type = 0 then 'normal' when type = 1 then 'exceptionnel' when type =-1 then 'maladie' end as vacancytype" +
-  " FROM (" +
-  "select uuid, vacyear, datefrom, dateto, type, description, accepted, (days-day_to_much-vdays) * (case when hours < maxdayhours then hours when hours > maxdayhours then maxdayhours else hours end ) as hours, "+
-  "case when hours < maxdayhours then hours when hours > maxdayhours then maxdayhours else hours end as dayhours,days-day_to_much-vdays as totaldays " +
-  " from (" +
-  "select vc.uuid,vc.vacyear,vc.datefrom,vc.dateto,vc.type,vc.description,vc.accepted," +
-  "((strftime('%s',vc.dateto) - strftime('%s',vc.datefrom)) /84600) + 1 as days," +
-  "((((strftime('%s',vc.dateto) - strftime('%s',vc.datefrom)) /84600) + 1) / 7) * (7 - (st.weekhours / st.maxdayhours)) as day_to_much," +
-  "(select count(v.vacancydate) from vacancy v where v.vacancydateto is null and strftime('%s',v.vacancydate) not in ('0','6') and v.vacancydate between vc.datefrom and vc.dateto) as vdays,st.weekhours,st.weekhours / maxdayhours as days_per_week,vc.timefrom,vc.timeto,st.maxdayhours, " +
-  "cast(cast(strftime(\"%s\",vc.timeto) as int)- cast(strftime(\"%s\",vc.timefrom) as int) as real)/3600 as hours " +
-  "from vacancycalendar vc join staff st on (vc.staffuuid=st.uuid) where vc.staffuuid='"+ pconfig.uuid+"' and vc.vacyear=" + pconfig.year+"));";
-  
-//jsdump("XXSQL:" + vacdatasql + "\n");
-var vacdata = parent.appdb.dbquery(vacdatasql);
-  var sums = { normal:0,except:0,ill:0,normal_ok:0,except_ok:0,ill_ok:0};
-
-  $("#tbl_vacancy > tbody").html("");
-
-  for (var i in vacdata.sqldata){
-    var row = vacdata.sqldata[i];
-        // sums.all = sums.all + ((row.dayhours != '')?parseFloat(row.dayhours):0.00);
-        sums.normal = sums.normal + ((row.thnormalnv != '')?parseFloat(row.thnormalnv):0.00);
-        sums.except = sums.except + ((row.thextranv != '')?parseFloat(row.thextranv):0.00);
-        sums.ill = sums.ill + ((row.thillnv != '')?parseFloat(row.thillnv):0.00);
-        sums.normal_ok = sums.normal_ok + ((row.thnormalval != '')?parseFloat(row.thnormalval):0.00);
-        sums.except_ok = sums.except_ok + ((row.thextraval != '')?parseFloat(row.thextraval):0.00);
-        sums.ill_ok = sums.ill_ok + ((row.thillval != '')?parseFloat(row.thillval):0.00);
-        var tr = '<tr>';
-        tr += '<td style="width: 120px;">' + row.action + '</td>';
-        tr += '<td style="width: 80px;">' + row.vacyear + '</td>';
-        tr += '<td style="width: 100px;">' + row.datefrom + '</td>';
-        tr += '<td style="width: 100px;">' + row.dateto + '</td>';
-        tr += '<td class="alignright" style="width: 60px;">' + row.totaldays + '</td>';
-        tr += '<td class="alignright" style="width: 60px;">' + row.dayhours + '</td>';
-        tr += '<td style="width: 250px;">' + row.description + '</td>';
-        tr += '<td style="width: 100px;">' + row.vacancytype + '</td>';
-        tr += '<td class="alignright" style="color: red;width: 60px;">' + row.thnormalnv + '</td>';
-        tr += '<td class="alignright" style="color: green;width: 60px;">' + row.thnormalval + '</td>';
-        tr += '<td class="alignright" style="color: red;width: 60px;">' + row.thextranv + '</td>';
-        tr += '<td class="alignright" style="color: green;width: 60px;">' + row.thextraval + '</td>';
-        tr += '<td class="alignright" style="color: red;width: 60px;">' + row.thillnv + '</td>';
-        tr += '<td class="alignright" style="color: green;width: 60px;">' + row.thillval + '</td>';
-        tr += '<tr>';
-        $("#tbl_vacancy > tbody").append(tr);
-
-    }
-    var tfoot = "<tr>"
-    + '<th style="width: 120px;"></th>'
-    + '<th style="width: 80px;"></th>'
-    + '<th style="width: 100px;"></th>'
-    + '<th style="width: 100px;"></th>'
-    + '<th style="width: 60px;"></th>'
-    + '<th style="width: 60px;"></th>'
-    + '<th style="width: 250px;"></th>'
-    + '<th style="width: 100px;"></th>'
-    + '<th class="alignright" style="color: red;width: 60px;">' + sums.normal.toFixed(2) + '</th>'
-    + '<th class="alignright" style="color: green;width: 60px;">' + sums.normal_ok.toFixed(2) + '</th>'
-    + '<th class="alignright" style="color: red;width: 60px;">' + sums.except.toFixed(2) + '</th>'
-    + '<th class="alignright" style="color: green;width: 60px;">' + sums.except_ok.toFixed(2) + '</th>'
-    + '<th class="alignright" style="color: red;width: 60px;">' + sums.ill.toFixed(2) + '</th>'
-    + '<th class="alignright" style="color: green;width: 60px;">' + sums.ill_ok.toFixed(2) + '</th>'
-    +"</tr>";
-    $("#tbl_vacancy > tfoot").html(tfoot);
-
- $("#tbl_vacancy").bootstrapTable({
-    locale: 'fr-FR',
-    pagination: false,
-    search: false,
-    toolbar: "#mnuvac"
-  });
-
-  
-  
-}
-
-function dlg_vacancy(uuid, type) {
-       //select weekhours/5 = max daily hours
-       maxdayhours = (parseFloat($("#staff_weekhours").val())/5).toFixed(2);
-       maxhalfdayhours = (maxdayhours/2).toFixed(2);
-    var evdata = {
-      uuid: 0,
-      description: '',
-      vacdatefrom:new Date().toISOString().substring(0,10),
-      vacdateto:new Date().toISOString().substring(0,10),
-      staffuuid:[pconfig.uuid],
-      timefrom: '00:00',
-      hours: maxdayhours,
-      type:'0',
-      //dailyduration:'1.0',
-      //hourmax: whr
-    };
-    
-    if (type == 'upd') {
-       var evsql = "select uuid,vacdatefrom,vacdateto,timefrom,description,staffuuid,case when hours = '0.00' then '" + maxdayhours +"' else hours end as hours,accepted from (SELECT uuid, strftime(\"%d.%m.%Y\",datefrom) as vacdatefrom, strftime(\"%d.%m.%Y\",dateto) as vacdateto, timefrom, description, '"+pconfig.uuid+"' as staffuuid,type, printf(\"%.2f\",cast((cast(strftime(\"%s\",timeto) as int)- cast(strftime(\"%s\",timefrom) as int))/3600 as real)) as hours,accepted FROM vacancycalendar where uuid='" + uuid.uuid + "');";
-     //var evsql = "SELECT uuid, strftime(\"%d.%m.%Y\",datefrom) as vacdatefrom, strftime(\"%d.%m.%Y\",dateto) as vacdateto, timefrom, description, '"+pconfig.uuid+"' as staffuuid,type, case when timefrom!=timeto then '0.' || (cast(substr(timeto,1,2) as int) - cast(substr(timefrom,1,2) as int)) else 1.0 end as dailyduration,null as hours,accepted FROM vacancycalendar where uuid='" + uuid.uuid + "';";
-      //dump("EVSQL: " + evsql + "\n");
-      evdata = parent.appdb.dbquery(evsql);
-      evdata = evdata.sqldata[0];
-      if (evdata.type == -1){
-        $("#btnacceptvacancy").hide();
-      }else {
-        $("#btnacceptvacancy").show();
-      }
-      if (evdata.hours >= maxdayhours) {
-         evdata.hours=maxdayhours;
-         $('#dailyduration select').val("1.0");
-      } else if (evdata.hours == maxhalfdayhours){
-         $('#dailyduration select').val("0.4");
-      } else {
-         $('#dailyduration select').val("0.");
-      }
-
-    }else {
-       $('#dailyduration select').val("1.0");
-    }
-    for (var w in evdata) {
-      if ((w == 'datefrom') || (w == 'dateto')) {
-        w='vac' + w;
-      }
-      
-      if ($("#frmeditvacancy #" + w)) {
-        //dump(w + "->"+evdata[w]+"\n");
-         if (w == "type"){
-                 $("#frmeditvacancy #" + w + " select").val(evdata[w]);
-         } else {
-                 $("#frmeditvacancy #" + w).val(evdata[w]);  
-         }
-         
-        
-      }
-      
-    }
-    
-    setdailydurationfields();
-    $("#edit_vacancy").modal('show');
-}
-
-function confirm_delete_vacancy(uuid) {
-  delvacation = uuid;
-  $("#confirm_delete_vacancy").modal('show');
-  return false;
-}
-
-function delete_vacancy() {
-  var delsql = "DELETE FROM vacancycalendar where uuid='" + delvacation+"';";
-  parent.appdb.dbexec(delsql);
-  load_table_vacancy();
-  delvacancy=null;
-  $("#confirm_delete_vacancy").modal('hide');
-  
-  return false;
-}
-
-function setdailydurationfields() {
-  var dd = $('#dailyduration :selected').val();
-  if (dd=='1.0') {
-    //$("#ftimefrom").hide();
-    $("#hours").prop("disabled",true);
-  }else if (dd=='0.4') {
-    //$("#ftimefrom").show();
-    $("#hours").prop("disabled",true);
-  }else if (dd=='0.') {
-    //$("#ftimefrom").show();
-    $("#hours").prop("disabled",false);
-  }
-}
-
-function save_vacancy() {
-  var type = 'ins';
-  var cuuid = "";
-  if ($("#frmeditvacancy #uuid").val() != 0) {
-    type = 'upd';
-    cuuid = $("#frmeditvacancy #uuid").val();
-  }
-  var evsvdata = {
-                 uuid:cuuid,
-                 datefrom: $("#frmeditvacancy #vacdatefrom").val(),
-                 dateto: $("#frmeditvacancy #vacdateto").val(),
-                 timefrom: $("#frmeditvacancy #timefrom").val(),
-                 hours: $("#frmeditvacancy #hours").val(),
-                 description: $("#frmeditvacancy #description").val(),
-                 staffuuid: $("#frmeditvacancy #staffuuid").val(),
-      type: $("#frmeditvacancy #type").val()
-  }
-  var savesql = "";
-  if (type == 'ins') {
-         savesql = "INSERT INTO vacancycalendar (uuid, datefrom, dateto, timefrom, timeto, description, staffuuid, type,vacyear) VALUES "
-        +"('" + parent.appdb.generate_uuid() + "', date("+encodeparam(evsvdata.datefrom, 'date')+"), date("+encodeparam(evsvdata.dateto, 'date')+"), "+encodeparam(evsvdata.timefrom, 'text')+", strftime(\"%H:%M\",time("+encodeparam(evsvdata.timefrom, 'text')+",'+"+evsvdata.hours+" hours')), "+encodeparam(evsvdata.description, 'text')+", "+encodeparam(evsvdata.staffuuid, 'text')+","+evsvdata.type+","+encodeparam(evsvdata.datefrom, 'year')+");";
-  } else {
-      savesql = "UPDATE vacancycalendar SET vacyear=" + encodeparam(evsvdata.datefrom, 'year') + ", datefrom = date("+encodeparam(evsvdata.datefrom, 'date')+"), dateto = date("+encodeparam(evsvdata.dateto, 'date')+"), timefrom = "+encodeparam(evsvdata.timefrom, 'text')+", timeto = strftime(\"%H:%M\",time("+encodeparam(evsvdata.timefrom, 'text')+",'+"+evsvdata.hours+" hours')), description = "+encodeparam(evsvdata.description, 'text')+", staffuuid = "+encodeparam(evsvdata.staffuuid, 'text')+", type = "+evsvdata.type+" WHERE uuid = '"+evsvdata.uuid+"';";
-  }
-  //dump("VACSAVESQL:" + savesql + "\n");
-  parent.appdb.dbexec(savesql);
-  load_table_vacancy();
-
-  $("#frmeditvacancy #uuid").val("0");
-  $("#edit_vacancy").modal('hide');
-}
-
-
-function set_selectyears() {
-   
-  var years = parent.appdb.dbquery("select strftime('%Y',coalesce(min(entrydate),date('now','-1 year'))) as minyear, strftime('%Y',date('now', '+1 year')) as maxyear  from staff where uuid='"+pconfig.uuid+"';");
-  var minyear = parseInt(years.sqldata[0].minyear);
-  var maxyear = parseInt(years.sqldata[0].maxyear);
-  for (var y=minyear;y<=maxyear;y++){
-    
-    var sel = "";
-    if (y == pconfig.year) {
-      sel=' selected="1" ';
-      
-    }
-    
-    $(".selyear").append("<option value=\""+y+"\""+sel+">"+y+"</option>");
-  }
-  
-}
-
-function saveyearvacdays() {
-  var csel = "select * from staffvacancydays where staffuuid='"+pconfig.uuid+"' and vacancyyear='"+pconfig.year+"';";  
-  var days = 0;
-  var hours = 0;
-  if ($('#vacancyyeartotal').val() === ""){
-    return;
-  }
-  if (pconfig.vacancyunit == "hours"){
-    days = parseFloat($('#vacancyyeartotal').val().replace(',','.')) / 8;
-    hours = $('#vacancyyeartotal').val();
-  }else {
-    days = parseFloat($('#vacancyyeartotal').val().replace(',','.'));
-    hours = parseFloat($('#vacancyyeartotal').val().replace(',','.')) * 8;
-  }
-  var cnum = parent.appdb.dbquery(csel);
-  var inssql = "INSERT INTO staffvacancydays (staffuuid,vacancyyear,days,hours) VALUES ('"+pconfig.uuid+"','"+pconfig.year+"',"+days+","+hours+");";
-  if (cnum.sqldata.length > 0) {
-    inssql = "UPDATE staffvacancydays SET days="+days+",hours="+hours+" where staffuuid='"+pconfig.uuid+"' and vacancyyear='"+pconfig.year+"';";
-  }
-  parent.appdb.dbexec(inssql);
-  //calcvacancy();
-}
-
-
-
-function dlg_event(uuid, type) {
-
-  if (type== "ins") {
-    
-    $('#btndeleteevent').hide();
-    
-  }else {
-    $('#btndeleteevent').show();
-  }
-  $('#frmeditevent #freqinterval').hide();
-  $('#frmeditevent #freqmonthly').hide();
-  $('#frmeditevent #freqweekly').hide();
-  $('#frmeditevent #freq_monthly_byday').show();
-  $('#frmeditevent #freq_monthly_bymonthday').hide();
-  $('#frmeditevent #freq').val("");
-  $('#frmeditevent .active').removeClass('active');
-  if ((type == 'upd') || (type == 'ins')) {
-
-    var evdata = {
-      uuid: '0',
-      description: '',
-      activityuuid:'',
-      location: '',
-      color: '',
-      datefrom:new Date().toISOString().substring(0,10),
-      dateto:'',
-      staffuuid: pconfig.uuid,
-      timefrom: '00:00',
-      timeto: '00:00',
-      freq: '',
-      staffname: $("#staff_prename").val() + " " + $("#staff_surname").val()
-    };
-    //jsdump(JSON.stringify(pconfig) + "\n");
-    //jsdump(JSON.stringify(evdata) + "\n");
-    if (type == 'upd') {
-     var evsql = "SELECT uuid, strftime(\"%d.%m.%Y\",datefrom) as datefrom, strftime(\"%d.%m.%Y\",dateto) as dateto, timefrom, timeto, description, location, color, freq,  '"+ pconfig.uuid+"' as staffuuid FROM eventcalendar ev left join staffplanning st on (ev.uuid=st.eventcalendaruuid) where ev.uuid='" + uuid.uuid + "' group by ev.uuid;";
-      evdata = parent.appdb.dbquery(evsql);
-      evdata = evdata.sqldata[0];
-      evdata['staffname'] = $("#staff_prename").val() + " " + $("#staff_surname").val();
-      if (evdata.freq != '') {
-        var tmpfreq = evdata.freq.split(';');
-        for (var t in tmpfreq){
-          if (tmpfreq[t] != '') {
-            var spl = tmpfreq[t].split("=");
-            evdata[spl[0].toLowerCase()] = spl[1].toLowerCase();
-          }
-        }
-      }
-    }
-    for (var w in evdata) {
-      if ($("#frmeditevent #" + w)) {
-        // if (w == 'staffuuid') {
-        //   if (evdata[w] == '') {
-        //     $("#frmeditevent #" + w).multiselect('select',[]);
-        //   } else {
-        //     $("#frmeditevent #" + w).multiselect('select',evdata[w].split(','));
-        //   }
-          
-        // }
-        // else if (w == 'color') {
-        //   $("#frmeditevent #color").val(evdata[w]);
-        //   $('#frmeditevent #color').minicolors('value',{color: evdata[w]});
-        // }
-        // else {
-          $("#frmeditevent #" + w).val(evdata[w]);  
-        // }
-      }
-    }
-    if ((evdata.freq == 'weekly') && (evdata.byday)) {
-      var bd = evdata.byday.split(',');
-      for (var i in bd){
-        document.getElementById('weekly_byday_' + bd[i]).setAttribute("checked",true);
-        $('#frmeditevent #weekly_byday_' + bd[i]).parent().addClass("active");
-      }
-    }
-    if (evdata.freq == 'monthly') {
-       $('#freq_monthly_byday').hide();
-       $('#freq_monthly_bymonthday').hide();
-       $('#pnl_monthly_byday').removeAttr("checked");
-       $('#pnl_monthly_bymonthday').removeAttr("checked");
-      if (evdata.byday) {
-        document.getElementById('pnl_monthly_byday').setAttribute("checked",true);
-        $('#frmeditevent #pnl_monthly_byday').parent().addClass("active");
-        $('#freq_monthly_byday').show();
-        var bd = evdata.byday.split(',');
-        var adpos = new Array();
-        var awday = new Array();
-        for (var i in bd){
-          var wday = bd[i].substr(bd[i].length-2);
-          var pos = bd[i].substring(0,bd[i].length-2);
-          awday.push(wday.toLowerCase());
-          adpos.push(pos);
-        }
-
-        for (var i in adpos){
-          document.getElementById('monthly_bydaypos_' + adpos[i]).setAttribute("checked",true);
-          $('#frmeditevent #monthly_bydaypos_' + adpos[i]).parent().addClass("active");
-        }
-        for (var i in awday){
-          document.getElementById('monthly_bydaywday_' + awday[i]).setAttribute("checked",true);
-          $('#frmeditevent #monthly_bydaywday_' + awday[i]).parent().addClass("active");
-        }
-      }else if (evdata.bymonthday) {
-        document.getElementById('pnl_monthly_bymonthday').setAttribute("checked",true);
-        $('#frmeditevent #pnl_monthly_bymonthday').parent().addClass("active");
-        $('#freq_monthly_bymonthday').show();
-        var bd = evdata.bymonthday.split(',');
-        for (var i in bd){
-          document.getElementById('monthly_bymonthday_' + bd[i]).setAttribute("checked",true);
-          $('#frmeditevent #monthly_bymonthday_' + bd[i]).parent().addClass("active");
-        }
-      }
-    }
-    setfreq();
-    $("#edit_event").modal('show');
-  } 
-}
-
-
-function save_event() {
-  var sql1 = new Array();
-  var sql2 = new Array();
-  if ($('#timefrom').val() == $('#timeto').val() || $('#timefrom').val() == "00:00" || $('#timeto').val() == "00:00"){
-    errormsg("Erreur","les heures doivent être différent et différent de la valeur 00:00!");
-    return false;
-  }
-  if ($('#timefrom').val() > $('#timeto').val()){
-    errormsg("Erreur","l'heure de début ne peux pas être supérieur à l'heure de fin!");
-    return false;
-  }
-  if (!$('#staffuuid').val()){
-    errormsg("Erreur","Vous devez selectionner au moin 1 membre du staff!");
-    return false;
-  }
-  if ($('#dateto').val() != '' && (encodeparam($('#datefrom').val()) > encodeparam($('#dateto').val()))  ) {
-    errormsg("Erreur","La Date début ne peut pas être supérieur à la date fin!");
-    return false;
-  }
-  var type = 'ins';
-  var cuuid = "";
-  if ($("#frmeditevent #uuid").val() != 0) {
-    type = 'upd';
-    cuuid = $("#frmeditevent #uuid").val();
-  } else {
-    cuuid = parent.appdb.generate_uuid();
-  }
-  var freqdata = {};
-  var cfreq = $("#frmeditevent #freq").val();
-  $("#frmeditevent :input").each(function() {
-    var input = $(this);
-    
-    if (input.attr("id") && (input.attr("id") != "staffuuid") && (input.attr("id") != "staffname")) {
-      if ((input.attr("type") == "checkbox") && (input.attr("id").indexOf(cfreq) >= 0)){
-        var xd = input.attr("id").split("_");
-        if (input.attr("checked")) {
-          if (!freqdata[xd[1]]) {
-            freqdata[xd[1]] = new Array();
-          }
-          freqdata[xd[1]].push(input.val());
-        }
-      }
-      else if ((input.attr("type") == "radio") && (input.attr("id").indexOf(cfreq) >= 0)) {
-        var xd = input.attr("id").split("_");
-        if (input.attr("checked")) { 
-          freqdata['freqtype'] = xd[2];
-        }
-      }
-      else if ((input.attr("type") != "checkbox") && ((input.attr("type") != "radio"))){
-        if ((input.attr("id") == 'interval') || (input.attr("id") == 'freq')) {
-          freqdata[input.attr("id")] = input.val();
-        } else if ((type == 'ins') && (input.attr("id") != 'staffuuid')) {
-          
-          sql1.push('"' + input.attr("id") + '"');
-          if (input.attr("id") == 'uuid') {
-            if (input.val() == "" || input.val() == "0") {
-              sql2.push("'" + cuuid + "'");
-            } else {
-              sql2.push("'" + input.val() + "'");
-            }
-          } else {
-            var ival = encodeparam(input.val(), input.attr('type'));
-            sql2.push(ival);
-          }
-        } else {
-          if ((input.attr("id") != 'uuid') && (input.attr("id") != 'staffuuid')){
-            var ival = encodeparam(input.val(), input.attr('type'));
-            sql2.push('"' + input.attr("id") + '"=' + ival);
-          }
-        }
-      }
-    }
-
-  });
-  if (!freqdata.freqtype) {
-    freqdata['freqtype'] = curfreq.freqtype;
-  }
-
-  var strfreq ="";
-  if (cfreq != "") {
-    strfreq='FREQ=' + cfreq.toUpperCase()+';INTERVAL=' + freqdata.interval +';';
-    if ((cfreq == 'weekly') && (freqdata.byday)){
-      strfreq += 'BYDAY=' + freqdata.byday.join(","); 
-    }
-    if ((cfreq == 'monthly') && (freqdata.bydaypos) || ((freqdata.bydaywday)) || (freqdata.bymonthday)){
-      strfreq += freqdata.freqtype.toUpperCase() + '=';
-      if (freqdata.freqtype == 'bymonthday') {
-        strfreq += freqdata.bymonthday.join(',') + ";"
-      }else {
-        var abyday = new Array();
-        for (var p in freqdata.bydaypos){
-          for (var w in freqdata.bydaywday){
-            abyday.push(freqdata.bydaypos[p] + freqdata.bydaywday[w]);
-          }
-        }
-        strfreq += abyday.join(",");
-      }
-    }
-    if (strfreq.slice(-1) == ';') {
-      strfreq = strfreq.substring(0,strfreq.length-1);
-    }
-  }
-  var staffuuids = $('#staffuuid').val();
-  var delsql = "";
-  var xsql = [];
-  if (type != 'ins') {
-   xsql.push("DELETE FROM staffplanning where eventcalendaruuid = '"+cuuid+"';");
-  }
-  var staffinssql = "";
-  
-  if (staffuuids && (staffuuids.length != 0)) {
-    
-    staffinssql = "INSERT INTO staffplanning (eventcalendaruuid,staffuuid) VALUES ";
-    var tmps = [];
-    var curcoworkerok = false;
-    for (var s in staffuuids){
-      if (staffuuids[s] == pconfig.uuid){
-        curcoworkerok = true;
-      }
-      tmps.push("('"+cuuid+"','"+staffuuids[s]+"')");
-    }
-    if (!curcoworkerok){
-      tmps.push("('"+cuuid+"','"+pconfig.uuid+"')");
-    } 
-    staffinssql += tmps.join(',') + ";";  
-    xsql.push(staffinssql);
-  }
-  if (staffuuids.length == 0){
-    staffinssql = "INSERT INTO staffplanning (eventcalendaruuid,staffuuid) VALUES ('"+cuuid+"','"+pconfig.uuid+"');";
-    xsql.push(staffinssql);
-  }
-  
-
-  
-  if (type == 'upd') {
-    sql2.push('freq=' + encodeparam(strfreq));
-    xsql.push("UPDATE eventcalendar SET " + sql2.join(',') + " where \"uuid\"='" + cuuid + "';");
-  } else {
-    sql1.push('freq');
-    sql2.push(encodeparam(strfreq));
-    xsql.push("INSERT INTO eventcalendar (" + sql1.join(',') + ") VALUES (" + sql2.join(',') + ");");
-  }
-  dump(JSON.stringify(xsql));
-  for (var i in xsql){
-         parent.appdb.dbexec(xsql[i]);
-  }
-  
-  load_event_data();
-   
-  $("#frmeditevent #uuid").val("0");
-  $("#edit_event").modal('hide');
-}
-
-function confirm_delete_event() {
-  $("#confirm_delete_event").modal('show');
-  return false;
-}
-
-function delete_event() {
-       parent.appdb.dbexec("DELETE FROM eventcalendar where uuid='" + $('#frmeditevent #uuid').val()+"';");
-       parent.appdb.dbexec("DELETE FROM staffplanning where eventcalendaruuid='" + $('#frmeditevent #uuid').val()+"';");
-  load_event_data();
-  $("#confirm_delete_event").modal('hide');
-  
-  return false;
-}
-
-
-
-function setfreq() {
-
-  curfreq.freq = $('#freq option:selected').val();
-
-  $('#freqinterval').hide();
-  $('#freqmonthly').hide();
-  $('#freqweekly').hide();
-  if (curfreq.freq != "") {
-
-    $('#lblfreq').text(lblfreq[curfreq.freq]);
-    $('#freqinterval').show();
-    if (curfreq.freq !=  'daily') {
-      $('#freq' + curfreq.freq).show();
-    }
-  }
-  
-}
-
-// function load_staff_selection(objid,option){
-//   var stdata = parent.appdb.dbquery("select uuid, coalesce(surname,'') || ' ' || coalesce(prename,'') as name,case when color is null then '#000' else color end as color from staff order by surname,prename");
-
-//   stdata = stdata.sqldata;
-//   for (var s in stdata){
-//     $('#' + objid).append('<option value="'+ stdata[s].uuid+'">&lt;span style="color: '+stdata[s].color+';" &gt;' +stdata[s].name+ '&lt;/span&gt;</option>');
-//   }
-  
-//     var copt = {};
-//     if (option) {
-//       copt = option;
-//     }
-//     copt['enableHTML'] = true;
-//     copt['nonSelectedText']="Sélectionner un(e) employé(e)...";
-//     copt['numberDisplayed']=5;
-//     copt['allSelectedText']='Tous';
-//     copt['nSelectedText']=' selections';
-    
-//     $('#' + objid).multiselect(copt);
-  
-// }
-
-function accept_vacancy(){
-    var cuuid = "";
-    if ($("#frmeditvacancy #uuid").val() != 0) {
-      type = 'upd';
-      cuuid = $("#frmeditvacancy #uuid").val();
-    }
-    var xsql = "UPDATE vacancycalendar SET accepted='1' where \"uuid\"='" + cuuid + "';";
-    parent.appdb.dbexec(xsql);
-    load_table_vacancy();
-
-    $("#frmeditvacancy #uuid").val("0");
-    $("#edit_vacancy").modal('hide');
-}
-
-function getlastyearsrest(){
-    var weekhours = $('#staff_weekhours').val();
-    if (weekhours === '') {
-      $("#vacancylastyearrest").val(0);
-      return;
-    }
-    var df = new Date(pconfig.year-1,0,1);
-    var dt = new Date(pconfig.year-1,11,31);
-    var vcalcrestsql = "select (select hours from staffvacancydays where staffuuid='"+pconfig.uuid+ "' and vacancyyear="+df.getFullYear()+")-SUM(dayhours) AS hours from (" +
-    "select vd.daydate,case when daydate <= date('now')   then 1 else 0 end as taken,case when vc.timefrom=vc.timeto then cast ("+weekhours+"/5 as real) else (cast (substr(vc.timeto,1,2) as int) + (cast(substr(vc.timeto,4,5) as int)/60))  - (cast(substr(vc.timefrom,1,2) as int) + (cast(substr(vc.timeto,4,5) as int)/60)) end as dayhours,type,case when type != -1 then accepted else '1' end as accepted "+
-    "from vacancycalendar vc left join ( "+ 
-    "select daydate from ( ";
-    
-    var yd = [];
-    for (var dx=df;dx<=dt;dx.setDate(dx.getDate()+1)){
-      yd.push("select date('"+dx.toISOString().substring(0,10)+"') as daydate");
-    }
-    vcalcrestsql += yd.join(" UNION ") + 
-    ") yd where strftime('%w',daydate) not in ('0','6') and daydate not in (select vacancydate from vacancy where vacancydate between '"+df.getFullYear()+"-01-01' and '"+dt.getFullYear()+"-12-31' and vacancydateto is null) " +
-    ") vd on (vd.daydate between vc.datefrom and vc.dateto) " +
-    "left join staffvacancydays svd on (vc.staffuuid=svd.staffuuid) " +
-    "where vc.staffuuid='"+pconfig.uuid+ "' and daydate is not null group by daydate) where type in (0,1) and taken=1 and accepted=1 group by taken,accepted;";
-    //dump("SQLREST:" + vcalcrestsql + "\n");
-    var vcalc = parent.appdb.dbquery(vcalcrestsql);
-    //dump(JSON.stringify(vcalc) + "\n");
-    if (vcalc && vcalc.sqldata[0]){
-       
-       $("#vacancylastyearrest").val(vcalc.sqldata[0].hours);
-    }else {
-       $("#vacancylastyearrest").val(0);
-    }
-    return;
-}
diff --git a/TODO/modules_todo/staff/js/staff.js b/TODO/modules_todo/staff/js/staff.js
deleted file mode 100644 (file)
index 1b4b53a..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-//Source-code licensed under EUPL v1.2 ( Copyright 2019 By DKS s.à r.l. - Kilian Saffran - Luxembourg )
-var pconfig = {};
-var delcoworker = null;
-var wh = window.innerHeight - 100;
-var tblstaff = null;
-
-function initdata() {
-
-         loadtable();
-    set_infoheader("");
-    pconfig = parent.apppref.getpreference("staff");
-         if (!pconfig.printlayout) {
-           pconfig.printlayout = 'list';
-           parent.apppref.setpreference("staff", pconfig);
-    }
-    
-       }
-
-function loadtable() {
-  var delbtn = "";
-  if (parent.app.info.modules.stafflist.delete == true){
-    delbtn = "<button type=\"button\" class=\"btn btn-danger\" onclick=\"confirm_delete_coworker(''' || uuid || ''');\" title=\"supprimer\"><span class=\"glyphicon glyphicon-remove\"></span></button>";
-  }
-  var sql = "SELECT '<button type=\"button\" class=\"btn btn-primary\" onclick=\"parent.app.loadpage(''modules/staff/coworker.html'',{uuid:''' || uuid || '''});\" title=\"editer\"><span class=\"glyphicon glyphicon-pencil\"></span></button>"+delbtn+"' as action, coalesce(prename,'') || '<br/>' || coalesce(surname,'') as name,case when color is not null then '<div style=\"width: 50px; height: 30px;background-color: ' || color ||';\"></div>' else null end color, coalesce(address,'')|| '<br/>' || coalesce(zip,'') || ' ' || coalesce(city,'') || '<br/>' || coalesce(country,'') as address, case when phone is not null then '<span class=\"glyphicon glyphicon-earphone\" aria-hidden=\"true\"></span>: ' || phone || '<br/>' else '' end || case when email is not null then '<span class=\"glyphicon glyphicon-envelope\" aria-hidden=\"true\"></span>:' || email else '' end as phonemail, coalesce(jobtitle,'') || '<br/>' || case when entrydate is not null then 'à partir du: ' || strftime('%d.%m.%Y',entrydate) else '' end || case when exitdate is not null then ' jusqu''au: ' || strftime('%d.%m.%Y',exitdate) else '' end as jobtitle FROM staff;";
-  //dump("STAFFSQL:" +sql + "\n");
-  var data = parent.appdb.dbqueryarray(sql);
-
-  var headerdata = getlabels(data.sqlhead.join(","));
-  $("#tbl_staff").html("");
-  tblstaff = $("#tbl_staff").dataTable({
-    "language": {
-      "url": "../../../oldvendor/js/locale/datatable_fr.json"
-    },
-    "data": data.sqldata,
-    "columns": headerdata,
-    "paging": false,
-    "scrollY": wh + "px",
-    "scrollCollapse": true,
-    "ordering": true,
-    "info": false,
-    "filter": true,
-    "destroy": true
-  });
-//  $('#tbl_staff').on('search.dt', function() {
-//    pconfig.filter = tblstaff.api().search();
-//    parent.apppref.setpreference("pageconfig.staff", pconfig);
-//  });
-
-  $('#tbl_staff').on('order.dt', function() {
-    pconfig.order = tblstaff.fnSettings().aaSorting;
-    parent.apppref.setpreference("pageconfig.staff", pconfig);
-
-  });
-//  if (pconfig.filter) {
-//    tblstaff.fnFilter(pconfig.filter);
-//  }
-  if (pconfig.order) {
-    tblstaff.fnSort(pconfig.order);
-  }
-  if (/*(!pconfig.filter) && */ (!pconfig.order)) {
-    tblstaff.fnDraw();
-  }
-}
-
-
-
-function add_coworker() {
-  var newuuid = parent.appdb.generate_uuid();
-  parent.appdb.dbexec("insert into staff (uuid) VALUES ('" + newuuid + "');");
-  parent.app.loadpage('modules/staff/coworker.html',{uuid:newuuid});
-
-}
-
-function confirm_delete_coworker(myuuid) {
-  delcoworker = myuuid;
-  $("#confirm_delete_coworker").modal('show');
-  return false;
-}
-
-function delete_coworker() {
-  //var frmdata = new Object();
-  //parent.appdb.dbexec("DELETE FROM planningstaff where staffuuid='"+delcoworker +"';");
-  var evdel = parent.appdb.dbquery("select eventcalendaruuid,count(staffuuid) as cnt from staffplanning where staffuuid='" + delcoworker + "';");
-
-  parent.appdb.dbexec("DELETE FROM staffvacancydays where staffuuid='" + delcoworker + "';");
-  parent.appdb.dbexec("DELETE FROM vacancycalendar where staffuuid='" + delcoworker + "';");
-  parent.appdb.dbexec("DELETE FROM staffplanning where staffuuid='" + delcoworker + "';");
-  parent.appdb.dbexec("DELETE FROM staff where uuid='" + delcoworker + "';");
-  for (var e in evdel.sqldata) {
-    if (evdel.sqldata[e].cnt == 1) {
-      parent.appdb.dbexec("DELETE FROM eventcalendar where uuid='" + evdel.sqldata[e].eventcalendaruuid + "';");
-    }
-  }
-  //
-  delcoworker = null;
-  loadtable();
-  //
-  $("#confirm_delete_coworker").modal('hide');
-
-}
-
-function load_coworker(couuid){
-  //"coworker uuid:" + couuid + "\n");
-  var cwdata = parent.apppref.getpreference("pageconfig.coworker"); 
-  var cow = new Object();
-  if (cwdata && cwdata !== ""){
-    cow = JSON.parse(cwdata);
-  }  
-  //dump("Current CoWorker cfg:" +JSON.stringify(cow) + "\n");
-  cow.uuid = couuid;
-  //dump("New CoWorker cfg:" +JSON.stringify(cow) + "\n");
-  parent.apppref.setpreference("pageconfig.coworker",cow);
-  globelreq.send_request({page:'coworker',
-                         module:'staff',
-                         data:null,
-                         header:'Employé(e)'});
-  
-}
\ No newline at end of file
diff --git a/TODO/modules_todo/staff/stafflist.html b/TODO/modules_todo/staff/stafflist.html
deleted file mode 100644 (file)
index 6d4c218..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-<!DOCTYPE html>
-
-<html lang="fr">
-<head>
-  <meta charset="utf-8">
-
-  <title>StaffList</title>
-  <meta name="viewport" content="width=device-width, initial-scale=1">
-  
-  <link href="../../../oldvendor/css/bootstrap.min.css" rel="stylesheet" type="text/css">
-  <!--<link href="../../../oldvendor/css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
-  <link href="../../../oldvendor/css/datatables.min.css" rel="stylesheet" type="text/css">
-  <link href="../../../oldvendor/css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
-  <link href="../../../oldvendor/css/glyphicons.css" rel="stylesheet" type="text/css">
-  <link href="../../../oldvendor/css/style.css" rel="stylesheet" type="text/css">
-  <link href="../../../oldvendor/css/modules.css" rel="stylesheet" type="text/css"><!-- Fav and touch icons -->
-  
-</head>
-
-<body>
-    <nav class="navbar navbar-inverse navbar-fixed-top">
-        
-      <div class="">
-        <ul class="nav navbar-nav navbar-left">
-         <li style="padding-top: 7px; padding-left: 10px; color: #fff;font-size: 24px;">Employé(e)s</li>
-            <li style="padding-top: 7px; padding-left: 10px;"><div class="btn-group" role="group" aria-label="topbar" ">
-            <button onclick="add_coworker();" class="btn btn-primary"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span></button>
-            
-           
-          </div>
-        <span class="pagehead" id="pagehead" style="color: #fff"></span></li>
-        </ul>
-      </div>
-      
-    </nav>
-      <div class="container-fluid" style="padding-top: 55px;">
-    <!--<span class="pagehead" id="pagehead">Personnel</span>&nbsp-->
-    <div class="btn-group" style="z-index: 10;">
-    
-    </div>
-    <div style="margin-top: -30px;z-index: -10;">
-    <table id="tbl_staff" class="table table-striped">
-    </table>
-    </div>
-    <div class="modal fade" id="confirm_delete_coworker">
-          <div class="modal-dialog">
-            <div class="modal-content">
-              <div class="modal-header">
-                <button data-dismiss="modal" class="close" type="button"><span aria-hidden="true">x</span><span class="sr-only">Close</span></button>
-
-                <h4 class="modal-title">Supprimer un collaborateur</h4>
-              </div><!-- dialog contents -->
-
-              <div class="modal-body">
-                Êtes vous sûre de supprimer ce collaborateur et tous ces données?<br>
-              </div><!-- dialog buttons -->
-
-              <div class="modal-footer">
-                <button aria-hidden="true" data-dismiss="modal" class="btn">Non</button> <button onclick="delete_coworker();" class="btn btn-primary">Oui</button>
-              </div>
-            </div>
-          </div>
-        </div>
-        </div>
-  
-  <script src="../../../oldvendor/js/jquery.min.js" type="text/javascript"></script>
-  <script src="../../../oldvendor/js/bootstrap.min.js" type="text/javascript"></script>
-  <script src="../../../oldvendor/js/datatables.min.js" type="text/javascript"></script>
-  <script src="../../../js/webpreferences.js" type="text/javascript"></script>
-  <script src="../../../js/webdatabase.js" type="text/javascript"></script>
-  <script src="../../../js/module_functions.js" type="text/javascript"></script>
-  <script src="../../../js/labels.js" type="text/javascript"></script>
-  <script src="js/staff.js" type="text/javascript"></script>
-</body>
-</html>
index 2a93f10..e36a77c 100644 (file)
@@ -22,12 +22,12 @@ sub new {
     #  $self->{$x} = $p->{$x};
     #}
     $self->{dbtype} = 'PgPP'; #PgPP,SQLite
-    #$self->{dbhost} = 'sql629.your-server.de';
-    $self->{dbhost} = 'localhost';
+    $self->{dbhost} = 'sql629.your-server.de';
+    #$self->{dbhost} = 'localhost';
     $self->{dbname} = 'dks_lu';
     $self->{dbuser} = 'dks_lu';
-    $self->{dbpassword} = 'dks_lu';
-               #$self->{dbpassword} = 'DcrWuLd4KU3u68xd';
+    #$self->{dbpassword} = 'dks_lu';
+               $self->{dbpassword} = 'DcrWuLd4KU3u68xd';
     return $self;
 }
 
index bdfc251..b0f92ef 100644 (file)
Binary files a/apps/data/db/lechatpotte.sqlite and b/apps/data/db/lechatpotte.sqlite differ
index 38e1b44..b4d60e2 100644 (file)
Binary files a/apps/data/db/underatert.sqlite and b/apps/data/db/underatert.sqlite differ
index d975011..5d376b5 100644 (file)
@@ -1,9 +1,10 @@
 #!/usr/bin/perl
 
 use strict;
+use File::Basename qw/dirname basename/;
 use lib ('./lib');
 use lib ('./api/lib');
-use File::Basename;
+
 use Template;
 use CGI;
 use CGI::Cookie;
@@ -26,7 +27,8 @@ my $cookie;
 my $sess = ();
 my $se = session->new();
 my $page = "index.tt";
-my $basepath = substr(dirname($0),length($ENV{"DOCUMENT_ROOT"}));
+my $basepath = substr(dirname($ENV{"SCRIPT_FILENAME"}),length($ENV{"DOCUMENT_ROOT"}));
+# my $basepath = $ENV{"DOCUMENT_ROOT"};
 my $filepath = substr($cgi->url({-absolute=>1}),length($basepath)+1); 
 #if (exists($p->{p})){
 if ($filepath ne ""){
@@ -79,21 +81,21 @@ if (($ENV{HTTP_USER_AGENT} !~ /Chrome/) || ($ENV{HTTP_USER_AGENT} =~ /Edge/) ||
 # }
 print $cgi->header(-type=>'text/html', -charset=>"utf-8",-cookie => $cookie);
 
-my $template = Template->new({INCLUDE_PATH => [dirname($0).'/tmpl']});
+my $template = Template->new({INCLUDE_PATH => [dirname($ENV{"SCRIPT_FILENAME"}).'/tmpl']});
 my @lv = split(/\//,$filepath);
 my $absnum = scalar(@lv)-1;
 my $vars->{abspath} = "";
 for (my $i=0;$i<$absnum;$i++){
   $vars->{abspath} .= "../";
 }
-
+$vars->{filepath} = $filepath;
 
 $vars->{basepath} = $basepath;
 $vars->{page} = $page;
 $vars->{pagename} = basename($page);
 $vars->{pagename} =~ s/\.tt$//;
 my ($appname) = $ENV{REQUEST_URI} =~ /.*\/apps\/(\w+)\/.*/;
-# $vars->{requri} = $ENV{REQUEST_URI};
+#$vars->{requri} = $ENV{REQUEST_URI};
 if ($p->{sid} ne ""){
   $vars->{appname} = $appname;
   if (exists($sess->{$appname})){
@@ -113,9 +115,3 @@ $template->process($skl,$vars) || die "Template process failed: ", $template->er
 # for my $header ( keys %headers ) {
 #     print "$header: $headers{$header}<br/>";
 # }
-# for my $e ( keys %ENV ) {
-#     print "ENV: $e: ".$ENV{$e}."<br/>";
-# }
-# print '/*'.Dumper($vars).'*/';
-# print '/*'.Dumper($p).'*/';
-
index b871a9a..c290a08 100644 (file)
@@ -130,10 +130,11 @@ document.addEventListener("keydown", function(e) {
                  
                  
   }
-
+  var https = 'https';
   $(document).ready(function() {
-    app.baseurl = ('https' == document.location.protocol ? 'https' : 'http') + '://' + location.host + location.pathname.substring(0,location.pathname.lastIndexOf('/apps/')+6);
-    var tmpurl = ('https' == document.location.protocol ? 'https' : 'http') + '://' + location.host + location.pathname.substring(0,location.pathname.lastIndexOf('/'));
+
+    app.baseurl = https + '://' + location.host + location.pathname.substring(0,location.pathname.lastIndexOf('/apps/')+6);
+    var tmpurl = https + '://' + location.host + location.pathname.substring(0,location.pathname.lastIndexOf('/'));
     app.appname = tmpurl.substring(app.baseurl.length);
     app.getinfo();
     app.loadsites();
index ee59312..b884dda 100644 (file)
@@ -1,5 +1,6 @@
+var https ='https';
 function logout() {
-  myurl = ('https:' == document.location.protocol ? 'https' : 'http') + '://'+ location.host  + location.path;
+  myurl = https + '://'+ location.host  + '/apps/';
       $.ajax({
           async: false,
           url: myurl,
index 2912353..7f130f3 100644 (file)
@@ -2,7 +2,7 @@ var appdb = {
                dbquery: function(sQuery){
                        var type='querysorted';
       var result= {sqldata:[]};
-      
+      //console.log(sQuery);
 
                        $.ajax({
         encoding:"UTF-8",
diff --git a/apps/lib.par b/apps/lib.par
new file mode 100644 (file)
index 0000000..3013689
Binary files /dev/null and b/apps/lib.par differ
index 8c4a16b..c582742 100644 (file)
       [% END %]
     </div>
   </div>
-      <!-- <button class="btn btn-default"  id="mnubtn_calendar" onclick="app.loadpage('modules/calendar/index.html');"><img src="../img/modules/Calendar.svg" style="width: 32px; height: 32px;"/><br/>Calendrier</button> -->
-      <!-- <button class="btn btn-default"  id="mnubtn_calorganisation" onclick="app.loadpage('modules/calendar/calorganisation.html');" ><img src="../img/modules/Calendar.svg" style="width: 32px; height: 32px;"/><br/>Calendrier Organisation</button> -->
-    <!-- <button class="btn btn-default"  id="mnubtn_calvacancy" onclick="app.loadpage('modules/calendar/calvacancy.html');" ><img src="../img/modules/Calendar.svg" style="width: 32px; height: 32px;"/><br/>Calendrier Congés</button> -->
-      [% IF creorga.modules.creche.menu %]
+
+      [% IF creorga.modules.staff.menu %]
       <button class="btn btn-default"  id="mnubtn_stafflist" onclick="app.loadpage('modules/staff/stafflist.html');" ><img src="../img/modules/Team.svg" style="width: 32px; height: 32px; "/><br/>Employé(e)s</button>
       [% END %]
       </div>
@@ -55,7 +53,9 @@
       <div class="ml-auto">
       <div class="btn-group" role="group" aria-label="Right">
       <div class="btn-group">
+      [% IF creorga.modules.creche.menu %]
   <button type="button" class="btn btn-default" id="mnubtn_creche" onclick="app.loadpage('modules/creche/creche.html');"><img src="../img/modules/Home.svg" style="width: 32px; height: 32px;"/><br/>Crèche</button>
+  [% END %]
   <select id="crechelist" class="btn btn-default" class="form-control" onchange="app.changesite();">
 
   </select>
@@ -72,7 +72,7 @@
 
       <iframe src="modules/childs/index.html" id="appframe" style="width: 100%; height: calc(100vh - 90px); margin: 0px; padding: 0px;"></iframe>
 
-    </main><!-- /.container -->
+    </main>
 
 
     <script src="../vendor/jquery/jquery.min.js"></script>
index e144482..6ec5195 100644 (file)
                         <div class="field form-inline">
                           <label for="staff_iban" style="width: 140px;">Compte Bancaire</label> <input type="text" value="" style="width: 60%;" id="staff_iban" class="form-control">
                         </div>
-                        <div class="field" id="pwddata" style="display: none;">
-                          <label for="staff_password">Mot de Passe</label> 
-                          <div class="input-group">
-                               <input type="password" value="" id="staff_password" class="form-control">
-                               <div class="input-group-addon">(Min: 4 charatères)</div> 
-                          </div>
-                        </div>
+                        
                         
                         </form>
                         </div>
index 86df649..ce33f08 100644 (file)
@@ -9,7 +9,7 @@ var curfreq ={};
 var maxdayhours = null;
 var maxhalfdayhours = null;
 var tblvac = null;
-//var lictype = parent.apppref.getpreference("support.lictype"); 
+
 
 function initdata() {
   load_helpers();
@@ -22,7 +22,7 @@ function initdata() {
     pconfig = {};
   }
   parent.appdb.dbexec("update vacancycalendar set vacyear=strftime('%Y',datefrom) where vacyear is null;");
-  //"get CoWorker cfg:" +JSON.stringify(pconfig) + "\n");
   if (!pconfig.year) {
     pconfig.year=new Date().getFullYear();
   }
@@ -30,7 +30,7 @@ function initdata() {
     pconfig.printlayout = 'list';
     parent.apppref.setpreference("coworker",pconfig);
   }
-  var cdatasql = "SELECT jobtitle, prename, surname, address, zip, city, country, entrydate, exitdate, iban, bic, accountname, phone, email, uuid,color,weekhours,maxdayhours,case when password is not null and length(password) > 3 then 1 else 0 end as passwordset  FROM staff where uuid='" + pconfig.uuid + "';";
+  var cdatasql = "SELECT jobtitle, prename, surname, address, zip, city, country, entrydate, exitdate, iban, bic, accountname, phone, email, uuid,color,weekhours,maxdayhours  FROM staff where uuid='" + pconfig.uuid + "';";
   var cdata = parent.appdb.dbquery(cdatasql);
   cdata = cdata.sqldata[0];
   for (var ci in cdata) {
@@ -39,34 +39,15 @@ function initdata() {
     }
 
   }
-  
-  // var crdata = parent.appdb.dbquery("select stafflist from creche;");
-  // if ((crdata) && (crdata.sqldata[0].stafflist == "1")){
-       //   $("#pwddata").hide();
-  // }
-  // if (cdata) {
-  //   set_infoheader(cdata.prename + " " + cdata.surname);
-  // }
   $('#staff_color').minicolors({theme:'bootstrap'});
   set_selectyears();
-  //load_staff_selection('staffuuid');
-
   if (pconfig && pconfig.activetab) {
     $('a[href="#'+pconfig.activetab+'"]').tab('show');
   }else{
     $('a[href="#vacancy"]').tab('show');
     pconfig.activetab = 'vacancy';
   }
-  
-//  if (pconfig && pconfig.vacancyunit){
-//    //dump("has vacancy unit:" + pconfig.vacancyunit + "\n");
-//    $('#vacancy_unit').val(pconfig.vacancyunit);
-//  }else {
     pconfig.vacancyunit = "hours";
-//    $('#vacancy_unit').val("days");
-//  }
-    
 
 }
 
@@ -550,7 +531,7 @@ function saveyearvacdays() {
 [% END %]
 [% IF creorga.modules.staff.planning %]
 function load_event_data() {
-  //dump("Load event Table!\n");
   var where = new Array();
 
     where.push(" st.uuid in ('"+ pconfig.uuid + "')");
@@ -582,8 +563,7 @@ function load_event_data() {
   for (var c in caldata) {
     var tblrow = "<tr>";
     tblrow += '<td class="noprint"><button type="button" class="btn btn-primary" onclick="dlg_event({uuid:\''+caldata[c].uuid+'\'},\'upd\');" title="editer"><span class="glyphicon glyphicon-pencil"></span></button></td>';
-    //tblrow += "<td><span style=\"display: none;\">"+caldata[c].description+"</span><strong style=\"color:"+ caldata[c].color +"\">" + caldata[c].description + "</strong></td>";
-    //tblrow += "<td>" + caldata[c].staffnames + "</td>";
     tblrow += "<td>" + caldata[c].tbldatefrom + "</td>";
     tblrow += "<td>" + caldata[c].timefrom + "- " + caldata[c].timeto + "</td>";
 
@@ -604,13 +584,12 @@ function load_event_data() {
     tblrow += "<td>" + rule2.toText() + "</td>";
 
     } catch (ex){
-      //"ERROR! loading data!" + ex  + " FREQ:" + freq2 + "\n");
+   
     }
     tblrow += "</tr>";
     tblbody.push(tblrow);
   }
-  
-  //load table
+
   $("#tbl_activity").append(tblbody.join(''));
   $("#tbl_activity").append("</tbody>");
 
@@ -657,8 +636,7 @@ function dlg_event(uuid, type) {
       freq: '',
       staffname: $("#staff_prename").val() + " " + $("#staff_surname").val()
     };
-    //jsdump(JSON.stringify(pconfig) + "\n");
-    //jsdump(JSON.stringify(evdata) + "\n");
+
     if (type == 'upd') {
      var evsql = "SELECT uuid, strftime(\"%d.%m.%Y\",datefrom) as datefrom, strftime(\"%d.%m.%Y\",dateto) as dateto, timefrom, timeto, description, location, color, freq,  '"+ pconfig.uuid+"' as staffuuid FROM eventcalendar ev left join staffplanning st on (ev.uuid=st.eventcalendaruuid) where ev.uuid='" + uuid.uuid + "' group by ev.uuid;";
       evdata = parent.appdb.dbquery(evsql);
@@ -676,21 +654,9 @@ function dlg_event(uuid, type) {
     }
     for (var w in evdata) {
       if ($("#frmeditevent #" + w)) {
-        // if (w == 'staffuuid') {
-        //   if (evdata[w] == '') {
-        //     $("#frmeditevent #" + w).multiselect('select',[]);
-        //   } else {
-        //     $("#frmeditevent #" + w).multiselect('select',evdata[w].split(','));
-        //   }
-          
-        // }
-        // else if (w == 'color') {
-        //   $("#frmeditevent #color").val(evdata[w]);
-        //   $('#frmeditevent #color').minicolors('value',{color: evdata[w]});
-        // }
-        // else {
+
           $("#frmeditevent #" + w).val(evdata[w]);  
-        // }
+
       }
     }
     if ((evdata.freq == 'weekly') && (evdata.byday)) {
@@ -931,26 +897,5 @@ function setfreq() {
   
 }
 
-// function load_staff_selection(objid,option){
-//   var stdata = parent.appdb.dbquery("select uuid, coalesce(surname,'') || ' ' || coalesce(prename,'') as name,case when color is null then '#000' else color end as color from staff order by surname,prename");
-
-//   stdata = stdata.sqldata;
-//   for (var s in stdata){
-//     $('#' + objid).append('<option value="'+ stdata[s].uuid+'">&lt;span style="color: '+stdata[s].color+';" &gt;' +stdata[s].name+ '&lt;/span&gt;</option>');
-//   }
-  
-//     var copt = {};
-//     if (option) {
-//       copt = option;
-//     }
-//     copt['enableHTML'] = true;
-//     copt['nonSelectedText']="Sélectionner un(e) employé(e)...";
-//     copt['numberDisplayed']=5;
-//     copt['allSelectedText']='Tous';
-//     copt['nSelectedText']=' selections';
-    
-//     $('#' + objid).multiselect(copt);
-  
-// }
 
 
index 64d7749..44a89b7 100644 (file)
@@ -4,24 +4,24 @@
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
     <meta name="generator" content="Own DKS Generator" />
-  <link rel="apple-touch-icon" sizes="57x57" href="img/favicon/apple-touch-icon-57x57.png">
-  <link rel="apple-touch-icon" sizes="60x60" href="img/favicon/apple-touch-icon-60x60.png">
-  <link rel="apple-touch-icon" sizes="72x72" href="img/favicon/apple-touch-icon-72x72.png">
-  <link rel="apple-touch-icon" sizes="76x76" href="img/favicon/apple-touch-icon-76x76.png">
-  <link rel="apple-touch-icon" sizes="114x114" href="img/favicon/apple-touch-icon-114x114.png">
-  <link rel="apple-touch-icon" sizes="120x120" href="img/favicon/apple-touch-icon-120x120.png">
-  <link rel="apple-touch-icon" sizes="144x144" href="img/favicon/apple-touch-icon-144x144.png">
-  <link rel="apple-touch-icon" sizes="152x152" href="img/favicon/apple-touch-icon-152x152.png">
-  <link rel="apple-touch-icon" sizes="180x180" href="img/favicon/apple-touch-icon-180x180.png">
-  <link rel="icon" type="image/png" href="img/favicon/favicon-32x32.png" sizes="32x32">
-  <link rel="icon" type="image/png" href="img/favicon/android-chrome-192x192.png" sizes="192x192">
-  <link rel="icon" type="image/png" href="imgfavicon/favicon-96x96.png" sizes="96x96">
-  <link rel="icon" type="image/png" href="img/favicon/favicon-16x16.png" sizes="16x16">
+  <link rel="apple-touch-icon" sizes="57x57" href="[% abspath %]img/favicon/apple-touch-icon-57x57.png">
+  <link rel="apple-touch-icon" sizes="60x60" href="[% abspath %]img/favicon/apple-touch-icon-60x60.png">
+  <link rel="apple-touch-icon" sizes="72x72" href="[% abspath %]img/favicon/apple-touch-icon-72x72.png">
+  <link rel="apple-touch-icon" sizes="76x76" href="[% abspath %]img/favicon/apple-touch-icon-76x76.png">
+  <link rel="apple-touch-icon" sizes="114x114" href="[% abspath %]img/favicon/apple-touch-icon-114x114.png">
+  <link rel="apple-touch-icon" sizes="120x120" href="[% abspath %]img/favicon/apple-touch-icon-120x120.png">
+  <link rel="apple-touch-icon" sizes="144x144" href="[% abspath %]img/favicon/apple-touch-icon-144x144.png">
+  <link rel="apple-touch-icon" sizes="152x152" href="[% abspath %]img/favicon/apple-touch-icon-152x152.png">
+  <link rel="apple-touch-icon" sizes="180x180" href="[% abspath %]img/favicon/apple-touch-icon-180x180.png">
+  <link rel="icon" type="image/png" href="[% abspath %]img/favicon/favicon-32x32.png" sizes="32x32">
+  <link rel="icon" type="image/png" href="[% abspath %]img/favicon/android-chrome-192x192.png" sizes="192x192">
+  <link rel="icon" type="image/png" href="[% abspath %]imgfavicon/favicon-96x96.png" sizes="96x96">
+  <link rel="icon" type="image/png" href="[% abspath %]img/favicon/favicon-16x16.png" sizes="16x16">
   <meta name="theme-color" content="#ffffff">
-  <link rel="stylesheet" href="vendor/bootstrap/css/bootstrap.min.css" >
-  <link rel="stylesheet" href="css/apps.css" >
-  <link rel="stylesheet" href="vendor/fontawesome/css/all.min.css" >
-  <link rel="stylesheet" href="css/shop.css" >
+  <link rel="stylesheet" href="[% abspath %]vendor/bootstrap/css/bootstrap.min.css" >
+  <link rel="stylesheet" href="[% abspath %]css/apps.css" >
+  <link rel="stylesheet" href="[% abspath %]vendor/fontawesome/css/all.min.css" >
+  <link rel="stylesheet" href="[% abspath %]css/shop.css" >
   <!-- <link rel="stylesheet" href="css/site.css" > -->
     <title>DKS - Apps</title>
   </head>
@@ -58,8 +58,8 @@
                 <div class="product-grid2">
                     <div class="product-image2">
                         <a href="javascript:window.open('creorga/index.html','_blank');">
-                            <img class="pic-1" src="img/apps/creorgalogo.svg">
-                            <img class="pic-2" src="img/apps/creorgalogo.svg">
+                            <img class="pic-1" src="[% abspath %]img/apps/creorgalogo.svg">
+                            <img class="pic-2" src="[% abspath %]img/apps/creorgalogo.svg">
                         </a>
                         <!--<ul class="social">
                             <li><a href="#" data-tip="Quick View"><i class="fa fa-eye"></i></a></li>
@@ -79,8 +79,8 @@
               <div class="product-grid2">
                   <div class="product-image2">
                       <a href="">
-                          <img class="pic-1" src="img/apps/hourtraxlogo.svg" style="opacity: 0.2;">
-                          <img class="pic-2" src="img/apps/hourtraxlogo.svg" style="opacity: 0.2;">
+                          <img class="pic-1" src="[% abspath %]img/apps/hourtraxlogo.svg" style="opacity: 0.2;">
+                          <img class="pic-2" src="[% abspath %]img/apps/hourtraxlogo.svg" style="opacity: 0.2;">
                       </a>
                       <!--<ul class="social">
                           <li><a href="#" data-tip="Quick View"><i class="fa fa-eye"></i></a></li>
               <div class="product-grid2">
                   <div class="product-image2">
                       <a href="">
-                          <img class="pic-1" src="img/apps/invoicejournallogo.svg" style="opacity: 0.2;">
-                          <img class="pic-2" src="img/apps/invoicejournallogo.svg" style="opacity: 0.2;">
+                          <img class="pic-1" src="[% abspath %]img/apps/invoicejournallogo.svg" style="opacity: 0.2;">
+                          <img class="pic-2" src="[% abspath %]img/apps/invoicejournallogo.svg" style="opacity: 0.2;">
                       </a>
                       <!--<ul class="social">
                           <li><a href="#" data-tip="Quick View"><i class="fa fa-eye"></i></a></li>
               <div class="product-grid2">
                   <div class="product-image2">
                       <a href="">
-                          <img class="pic-1" src="img/apps/coloradiologo.svg" style="opacity: 0.2;">
-                          <img class="pic-2" src="img/apps/coloradiologo.svg" style="opacity: 0.2;">
+                          <img class="pic-1" src="[% abspath %]img/apps/coloradiologo.svg" style="opacity: 0.2;">
+                          <img class="pic-2" src="[% abspath %]img/apps/coloradiologo.svg" style="opacity: 0.2;">
                       </a>
                       <!--<ul class="social">
                           <li><a href="#" data-tip="Quick View"><i class="fa fa-eye"></i></a></li>
             <div class="product-grid2">
                 <div class="product-image2">
                     <a href="">
-                        <img class="pic-1" src="img/apps/cashboxlogo.svg" style="opacity: 0.2;">
-                        <img class="pic-2" src="img/apps/cashboxlogo.svg" style="opacity: 0.2;">
+                        <img class="pic-1" src="[% abspath %]img/apps/cashboxlogo.svg" style="opacity: 0.2;">
+                        <img class="pic-2" src="[% abspath %]img/apps/cashboxlogo.svg" style="opacity: 0.2;">
                     </a>
                     <!--<ul class="social">
                         <li><a href="#" data-tip="Quick View"><i class="fa fa-eye"></i></a></li>
             <div class="product-grid2">
                 <div class="product-image2">
                     <a href="">
-                        <img class="pic-1" src="img/apps/dkstools.svg" style="opacity: 0.2;">
-                        <img class="pic-2" src="img/apps/dkstools.svg" style="opacity: 0.2;">
+                        <img class="pic-1" src="[% abspath %]img/apps/dkstools.svg" style="opacity: 0.2;">
+                        <img class="pic-2" src="[% abspath %]img/apps/dkstools.svg" style="opacity: 0.2;">
                     </a>
                     <!--<ul class="social">
                         <li><a href="#" data-tip="Quick View"><i class="fa fa-eye"></i></a></li>
             <div class="product-grid2">
                 <div class="product-image2">
                     <a href="">
-                        <img class="pic-1" src="img/apps/websiteeditorlogo.svg" style="opacity: 0.2;">
-                        <img class="pic-2" src="img/apps/websiteeditorlogo.svg" style="opacity: 0.2;">
+                        <img class="pic-1" src="[% abspath %]img/apps/websiteeditorlogo.svg" style="opacity: 0.2;">
+                        <img class="pic-2" src="[% abspath %]img/apps/websiteeditorlogo.svg" style="opacity: 0.2;">
                     </a>
                     <!--<ul class="social">
                         <li><a href="#" data-tip="Quick View"><i class="fa fa-eye"></i></a></li>
             <div class="product-grid2">
                 <div class="product-image2">
                     <a href="">
-                        <img class="pic-1" src="img/apps/dksvpn.svg" style="opacity: 0.2;">
-                        <img class="pic-2" src="img/apps/dksvpn.svg" style="opacity: 0.2;">
+                        <img class="pic-1" src="[% abspath %]img/apps/dksvpn.svg" style="opacity: 0.2;">
+                        <img class="pic-2" src="[% abspath %]img/apps/dksvpn.svg" style="opacity: 0.2;">
                     </a>
                     <!--<ul class="social">
                         <li><a href="#" data-tip="Quick View"><i class="fa fa-eye"></i></a></li>
     
     <hr>
     </div>
-    <script src="vendor/jquery/jquery.min.js"></script>
-    <script src="vendor/bootstrap/js/bootstrap.bundle.min.js" ></script>
-    <script src="js/apps.js"></script>
+    <script src="[% abspath %]vendor/jquery/jquery.min.js"></script>
+    <script src="[% abspath %]vendor/bootstrap/js/bootstrap.bundle.min.js" ></script>
+    <script src="[% abspath %]js/apps.js"></script>
 </body>
 </html>
\ No newline at end of file
similarity index 100%
rename from apps/data/db/changes.sql
rename to dev/db/changes.sql
index 1ef4859..605905a 100644 (file)
--- a/index.cgi
+++ b/index.cgi
@@ -61,7 +61,7 @@ $vars->{pagename} =~ s/\.tt$//;
 # print Dumper($vars);
 my $skl = dirname($page);
 # print Dumper($template);
-$template->process("skeleton/index.tt",$vars) || die "Template process failed: ", $template->error(), "\n";
+$template->process("skeleton/index.tt",$vars) || die "Template process failed X: ", $template->error(), "\n";
 # my %headers = map { $_ => $cgi->http($_) } $cgi->http();
 # print "Got the following headers:\n";
 # for my $header ( keys %headers ) {
index 32a31ec..f02db4f 100644 (file)
@@ -17,8 +17,8 @@ Phone: <a class="footer" href="tel:00352691504574">+352 691 504574</a></p>
                                                                <strong>Links</strong>
                                                        </p>
                                                        <ul style="list-style: none;">
-                                                               <li class=""><a class="text-white" href="impressum.html">Impressum</a></li>
-                                                               <li class=""><a class="text-white" href="agb.html">AGB</a></li>
+                                                               <li class=""><a class="text-white" href="[% abspath %]impressum.html">Impressum</a></li>
+                                                               <li class=""><a class="text-white" href="[% abspath %]agb.html">AGB</a></li>
                                                                
                                                        </ul>