2303 lines
102 KiB
Perl
2303 lines
102 KiB
Perl
our %sec_cnt = ('a_systems' => "3-Systems", 'b_software_licence' => "3-Software Licence (Monthly Fee)", 'c_game_breakdown_analytics' => "2-Game Breakdown and Analytics (Annual Fee)", 'd_installation_kits' => "7-Installation Kits", 'e_hardware_add_ons' => "7-Hardware Add Ons", 'f_additional_services' => "7-Additional Services", 'g_match_credits' => "4-Match Credits", 'h_other' => "5-Other", 'i_rental' => "2-Rental" , "j_hardware" => "1-Hardware");
|
|
|
|
sub tabs_costings_forms_jquery {
|
|
|
|
$onload .= qq~onload="add_up_totals('costing',\$('#inputRoe').val(),1);"~ if $iaction ne 'add' ;
|
|
|
|
$trigger_jquery_raw .= qq~
|
|
|
|
let prev_currency = \$("#selectCurrency").val() ;
|
|
|
|
\$("#selectCurrency").change(function () {
|
|
|
|
if ((\$(this).val() == 'USD' && \$("input[name='roe']").val() == '20.00' && prev_currency != 'ZAR') || (prev_currency != 'ZAR' && \$(this).val() != 'ZAR' && prev_currency != 'USD' && \$(this).val() != 'USD')) {
|
|
return ;
|
|
}
|
|
let roe = 1 ;
|
|
if (\$(this).val() == 'USD') {
|
|
roe = 20 ;
|
|
}
|
|
|
|
\$("input[name='roe']").val(roe.toFixed(2)) ;
|
|
|
|
let j = 1 ;
|
|
|
|
let tab = "costing" ;
|
|
|
|
if (\$(this).val() == 'ZAR') {
|
|
while (\$("#"+tab+"_"+j).html()) {
|
|
if (!\$("#checkboxVat_"+tab+"_"+j).is(":checked")) {
|
|
\$("#checkboxVat_"+tab+"_"+j).prop('checked',true) ;
|
|
}
|
|
j++ ;
|
|
}
|
|
} else if (\$(this).val() != 'ZAR' && prev_currency == 'ZAR') {
|
|
while (\$("#"+tab+"_"+j).html()) {
|
|
if (\$("#checkboxVat_"+tab+"_"+j).is(":checked")) {
|
|
\$("#checkboxVat_"+tab+"_"+j).prop('checked',false) ;
|
|
}
|
|
j++ ;
|
|
}
|
|
}
|
|
|
|
prev_currency = \$(this).val() ;
|
|
|
|
add_up_totals("costing",roe,1) ;
|
|
|
|
}) ;
|
|
|
|
\$("input[name='roe']").change(function () {
|
|
if (\$("#selectCurrency").val() == 'ZAR' && \$(this).val() != '1.00') {
|
|
\$("input[name='roe']").val("1.00") ;
|
|
return ;
|
|
}
|
|
update_with_roe(\$(this).val()) ;
|
|
}) ;
|
|
|
|
function update_with_roe (roe="") {
|
|
if (roe <= 0 || !roe || roe == "") {
|
|
roe = 1 ;
|
|
}
|
|
\$("input[name='roe']").val(parseFloat(roe).toFixed(2)) ;
|
|
let sub_total = 0 ; let vat_total = 0 ;
|
|
add_up_totals("costing",roe,1) ;
|
|
}
|
|
|
|
function add_up_totals (tab,roe,recalc_totals) {
|
|
|
|
let sub_total = 0 ; let vat_total = 0 ;
|
|
|
|
let i = 1 ;
|
|
|
|
while (\$("#"+tab+"_"+i).html()) {
|
|
|
|
if (\$("#inputDescription_"+tab+"_"+i).val()) {
|
|
if (\$("#checkboxExcl_"+tab+"_"+i).is(":checked")) { i++ ; continue ; }
|
|
let ttl = 0 ;
|
|
if (recalc_totals) {
|
|
ttl = parseFloat(\$("#inputZar_amount_"+tab+"_"+i).val()) * parseFloat(\$("#inputQty_"+tab+"_"+i).val()) * parseFloat(roe) ;
|
|
} else {
|
|
ttl = parseFloat(\$("#inputTotal_"+tab+"_"+i).val().replace(/,/g, ''))
|
|
}
|
|
\$("#inputTotal_"+tab+"_"+i).val(ttl.toFixed(2)) ;
|
|
if (!\$("#inputTotal_"+tab+"_"+i).val() || \$("#inputTotal_"+tab+"_"+i).val() == "NaN") {
|
|
\$("#inputTotal_"+tab+"_"+i).val("0.00") ;
|
|
ttl = 0 ;
|
|
}
|
|
sub_total += ttl ;
|
|
if (\$("#checkboxVat_"+tab+"_"+i).is(":checked")) {
|
|
vat_total += ttl*0.15 ;
|
|
}
|
|
} else if (!\$("#checkboxExcl_"+tab+"_"+i).is(":checked")) {
|
|
\$("#checkboxExcl_"+tab+"_"+i).prop('checked',true) ;
|
|
}
|
|
i++ ;
|
|
}
|
|
|
|
\$("input[name='subtotal']").val(sub_total.toFixed(2)) ;
|
|
\$("input[name='vat']").val(vat_total.toFixed(2)) ;
|
|
\$("input[name='total']").val((sub_total+vat_total).toFixed(2)) ;
|
|
|
|
}
|
|
|
|
\$("#two").on("click","[id^='checkboxVat_']", function () {
|
|
changed_vat(this.id) ;
|
|
}) ;
|
|
|
|
\$("#two").on("click","[id^='checkboxExcl_']", function () {
|
|
changed_others(this.id) ;
|
|
}) ;
|
|
|
|
\$("#two").on("change","[id^='inputQty_'],[id^='inputZar_amount_']", function () {
|
|
changed_others(this.id) ;
|
|
}) ;
|
|
|
|
\$("#two").on("change","[id^='inputDescription_']", function () {
|
|
let row_cnt = get_row_nr(this.id) ;
|
|
if (\$(this).val()) {
|
|
if (row_cnt > \$("input[name='nr_of_costing_rows']").val()) {
|
|
\$("input[name='nr_of_costing_rows']").val(row_cnt) ;
|
|
}
|
|
} else {
|
|
let k = 1 ; let desc_row_cnt = 0 ;
|
|
while (\$("#costing_"+k).html()) {
|
|
if (\$("#inputDescription_costing_"+k).val()) {
|
|
desc_row_cnt = k ;
|
|
}
|
|
k++ ;
|
|
}
|
|
\$("input[name='nr_of_costing_rows']").val(desc_row_cnt) ;
|
|
}
|
|
changed_others(this.id) ;
|
|
}) ;
|
|
|
|
function get_tab (id) {
|
|
let tab = "" ;
|
|
if (id.includes("costing")) {
|
|
tab = "costing" ;
|
|
}
|
|
return tab ;
|
|
}
|
|
|
|
function changed_vat (id) {
|
|
let tab = get_tab (id) ;
|
|
let row_nr = get_row_nr(id) ;
|
|
calc_totals(row_nr,tab) ;
|
|
}
|
|
|
|
function changed_others (id) {
|
|
|
|
let row_nr = get_row_nr(id) ;
|
|
let firstIndex = id.indexOf('_');
|
|
let col = id.substring(0,firstIndex);
|
|
let tab = get_tab (id) ;
|
|
|
|
if (col == "inputZar") {
|
|
let inp = parseFloat(\$("#"+id).val()) ;
|
|
inp = parseFloat(inp) ;
|
|
\$("#"+id).val(inp.toFixed(2)) ;
|
|
}
|
|
|
|
calc_totals(row_nr,tab) ;
|
|
}
|
|
|
|
function calc_totals (row_cnt,tab) {
|
|
|
|
var qty = \$("#inputQty_"+tab+"_"+row_cnt) ;
|
|
var usd = \$("#inputZar_amount_"+tab+"_"+row_cnt) ;
|
|
var conv = \$("#inputTotal_"+tab+"_"+row_cnt) ;
|
|
var excl = \$("#checkboxExcl_"+tab+"_"+row_cnt) ;
|
|
var item = \$("#inputDescription_"+tab+"_"+row_cnt) ;
|
|
|
|
if (!usd.val() && !qty.val()) {
|
|
if (!item.val()) {
|
|
excl.prop("checked",true) ;
|
|
} else if (item.val() && excl.is(":checked")) {
|
|
excl.prop("checked",false) ;
|
|
}
|
|
return ;
|
|
}
|
|
|
|
var vat = \$("#checkboxVat_"+tab+"_"+row_cnt) ;
|
|
|
|
if (!item.val()) {
|
|
excl.prop("checked",true) ;
|
|
vat.prop("checked",true) ;
|
|
qty.val("") ;
|
|
usd.val("") ;
|
|
conv.val("") ;
|
|
} else if (item.val() && excl.is(":checked")) {
|
|
// excl.prop("checked",false) ;
|
|
}
|
|
|
|
if (!\$("#inputRoe").val()) { \$("#inputRoe").val(1) ; }
|
|
|
|
let roe = parseFloat(\$("#inputRoe").val()) ;
|
|
|
|
let ttl = usd.val() * qty.val() * roe ;
|
|
|
|
conv.val(ttl.toFixed(2)) ;
|
|
|
|
let sub_total = 0 ; let vat_total = 0 ;
|
|
|
|
let nr_of_rows = 50 ;
|
|
|
|
add_up_totals (tab,roe,0) ;
|
|
|
|
}
|
|
|
|
function add_costing_row (row_nr,tab,options1,options2) {
|
|
|
|
let tindex = "$tindex" ;
|
|
tindex = parseInt(tindex) ;
|
|
row_nr = parseInt(row_nr) ;
|
|
tindex = tindex - 10*(1+50-row_nr) ;
|
|
|
|
row_nr = row_nr + 1 ;
|
|
|
|
let row = "<div class='row' id='"+tab+"_"+row_nr+"'>" ;
|
|
|
|
row = row+add_checkbox(row_nr,"excl_"+tab+"_"+row_nr,"checkboxExcl_"+tab+"_"+row_nr,tindex,1) ; tindex++ ;
|
|
// row = row+add_select(row_nr,"description_"+tab+"_"+row_nr,"selectDescription_"+tab+"_"+row_nr,"Select Description "+row_nr,options1,tindex,2,90,'','') ; tindex++ ;
|
|
row = row+add_input(row_nr,"description_"+tab+"_"+row_nr,"inputDescription_"+tab+"_"+row_nr,"Description "+row_nr,tindex,'',2) ; tindex++ ;
|
|
row = row+add_input(row_nr,"qty_"+tab+"_"+row_nr,"inputQty_"+tab+"_"+row_nr,"Qty "+row_nr,tindex,'',1) ; tindex++ ;
|
|
row = row+add_input(row_nr,"zar_amount_"+tab+"_"+row_nr,"inputZar_amount_"+tab+"_"+row_nr,"Rate "+row_nr,tindex,'',1) ; tindex++ ;
|
|
row = row+add_input(row_nr,"total_"+tab+"_"+row_nr,"inputTotal_"+tab+"_"+row_nr,"Total "+row_nr,tindex,"readonly",1) ; tindex++ ;
|
|
row = row+add_checkbox(row_nr,"vat_"+tab+"_"+row_nr,"checkboxVat_"+tab+"_"+row_nr,tindex,1) ; tindex++ ;
|
|
|
|
row = row+"</div>" ;
|
|
row = row+"<div class='row' id='btn_row_"+tab+"_"+row_nr+"'><div class='col-md-1'><a id='btn_"+tab+"_"+row_nr+"' href='#' style='padding-left:16px;'><i class='glyphicon glyphicon-plus blue'></i></a></div></div>" ;
|
|
|
|
return row ;
|
|
}
|
|
|
|
function get_row_nr (id) {
|
|
let lastIndex = id.lastIndexOf('_');
|
|
lastIndex = parseInt(lastIndex) ;
|
|
let row_nr = id.substring(1+lastIndex);
|
|
row_nr = parseInt(row_nr) ;
|
|
return row_nr ;
|
|
}
|
|
|
|
function add_checkbox (row_nr,field_name,field_id,tindex,fcol) {
|
|
let checkbox = "<div class='col-md-"+fcol+" checkbox_checked' id='c_"+field_name+"'><input name='"+field_name+"' data-no-uniform='true' type='checkbox' id='"+field_id+"' checked value='1' tabindex='"+tindex+"'><label for='"+field_id+"'></label></div>" ;
|
|
return checkbox ;
|
|
}
|
|
|
|
function add_input (row_nr,field_name,field_id,placeholder,tindex,readonly,fcol) {
|
|
let input = "<div class='col-md-"+fcol+"'><div class='control-group'><div class='controls'><input type='text' name='"+field_name+"' class='form-control' id='"+field_id+"' style='text-align:right;' placeholder='"+placeholder+"' value='' "+readonly+" tabindex='"+tindex+"'></div></div></div>" ;
|
|
return input ;
|
|
}
|
|
|
|
function add_select (row_nr,field_name,field_id,placeholder,options,tindex,fcol,width,div_id,hide_div) {
|
|
let select = "<div class='col-md-"+fcol+"' "+div_id+" "+hide_div+">" ;
|
|
select = select + add_select_raw(row_nr,field_name,field_id,placeholder,options,tindex,width) ;
|
|
select = select + "</div>" ;
|
|
return select ;
|
|
}
|
|
|
|
function add_select_raw (row_nr,field_name,field_id,placeholder,options,tindex,width) {
|
|
let select_raw = "<div class='control-group'><div class='controls'><select class='form-control' style='margin:2px 0 2px 0; width: "+width+"%;' name='"+field_name+"' id='"+field_id+"'data-placeholder='"+placeholder+"' data-rel='chosen' tabindex='"+tindex+"'><option value=''></option>"+options+"</select></div></div>" ;
|
|
return select_raw ;
|
|
}
|
|
|
|
~ ;
|
|
|
|
} #------------------------------------------------------------------------------------------
|
|
|
|
sub tabs_get_default_totals {
|
|
|
|
my ($id) = @_ ;
|
|
|
|
# our %sec_cnt = ('a_systems' => "3-Systems", 'b_software_licence' => "3-Software Licence (Monthly Fee)", 'c_game_breakdown_analytics' => "2-Game Breakdown and Analytics (Annual Fee)", 'd_installation_kits' => "7-Installation Kits", 'e_hardware_add_ons' => "7-Hardware Add Ons", 'f_additional_services' => "7-Additional Services", 'g_match_credits' => "4-Match Credits", 'h_other' => "5-Other", 'i_rental' => "2-Rental" , "j_hardware" => "1-Hardware");
|
|
# our %sec_cnt = ('a_other' => "5-Other");
|
|
our %sec_cnt = ('a_systems' => "3-Systems", 'b_software_licence' => "3-Software Licence (Monthly Fee)", 'c_game_breakdown_analytics' => "2-Game Breakdown and Analytics (Annual Fee)", 'd_installation_kits' => "7-Installation Kits", 'e_hardware_add_ons' => "7-Hardware Add Ons", 'f_additional_services' => "7-Additional Services", 'g_match_credits' => "4-Match Credits", 'h_rental' => "2-Rental" , "j_hardware" => "1-Hardware");
|
|
|
|
our %default_totals = () ;
|
|
|
|
our @ttlarr = ("one_time_fee","monthly_recurring_fee","annual_fee") ;
|
|
our @ttlarr2 = ("subtotal","vat","total") ;
|
|
|
|
my $needs_to_update_totals = ($db{$table}{$id}{total_one_time_fee} !~ /;/ && $db{quotes_min}{$id}{item_ttl_costing_other} =~ /(?<!\d)(?:[1-9]\d*)(?!\d)/) ? 1 : 0 ;
|
|
|
|
my @ttl_other = ($needs_to_update_totals) ? split(/\;/,$db{quotes_min}{$id}{item_ttl_costing_other}) : () ;
|
|
my @vat_other = ($needs_to_update_totals) ? split(/\;/,$db{quotes_min}{$id}{vat_costing_other}) : () ;
|
|
my @excl_other = ($needs_to_update_totals) ? split(/\;/,$db{quotes_min}{$id}{excl_costing_other}) : () ;
|
|
|
|
foreach my $a (@ttlarr) {
|
|
my @tot = () ;
|
|
foreach my $b (@ttlarr2) {
|
|
|
|
$field = "$b\_$a" ;
|
|
|
|
$db{$table}{$id}{$field} = "" if $db{$table}{$id}{$field} eq "0.00" ;
|
|
@tot = split(/\;/,$db{$table}{$id}{$field}) ;
|
|
|
|
if ($needs_to_update_totals) {
|
|
|
|
if ($a eq "one_time_fee") {
|
|
if ($b eq "subtotal") {
|
|
my $cnt = 0 ;
|
|
foreach my $c (@ttl_other) {
|
|
next if $excl_other[$cnt] || !$c || $c eq '0.00' ;
|
|
$tot[0] -= $c ;
|
|
$tot[1] += $c ;
|
|
}
|
|
} elsif ($b eq "vat") {
|
|
my $cnt = 0 ;
|
|
foreach my $c (@ttl_other) {
|
|
next if $excl_other[$cnt] || !$vat_other[$cnt] || !$c || $c eq '0.00' ;
|
|
$tot[0] -= $c*0.15 ;
|
|
$tot[1] += $c*0.15 ;
|
|
}
|
|
} elsif ($b eq "total") {
|
|
my $cnt = 0 ;
|
|
foreach my $c (@ttl_other) {
|
|
next if $excl_other[$cnt] || !$c || $c eq '0.00' ;
|
|
$tot[0] -= ($vat_other[$cnt]) ? $c*1.15 : $c ;
|
|
$tot[1] += ($vat_other[$cnt]) ? $c*1.15 : $c ;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$tot[0] = sprintf("%0.2f",$tot[0]) ;
|
|
$tot[1] = sprintf("%0.2f",$tot[1]) ;
|
|
|
|
$default_totals{$field}{1} = ($tot[0]) ? $tot[0] : "0.00" ;
|
|
$default_totals{$field}{2} = ($tot[1]) ? $tot[1] : "0.00" ;
|
|
|
|
}
|
|
}
|
|
|
|
} #----------------------------------------------------------------------------------------
|
|
|
|
sub tab_build_qt_left {
|
|
|
|
my ($id,$tab,$ret) = @_ ;
|
|
|
|
if ($tab==1) { # Cusotmer Details
|
|
|
|
# --------------- START CUSOTMER DETAILS --------------------------------------------------------------------------------------------------------
|
|
|
|
my $sec = '_customer_details' ; my ($sec_name,$sec_cnt,$sec_col) = &tab_sec_det($sec) ;
|
|
|
|
$ret_pdf_link_sec .= $sec . '+' . $sec_cnt . '|' ;
|
|
|
|
if ($ret) { return ; }
|
|
|
|
# &build_cost_form($id,$tab,$sec_cnt,$sec);
|
|
|
|
$lcol = 2 ;
|
|
$fcol = 5 ;
|
|
|
|
$add_form_fields = '' ;
|
|
|
|
# if (($db{$table}{$id}{date_from} eq '') or ($db{$table}{$id}{date_from} eq '0000-00-00')) { $db{$table}{$id}{date_from} = $now_ccyy_mm_dd ; }
|
|
# $add_form_fields .= &common_min_form_datepicker('date_from',$db{$table}{$id}{date_from}) ;
|
|
# if (($db{$table}{$id}{date_to} eq '') or ($db{$table}{$id}{date_to} eq '0000-00-00')) { $db{$table}{$id}{date_to} = $now_ccyy_mm_dd ; }
|
|
# $add_form_fields .= &common_min_form_datepicker('date_to',$db{$table}{$id}{date_to}) ;
|
|
|
|
$fcol = 9 ;
|
|
|
|
# $add_form_fields .= &common_min_form_select('type',$db{$table}{$id}{type},'') ;
|
|
|
|
my $checked = 'CHECKED' if $db{$table}{$id}{quote_accepted} ;
|
|
$add_form_fields .= &common_min_form_checkbox('quote_accepted',$db{$table}{$id}{quote_accepted},$checked) ;
|
|
|
|
my $checked = 'CHECKED' if $db{$table}{$id}{quote_pending} or $iaction eq 'add' ;
|
|
$add_form_fields .= &common_min_form_checkbox('quote_pending',$db{$table}{$id}{quote_pending},$checked) ;
|
|
|
|
my $checked = 'CHECKED' if $db{$table}{$id}{quote_cancelled} ; $preferred_title{quote_cancelled} = 'Quote Closed' ;
|
|
$add_form_fields .= &common_min_form_checkbox('quote_cancelled',$db{$table}{$id}{quote_cancelled},$checked) ;
|
|
|
|
$add_form_fields .= &common_min_form_input('contact_name',$db{$table}{$id}{contact_name},'') ;
|
|
$add_form_fields .= &common_min_form_input('address',$db{$table}{$id}{address},'') ;
|
|
$add_form_fields .= &common_min_form_input('email',$db{$table}{$id}{email},'') ;
|
|
$add_form_fields .= &common_min_form_input('tel',$db{$table}{$id}{tel},'') ;
|
|
|
|
$fcol = 5 ;
|
|
# $add_form_fields .= &common_min_form_input('invoice_nr',$db{$table}{$id}{invoice_nr},'') ;
|
|
# $add_form_fields .= &common_min_form_input('annual_invoice_2',$db{$table}{$id}{annual_invoice_2},'') ;
|
|
# $add_form_fields .= &common_min_form_input('annual_invoice_3',$db{$table}{$id}{annual_invoice_3},'') ;
|
|
|
|
$add_form_fields .= qq~<div class='row'><div class='col-md-12' style="height:42px;"> </div></div>~ ;
|
|
|
|
|
|
$trigger_jquery_raw .= qq~
|
|
|
|
if (!\$("#checkboxQuote_accepted").is(":checked") && !\$("#checkboxQuote_pending").is(":checked") && !\$("#checkboxQuote_cancelled").is(":checked")) {
|
|
\$("#checkboxQuote_pending").prop("checked","true") ;
|
|
}
|
|
\$("#checkboxQuote_accepted,#checkboxQuote_pending,#checkboxQuote_cancelled").click( function () {
|
|
|
|
if (this.id != 'checkboxQuote_accepted' && \$("#checkboxQuote_accepted").is(":checked")) {
|
|
\$("#checkboxQuote_accepted").prop("checked",false) ;
|
|
}
|
|
|
|
if (this.id != 'checkboxQuote_pending' && \$("#checkboxQuote_pending").is(":checked")) {
|
|
\$("#checkboxQuote_pending").prop("checked",false) ;
|
|
}
|
|
|
|
if (this.id != 'checkboxQuote_cancelled' && \$("#checkboxQuote_cancelled").is(":checked")) {
|
|
\$("#checkboxQuote_cancelled").prop("checked",false) ;
|
|
}
|
|
|
|
if (!\$("#checkboxQuote_accepted").is(":checked") && !\$("#checkboxQuote_pending").is(":checked") && !\$("#checkboxQuote_cancelled").is(":checked")) {
|
|
\$("#checkboxQuote_pending").prop("checked","true") ;
|
|
}
|
|
|
|
});
|
|
|
|
~ ;
|
|
|
|
&tab_content_box($sec_name,$sec_col);
|
|
|
|
# --------------- END CUSOTMER DETAILS ----------------------------------------------------------------------------------------------------------
|
|
}
|
|
|
|
# if ($tab == 2) { # Costing
|
|
|
|
# # --------------- START COSTING ----------------------------------------------------------------------------------------------------------------
|
|
|
|
# $add_form_fields = '' ;
|
|
|
|
# $lcol = 1 ; $fcol = 2 ;
|
|
# $preferred_title{currency} = 'Currency' ;
|
|
# $add_form_fields .= &common_min_form_select('currency',$db{$table}{$id}{currency},1) ;
|
|
# $trigger_jquery .= qq~\$("#selectCurrency_chosen").css( "width", "96%" );~ ;
|
|
# $preferred_title{roe} = ' ROE ' ; $fcol = 1 ;
|
|
# $add_form_fields .= &common_min_form_label_col('roe') ;
|
|
# $add_form_fields .= &common_min_form_input_col('roe',$db{$table}{$id}{roe},1) ;
|
|
# $add_form_fields .= qq~</div>~ ;
|
|
# my $sec = '_costing' ; my ($sec_name,$sec_cnt,$sec_col) = &tab_sec_det($sec) ;
|
|
# $ret_pdf_link_sec .= $sec . '+' . $sec_cnt . '|' ;
|
|
|
|
# return if $ret ;
|
|
|
|
# &tab_costing_select_opts('price_list','description',"`excl`<>'1'",$sec) ;
|
|
|
|
# # &db_min_ro('quotes_pdf_titles', '*', "quote_id = $id", '', '') ;
|
|
# foreach (keys %{$db{quotes_pdf_titles}}){
|
|
# next unless $db{quotes_pdf_titles}{$_}{quote_id} == $id ;
|
|
# $old_title_to_new_title{$db{quotes_pdf_titles}{$_}{old_name}}{$db{quotes_pdf_titles}{$_}{quote_id}} = $db{quotes_pdf_titles}{$_}{new_name} ;
|
|
# }
|
|
|
|
# foreach (sort keys %sec_cnt) {
|
|
# $_k = substr($_,1) ;
|
|
# next if $_k eq '_hardware' ;
|
|
# my @parts = split(/\-/,$sec_cnt{$_}) ;
|
|
|
|
# $add_form_fields .= qq~<div class='row'><div class='col-md-12'><h4>$parts[1] :</h4></div></div>~ ;
|
|
# # $add_form_fields .= qq~<div class='row'><div class='col-md-3'><h4>$parts[1] :</h4></div>~ ;
|
|
# $fcol = 3 ;
|
|
# $add_form_fields .= qq~<div class='row'><div class='col-md-1'><h5 style="margin: 5px 0px 5px 0px;color:#ccc;">PDF title : </h5></div>~ ;
|
|
# # $add_form_fields .= qq~<div class='col-md-1'><b> PDF TITLE : </b></div>~ ;
|
|
# if ($old_title_to_new_title{$parts[1]}{$id} and $old_title_to_new_title{$parts[1]}{$id} ne $parts[1]){
|
|
# $add_form_fields .= &common_min_form_input_col($_k, $old_title_to_new_title{$parts[1]}{$id}) ;
|
|
# }
|
|
# else {
|
|
# $add_form_fields .= &common_min_form_input_col($_k,'') ;
|
|
# }
|
|
|
|
# $add_form_fields .= qq~</div>~ ;
|
|
# &tab_build_qt_col_headers("$sec$_k") ;
|
|
# &build_cost_form($id,$tab,$parts[0],"$sec$_k") ;
|
|
# if ($_k eq '_systems') {
|
|
# $preferred_title{'systems_included'} = ' ' ; $preferred_placeholder{'systems_included'} = 'Included' ; $fcol = 3 ;
|
|
# $add_form_fields .= &common_min_form_textarea('systems_included',$db{$table}{$id}{systems_included},'') ;
|
|
# }
|
|
# if ($_k eq '_rental') {
|
|
# $preferred_title{'rental_included'} = ' ' ; $preferred_placeholder{'rental_included'} = 'Included' ; $fcol = 3 ;
|
|
# $add_form_fields .= &common_min_form_textarea('rental_included',$db{$table}{$id}{rental_included},'') ;
|
|
# }
|
|
# if ($_k eq '_other') {
|
|
# $preferred_title{'other_included'} = ' ' ; $preferred_placeholder{'other_included'} = 'Included' ; $fcol = 3 ;
|
|
# $add_form_fields .= &common_min_form_textarea('other_included',$db{$table}{$id}{other_included},'') ;
|
|
# }
|
|
# }
|
|
|
|
# $add_form_fields .= qq~<div class='row'><div class="box col-md-12"> </div></div>~ ;
|
|
# $add_form_fields .= qq~<div class='row'><div class='col-md-1'><h5 style="margin: 5px 0px 5px 0px;color:#ccc;">PDF total : </h5></div>~ ;
|
|
|
|
# $lcol = 3 ;
|
|
|
|
# if ($old_title_to_new_title{"Hardware"}{$id} and $old_title_to_new_title{"Hardware"}{$id} ne "Hardware"){
|
|
# $add_form_fields .= &common_min_form_input_col('_hardware', $old_title_to_new_title{"Hardware"}{$id}) ;
|
|
# }
|
|
# else {
|
|
# $add_form_fields .= &common_min_form_input_col('_hardware','') ;
|
|
# }
|
|
|
|
# my @ttlarr_labels = ("sub_total","vat_total","grand_total") ;
|
|
# $lcol = 1 ; $fcol = 1 ;
|
|
# foreach (@ttlarr_labels) {
|
|
# $readonly{$_} = "READONLY" ;
|
|
# my $val = $db{$table}{$id}{$_} ; $val = '0.00' unless $val ;
|
|
# $type = 'hidden' ; $add_form_fields .= &common_min_form_input_col($_,$val) ; $type = '' ;
|
|
# $lcol = 1 ; $add_form_fields .= &common_min_form_label_col($_) ;
|
|
# }
|
|
|
|
# $add_form_fields .= qq~</div>~ ;
|
|
|
|
# $lcol = 1 ; $fcol = 1 ;
|
|
|
|
# foreach my $a (@ttlarr) {
|
|
|
|
# $readonly{$a} = "READONLY" ;
|
|
|
|
# $add_form_fields .= qq~<div class='row'><div class="box col-md-2"></div>~ ;
|
|
|
|
# $lcol = 2 ;
|
|
# $add_form_fields .= &common_min_form_label_col($a) ;
|
|
# $lcol = 1 ;
|
|
|
|
# foreach my $b (@ttlarr2) {
|
|
# $field = "$b\_$a\_1" ; $readonly{$field} = "READONLY"; $input_style{$field} = qq~style="text-align:right;"~ ;
|
|
# my $val = ($default_totals{$field}{1}) ? $default_totals{$field}{1} : '0.00' ;
|
|
# $add_form_fields .= &common_min_form_input_col($field,$val) ;
|
|
# }
|
|
# $add_form_fields .= qq~</div>~ ;
|
|
|
|
# }
|
|
|
|
# $add_form_fields .= qq~<div class='row'><div class="box col-md-12"> </div></div>~ ;
|
|
|
|
# &tab_content_box($sec_name,$sec_col) ;
|
|
|
|
# # --------------- END COSTING ----------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
# # $trigger_jquery_raw .= qq~
|
|
|
|
# # function get_tab (id) {
|
|
# # let tab = "" ;
|
|
# # if (id.includes("workings_event")) {
|
|
# # tab = "workings_event" ;
|
|
# # } else if (id.includes("costing_event")) {
|
|
# # tab = "costing_event" ;
|
|
# # }
|
|
# # return tab ;
|
|
# # }
|
|
|
|
# # function changed_vat (id) {
|
|
# # let tab = get_tab (id) ;
|
|
# # let row_nr = get_row_nr(id) ;
|
|
# # calc_totals(row_nr,tab) ;
|
|
# # }
|
|
|
|
# # function changed_others (id) {
|
|
|
|
# # let row_nr = get_row_nr(id) ;
|
|
# # let firstIndex = id.indexOf('_');
|
|
# # let col = id.substring(0,firstIndex);
|
|
# # let tab = get_tab (id) ;
|
|
# # if (col == "inputAmount") {
|
|
# # let inp = parseFloat(\$("#"+id).val()) ;
|
|
# # inp = parseFloat(inp) ;
|
|
# # \$("#"+id).val(inp.toFixed(2)) ;
|
|
# # } else if (\$("#selectDescription_"+tab+"_"+row_nr).val() && \$("#selectDescription_"+tab+"_"+row_nr).val() != 14 && \$("#selectOperator_"+tab+"_"+row_nr).val()) {
|
|
# # // \$("#selectOperator_"+tab+"_"+row_nr).val("") ;
|
|
# # // \$("#selectOperator_"+tab+"_"+row_nr).trigger("chosen:updated") ;
|
|
# # }
|
|
# # // else if (col == "selectOperator" && \$("#selectDescription"+tab+"_"+row_nr).val() != 14) {
|
|
|
|
# # // }
|
|
|
|
# # if (col == "selectOperator") { // || (col == "selectDescription" && \$("#selectDescription_"+tab+"_"+row_nr).val(
|
|
# # return ;
|
|
# # }
|
|
|
|
# # calc_totals(row_nr,tab) ;
|
|
# # }
|
|
|
|
# # // \$("$vat_field_ids_string").change(function() {
|
|
# # \$("#content").on("change","[id^='checkboxVat_']", function () {
|
|
# # const id = this.id ;
|
|
# # changed_vat(id) ;
|
|
# # });
|
|
|
|
# # // \$("$excl_field_ids_string,$description_field_ids_string,$qty_field_ids_string,$amount_usd_field_ids_string,$operator_field_ids_string").change(function() {
|
|
# # \$("#content").on("change","[id^='checkboxExcl_'],[id^='selectDescription_'],[id^='inputQty_'],[id^='inputZar_amount_'],[id^='selectOperator_workings_event_']", function () {
|
|
# # const id = this.id ;
|
|
# # changed_others(id) ;
|
|
# # });
|
|
# # ~ ;
|
|
|
|
# # $trigger_jquery_raw .= qq~
|
|
|
|
# # \$("#content").on("click","[id^='btn_workings_event_'],[id^='btn_costing_event_']", function () {
|
|
# # // \$("$btn_ids_string").click(function () {
|
|
# # const id = this.id ;
|
|
# # let tab = get_tab (id) ;
|
|
|
|
# # console.log("id : "+id) ;
|
|
# # console.log("tab : "+tab) ;
|
|
|
|
# # add_quote_expenses_row_all(id,tab) ;
|
|
# # });
|
|
|
|
# # function add_quote_expenses_row_all (id,tab) {
|
|
|
|
# # let row_nr = get_row_nr(id) ;
|
|
# # \$("#"+tab+"_"+row_nr).show();
|
|
# # let row_html = "" ;
|
|
# # if (tab == "workings_event") {
|
|
# # row_html = add_quote_expenses_row(row_nr,tab,"$description_options_workings","$operator_options") ;
|
|
# # } else if (tab == "costing_event") {
|
|
# # row_html = add_quote_expenses_row(row_nr,tab,"$description_options_costing","") ;
|
|
# # }
|
|
# # \$("#"+tab+"_"+row_nr).html(row_html);
|
|
# # // \$("#$suffix\_"+row_nr).trigger("chosen:updated") ;
|
|
|
|
# # \$("#selectDescription_"+tab+"_"+row_nr).chosen({ allow_single_deselect:true }) ;
|
|
|
|
# # if (tab == "workings_event") {
|
|
# # \$("#selectOperator_workings_event_"+row_nr).chosen({ allow_single_deselect:true });
|
|
# # \$("#inputRemarks_workings_event_"+row_nr).css("text-align","") ;
|
|
# # \$("#inputSupplier_workings_event_"+row_nr).css("text-align","") ;
|
|
# # \$("#inputRef_nr_workings_event_"+row_nr).css("text-align","") ;
|
|
# # }
|
|
|
|
# # \$("#btn_"+tab+"_"+row_nr).hide();
|
|
# # var v = row_nr + 1 ;
|
|
|
|
# # // \$("#btn_$suffix\_"+v).css("padding-left","16px") ;
|
|
# # \$("#btn_"+tab+"_"+v).html("<i class='glyphicon glyphicon-plus blue'></i>") ;
|
|
# # \$("#btn_"+tab+"_"+v).show();
|
|
# # \$("#btn_row_"+tab+"_"+v).show() ;
|
|
# # \$("#2_"+tab+"_"+row_nr).show() ;
|
|
|
|
# # \$("#checkboxExcl_"+tab+"_"+row_nr).prop('checked',false) ;
|
|
|
|
# # // \$("#"+tab+"_"+row_nr).on("change","#checkboxVat_"+tab+"_"+row_nr+"", function() {
|
|
# # // const id = this.id ;
|
|
# # // changed_vat(id) ;
|
|
# # // });
|
|
|
|
# # // \$("#"+tab+"_"+row_nr).on("change","#checkboxExcl_"+tab+"_"+row_nr+",#selectDescription_"+tab+"_"+row_nr+",#selectOperator_"+tab+"_"+row_nr+",#inputQty_"+tab+"_"+row_nr+",#inputZar_amount_"+tab+"_"+row_nr+"", function() {
|
|
# # // const id = this.id ;
|
|
# # // changed_others(id) ;
|
|
# # // });
|
|
|
|
# # }
|
|
|
|
# # ~ if $btn_ids_string ;
|
|
|
|
# # $trigger_jquery_raw .= qq~
|
|
|
|
# # \$("#selectCurrency").change(function () {
|
|
|
|
# # }) ;
|
|
|
|
# # \$("input[name='roe']").change(function () {
|
|
|
|
# # let roe = \$(this).val() ;
|
|
# # if (roe < 0 || !roe) {
|
|
# # roe = 1 ;
|
|
# # }
|
|
# # \$(this).val(parseFloat(roe).toFixed(2)) ;
|
|
|
|
# # var sub_total = 0 ; var vat_total = 0 ; var sub_total_quote = 0 ; var vat_total_quote = 0 ;
|
|
|
|
# # [sub_total,vat_total] = add_up_totals("workings_event",50,roe,1) ;
|
|
# # [sub_total_quote,vat_total_quote] = add_up_totals("costing_event",30,roe,1) ;
|
|
|
|
# # // // // \$("input[name='income']").val((sub_total_quote+vat_total_quote).toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2})) ;
|
|
# # // // // \$("input[name='expenses']").val((sub_total+vat_total).toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2})) ;
|
|
# # \$("input[name='income']").val((sub_total_quote+vat_total_quote).toFixed(2)) ;
|
|
# # \$("input[name='expenses']").val((sub_total+vat_total).toFixed(2)) ;
|
|
# # update_overall_totals(sub_total,vat_total,"workings_event") ;
|
|
# # update_overall_totals(sub_total_quote,vat_total_quote,"costing_event") ;
|
|
|
|
# # }) ;
|
|
|
|
# # function add_up_totals (tab,nr_of_rows,roe,recalc_totals) {
|
|
|
|
# # let sub_total = 0 ; let vat_total = 0 ;
|
|
# # for (let i=1; i<=nr_of_rows; i++) {
|
|
# # if (!\$("#"+tab+"_"+i).html()) { break ; }
|
|
# # if (\$("#selectDescription_"+tab+"_"+i).val()) {
|
|
# # if (\$("#checkboxExcl_"+tab+"_"+i).is(":checked")) { continue ; }
|
|
# # let ttl = 0 ;
|
|
# # if (recalc_totals) {
|
|
# # ttl = parseFloat(\$("#inputZar_amount_"+tab+"_"+i).val()) * parseFloat(\$("#inputQty_"+tab+"_"+i).val()) * parseFloat(roe) ;
|
|
# # } else {
|
|
# # ttl = parseFloat(\$("#inputTotal_"+tab+"_"+i).val().replace(/,/g, ''))
|
|
# # }
|
|
# # // // // // \$("#inputTotal_"+tab+"_"+i).val(ttl.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2})) ;
|
|
# # \$("#inputTotal_"+tab+"_"+i).val(ttl.toFixed(2)) ;
|
|
# # if (!\$("#inputTotal_"+tab+"_"+i).val() || \$("#inputTotal_"+tab+"_"+i).val() == "NaN") {
|
|
# # \$("#inputTotal_"+tab+"_"+i).val("0.00") ;
|
|
# # ttl = 0 ;
|
|
# # }
|
|
# # sub_total += ttl ;
|
|
# # if (\$("#checkboxVat_"+tab+"_"+i).is(":checked")) {
|
|
# # vat_total += ttl*0.15 ;
|
|
# # }
|
|
# # } else if (!\$("#checkboxExcl_"+tab+"_"+i).is(":checked")) {
|
|
# # \$("#checkboxExcl_"+tab+"_"+i).prop('checked',true) ;
|
|
# # }
|
|
# # }
|
|
# # return [sub_total,vat_total] ;
|
|
# # }
|
|
|
|
# # // function getNum(val) {
|
|
|
|
# # // if (isNaN(val)) {
|
|
# # // return 0;
|
|
# # // }
|
|
# # // return val;
|
|
# # // }
|
|
|
|
# # function calc_totals (row_cnt,tab) {
|
|
|
|
# # var qty = \$("#inputQty_"+tab+"_"+row_cnt) ;
|
|
# # var usd = \$("#inputZar_amount_"+tab+"_"+row_cnt) ;
|
|
# # var conv = \$("#inputTotal_"+tab+"_"+row_cnt) ;
|
|
# # var excl = \$("#checkboxExcl_"+tab+"_"+row_cnt) ;
|
|
# # var item = \$("#selectDescription_"+tab+"_"+row_cnt) ;
|
|
|
|
# # if (!usd.val() && !conv.val() && !usd.val()) {
|
|
# # // console.log("skip calc_totals_workings") ;
|
|
# # if (!item.val()) {
|
|
# # excl.prop("checked",true) ;
|
|
# # }
|
|
# # return ;
|
|
# # }
|
|
|
|
# # var vat = \$("#checkboxVat_"+tab+"_"+row_cnt) ;
|
|
|
|
# # if (!item.val()) {
|
|
|
|
# # excl.prop("checked",true) ;
|
|
# # vat.prop("checked",true) ;
|
|
# # qty.val("") ;
|
|
# # usd.val("") ;
|
|
# # conv.val("");
|
|
# # if (tab == "workings_event") {
|
|
# # var rem = \$("#inputRemarks_"+tab+"_"+row_cnt) ;
|
|
# # var sup = \$("#inputSupplier_"+tab+"_"+row_cnt) ;
|
|
# # var ref = \$("#inputRef_nr_"+tab+"_"+row_cnt) ;
|
|
# # var op = \$("#selectOperator_"+tab+"_"+row_cnt) ;
|
|
# # rem.val("") ;
|
|
# # sup.val("") ;
|
|
# # ref.val("") ;
|
|
# # op.val("") ;
|
|
# # op.trigger("chosen:updated") ;
|
|
# # }
|
|
# # } else if (excl.is(":checked") && item.val() && conv.val() == "0.00") {
|
|
# # excl.prop("checked",false) ;
|
|
# # }
|
|
|
|
# # if (!\$("#inputRoe").val()) { \$("#inputRoe").val(1) ; }
|
|
|
|
# # let roe = parseFloat(\$("#inputRoe").val()) ;
|
|
|
|
# # let ttl = usd.val() * qty.val() * roe ;
|
|
|
|
# # // // // conv.val(ttl.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2})) ;
|
|
# # conv.val(ttl.toFixed(2)) ;
|
|
|
|
# # let sub_total = 0 ; let vat_total = 0 ;
|
|
|
|
# # let nr_of_rows = 50 ;
|
|
# # if (tab == "costing_event") {
|
|
# # nr_of_rows = 30 ;
|
|
# # }
|
|
|
|
# # [sub_total,vat_total] = add_up_totals (tab,nr_of_rows,roe,0) ;
|
|
|
|
# # if (tab == "workings_event") {
|
|
# # // // // \$("input[name='expenses']").val((sub_total+vat_total).toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2})) ;
|
|
# # \$("input[name='expenses']").val((sub_total+vat_total).toFixed(2)) ;
|
|
# # update_overall_totals(sub_total,vat_total,tab) ;
|
|
# # } else {
|
|
# # // // // \$("input[name='income']").val((sub_total+vat_total).toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2})) ;
|
|
# # \$("input[name='income']").val((sub_total+vat_total).toFixed(2)) ;
|
|
# # update_overall_totals(sub_total,vat_total,tab) ;
|
|
# # // update_overall_totals_costings(sub_total,vat_total) ;
|
|
# # }
|
|
# # }
|
|
|
|
# # function update_overall_totals (sub_total,vat_total,tab) {
|
|
|
|
# # let profit_loss = parseFloat(\$("input[name='income']").val().replace(/,/g, '')) - parseFloat(\$("input[name='expenses']").val().replace(/,/g, '')) ;
|
|
|
|
# # // // // \$("input[name='profit_loss']").val(profit_loss.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2})) ;
|
|
# # // // // \$("input[name='sub_total_"+tab+"']").val(sub_total.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2})) ;
|
|
# # // // // \$("input[name='vat_total_"+tab+"']").val(vat_total.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2})) ;
|
|
# # // // // \$("input[name='grand_total_"+tab+"']").val((sub_total+vat_total).toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2})) ;
|
|
|
|
# # \$("input[name='profit_loss']").val(profit_loss.toFixed(2)) ;
|
|
# # \$("input[name='sub_total_"+tab+"']").val(sub_total.toFixed(2)) ;
|
|
# # \$("input[name='vat_total_"+tab+"']").val(vat_total.toFixed(2)) ;
|
|
# # \$("input[name='grand_total_"+tab+"']").val((sub_total+vat_total).toFixed(2)) ;
|
|
# # }
|
|
|
|
# # function add_quote_expenses_row (row_nr,tab,options1,options2) {
|
|
|
|
# # let tindex = $tindex ;
|
|
# # tindex = parseInt(tindex) ;
|
|
# # row_nr = parseInt(row_nr) ;
|
|
# # tindex = tindex - 10*(1+50-row_nr) ;
|
|
|
|
# # let row = add_checkbox(row_nr,"excl_"+tab+"_"+row_nr,"checkboxExcl_"+tab+"_"+row_nr,tindex,1) ; tindex++ ;
|
|
|
|
# # row = row+"<input name='prev_item_"+tab+"_"+row_nr+"' value='' style='display:none;'>"+add_select(row_nr,"description_"+tab+"_"+row_nr,"selectDescription_"+tab+"_"+row_nr,"Select Description "+row_nr,options1,tindex,2,90,'','') ; tindex++ ;
|
|
# # if (tab == "workings_event") {
|
|
# # row = row+add_select(row_nr,"operator_workings_event_"+row_nr,"selectOperator_workings_event_"+row_nr,"Select Operator "+row_nr,options2,tindex,2,90,'','') ; tindex++ ;
|
|
# # row = row+add_input(row_nr,"remarks_workings_event_"+row_nr,"inputRemarks_workings_event_"+row_nr,"Remarks "+row_nr,tindex,'',1) ; tindex++ ;
|
|
# # row = row+add_input(row_nr,"supplier_workings_event_"+row_nr,"inputSupplier_workings_event_"+row_nr,"Supplier "+row_nr,tindex,'',1) ; tindex++ ;
|
|
# # row = row+add_input(row_nr,"ref_nr_workings_event_"+row_nr,"inputRef_nr_workings_event_"+row_nr,"Ref Nr "+row_nr,tindex,'',1) ; tindex++ ;
|
|
# # }
|
|
# # row = row+add_input(row_nr,"qty_"+tab+"_"+row_nr,"inputQty_"+tab+"_"+row_nr,"Qty "+row_nr,tindex,'',1) ; tindex++ ;
|
|
# # row = row+add_input(row_nr,"amount_usd_"+tab+"_"+row_nr,"inputZar_amount_"+tab+"_"+row_nr,"Amount "+row_nr,tindex,'',1) ; tindex++ ;
|
|
# # row = row+add_input(row_nr,"amount_ttl_"+tab+"_"+row_nr,"inputTotal_"+tab+"_"+row_nr,"Total Amount "+row_nr,tindex,"readonly",1) ; tindex++ ;
|
|
# # row = row+add_checkbox(row_nr,"vat_"+tab+"_"+row_nr,"checkboxVat_"+tab+"_"+row_nr,tindex,1) ; tindex++ ;
|
|
# # return row ;
|
|
# # }
|
|
# # ~ ;
|
|
|
|
# }
|
|
|
|
if ($tab==2) { # Costing
|
|
|
|
# --------------- START COSTING ----------------------------------------------------------------------------------------------------------------
|
|
|
|
$add_form_fields = '' ;
|
|
|
|
$lcol = 1 ; $fcol = 2 ;
|
|
|
|
$db{$table}{$id}{currency} = "ZAR" unless $db{$table}{$id}{currency} ;
|
|
|
|
$opts{currency} = qq~<option value="ZAR">ZAR</option><option value="USD">USD</option><option value="EUR">EUR</option><option value="GBP">GBP</option>~ ;
|
|
$opts{currency} =~ s/value="\Q$db{$table}{$id}{currency}\E"/value="$db{$table}{$id}{currency}" SELECTED/g ;
|
|
|
|
$add_form_fields .= &common_min_form_select('currency',$db{$table}{$id}{currency},1) ;
|
|
$trigger_jquery .= qq~\$("#selectCurrency_chosen").css( "width", "96%" );~ ;
|
|
$preferred_title{roe} = ' ROE ' ; $fcol = 1 ;
|
|
$add_form_fields .= &common_min_form_label_col('roe') ;
|
|
|
|
$db{$table}{$id}{roe} = "1.00" unless $db{$table}{$id}{roe} ;
|
|
|
|
$add_form_fields .= &common_min_form_input_col('roe',$db{$table}{$id}{roe},1) ;
|
|
$add_form_fields .= qq~</div>~ ;
|
|
|
|
my $sec = 'costing' ; my ($sec_name,$sec_cnt,$sec_col) = &tab_sec_det($sec) ;
|
|
$ret_pdf_link_sec .= $sec . '+' . $sec_cnt . '|' ;
|
|
|
|
if ($ret) { return ; }
|
|
|
|
%sec_cnt = ('a' => "10-Other");
|
|
|
|
our $nr_of_costing_rows = 0 ;
|
|
|
|
foreach (sort keys %sec_cnt) {
|
|
|
|
$_k = substr($_,1) ;
|
|
next if $_k eq '_hardware' ;
|
|
my @parts = split(/\-/,$sec_cnt{$_}) ;
|
|
# $add_form_fields .= qq~<div class='row'><div class='col-md-12'><h4>$parts[1] :</h4></div></div>~ ;
|
|
$fcol = 3 ;
|
|
# $add_form_fields .= qq~<div class='row'><div class='col-md-1'><h5 style="margin: 5px 0px 5px 0px;color:#ccc;">PDF title : </h5></div>~ ;
|
|
|
|
# if ($old_title_to_new_title{$parts[1]}{$id} and $old_title_to_new_title{$parts[1]}{$id} ne $parts[1]) {
|
|
# $add_form_fields .= &common_min_form_input_col($_k, $old_title_to_new_title{$parts[1]}{$id}) ;
|
|
# } else {
|
|
# $add_form_fields .= &common_min_form_input_col($_k,'') ;
|
|
# }
|
|
|
|
# $add_form_fields .= qq~</div>~ ;
|
|
&tab_build_qt_col_headers("$sec$_k") ;
|
|
&build_cost_form($id,$tab,$parts[0],"$sec$_k") ;
|
|
|
|
# if ($_k eq '_systems') {
|
|
# $preferred_title{'systems_included'} = ' ' ; $preferred_placeholder{'systems_included'} = 'Included' ; $fcol = 3 ;
|
|
# $add_form_fields .= &common_min_form_textarea('systems_included',$db{$table}{$id}{systems_included},'') ;
|
|
# }
|
|
|
|
# if ($_k eq '_rental') {
|
|
# $preferred_title{'rental_included'} = ' ' ; $preferred_placeholder{'rental_included'} = 'Included' ; $fcol = 3 ;
|
|
# $add_form_fields .= &common_min_form_textarea('rental_included',$db{$table}{$id}{rental_included},'') ;
|
|
# }
|
|
|
|
# if ($_k eq '_other') {
|
|
# $preferred_title{'other_included'} = ' ' ; $preferred_placeholder{'other_included'} = 'Included' ; $fcol = 3 ;
|
|
# $add_form_fields .= &common_min_form_textarea('other_included',$db{$table}{$id}{other_included},'') ;
|
|
# }
|
|
|
|
}
|
|
|
|
# $add_form_fields .= qq~<div class='row'><div class="box col-md-12"> </div></div>~ ;
|
|
|
|
# $add_form_fields .= qq~<div class='row'><div class="box col-md-4"> </div>~ ;
|
|
|
|
$add_form_fields .= qq~<div class='row'><div class='col-md-3'>~ ;
|
|
# $add_form_fields .= qq~<h5 style="margin: 5px 0px 5px 0px;color:#ccc;">PDF total : </h5></div>~ ;
|
|
$add_form_fields .= qq~</div>~ ;
|
|
$lcol = 3 ;
|
|
# if ($old_title_to_new_title{"Hardware"}{$id} and $old_title_to_new_title{"Hardware"}{$id} ne "Hardware") {
|
|
# $add_form_fields .= &common_min_form_input_col('_hardware', $old_title_to_new_title{"Hardware"}{$id}) ;
|
|
# } else {
|
|
# $add_form_fields .= &common_min_form_input_col('_hardware','') ;
|
|
# }
|
|
|
|
# my @ttlarr = ("sub_total","vat_total","grand_total") ;
|
|
|
|
# @ttlarr2 = ("subtotal","vat","total") ;
|
|
|
|
$lcol = 1 ; $fcol = 1 ;
|
|
|
|
foreach (@ttlarr2) {
|
|
$readonly{$_} = "READONLY" ;
|
|
my $val = $db{$table}{$id}{$_} ; $val = '0.00' unless $val ;
|
|
# $add_form_fields .= qq~<div class='row'><div class="box col-md-4"></div>~ ; $lcol=2;
|
|
# $add_form_fields .= &common_min_form_label_col($_) ; $lcol = 1 ;
|
|
$type = 'hidden' ; $add_form_fields .= &common_min_form_input_col($_,$val) ; $type = '' ;
|
|
# $add_form_fields .= qq~</div>~ ;
|
|
|
|
$lcol = 1 ; $add_form_fields .= &common_min_form_label_col($_) ;
|
|
# $add_form_fields .= qq~<div class="box col-md-1"><label class='control-label'>Sub</label></div>~ ;
|
|
}
|
|
|
|
$add_form_fields .= qq~</div>~ ;
|
|
|
|
# $add_form_fields .= qq~<div class='row'><div class="box col-md-12"> </div></div>~ ;
|
|
|
|
# my @ttlarr = ("one_time_fee","monthly_recurring_fee","annual_fee") ;
|
|
$lcol = 1 ; $fcol = 1 ;
|
|
|
|
# foreach my $a (@ttlarr) {
|
|
|
|
# $readonly{$a} = "READONLY" ;
|
|
|
|
# # if ($_ eq 'one_time_fee') {
|
|
|
|
# # $add_form_fields .= qq~<div class='row'><div class='col-md-1'><h5 style="margin: 5px 0px 5px 0px;color:#ccc;">PDF total : </h5></div>~ ;
|
|
# # $lcol = 1 ;
|
|
# # if ($old_title_to_new_title{"Hardware"}{$id} and $old_title_to_new_title{"Hardware"}{$id} ne "Hardware"){
|
|
# # $add_form_fields .= &common_min_form_input_col('_hardware', $old_title_to_new_title{"Hardware"}{$id}) ;
|
|
# # }
|
|
# # else {
|
|
# # $add_form_fields .= &common_min_form_input_col('_hardware','') ;
|
|
# # }
|
|
# # }
|
|
|
|
# # else {
|
|
# $add_form_fields .= qq~<div class='row'><div class="box col-md-2"></div>~ ;
|
|
# # }
|
|
|
|
# $lcol = 2 ;
|
|
# $add_form_fields .= &common_min_form_label_col($a) ;
|
|
# $lcol = 1 ;
|
|
|
|
# foreach my $b (@ttlarr2) {
|
|
|
|
# $field = "$b\_$a\_2" ; $readonly{$field} = "READONLY"; $input_style{$field} = qq~style="text-align:right;"~ ;
|
|
# # my $val = $db{$table}{$id}{$field} ; $val = '0.00' unless $val ;
|
|
# my $val = $default_totals{$field}{2} ? $default_totals{$field}{2} : '0.00' ;
|
|
# $add_form_fields .= &common_min_form_input_col($field,$val) ;
|
|
# }
|
|
|
|
# # $field = "2_subtotal_$_" ; $readonly{$field} = "READONLY"; $input_style{$field} = qq~style="text-align:right;"~ ;
|
|
# # # my $val = $db{$table}{$id}{$field} ; $val = '0.00' unless $val ;
|
|
# # my $val = $db{$table}{$id}{$field} ? $db{$table}{$id}{$field} : '0.00' ;
|
|
# # $add_form_fields .= &common_min_form_input_col($field,$val) ;
|
|
|
|
# # $field = "2_vat_$_" ; $readonly{$field} = "READONLY"; $input_style{$field} = qq~style="text-align:right;"~ ;
|
|
# # # my $val = $db{$table}{$id}{$field} ; $val = '0.00' unless $val ;
|
|
# # my $val = $db{$table}{$id}{$field} ? $db{$table}{$id}{$field} : '0.00' ;
|
|
# # $add_form_fields .= &common_min_form_input_col($field,$val) ;
|
|
|
|
# # $field = "2_total_$_" ; $readonly{$field} = "READONLY"; $input_style{$field} = qq~style="text-align:right;"~ ;
|
|
# # # my $val = $db{$table}{$id}{$field} ; $val = '0.00' unless $val ;
|
|
# # my $val = $db{$table}{$id}{$field} ? $db{$table}{$id}{$field} : '0.00' ;
|
|
# # $add_form_fields .= &common_min_form_input_col($field,$val) ;
|
|
# $add_form_fields .= qq~</div>~ ;
|
|
|
|
# }
|
|
|
|
$add_form_fields .= qq~<div class='row'><div class="box col-md-3"></div>~ ;
|
|
|
|
foreach my $a (@ttlarr2) {
|
|
$readonly{$a} = "READONLY" ;
|
|
$lcol = 1 ;
|
|
$field = "$a" ; $readonly{$field} = "READONLY"; $input_style{$field} = qq~style="text-align:right;"~ ;
|
|
my $val = $default_totals{$field}{2} ? $default_totals{$field}{2} : '0.00' ;
|
|
$add_form_fields .= &common_min_form_input_col($field,$val) ;
|
|
}
|
|
|
|
$add_form_fields .= qq~</div>~ ;
|
|
|
|
$add_form_fields .= qq~<div class='row'><div class="box col-md-12"> </div></div>~ ;
|
|
|
|
$preferred_title{'include_exclude'} = 'Include/Exclude' ; $preferred_placeholder{'include_exclude'} = 'Include/Exclude' ; $fcol = 5 ;
|
|
$add_form_fields .= &common_min_form_textarea('include_exclude',$db{$table}{$id}{include_exclude},'') ;
|
|
|
|
$add_form_fields .= qq~<div class='row'><div class="box col-md-12"> </div></div>~ ;
|
|
|
|
$add_form_fields .= qq~<div class='row'><div class="col-md-1"></div>~ ;
|
|
|
|
my @docs = ("1","2","3") ;
|
|
|
|
# ($db{$table}{$id}{costing_1},$db{$table}{$id}{costing_2},$db{$table}{$id}{costing_3}) = split(/\:;:/,$db{$table}{$id}{costing_uploads}) ;
|
|
|
|
$db{$table}{$id}{costing_1} = "costing_1-$db{$table}{$id}{costing_1}" if $db{$table}{$id}{costing_1} ;
|
|
$db{$table}{$id}{costing_2} = "costing_2-$db{$table}{$id}{costing_2}" if $db{$table}{$id}{costing_2} ;
|
|
$db{$table}{$id}{costing_3} = "costing_3-$db{$table}{$id}{costing_3}" if $db{$table}{$id}{costing_3} ;
|
|
|
|
$db{$table}{$id}{costing_1} = "" if $db{$table}{$id}{costing_1} && not -f "$htmlpath/uploads/costings/$id/$db{$table}{$id}{costing_1}" ;
|
|
$db{$table}{$id}{costing_2} = "" if $db{$table}{$id}{costing_2} && not -f "$htmlpath/uploads/costings/$id/$db{$table}{$id}{costing_2}" ;
|
|
$db{$table}{$id}{costing_3} = "" if $db{$table}{$id}{costing_3} && not -f "$htmlpath/uploads/costings/$id/$db{$table}{$id}{costing_3}" ;
|
|
|
|
foreach (@docs) {
|
|
|
|
my $doc = lc $_ ; $doc =~ s/ /\_/ ; $doc =~ s/&/\_/ ;
|
|
$costing_uploads = &common_get_field_uploads($id,"costing_$doc",'id') ;
|
|
|
|
if ($costing_uploads) {
|
|
$add_form_fields .= qq~<div class="col-md-2" id="costings">$costing_uploads</div>~;
|
|
} else {
|
|
$add_form_fields .= qq~
|
|
<div class="col-md-2">
|
|
<div class="form-group">
|
|
<label for="imageInputFile">Attach Document $_</label>
|
|
<input type="file" id="imageInputFile" name='iattachcosting_$doc' tabindex='$tindex'>
|
|
<p class="help-block">Upload file from PC.</p>
|
|
</div>
|
|
</div>
|
|
~;
|
|
}
|
|
}
|
|
|
|
$add_form_fields .= qq~</div>~ ;
|
|
$add_form_fields .= qq~<input name='nr_of_costing_rows' value='$nr_of_costing_rows' type='hidden'>~ ;
|
|
|
|
# $print_box_content_rows .= qq~<div class='row'><div class="box col-md-12"><div class="box-inner"><div class="box-content">~ ;
|
|
# $print_box_content_rows .= $add_form_fields ;
|
|
# $print_box_content_rows .= &common_min_box_foot;
|
|
|
|
&tab_content_box($sec_name,$sec_col) ;
|
|
|
|
# --------------- END COSTING ----------------------------------------------------------------------------------------------------------------
|
|
|
|
}
|
|
|
|
# if ($tab==4) { # Purchase Summary
|
|
|
|
# # --------------- START PURCHASE SUMMARY ----------------------------------------------------------------------------------------------------------------
|
|
|
|
# $add_form_fields = '' ;
|
|
|
|
# my $sec = '_purchase_summary' ; my ($sec_name,$sec_cnt,$sec_col) = &tab_sec_det($sec) ;
|
|
|
|
# $ret_pdf_link_sec .= $sec . '+' . $sec_cnt . '|' ;
|
|
|
|
# if ($ret) { return ; }
|
|
|
|
# my $style_vat = '' ; if ($no_vat{$sec}) { $style_vat = 'style="display:none;"' ; }
|
|
|
|
# $add_form_fields .= qq~<div class='row'><div class='col-md-12'> </div></div>~ ;
|
|
|
|
# my $field = "excl$sec" ;
|
|
# if ($db{$table}{$id}{$field} == 1) { $checked = 'CHECKED'; } else { $checked = ''; }
|
|
# $label{$field} = 1 ;
|
|
# $add_form_fields .= qq~<div class='row'>~ ;$fcol=1 ;
|
|
# $add_form_fields .= &common_min_form_checkbox_col($field,$db{$table}{$id}{$field},$checked) ;
|
|
# $add_form_fields .= qq~<div class='col-md-11'><h4 style="margin:0px;">Purchase Summary</h4></div></div>~ ;
|
|
# $add_form_fields .= qq~<div class='row'>~ ;
|
|
# $add_form_fields .= qq~<div class='col-md-1'><label class='control-label'> Excl.</label></div>~ ;
|
|
# $add_form_fields .= qq~<div class='col-md-2'><label class='control-label'>Items</label></div>~ ;
|
|
# $add_form_fields .= qq~<div class='col-md-2' id = 'year_1_sum'><label class='control-label'>Year 1</label></div>~ ;
|
|
# $add_form_fields .= qq~<div class='col-md-2' id = 'year_2_sum'><label class='control-label'>Year 2</label></div>~ ;
|
|
# $add_form_fields .= qq~<div class='col-md-2' id = 'year_3_sum'><label class='control-label'>Year 3</label></div>~ ;
|
|
# $add_form_fields .= qq~<div class='col-md-0' style = 'display:none;' id = 'year_4_sum'><label class='control-label'>Year 4</label></div>~ ;
|
|
# $add_form_fields .= qq~<div class='col-md-0' style = 'display:none;' id = 'year_5_sum'><label class='control-label'>Year 5</label></div>~ ;
|
|
# $add_form_fields .= qq~<div class='col-md-2'><label class='control-label'>Total</label></div>~ ;
|
|
# $add_form_fields .= qq~</div>~ ;
|
|
|
|
# my $suffix = $sec ; my $rcnt = 3 ;
|
|
|
|
# # &set_check_boxes_checked($id,$rcnt,"excl",$suffix);
|
|
|
|
# $default_desc{1} = 'Hardware Purchase' ;
|
|
# $default_desc{2} = 'Monthly Fees' ;
|
|
# $default_desc{3} = 'Annual Fees' ;
|
|
|
|
# my @prefexes = ("excl", "item") ;
|
|
|
|
# foreach my $prefex (@prefexes) {
|
|
|
|
# $col_name = "$prefex" . "$suffix" ;
|
|
# $cnt = 0 ;
|
|
# # if($db{quotes_min}{$id}{$col_name}){
|
|
# for my $col_input (split(";", $db{quotes_min}{$id}{$col_name})){
|
|
# $cnt++ ;
|
|
# $saved_field{$prefex}{$suffix}{$cnt} = $col_input ;
|
|
# }
|
|
# # }
|
|
# }
|
|
# for (1 .. $rcnt) {
|
|
# $add_form_fields .= qq~<div class='row'>~ ;
|
|
# #----------------------------------------------------------------------------------------------------
|
|
# $field = "excl_$_$suffix" ; $fcol=1 ;
|
|
# # if ($checkit{$field} == 1) { $checked = 'CHECKED'; } else { $checked = ''; }
|
|
# # if ($db{$table}{$id}{$field} == 1) { $checked = 'CHECKED'; } else { $checked = ''; }
|
|
# if ($saved_field{"excl"}{$suffix}{$_} == 1) { $checked = 'CHECKED'; } else { $checked = ''; }
|
|
# $label{$field} = 1 ;
|
|
# # $add_form_fields .= &common_min_form_checkbox_col($field,$db{$table}{$id}{$field},$checked) ;
|
|
# $add_form_fields .= &common_min_form_checkbox_col($field,$saved_field{"excl"}{$suffix}{$_},$checked) ;
|
|
# #----------------------------------------------------------------------------------------------------
|
|
# my $field = "item_$_$suffix" ; $fcol=2 ;
|
|
# $preferred_placeholder{$field} = "Item $_" ;
|
|
# # my $val = $db{$table}{$id}{$field} ;
|
|
# my $val = $saved_field{"item"}{$suffix}{$_} ;
|
|
# $val = $default_desc{$_} unless $val ;
|
|
# # $readonly{$field} = 'READONLY' ;
|
|
# $add_form_fields .= &common_min_form_input_col($field,$val) ;
|
|
# #----------------------------------------------------------------------------------------------------
|
|
# for my $year (1 .. 5) {
|
|
# $field = "year_$year\_$_$suffix" ; $input_style{$field} = qq~style="text-align:right;"~;
|
|
|
|
# unless ($year==1 and $_==3) {
|
|
# $readonly{$field} = 'READONLY' ;
|
|
# } else {
|
|
# $trigger_jquery_raw .= qq~\$("#inputYear_1_$_$suffix").change(function() {
|
|
# calcAnnual$field() ;
|
|
# });
|
|
# ~;
|
|
# $trigger_jquery_raw .= qq~function calcAnnual$field()
|
|
# {
|
|
# var annual_ttl = getNum(parseFloat(\$("#inputYear_1_$_$suffix").val())) + getNum(parseFloat(\$("#inputYear_2_$_$suffix").val())) + getNum(parseFloat(\$("#inputYear_3_$_$suffix").val())) ;
|
|
# \$("#inputTotal_$_$suffix").val(annual_ttl.toFixed(2));
|
|
# }~;
|
|
# }
|
|
# $preferred_placeholder{$field} = "Year $year Total $_" ;
|
|
# # my $val = &q_get_val($db{$table}{$id}{$field}) ;
|
|
# $excl_on_change{$field} = 1 ;
|
|
# $year_totals{"yearly_totals_$year"} += $db{$table}{$id}{$field} ;
|
|
|
|
# $fcol = 12 ;
|
|
# $add_form_fields .= qq~<div class='col-md-2' id = "b_year_$year\_$_"><div class='row'>~ if $year <= 3 ;
|
|
# $add_form_fields .= qq~<div class='col-md-0' style = 'display:none;' id = "b_year_$year\_$_"><div class='row'>~ if $year > 3 ;
|
|
# $add_form_fields .= &common_min_form_input_col($field,$db{$table}{$id}{$field},1) if $db{$table}{$id}{$field} ;
|
|
# $add_form_fields .= &common_min_form_input_col($field,"0.00",1) unless $db{$table}{$id}{$field} ;
|
|
# $add_form_fields .= qq~</div></div>~ ;
|
|
# }
|
|
# $fcol = 2 ;
|
|
# #----------------------------------------------------------------------------------------------------
|
|
|
|
# $field = "total_$_$suffix" ; $input_style{$field} = qq~style="text-align:right;"~; $readonly{$field} = 'READONLY' ; # $fcol=2 ;
|
|
# $preferred_placeholder{$field} = "Total $_" ;
|
|
# # my $val = &q_get_val($db{$table}{$id}{$field}) ;
|
|
# $add_form_fields .= &common_min_form_input_col($field,$db{$table}{$id}{$field},1) ;
|
|
# #----------------------------------------------------------------------------------------------------
|
|
# $add_form_fields .= qq~</div>~ ;
|
|
# $add_form_fields .= qq~<div class='row'><div class='col-md-12' style="margin:2px 0 0 0"></div></div>~ ;
|
|
# }
|
|
# $add_form_fields .= qq~<div class='row'><div class='col-md-3' align="right"><label class="control-label">Total</label></div>~ ;
|
|
# for my $y (1 .. 5) {
|
|
# $grand_tot += $year_totals{"yearly_totals_$y"} ;
|
|
# $field ="yearly_totals_$y" ;
|
|
# $readonly{$field} = 'READONLY' ;
|
|
# # $year_totals{"yearly_totals_$y"} = &common_commify($year_totals{"yearly_totals_$y"}) ;
|
|
# $input_style{$field} = qq~style="text-align:right;"~ ;
|
|
# $fcol = 12 ;
|
|
# $add_form_fields .= qq~<div class='col-md-2' id = "total_$y"><div class='row'>~ if $y <= 3 ;
|
|
# $add_form_fields .= qq~<div class='col-md-0' id = "total_$y" style = 'display:none;'><div class='row'>~ if $y > 3 ;
|
|
# $add_form_fields .= &common_min_form_input_col($field,$year_totals{"yearly_totals_$y"},1) ;
|
|
# $add_form_fields .= qq~</div></div>~ ;
|
|
# }
|
|
|
|
# $trigger_jquery_raw .= qq~
|
|
# // console.log("suffix : "+$suffix) ;console.log("1") ;
|
|
|
|
# if (\$("#selectPeriod").val() == 60) {
|
|
|
|
# for (let ii = 1; ii <= 5; ii++) {
|
|
|
|
# if (ii <= 3) {
|
|
# \$("#year_"+ii+"_sum").removeClass("col-md-2").addClass("col-md-1") ;
|
|
# \$("#total_"+ii+"").removeClass("col-md-2").addClass("col-md-1")
|
|
# }
|
|
# else if (ii <= 5 && ii > 3) {
|
|
# \$("#year_"+ii+"_sum").removeClass("col-md-0").addClass("col-md-1") ;
|
|
# \$("#total_"+ii+"").removeClass("col-md-0").addClass("col-md-1") ;
|
|
# \$("#year_"+ii+"_sum").show() ;
|
|
# \$("#total_"+ii+"").show() ;
|
|
# }
|
|
# for (let jj = 1; jj <= 3; jj++) {
|
|
|
|
# if (ii <= 3) {
|
|
# \$("#b_year_"+ii+"_"+jj+"").removeClass("col-md-2").addClass("col-md-1") ;
|
|
# }
|
|
# else if (ii <= 5 && ii > 3) {
|
|
# \$("#b_year_"+ii+"_"+jj+"").removeClass("col-md-0").addClass("col-md-1") ;
|
|
# \$("#b_year_"+ii+"_"+jj+"").show() ;
|
|
# }
|
|
# }
|
|
# }
|
|
# }
|
|
|
|
# \$("#selectPeriod").on("change", function() {
|
|
|
|
# for (let i = 1; i <= 5; i++) {
|
|
|
|
# if (i <= 3 && \$(this).val() == 36) {
|
|
# \$("#year_"+i+"_sum").removeClass("col-md-1").addClass("col-md-2") ;
|
|
# \$("#total_"+i+"").removeClass("col-md-1").addClass("col-md-2") ;
|
|
# }
|
|
# else if (i <= 3 && \$(this).val() == 60) {
|
|
# \$("#year_"+i+"_sum").removeClass("col-md-2").addClass("col-md-1") ;
|
|
# \$("#total_"+i+"").removeClass("col-md-2").addClass("col-md-1")
|
|
# }
|
|
# else if (i <= 5 && i > 3 && \$(this).val() == 36) {
|
|
# \$("#year_"+i+"_sum").removeClass("col-md-1").addClass("col-md-0") ;
|
|
# \$("#total_"+i+"").removeClass("col-md-1").addClass("col-md-0") ;
|
|
# \$("#year_"+i+"_sum").hide() ;
|
|
# \$("#total_"+i+"").hide() ;
|
|
# }
|
|
# else if (i <= 5 && i > 3 && \$(this).val() == 60) {
|
|
# \$("#year_"+i+"_sum").removeClass("col-md-0").addClass("col-md-1") ;
|
|
# \$("#total_"+i+"").removeClass("col-md-0").addClass("col-md-1") ;
|
|
# \$("#year_"+i+"_sum").show() ;
|
|
# \$("#total_"+i+"").show() ;
|
|
# }
|
|
# for (let j = 1; j <= 3; j++) {
|
|
|
|
# if (i <= 3 && \$(this).val() == 36) {
|
|
# \$("#b_year_"+i+"_"+j+"").removeClass("col-md-1").addClass("col-md-2") ;
|
|
# }
|
|
# else if (i <= 5 && i > 3 && \$(this).val() == 36) {
|
|
# \$("#b_year_"+i+"_"+j+"").removeClass("col-md-1").addClass("col-md-0") ;
|
|
# \$("#b_year_"+i+"_"+j+"").hide() ;
|
|
# }
|
|
|
|
# else if (i <= 3 && \$(this).val() == 60) {
|
|
# \$("#b_year_"+i+"_"+j+"").removeClass("col-md-2").addClass("col-md-1") ;
|
|
# }
|
|
# else if (i <= 5 && i > 3 && \$(this).val() == 60) {
|
|
# \$("#b_year_"+i+"_"+j+"").removeClass("col-md-0").addClass("col-md-1") ;
|
|
# \$("#b_year_"+i+"_"+j+"").show() ;
|
|
# // if (\$("#b_year_"+i+"_"+j+"").text().trim() === '') {
|
|
# // \$("#b_year_"+i+"_"+j+"").text("0.00") ;
|
|
# // }
|
|
# }
|
|
# }
|
|
# }
|
|
# });
|
|
# ~ ;
|
|
|
|
# $fcol = 2 ;
|
|
# $field ="yearly_total" ;
|
|
# $readonly{$field} = 'READONLY' ;
|
|
# # $grand_tot = &common_commify($grand_tot) ;
|
|
# $input_style{$field} = qq~style="text-align:right;"~ ;
|
|
# $add_form_fields .= &common_min_form_input_col($field,$grand_tot,1) ;
|
|
# $add_form_fields .= qq~</div>~ ;
|
|
# $add_form_fields .= qq~<div class='row'><div class='col-md-12'> </div></div>~ ;
|
|
|
|
# &tab_content_box($sec_name,$sec_col);
|
|
|
|
# # --------------- END PURCHASE SUMMARY ----------------------------------------------------------------------------------------------------------------
|
|
# }
|
|
|
|
# if ($tab==5) { # Notes
|
|
|
|
# # --------------- START NOTES ----------------------------------------------------------------------------------------------------------------
|
|
|
|
# my $sec = '_notes' ; my ($sec_name,$sec_cnt,$sec_col) = &tab_sec_det($sec) ;
|
|
|
|
# $ret_pdf_link_sec .= $sec . '+' . $sec_cnt . '|' ;
|
|
|
|
# if ($ret) { return ; }
|
|
|
|
# $add_form_fields = '' ;
|
|
|
|
# # &set_check_boxes_checked($id,$sec_cnt,"excl",$sec);
|
|
|
|
|
|
# &db_min_ro('quote_notes','*',"id='1'",'','') ;
|
|
|
|
# $add_form_fields .= qq~<div class='row'><div class='col-md-12'><h4>Notes:</h4></div></div>~ ;
|
|
# &tab_build_terms_headers;
|
|
|
|
# $cntnoteloop=1; for (1 .. 12) { &tab_build_terms_fields('note',$_,$id) ; }
|
|
|
|
# $add_form_fields .= qq~<div class='row'><div class='col-md-12'><h4>Payment Terms:</h4></div></div>~ ;
|
|
# &tab_build_terms_headers;
|
|
|
|
# $cntnoteloop=1; for (1 .. 6) { &tab_build_terms_fields('payment_term',$_,$id) ; }
|
|
|
|
# $add_form_fields .= qq~<div class='row'><div class='col-md-12'><h4>ROE:</h4></div></div>~ ;
|
|
# &tab_build_terms_headers;
|
|
|
|
# $cntnoteloop=1; for (1 .. 6) { &tab_build_terms_fields('roe',$_,$id) ; }
|
|
|
|
# $add_form_fields .= qq~<div class='row'><div class='col-md-12'><h4>Delivery Time:</h4></div></div>~ ;
|
|
# &tab_build_terms_headers;
|
|
|
|
# $cntnoteloop=1; for (1 .. 4) { &tab_build_terms_fields('delivery_time',$_,$id) ; }
|
|
|
|
# $add_form_fields .= qq~<div class='row'><div class='col-md-12'><h4>Terms and Conditions:</h4></div></div>~ ;
|
|
# &tab_build_terms_headers;
|
|
|
|
# $cntnoteloop=1; for (1 .. 1) { &tab_build_terms_fields_terms_and_conditions('terms',$_,$id) ; }
|
|
|
|
# $trigger_jquery .= qq~\$("#selectTerms_chosen").css( "width", "100%" );~ ;
|
|
|
|
# &tab_content_box($sec_name,$sec_col);
|
|
|
|
# # --------------- END NOTES ----------------------------------------------------------------------------------------------------------------
|
|
# }
|
|
|
|
if ($tab==3) { # Camera Details
|
|
|
|
# --------------- START CAMERA DETAILS ----------------------------------------------------------------------------------------------------------------
|
|
|
|
$add_form_fields = '' ;
|
|
|
|
my $sec = '_camera_details' ; my ($sec_name,$sec_cnt,$sec_col) = &tab_sec_det($sec) ;
|
|
|
|
$ret_pdf_link_sec .= $sec . '+' . $sec_cnt . '|' ;
|
|
|
|
if ($ret) { return ; }
|
|
|
|
$add_form_fields = '' ;
|
|
$add_form_fields .= qq~<div class='row'>~ ;
|
|
$add_form_fields .= qq~<div class='col-md-1'><label class='control-label'> </label></div>~ ;
|
|
$add_form_fields .= qq~<div class='col-md-2'><label class='control-label'>CameraNr</label></div>~ ;
|
|
# $add_form_fields .= qq~<div class='col-md-1'><label class='control-label'>Item Code</label></div>~ ;
|
|
$add_form_fields .= qq~<div class='col-md-1'><label class='control-label'>Description</label></div>~ ;
|
|
# $add_form_fields .= qq~<div class='col-md-1'><label class='control-label'>Qty</label></div>~ ;
|
|
$add_form_fields .= qq~<div class='col-md-2'><label class='control-label'>Serial Number</label></div>~ ;
|
|
$add_form_fields .= qq~<div class='col-md-1'><label class='control-label'>Ref</label></div>~ ;
|
|
$add_form_fields .= qq~<div class='col-md-1'><label class='control-label'>Delivery Date</label></div>~ ;
|
|
$add_form_fields .= qq~<div class='col-md-1'><label class='control-label'>Active Date</label></div>~ ;
|
|
$add_form_fields .= qq~<div class='col-md-1'><label class='control-label'>E/W Date From</label></div>~ ;
|
|
$add_form_fields .= qq~<div class='col-md-1'><label class='control-label'>E/W Date To</label></div>~ ;
|
|
$add_form_fields .= qq~<div class='col-md-1'><label class='control-label'> </label></div>~ ;
|
|
$add_form_fields .= qq~</div>~ ;
|
|
|
|
# my $suffix = $sec ; my $rcnt = 11 ;
|
|
# my $suffix = $sec ; my $rcnt = 20 ;
|
|
my $suffix = $sec ; my $rcnt = $max_cams ; # set in quotes.pl
|
|
# our %linked_vpu = () ; our %vpu_serial_nr = () ; our %vpu_camera_nr = () ;
|
|
&tab_camera_details_select_opts('cameras','camera_nr',"camera_nr NOT LIKE 'vpu%'",$suffix,$rcnt) ;
|
|
|
|
$rcnt = $max_cams ; # reset in tab_camera_details_select_opts
|
|
|
|
# &tab_camera_details_select_opts('cameras','camera_nr',"event_system_id < 1",$suffix,$rcnt) ;
|
|
|
|
my $cam_qtys = '' ;
|
|
|
|
# &common_debug("cam_qtys : quote_nr=$db{$table}{$id}{quote_nr}") ;
|
|
|
|
foreach (keys %{$camera_system_count{$db{$table}{$id}{quote_nr}}}) {
|
|
# &common_debug("cam_qtys : cam=$_, qty=$camera_system_count{$db{$table}{$id}{quote_nr}}{$_}") ;
|
|
$cam_qtys .= qq~$_ : $camera_system_count{$db{$table}{$id}{quote_nr}}{$_}<br>~ ;
|
|
}
|
|
|
|
# our $cam_box_icon = qq~ <a href="#" data-toggle="popover" data-placement="left" data-content="$cam_qtys" title="Camera Qty Count" data-html="true" data-trigger="focus" class="btn btn-default btn-xs"><i class="glyphicons glyphicons-hash" style="margin-top:3px;"></i></a>~ if $cam_qtys ;
|
|
our $cam_box_icon = qq~<a href="#" data-toggle="popover" data-placement="left" data-content="$cam_qtys" title="Camera Qty Count" data-html="true" data-trigger="focus" class="btn btn-round btn-default"><i class="glyphicons glyphicons-hash" style="margin-top:-2.5px;margin-left:-9px;"></i></a> ~ if $cam_qtys ;
|
|
|
|
# foreach (sort keys %sec_cnt) {
|
|
# $_k = substr($_,1) ;
|
|
# my @parts = split(/\-/,$sec_cnt{$_}) ;
|
|
# $add_form_fields .= qq~<div class='row'><div class='col-md-12'><h4>$parts[1] :</h4></div></div>~ ;
|
|
# &tab_build_qt_col_headers("$sec$_k");
|
|
# &build_cost_form($id,$tab,$parts[0],"$sec$_k");
|
|
# }
|
|
|
|
# unless ($db{quote_notes}{1}{$inpfield}) { $checkit{$exfield} = 1 ; }
|
|
|
|
# $add_form_fields .= qq~<div class='row'>~ ;
|
|
# if ($checkit{$exfield} == 1) { $checked = 'CHECKED'; } elsif (($excl_tick{$cnt}) and ($iaction eq 'add')) { $checked = 'CHECKED'; } else { $checked = ''; }
|
|
|
|
# &set_check_boxes_checked($id,$rcnt,"excl",$suffix);
|
|
|
|
my $cntcamloop=1;
|
|
|
|
for (1 .. $rcnt) {
|
|
|
|
my $q_nr = $db{$table}{$id}{quote_nr} ;
|
|
|
|
|
|
# next if substr($sel_cam_nr{$camera_details{$q_nr}{$_}{"$_$suffix"}{id}},0,3) eq 'VPU' ;
|
|
my $a = "$_$suffix" ;
|
|
# &common_debug("rcnt : $_ , q_nr : $q_nr , camera_details : $camera_details{$q_nr}{$_}{$a}{id}") ;
|
|
|
|
$cam_display_style = '' ; $cam_display_plus_btn = '' ;
|
|
# unless ($_==1 or $db{$table}{$id}{"camera_nr_$_$suffix"}) {
|
|
unless ($_==1 or $camera_details{$q_nr}{$_}{"$_$suffix"}{id}) {
|
|
$cam_display_style = qq~style='display:none;'~ ;
|
|
$trigger_jquery_raw .= qq~ \$("#btn_$_$suffix").click(function () {
|
|
\$("#$_$suffix").toggle();
|
|
\$("#btn_$_$suffix").hide();
|
|
var v = $_ + 1 ;
|
|
\$("#btn_"+v+"$suffix").show();
|
|
});~ ;
|
|
if ($_>$cntcamloop) { $cam_display_butt = qq~display:none;~ ; } else { $cam_display_butt = '' ; }
|
|
$cam_display_plus_btn = qq~<a id="btn_$_$suffix" href="#" style="padding-left:16px;$cam_display_butt"><i class="glyphicon glyphicon-plus blue"></i></a>~;
|
|
} else { $cntcamloop++ ; }
|
|
|
|
|
|
|
|
$add_form_fields .= qq~<div class='row' id='$_$suffix' $cam_display_style>~ ;
|
|
|
|
# my $cam_id = $db{$table}{$id}{"camera_nr_$_$suffix"} ;
|
|
|
|
# $add_form_fields .= qq~<div class='row'>~ ;
|
|
#----------------------------------------------------------------------------------------------------
|
|
$field = "excl_$_$suffix" ; $fcol=1 ;
|
|
my $val = $camera_details{$q_nr}{$_}{"$_$suffix"}{quote_cam_excl} ;
|
|
# if ($checkit{$field} == 1) { $checked = 'CHECKED'; } elsif ($_!=1 and $iaction eq 'add') { $checked = 'CHECKED'; } else { $checked = ''; }
|
|
if ($val==1) { $checked = 'CHECKED'; } elsif ($iaction eq 'add') { $checked = 'CHECKED'; } elsif ($val eq '0') { $checked = ''; } else { $checked = 'CHECKED'; }
|
|
# &common_debug("$field : [$val] [$checked] [$_$suffix]") ;
|
|
$label{$field} = 1 ;
|
|
$excl_on_change{$field} = 1 ;
|
|
$add_form_fields .= &common_min_form_checkbox_col($field,$val,$checked) ;
|
|
#----------------------------------------------------------------------------------------------------
|
|
my $field = "camera_nr_$_$suffix" ; $fcol=2 ;
|
|
$allow_deselect{$field} = 1 ;
|
|
$preferred_placeholder{$field} = "Camera Nr $_" ;
|
|
# my $val = $db{$table}{$id}{$field} ; # if ($_==1) { $readonly{$field} = 'READONLY' ; }
|
|
$val = $camera_details{$q_nr}{$_}{"$_$suffix"}{id} ; # if ($_==1) { $readonly{$field} = 'READONLY' ; }
|
|
# $add_form_fields .= &common_min_form_input_col($field,$val) ;
|
|
$excl_on_change{$field} = 1 ;
|
|
|
|
$opts{$field} = $opts_on_edit{$field} if $opts_on_edit{$field} and $db{quotes}{$i{id}}{max_cams} > 50 ; #and $username eq 'rory' ; # overwrite if selected and max_cams exceeded
|
|
|
|
$add_form_fields .= &common_min_form_select_col($field,$val) ;
|
|
|
|
my $abrv_cam_system = substr($sel_cam_nr{$val},0,3);
|
|
# next if $abrv_cam_system eq 'VPU' ;
|
|
# &common_debug("abrv_cam_system=$abrv_cam_system, abrv_prev_cam_system=$abrv_prev_cam_system, prev_cam_nr=$prev_cam_nr, link to: c_excl_$_\_camera_details") ;
|
|
# if ($abrv_cam_system eq 'VPU' and ($abrv_prev_cam_system eq 'S1' or $abrv_prev_cam_system_other eq 'Prime' or $abrv_prev_cam_system_other eq 'Coach')) {
|
|
|
|
# if ($abrv_cam_system eq 'VPU' and ($abrv_prev_cam_system eq 'S1' or $abrv_prev_cam_system eq 'S2' or $abrv_prev_cam_system_other eq 'Prime' or $abrv_prev_cam_system_other eq 'Coach')) {
|
|
|
|
if ($linked_vpu{$val}) {
|
|
$trigger_jquery .= qq~\$("#c_excl_$_\_camera_details").append("<i class='glyphicons glyphicons-link fright' title='Linked to VPU $vpu_camera_nr{$linked_vpu{$val}} with Serial Nr $vpu_serial_nr{$linked_vpu{$val}}' data-toggle='tooltip' data-placement='right'></i>");\$('[data-toggle="tooltip"]').tooltip({html:true}) ;~;
|
|
}
|
|
# }
|
|
$abrv_prev_cam_system = substr($abrv_cam_system,0,2);
|
|
$abrv_prev_cam_system_other = substr($abrv_cam_system,0,5);
|
|
$prev_cam_nr = $sel_cam_nr{$val} ;
|
|
#----------------------------------------------------------------------------------------------------
|
|
# # my $field = "item_code_$_$suffix" ; $fcol=1 ;
|
|
# # $preferred_placeholder{$field} = "Item Code $_" ;
|
|
# # my $val = $db{$table}{$id}{$field} ; # if ($_==1) { $readonly{$field} = 'READONLY' ; }
|
|
# # $add_form_fields .= &common_min_form_input_col($field,$val) ;
|
|
#----------------------------------------------------------------------------------------------------
|
|
my $field = "description_$_$suffix" ; $fcol=1 ;
|
|
$preferred_placeholder{$field} = "Description $_" ;
|
|
# my $val = $db{$table}{$id}{$field} ; # if ($_==1) { $readonly{$field} = 'READONLY' ; }
|
|
my $val = $camera_details{$q_nr}{$_}{"$_$suffix"}{quote_cam_desc} ; # if ($_==1) { $readonly{$field} = 'READONLY' ; }
|
|
$excl_on_change{$field} = 1 ;
|
|
$add_form_fields .= &common_min_form_input_col($field,$val) ;
|
|
#----------------------------------------------------------------------------------------------------
|
|
# my $field = "qty_$_$suffix" ; $fcol=1 ;
|
|
# $preferred_placeholder{$field} = "Qty $_" ;
|
|
# my $val = $db{$table}{$id}{$field} ; # if ($_==1) { $readonly{$field} = 'READONLY' ; }
|
|
# $type = 'hidden' ; $add_form_fields .= &common_min_form_input_col($field,$val) ; $type = '' ;
|
|
#----------------------------------------------------------------------------------------------------
|
|
my $field = "serial_nr_$_$suffix" ; $fcol=2 ;
|
|
$preferred_placeholder{$field} = "Serial Nr $_" ;
|
|
# my $val = $db{$table}{$id}{$field} ; # if ($_==1) { $readonly{$field} = 'READONLY' ; }
|
|
my $val = $camera_details{$q_nr}{$_}{"$_$suffix"}{serial_nr} ; # if ($_==1) { $readonly{$field} = 'READONLY' ; }
|
|
$excl_on_change{$field} = 1 ;
|
|
$add_form_fields .= &common_min_form_input_col($field,$val) ;
|
|
#----------------------------------------------------------------------------------------------------
|
|
my $field = "ref_$_$suffix" ; $fcol=1 ;
|
|
$preferred_placeholder{$field} = "Ref $_" ;
|
|
# my $val = $db{$table}{$id}{$field} ;
|
|
my $val = $camera_details{$q_nr}{$_}{"$_$suffix"}{quote_ref} ;
|
|
$excl_on_change{$field} = 1 ;
|
|
$add_form_fields .= &common_min_form_input_col($field,$val) ;
|
|
# &common_debug("2. $field : [$q_nr] [$_] [$_$suffix] [$val]") if $val;
|
|
#----------------------------------------------------------------------------------------------------
|
|
my $field = "delivery_date_$_$suffix" ; $fcol=1 ;
|
|
$preferred_placeholder{$field} = "Delivery Date $_" ;
|
|
# my $val = $db{$table}{$id}{$field} ; # if ($_==1) { $readonly{$field} = 'READONLY' ; }
|
|
my $val = $camera_details{$q_nr}{$_}{"$_$suffix"}{quote_delivery_date} ; # if ($_==1) { $readonly{$field} = 'READONLY' ; }
|
|
$excl_on_change{$field} = 1 ;
|
|
$add_form_fields .= &common_min_form_datepicker_col($field,$val) ;
|
|
#----------------------------------------------------------------------------------------------------
|
|
my $field = "active_date_$_$suffix" ; $fcol=1 ;
|
|
$preferred_placeholder{$field} = "Active Date $_" ;
|
|
# my $val = $db{$table}{$id}{$field} ; # if ($_==1) { $readonly{$field} = 'READONLY' ; }
|
|
my $val = $camera_details{$q_nr}{$_}{"$_$suffix"}{quote_active_date} ; # if ($_==1) { $readonly{$field} = 'READONLY' ; }
|
|
$add_form_fields .= &common_min_form_datepicker_col($field,$val) ;
|
|
#----------------------------------------------------------------------------------------------------
|
|
my $field = "ew_date_from_$_$suffix" ; $fcol=1 ;
|
|
$preferred_placeholder{$field} = "E/W Date From $_" ;
|
|
# my $val = $db{$table}{$id}{$field} ; # if ($_==1) { $readonly{$field} = 'READONLY' ; }
|
|
my $val = $camera_details{$q_nr}{$_}{"$_$suffix"}{quote_ew_date_from} ; # if ($_==1) { $readonly{$field} = 'READONLY' ; }
|
|
$excl_on_change{$field} = 1 ;
|
|
$add_form_fields .= &common_min_form_datepicker_col($field,$val) ;
|
|
#----------------------------------------------------------------------------------------------------
|
|
my $field = "ew_date_to_$_$suffix" ; $fcol=1 ;
|
|
$preferred_placeholder{$field} = "E/W Date To $_" ;
|
|
# my $val = $db{$table}{$id}{$field} ; # if ($_==1) { $readonly{$field} = 'READONLY' ; }
|
|
my $val = $camera_details{$q_nr}{$_}{"$_$suffix"}{quote_ew_date_to} ; # if ($_==1) { $readonly{$field} = 'READONLY' ; }
|
|
$excl_on_change{$field} = 1 ;
|
|
$add_form_fields .= &common_min_form_datepicker_col($field,$val) ;
|
|
#----------------------------------------------------------------------------------------------------
|
|
# my $ew_pdf_butt = '' ; if ($username eq 'rory' or $username eq 'handre') { $ew_pdf_butt = qq~ <a class='btn btn-default btn-xs' href="javascript:dlgMdl('$useropts{scripts}/pdf/warranty_pdf.pl?$id&$camera_details{$q_nr}{$_}{"$_$suffix"}{id}','EXTENDED WARRANTY PDF [$camera_details{$q_nr}{$_}{"$_$suffix"}{camera_nr}]','','waybill-dialog');" data-title="Extended Warranty PDF" data-toggle="tooltip" data-placement="right"><i class="glyphicon glyphicon-print"></i></a>~; }
|
|
# my $ew_pdf_butt = '' ; if ($camera_details{$q_nr}{$_}{"$_$suffix"}{quote_ew_date_from} and $camera_details{$q_nr}{$_}{"$_$suffix"}{quote_ew_date_to} and uc substr($camera_details{$q_nr}{$_}{"$_$suffix"}{camera_nr},0,3) ne 'VPU') { $ew_pdf_butt = qq~ <a class='btn btn-default btn-xs' href="javascript:dlgMdl('$useropts{scripts}/pdf/warranty_pdf.pl?$id&$camera_details{$q_nr}{$_}{"$_$suffix"}{id}','EXTENDED WARRANTY PDF [$camera_details{$q_nr}{$_}{"$_$suffix"}{camera_nr}]','','waybill-dialog');" data-title="Extended Warranty PDF [$camera_details{$q_nr}{$_}{"$_$suffix"}{camera_nr}]" data-toggle="tooltip" data-placement="right"><i class="glyphicon glyphicon-print"></i></a>~; }
|
|
my $ew_pdf_butt = '' ; if ($camera_details{$q_nr}{$_}{"$_$suffix"}{quote_ew_date_from} and $camera_details{$q_nr}{$_}{"$_$suffix"}{quote_ew_date_to} and (uc substr($camera_details{$q_nr}{$_}{"$_$suffix"}{camera_nr},0,2) eq 'S1' or uc substr($camera_details{$q_nr}{$_}{"$_$suffix"}{camera_nr},0,5) eq 'SCORE')) { $ew_pdf_butt = qq~ <a class='btn btn-default btn-xs' href="javascript:dlgMdl('$useropts{scripts}/pdf/warranty_pdf.pl?$id&$camera_details{$q_nr}{$_}{"$_$suffix"}{id}','EXTENDED WARRANTY PDF [$camera_details{$q_nr}{$_}{"$_$suffix"}{camera_nr}]','','waybill-dialog');" data-title="Extended Warranty PDF [$camera_details{$q_nr}{$_}{"$_$suffix"}{camera_nr}]" data-toggle="tooltip" data-placement="right"><i class="glyphicon glyphicon-print"></i></a>~; }
|
|
#----------------------------------------------------------------------------------------------------
|
|
$add_form_fields .= qq~<div class="col-md-1">$ew_pdf_butt</div>~ ;
|
|
$add_form_fields .= qq~</div>~ ;
|
|
$add_form_fields .= qq~<div class='row'><div class="col-md-1">$cam_display_plus_btn</div></div>~ ;
|
|
$add_form_fields .= qq~<div class='row'><div class='col-md-12' style="margin:2px 0 0 0"></div></div>~ ;
|
|
}
|
|
|
|
$add_form_fields .= qq~<div class='row'><div class='col-md-12'> </div></div>~ ;
|
|
|
|
&tab_content_box($sec_name,$sec_col);
|
|
|
|
$cam_box_icon = '' ;
|
|
|
|
# --------------- END CAMERA DETAILS ----------------------------------------------------------------------------------------------------------------
|
|
}
|
|
|
|
if ($tab==4) { # Invoice Details
|
|
|
|
# --------------- START INVOICE DETAILS --------------------------------------------------------------------------------------------------------
|
|
|
|
my $sec = '_invoice_details' ; my ($sec_name,$sec_cnt,$sec_col) = &tab_sec_det($sec) ;
|
|
|
|
$ret_pdf_link_sec .= $sec . '+' . $sec_cnt . '|' ;
|
|
|
|
if ($ret) { return ; }
|
|
|
|
$lcol = 2 ;
|
|
$fcol = 5 ;
|
|
|
|
$add_form_fields = '' ;
|
|
|
|
$add_form_fields .= &common_min_form_input('invoice_nr',$db{$table}{$id}{invoice_nr},'') ;
|
|
my $checked = 'CHECKED' if $db{$table}{$id}{annual_invoice} ;
|
|
$add_form_fields .= &common_min_form_checkbox('annual_invoice',$db{$table}{$id}{annual_invoice},$checked) ;
|
|
# if ($db{$table}{$id}{invoice_date} eq '' or $db{$table}{$id}{invoice_date} eq '0000-00-00') { $db{$table}{$id}{invoice_date} = $now_ccyy_mm_dd ; }
|
|
$add_form_fields .= &common_min_form_datepicker('invoice_date',$db{$table}{$id}{invoice_date}) ;
|
|
$add_form_fields .= &common_min_form_input('annual_invoice_2',$db{$table}{$id}{annual_invoice_2},'') ;
|
|
$add_form_fields .= &common_min_form_input('annual_invoice_3',$db{$table}{$id}{annual_invoice_3},'') ;
|
|
# $add_form_fields .= qq~<div class='row'><div class='col-md-12' style="height:20px;"> </div></div>~ ;
|
|
|
|
&tab_content_box($sec_name,$sec_col);
|
|
|
|
# --------------- END INVOICE DETAILS ----------------------------------------------------------------------------------------------------------
|
|
}
|
|
|
|
# if ($tab==7) { # Extended Warranty
|
|
|
|
# # --------------- START EXTENDED WARRANTY --------------------------------------------------------------------------------------------------------
|
|
|
|
# my $sec = '_extended_warranty' ; my ($sec_name,$sec_cnt,$sec_col) = &tab_sec_det($sec) ;
|
|
|
|
# $ret_pdf_link_sec .= $sec . '+' . $sec_cnt . '|' ;
|
|
|
|
# if ($ret) { return ; }
|
|
|
|
# $lcol = 2 ;
|
|
# $fcol = 3 ;
|
|
|
|
# $add_form_fields = '' ;
|
|
|
|
# if (($db{$table}{$id}{date_from} eq '') or ($db{$table}{$id}{date_from} eq '0000-00-00')) { $db{$table}{$id}{date_from} = $now_ccyy_mm_dd ; }
|
|
# $add_form_fields .= &common_min_form_datepicker('date_from',$db{$table}{$id}{date_from}) ;
|
|
# if (($db{$table}{$id}{date_to} eq '') or ($db{$table}{$id}{date_to} eq '0000-00-00')) { $db{$table}{$id}{date_to} = $now_ccyy_mm_dd ; }
|
|
# $add_form_fields .= &common_min_form_datepicker('date_to',$db{$table}{$id}{date_to}) ;
|
|
|
|
# &tab_content_box($sec_name,$sec_col);
|
|
|
|
# # --------------- END EXTENDED WARRANTY ----------------------------------------------------------------------------------------------------------
|
|
# }
|
|
|
|
# if ($tab==8) { # Rental
|
|
|
|
# # --------------- START RENTAL --------------------------------------------------------------------------------------------------------
|
|
|
|
# my $sec = '_rental' ; my ($sec_name,$sec_cnt,$sec_col) = &tab_sec_det($sec) ;
|
|
|
|
# $ret_pdf_link_sec .= $sec . '+' . $sec_cnt . '|' ;
|
|
|
|
# if ($ret) { return ; }
|
|
|
|
# $lcol = 2 ;
|
|
# $fcol = 3 ;
|
|
|
|
# $add_form_fields = '' ;
|
|
|
|
# # our %sec_cnt = ('_cost' => "1-Cost");
|
|
|
|
# # my $sec = '_rental' ; my ($sec_name,$sec_cnt,$sec_col) = &tab_sec_det($sec) ;
|
|
# # $ret_pdf_link_sec .= $sec . '+' . $sec_cnt . '|' ;
|
|
|
|
# # if ($ret) { return ; }
|
|
|
|
# # foreach (sort keys %sec_cnt) {
|
|
# # my @parts = split(/\-/,$sec_cnt{$_}) ;
|
|
# # $add_form_fields .= qq~<div class='row'><div class='col-md-12'><h4>$parts[1] :</h4></div></div>~ ;
|
|
# # &tab_build_qt_col_headers("$sec$_");
|
|
# # &build_cost_form($id,$tab,$parts[0],"$sec$_");
|
|
# # }
|
|
|
|
# &tab_content_box($sec_name,$sec_col);
|
|
|
|
# # --------------- END RENTAL ----------------------------------------------------------------------------------------------------------
|
|
# }
|
|
|
|
if ($tab==5) { # Document Uploads
|
|
|
|
# --------------- START DOCUMENT UPLOADS ----------------------------------------------------------------------------------------------------------------
|
|
|
|
$add_form_fields = '' ;
|
|
|
|
my $sec = '_document_uploads' ; my ($sec_name,$sec_cnt,$sec_col) = &tab_sec_det($sec) ;
|
|
|
|
$ret_pdf_link_sec .= $sec . '+' . $sec_cnt . '|' ;
|
|
|
|
if ($ret) { return ; }
|
|
|
|
$add_form_fields = '' ;
|
|
|
|
my @docs = ('Signed Quote','PO','Other 1','SLA','T&Cs','Other 2','Photos','Delivery Note','Other 3');
|
|
|
|
$add_form_fields .= qq~<div class='row'>~ ;
|
|
|
|
foreach (@docs) {
|
|
|
|
my $doc = lc $_ ; $doc =~ s/ /\_/ ; $doc =~ s/&/\_/ ;
|
|
|
|
$db{$table}{$id}{"costing_$doc"} = "costing_$doc" . '-' . $db{$table}{$id}{"costing_$doc"} if $db{$table}{$id}{"costing_$doc"} ;
|
|
|
|
$costing_uploads = &common_get_field_uploads($id,"costing_$doc",'id') ;
|
|
if ($costing_uploads) {
|
|
$add_form_fields .= qq~<div class="col-md-4" id="costings">$costing_uploads</div>~;
|
|
} else {
|
|
$add_form_fields .= qq~
|
|
<div class="col-md-4">
|
|
<div class="form-group">
|
|
<label for="imageInputFile">Attach Document $_</label>
|
|
<input type="file" id="imageInputFile" name='iattachcosting_$doc' tabindex='$tindex'>
|
|
<p class="help-block">Upload file from PC.</p>
|
|
</div>
|
|
</div>
|
|
~;
|
|
}
|
|
}
|
|
|
|
$add_form_fields .= qq~</div>~ ;
|
|
|
|
&tab_content_box($sec_name,$sec_col);
|
|
|
|
# --------------- END DOCUMENT UPLOADS ----------------------------------------------------------------------------------------------------------------
|
|
}
|
|
|
|
} #------------------------------------------------------------------------------------
|
|
|
|
# sub tab_costing_select_opts {
|
|
|
|
# my ($table,$dispfield,$where,$sec_) = @_ ;
|
|
|
|
# &db_min_ro($table,'*',$where,'','') ;
|
|
# my @b = (
|
|
# "_costing_additional_services",
|
|
# "_costing_game_breakdown_analytics",
|
|
# "_costing_hardware_add_ons",
|
|
# "_costing_installation_kits",
|
|
# "_costing_match_credits",
|
|
# "_costing_other",
|
|
# "_costing_rental",
|
|
# "_costing_software_licence",
|
|
# "_costing_systems" ) ;
|
|
|
|
# foreach my $suf (@b){
|
|
# $col_name = "item" . "$suf" ;
|
|
# $cnt = 0 ;
|
|
# if($db{quotes_min}{$i{id}}{$col_name}){
|
|
# foreach my $col_input (split(";", $db{quotes_min}{$i{id}}{$col_name})){
|
|
# $cnt++ ;
|
|
# $saved_field{"item"}{$suf}{$cnt} = $col_input ;
|
|
# # &common_debug("$aa/$suffix : $cc") ;
|
|
# }
|
|
# }
|
|
# }
|
|
|
|
# foreach my $id (keys %{$db{$table}}) {
|
|
# foreach (sort keys %sec_cnt) {
|
|
# $_k = substr($_,1) ; $k = substr($_,2) ;
|
|
# # &common_debug("tab_select_opts : $db{$table}{$id}{type} ne $k") ;
|
|
# unless ($db{$table}{$id}{type} eq $k) { next ; }
|
|
# my @parts = split(/\-/,$sec_cnt{$_}) ;
|
|
# for my $p_ (1 .. $parts[0]) { # item_1_costing_systems
|
|
# my $field = "$p_$sec_$_k" ; #my $ucf_field = ucfirst $field ; my $chosen_field = ucfirst $field . '_chosen' ;
|
|
# # $opts{"item_$p_$sec_$_k"} .= qq~<option value="$id">$db{$table}{$id}{$dispfield}</option>~ ;
|
|
# my $field_2 = "$sec_$_k" ;
|
|
# # my $saved_val = $db{quotes}{$i{id}}{"item_$field"} ;
|
|
# my $saved_val = $saved_field{"item"}{$field_2}{$p_} ;
|
|
|
|
# if ($saved_val) { my @valarr = split(/\:/,$saved_val) ; $saved_val = $valarr[0] ; }
|
|
|
|
# if ($saved_val eq $id) { $selected = 'SELECTED' ; } else { $selected = '' ; }
|
|
|
|
# # $opts{"item_$field"} .= qq~<option $selected value="$id:$db{$table}{$id}{freight}:$db{$table}{$id}{nett}:$db{$table}{$id}{main_price}:$db{$table}{$id}{gross_10_1_50}:$db{$table}{$id}{gross_10_51_plus}:$db{$table}{$id}{gross_20_1_50}:$db{$table}{$id}{gross_20_51_plus}:$db{$table}{$id}{gross_50}">$db{$table}{$id}{$dispfield}</option>~ ;
|
|
# $opts{"item_$field"} .= qq~<option $selected value="$id:$db{$table}{$id}{freight}:$db{$table}{$id}{nett}:$db{$table}{$id}{main_price}:$db{$table}{$id}{source_admin}:$db{$table}{$id}{'3_perc'}:$db{$table}{$id}{'5_perc'}:$db{$table}{$id}{'6_perc'}:$db{$table}{$id}{'8_perc'}:$db{$table}{$id}{'10_perc'}:$db{$table}{$id}{'15_perc'}:$db{$table}{$id}{'20_perc'}">$db{$table}{$id}{$dispfield}</option>~ ;
|
|
|
|
# # if ($field eq '3_costing_software_licence' or $field eq '2_costing_game_breakdown_analytics') {
|
|
# if ($field eq '2_costing_systems' or $field eq '3_costing_systems' or $field eq '3_costing_software_licence' or $field eq '2_costing_game_breakdown_analytics') {
|
|
# $item_type = 'input' ;
|
|
# } else {
|
|
# $item_type = 'select' ;
|
|
# }
|
|
|
|
# unless ($got{$field}) {
|
|
# $preferred_title{"item_$field"} = &common_min_print_field("item_$p_$_k") ;
|
|
# if ($item_type eq 'select') { $trigger_jquery .= qq~\$("#selectItem_$field\_chosen").css( "width", "96%" )
|
|
# ~ ; } $got{$field} = 1 ;
|
|
# # $trigger_jquery_raw .= qq~\$("#$item_type\Item_$field, #selectDiscount").change(function() {
|
|
# # calcCosting$field(1) ;
|
|
# # });
|
|
# # ~;
|
|
# # $trigger_jquery_raw .= qq~\$("#inputQty_$field, #inputUsd_amnt_$field").change(function() {
|
|
# # calcCosting$field(0) ;
|
|
# # });
|
|
# # ~;$trigger_jquery_raw .= qq~function calcCosting$field(b)
|
|
# # {
|
|
# # if (b==1) { \$("#inputUsd_amnt_$field").val(''); }
|
|
|
|
# # var excl = \$("#checkboxExcl_$field");
|
|
# # var item = \$("#$item_type\Item_$field");
|
|
# # var usd = \$("#inputUsd_amnt_$field");
|
|
# # var conv = \$("#inputCurr_amnt_$field");
|
|
# # var qty = \$("#inputQty_$field");
|
|
# # var ttl = \$("#inputItem_ttl_$field");
|
|
# # var vat = \$("#checkboxVat_$field");
|
|
|
|
# # // console.log('DISCOUNT - item: '+item.val()+', usd: '+usd.val()) ;
|
|
|
|
# # if (!item.val()) {
|
|
# # excl.prop("checked", true);
|
|
# # usd.val("");
|
|
# # conv.val("");
|
|
# # qty.val("");
|
|
# # ttl.val("");
|
|
# # vat.val("");
|
|
# # // return ;
|
|
# # }
|
|
|
|
# # calcCosting(excl,item,qty,usd,conv,vat,ttl) ;
|
|
# # }~;
|
|
|
|
# }
|
|
# }
|
|
# }
|
|
# }
|
|
# } #------------------------------------------------------------------------------------------
|
|
|
|
sub tab_camera_details_select_opts {
|
|
|
|
my ($table,$dispfield,$where,$suffix,$rcnt) = @_ ;
|
|
|
|
&db_min_ro('customers','id,name','','','') ;
|
|
foreach my $id (keys %{$db{customers}}) { $customers_name{$id} = $db{customers}{$id}{name} ; }
|
|
|
|
&db_min_ro('camera_systems','id,name','','','') ;
|
|
foreach my $id (keys %{$db{camera_systems}}) { $camera_system{$id} = $db{camera_systems}{$id}{name} ; }
|
|
|
|
# my $add_quote_fields = '' ; my $sql_or_where = '' ; my @sqlorwhere = () ;
|
|
# for (1 .. $rcnt) {
|
|
# $add_quote_fields .= ",quotes.camera_nr_$_$suffix" ;
|
|
# push @sqlorwhere, "quotes.camera_nr_$_$suffix>0" ;
|
|
# }
|
|
# $sql_or_where = join(" OR ",@sqlorwhere) ;
|
|
|
|
# &db_min_ro("$table,quotes","quotes.id,$table.id$add_quote_fields",$sql_or_where,'','') ;
|
|
|
|
# foreach my $id (keys %{$db{"$table,quotes"}}) {
|
|
# # $db{quotes}{$i{id}}{"camera_nr_$field"}
|
|
# for (1 .. 10) {
|
|
# my $field = $db{"$table,quotes"}{$id}{"camera_nr_$_$suffix"} ;
|
|
# if ($field) {
|
|
# # $camera_exists_on_quote{$field} = $id ;
|
|
# $exclude_camera_from_list{$field} = 1 ;
|
|
# # &common_debug("exclude_camera_from_list : $field") ;
|
|
# }
|
|
# }
|
|
|
|
# }
|
|
|
|
our %linked_vpu = () ; our %vpu_serial_nr = () ; our %vpu_camera_nr = () ; my $cnt_sel=0; my %done_quote_cam_num = () ; my %done_field = () ;
|
|
&db_min_ro($table,'id,camera_nr,serial_nr,quote_nr',"camera_nr LIKE 'vpu%'",'','') ;
|
|
foreach (keys %{$db{$table}}) {
|
|
$vpu_serial_nr{$_} = $db{$table}{$_}{serial_nr} ;
|
|
$vpu_camera_nr{$_} = $db{$table}{$_}{camera_nr} ;
|
|
|
|
my $qnr = $db{$table}{$_}{quote_nr} ;
|
|
|
|
if ($qnr eq $db{quotes}{$i{id}}{quote_nr}) {
|
|
$cnt_cams{$qnr}++;
|
|
# &common_debug("$cnt_cams{$qnr}. $qnr eq $db{quotes}{$i{id}}{quote_nr} ") if $qnr == 1261 ;
|
|
}
|
|
|
|
}
|
|
&db_min_ro($table,'*',$where,'','') ;
|
|
|
|
LOOP1: foreach my $id (sort keys %{$db{$table}}) {
|
|
|
|
# &common_debug("1. LOOP1 $db{$table}{$id}{quote_nr} and $db{$table}{$id}{quote_nr} ne $db{quotes}{$i{id}}{quote_nr}") if $db{$table}{$id}{quote_nr} == 1261 ;
|
|
if ($db{$table}{$id}{quote_nr} and $db{$table}{$id}{quote_nr} ne $db{quotes}{$i{id}}{quote_nr}) { next ; }
|
|
|
|
# &common_debug("2. LOOP1 event_system_id=$db{$table}{$id}{event_system_id} ") if $db{$table}{$id}{quote_nr} == 1261 ;
|
|
if ($db{$table}{$id}{event_system_id}) { $skip_event_linked_vpu{$db{$table}{$id}{event_linked_vpu}} = 1 ; next ; } # skip as it's being used for events
|
|
|
|
# &common_debug("3. LOOP1 skip_event_linked_vpu=$skip_event_linked_vpu{$db{$table}{$id}{serial_nr}}") if $db{$table}{$id}{quote_nr} == 1261 ;
|
|
if ($skip_event_linked_vpu{$db{$table}{$id}{serial_nr}}) { next ; } # skip as it's being used for events
|
|
|
|
# &common_debug("LOOP1 rcnt=$rcnt") if $db{$table}{$id}{quote_nr} == 1261 ;
|
|
|
|
my $qnr = $db{$table}{$id}{quote_nr} ;
|
|
|
|
if ($qnr eq $db{quotes}{$i{id}}{quote_nr}) {
|
|
$cnt_cams{$qnr}++;
|
|
# &common_debug("$cnt_cams{$qnr}. $qnr eq $db{quotes}{$i{id}}{quote_nr} ") if $qnr == 1261 ;
|
|
}
|
|
|
|
# LOOP2: for (1 .. $rcnt) {
|
|
|
|
# if ($qnr eq $db{quotes}{$i{id}}{quote_nr} and $db{$table}{$id}{quote_cam_num} eq $_) {
|
|
# $cnt_sel++ ;
|
|
# # &common_debug("$cnt_sel. $qnr eq $db{quotes}{$i{id}}{quote_nr} and $db{$table}{$id}{quote_cam_num} eq $_") if $qnr == 1261 ;
|
|
# }
|
|
# }
|
|
}
|
|
|
|
$max_cams = $cnt_cams{$db{quotes}{$i{id}}{quote_nr}} if $cnt_cams{$db{quotes}{$i{id}}{quote_nr}} > $max_cams && $db{quotes}{$i{id}}{quote_nr} ;
|
|
|
|
&common_debug("$cnt_cams{$db{quotes}{$i{id}}{quote_nr}} [max_cams = $max_cams]") ;
|
|
|
|
LOOP1: foreach my $id (sort keys %{$db{$table}}) {
|
|
|
|
# &common_debug("exclude_camera_from_list [$exclude_camera_from_list{$id}] : [$table] : $id") ;
|
|
|
|
if ($db{$table}{$id}{quote_nr} and $db{$table}{$id}{quote_nr} ne $db{quotes}{$i{id}}{quote_nr}) { next ; }
|
|
|
|
if ($db{$table}{$id}{event_system_id}) { $skip_event_linked_vpu{$db{$table}{$id}{event_linked_vpu}} = 1 ; next ; } # skip as it's being used for events
|
|
if ($skip_event_linked_vpu{$db{$table}{$id}{serial_nr}}) { next ; } # skip as it's being used for events
|
|
|
|
my ($camtype,$camcnt) = split(/\-/,$db{$table}{$id}{$dispfield}) ;
|
|
$camera_system_count{$db{$table}{$id}{quote_nr}}{$camtype}++ if $db{$table}{$id}{quote_nr} and $camtype ;
|
|
$linked_vpu{$id} = $db{$table}{$id}{linked_vpu_id} ;
|
|
|
|
# &common_debug("[cam_qtys] quote_nr : [$db{$table}{$id}{quote_nr}] [$db{$table}{$id}{$dispfield}] [$camera_system_count{$db{$table}{$id}{quote_nr}}{$db{$table}{$id}{$dispfield}}]") if $db{$table}{$id}{quote_nr} ;
|
|
|
|
my $qnr = $db{$table}{$id}{quote_nr} ;
|
|
|
|
# LOOP2: for (1 .. $rcnt) {
|
|
LOOP2: for (1 .. $max_cams) {
|
|
my $field = "$_$suffix" ;
|
|
|
|
# if ($exclude_camera_from_list{$id} and $db{quotes}{$i{id}}{"camera_nr_$_$suffix"} ne $id) { next LOOP2; ; }
|
|
# if ($exclude_camera_from_list{$id} and $db{quotes}{$i{id}}{"camera_nr_$_$suffix"} ne $id) { next LOOP1; ; }
|
|
|
|
# my $quote_camera_id = $db{quotes}{$i{id}}{"camera_nr_$field"} ; if ($quote_camera_id) { my @valarr = split(/\:/,$quote_camera_id) ; $quote_camera_id = $valarr[0] ; }
|
|
|
|
# # my $abrv_cam_system = substr($db{$table}{$id}{camera_nr},0,3);
|
|
# next if $seen_cnt{$_} ;
|
|
# $seen_cnt{$_} = 1 ;
|
|
|
|
# next unless $qnr ;
|
|
my $selected = '' ;
|
|
|
|
# if ($saved_val eq $id) { $selected = 'SELECTED' ; $sel_cam_nr{$id} = $db{$table}{$id}{camera_nr}; } else { $selected = '' ; }
|
|
# if ($db{$table}{$id}{quote_nr} eq $db{quotes}{$i{id}}{quote_nr} and $quote_camera_id eq $id) {
|
|
|
|
# if ($qnr == 1261) {
|
|
# &common_debug("if ($qnr eq $db{quotes}{$i{id}}{quote_nr} and $_ <= $cnt_sel and not $done_quote_cam_num{$db{$table}{$id}{quote_cam_num}} and not $done_field{$field}) { ") ;
|
|
# }
|
|
|
|
# if ($qnr eq $db{quotes}{$i{id}}{quote_nr} and $_ <= $cnt_sel and not $done_quote_cam_num{$db{$table}{$id}{quote_cam_num}} and not $done_field{$field}) {
|
|
if ($qnr eq $db{quotes}{$i{id}}{quote_nr} and $_ <= $max_cams and not $done_quote_cam_num{$db{$table}{$id}{quote_cam_num}} and not $done_field{$field}) {
|
|
$done_quote_cam_num{$db{$table}{$id}{quote_cam_num}} = 1 ; $done_field{$field} = 1 ;
|
|
$selected = 'SELECTED' ; $sel_cam_nr{$id} = $db{$table}{$id}{camera_nr};
|
|
# &common_debug("1. quote_ref : [$db{$table}{$id}{quote_cam_num}] [$field] [$db{$table}{$id}{quote_ref}] [$_. max_cams=$max_cams]");
|
|
$camera_details{$qnr}{$_}{$field}{quote_delivery_date} = $db{$table}{$id}{quote_delivery_date} ;
|
|
$camera_details{$qnr}{$_}{$field}{quote_active_date} = $db{$table}{$id}{quote_active_date} ;
|
|
$camera_details{$qnr}{$_}{$field}{quote_ew_date_from} = $db{$table}{$id}{quote_ew_date_from} ;
|
|
$camera_details{$qnr}{$_}{$field}{quote_ew_date_to} = $db{$table}{$id}{quote_ew_date_to} ;
|
|
$camera_details{$qnr}{$_}{$field}{quote_cam_desc} = $db{$table}{$id}{quote_cam_desc} ;
|
|
$camera_details{$qnr}{$_}{$field}{quote_cam_excl} = $db{$table}{$id}{quote_cam_excl} ;
|
|
$camera_details{$qnr}{$_}{$field}{quote_cam_num} = $db{$table}{$id}{quote_cam_num} ;
|
|
$camera_details{$qnr}{$_}{$field}{quote_nr} = $qnr ;
|
|
$camera_details{$qnr}{$_}{$field}{quote_ref} = $db{$table}{$id}{quote_ref} ;
|
|
$camera_details{$qnr}{$_}{$field}{serial_nr} = $db{$table}{$id}{serial_nr} ;
|
|
$camera_details{$qnr}{$_}{$field}{camera_nr} = $db{$table}{$id}{camera_nr} ;
|
|
$camera_details{$qnr}{$_}{$field}{id} = $id ;
|
|
} elsif ($qnr and $db{$table}{$id}{quote_cam_num}) { # camera alread linked to a quote
|
|
next ;
|
|
}
|
|
|
|
# &common_debug("tab_camera_details_select_opts [$field] : [$saved_val eq $id] : $selected") ;
|
|
|
|
my $display_field = $db{$table}{$id}{$dispfield} ; my ($system,$camcnt) = split(/\-/,$display_field) ; $camcnt+=0; $display_field .= " [$camcnt] [$db{$table}{$id}{serial_nr}]" ; # $display_field =~ s/-//g ;
|
|
|
|
# my $opts = qq~<option $selected value="$id:$db{$table}{$id}{camera_nr}:$db{$table}{$id}{camera_system_id}:$db{$table}{$id}{serial_nr}:$db{$table}{$id}{date_delivered}:$camera_system{$db{$table}{$id}{camera_system_id}}:$db{$table}{$id}{item_code}:$db{$table}{$id}{date_active}">$display_field</option>~ ;
|
|
my $opts = qq~<option $selected value="$id:$db{$table}{$id}{camera_nr}:$db{$table}{$id}{camera_system_id}:$db{$table}{$id}{serial_nr}:$db{$table}{$id}{date_delivered}:$camera_system{$db{$table}{$id}{camera_system_id}}:$db{$table}{$id}{item_code}:$db{$table}{$id}{date_active}">$display_field</option>~ ;
|
|
|
|
$opts_on_edit{"camera_nr_$field"} = $opts if $selected ;
|
|
|
|
$opts{"camera_nr_$field"} .= $opts ;
|
|
|
|
# $debugcnt++ ; &common_debug("$debugcnt. camera_nr_$field [$display_field] : [$iaction eq 'edit' and $camera_details{$q_nr}{$_}{$field}{id}] : $selected : cam camera_nr=$db{$table}{$id}{camera_nr} [max_cams=$db{quotes}{$i{id}}{max_cams}]") ;
|
|
|
|
# # if ($username eq 'rory' and $iaction eq 'edit' and $db{quotes}{$i{id}}{quote_nr} and $db{quotes}{$i{id}}{max_cams} > 25) {
|
|
# if ($username eq 'rory' and $iaction eq 'edit' and $camera_details{$q_nr}{$_}{$field}{id} and $db{quotes}{$i{id}}{max_cams} > 25) {
|
|
# $opts_single{"camera_nr_$field"} = $opts if $selected ;
|
|
# $debugcnt++ ; &common_debug("$debugcnt. camera_nr_$field [$display_field] : [$username eq 'rory' and $iaction eq 'edit' and $camera_details{$q_nr}{$_}{$field}{id}] : $selected : cam camera_nr=$db{$table}{$id}{camera_nr} [max_cams=$db{quotes}{$i{id}}{max_cams}]") if $selected ;
|
|
# } else {
|
|
# $opts{"camera_nr_$field"} .= $opts ;
|
|
# $debugcnt++ ; &common_debug("NO *** $debugcnt. *** camera_nr_$field [$display_field] : [$username eq 'rory' and $iaction eq 'edit' and $camera_details{$q_nr}{$_}{$field}{id}] : $selected : cam camera_nr=$db{$table}{$id}{camera_nr} [max_cams=$db{quotes}{$i{id}}{max_cams}]") ;
|
|
# }
|
|
|
|
unless ($got{$field}) {
|
|
# $preferred_title{"item_$field"} = &common_min_print_field("item_$p_$_k") ;
|
|
$trigger_jquery .= qq~\$("#selectCamera_nr_$field\_chosen").css( "width", "96%" );
|
|
~ ; $got{$field} = 1 ;
|
|
|
|
$trigger_jquery_raw .= qq~\$("#selectCamera_nr_$field").change(function() {
|
|
dispCamDetails$field('$_') ;
|
|
});
|
|
~;
|
|
|
|
$trigger_jquery_raw .= qq~function dispCamDetails$field(f)
|
|
{
|
|
var excl = \$("#checkboxExcl_$field");
|
|
var camnr = \$("#selectCamera_nr_$field");
|
|
var itcode = '' ; // var itcode = \$("#inputItem_code_$field");
|
|
var desc = \$("#inputDescription_$field");
|
|
var qty = \$("#inputQty_$field");
|
|
var snr = \$("#inputSerial_nr_$field");
|
|
var ddate = \$("#datepickDelivery_date_$field");
|
|
var adate = \$("#datepickActive_date_$field");
|
|
|
|
dispCamDetails(excl,camnr,qty,itcode,desc,snr,ddate,adate,f) ;
|
|
}~;
|
|
}
|
|
}
|
|
}
|
|
|
|
} #------------------------------------------------------------------------------------------
|
|
|
|
sub tab_customer_select_opts {
|
|
|
|
my ($table,$dispfield,$where,$field) = @_ ;
|
|
|
|
&db_min_ro($table,'*',$where,'','') ;
|
|
|
|
foreach my $id (keys %{$db{$table}}) {
|
|
|
|
my $saved_val = $db{quotes}{$i{id}}{$field} ;
|
|
|
|
if ($saved_val) { my @valarr = split(/\:/,$saved_val) ; $saved_val = $valarr[0] ; }
|
|
|
|
if ($saved_val eq $id) { $selected = 'SELECTED' ; } else { $selected = '' ; }
|
|
|
|
$opts{$field} .= qq~<option $selected value="$id:$db{$table}{$id}{contact_name}:$db{$table}{$id}{contact_email}:$db{$table}{$id}{phone}:$db{$table}{$id}{physical_address}">$db{$table}{$id}{$dispfield}</option>~ ;
|
|
unless ($got{$field}) {
|
|
# $trigger_jquery .= qq~\$("#selectQuote_to_chosen").css( "width", "96%" );
|
|
$trigger_jquery .= qq~\$("#selectQuote_to_chosen").css( "width", "100%" );
|
|
~ ; $got{$field} = 1 ;
|
|
|
|
$trigger_jquery_raw .= qq~\$("#selectQuote_to").change(function() {
|
|
dispCustomer() ;
|
|
});
|
|
~;
|
|
|
|
$trigger_jquery_raw .= qq~function dispCustomer()
|
|
{
|
|
var custval = \$("#selectQuote_to").val();
|
|
var arrP = custval.split(":");
|
|
\$("#inputContact_name").val(arrP[1]);
|
|
\$("#inputAddress").val(arrP[4]);
|
|
\$("#inputEmail").val(arrP[2]);
|
|
\$("#inputTel").val(arrP[3]);
|
|
}~;
|
|
}
|
|
}
|
|
|
|
} #------------------------------------------------------------------------------------------
|
|
|
|
# sub tab_build_terms_headers {
|
|
|
|
# $add_form_fields .= qq~<div class='row'>~ ;
|
|
# $add_form_fields .= qq~<div class='col-md-1'><label class='control-label'> Excl.</label></div>~ ;
|
|
# $add_form_fields .= qq~<div class='col-md-6'><label class='control-label'>Description</label></div>~ ;
|
|
# $add_form_fields .= qq~</div>~ ;
|
|
|
|
# } #------------------------------------------------------------------------------------
|
|
|
|
# sub tab_build_terms_fields {
|
|
|
|
# my ($sec,$cnt,$id) = @_ ;
|
|
|
|
# my $exfield = "excl_$cnt\_$sec\s" ;
|
|
# my $inpfield = "$sec\_$cnt" ;
|
|
|
|
# unless ($db{quote_notes}{1}{$inpfield}) { $checkit{$exfield} = 1 ; }
|
|
|
|
# my $val = ($db{$table}{$id}{$inpfield} && $db{$table}{$id}{$inpfield} ne "-1") ? $db{$table}{$id}{$inpfield} : (($db{$table}{$id}{$inpfield} && $db{$table}{$id}{$inpfield} eq "-1")) ? "" : $db{quote_notes}{1}{$inpfield} ;
|
|
|
|
# $note_display_style = '' ; $note_display_plus_btn = '' ;
|
|
# # unless ($cnt==1 or $db{quote_notes}{1}{$inpfield}) {
|
|
# unless ($cnt==1 || $val) {
|
|
# $note_display_style = qq~style='display:none;'~ ;
|
|
# $trigger_jquery_raw .= qq~ \$("#btn_$cnt\_$sec").click(function () {
|
|
# \$("#$cnt\_$sec").toggle();
|
|
# \$("#btn_$cnt\_$sec").hide();
|
|
# var v = $cnt + 1 ;
|
|
# \$("#btn_"+v+"\_$sec").show();
|
|
# });~ ;
|
|
# if ($cnt>$cntnoteloop) { $note_display_butt = qq~display:none;~ ; } else { $note_display_butt = '' ; }
|
|
# $note_display_plus_btn = qq~<a id="btn_$cnt\_$sec" href="#" style="padding-left:16px;$note_display_butt"><i class="glyphicon glyphicon-plus blue"></i></a>~;
|
|
# } else { $cntnoteloop++ ; }
|
|
|
|
# $add_form_fields .= qq~<div class='row' id='$cnt\_$sec' $note_display_style>~ ;
|
|
|
|
# # $add_form_fields .= qq~<div class='row'>~ ;
|
|
# # if ($checkit{$exfield} == 1) { $checked = 'CHECKED'; } elsif (($excl_tick{$cnt}) and ($iaction eq 'add')) { $checked = 'CHECKED'; } else { $checked = ''; }
|
|
|
|
# # if ($db{$table}{$id}{$exfield} == 1) { $checked = 'CHECKED'; } else { $checked = ''; }
|
|
# $sec = "_" . $sec . "s" ;
|
|
# $col_name = "excl" . "$sec" ;
|
|
# $counter = 0 ;
|
|
# # &db_min_ro('quotes_min', "id, excl$sec", "id = $id", '', '') ;
|
|
|
|
# foreach my $col_input (split(/\;/,$db{quotes_min}{$id}{$col_name})) {
|
|
# $counter++ ;
|
|
# $saved_field{"excl"}{$sec}{$counter} = $col_input ;
|
|
# }
|
|
|
|
# if ($saved_field{"excl"}{$sec}{$cnt}) { $checked = 'CHECKED'; } else { $checked = '' ; }
|
|
|
|
# $label{$exfield} = 1 ;
|
|
# $fcol=1 ;
|
|
# $add_form_fields .= &common_min_form_checkbox_col($exfield,$checkit{$exfield},$checked) ;
|
|
# $fcol=6 ;
|
|
# $input_style{$inpfield} = qq~style='margin-bottom:4px;margin-top:-2px;'~ ; # add spaces between boxes
|
|
# $add_form_fields .= &common_min_form_input_col($inpfield,$val,'') ;
|
|
# $add_form_fields .= qq~</div>~ ;
|
|
# $add_form_fields .= qq~<div class='row'><div class="col-md-1">$note_display_plus_btn</div></div>~ ;
|
|
|
|
# } #------------------------------------------------------------------------------------
|
|
|
|
# sub tab_build_terms_fields_terms_and_conditions {
|
|
|
|
# my ($sec,$cnt,$id) = @_ ;
|
|
|
|
# my $exfield = "excl_$cnt\_$sec" ;
|
|
# my $inpfield = "$sec" ;
|
|
# my $quote_notes_field = "$sec\_$cnt" ;
|
|
|
|
# unless ($db{$table}{$id}{$inpfield}) { $checkit{$exfield} = 1 ; }
|
|
|
|
# if ($db{$table}{$id}{$inpfield}) { $selected{$db{$table}{$id}{$inpfield}} = 'SELECTED';}
|
|
|
|
# $note_display_style = '' ;
|
|
# unless ($cnt==1 or $db{$table}{$id}{$inpfield}) {
|
|
# $note_display_style = qq~style='display:none;'~ ;
|
|
# $trigger_jquery_raw .= qq~ \$("#btn_$cnt\_$sec").click(function () {
|
|
# \$("#$cnt\_$sec").toggle();
|
|
# \$("#btn_$cnt\_$sec").hide();
|
|
# var v = $cnt + 1 ;
|
|
# \$("#btn_"+v+"\_$sec").show();
|
|
# });~ ;
|
|
# if ($cnt>$cntnoteloop) { $note_display_butt = qq~display:none;~ ; } else { $note_display_butt = '' ; }
|
|
# } else { $cntnoteloop++ ; }
|
|
|
|
# $add_form_fields .= qq~<div class='row' id='$cnt\_$sec' $note_display_style>~ ;
|
|
|
|
|
|
|
|
# # $add_form_fields .= qq~<div class='row'>~ ;
|
|
# # if ($checkit{$exfield} == 1) { $checked = 'CHECKED'; } elsif (($excl_tick{$cnt}) and ($iaction eq 'add')) { $checked = 'CHECKED'; } else { $checked = ''; }
|
|
# $sec_2 = "_" . $sec ;
|
|
# $col_name = "excl" . "$sec_2" ;
|
|
# $counter = 0 ;
|
|
# # &db_min_ro('quotes_min', "id, excl$sec", "id = $id", '', '') ;
|
|
|
|
# foreach my $col_input (split(";", $db{quotes_min}{$id}{$col_name})){
|
|
# $counter++ ;
|
|
# $saved_field{"excl"}{$sec_2}{$counter} = $col_input ;
|
|
# }
|
|
|
|
# if ($saved_field{"excl"}{$sec_2}{$cnt}) { $checked = 'CHECKED'; } else { $checked = ''; }
|
|
|
|
# # if ($db{$table}{$id}{$exfield} == 1) { $checked = 'CHECKED'; } else { $checked = ''; }
|
|
|
|
# $label{$exfield} = 1 ;
|
|
# $fcol=1 ;
|
|
# $add_form_fields .= &common_min_form_checkbox_col($exfield,$checkit{$exfield},$checked) ;
|
|
# $fcol=6 ;
|
|
# $input_style{$inpfield} = qq~style='margin-bottom:4px;margin-top:-2px;'~ ; # add spaces between boxes
|
|
# $opts{$inpfield} = "" ;
|
|
# for (1 .. 5){
|
|
# $quote_notes_field = "$sec\_$_" ;
|
|
# next unless $db{quote_notes}{1}{$quote_notes_field} ;
|
|
# $opts{$inpfield} .= qq(<option value="$_" $selected{$_}>$db{quote_notes}{1}{$quote_notes_field}</option>) ;
|
|
# }
|
|
# $allow_deselect{$inpfield} = 1;
|
|
# $add_form_fields .= &common_min_form_select_col($inpfield,$db{$table}{$id}{$inpfield},'') ;
|
|
# $add_form_fields .= qq~</div>~ ;
|
|
# $add_form_fields .= qq~<div class='row'><div class="col-md-1">$note_display_plus_btn</div></div>~ ;
|
|
|
|
# } #------------------------------------------------------------------------------------
|
|
|
|
sub tab_build_qt_right {
|
|
|
|
my ($id,$tab,$ret) = @_ ;
|
|
|
|
if ($tab==1) { # Cusotmer Details
|
|
|
|
# --------------- START CUSOTMER DETAILS --------------------------------------------------------------------------------------------------------
|
|
|
|
my $sec = '_office_details' ; my ($sec_name,$sec_cnt,$sec_col) = &tab_sec_det($sec) ;
|
|
|
|
$ret_pdf_link_sec .= $sec . '+' . $sec_cnt . '|' ;
|
|
|
|
if ($ret) { return ; }
|
|
|
|
$lcol = 2 ;
|
|
|
|
$add_form_fields = '' ;
|
|
|
|
$fcol = 9 ;
|
|
$textarea_height{notes} = 80 ;
|
|
$add_form_fields .= &common_min_form_textarea('notes',$db{$table}{$id}{notes},'') ;
|
|
$add_form_fields .= qq~<div class='row'><div class='col-md-12'> </div></div>~ ;
|
|
$textarea_height{office_notes} = 80 ;
|
|
$add_form_fields .= &common_min_form_textarea('office_notes',$db{$table}{$id}{office_notes},'') ;
|
|
$add_form_fields .= qq~<div class='row'><div class='col-md-12' style="height:76px;"> </div></div>~ ;
|
|
|
|
&tab_content_box($sec_name,$sec_col);
|
|
|
|
# --------------- END CUSOTMER DETAILS ----------------------------------------------------------------------------------------------------------
|
|
}
|
|
|
|
if ($tab==4) { # Cusotmer Details
|
|
|
|
# --------------- START CUSOTMER DETAILS --------------------------------------------------------------------------------------------------------
|
|
|
|
my $sec = '_invoice_notes' ; my ($sec_name,$sec_cnt,$sec_col) = &tab_sec_det($sec) ;
|
|
|
|
$ret_pdf_link_sec .= $sec . '+' . $sec_cnt . '|' ;
|
|
|
|
if ($ret) { return ; }
|
|
|
|
$lcol = 2 ;
|
|
|
|
$add_form_fields = '' ;
|
|
|
|
$fcol = 9 ;
|
|
# $add_form_fields .= qq~<div class='row'><div class='col-md-12'> </div></div>~ ;
|
|
$add_form_fields .= &common_min_form_input('po_nr',$db{$table}{$id}{po_nr},'') ;
|
|
$add_form_fields .= &common_min_form_textarea('invoice_notes',$db{$table}{$id}{invoice_notes},'') ;
|
|
$add_form_fields .= qq~<div class='row'><div class='col-md-12' style="height:9px;"> </div></div>~ ;
|
|
|
|
&tab_content_box($sec_name,$sec_col);
|
|
|
|
# --------------- END CUSOTMER DETAILS ----------------------------------------------------------------------------------------------------------
|
|
}
|
|
|
|
} #------------------------------------------------------------------------------------
|
|
|
|
sub tab_curr_symbols {
|
|
|
|
$curr_symb{ZAR} = 'R';
|
|
$curr_symb{USD} = '$';
|
|
# $curr_symb{GBP} = '£';
|
|
$curr_symb{GBP} = 'GBP';
|
|
# $curr_symb{EUR} = '€';
|
|
$curr_symb{EUR} = 'EUR';
|
|
|
|
our $js_curr_arr = '' ;
|
|
|
|
foreach (keys %curr_symb) {
|
|
$js_curr_arr .= qq(currArr['$_'] = "$curr_symb{$_}";) ;
|
|
}
|
|
|
|
} #------------------------------------------------------------------------------------
|
|
|
|
sub tab_build_qt_col_headers {
|
|
|
|
my ($sec) = @_ ;
|
|
|
|
my $style_vat = '' ; if ($no_vat{$sec}) { $style_vat = 'style="display:none;"' ; }
|
|
|
|
$add_form_fields .= qq~<div class='row'>~ ;
|
|
$add_form_fields .= qq~<div class='col-md-1'><label class='control-label'> Excl.</label></div>~ ;
|
|
$add_form_fields .= qq~<div class='col-md-2'><label class='control-label'>Description</label></div>~ ;
|
|
$add_form_fields .= qq~<div class='col-md-1'><label class='control-label'>Qty</label></div>~ ;
|
|
$add_form_fields .= qq~<div class='col-md-1'><label class='control-label' id='lab_usd_amnt$sec'>Rate</label></div>~ ;
|
|
# $add_form_fields .= qq~<div class='col-md-1'><label class='control-label' id='lab_curr_amnt$sec'>Price [ZAR]</label></div>~ ;
|
|
# $add_form_fields .= qq~<div class='col-md-1'><label class='control-label' id='lab_curr_amnt$sec'>Price</label></div>~ ;
|
|
$add_form_fields .= qq~<div class='col-md-1'><label class='control-label'>Total</label></div>~ ;
|
|
$add_form_fields .= qq~<div class='col-md-1'><label class='control-label' $style_vat> VAT [15\%]</label></div>~ ;
|
|
$add_form_fields .= qq~</div>~ ;
|
|
|
|
%cost_desc = () ; %def_qty = () ; %def_zar = () ; %min_zar = () ; %vat_tick = () ; %excl_tick = () ;
|
|
|
|
} #----------------------------------------------------------------------------------------
|
|
|
|
sub tab_content_box {
|
|
|
|
my ($sec_name,$sec_col) = @_ ;
|
|
|
|
$fcol=9 ;
|
|
$print_box_content_rows .= &common_min_box_top('indent-left',$sec_name,$sec_col,$cam_box_icon);
|
|
# $print_box_content_rows .= qq~<div class='row'><div class="box col-md-12"><div class="box-inner"><div class="box-content">~ ;
|
|
$print_box_content_rows .= qq~$add_form_fields~;
|
|
$print_box_content_rows .= &common_min_box_foot;
|
|
|
|
} #----------------------------------------------------------------------------------------
|
|
|
|
sub tab_cnt {
|
|
|
|
our %cntxt = () ;
|
|
|
|
$cntxt{1} = 'one' ;
|
|
$cntxt{2} = 'two' ;
|
|
$cntxt{3} = 'three' ;
|
|
$cntxt{4} = 'four' ;
|
|
$cntxt{5} = 'five' ;
|
|
|
|
# $cntxt{6} = 'six' ;
|
|
# $cntxt{7} = 'seven' ;
|
|
# $cntxt{9} = 'nine' ;
|
|
# $cntxt{9} = 'nine' ;
|
|
|
|
} #----------------------------------------------------------------------------------------
|
|
|
|
sub tab_names {
|
|
|
|
my ($tab) = @_ ;
|
|
|
|
my $tabname = '' ;
|
|
|
|
if ($tab==1) { $tabname = 'Quote Details' ; }
|
|
elsif ($tab==2) { $tabname = 'Costing' ; }
|
|
elsif ($tab==3) { $tabname = 'Camera Details' ; }
|
|
elsif ($tab==4) { $tabname = 'Invoice Details' ; }
|
|
# elsif ($tab==7) { $tabname = 'Extended Warranty' ; }
|
|
# elsif ($tab==8) { $tabname = 'Rental' ; }
|
|
elsif ($tab==5) { $tabname = 'Document Uploads' ; }
|
|
|
|
return ($tabname) ;
|
|
|
|
} #------------------------------------------------------------------------------------
|
|
|
|
sub tab_hash {
|
|
|
|
# &tabs_get_default_totals ;
|
|
|
|
# for (1 .. 8) {
|
|
# my $tname = &tab_names($_) ;
|
|
|
|
# our $ret_pdf_link_sec = '' ; # _sa_out+16|_cl_del+13|_sa_in+17|_des_sa+13|
|
|
|
|
# &tab_build_qt_left('',$_,1) ;
|
|
# &tab_build_qt_right('',$_,1) ;
|
|
|
|
# $tabcnt{$tname} = $_ ;
|
|
# $tabsec{$tname} = $ret_pdf_link_sec ;
|
|
# }
|
|
|
|
} #------------------------------------------------------------------------------------
|
|
|
|
sub tab_sec_det {
|
|
|
|
my ($sec) = @_ ;
|
|
|
|
my ($sec_nam,$sec_cnt,$sec_col) ;
|
|
|
|
$sec_col = '71919b' ; # '85acb8' ;
|
|
$sec_cnt = 20 ;
|
|
$sec_nam = substr($sec,1) ;
|
|
@array = split(/\_/,$sec_nam); my @sec_nam = map ucfirst, @array;
|
|
$sec_nam = join(" ", @sec_nam) ;
|
|
|
|
if ($sec eq '_costing') {
|
|
$sec_nam = 'Camera System Costing' ;
|
|
for (1 .. 20) { $vat_tick{$_} = 1 ; }
|
|
}
|
|
|
|
return ($sec_nam,$sec_cnt,$sec_col) ;
|
|
|
|
} #------------------------------------------------------------------------------------
|
|
|
|
1;
|