#!/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~$db{$table}{$id}{name} ~ ;
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~
To
~ ;
$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~
Date $_
~ ;
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~Johannesburg Cape Town ~ ;
} #------------------------------------------------------------------------------------------
sub thead {
# $print_thead = qq~ID NAME DESCRIPTION ~ ;
&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;