#!/usr/bin/perl BEGIN { use lib '/usr/home/cfg' ; require push_inc ; } require cfg ; #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- use CGI::Carp qw(fatalsToBrowser); use CGI; use Mail::Sendmail; use Fcntl qw(:flock); use File::Copy; use File::Basename; use Excel::Writer::XLSX; &today; #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- @ARGV = split(/\\*\&/, $ENV{'QUERY_STRING'}); $action = $ARGV[0] ; our ($q) = CGI -> new() ; our $iaction = $q -> param('iaction') || $action ; our $isaved = $q -> param('isaved') || '' ; # our $debug = 1 ; # our $testing = 1 ; # our $double_box_layout = 1 ; # box on the right layout included #-------- page opts -------------------------------------------------------------------------------------------------------------------------------------------------- # our $allow_add_override = 0 ; if ($user_type eq 'ops_users') { $allow_add_override = 1 ; } &page_opts ; #--------------------------------------------------------------------------------------------------------------------------------------------------------------------- print "Content-type: text/html\n\n"; our $open_new_tab = qq~target="_blank"~ ; # opens booking page in a new tab our $srchscr = 0 ; our $fnsortcol = 0 ; our $redirtype = 'list' ; # $redirtype = 'search' ; &common_min_action; exit; #------------------------------------------------------------------------------------------ sub validate { # called from common_min_action my $exists = '' ; &db_min_ro($table,'*',"name='$i{name}'",'','') ; foreach my $id (keys %{$db{$table}}) { if (lc $db{$table}{$id}{name} eq lc $i{name}) { $exists = 1 ; } } if ($exists) { $alert = &common_min_alert('warning',"'$i{name}' AS A CUSTOMER NAME ALREADY EXISTS!",'ok') ; %col_name = (); # &add_screen; # &screen1; &common_min_add_screen; &common_min_screen1; } } #------------------------------------------------------------------------------------------ sub insert { &add_db_fields ; $i{last_edited_by} = $userid ; $i{user_id} = $userid ; $i{id} = &db_min_get_max($table,'id') ; $i{date_time} = "$now_ccyy_mm_dd $now_hour:$now_min:$now_sec" ; $i{last_updated} = "$now_ccyy_mm_dd $now_hour:$now_min:$now_sec" ; # &common_upload_files("trackusers/$i{id}") ; # &process_upload_ifields; # $ignore{country_id} = 1 ; &default_values ; &db_min_insert($table) ; } #------------------------------------------------------------------------------------------ sub update { unless ($i{id}) { $error = qq(NO ID) ; return ; } &edit_db_fields ; if ($userid) { $i{last_edited_by} = $userid ; } unless ($i{active}) { $i{active} = '0' ; } $i{last_updated} = "$now_ccyy_mm_dd $now_hour:$now_min:$now_sec" ; # &common_upload_files("trackusers/$i{id}") ; # &process_upload_ifields; # $ignore{country_id} = 1 ; &default_values ; &db_min_upd($table,"id='$i{id}'") ; } #------------------------------------------------------------------------------------------ sub default_values { $i{country_id} = '0' unless $i{country_id} ; $i{region_id} = '0' unless $i{region_id} ; $i{city_id} = '0' unless $i{city_id} ; } #------------------------------------------------------------------------------------------ sub report_ifields { &db_open_ro ; our $db_ignore_open_close = 1 ; # do one open and one close instead of repeating it &load_search_vars ; $db_ignore_open_close = 0 ; # do one open and one close instead of repeating it &db_close_conn ; if ($i{customer_id}) { push @report_sql, "(`id` = '$i{customer_id}')" ; push @report_results, "customer = $customer_name{$i{customer_id}}" ; $xlsreportname .= '-' . $i{customer_id} ; our $acc_id_sql_where = "`customer_id`='$i{customer_id}'" } # if ($i{company_id}) { # push @report_sql, "(`company_id` = '$i{company_id}')" ; # push @report_results, "company = $company_name{$i{company_id}}" ; # $xlsreportname .= '-' . $i{company_id} ; # } # if ($i{asset_insurer_id}) { # push @report_sql, "(`asset_insurer_id` = '$i{asset_insurer_id}')" ; # push @report_results, "asset insurer = $asset_insurer_name{$i{asset_insurer_id}}" ; # $xlsreportname .= '-' . $i{asset_insurer_id} ; # } if ($i{active}) { my $active = '' ; if ($i{active} eq 'active') { $active = '1' ; } elsif ($i{active} eq 'inactive') { $active = '0' ; } push @report_sql, "(`active` = '$active')" ; push @report_results, "active = $i{active}" ; } $report_results_msg = uc join(', ', @report_results) ; unless ($report_results_msg) { $error = qq(ENTER AT LEAST ONE SEARCH PARAMETER); &report_screen; } else { $isaved = qq(SELECT WHERE $report_results_msg) ; } } #------------------------------------------------------------------------------------------ sub load_search_vars { # &db_min_ro('customer','id,name','','','') ; # foreach my $id (keys %{$db{customer}}) { $customer_name{$id} = $db{customer}{$id}{name} ; } # &db_min_ro('company','id,name','','','') ; # foreach my $id (keys %{$db{company}}) { $company_name{$id} = $db{company}{$id}{name} ; } &db_min_ro('users','id,name','','','') ; foreach my $id (keys %{$db{users}}) { $user{$id} = $db{users}{$id}{name} ; } our $done_load_search_vars = 1 ; } #------------------------------------------------------------------------------------------ # sub process_upload_ifields { # foreach (keys %uploads_file) { $i{$_} = $uploads_file{$_} ; $ignore{$_} = '' ; } # } #------------------------------------------------------------------------------------------ sub list_screen { my %seen_customer = () ; my $delete_button = "" ; my $srch_where_sql = join(' AND ', @report_sql) ; my $add_sql_where = '' ; unless ($done_load_search_vars) { &load_search_vars ; } # our @sql_col_display = ("id","customer_nr","name","contact_email","vat_nr","physical_address","postal_address","date_time","last_edited_by","user_id","active","last_updated","phone","company_email") ; our @sql_col_display = ("id","name","contact_email","vat_nr","physical_address","postal_address","active","events","analytics","phone","company_email","last_updated","last_edited_by") ; if ($iaction eq 'report') { push @sql_col_display, "company_id" ; } push @sql_col_display, "" ; &report_xlsx_export_header("Customers$xlsreportname",'customers') ; &db_open_ro ; our $db_ignore_open_close = 1 ; # do one open and one close instead of repeating it &db_min_ro('event_quotes','id, quote_to','','','') ; foreach my $id (keys %{$db{'event_quotes'}}) { next if $seen_customer{$db{'event_quotes'}{$id}{quote_to}} ; $seen_customer{$db{'event_quotes'}{$id}{quote_to}} = 1 ; } &db_min_ro('quotes','id, quote_to','','','') ; foreach my $id (keys %{$db{'quotes'}}) { next if $seen_customer{$db{'quotes'}{$id}{quote_to}} ; $seen_customer{$db{'quotes'}{$id}{quote_to}} = 1 ; } &load_list_vars("$srch_where_sql$add_sql_where") ; $db_ignore_open_close = 0 ; # do one open and one close instead of repeating it &db_close_conn ; $xlsxrow = 4 ; our @months = ("","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec") ; foreach my $id (sort {$b <=> $a} keys %{$db{$table}}) { # if (($i{active} == 1) and ($customer_id_in_use_for_devices{$id} < 1)) { next ; } # Active with devices # if (($i{active} == 2) and ($customer_id_in_use_for_devices{$id} > 0)) { next ; } # Active without devices $print_tbody .= qq() ; $xlsxcol=0; foreach (@sql_col_display) { unless ($_) { next ; } # blank for the buttons column my $val = $db{$table}{$id}{$_} ; my $align = '' ; my $val_xlsx = '' ; # if ($_ eq 'last_edited_by') { } # if ($_ eq 'device_types') { # $val = '' ; # foreach $dev_nam (keys %{$cnt_dev_typ{$id}}) { # $val .= "$dev_nam [$cnt_dev_typ{$id}{$dev_nam}], "; # } # $val = substr($val,0,-2) ; # } # my $format = '' ; if ($_ eq 'imei') { if (length($db{$table}{$id}{imei})==5){ $format = 'imei' ; } } # &report_xlsx_export_process_cell('','',$val) ; # ------------------------------------------------------------------------- HTML AFTER$xlscol++; # my $green_tick = qq~2~ ; # my $orange_tick = qq~1~ ; # my $red_tick = qq~0~ ; my $center = qq~ class="dt-center"~ ; if ($_ eq 'active' || $_ eq 'events' || $_ eq 'analytics') { $val_xlsx = ($val == 1) ? "Yes" : "No" ; if ($val == 1) { $val = &set_tick('green', '') ; } else { $val = &set_tick('red', '') ; } $align = $center ; } elsif ($_ eq 'last_edited_by') { $val = $user{$db{$table}{$id}{$_}} ; } elsif ($_ eq 'last_updated') { $val = &common_min_date_as_string($val) ; } $val_xlsx = $val unless $val_xlsx ; &xlsxcreator_write_xlsx($ws,$xlsxrow,$xlsxcol,$val_xlsx,$format1) ; $xlsxcol++ ; # if ($_ eq 'monitor_after_hours_snapshots') { if ($val == 1) { $val = &set_tick('green', '') ; } else { $val = &set_tick('red', '') ; } $align = $center ; } # if ($_ eq 'facial_recognition') { if ($val == 1) { $val = &set_tick('green', '') ; } else { $val = &set_tick('red', '') ; } $align = $center ; } # if ($_ eq 'object_recognition') { # if ($val == 1) { # if ($protocol_action{$id}) { # my $tt = qq~ data-toggle="tooltip" data-placement="left" data-title="$protocol_action{$id}"~ ; # $val = &set_tick('green', $tt) ; # } # else # { # my $tt = qq~ data-toggle="tooltip" data-placement="left" data-title="Needs protocol actions set!"~ ; # $val = &set_tick('orange', $tt) ; # } # } # else # { # $val = &set_tick('red', '') ; # } # $align = $center ; # } # $protocol_action{$acc_id} # data-toggle="tooltip" data-placement="right" data-title="Set to 'Yes' to enable Object Recognition for this client!" $print_tbody .= qq($val) ; } my $delete_butt = '' ; my $edit_butt = '' ; if ($useropts{boss}{$username} or $useropts{super}{$username}) { $edit_butt = qq() ; if ($useropts{super}{$username}) { $delete_butt = qq() if not $seen_customer{$id}; $delete_butt = qq() if $seen_customer{$id}; } } # &common_debug("$id : $customer_id_in_use_for_devices{$id}"); if ($customer_id_in_use_for_devices{$id}) { $delete_butt = '' ; } $print_tbody .= qq~ $edit_butt $delete_butt~ ; $xlsxrow++ ; } $worksheet{$ws}->set_column("A:L",15) ; &report_xlsx_export_footer('L',15,'customers') ; $fnsortcol = 8 ; # order by ol devices col $print_more_boxes .= qq(
) ; &common_min_extra_crumb("search-$lcpage\s","Search Screen") ; } #------------------------------------------------------------------------------------------ sub set_tick { my ($color,$tooltip) = @_ ; $tick{green} = qq~2~ ; $tick{orange} = qq~1~ ; $tick{red} = qq~0~ ; return ($tick{$color}) ; } #------------------------------------------------------------------------------------------ sub load_list_vars { my ($where) = @_ ; # &db_min_ro('insurer','*','','','') ; # foreach my $id (keys %{$db{insurer}}) { $insurer{$id} = $db{insurer}{$id}{name} ; } # &db_min_ro('device_type','*','','','') ; # foreach my $id (keys %{$db{device_type}}) { # $is_mdvr{$id} = $db{device_type}{$id}{mdvr} ; # $device_name{$id} = $db{device_type}{$id}{name} ; # } # &db_min_ro('risk_profile_types','*','','','') ; # foreach my $id (keys %{$db{risk_profile_types}}) { $risk_profile_type{$id} = $db{risk_profile_types}{$id}{name} ; } # customer hash # &db_min_ro('protocol_actions','*',$acc_id_sql_where,'','') ; # foreach my $id (keys %{$db{protocol_actions}}) { # my $acc_id = $db{protocol_actions}{$id}{customer_id} ; # my $max = $db{protocol_actions}{$id}{max} ; # my $show_max = '' ; if ($max) { $show_max = " > $max" ; } # $protocol_action{$acc_id} .= "$risk_profile_type{$db{protocol_actions}{$id}{risk_profile_type_id}}$show_max
" ; # } # &db_min_ro('device','id,customer_id,online,type_id',$acc_id_sql_where,'','') ; # foreach my $id (keys %{$db{device}}) { # $customer_id_in_use_for_devices{$db{device}{$id}{customer_id}}++ ; # if ($db{device}{$id}{online}==1) { # $customer_online_devices{$db{device}{$id}{customer_id}}++ ; # } # my $dev_nam = $device_name{$db{device}{$id}{type_id}} ; # $cnt_dev_typ{$db{device}{$id}{customer_id}}{$dev_nam}++ ; # } &db_min_ro($table,'*',$where,'name','') ; } #------------------------------------------------------------------------------------------ sub thead { &common_min_thead ; } #------------------------------------------------------------------------------- sub add_db_fields { &common_customer_hidden_db_fields ; $hidden{id} = 2 ; # $hidden{user_id} = 2 ; # $required{customer_nr} = 2 ; if ($iaction eq 'add'){ &build_boxes_add ; } # can't be in add_screen, only works if here } #------------------------------------------------------------------------------------------ sub edit_db_fields { &common_customer_hidden_db_fields ; $ignore{date_time} = 1 ; $ignore{user_id} = 1 ; # $ignore{customer_nr} = 1 ; $ignore{last_updated} = 1 ; # if ($user{privilege}{$username} eq 'super') { # $ignore{facial_recognition} = '' ; # enable the switch for super users # $checkbox{facial_recognition} = 1 ; # $info_glyph_tooltip{facial_recognition} = qq() ; # $ignore{object_recognition} = '' ; # enable the switch for super users # $checkbox{object_recognition} = 1 ; # $info_glyph_tooltip{object_recognition} = qq() ; # } $hidden{id} = 1 ; # 1 = bypass for db update } #------------------------------------------------------------------------------------------ sub select_opts { my ($id) = @_ ; # &common_min_select_opts('asset_insurer_id','insurer','name',$db{$table}{$id}{asset_insurer_id}) ; # &common_min_select_opts('git_insurer_id','insurer','name',$db{$table}{$id}{git_insurer_id}) ; # &common_min_select_opts('insure_as_id','insurer','name',$db{$table}{$id}{insure_as_id}) ; # &common_min_select_opts('company_id','company','name',$db{$table}{$id}{company_id},1) ; # $db{$table}{$id}{country_id} = '242' unless $db{$table}{$id}{country_id} ; # $db{$table}{$id}{region_id} = 1 ; # &db_min_ro('regions','1,country_id',"`id`='$db{$table}{$id}{region_id}'",'','') if $db{$table}{$id}{region_id} ; # $db{$table}{$id}{country_id} = $db{regions}{1}{country_id} ; # my $regions_sql = ($db{regions}{1}{country_id}) ? "`country_id`='$db{regions}{1}{country_id}'" : "" ; my $regions_sql = ($db{$table}{$id}{country_id}) ? "`country_id`='$db{$table}{$id}{country_id}'" : "" ; $regions_sql = &add_extra_region_filter($regions_sql) ; &common_min_select_opts('region_id','regions','name',$db{$table}{$id}{region_id},'','code',"$regions_sql") ; my $other_region = qq~~ ; if ($db{$table}{$id}{country_id} && !$opts{region_id}) { $other_region = qq~id='13'~ ; &common_min_select_opts('region_id','regions','name',$db{$table}{$id}{region_id},'','code',"name='Other'") ; } # &common_min_select_opts('country_id','countries','name',$db{regions}{$db{$table}{$id}{region_id}}{country_id}) ; &common_min_select_opts('country_id','countries','name',$db{$table}{$id}{country_id}) ; my $city_sql ; $city_sql .= qq~country_id='$db{$table}{$id}{country_id}'~ if $db{$table}{$id}{country_id} ; $city_sql .= qq~ AND ~ if $db{$table}{$id}{country_id} && $db{$table}{$id}{region_id} ; $city_sql .= qq~region_id='$db{$table}{$id}{region_id}'~ if $db{$table}{$id}{region_id} ; $city_sql = qq~($city_sql) OR region_$other_region~ if $other_region ; # $other_region = "region_$other_region" if $other_region ; &common_min_select_opts('city_id','cities','name',$db{$table}{$id}{city_id},'','',"$city_sql") ; $trigger_jquery_raw .= qq~ //gallery delete \$('.thumbnails').on('click', '.gallery-delete', function (e) { e.preventDefault(); // alert(\$(this).parents('.thumbnail').attr('id')); var imgid = \$(this).parents('.thumbnail').attr('id') ; var thumb = \$(this).parents('.thumbnail'); BootstrapDialog.confirm({ title: 'Confirm Delete', message: 'Are you sure you want to delete it?', type: BootstrapDialog.TYPE_WARNING, callback: function(result) { if(result) { var url = "$useropts{scripts}/get/get_db_delete_upload_common.pl?$i{id}&trackusers/$i{id}&customer&"+imgid ; // alert(url); \$.get(url); thumb.fadeOut(); location.reload(); } } }); }); //gallery edit \$('.thumbnails').on('click', '.gallery-edit', function (e) { e.preventDefault(); //get image id alert('Delete logo and re-upload!'); //alert(\$(this).parents('.thumbnail').attr('id')); //dlgMdl('/scripts/dialog/uploads.pl?$i{id}&photo&'+\$(this).parents('.thumbnail').attr('id'),'Photo Uploads','','medium-dialog'); }); \$("#customers-form [id^='select']").chosen({ allow_single_deselect:true }); const mapCityToRegion = {}; const mapCityToCountry = {}; const mapRegionToCountry = {}; const \$countrySelect = \$("#selectCountry_id") ; const \$regionSelect = \$("#selectRegion_id") ; const \$citySelect = \$("#selectCity_id") ; let countryId = \$countrySelect.val() ; let regionId = \$regionSelect.val() ; let cityId = \$citySelect.val() ; const updateChosen = \$el => \$el.trigger("chosen:updated"); const clearSelect = (\$el, includeBlank = true) => { \$el.empty(); if (includeBlank) \$el.append(``); updateChosen(\$el) ; }; const fetchJSON = async url => { try { const res = await fetch(url); if (!res.ok) throw new Error(`Request failed: \${res.status}`); return await res.json(); } catch (err) { console.error("Fetch error:", err); return []; } }; // const populateSelect = (\$el, dataList, labelFn) => { // let lastId = null ; // for (const data of dataList) { // \$el.append(``); // lastId = data.id; // } // updateChosen(\$el) ; // return { count: dataList.length, lastId } ; // } ; const populateSelect = (\$field, json_list, getLabel, defaultSelected = () => "") => { let isSelected ; // Determine how to handle selected logic if (typeof defaultSelected === "function") { isSelected = defaultSelected ; } else if (Array.isArray(defaultSelected)) { isSelected = data => defaultSelected.includes(data.id) ? "selected" : "" ; } else { isSelected = data => data.id == defaultSelected ? "selected" : "" ; } // Auto-select the only item if none explicitly selected const autoSelectOnly = json_list.length === 1 && typeof defaultSelected === "string" && defaultSelected === "" ; let lastId = null ; json_list.forEach(data => { const selected = autoSelectOnly || isSelected(data) ? "selected" : "" ; \$field.append(``) ; lastId = data.id; }); updateChosen(\$field) ; // return json_list.length ; return { count: json_list.length, lastId } ; }; // --- Country Change --- \$countrySelect.on("change", async function () { countryId = \$(this).val() ; regionId = \$regionSelect.val() ; cityId = \$citySelect.val() ; clearSelect(\$regionSelect) ; const regionUrl = `$useropts{scripts}/get/get_regions_from_country.pl?country_id=\${countryId}`; const regionData = await fetchJSON(regionUrl); // const { count: regionCount, lastId: region_est } = populateSelect( const { count: regionCount, lastId: region_est } = populateSelect( \$regionSelect, regionData, // ({ name, code }) => `\${name} [\${code}]` r => r.code ? `\${r.name} [\${r.code}]` : r.name , "" ) ; let selectedRegionId = 0 ; if (regionCount === 1) { selectedRegionId = region_est ; // \$regionSelect.val(region_est).trigger("chosen:updated") ; } else if (regionCount === 0) { selectedRegionId = 13 ; \$regionSelect.append(``).trigger("chosen:updated") ; // updateChosen(\$regionSelect) ; } // if (!\$regionSelect.val()) { // \$regionSelect.val(regionId).trigger("chosen:updated") ; // } // Load cities based on region (if available) or country clearSelect(\$citySelect); const script = `get_cities_from_region.pl?country_id=\${countryId}®ion_id=\${selectedRegionId}` ; const citiesUrl = `$useropts{scripts}/get/\${script}` ; const cityData = await fetchJSON(citiesUrl) ; const { count: cityCount, lastId: city_est } = populateSelect( \$citySelect, cityData, d => d.city_name ?? d.name, "" ) ; // if (cityCount === 1) { // \$citySelect.val(cityId).trigger("chosen:updated") ; // } if (!countryId) { console.log("2 countryId : "+countryId) ; if (!\$regionSelect.val()) \$regionSelect.val(regionId).trigger("chosen:updated") ; if (!\$citySelect.val()) \$citySelect.val(cityId).trigger("chosen:updated") ; } }); // --- Region Change --- \$regionSelect.on("change", async function () { console.log("1 : regionId : "+regionId) ; regionId = \$(this).val(); console.log("2 : regionId : "+regionId) ; countryId = \$countrySelect.val(); cityId = \$citySelect.val() ; clearSelect(\$citySelect); if (!regionId) return; const url = `$useropts{scripts}/get/get_cities_from_region.pl?country_id=\${countryId}®ion_id=\${regionId}`; const cityData = await fetchJSON(url); const { count: cityCount, lastId: city_est } = populateSelect(\$citySelect, cityData, d => d.city_name,""); // if (cityCount === 1) { // \$citySelect.val(cityId).trigger("chosen:updated"); // } if (!mapRegionToCountry[regionId]) { const lookupUrl = `$useropts{scripts}/get/get_country_from_region.pl?country_id=\${countryId}®ion_id=\${regionId}`; const regionMeta = await fetchJSON(lookupUrl); const { country_id } = regionMeta[0] ?? {}; if (country_id) { mapRegionToCountry[regionId] = country_id; \$countrySelect.val(country_id).trigger("chosen:updated"); } } else { \$countrySelect.val(mapRegionToCountry[regionId]).trigger("chosen:updated"); } if (!regionId && !\$citySelect.val()) { \$citySelect.val(cityId).trigger("chosen:updated") ; } }); // --- City Change --- \$citySelect.on("change", async function () { cityId = \$(this).val(); if (!cityId) return; regionId = mapCityToRegion[cityId]; countryId = mapCityToCountry[cityId]; if (typeof regionId === 'undefined') regionId = "" ; if (typeof countryId === 'undefined') countryId = "" ; if (regionId && regionId != \$regionSelect.val()) { \$regionSelect.val(regionId).trigger("chosen:updated"); } if (countryId && countryId != \$countrySelect.val()) { \$countrySelect.val(countryId).trigger("chosen:updated"); } if (!regionId || !countryId) { const lookupUrl = `$useropts{scripts}/get/get_country_and_region_from_city.pl?city_id=\${cityId}®ion_id=\${regionId}&country_id=\${countryId}`; const cityMeta = await fetchJSON(lookupUrl); const { region_id, country_id } = cityMeta[0] ?? {}; if (region_id) { mapCityToRegion[cityId] = region_id; \$regionSelect.val(region_id).trigger("chosen:updated"); } if (country_id) { mapCityToCountry[cityId] = country_id; \$countrySelect.val(country_id).trigger("chosen:updated"); } } if (!\$regionSelect.val()) { \$regionSelect.val("13").trigger("chosen:updated"); mapCityToCountry[cityId] = 13; } }); ~ ; } #------------------------------------------------------------------------------- sub add_screen { # called from common_add_screen # if ($user_type eq 'track_users') { # $db{$table}{''}{customer_id} = $client_id ; # set for input box # } &select_opts('') ; # &build_boxes_add ; # can't do this here } #------------------------------------------------------------------------------------------ sub build_boxes_add { &sort_fields ; $print_box_content_rows .= &common_min_forms_start($table) ; $print_box_content_rows .= qq(
) ; $print_box_content_rows .= &common_min_box_top('user',"  Customer",$box_main_bg) ; # $print_box_content_rows .= &common_add_form($table,'',3,9,1,1) ; $print_box_content_rows .= &common_min_add_form($table,'save',3,9,1,1) ; $print_box_content_rows .= &common_min_box_foot ; $print_box_content_rows .= qq(
) ; &build_boxes_right; $print_box_content_rows .= qq(
) ; $print_box_content_rows .= &common_min_forms_end('',$table,'save') ; } #---------------------------------------------------------------------------------------- sub edit_screen { our ($lcol,$fcol) = &common_min_columns($label_col,$field_col) ; # $selected{warranty_period}{$db{$table}{$id}{warranty_period}} = 'SELECTED'; &sort_fields ; &select_opts($i{id}) ; # &build_boxes_edit($i{id}) ; } #------------------------------------------------------------------------------------------ sub sort_fields { %sort_field = () ; $sort_field{1} = 'active' ; $sort_field{2} = 'events' ; $sort_field{3} = 'analytics' ; $sort_field{4} = 'name' ; $sort_field{5} = 'phone' ; $sort_field{6} = 'company_email' ; $sort_field{7} = 'contact_name' ; $sort_field{8} = 'contact_email' ; $sort_field{9} = 'physical_address' ; $sort_field{10} = 'postal_address' ; $sort_field{11} = 'country_id' ; $sort_field{12} = 'region_id' ; $sort_field{13} = 'city_id' ; $sort_field{14} = 'vat_nr' ; $select{country_id} = 1 ; $select{region_id} = 1 ; $select{city_id} = 1 ; $trigger_jquery_raw .= qq~ ~ ; } #------------------------------------------------------------------------------------------ sub build_boxes_edit { my ($id) = @_ ; $print_box_content_rows .= &common_min_forms_start($table) ; $print_box_content_rows .= qq(
) ; $print_box_content_rows .= &common_min_box_top('user',"  Customer : $db{$table}{$id}{id}",$box_main_bg) ; # $print_box_content_rows .= &common_edit_form($id,$table,'',3,9,1,1) ; $print_box_content_rows .= &common_min_edit_form($i{id},$table,'update',3,9,1,1) ; $print_box_content_rows .= &common_min_box_foot ; $print_box_content_rows .= qq(
) ; &build_boxes_right($id); $print_box_content_rows .= qq(
) ; $print_box_content_rows .= &common_min_forms_end($id,$table,'update',$skip) ; } #---------------------------------------------------------------------------------------- sub build_boxes_right { my ($id) = @_ ; my $box_icon = '' ; $print_box_content_rows .= &common_min_box_top('picture','Logo Upload',$box_right_bg,$box_icon) ; $logo_uploads = &get_uploads($id,'logo') ; $print_box_content_rows .= qq(
 
); if ($logo_uploads) { $print_box_content_rows .= qq(
$logo_uploads
); } else { $print_box_content_rows .= qq(

Upload file from PC.

); } $print_box_content_rows .= qq(
); $print_box_content_rows .= &common_min_box_foot ; } #---------------------------------------------------------------------------------------- sub get_uploads { my ($id,$type) = @_ ; unless ($id and $type) { return() ; } my $gallery = '' ; my %gallery = () ; my $field = $type ; if ($db{$table}{$id}{$field}){ $tooltip = qq(data-toggle="tooltip" data-placement="top" title="$type" data-original-title="$type") ; $gallery{$type} .= qq(
  • $type
  • ) ; } if ($gallery{$type}) { $gallery = '' ; } return ($gallery) ; } #------------------------------------------------------------------------------------------ sub page_opts { our $glyphicon = 'list' ; our $lcpage = 'customer' ; &common_page_name ; our $table = 'customers' ; $page_title = 'Customer' ; &common_min_add_extras ; } #------------------------------------------------------------------------------- sub report_screen { our $lcol = 3 ; our $fcol = 5 ; $print_box_content_rows .= &common_min_forms_start('report') ; &db_open_ro ; our $db_ignore_open_close = 1 ; # do one open and one close instead of repeating it &common_min_select_opts('customer_id','customers','name',$i{customer_id},'') ; # &common_min_select_opts('company_id','company','name',$i{company_id},'') ; # &common_min_select_opts('asset_insurer_id','insurer','name',$i{asset_insurer_id},'') ; $db_ignore_open_close = 0 ; # do one open and one close instead of repeating it &db_close_conn ; $print_box_content_rows .= &common_min_form_select('customer_id',$i{customer_id}) ; # $print_box_content_rows .= &common_min_form_select('company_id',$i{company_id}) ; # $print_box_content_rows .= &common_min_form_select('asset_insurer_id',$i{asset_insurer_id}) ; $print_box_content_rows .= &common_min_form_input('active',$i{active}) ; $opts{active} = qq( ) ; $print_box_content_rows .= &common_min_form_select('active','','',1,'') ; $print_box_content_rows .= &common_min_forms_end('','','report') ; &common_min_search_screen ; } #------------------------------------------------------------------------------- # sub send_email { # my ($email_subject,$email_msg) = @_ ; # unless ($email_msg) { return ; } # my %mail = () ; # my $to = 'duvan@kre8it.co.za' ; # my $cc = 'rory@kre8it.co.za' ; # %mail = ( # smtp => 'localhost', # From => 'TruckAssist IT ', # To => $to, # Cc => $cc, # Subject => $email_subject # ); # $mail{body} = <