X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FController%2FCustomerVendor.pm;h=03aed6a3b1f5dcc3ae5441b4d6a3666c0b567371;hb=b638b6a13dea5935637b3c38b1a3252053fa1a46;hp=4812f1b4002c3bdf5ff6ae9e9161c2d6b890cf93;hpb=984f6322b98c8d0cd3ceb9f659ed6621d180e617;p=kivitendo-erp.git diff --git a/SL/Controller/CustomerVendor.pm b/SL/Controller/CustomerVendor.pm index 4812f1b40..03aed6a3b 100644 --- a/SL/Controller/CustomerVendor.pm +++ b/SL/Controller/CustomerVendor.pm @@ -22,6 +22,7 @@ use SL::DB::TaxZone; use SL::DB::Note; use SL::DB::PaymentTerm; use SL::DB::Pricegroup; +use SL::DB::Price; use SL::DB::Contact; use SL::DB::FollowUp; use SL::DB::FollowUpLink; @@ -41,7 +42,8 @@ use Rose::Object::MakeMethods::Generic ( __PACKAGE__->run_before( sub { $::auth->assert('customer_vendor_edit'); - } + }, + except => [ qw(ajaj_autocomplete) ], ); __PACKAGE__->run_before( '_instantiate_args', @@ -68,6 +70,7 @@ __PACKAGE__->run_before( 'update', 'ajaj_get_shipto', 'ajaj_get_contact', + 'ajax_list_prices', ] ); @@ -476,7 +479,8 @@ sub action_search_contact { sub action_get_delivery { my ($self) = @_; - $::auth->assert('sales_all_edit'); + $::auth->assert('sales_all_edit') if $self->is_customer(); + $::auth->assert('purchase_all_edit') if $self->is_vendor(); my $dbh = $::form->get_standard_dbh(); @@ -585,13 +589,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 }); } @@ -655,6 +663,62 @@ sub action_test_page { $_[0]->render('customer_vendor/test_page'); } +sub action_ajax_list_prices { + my ($self, %params) = @_; + + my $report = SL::ReportGenerator->new(\%::myconfig, $::form); + my @columns = qw(partnumber description price); + my @visible = qw(partnumber description price); + my @sortable = qw(partnumber description price); + + my %column_defs = ( + partnumber => { text => $::locale->text('Part Number'), sub => sub { $_[0]->parts->partnumber } }, + description => { text => $::locale->text('Part Description'), sub => sub { $_[0]->parts->description } }, + price => { text => $::locale->text('Price'), sub => sub { $::form->format_amount(\%::myconfig, $_[0]->price, 2) }, align => 'right' }, + ); + + $::form->{sort_by} ||= 'partnumber'; + $::form->{sort_dir} //= 1; + + for my $col (@sortable) { + $column_defs{$col}{link} = $self->url_for( + action => 'ajax_list_prices', + callback => $::form->{callback}, + db => $::form->{db}, + id => $self->{cv}->id, + sort_by => $col, + sort_dir => ($::form->{sort_by} eq $col ? 1 - $::form->{sort_dir} : $::form->{sort_dir}) + ); + } + + map { $column_defs{$_}{visible} = 1 } @visible; + + my $pricegroup; + $pricegroup = $self->{cv}->pricegroup->pricegroup if $self->{cv}->pricegroup; + + $report->set_columns(%column_defs); + $report->set_column_order(@columns); + $report->set_options(allow_pdf_export => 0, allow_csv_export => 0); + $report->set_sort_indicator($::form->{sort_by}, $::form->{sort_dir}); + $report->set_export_options(@{ $params{report_generator_export_options} || [] }); + $report->set_options( + %{ $params{report_generator_options} || {} }, + output_format => 'HTML', + top_info_text => $::locale->text('Pricegroup') . ': ' . $pricegroup, + title => $::locale->text('Price List'), + ); + + my $sort_param = $::form->{sort_by} eq 'price' ? 'price' : + $::form->{sort_by} eq 'description' ? 'parts.description' : + 'parts.partnumber'; + $sort_param .= ' ' . ($::form->{sort_dir} ? 'ASC' : 'DESC'); + my $prices = SL::DB::Manager::Price->get_all(where => [ pricegroup_id => $self->{cv}->pricegroup_id ], + sort_by => $sort_param, + with_objects => 'parts'); + + $self->report_generator_list_objects(report => $report, objects => $prices, layout => 0, header => 0); +} + sub is_vendor { return $::form->{db} eq 'vendor'; }