#!/usr/bin/perl BEGIN { use lib '/usr/home/cfg' ; require push_inc ; } require cfg ; #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- use CGI::Carp qw(fatalsToBrowser); use CGI; use Excel::Writer::XLSX ; &today; #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- @ARGV = split(/\\*\&/, $ENV{'QUERY_STRING'}); $action = $ARGV[0] ; our ($q) = CGI -> new() ; our $iaction = $q -> param('iaction') || $action ; our $isaved = $q -> param('isaved') || '' ; # our $debug = 1 ; our $double_box_layout = 1 ; #-------- page opts -------------------------------------------------------------------------------------------------------------------------------------------------- &page_opts ; #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- print "Content-type: text/html\n\n"; our @all_select_ids = () ; our $minify_jquery = 1 ; &db_open_ro ; $db_ignore_open_close = 1 ; &common_min_action ; $db_ignore_open_close = 0 ; &db_close_conn ; exit; #------------------------------------------------------------------------------------------ sub report_screen { # # &filter_screen if $ENV{QUERY_STRING} eq 'filter' ; # our $lcol = 2 ; # our $fcol = 5 ; # # my ($set_year,$set_month,$set_day) = Add_Delta_Days($now_year,$now_mm,$now_dd,-42) ; # 6 weeks back # # $set_month = sprintf("%02s", $set_month) ; # # $set_day = sprintf("%02s", $set_day) ; # # my $set_ccyy_dd_mm = $set_year . '-' . $set_month . '-' . $set_day ; # &select_opts ; $print_box_content_rows .= &common_min_forms_start('report') ; # # &common_min_select_opts('customer_name','customers','name','','','','') ; # $print_box_content_rows .= &common_min_form_select('camera_system','') ; # $print_box_content_rows .= &common_min_form_input('serial_number','') ; # $print_box_content_rows .= &common_min_form_input('part_number','') ; # # $print_box_content_rows .= &common_min_form_datepicker('quotes_from','') ; # $set_ccyy_dd_mm # # $print_box_content_rows .= &common_min_form_datepicker('quotes_to','') ; # $now_ccyy_mm_dd # # # $print_box_content_rows .= &common_min_form_input('po_nr','') ; # # $print_box_content_rows .= &common_min_form_input('invoice_nr','') ; # # &common_min_select_opts('country','countries','name','','','','') ; # # $print_box_content_rows .= &common_min_form_select('country','') ; # # $print_box_content_rows .= &common_min_form_checkbox('accepted','','') ; # Display all event_quotes that is Accepted # # $print_box_content_rows .= &common_min_form_checkbox('closed','','') ; # Display all event_quotes that is Cancelled # # &common_min_select_opts('type','event_types','name','','','','') ; # # $print_box_content_rows .= &common_min_form_select('type','') ; # # &common_min_select_opts('region_id','regions','name','','','',''); # # &common_min_select_opts('city_id','cities','city','','','',''); # # &common_min_select_opts('organisation_ids','organisations','name','','','','') ; # # &common_min_select_opts('sport_type_ids','sport_types','name','','','','') ; # # $preferred_title{region_id} = "Region" ; # # $preferred_title{city_id} = "City" ; # # $preferred_title{organisation_ids} = "Venue" ; # # $preferred_title{sport_type_ids} = "Sport Type" ; # # $print_box_content_rows .= &common_min_form_select('region_id','') ; # # $print_box_content_rows .= &common_min_form_select('city_id','') ; # # $print_box_content_rows .= &common_min_form_select('organisation_ids','') ; # # $print_box_content_rows .= &common_min_form_select('sport_type_ids','') ; $print_box_content_rows .= &common_min_forms_end('','','report') ; &common_min_search_screen ; } #------------------------------------------------------------------------------- sub report_ifields { } #------------------------------------------------------------------------------- sub validate { # my $exists = '' ; # $i{name} = lc $i{name} ; # $i{name} =~ s/ //gi ; # &db_min_ro($table,'*',"name = '$i{name}'",'name','') ; # foreach my $id (keys %{$db{$table}}) { if ($db{$table}{$id}{name} eq $i{name}) { $exists = 1 ; } } # if ($exists) { # $alert = &common_min_alert('warning',"NAME ALREADY EXISTS!",'ok') ; # %col_name = (); # &common_min_add_screen; # &common_min_screen1; # } } #------------------------------------------------------------------------------------------ sub insert { &add_db_fields ; # $i{lastupdate} = "$now_ccyy_mm_dd $now_hour:$now_min:$now_sec" ; &process_table ; &defualt_values ; foreach (keys %i) { $ignore{$_} = 1 unless $i{$_} ; } &db_min_insert($table) ; # for (keys %i) { # print "\n $_ : $i{$_}" ; # } # exit ; } #------------------------------------------------------------------------------------------ sub update { unless ($i{id}) { $error = qq(NO ID) ; return ; } &db_min_ro('rma',"*","id='$i{id}'","","") ; &edit_db_fields ; # unless ($i{block}) { $i{block} = '0' ; } # $i{lastupdate} = "$now_ccyy_mm_dd $now_hour:$now_min:$now_sec" ; &process_table ; &defualt_values ; foreach (keys %{$db{rma}{$i{id}}}) { $ignore{$_} = 1 if $db{rma}{$i{id}}{$_} eq $i{$_} } &db_min_upd($table,"id='$i{id}'") ; } #------------------------------------------------------------------------------------------ sub defualt_values { $i{rma_status_id} = 0 unless $i{rma_status_id} ; $i{customer_id} = 0 unless $i{customer_id} ; $i{camera_system_id} = 0 unless $i{camera_system_id} ; } #------------------------------------------------------------------------------------------ sub process_table { for (1 .. 5) { $ignore{"support_fault_$_"} = 1 ; $ignore{"date_$_"} = 1 ; $i{support_faults} .= qq~$i{"support_fault_$_"};~ ; $i{support_fault_dates} .= qq~$i{"date_$_"};~ ; } chop $i{support_faults} if $i{support_faults} ; chop $i{support_fault_dates} if $i{support_fault_dates} ; } #------------------------------------------------------------------------------------------ sub list_screen { # my %seen_camera = () ; # &db_min_ro('event_quotes','id, camera_system_id','','','') ; # foreach my $id (keys %{$db{'event_quotes'}}) { # next if $seen_camera{$db{'event_quotes'}{$id}{camera_system_id}} ; # $seen_camera{$db{'event_quotes'}{$id}{camera_system_id}} = 1 ; # } # &db_min_ro('quotes','id, camera_system_id','','','') ; # foreach my $id (keys %{$db{'quotes'}}) { # next if $seen_camera{$db{'quotes'}{$id}{camera_system_id}} ; # $seen_camera{$db{'quotes'}{$id}{camera_system_id}} = 1 ; # } &load_data ; our @sql_col_display = ("date_received","client","system","serial_nr","fault_reported","RMA_date","status","date_supplier_returned","date_returned_client","replacement_date","replacement_serial") ; our $xlsx_title_heading = "RMA Report" ; our $xlsxdir = "rma_report" ; our $xlsxreportname = "RMA_Report" ; &report_xlsx_export_header("$xlsxreportname",$xlsxdir,'',$xlsx_title_heading) ; $xlsxrow-- ; foreach my $id (keys %{$db{$table}}) { my $disp_blocked = qq(); if ($db{$table}{$id}{block}) { $disp_blocked = qq(); } # $opts{$lcpage} .= qq~~ ; my $edit_butt = '' ; my $del_butt = '' ; if ($useropts{super}{$username}) { $edit_butt = qq~ ~ ; } if ($useropts{boss}{$username} or $useropts{super}{$username}) { $del_butt = qq~ ~ if not $seen_camera{$id} ; $del_butt = qq~ ~ if $seen_camera{$id} ; } $print_tbody .= qq~~ ; $xlsxcol = 0 ; foreach (@sql_col_display) { my $val = $db{$table}{$id}{$_} ; my $val_min = '' ; my $formatting = $format84 ; if ($_ eq 'client') { $val = $db{customers}{$db{$table}{$id}{customer_id}}{name} ; } elsif ($_ eq 'system') { $val = $db{camera_systems}{$db{$table}{$id}{camera_system_id}}{name} ; $val .= " [" . $db{camera_systems}{$db{$table}{$id}{camera_system_id}}{description} . "]" if $db{camera_systems}{$db{$table}{$id}{camera_system_id}}{description} ; } elsif ($_ eq 'fault_reported') { # if ($db{$table}{$id}{replacement}) { # $val = &set_tick("green") ; # } else { # $val = &set_tick("red") ; # } } elsif ($_ eq 'RMA_date') { } elsif ($_ eq 'status') { $val = $db{rma_status}{$db{$table}{$id}{rma_status_id}}{status} } elsif ($_ eq 'date_supplier_returned') { } elsif ($_ eq 'date_returned_client') { } elsif ($_ eq 'replacement_date') { } elsif ($_ eq 'replacement_serial') { } if (!$val_min) { $val_min = $val ; } &xlsxcreator_write_xlsx($ws,$xlsxrow,$xlsxcol,$val_min,$formatting) ; $xlsxcol++ ; $print_tbody .= qq~$val~ ; } $print_tbody .= qq~$edit_butt$del_butt~ ; $xlsxrow++ ; # $id # $db{$table}{$id}{name} # $db{$table}{$id}{description} # # $edit_butt # $del_butt # # ~ ; } &report_xlsx_export_footer('K',15,$xlsxdir) ; } #------------------------------------------------------------------------------------------ sub set_tick { my ($color,$tooltip) = @_ ; $tick{green} = qq~2~ ; $tick{orange} = qq~1~ ; $tick{red} = qq~0~ ; return ($tick{$color}) ; } #------------------------------------------------------------------------------------------ sub load_data { &db_min_ro('camera_systems',"*",'','','') ; &db_min_ro('customers',"id,name",'','','') ; &db_min_ro('rma_status',"*",'','','') ; # &db_min_ro('camera_systems',"*",'','','') ; # &db_min_ro('camera_systems',"*",'','','') ; # &db_min_ro('camera_systems',"*",'','','') ; &db_min_ro($table,'*','','','') ; } #------------------------------------------------------------------------------------------ sub add_db_fields { &hidden_db_fields; $ignore{id} = 1 ; } #------------------------------------------------------------------------------------------ sub edit_db_fields { &hidden_db_fields; $hidden{id} = 1 ; # 1 = bypass for db update } #------------------------------------------------------------------------------------------ sub hidden_db_fields { $ignore{iaction} = 1 ; $ignore{date_received} = 1 ; # $readonly{name} = 'READONLY' ; # $required{name} = 1 ; # $required{description} = 1 ; } #------------------------------------------------------------------------------------------ sub add_screen { our ($lcol,$fcol) = &common_min_columns($label_col,$field_col) ; # called from common_add_screen &select_opts ; our $savjqy = 1 ; # incorporate jquery into the save event to accommodate the multiple chosen options &build_boxes_edit ; # &common_min_extra_crumb("search-$lcpage\s","Search Screen") ; } #------------------------------------------------------------------------------------------ sub edit_screen { our ($lcol,$fcol) = &common_min_columns($label_col,$field_col) ; &select_opts($i{id}) ; # $addcpb = 1 ; # add copy button to the edit screen our $savjqy = 1 ; # incorporate jquery into the save event to accommodate the multiple chosen options &build_boxes_edit($i{id}) ; &common_min_extra_crumb("search-$lcpage\s","Search Screen") ; } #------------------------------------------------------------------------------------------ sub build_boxes_edit { my ($id) = @_ ; $allow_deselect{"camera_system_id"} = 1 ; $allow_deselect{"part_number"} = 1 ; $allow_deselect{"customer_id"} = 1 ; $allow_deselect{"rma_status_id"} = 1 ; $print_box_content_rows .= &common_min_forms_start($table) ; $print_box_content_rows .= qq~
~ ; &build_boxes_left($id); $print_box_content_rows .= qq~
~ ; &build_boxes_right($id); $print_box_content_rows .= qq~
~ ; $print_box_content_rows .= ($id) ? &common_min_forms_end($id,$table,'update',$skip) : &common_min_forms_end($id,$table,'save',$skip) ; my $all_select_ids_str = join(",",@all_select_ids) ; $trigger_jquery_raw .= qq~\$("$all_select_ids_str").chosen({allow_single_deselect:true});~ ; } #---------------------------------------------------------------------------------------- sub build_boxes_left { my ($id) = @_ ; # our ($lcol,$fcol) = &common_min_columns(3,9) ; $add_form_fields = ''; # Camera System (dropdown pull from database) # Serial Number (enter nr and pull from database) # Part Number (pull from database) # System Name (pull from database) # Warranty period - From Date to Date (Show date from ‘Date Received’ database from camera page – plus add 15 months from this date which then gets displayed) - this is the automatic warranty period for all system $preferred_title{serial_nr} = "Serial Number" ; $preferred_title{warranty_start} = "Warranty Period" ; $add_form_fields .= &common_min_form_select('camera_system_id') ; if ($db{$table}{$id}{camera_system_id}) { $trigger_jquery_raw .= qq~ \$("#selectCamera_system_id").val($db{$table}{$id}{camera_system_id}) ; \$("#selectCamera_system_id").trigger("chosen:updated") ; ~ ; } $add_form_fields .= &common_min_form_input('serial_nr',$db{$table}{$id}{serial_nr}) ; $add_form_fields .= &common_min_form_select('part_number') ; if ($db{$table}{$id}{part_number}) { $trigger_jquery_raw .= qq~ \$("#selectPart_number").val($db{$table}{$id}{part_number}) ; \$("#selectPart_number").trigger("chosen:updated") ; ~ ; } $add_form_fields .= &common_min_form_input('system_name',$db{$table}{$id}{system_name}) ; $readonly{warranty_start} = "READONLY" ; # my $a = &common_min_form_input('warranty_start','','','',1) ; $readonly{warranty_end} = "READONLY" ; my $default_date = "$now_ccyy_mm_dd" ; my $warranty_start = $db{$table}{$id}{warranty_start} ; $warranty_start = $default_date unless $warranty_start ; my $warranty_end = $db{$table}{$id}{warranty_end} ; $warranty_end = $default_date unless $warranty_end ; $add_form_fields .= &common_min_form_input('warranty_start',$warranty_start,'','',1) ; $add_form_fields .= qq~
~ ; $add_form_fields .= &common_min_form_datepicker_col('warranty_end',$warranty_end) ; $add_form_fields .= qq~~ ; # $add_form_fields .= qq~~ ; # $add_form_fields .= qq~~ ; $print_box_content_rows .= &common_min_box_top('camera',' Camera Details',$box_right_bg); #film $print_box_content_rows .= $add_form_fields ; $print_box_content_rows .= &common_min_box_foot; $print_box_content_rows .= qq~
~ ; # fixes row highlighting issue # #----------------- NEW BOX LEFT --------------------------------------------------------------------- $add_form_fields = '' ; $fcol=4 ; # if ($_>$cntcamloop) { $cam_display_butt = qq~display:none;~ ; } else { $cam_display_butt = '' ; } # Client (select from Dropdown) # Date Received (capture date it was received by ITV warehouse) # Client Fault Note –a note box where they can note what client says is faulty # Support Fault Report: - Note box they can enter what support has found and a date field (to show progress the support team # ADD button to add more Note box and date fields if there is more work to be done and keep track of dates of each note added # Remarks $preferred_title{customer_id} = "Client" ; $add_form_fields .= &common_min_form_select('customer_id') ; if ($db{$table}{$id}{customer_id}) { $trigger_jquery_raw .= qq~ \$("#selectCustomer_id").val($db{$table}{$id}{customer_id}) ; \$("#selectCustomer_id").trigger("chosen:updated") ; ~ ; } $add_form_fields .= &common_min_form_textarea('client_fault_note',$db{$table}{$id}{client_fault_note}) ; $readonly{date_received} = "READONLY" ; # $default_date = "$now_ccyy_mm_dd 00:00:00" ; my $date_received = $db{$table}{$id}{date_received} ; $date_received = $default_date unless $date_received ; $add_form_fields .= &common_min_form_datepicker('date_received',$date_received) ; my %disp_sn_style = () ; $lcol=2 ; my @a = split(/;/,$db{$table}{$id}{support_faults}) ; my @b = split(/;/,$db{$table}{$id}{support_fault_dates}) ; for (2 .. 5) { $disp_sn_style{$_} = qq~style="display:none;"~ unless $a[$_-1] ; } $default_date = "$now_ccyy_mm_dd" ; for (1 .. 5) { $add_form_fields .= qq~
~ ; my $col1 = "support_fault_$_" ; # $required{$col} = 1 ; &common_min_forms_required ; $add_form_fields .= &common_min_form_input($col1,$a[$_-1],'','',1) ; $add_form_fields .= qq~
~ ; my $date = $b[$_-1] ; $date = $default_date unless $b[$_-1] ; my $col2 = "date_$_" ; $readonly{$col2} = "READONLY" ; $add_form_fields .= &common_min_form_datepicker_col($col2,$date) ; # $fcol=3 ; $add_form_fields .= qq~
~; $add_form_fields .= qq~~ if $_ < 5 ; $trigger_jquery_raw .= qq~\$("#btn_serial_nr_$_").css("display","none");~ if ($a[1] and $_ == 1) or ($a[$_] and $a[$_-1]) ; $trigger_jquery_raw .= qq~ \$("#btn_serial_nr_$_").click(function () { let v = $_ + 1 ; \$("#btn_serial_nr_$_").hide() ; \$("#btn_serial_nr_"+v).show() ; \$("#sn_row_"+v).show() ; let v2 = $_ + 2 ; if (\$("#sn_row_"+v2).css("display") !== "none") { \$("#btn_serial_nr_"+v).hide() ; } }) ; ~ ; $add_form_fields .= qq~
~ ; } # $default_date = "$now_ccyy_mm_dd 00:00:00" ; $lcol = 2 ; # $add_form_fields .= qq~ #
 
