#!/usr/bin/perl print "Content-type: text/html\n\n"; BEGIN { use lib '/usr/home/cfg' ; require push_inc ; } use CGI::Carp qw(fatalsToBrowser); use JSON::Repair ':all'; require cfg ; # my $referer = $ENV{HTTP_REFERER} ; exit unless $referer =~ m/itvadmin/iog ; &today; #------------------------------------------------------------------------------------------ @ARGV = split(/\\*\&/, $ENV{'QUERY_STRING'}); foreach $ARG (@ARGV) { ($par,$val) = split(/\=/,$ARG) ; $param{$par} = $val ; } # https://itvadmin.co.za/cgi-bin/scripts/get/get_db_cal_events.pl?start=2024-10-01 00:00:00&end=2024-10-30 00:00:00&debug=1 our $debug = $param{debug} ; # our $username = 'rory' if $debug == 1 ; $param{start} =~ s/T/ /g ; my $param_start = substr($param{start},0,10); $param{end} =~ s/T/ /g ; my $param_end = substr($param{end},0,10); # $param{start} = "2025-02-01 00:00:00" ; # $param{end} = "2025-02-28 23:00:00" ; #------------------------------------------------------------------------------------------ use Date::Calc qw(:all); $json = '[' ; &db_open_ro ; our $db_ignore_open_close = 1 ; # do one open and one close instead of repeating it &check_session ; &get_db_calendar_events ; &get_db_event_quotes ; # &get_db_leave ; $db_ignore_open_close = 0 ; # do one open and one close instead of repeating it &db_close_conn ; chop $json if length $json > 1 ; # $json = substr($json,0,-1) ; $json .= ']' ; print $json ; exit ; #------------------------------------------------------------------------------------------ sub get_db_calendar_events { unless ($param{start} && $param{end}) { return ; } &db_min_ro('users','id,name,user_type','','','') ; foreach (keys %{$db{users}}) { $user_name{$_} = $db{users}{$_}{name} ; $casual_type{$_} = uc substr($db{users}{$_}{user_type},-1,1) ; } &db_min_ro('events','*',"((`startdate` >= '$param_start 00:00:00' AND `startdate` <= '$param_end 23:59:59') OR ('$param_start 23:59:59' >= `startdate` AND '$param_start 00:00:00' <= `enddate`))",'','') ; # &db_min_ro('events','*',"enddate >= '$param{start}' AND startdate <= '$param{end}'",'','') ; foreach my $id (keys %{$db{events}}) { # &common_debug("get_db_leave - $db{events}{$id}{category} -> $db{events}{$id}{title}"); my $start = $db{events}{$id}{startdate} ; $start =~ s/ /T/g ; my $end = $db{events}{$id}{enddate} ; $end =~ s/ /T/g ; my $cat = $db{events}{$id}{category} ; $uccat = uc $cat ; my $qnr = $db{events}{$id}{event_quote_nr} ; my $uid = $db{events}{$id}{user_id} ; my $title = ucfirst $cat ; $title =~ s/\_/ /g ; my $date_start = substr($start,0,10); my $date_end = substr($end,0,10); if ($cat eq 'leave') { $color = '#ff00ff' ; my $leave_type = ucfirst $db{events}{$id}{type} ; $title = $leave_type . ' Leave' ; } elsif ($cat eq 'weekend_work') { $start = &cal_set_time($db{events}{$id}{startdate},-24); $start =~ s/ /T/g ; $color = 'purple' ; } elsif ($cat eq 'public_holiday') { $start = substr($db{events}{$id}{startdate},0,10) . 'T00:00:00'; $end = substr($db{events}{$id}{enddate},0,10) . 'T23:59:59'; $color = 'red' ; } elsif ($cat eq 'available') { $color = '#00FF00' ; } elsif ($cat eq 'unavailable') { $color = '#ff4136' ; # red } elsif ($cat eq 'other') { $color = '#e3c728' ; # yellow # } elsif (substr($usertype,0,6) eq 'casual') { } elsif ($is_operator) { $color = '#efad1d' ; # orange } else { $color = '#3498DB' ; } if ($qnr) { # $total_casuals_working{$date_start}{$date_end}{$casual_type{$uid}}{$qnr}++ if $cat eq 'available' ; # count casuals subscribed for the event # $subscribed_names{$date_start}{$date_end}{$casual_type{$uid}}{$qnr} .= "$user_name{$uid}, " if $cat eq 'available' ; $total_casuals_working{$date_start}{$date_end}{$qnr}++ if $cat eq 'available' ; # count casuals subscribed for the event $subscribed_names{$date_start}{$date_end}{$qnr} .= "$user_name{$uid}, " if $cat eq 'available' ; } # if (substr($usertype,0,6) eq 'casual') { if ($is_operator && $operator_level < 2 && !$is_temp_calibrator) { # next unless $cat eq 'available' or $cat eq 'unavailable' ; if ($qnr) { # $show_available{$casual_type{$uid}}{$qnr}{$uid} = $uccat . ' : ' . $db{events}{$id}{title} ; # $color_available{$casual_type{$uid}}{$qnr}{$uid} = $color ; # print "1. show_available [casual_type =$casual_type{$uid}] [$date_start->$date_end, $qnr, $uid][if ($show_available{$date_start}{$date_end}{$operator{$_}}{$quote_nr}{$userid} and $in_the_past!=1 and $casual_type{$userid} eq $operator{$_})]\n" if $debug ; # $show_available{$date_start}{$date_end}{$casual_type{$uid}}{$qnr}{$uid} = $uccat . ' : ' . $db{events}{$id}{title} ; # $show_available{$date_start}{$date_end}{$casual_type{$uid}}{$qnr}{$uid} = $uccat ; # $color_available{$date_start}{$date_end}{$casual_type{$uid}}{$qnr}{$uid} = $color ; $show_available{$date_start}{$date_end}{$qnr}{$uid} = $uccat ; $color_available{$date_start}{$date_end}{$qnr}{$uid} = $color ; } next ; } if ($cat eq 'available' || $cat eq 'unavailable') { # skip events display next ; } my ($s_date,$s_time) = split(/\ /,$db{events}{$id}{startdate}) ; my ($s_ccyy,$s_mm,$s_dd) = split(/\-/,$s_date) ; my $s_txt = Date_to_Text($s_ccyy,$s_mm,$s_dd); my ($s_hr,$s_mn,$s_sc) = split(/\:/,$s_time) ; my ($e_date,$e_time) = split(/\ /,$db{events}{$id}{enddate}) ; my ($e_ccyy,$e_mm,$e_dd) = split(/\-/,$e_date) ; my $e_txt = Date_to_Text($e_ccyy,$e_mm,$e_dd); my ($e_hr,$e_mn,$e_sc) = split(/\:/,$e_time) ; my $disp_title = qq($title [$user_name{$db{events}{$id}{user_id}}] $s_txt - $e_txt) ; if (($cat eq 'public_holiday') or ($cat eq 'other')) { my $notes = $db{events}{$id}{notes} ; $notes =~ s/"/'/g ; $disp_title = qq($title : $db{events}{$id}{notes}) ; } # $disp_title = &fix_json($disp_title) ; $disp_title = &common_clean_json_two($disp_title) ; $json_ele = qq~{ "id": "$id", "title": "$disp_title", "start": "$start", "end": "$end", "color": "$color", "url": "javascript:dlgMdl('/cgi-bin/scripts/dialog/events.pl?$id','$title','','medium-dialog');" }~ ; my $json_rep = repair_json($json_ele); $json .= qq~$json_rep,~ if $json_rep ; # $json .= qq~{ # "id": "$id", # "title": "$disp_title", # "start": "$start", # "end": "$end", # "color": "$color", # "url": "javascript:dlgMdl('/cgi-bin/scripts/dialog/events.pl?$id','$title','','medium-dialog');" # },~ ; } # [ # { # title: 'Conference', # start: '2016-01-11', # end: '2016-01-13' # }, # ] # events: [ # { # title: 'Business Lunch', # start: '2016-01-03T13:00:00', # constraint: 'businessHours' # }, # { # title: 'Meeting', # start: '2016-01-13T11:00:00', # constraint: 'availableForMeeting', // defined below # color: '#257e4a' # }, # // areas where "Meeting" must be dropped # { # id: 'availableForMeeting', # start: '2016-01-11T10:00:00', # end: '2016-01-11T16:00:00', # rendering: 'background' # }, # { # id: 'availableForMeeting', # start: '2016-01-13T10:00:00', # end: '2016-01-13T16:00:00', # rendering: 'background' # }, # // red areas where no events can be dropped # { # start: '2016-01-24', # end: '2016-01-28', # overlap: false, # rendering: 'background', # color: '#ff9f89' # }, # { # start: '2016-01-06', # end: '2016-01-08', # overlap: false, # rendering: 'background', # color: '#ff9f89' # } } #------------------------------------------------------------------------------------------ sub get_db_event_quotes { unless ($param{'start'} && $param{'end'}) { return ; } &db_min_ro('event_systems','id,system_type',"`system_type`='fixed'",'','') ; my $table = 'event_quotes' ; # if ($is_schools_manager) { # @report_sql_or = () ; # foreach $_orig_id (keys %{$glob_orgids{$userid}}) { # push @report_sql_or, "organisation_ids LIKE '%$_orig_id%'" # } # my $sql_or = join(' OR ',@report_sql_or) ; # push @report_sql, "($sql_or)" ; # } if ($is_installation_partner) { @report_sql_or = () ; foreach $_cust_id (keys %{$glob_custids{$userid}}) { push @report_sql_or, "quote_to = '$_cust_id'" } foreach $_reg_id (keys %{$glob_regids{$userid}}) { push @report_sql_or, "region_id = '$_reg_id'" } my $sql_or = join(' OR ',@report_sql_or) ; push @report_sql, "($sql_or)" if $sql_or ; push @report_sql, "quote_accepted='1'" if $is_installation_partner ; } elsif ($is_schools_manager || ($is_operator && $operator_level > 1 && !$is_temp_calibrator)) { @report_sql_or = () ; foreach $_reg_id (keys %{$glob_regids{$userid}}) { push @report_sql_or, "region_id = '$_reg_id'" } my $sql_or = join(' OR ',@report_sql_or) ; push @report_sql, "($sql_or)" if $sql_or ; push @report_sql, "quote_created='1'" if $is_schools_manager ; push @report_sql, "quote_accepted='1'" if $is_operator ; # } elsif (substr($usertype,0,6) eq 'casual') { # } elsif ($is_operator && $operator_level < 2) { } elsif ($is_operator && $operator_level < 2 && !$is_temp_calibrator) { # push @report_sql, "(operator_ids='$userid' OR operator_ids LIKE '%$userid,%' OR operator_ids LIKE '%,$userid%')" ; # push @report_sql, "(operator_ids LIKE '%$userid%')" ; push @report_sql, "(FIND_IN_SET($userid,operator_ids) OR FIND_IN_SET($userid,REPLACE(REPLACE(daily_operator_ids,';',','),'|',',')))" ; push @report_sql, "quote_accepted='1'" ; } else { push @report_sql, "quote_accepted='1'" ; } my $srch_where_sql = join(' AND ', @report_sql) ; my $sql_where = ($srch_where_sql) ? "AND $srch_where_sql" : '' ; # &db_min_ro($table,'*',"date_to >= '$param{start}' AND date_from <= '$param{end}' $sql_where",'','') ; &db_min_ro($table,'id,demo_id,date_from,date_to,ref,quote_nr,type,notes,operator_ids,nr_of_casuals,fixed_system_overall_status,event_system_id_multiple,quote_rejected,quote_completed,quote_accepted,quote_created,quote_pending,daily_operator_ids,times_from,times_to',"((date_to >= '$param{start}' AND date_to <= '$param{end}') OR (date_from >= '$param{start}' AND date_from <= '$param{end}')) $sql_where",'','') ; &db_min_ro('analytics_event_bookings','event_quote_id',"event_quote_id<>'0'",'','') ; my %analytics_events = () ; foreach (keys %{$db{analytics_event_bookings}}) { $analytics_events{$_} = 1 ; } # $analytics_events{$event_id} # &db_min_ro($table,'*',"date_to >= '$param{start}' AND date_from <= '$param{end}' AND quote_accepted = 1",'','') ; # print "get_db_event_quotes [SELECT * FROM event_quotes WHERE ((date_to >= '$param{start}' AND date_to <= '$param{end}') OR (date_from >= '$param{start}' AND date_from <= '$param{end}')) $sql_where]\n" if $debug ; @colors = ('#00FF00','#6666FF','#FF33FF','#00FFFF','#2dc8ed','#FF6600','#28b62c') ; foreach my $id (keys %{$db{$table}}) { my $start = $db{$table}{$id}{date_from} ; $start =~ s/ /T/g ; my $end = $db{$table}{$id}{date_to} ; $end =~ s/ /T/g ; my $ref = $db{$table}{$id}{ref} ; my $quote_nr = $db{$table}{$id}{quote_nr} ; my $type = $db{$table}{$id}{type} ; my $notes = $db{$table}{$id}{notes} ; $notes =~ s/\r\n|\n/ - /g; $title =~ s/\t/ /g; # my $operator_ids = $db{$table}{$id}{operator_ids} ; my @operator_ids = split(/\,/,$db{$table}{$id}{operator_ids}); # $operator{1} = $db{$table}{$id}{casual_worker} ; $nr_of_casuals{1} = $db{$table}{$id}{nr_of_casuals} ; # $casual_worker{2} = $db{$table}{$id}{casual_worker_2} ; # $nr_of_casuals{2} = $db{$table}{$id}{nr_of_casuals_2} ; # if (substr($usertype,0,6) eq 'casual') { if ($is_operator && $operator_level < 2 && !$is_temp_calibrator) { my $valid = 0 ; foreach my $_opid (@operator_ids) { $valid = 1 if $_opid == $userid ; } if ($db{$table}{$id}{daily_operator_ids} && !$valid) { foreach my $op_ids (split(/\|/,$db{$table}{$id}{daily_operator_ids})) { foreach my $_opid (split(";",$op_ids)) { $valid = 1 if $_opid == $userid ; } } } next unless $valid ; } # print "1. ok_for_casual [$quote_nr] [operator=$db{$table}{$id}{casual_worker}] [nr_of_casuals=$db{$table}{$id}{nr_of_casuals}] [casual_worker_2=$db{$table}{$id}{casual_worker_2}] [nr_of_casuals_2=$db{$table}{$id}{nr_of_casuals_2}] \n" if $debug ; # &common_debug("get_db_event_quotes - $ref -> $start -> $end"); # print "get_db_event_quotes [$ref -> $start -> $end]\n" if $debug ; my $date_start = substr($start,0,10); my $date_end = substr($end,0,10); my $ttl_operator_grps = 0 ; for (1 .. 2) { $ttl_operator_grps++ ; } my $cnow = $now_ccyymmdd . $now_hour . $now_min . $now_sec ; my $cstart = $start ; $cstart =~ s/T//g ; $cstart =~ s/-//g ; $cstart =~ s/://g ; my $cend = $end ; $cend =~ s/T//g ; $cend =~ s/-//g ; $cend =~ s/://g ; my $in_the_past = 0 ; if ($cstart < $cnow && $cend < $cnow) { $color = '#999999' ; $in_the_past = 1 ; } else { $color = '#FF66FF' ; } if ($db{$table}{$id}{demo_id}) { $color = 'rgb(255,64,255)' ; } elsif ($analytics_events{$id}) { $color = 'rgb(255,129,0);' ; } elsif ($db{$table}{$id}{quote_completed}) { $color = '#51b529' ; # green } elsif ($db{$table}{$id}{quote_accepted}) { $color = '#51cbf2' ; # blue # $tt_txt = 'Accepted' ; my @fixed_system_overall_statuses = split(/\;/,$db{$table}{$id}{fixed_system_overall_status}) ; my @event_system_ids = split(/\;/,$db{$table}{$id}{event_system_id_multiple}) ; my $event_sys_cnt = 0 ; my $got_some_fixed = 0 ; # my $event_sys_test_status = 0 ; # my $color = '#164473' ; # Dark Blue print "1. quote_accepted [fixed_system_overall_status=$db{$table}{$id}{fixed_system_overall_status}] [event_system_id_multiple=$db{$table}{$id}{event_system_id_multiple}] \n" if $debug ; foreach my $sys_id (@event_system_ids) { if ($db{event_systems}{$sys_id}{system_type} eq 'fixed') { print "1. quote_accepted fixed [event_id=$sys_id] [event_system_id_multiple=$db{$table}{$id}{event_system_id_multiple}] \n" if $debug ; # $tt_txt = 'Accepted and tests show All Clear for the Fixed Systems' if $tt_txt eq 'Accepted' ; $color = '#164473' unless $got_some_fixed ; # Dark Blue $got_some_fixed = 1 ; if ($fixed_system_overall_statuses[$event_sys_cnt] == 3) { # Not Clear $color = '#5d09d3' ; # Dark Purple # $tt_txt = 'Accepted but Not Clear on some Fixed Systems' ; } elsif ($fixed_system_overall_statuses[$event_sys_cnt] == 2) { # Sound Issue $color = '#5d092c' ; # $tt_txt = 'Accepted but Sound Issue found on some Fixed Systems' ; } } $event_sys_cnt++; } # if ($got_some_fixed) { $style = "style='background-color:#$fixed_status_color;border-color:#$fixed_status_color'"; } } elsif ($db{$table}{$id}{quote_rejected}) { $color = '#ca0ad3' ; # purple } elsif ($db{$table}{$id}{quote_created}) { $color = '#f6e305' ; # yellow } elsif ($db{$table}{$id}{quote_pending}) { $color = '#eda52d' ; # orange } # my $jstitle = 'EVENT: ' . $quote_nr ; my $jstitle = 'EVENT: ' . $ref . ' [' . $quote_nr . ']' ; # if (substr($usertype,0,6) eq 'casual') { if ($is_operator && $operator_level < 2 && !$is_temp_calibrator) { # %ok_for_casual = () ; $ok_for_casual = 0 ; print "1. ok_for_casual [$ok_for_casual] [ttl_operator_grps=$ttl_operator_grps]\n" if $debug ; for (1 .. $ttl_operator_grps) { print "2. ok_for_casual [$ok_for_casual] [$_] [$operator{$_}]\n" if $debug ; # next unless $operator{$_} ; # print "2. ok_for_casual [$date_start->$date_end, $quote_nr, $userid][show_available:$show_available{$date_start}{$date_end}{$quote_nr}{$userid} and in_the_past:$in_the_past!=1 and casual_type:$casual_type{$userid} eq operator:$operator{$_})]\n" if $debug ; # print "2. ok_for_casual [in_the_past=$in_the_past]\n" if $debug ; # if ($show_available{$date_start}{$date_end}{$operator{$_}}{$quote_nr}{$userid} and $in_the_past!=1 and $casual_type{$userid} eq $operator{$_}) { if ($show_available{$date_start}{$date_end}{$quote_nr}{$userid} and $in_the_past!=1) { $jstitle .= ' [' . $show_available{$date_start}{$date_end}{$quote_nr}{$userid} . ']' ; $color = $color_available{$date_start}{$date_end}{$quote_nr}{$userid} ; $ok_for_casual = 1 ; print "3. ok_for_casual [$ok_for_casual] [$show_available{$date_start}{$date_end}{$quote_nr}{$userid}] [$color] $date_start->$date_end, $quote_nr, $userid \n" if $debug ; # } elsif ($in_the_past!=1 and $casual_type{$userid} eq $operator{$_}) { } elsif ($in_the_past!=1) { $ok_for_casual = 1 ; } else { $color = '#efad1d' ; } print "4. ok_for_casual [$ok_for_casual] $operator{$_} = $ok_for_casual{$operator{$_}} \n" if $debug ; last if $ok_for_casual ; } print "5. ok_for_casual [$ok_for_casual] \n" if $debug ; next unless $ok_for_casual ; } # if ($ref and $show_available{$date_start}{$date_end}{$quote_nr}{$userid} eq '') { # $jstitle .= " [$ref]" # } $jstitle =~ s/\'//g ; $jstitle =~ s/ +/ /; $jstitle =~ s/\r\n|\n/ - /g; $jstitle =~ s/\t/ /g; my $link = qq~javascript:editEventQuote('$quote_nr');~; # for (1 .. $ttl_operator_grps) { # $operators_subscribed{$_} = sprintf("%0.0f",$total_casuals_working{$date_start}{$date_end}{$operator{$_}}{$quote_nr}) ; # my $snames = $subscribed_names{$date_start}{$date_end}{$operator{$_}}{$quote_nr} ; # chop $snames ; chop $snames ; # $operator_names{$_} = $snames if $snames ; # } @disp_operators = () ; $add_operators = '' ; # unless (substr($usertype,0,6) eq 'casual') { if ($glod_user_level > 1) { foreach $_opid (@operator_ids) { push @disp_operators, $user_name{$_opid} ; } my $operator_names_list = join(", ", @disp_operators) ; $add_operators = ($operator_names_list) ? ' [' . $operator_names_list . ']' : '' ; # for (1 .. $ttl_operator_grps) { # # $jstitle .= " [$operators_subscribed{$_}/$nr_of_casuals{$_} casual $operator{$_} subscribed]" if $nr_of_casuals{$_} > 0 ; # # $add_operators .= " [$operator_names{$_} ($operator{$_})]" if $operator_names{$_} and $operator{$_} ; # $add_operators .= " [$operators_subscribed{$_}/$nr_of_casuals{$_} casual $operator{$_} subscribed]" if $operator_names{$_} and $operator{$_} ; # } } # if (substr($usertype,0,6) eq 'casual') { # $link = qq~javascript:dlgMdl('/cgi-bin/scripts/dialog/events.pl?event&$quote_nr','$jstitle','','medium-dialog');~; # } for (1 .. $ttl_operator_grps) { # if ($operators_subscribed{$_} >= $nr_of_casuals{$_} and $in_the_past!=1 and $show_available{$date_start}{$date_end}{$quote_nr}{$userid} eq '' and $casual_type{$userid} eq $operator{$_}) { if ($operators_subscribed{$_} >= $nr_of_casuals{$_} and $in_the_past!=1 and $show_available{$date_start}{$date_end}{$quote_nr}{$userid} eq '') { # $color = '#ff4136' ; # red # $jstitle .= " [fully SUBSCRIBED for casual $operator{$_}]" ; $jstitle .= " [fully SUBSCRIBED for operators]" ; } } # "title": "CASUALS : $add_operators", # "title": "$ref [$quote_nr] : $add_operators", # if ($add_operators) { # # $added_color = ($in_the_past) ? '#999999' : '#00FF00' ; # # $added_color = ($in_the_past) ? '#999999' : '#35e2e2' ; # $added_color = ($in_the_past) ? '#999999' : $color ; # $json .= qq~{ # "id": "$id", # "title": "$ref []", # "start": "$start", # "end": "$end", # "color": "$added_color", # "url": "javascript:dlgMdl('/cgi-bin/scripts/dialog/events.pl?event&$quote_nr','$jstitle','','medium-dialog');" # },~ ; # # } elsif ($add_operators eq '' and $operator{$_} eq '') { # } else { # $color = ($color) ? $color : '#efad1d' ; # my $cal_title = () ? $ref : ; # $added_color = ($in_the_past) ? '#999999' : $color ; my $disp_title = &common_clean_json_two("$ref$add_operators") ; $jstitle = &common_clean_json_two($jstitle) ; $json_ele = qq~{ "id": "$id", "title": "$disp_title", "start": "$start", "end": "$end", "color": "$color", "url": "javascript:dlgMdl('/cgi-bin/scripts/dialog/events.pl?event&$quote_nr','$jstitle','','medium-dialog');" }~ ; my $json_rep = repair_json($json_ele); $json .= qq~$json_rep,~ if $json_rep; if ($glod_user_level < 3) { # < 3 my @operator_ids = split(",",$db{$table}{$id}{operator_ids}) ; if (grep { $_ == $userid } @operator_ids) { my $start_time = substr($db{$table}{$id}{date_from},11) ; my $start_to = substr($db{$table}{$id}{date_to},11) ; $json_ele = qq~{ "id": "$id", "title": "On Duty [$start_time TO $start_to]", "start": "$start", "end": "$end", "color": "black" }~ ; my $json_rep = repair_json($json_ele); $json .= qq~$json_rep,~ if $json_rep; } elsif ($db{$table}{$id}{daily_operator_ids}) { my ($sy,$sm,$sd) = split("-",$start) ; foreach my $sys (split(/\|/,$db{$table}{$id}{daily_operator_ids})) { my $day_cnt = 0 ; foreach my $op (split(/\;/,$sys)) { $day_cnt++ ; $op_days{$day_cnt} = 1 if $op && $op eq $userid ; } } my $start_of_interval = 0 ; my $next_day = 0 ; my @times_from = ($db{$table}{$id}{times_from} =~ /(\d+)/g) ? split(/\;/,substr($db{$table}{$id}{date_from},11) . ';' . $db{$table}{$id}{times_from}) : (substr($db{$table}{$id}{date_from},11)) ; my @times_to = ($db{$table}{$id}{times_to} =~ /(\d+)/g) ? split(/\;/,$db{$table}{$id}{times_to} . ';' . substr($db{$table}{$id}{date_to},11)) : (substr($db{$table}{$id}{date_to},11)) ; foreach my $day_cnt (sort {$a <=> $b} keys %op_days) { next unless $op_days{$day_cnt} ; $start_of_interval = $day_cnt unless $start_of_interval ; $next_day = $day_cnt + 1 ; if (!$op_days{$next_day} || ($op_days{$next_day} && "$times_from[$next_day-1] TO $times_to[$next_day-1]" ne "$times_from[$day_cnt-1] TO $times_to[$day_cnt-1]")) { my ($sy1,$sm1,$sd1) = Add_Delta_Days($sy,$sm,$sd,$start_of_interval-1) ; my ($ey1,$em1,$ed1) = Add_Delta_Days($sy,$sm,$sd,$day_cnt-1) ; $sm1 = sprintf("%02d",$sm1) ; $sd1 = sprintf("%02d",$sd1) ; $em1 = sprintf("%02d",$em1) ; $ed1 = sprintf("%02d",$ed1) ; $json_ele = qq~{ "id": "$id", "title": "On Duty [$times_from[$day_cnt-1] TO $times_to[$day_cnt-1]]", "start": "$sy1-$sm1-$sd1\T$times_from[$start_of_interval-1]", "end": "$ey1-$em1-$ed1\T$times_to[$day_cnt-1]", "color": "black" }~ ; $start_of_interval = 0 ; my $json_rep = repair_json($json_ele); $json .= qq~$json_rep,~ if $json_rep ; } } } } # $json .= qq~{ # "id": "$id", # "title": "$ref$add_operators", # "start": "$start", # "end": "$end", # "color": "$color", # "url": "javascript:dlgMdl('/cgi-bin/scripts/dialog/events.pl?event&$quote_nr','$jstitle','','medium-dialog');" # },~ ; # } # $json .= qq~{ # "id": "$id", # "title": "$jstitle", # "start": "$start", # "end": "$end", # "color": "$color", # "url": "$link" # },~ ; } } #------------------------------------------------------------------------------------------ # sub get_db_leave { # unless (($param{start}) and ($param{end})) { return ; } # &db_min_ro('users','*','','','') ; # foreach my $id (keys %{$db{users}}) { $user_name{$id} = $db{users}{$id}{name} ; } # # &db_min_ro('events','*',"`startdate` >= '$param{start} 00:00:00' AND `startdate` <= '$param{end} 23:59:59'",'','') ; # &db_min_ro('events','*',"((`startdate` >= '$param{start} 00:00:00' AND `startdate` <= '$param{end} 23:59:59') OR ('$param{start} 23:59:59' >= `startdate` AND '$param{start} 00:00:00' <= `enddate`))",'','') ; # foreach my $id (keys %{$db{events}}) { # &common_debug("get_db_leave - $db{events}{$id}{category} -> $db{events}{$id}{title}"); # unless (($db{events}{$id}{category} eq 'leave') or # ($db{events}{$id}{category} eq 'weekend_work') or # ($db{events}{$id}{category} eq 'public_holiday') or # ($db{events}{$id}{category} eq 'other')) { next; } # don't display birthdays on calendar # # if (($username ne 'rory') and ($db{events}{$id}{category} eq 'weekend_work')) { next ; } # my $start = $db{events}{$id}{startdate} ; $start =~ s/ /T/g ; # my $end = $db{events}{$id}{enddate} ; $end =~ s/ /T/g ; # # my $title = $db{events}{$id}{title} ; # my $title = ucfirst $db{events}{$id}{category} ; $title =~ s/\_/ /g ; # # if ($db{events}{$id}{category} eq 'leave') { $color = '#338e3c' ; my $leave_type = ucfirst $db{events}{$id}{type} ; $title = $leave_type . ' Leave' ; } else { $color = '#3498DB' ; } # if ($db{events}{$id}{category} eq 'leave') { # $color = '#ff00ff' ; # my $leave_type = ucfirst $db{events}{$id}{type} ; # $title = $leave_type . ' Leave' ; # } # elsif ($db{events}{$id}{category} eq 'weekend_work') { # $start = &cal_set_time($db{events}{$id}{startdate},-24); $start =~ s/ /T/g ; # # $color = '#fbc808' ; # $color = 'purple' ; # } # elsif ($db{events}{$id}{category} eq 'public_holiday') { # $start = substr($db{events}{$id}{startdate},0,10) . 'T00:00:00'; # $end = substr($db{events}{$id}{enddate},0,10) . 'T23:59:59'; # $color = 'red' ; # } # elsif ($db{events}{$id}{category} eq 'other') { # $color = '#e3c728' ; # yellow # } # else # { # $color = '#3498DB' ; # # $color = '#ff00ff' ; # # $color = '#fbc808' ; # } # my ($s_date,$s_time) = split(/\ /,$db{events}{$id}{startdate}) ; my ($s_ccyy,$s_mm,$s_dd) = split(/\-/,$s_date) ; my $s_txt = Date_to_Text($s_ccyy,$s_mm,$s_dd); my ($s_hr,$s_mn,$s_sc) = split(/\:/,$s_time) ; # my ($e_date,$e_time) = split(/\ /,$db{events}{$id}{enddate}) ; my ($e_ccyy,$e_mm,$e_dd) = split(/\-/,$e_date) ; my $e_txt = Date_to_Text($e_ccyy,$e_mm,$e_dd); my ($e_hr,$e_mn,$e_sc) = split(/\:/,$e_time) ; # my $disp_title = qq($title [$user_name{$db{events}{$id}{user_id}}] $s_txt - $e_txt) ; # if (($db{events}{$id}{category} eq 'public_holiday') or ($db{events}{$id}{category} eq 'other')) { # my $notes = $db{events}{$id}{notes} ; $notes =~ s/"/'/g ; # $disp_title = qq($title : $db{events}{$id}{notes}) ; } # $disp_title = &fix_json($disp_title) ; # # "title": "$title [$user_name{$db{events}{$id}{user_id}}] $s_hr:$s_mn on $s_txt - $e_hr:$e_mn on $e_txt ", # $json .= qq({ # "id": "$id", # "title": "$disp_title", # "start": "$start", # "end": "$end", # "color": "$color", # "url": "javascript:dlgMdl('/cgi-bin/scripts/dialog/events.pl?$id','$title','','medium-dialog');" # },) ; # } # } #------------------------------------------------------------------------------------------ # sub fix_json { # my ($json) = @_ ; # $json =~ s/\r\n|\n/ - /g; # $json =~ s/\t/ /g; # $json =~ s/"/'/g; # $json =~ s/\&/\&/g; # return ($json) ; # } #------------------------------------------------------------------------------------------ sub cal_set_time { my ($datetime,$hr_diff) = @_ ; # 2015-10-06 17:35:39 unless ($hr_diff) { $hr_diff = 1 ; } my ($date,$time) = split(/ /,$datetime) ; my $dy = substr($date,0,4) ; my $dm = substr($date,5,2) ; my $dd = substr($date,8,2) ; my ($th,$tm,$ts) = split(/:/,$time) ; my ($syear,$smonth,$sday,$shour,$smin,$ssec) = Add_Delta_DHMS($dy,$dm,$dd,$th,$tm,$ts,0,$hr_diff,0,0); # add 1 hour $smonth = sprintf("%02s", $smonth) ; $sday = sprintf("%02s", $sday) ; $shour = sprintf("%02s", $shour) ; $smin = sprintf("%02s", $smin) ; $ssec = sprintf("%02s", $ssec) ; return("$syear-$smonth-$sday $shour:$smin:$ssec"); } #------------------------------------------------------------------------------- # use db ; # use db_min ; use common ; use session ; use today ; 1;