X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=bin%2Fmozilla%2Fct.pl;h=0a62ab538eb567184c567d3fdf1d68a3abf90a97;hb=53593baa211863fbf66540cf1bcc36c8fb37257f;hp=5a579e92afbd067c2ab436572c39eeeb1d5f3fa9;hpb=9d208f8e3effbecf0427f855a1d0b4473016cc39;p=kivitendo-erp.git diff --git a/bin/mozilla/ct.pl b/bin/mozilla/ct.pl index 5a579e92a..0a62ab538 100644 --- a/bin/mozilla/ct.pl +++ b/bin/mozilla/ct.pl @@ -25,7 +25,8 @@ # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1335, USA. #====================================================================== # # customer/vendor module @@ -48,11 +49,16 @@ use POSIX qw(strftime); use SL::CT; +use SL::CTI; use SL::CVar; +use SL::Request qw(flatten); use SL::DB::Business; use SL::DB::Default; -use SL::Helper::Flash; +use SL::DB::DeliveryTerm; use SL::ReportGenerator; +use SL::Locale::String qw(t8); +use SL::MoreCommon qw(uri_encode); +use SL::ZUGFeRD; require "bin/mozilla/common.pl"; require "bin/mozilla/reportgenerator.pl"; @@ -62,36 +68,21 @@ use strict; # end of main -sub add { - $main::lxdebug->enter_sub(); - - $main::auth->assert('customer_vendor_edit'); - - my $form = $main::form; - my %myconfig = %main::myconfig; - - $form->{title} = "Add"; - $form->{callback} = "$form->{script}?action=add&db=$form->{db}" unless $form->{callback}; - - CT->populate_drop_down_boxes(\%myconfig, \%$form); - - &form_header; - &form_footer; - - $main::lxdebug->leave_sub(); +sub _zugferd_settings { + return ([ -1, $::locale->text('Use settings from client configuration') ], + @SL::ZUGFeRD::customer_settings); } sub search { $main::lxdebug->enter_sub(); - $main::auth->assert('customer_vendor_edit'); - my $form = $main::form; my $locale = $main::locale; $form->{IS_CUSTOMER} = $form->{db} eq 'customer'; - $form->get_lists("business_types" => "ALL_BUSINESS_TYPES"); + $form->get_lists("business_types" => "ALL_BUSINESS_TYPES", + "salesmen" => "ALL_SALESMEN"); $form->{SHOW_BUSINESS_TYPES} = scalar @{ $form->{ALL_BUSINESS_TYPES} } > 0; $form->{CUSTOM_VARIABLES} = CVar->get_configs('module' => 'CT'); @@ -100,9 +91,11 @@ sub search { 'include_prefix' => 'l_', 'include_value' => 'Y'); - $form->{jsscript} = 1; $form->{title} = $form->{IS_CUSTOMER} ? $locale->text('Customers') : $locale->text('Vendors'); - $form->{fokus} = 'Form.name'; + + $form->{ZUGFERD_SETTINGS} = [ _zugferd_settings() ]; + + setup_ct_search_action_bar(); $form->header(); print $form->parse_html_template('ct/search'); @@ -110,11 +103,28 @@ sub search { $main::lxdebug->leave_sub(); } +sub search_contact { + $::lxdebug->enter_sub; + + $::form->{CUSTOM_VARIABLES} = CVar->get_configs('module' => 'Contacts'); + ($::form->{CUSTOM_VARIABLES_FILTER_CODE}, + $::form->{CUSTOM_VARIABLES_INCLUSION_CODE}) = CVar->render_search_options('variables' => $::form->{CUSTOM_VARIABLES}, + 'include_prefix' => 'l.', + 'filter_prefix' => 'filter.', + 'include_value' => 'Y'); + + $::form->{title} = $::locale->text('Search contacts'); + + setup_ct_search_contact_action_bar(); + $::form->header; + print $::form->parse_html_template('ct/search_contact'); + + $::lxdebug->leave_sub; +} + sub list_names { $main::lxdebug->enter_sub(); - $main::auth->assert('customer_vendor_edit'); - my $form = $main::form; my %myconfig = %main::myconfig; my $locale = $main::locale; @@ -134,14 +144,22 @@ sub list_names { push @options, $locale->text('Orphaned'); } - push @options, $locale->text('Name') . " : $form->{name}" if $form->{name}; - push @options, $locale->text('Contact') . " : $form->{contact}" if $form->{contact}; - push @options, $locale->text('Number') . qq| : $form->{"$form->{db}number"}| if $form->{"$form->{db}number"}; - push @options, $locale->text('E-mail') . " : $form->{email}" if $form->{email}; - push @options, $locale->text('Contact person (surname)') . " : $form->{cp_name}" if $form->{cp_name}; - push @options, $locale->text('Billing/shipping address (city)') . " : $form->{addr_city}" if $form->{addr_city}; - push @options, $locale->text('Billing/shipping address (zipcode)') . " : $form->{zipcode}" if $form->{addr_zipcode}; - push @options, $locale->text('Billing/shipping address (street)') . " : $form->{street}" if $form->{addr_street}; + my @zugferd_settings_list = _zugferd_settings(); + my $zugferd_filter = $form->{create_zugferd_invoices} eq '' ? undef : $zugferd_settings_list[$form->{create_zugferd_invoices} + 1]->[1]; + + push @options, $locale->text('Name') . " : $form->{name}" if $form->{name}; + push @options, $locale->text('Contact') . " : $form->{contact}" if $form->{contact}; + push @options, $locale->text('Number') . qq| : $form->{"$form->{db}number"}| if $form->{"$form->{db}number"}; + push @options, $locale->text('E-mail') . " : $form->{email}" if $form->{email}; + push @options, $locale->text('All phone numbers') . " : $form->{all_phonenumbers}" if $form->{all_phonenumbers}; + push @options, $locale->text('Contact person (surname)') . " : $form->{cp_name}" if $form->{cp_name}; + push @options, $locale->text('Billing/shipping address (city)') . " : $form->{addr_city}" if $form->{addr_city}; + push @options, $locale->text('Billing/shipping address (zipcode)') . " : $form->{addr_zipcode}" if $form->{addr_zipcode}; + push @options, $locale->text('Billing/shipping address (street)') . " : $form->{addr_street}" if $form->{addr_street}; + push @options, $locale->text('Billing/shipping address (country)') . " : $form->{addr_country}" if $form->{addr_country}; + push @options, $locale->text('Billing/shipping address (GLN)') . " : $form->{addr_gln}" if $form->{addr_gln}; + push @options, $locale->text('Quick Search') . " : $form->{all}" if $form->{all}; + push @options, $locale->text('Factur-X/ZUGFeRD settings') . " : $zugferd_filter" if $zugferd_filter; if ($form->{business_id}) { my $business = SL::DB::Manager::Business->find_by(id => $form->{business_id}); @@ -150,11 +168,26 @@ sub list_names { push @options, $label . " : " . $business->description; } } + if ($form->{salesman_id}) { + my $salesman = SL::DB::Manager::Employee->find_by(id => $form->{salesman_id}); + if ($salesman) { + push @options, $locale->text('Salesman') . " : " . $salesman->name; + } + } + + if ( $form->{insertdatefrom} or $form->{insertdateto} ) { + push @options, $locale->text('Insert Date'); + push @options, $locale->text('From') . " " . $locale->date(\%myconfig, $form->{insertdatefrom}, 1) if $form->{insertdatefrom}; + push @options, $locale->text('Bis') . " " . $locale->date(\%myconfig, $form->{insertdateto}, 1) if $form->{insertdateto}; + }; my @columns = ( - 'id', 'name', "$form->{db}number", 'contact', 'phone', - 'fax', 'email', 'taxnumber', 'street', 'zipcode' , 'city', - 'business', 'invnumber', 'ordnumber', 'quonumber' + 'id', 'name', "$form->{db}number", 'contact', 'main_contact_person', + 'department_1', 'department_2', 'phone', 'discount', + 'fax', 'email', 'taxnumber', 'street', 'zipcode' , 'city', + 'business', 'payment', 'invnumber', 'ordnumber', 'quonumber', 'salesman', + 'country', 'gln', 'insertdate', 'pricegroup', 'contact_origin', 'invoice_mail', + 'creditlimit', 'ustid', 'commercial_court', 'delivery_order_mail' ); my @includeable_custom_variables = grep { $_->{includeable} } @{ $cvar_configs }; @@ -168,6 +201,9 @@ sub list_names { "$form->{db}number" => { 'text' => $locale->text('Number'), }, 'name' => { 'text' => $form->{IS_CUSTOMER} ? $::locale->text('Customer Name') : $::locale->text('Vendor Name'), }, 'contact' => { 'text' => $locale->text('Contact'), }, + 'main_contact_person' => { 'text' => $locale->text('Main Contact Person'), }, + 'department_1' => { 'text' => $locale->text('Department') . " 1", }, + 'department_2' => { 'text' => $locale->text('Department') . " 2", }, 'phone' => { 'text' => $locale->text('Phone'), }, 'fax' => { 'text' => $locale->text('Fax'), }, 'email' => { 'text' => $locale->text('E-mail'), }, @@ -180,6 +216,20 @@ sub list_names { 'street' => { 'text' => $locale->text('Street'), }, 'zipcode' => { 'text' => $locale->text('Zipcode'), }, 'city' => { 'text' => $locale->text('City'), }, + 'country' => { 'text' => $locale->text('Country'), }, + 'gln' => { 'text' => $locale->text('GLN'), }, + 'salesman' => { 'text' => $locale->text('Salesman'), }, + 'discount' => { 'text' => $locale->text('Discount'), }, + 'payment' => { 'text' => $locale->text('Payment Terms'), }, + 'insertdate' => { 'text' => $locale->text('Insert Date'), }, + 'pricegroup' => { 'text' => $locale->text('Pricegroup'), }, + 'invoice_mail' => { 'text' => $locale->text('Email of the invoice recipient'), }, + 'delivery_order_mail' => { 'text' => $locale->text('Email of the delivery order recipient'), }, + 'contact_origin' => { 'text' => $locale->text('Origin of personal data'), }, + 'creditlimit' => { 'text' => $locale->text('Credit Limit'), }, + 'ustid' => { 'text' => $locale->text('VAT ID'), }, + 'commercial_court' => { 'text' => $locale->text('Commercial court'), }, + create_zugferd_invoices => { text => $locale->text('Factur-X/ZUGFeRD settings'), }, %column_defs_cvars, ); @@ -187,9 +237,13 @@ sub list_names { my @hidden_variables = ( qw( db status obsolete name contact email cp_name addr_street addr_zipcode - addr_city business_id + addr_city addr_country addr_gln business_id salesman_id insertdateto insertdatefrom all + all_phonenumbers ), "$form->{db}number", map({ "cvar_$_->{name}" } @searchable_custom_variables), + map({'cvar_'. $_->{name} .'_from'} grep({$_->{type} eq 'date'} @searchable_custom_variables)), + map({'cvar_'. $_->{name} .'_to'} grep({$_->{type} eq 'date'} @searchable_custom_variables)), + map({'cvar_'. $_->{name} .'_qtyop'} grep({$_->{type} eq 'number'} @searchable_custom_variables)), map({ "l_$_" } @columns), ); @@ -247,535 +301,211 @@ sub list_names { if ($ref->{id} ne $previous_id) { $previous_id = $ref->{id}; + $ref->{discount} = $form->format_amount(\%myconfig, $ref->{discount} * 100.0, 2); + $ref->{creditlimit} = $form->format_amount(\%myconfig, $ref->{creditlimit}, 2); map { $row->{$_}->{data} = $ref->{$_} } @columns; - $row->{name}->{link} = build_std_url('action=edit', 'id=' . E($ref->{id}), 'callback', @hidden_nondefault); + $row->{name}->{link} = build_std_url('script=controller.pl', 'action=CustomerVendor/edit', 'id=' . E($ref->{id}), 'callback', @hidden_nondefault); $row->{email}->{link} = 'mailto:' . E($ref->{email}); } my $base_url = build_std_url("script=$ref->{module}.pl", 'action=edit', 'id=' . E($ref->{invid}), 'callback', @hidden_nondefault); + if ($::instance_conf->get_feature_experimental_order) { + if ('oe' eq $ref->{module}) { + $base_url = build_std_url("script=controller.pl", 'action=Order/edit', 'id=' . E($ref->{invid}), 'callback', @hidden_nondefault); + } + } + $row->{invnumber}->{link} = $base_url; $row->{ordnumber}->{link} = $base_url . "&type=${ordertype}"; $row->{quonumber}->{link} = $base_url . "&type=${quotationtype}"; my $column = $ref->{formtype} eq 'invoice' ? 'invnumber' : $ref->{formtype} eq 'order' ? 'ordnumber' : 'quonumber'; $row->{$column}->{data} = $ref->{$column}; - $report->add_data($row); - } - - $report->generate_with_headers(); - - $main::lxdebug->leave_sub(); -} - -sub edit { - $main::lxdebug->enter_sub(); - - $main::auth->assert('customer_vendor_edit'); - - my $form = $main::form; - my %myconfig = %main::myconfig; - - # show history button - $form->{javascript} = qq||; - #/show hhistory button - - CT->get_tuple(\%myconfig, \%$form); - CT->populate_drop_down_boxes(\%myconfig, \%$form); - - $form->{title} = "Edit"; - - # format discount - $form->{discount} *= 100; - # format uri - $form->{homepage} = 'http://' . $form->{homepage} unless ((!$form->{homepage}) || $form->{homepage} =~ m|^https?://|); - - &form_header; - &form_footer; - - $main::lxdebug->leave_sub(); -} - -sub _shipto_label { - my $s = shift(@_); - join('; ', grep { $_ } map { $s->{"shipto$_"} } qw(name department_1 street city)) || ' ' -} - -sub _contacts_label { - join ", ", grep { $_ } $_[0]->{cp_name}, $_[0]->{cp_givenname}; -} - -sub form_header { - $main::lxdebug->enter_sub(); - - $main::auth->assert('customer_vendor_edit'); - - my $form = $main::form; - my %myconfig = %main::myconfig; - my $locale = $main::locale; - - $form->get_lists(taxzones => "ALL_TAXZONES", - currencies => "ALL_CURRENCIES"); - $form->get_pricegroup(\%myconfig, { all => 1 }); - - $form->get_lists(customers => { key => "ALL_SALESMAN_CUSTOMERS", business_is_salesman => 1 }) if $::lx_office_conf{features}->{vertreter}; - $form->{ALL_EMPLOYEES} = SL::DB::Manager::Employee->get_all(query => [ or => [ id => $::form->{FU_created_for_user}, deleted => 0 ] ]); - $form->{ALL_SALESMEN} = SL::DB::Manager::Employee->get_all(query => [ or => [ id => $::form->{salesman_id}, deleted => 0 ] ]); - $form->{USER} = SL::DB::Manager::Employee->current; - - $form->{taxincluded} = ($form->{taxincluded}) ? "checked" : ""; - $form->{is_customer} = $form->{db} eq 'customer'; - $form->{shipto_label} = \&_shipto_label; - $form->{contacts_label} = \&_contacts_label; - $form->{taxzone_id} = 0 if !$form->{id}; - $form->{jsscript} = 1; - $form->{fokus} = "ct.greeting"; - $form->{SHIPTO_ALL} = [ +{ shipto_id => '0', shiptoname => $::locale->text('All') }, @{ $form->{SHIPTO} } ]; - - $form->{title} = $form->{title_save} - || $locale->text("$form->{title} " . ucfirst $form->{db}) . ($form->{title} eq "Edit" ? " $form->{name}" : ''); - - CT->query_titles_and_greetings(\%myconfig, \%$form); - map { $form->{"MB_$_"} = [ map +{ id => $_, description => $_ }, @{ $form->{$_} } ] } qw(COMPANY_GREETINGS); - - $form->{NOTES} ||= [ ]; - - if (!$form->{'language_id'}) { - my $l_id = SL::DB::Default->get->{'language_id'}; - if ($l_id) { - $form->{'default_language_id'} = $l_id; + if (my $number = SL::CTI->sanitize_number(number => $ref->{phone})) { + $row->{phone}->{link} = SL::CTI->call_link(number => $number); + $row->{phone}->{link_class} = 'cti_call_action'; } - } - - if (!$form->{'id'}) { - $form->{'currency'} = $form->get_default_currency(\%myconfig); - } else { - $form->{currency} = $form->{curr}; - } - - $form->{CUSTOM_VARIABLES} = CVar->get_custom_variables('module' => 'CT', 'trans_id' => $form->{id}); - CVar->render_inputs('variables' => $form->{CUSTOM_VARIABLES}) if (scalar @{ $form->{CUSTOM_VARIABLES} }); - - $form->header; - print $form->parse_html_template('ct/form_header'); - - $main::lxdebug->leave_sub(); -} - -sub form_footer { - $main::lxdebug->enter_sub(); - - $main::auth->assert('customer_vendor_edit'); - - my $form = $main::form; - - print $form->parse_html_template('ct/form_footer', { is_orphaned => $form->{status} eq 'orphaned', - is_customer => $form->{db} eq 'customer' }); - $main::lxdebug->leave_sub(); -} - -sub _do_save { - $main::auth->assert('customer_vendor_edit & ' . - '(general_ledger | invoice_edit | vendor_invoice_edit | ' . - ' request_quotation_edit | sales_quotation_edit | sales_order_edit | purchase_order_edit)'); - - $::form->isblank("name", $::locale->text("Name missing!")); - - if ($::form->{new_salesman_id} && $::lx_office_conf{features}->{vertreter}) { - $::form->{salesman_id} = $::form->{new_salesman_id}; - delete $::form->{new_salesman_id}; - } - - my $res = $::form->{db} eq 'customer' ? CT->save_customer(\%::myconfig, $::form) : CT->save_vendor(\%::myconfig, $::form); - - if (3 == $res) { - if ($::form->{"db"} eq "customer") { - $::form->error($::locale->text('This customer number is already in use.')); - } else { - $::form->error($::locale->text('This vendor number is already in use.')); - } + $report->add_data($row); } -} - -sub add_transaction { - $main::lxdebug->enter_sub(); - - $main::auth->assert('customer_vendor_edit & ' . - '(general_ledger | invoice_edit | vendor_invoice_edit | ' . - ' request_quotation_edit | sales_quotation_edit | sales_order_edit | purchase_order_edit)'); - - my $form = $main::form; - my %myconfig = %main::myconfig; - my $locale = $main::locale; -# # saving the history -# if(!exists $form->{addition}) { -# $form->{addition} = "ADD TRANSACTION"; -# $form->save_history; -# } -# # /saving the history - - _do_save(); - - $form->{callback} = $form->escape($form->{callback}, 1); - my $name = $form->escape("$form->{name}", 1); - - $form->{callback} = - "$form->{script}?action=add&vc=$form->{db}&$form->{db}_id=$form->{id}&$form->{db}=$name&type=$form->{type}&callback=$form->{callback}"; - $form->redirect; + setup_ct_list_names_action_bar(); + $report->generate_with_headers(); $main::lxdebug->leave_sub(); } -sub save_and_ap_transaction { - $main::lxdebug->enter_sub(); - - $main::auth->assert('customer_vendor_edit & general_ledger'); - - my $form = $main::form; - my %myconfig = %main::myconfig; +sub list_contacts { + $::lxdebug->enter_sub; - $form->{script} = "ap.pl"; - # saving the history - if(!exists $form->{addition}) { - $form->{snumbers} = qq|invnumber_| . $form->{invnumber}; - $form->{addition} = "SAVED"; - $form->save_history; - } - # /saving the history - &add_transaction; - $main::lxdebug->leave_sub(); -} + $::form->{sortdir} = 1 unless defined $::form->{sortdir}; -sub save_and_ar_transaction { - $main::lxdebug->enter_sub(); + my @contacts = CT->search_contacts( + search_term => $::form->{search_term}, + filter => $::form->{filter}, + ); - $main::auth->assert('customer_vendor_edit & general_ledger'); + my $cvar_configs = CVar->get_configs('module' => 'Contacts'); - my $form = $main::form; - my %myconfig = %main::myconfig; - - $form->{script} = "ar.pl"; - # saving the history - if(!exists $form->{addition}) { - $form->{snumbers} = qq|invnumber_| . $form->{invnumber}; - $form->{addition} = "SAVED"; - $form->save_history; - } - # /saving the history - &add_transaction; - $main::lxdebug->leave_sub(); -} + my @columns = qw( + cp_id vcname vcnumber cp_name cp_givenname cp_street cp_zipcode cp_city cp_phone1 cp_phone2 cp_privatphone + cp_mobile1 cp_mobile2 cp_fax cp_email cp_privatemail cp_abteilung cp_position cp_birthday cp_gender + ); -sub save_and_invoice { - $main::lxdebug->enter_sub(); + my @includeable_custom_variables = grep { $_->{includeable} } @{ $cvar_configs }; + my @searchable_custom_variables = grep { $_->{searchable} } @{ $cvar_configs }; + my %column_defs_cvars = map { +"cvar_$_->{name}" => { 'text' => $_->{description} } } @includeable_custom_variables; - my $form = $main::form; - my %myconfig = %main::myconfig; + push @columns, map { "cvar_$_->{name}" } @includeable_custom_variables; - if ($form->{db} eq 'customer') { - $main::auth->assert('customer_vendor_edit & invoice_edit'); + my @visible_columns; + if ($::form->{l}) { + @visible_columns = grep { $::form->{l}{$_} } @columns; + push @visible_columns, qw(cp_phone1 cp_phone2) if $::form->{l}{cp_phone}; + push @visible_columns, qw(cp_mobile1 cp_mobile2) if $::form->{l}{cp_mobile}; } else { - $main::auth->assert('customer_vendor_edit & vendor_invoice_edit'); + @visible_columns = qw(vcname vcnumber cp_name cp_givenname cp_phone1 cp_phone2 cp_mobile1 cp_email); } - $form->{script} = ($form->{db} eq 'customer') ? "is.pl" : "ir.pl"; - $form->{type} = "invoice"; - # saving the history - if(!exists $form->{addition}) { - $form->{snumbers} = qq|invnumber_| . $form->{invnumber}; - $form->{addition} = "SAVED"; - $form->save_history; - } - # /saving the history - &add_transaction; - $main::lxdebug->leave_sub(); -} - -sub save_and_rfq { - $main::lxdebug->enter_sub(); + my %column_defs = ( + 'cp_id' => { 'text' => $::locale->text('ID'), }, + 'vcname' => { 'text' => $::locale->text('Customer/Vendor'), }, + 'vcnumber' => { 'text' => $::locale->text('Customer/Vendor Number'), }, + 'cp_name' => { 'text' => $::locale->text('Name'), }, + 'cp_givenname' => { 'text' => $::locale->text('Given Name'), }, + 'cp_street' => { 'text' => $::locale->text('Street'), }, + 'cp_zipcode' => { 'text' => $::locale->text('Zipcode'), }, + 'cp_city' => { 'text' => $::locale->text('City'), }, + 'cp_phone1' => { 'text' => $::locale->text('Phone1'), }, + 'cp_phone2' => { 'text' => $::locale->text('Phone2'), }, + 'cp_mobile1' => { 'text' => $::locale->text('Mobile1'), }, + 'cp_mobile2' => { 'text' => $::locale->text('Mobile2'), }, + 'cp_email' => { 'text' => $::locale->text('E-mail'), }, + 'cp_abteilung' => { 'text' => $::locale->text('Department'), }, + 'cp_position' => { 'text' => $::locale->text('Function/position'), }, + 'cp_birthday' => { 'text' => $::locale->text('Birthday'), }, + 'cp_gender' => { 'text' => $::locale->text('Gender'), }, + 'cp_fax' => { 'text' => $::locale->text('Fax'), }, + 'cp_privatphone' => { 'text' => $::locale->text('Private Phone') }, + 'cp_privatemail' => { 'text' => $::locale->text('Private E-mail') }, + %column_defs_cvars, + ); - $main::auth->assert('customer_vendor_edit & request_quotation_edit'); + map { $column_defs{$_}->{visible} = 1 } @visible_columns; - my $form = $main::form; - my %myconfig = %main::myconfig; + my @hidden_variables = (qw(search_term filter l)); + my $hide_vars = { map { $_ => $::form->{$_} } @hidden_variables }; + my @hidden_nondefault = grep({ $::form->{$_} } @hidden_variables); + my $callback = build_std_url('action=list_contacts', join '&', map { E($_->[0]) . '=' . E($_->[1]) } @{ flatten($hide_vars) }); + $::form->{callback} = "$callback&sort=" . E($::form->{sort}); - $form->{script} = "oe.pl"; - $form->{type} = "request_quotation"; - # saving the history - if(!exists $form->{addition}) { - $form->{snumbers} = qq|ordnumber_| . $form->{ordnumber}; - $form->{addition} = "SAVED"; - $form->save_history; - } - # /saving the history - &add_transaction; - $main::lxdebug->leave_sub(); -} + map { $column_defs{$_}->{link} = "${callback}&sort=${_}&sortdir=" . ($::form->{sort} eq $_ ? 1 - $::form->{sortdir} : $::form->{sortdir}) } @columns; -sub save_and_quotation { - $main::lxdebug->enter_sub(); + $::form->{title} = $::locale->text('Contacts'); - $main::auth->assert('customer_vendor_edit & sales_quotation_edit'); + my $report = SL::ReportGenerator->new(\%::myconfig, $::form); - my $form = $main::form; - my %myconfig = %main::myconfig; - - $form->{script} = "oe.pl"; - $form->{type} = "sales_quotation"; - # saving the history - if(!exists $form->{addition}) { - $form->{snumbers} = qq|ordnumber_| . $form->{ordnumber}; - $form->{addition} = "SAVED"; - $form->save_history; - } - # /saving the history - &add_transaction; - $main::lxdebug->leave_sub(); -} - -sub save_and_order { - $main::lxdebug->enter_sub(); - - my $form = $main::form; - my %myconfig = %main::myconfig; - - if ($form->{db} eq 'customer') { - $main::auth->assert('customer_vendor_edit & sales_order_edit'); - } else { - $main::auth->assert('customer_vendor_edit & purchase_order_edit'); - } - - $form->{script} = "oe.pl"; - $form->{type} = - ($form->{db} eq 'customer') ? "sales_order" : "purchase_order"; - # saving the history - if(!exists $form->{addition}) { - $form->{snumbers} = qq|ordnumber_| . $form->{ordnumber}; - $form->{addition} = "SAVED"; - $form->save_history; + my @options; + push @options, $::locale->text('Search term') . ': ' . $::form->{search_term} if $::form->{search_term}; + for (qw(cp_name cp_givenname cp_title cp_email cp_abteilung cp_project)) { + push @options, $column_defs{$_}{text} . ': ' . $::form->{filter}{$_} if $::form->{filter}{$_}; } - # /saving the history - &add_transaction; - $main::lxdebug->leave_sub(); -} - -sub save_and_close { - $main::lxdebug->enter_sub(); - - $main::auth->assert('customer_vendor_edit'); - - my $form = $main::form; - my %myconfig = %main::myconfig; - my $locale = $main::locale; - - my $msg = ucfirst $form->{db}; - $msg .= " saved!"; - - _do_save(); - - # saving the history - if(!exists $form->{addition}) { - $form->{snumbers} = ($form->{"db"} eq "customer" ? qq|customernumber_| . $form->{customernumber} : qq|vendornumber_| . $form->{vendornumber}); - $form->{addition} = "SAVED"; - $form->save_history; + if ($::form->{filter}{status}) { + push @options, $::locale->text('Status') . ': ' . ( + $::form->{filter}{status} =~ /active/ ? $::locale->text('Active') : + $::form->{filter}{status} =~ /orphaned/ ? $::locale->text('Orphaned') : + $::form->{filter}{status} =~ /all/ ? $::locale->text('All') : '' + ); } - # /saving the history - $form->redirect($locale->text($msg)); - $main::lxdebug->leave_sub(); -} -sub save { - $main::lxdebug->enter_sub(); + $report->set_options('top_info_text' => join("\n", @options), + 'output_format' => 'HTML', + 'title' => $::form->{title}, + 'attachment_basename' => $::locale->text('contact_list') . strftime('_%Y%m%d', localtime time), + ); + $report->set_options_from_form; - $main::auth->assert('customer_vendor_edit'); + $report->set_columns(%column_defs); + $report->set_column_order(@columns); - my $form = $main::form; - my %myconfig = %main::myconfig; - my $locale = $main::locale; + $report->set_export_options('list_contacts', @hidden_variables); - my $msg = ucfirst $form->{db}; - $msg .= " saved!"; + $report->set_sort_indicator($::form->{sort}, $::form->{sortdir}); - _do_save(); + CVar->add_custom_variables_to_report('module' => 'Contacts', + 'trans_id_field' => 'cp_id', + 'configs' => $cvar_configs, + 'column_defs' => \%column_defs, + 'data' => \@contacts); - # saving the history - if(!exists $form->{addition}) { - $form->{snumbers} = ($form->{"db"} eq "customer" ? qq|customernumber_| . $form->{customernumber} : qq|vendornumber_| . $form->{vendornumber}); - $form->{addition} = "SAVED"; - $form->save_history; - } - # /saving the history - &edit; - $main::lxdebug->leave_sub(); - ::end_of_request(); -} + foreach my $ref (@contacts) { + my $row = { map { $_ => { 'data' => $ref->{$_} } } @columns }; -sub delete { - $main::lxdebug->enter_sub(); + $row->{vcname}->{link} = build_std_url('script=controller.pl', 'action=CustomerVendor/edit', 'id=' . E($ref->{vcid}), 'db=' . E($ref->{db}), 'callback', @hidden_nondefault); + $row->{vcnumber}->{link} = $row->{vcname}->{link}; - $main::auth->assert('customer_vendor_edit'); + for (qw(cp_email cp_privatemail)) { + $row->{$_}->{link} = 'mailto:' . E($ref->{$_}) if $ref->{$_}; + } - my $form = $main::form; - my %myconfig = %main::myconfig; - my $locale = $main::locale; + for (qw(cp_phone1 cp_phone2 cp_mobile1)) { + next unless my $number = SL::CTI->sanitize_number(number => $ref->{$_}); - CT->delete(\%myconfig, \%$form); + $row->{$_}->{link} = SL::CTI->call_link(number => $number); + $row->{$_}->{link_class} = 'cti_call_action'; + } - my $msg = ucfirst $form->{db}; - $msg .= " deleted!"; - # saving the history - if(!exists $form->{addition}) { - $form->{snumbers} = ($form->{"db"} eq "customer" ? qq|customernumber_| . $form->{customernumber} : qq|vendornumber_| . $form->{vendornumber}); - $form->{addition} = "DELETED"; - $form->save_history; + $report->add_data($row); } - # /saving the history - $form->redirect($locale->text($msg)); - - $main::lxdebug->leave_sub(); -} - -sub display { - $main::lxdebug->enter_sub(); - - $main::auth->assert('customer_vendor_edit'); - - my $form = $main::form; - - &form_header(); - &form_footer(); - - $main::lxdebug->leave_sub(); -} - -sub update { - $main::lxdebug->enter_sub(); - - $main::auth->assert('customer_vendor_edit'); - - my $form = $main::form; - - &display(); - $main::lxdebug->leave_sub(); -} - -sub get_contact { - $main::lxdebug->enter_sub(); - - $main::auth->assert('customer_vendor_edit'); - - CT->populate_drop_down_boxes(\%::myconfig, $::form); - CT->query_titles_and_greetings(\%::myconfig, $::form); - CT->get_contact(\%::myconfig, $::form) if $::form->{cp_id}; - - $::form->{contacts_label} = \&_contacts_label; - - print $::form->ajax_response_header(), $::form->parse_html_template('ct/_contact'); - - $main::lxdebug->leave_sub(); -} - -sub get_shipto { - $main::lxdebug->enter_sub(); - - $main::auth->assert('customer_vendor_edit'); - - CT->populate_drop_down_boxes(\%::myconfig, $::form); - CT->get_shipto(\%::myconfig, $::form) if $::form->{shipto_id}; - - $::form->{shipto_label} = \&_shipto_label; - - print $::form->ajax_response_header(), $::form->parse_html_template('ct/_shipto'); - - $main::lxdebug->leave_sub(); -} - -sub get_delivery { - $::lxdebug->enter_sub; - $::auth->assert('customer_vendor_edit'); - $::auth->assert('sales_all_edit'); - - CT->get_delivery(\%::myconfig, $::form ); - - print $::form->ajax_response_header, - $::form->parse_html_template('ct/get_delivery', { - is_customer => $::form->{db} eq 'customer', - }); + $report->generate_with_headers(); $::lxdebug->leave_sub; } -sub delete_shipto { - $main::lxdebug->enter_sub(); - - $main::auth->assert('customer_vendor_edit'); - - my $form = $main::form; - my %myconfig = %main::myconfig; - - CT->get_shipto(\%myconfig, \%$form); +sub setup_ct_search_action_bar { + my %params = @_; - unless ($form->{shiptoused}) { - CT->delete_shipto($form->{shipto_id}); - @$form{ grep /^shipto/, keys %$form } = undef; + for my $bar ($::request->layout->get('actionbar')) { + $bar->add( + action => [ + t8('Search'), + submit => [ '#form', { action => 'list_names' } ], + accesskey => 'enter', + ], + ); } - - edit(); - - $main::lxdebug->leave_sub(); } -sub delete_contact { - $::lxdebug->enter_sub; - $::auth->assert('customer_vendor_edit'); - - if (!$::form->{cp_id}) { - flash('error', $::locale->text('No contact selected to delete')); - } else { - - CT->get_contact(\%::myconfig, $::form); +sub setup_ct_list_names_action_bar { + my %params = @_; - my $contact = SL::DB::Manager::Contact->find_by(cp_id => $::form->{cp_id}); - - if ($contact->used) { - $contact->detach; - flash('info', $::locale->text('Contact is in use and was flagged invalid.')); - } else { - $contact->delete; - flash('info', $::locale->text('Contact deleted.')); - } - delete $::form->{$_} for grep /^cp_/, keys %$::form; + for my $bar ($::request->layout->get('actionbar')) { + $bar->add( + action => [ + t8('Add'), + submit => [ '#new_form', { action => 'CustomerVendor/add' } ], + accesskey => 'enter', + ], + ); } - - edit(); - - $::lxdebug->leave_sub; } -sub ajax_autocomplete { - $main::lxdebug->enter_sub(); - - my $form = $main::form; - my %myconfig = %main::myconfig; - - $form->{column} = 'name' unless $form->{column} =~ /^name$/; - $form->{vc} = 'customer' unless $form->{vc} =~ /^customer|vendor$/; - $form->{db} = $form->{vc}; # CT expects this - $form->{$form->{column}} = $form->{q} || ''; - $form->{limit} = ($form->{limit} * 1) || 10; - $form->{searchitems} ||= ''; - - CT->search(\%myconfig, $form); +sub setup_ct_search_contact_action_bar { + my %params = @_; - print $form->ajax_response_header(), - $form->parse_html_template('ct/ajax_autocomplete'); - - $main::lxdebug->leave_sub(); + for my $bar ($::request->layout->get('actionbar')) { + $bar->add( + action => [ + t8('Search'), + submit => [ '#form', { action => 'list_contacts' } ], + accesskey => 'enter', + ], + ); + } } sub continue { call_sub($main::form->{nextsub}); }