~ ; $add_form_fields .= qq~
~ ; $preferred_title{remarks_1} = "Remarks" ; $add_form_fields .= &common_min_form_textarea('remarks_1',$db{$table}{$id}{remarks_1}) ; $add_form_fields .= qq~
~ ; $print_box_content_rows .= &common_min_box_top('user',' Client Details',$box_right_bg); #film $print_box_content_rows .= $add_form_fields ; $print_box_content_rows .= &common_min_box_foot; $print_box_content_rows .= qq~
~ ; # fixes row highlighting issue } #---------------------------------------------------------------------------------------- sub build_boxes_right { my ($id) = @_ ; my $box_icon = '' ; #----------------------------------------------------------------- New box -------------------------------------- &db_min_ro('customers','id,name','','','') ; foreach my $cust_id (keys %{$db{customers}}) { $customer{$cust_id} = $db{customers}{$cust_id}{name} ; } my $q_nr = $db{$table}{$id}{quote_nr} ; my $c_nr = $db{$table}{$id}{camera_nr} ; # &common_load_quote_vars("='$id'"); &common_load_quote_vars("cameras.quote_nr='$q_nr' AND quotes.quote_nr='$q_nr'"); $lcol = 3 ; $fcol = 4 ; $readonly{rma_date_requested} = "READONLY" ;$readonly{rma_accepted} = "READONLY" ; $readonly{date_returned} = "READONLY" ; $readonly{date_to_supplier} = "READONLY" ; $preferred_title{rma_status_id} = "Status" ; $preferred_title{remarks_2} = "Remarks" ; my $rma_date_requested = $db{$table}{$id}{rma_date_requested} ; $rma_date_requested = $default_date unless $rma_date_requested ; my $rma_accepted = $db{$table}{$id}{rma_accepted} ; $rma_accepted = $default_date unless $rma_accepted ; my $date_to_supplier = $db{$table}{$id}{date_to_supplier} ; $date_to_supplier = $default_date unless $date_to_supplier ; my $date_returned = $db{$table}{$id}{date_returned} ; $date_returned = $default_date unless $date_returned ; $print_box_content_rows .= &common_min_box_top('list-alt',' RMA Details',$box_right_bg,$box_icon,'') ; #qrcode $print_box_content_rows .= &common_min_form_datepicker('rma_date_requested',$rma_date_requested) ; $print_box_content_rows .= &common_min_form_input('ticket_nr',$db{$table}{$id}{ticket_nr}) ; $print_box_content_rows .= &common_min_form_datepicker('rma_accepted',$rma_accepted) ; $print_box_content_rows .= &common_min_form_textarea('rma_rejected',$db{$table}{$id}{rma_rejected}) ; $print_box_content_rows .= &common_min_form_datepicker('date_to_supplier',$date_to_supplier) ; $print_box_content_rows .= &common_min_form_select('rma_status_id') ; $print_box_content_rows .= &common_min_form_textarea('remarks_2',$db{$table}{$id}{remarks_2}) ; $print_box_content_rows .= &common_min_form_datepicker('date_returned',$date_returned) ; $print_box_content_rows .= &common_min_box_foot ; if ($db{$table}{$id}{rma_status_id}) { $trigger_jquery_raw .= qq~ \$("#selectRma_status_id").val($db{$table}{$id}{rma_status_id}) ; \$("#selectRma_status_id").trigger("chosen:updated") ; ~ ; } #----------------------------------------------------------------- New box -------------------------------------- $readonly{replacement_date} = "READONLY" ; $fcol=4; my $replacement_date = $db{$table}{$id}{replacement_date} ; $replacement_date = $default_date unless $replacement_date ; $print_box_content_rows .= &common_min_box_top('wrench',' Replacement',$box_right_bg,$box_icon,'camera-replacement-box') ; $print_box_content_rows .= &common_min_form_checkbox('replacement',$db{$table}{$id}{replacement},'',1) ; $print_box_content_rows .= &common_min_form_datepicker('replacement_date',$replacement_date) ; $print_box_content_rows .= &common_min_form_input('replacement_camera_nr',$db{$table}{$id}{replacement_camera_nr}) ; $print_box_content_rows .= qq~ ~ ; # $trigger_jquery_raw .= qq~ # \$("#checkboxReplacement").on("change",function () { # console.log("checkboxReplacement") ; # }) ; # ~ ; $print_box_content_rows .= &common_min_box_foot ; $trigger_jquery .= qq~ \$('.iPhoneCheckLabelOff').css("top","-5px") ; \$('.iPhoneCheckLabelOn').css("top","-5px") ; ~ ; if ($db{$table}{$id}{replacement}) { $trigger_jquery_raw .= qq~ \$("#checkboxReplacement").prop('checked',true) ; ~ ; } } #---------------------------------------------------------------------------------------- sub select_opts { my ($id) = @_ ; &db_min_ro($table,'*',"`id`='$id'",'','') if $id ; $select{camera_system_id} = 1 ; $select{customer_id} = 1 ; &common_min_select_opts('camera_system_id','camera_systems','name','','','description','','','','','name') ; &common_min_select_opts('customer_id','customers','name','','','','','','',"id,name",'name') ; &common_min_select_opts('rma_status_id','rma_status','status','','','','','','','','status') ; $trigger_jquery_raw .= qq~ \$("#savebutt").click(function() { if (\$("#checkboxReplacement").is(":checked")) { \$("#inputReplacement").val("1") ; } else { \$("#inputReplacement").val("0") ; } \$('#rma-form').submit() ; }); ~ ; # $required{based_in} = 1 ; # $select{based_in} = 1 ; # $opts{based_in} = qq~~ ; } #------------------------------------------------------------------------------------------ sub thead { # $print_thead = qq~IDNAMEDESCRIPTION ~ ; &common_min_thead ; } #------------------------------------------------------------------------------- sub page_opts { our $glyphicon = 'list' ; our $lcpage = 'rma' ; $ucpage = uc $lcpage ; $ucfirstpage = ucfirst $lcpage ; our $table = 'rma' ; $page_title = 'RMA' ; $s{no} = 1 ; ### ???????????????????????????????????????????????????????????? &common_min_add_extras ; } #------------------------------------------------------------------------------- use common ; use today ; use report ; use xlsxcreator ; 1;