From f1a80bc4d76c935362e5faa15b36f38c6ce99012 Mon Sep 17 00:00:00 2001 From: Kilian Saffran Date: Tue, 7 May 2019 17:37:06 +0200 Subject: [PATCH] staff and coworker updates --- apps/data/db/lechatpotte.sqlite | Bin 1541120 -> 1541120 bytes apps/data/db/underatert.sqlite | Bin 2664448 -> 2667520 bytes apps/index.cgi | 8 +-- apps/js/app.js | 22 +----- apps/js/apps.js | 2 +- apps/js/webdatabase.js | 4 +- apps/tmpl/creorga/modules/staff/coworker.tt | 9 +++ .../tmpl/creorga/modules/staff/js/coworker.js | 30 ++++---- apps/tmpl/creorga/modules/staff/js/staff.js | 2 +- dev/db/changes.sql | 6 +- img/logo/logo.svg | 68 ++++++++++++++++++ index.cgi | 48 ++++--------- tmpl/page/error.tt | 8 +++ 13 files changed, 128 insertions(+), 79 deletions(-) create mode 100644 img/logo/logo.svg create mode 100644 tmpl/page/error.tt diff --git a/apps/data/db/lechatpotte.sqlite b/apps/data/db/lechatpotte.sqlite index b0f92eff15c8b2beffc861b7d4192b9712f2c9d8..23e32a24f8fbeb667995cb7827a909d221711cb2 100644 GIT binary patch delta 686 zcmY+>&ubG=5C`x#`y-odwrOJAY&8^jwTEJA%@5Z|5Tj=c9yDI6t;uE^8ruZIZrU6Q zU8^ScAhj#LlcIRgt3+7@Z&vUk{sUf&H&3N!u}&>C>4OgpyzdNec&nY6)y~XDJYo>S z|0MlmJ(0lL-(N-^i{A(bL56t=K`PyV zUGd)aJA#r(!2R1^tN>#WR+~kmWfmLQZyuj5>>OoO)G$a`T0ceqRIuxAPCCXuA%$-hLve=aQ*hGK~v9 zp!FI!m=+JETeW^VhUs)JopkuXVCLDtK;Qp?y0=>gfs@t=dlk+yugN<6a3h^%&N&%S z=&TJg$kejIN@dlQp39_jdiIpAmrCVx<9@4Qo6c!LiOR>$$fKI3;p0x=x5a^wfJ{F% zVI?-uX3SkUpGot3UG%91U+Etk-nOTf05OO~9O97=3CNEENJK#-p&=AP!zhd*=m?6U Oqew7- zED*qi5O6VbGLdNFfs<+K#ycinyn4}#XKuZEz>h`(lRTMZX5Ps=v%EREyg9kklbQgC z{eiRba(B>;O~BCLz0dV`wJy94GPFQml-ke=ll4z5U~xVCT3=-V_(h})+{HH$O??=) zr#EOD_2$yE*N<5Rpb~0_UU+LOt*s8Z3g;Zx$C~4ZJJ>w>#<#T!Ff=6TJsQHekHxZld259G4+0srD7*b9qWE8_P&e(&y8vl%;g)ymoS$s;aPu^yza z6CdYrF6H$VM}61vOQn9#o0_VZ#QrNh=)R(4Ggj`J)oXWBry*60&*M`1G~^WeYty5{ ut`plRFCdYKOc*&?ixY(;h)Oh~6N7Y-B)LFLk|Jr6As2~7vQc?~w~T-0w2ck` diff --git a/apps/data/db/underatert.sqlite b/apps/data/db/underatert.sqlite index b4d60e24c46378df817f19552307bed7d559f202..e1a99313ac5a95ef7245e5b4ffabffbeec16ba0f 100644 GIT binary patch delta 14908 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 delta 10664 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 diff --git a/apps/index.cgi b/apps/index.cgi index 5d376b5..5a0d4c5 100644 --- a/apps/index.cgi +++ b/apps/index.cgi @@ -9,13 +9,12 @@ use Template; use CGI; use CGI::Cookie; use CGI::Carp qw/fatalsToBrowser/; -#use FindBin qw($Bin $RealBin); + use Data::Dumper; use JSON::PP; use session; -#my $tmpldir = "/mnt/c/Users/ksaff/Workspace/juridig/app/tmpl"; -# chdir(dirname($0)); + my $skl = "skeleton/index.tt"; my $cgi = new CGI(); my $p=(); @@ -24,6 +23,7 @@ my $cookie; # foreach my $pp (@params){ # $p->{$pp} = $cgi->param($pp); # } +my $status = '200 ok'; my $sess = (); my $se = session->new(); my $page = "index.tt"; @@ -79,7 +79,7 @@ if (($ENV{HTTP_USER_AGENT} !~ /Chrome/) || ($ENV{HTTP_USER_AGENT} =~ /Edge/) || # if (!exists($sesdata->{usersession})){ # $p->{page} = "login"; # } -print $cgi->header(-type=>'text/html', -charset=>"utf-8",-cookie => $cookie); +print $cgi->header(-status => $status, -type=>'text/html', -charset=>"utf-8",-cookie => $cookie); my $template = Template->new({INCLUDE_PATH => [dirname($ENV{"SCRIPT_FILENAME"}).'/tmpl']}); my @lv = split(/\//,$filepath); diff --git a/apps/js/app.js b/apps/js/app.js index c290a08..c946fc3 100644 --- a/apps/js/app.js +++ b/apps/js/app.js @@ -130,7 +130,7 @@ document.addEventListener("keydown", function(e) { } - var https = 'https'; + var https = 'http'; $(document).ready(function() { app.baseurl = https + '://' + location.host + location.pathname.substring(0,location.pathname.lastIndexOf('/apps/')+6); @@ -140,25 +140,5 @@ document.addEventListener("keydown", function(e) { app.loadsites(); }); - // $("#appframe").on('load', function(){ - // //console.log($("#appframe").attr("src")); - // var src = $("#appframe").attr("src").replace(/\\/g,'/'); - // src = src.substring(src.indexOf('/creorga/') + 5); - // src = src.substring(0,src.indexOf('?')); - // $.ajax({ - // encoding:"UTF-8", - // url:app.api() +'prefs.cgi?page=service&set=' +encodeURIComponent('{"lastpage":"'+ src+'"}') , - - // success: function (data){ - - - // }, - // error: function(data){ - - // console.log("Error:" + JSON.stringify(data)); - // }, - // async:false - // }); - // }) \ No newline at end of file diff --git a/apps/js/apps.js b/apps/js/apps.js index b884dda..0a72d71 100644 --- a/apps/js/apps.js +++ b/apps/js/apps.js @@ -1,4 +1,4 @@ -var https ='https'; +var https ='http'; function logout() { myurl = https + '://'+ location.host + '/apps/'; $.ajax({ diff --git a/apps/js/webdatabase.js b/apps/js/webdatabase.js index 7f130f3..029000b 100644 --- a/apps/js/webdatabase.js +++ b/apps/js/webdatabase.js @@ -15,8 +15,8 @@ var appdb = { result=data.result; }, error: function(data){ - - console.log("Error:" + JSON.stringify(data)); + + console.log("Error:" + JSON.stringify(data)); }, async:false }); diff --git a/apps/tmpl/creorga/modules/staff/coworker.tt b/apps/tmpl/creorga/modules/staff/coworker.tt index 6ec5195..154787d 100644 --- a/apps/tmpl/creorga/modules/staff/coworker.tt +++ b/apps/tmpl/creorga/modules/staff/coworker.tt @@ -170,6 +170,15 @@ +
+ + +
+ + h +
+ +
diff --git a/apps/tmpl/creorga/modules/staff/js/coworker.js b/apps/tmpl/creorga/modules/staff/js/coworker.js index ce33f08..41f9ebc 100644 --- a/apps/tmpl/creorga/modules/staff/js/coworker.js +++ b/apps/tmpl/creorga/modules/staff/js/coworker.js @@ -21,15 +21,13 @@ function initdata() { if (pconfig == null) { pconfig = {}; } - parent.appdb.dbexec("update vacancycalendar set vacyear=strftime('%Y',datefrom) where vacyear is null;"); + 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, 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]; @@ -231,6 +229,7 @@ function load_table_vacancy() { if ((yearvac) && (yearvac.sqldata)){ nvyear = yearvac.sqldata[0].hours; } + $("#vacancyyeartotal").val(nvyear); var vacdatasql = "SELECT '" + "' AS action," + "vacyear," + @@ -253,7 +252,7 @@ function load_table_vacancy() { "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}; @@ -261,7 +260,7 @@ var vacdata = parent.appdb.dbquery(vacdatasql); 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); @@ -304,7 +303,12 @@ var vacdata = parent.appdb.dbquery(vacdatasql); + '' +""; $("#tbl_vacancy > tfoot").html(tfoot); - + $("#vacancyyeartotalopen").val(""); + if (nvyear != ""){ + var sumrest = parseFloat(nvyear) - sums.normal_ok; + $("#vacancyyeartotalopen").val(sumrest.toFixed(2)); + } + $("#tbl_vacancy").bootstrapTable({ locale: 'fr-FR', pagination: false, @@ -329,14 +333,12 @@ function dlg_vacancy(uuid, type) { 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){ @@ -362,7 +364,7 @@ function dlg_vacancy(uuid, type) { } if ($("#frmeditvacancy #" + w)) { - //dump(w + "->"+evdata[w]+"\n"); + if (w == "type"){ $("#frmeditvacancy #" + w + " select").val(evdata[w]); } else { @@ -432,7 +434,7 @@ function save_vacancy() { } 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(); @@ -490,7 +492,7 @@ $("#vacancylastyearrest").val(0); 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 years = parent.appdb.dbquery("select COALESCE((select cast(min(vacancyyear) as TEXT) as minyear from staffvacancydays where staffuuid='4b86fe07-d175-c74e-aafc-40e2275f3b6d'),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++){ diff --git a/apps/tmpl/creorga/modules/staff/js/staff.js b/apps/tmpl/creorga/modules/staff/js/staff.js index 59a47e1..17475d4 100644 --- a/apps/tmpl/creorga/modules/staff/js/staff.js +++ b/apps/tmpl/creorga/modules/staff/js/staff.js @@ -21,7 +21,7 @@ function loadtable() { [% IF creorga.modules.staff.delete %] delbtn = ""; [% END %] - var sql = "SELECT '"+delbtn+"' as action, coalesce(prename,'') || '
' || coalesce(surname,'') as name,case when color is not null then '
' else null end color, coalesce(address,'')|| '
' || coalesce(zip,'') || ' ' || coalesce(city,'') || '
' || coalesce(country,'') as address, case when phone is not null then ': ' || phone || '
' else '' end || case when email is not null then ':' || email else '' end as phonemail, coalesce(jobtitle,'') || '
' || 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;"; + var sql = "SELECT '"+delbtn+"' as action, coalesce(prename,'') || '
' || coalesce(surname,'') as name,case when color is not null then '
' else null end color, coalesce(address,'')|| '
' || coalesce(zip,'') || ' ' || coalesce(city,'') || '
' || coalesce(country,'') as address, case when phone is not null then ': ' || phone || '
' else '' end || case when email is not null then ':' || email else '' end as phonemail, coalesce(jobtitle,'') || '
' || 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 where inactive is null;"; var data = parent.appdb.dbqueryarray(sql); diff --git a/dev/db/changes.sql b/dev/db/changes.sql index 4df6520..28243dc 100644 --- a/dev/db/changes.sql +++ b/dev/db/changes.sql @@ -1 +1,5 @@ -ALTER TABLE creche add column idcheckservice TEXT; \ No newline at end of file +ALTER TABLE creche add column idcheckservice TEXT; +update vacancycalendar set vacyear=strftime('%Y',datefrom) where vacyear is null; +update vacancycalendar set timeto='08:00' where timeto='00:00'; +ALTER TABLE vacancycalendar add column vacyear integer; +alter table staff add column inactive boolean; \ No newline at end of file diff --git a/img/logo/logo.svg b/img/logo/logo.svg new file mode 100644 index 0000000..7083c47 --- /dev/null +++ b/img/logo/logo.svg @@ -0,0 +1,68 @@ + +image/svg+xml \ No newline at end of file diff --git a/index.cgi b/index.cgi index 605905a..da4ead7 100644 --- a/index.cgi +++ b/index.cgi @@ -5,13 +5,10 @@ use lib ('./apps/lib'); use File::Basename; use Template; use CGI; -use CGI::Carp qw/fatalsToBrowser/; -#use FindBin qw($Bin $RealBin); - +# use CGI::Carp qw/fatalsToBrowser/; # use Data::Dumper; use JSON::PP; -#my $tmpldir = "/mnt/c/Users/ksaff/Workspace/juridig/app/tmpl"; -# chdir(dirname($0)); + my $cgi = new CGI(); my $p=(); @@ -20,54 +17,35 @@ foreach my $pp (@params){ $p->{$pp} = $cgi->param($pp); } 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 $filepath = substr($cgi->url({-absolute=>1}),length($basepath)+1); -#if (exists($p->{p})){ + if ($filepath ne ""){ $page = $filepath; $page =~ s/html$/tt/; } -#} -#$p->{dirname} = dirname($0); -#if (!exists($p)) -#$p->{baseurl} = $cgi->url({-base=>1}); -#$p->{pathinfo} = -#$p->{basepath} = ; +my $status = '200 ok'; -# if (!exists($p->{sid})) -# { -# $p->{sid} = $cgi->cookie('juridig'); -# } -# my $se = session->new(); -# my $sesdata = $se->getsession($p->{sid}); -# if (!exists($sesdata->{usersession})){ -# $p->{page} = "login"; -# } -print $cgi->header(-type=>'text/html', -charset=>"utf-8"); -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} .= "../"; } - +if (! -e dirname($ENV{"SCRIPT_FILENAME"}).'/tmpl/page/'.$page){ + $page = 'error.tt'; + $status = '404 not Found'; +} $vars->{basepath} = $basepath; $vars->{page} = 'page/'.$page; $vars->{pagename} = basename($page); $vars->{pagename} =~ s/\.tt$//; -# print Dumper($vars); + my $skl = dirname($page); -# print Dumper($template); +print $cgi->header(-status=>$status, -type=>'text/html', -charset=>"utf-8"); + $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 ) { -# print "$header: $headers{$header}
"; -# } -# for my $e ( keys %ENV ) { -# print "ENV: $e: ".$ENV{$e}."
"; -# } diff --git a/tmpl/page/error.tt b/tmpl/page/error.tt new file mode 100644 index 0000000..46a135f --- /dev/null +++ b/tmpl/page/error.tt @@ -0,0 +1,8 @@ +
+
+

ERROR!

+

Diese Seite existiert nicht!

+

This Page does not exist!

+

cette page n'existe pas!

+
+
\ No newline at end of file -- 2.39.5
' + sums.ill_ok.toFixed(2) + '