X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FController%2FCustomerVendor.pm;h=c8fd5fd9c2e482a50cf8dfab94a961637bde6328;hb=bc89ebf428c7bde2205b31c5c9abb66879e673e4;hp=b2e32e6fa57105316b507aa4c6d61551e7fab906;hpb=96670fe82a38116ac10592a6ccbd34800f8ad9f8;p=kivitendo-erp.git diff --git a/SL/Controller/CustomerVendor.pm b/SL/Controller/CustomerVendor.pm index b2e32e6fa..c8fd5fd9c 100644 --- a/SL/Controller/CustomerVendor.pm +++ b/SL/Controller/CustomerVendor.pm @@ -10,6 +10,8 @@ use SL::DBUtils; use SL::Helper::Flash; use SL::Locale::String; use SL::Controller::Helper::GetModels; +use SL::Controller::Helper::ReportGenerator; +use SL::Controller::Helper::ParseFilter; use SL::DB::Customer; use SL::DB::Vendor; @@ -25,6 +27,11 @@ use SL::DB::FollowUp; use SL::DB::FollowUpLink; use SL::DB::History; use SL::DB::Currency; +use SL::DB::Invoice; +use SL::DB::PurchaseInvoice; +use SL::DB::Order; + +use Data::Dumper; use Rose::Object::MakeMethods::Generic ( 'scalar --get_set_init' => [ qw(customer_models vendor_models) ], @@ -34,7 +41,8 @@ use Rose::Object::MakeMethods::Generic ( __PACKAGE__->run_before( sub { $::auth->assert('customer_vendor_edit'); - } + }, + except => [ qw(ajaj_autocomplete) ], ); __PACKAGE__->run_before( '_instantiate_args', @@ -101,6 +109,7 @@ sub action_add { $self->_pre_render(); $self->{cv}->assign_attributes(hourly_rate => $::instance_conf->get_customer_hourly_rate) if $self->{cv}->is_customer; + $self->render( 'customer_vendor/form', title => ($self->is_vendor() ? $::locale->text('Add Vendor') : $::locale->text('Add Customer')), @@ -263,17 +272,24 @@ sub action_save_and_close { sub _transaction { my ($self, $script) = @_; - $::auth->assert('general_ledger | invoice_edit | vendor_invoice_edit | ' . + $::auth->assert('gl_transactions | ap_transactions | ar_transactions'. + '| invoice_edit | vendor_invoice_edit | ' . ' request_quotation_edit | sales_quotation_edit | sales_order_edit | purchase_order_edit'); $self->_save(); my $name = $::form->escape($self->{cv}->name, 1); my $db = $self->is_vendor() ? 'vendor' : 'customer'; + my $action = 'add'; + + if ($::instance_conf->get_feature_experimental_order && 'oe.pl' eq $script) { + $script = 'controller.pl'; + $action = 'Order/' . $action; + } my $url = $self->url_for( controller => $script, - action => 'add', + action => $action, vc => $db, $db .'_id' => $self->{cv}->id, $db => $name, @@ -287,7 +303,7 @@ sub _transaction { sub action_save_and_ar_transaction { my ($self) = @_; - $main::auth->assert('general_ledger'); + $main::auth->assert('ar_transactions'); $self->_transaction('ar.pl'); } @@ -295,7 +311,7 @@ sub action_save_and_ar_transaction { sub action_save_and_ap_transaction { my ($self) = @_; - $main::auth->assert('general_ledger'); + $main::auth->assert('ap_transactions'); $self->_transaction('ap.pl'); } @@ -458,7 +474,6 @@ sub action_search_contact { print $::form->redirect_header($url); } - sub action_get_delivery { my ($self) = @_; @@ -571,13 +586,17 @@ sub action_ajaj_get_contact { } qw( id gender abteilung title position givenname name email phone1 phone2 fax mobile1 mobile2 - satphone satfax project street zipcode city privatphone privatemail birthday + satphone satfax project street zipcode city privatphone privatemail birthday main ) ) }; $data->{contact_cvars} = $self->_prepare_cvar_configs_for_ajaj($self->{contact}->cvars_by_config); + # avoid two or more main_cp + my $has_main_cp = grep { $_->cp_main == 1 } @{ $self->{cv}->contacts }; + $data->{contact}->{disable_cp_main} = 1 if ($has_main_cp && !$data->{contact}->{cp_main}); + $self->render(\SL::JSON::to_json($data), { type => 'json', process => 0 }); } @@ -638,7 +657,6 @@ sub action_ajaj_autocomplete { } sub action_test_page { - $::request->{layout}->add_javascripts('autocomplete_customer.js'); $_[0]->render('customer_vendor/test_page'); } @@ -900,11 +918,14 @@ sub _pre_render { $self->{all_salesmen} = SL::DB::Manager::Employee->get_all(query => [ or => [ id => $self->{cv}->salesman_id, deleted => 0 ] ]); } - $self->{all_payment_terms} = SL::DB::Manager::PaymentTerm->get_all(); + $self->{all_payment_terms} = SL::DB::Manager::PaymentTerm->get_all_sorted(where => [ or => [ id => $self->{cv}->payment_id, + obsolete => 0 ] ]); $self->{all_delivery_terms} = SL::DB::Manager::DeliveryTerm->get_all(); - $self->{all_pricegroups} = SL::DB::Manager::Pricegroup->get_all(); + if ($self->{cv}->is_customer) { + $self->{all_pricegroups} = SL::DB::Manager::Pricegroup->get_all_sorted(query => [ or => [ id => $self->{cv}->pricegroup_id, obsolete => 0 ] ]); + } $query = 'SELECT DISTINCT(cp_abteilung) AS department @@ -932,10 +953,117 @@ sub _pre_render { with_objects => ['follow_up'], ); + if ( $self->is_vendor()) { + $self->{open_items} = SL::DB::Manager::PurchaseInvoice->get_all_count( + query => [ + vendor_id => $self->{cv}->id, + paid => {lt_sql => 'amount'}, + ], + ); + } else { + $self->{open_items} = SL::DB::Manager::Invoice->get_all_count( + query => [ + customer_id => $self->{cv}->id, + paid => {lt_sql => 'amount'}, + ], + ); + } + + if ( $self->is_vendor() ) { + $self->{open_orders} = SL::DB::Manager::Order->get_all_count( + query => [ + vendor_id => $self->{cv}->id, + closed => 'F', + ], + ); + } else { + $self->{open_orders} = SL::DB::Manager::Order->get_all_count( + query => [ + customer_id => $self->{cv}->id, + closed => 'F', + ], + ); + } $self->{template_args} ||= {}; - $::request->{layout}->add_javascripts('autocomplete_customer.js'); $::request->{layout}->add_javascripts('kivi.CustomerVendor.js'); + $::request->{layout}->add_javascripts('kivi.File.js'); + $::request->{layout}->add_javascripts('kivi.CustomerVendorTurnover.js'); + + $self->_setup_form_action_bar; +} + +sub _setup_form_action_bar { + my ($self) = @_; + + for my $bar ($::request->layout->get('actionbar')) { + $bar->add( + combobox => [ + action => [ + t8('Save'), + submit => [ '#form', { action => "CustomerVendor/save" } ], + checks => [ 'check_taxzone_and_ustid' ], + accesskey => 'enter', + ], + action => [ + t8('Save and Close'), + submit => [ '#form', { action => "CustomerVendor/save_and_close" } ], + checks => [ 'check_taxzone_and_ustid' ], + ], + ], # end of combobox "Save" + + combobox => [ + action => [ t8('Workflow') ], + (action => [ + t8('Save and AP Transaction'), + submit => [ '#form', { action => "CustomerVendor/save_and_ap_transaction" } ], + checks => [ 'check_taxzone_and_ustid' ], + ]) x !!$self->is_vendor, + (action => [ + t8('Save and AR Transaction'), + submit => [ '#form', { action => "CustomerVendor/save_and_ar_transaction" } ], + checks => [ 'check_taxzone_and_ustid' ], + ]) x !$self->is_vendor, + action => [ + t8('Save and Invoice'), + submit => [ '#form', { action => "CustomerVendor/save_and_invoice" } ], + checks => [ 'check_taxzone_and_ustid' ], + ], + action => [ + t8('Save and Order'), + submit => [ '#form', { action => "CustomerVendor/save_and_order" } ], + checks => [ 'check_taxzone_and_ustid' ], + ], + (action => [ + t8('Save and RFQ'), + submit => [ '#form', { action => "CustomerVendor/save_and_rfq" } ], + checks => [ 'check_taxzone_and_ustid' ], + ]) x !!$self->is_vendor, + (action => [ + t8('Save and Quotation'), + submit => [ '#form', { action => "CustomerVendor/save_and_quotation" } ], + checks => [ 'check_taxzone_and_ustid' ], + ]) x !$self->is_vendor, + ], # end of combobox "Workflow" + + action => [ + t8('Delete'), + submit => [ '#form', { action => "CustomerVendor/delete" } ], + confirm => t8('Do you really want to delete this object?'), + disabled => !$self->{cv}->id ? t8('This object has not been saved yet.') + : !$self->is_orphaned ? t8('This object has already been used.') + : undef, + ], + + 'separator', + + action => [ + t8('History'), + call => [ 'kivi.CustomerVendor.showHistoryWindow', $self->{cv}->id ], + disabled => !$self->{cv}->id ? t8('This object has not been saved yet.') : undef, + ], + ); + } } sub _prepare_cvar_configs_for_ajaj {