X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FController%2FPriceSource.pm;h=c0c113cd0416f218f0498baf4dc18993185e7cac;hb=cff6e70a0659626d7af0b1c3cb14a18245fc7001;hp=10763ce5524d31872e3f74862427060a45cfabc0;hpb=9716e08ebc2431c0aaf3410e016a06d25f7218ba;p=kivitendo-erp.git diff --git a/SL/Controller/PriceSource.pm b/SL/Controller/PriceSource.pm index 10763ce55..c0c113cd0 100644 --- a/SL/Controller/PriceSource.pm +++ b/SL/Controller/PriceSource.pm @@ -5,14 +5,13 @@ use strict; use parent qw(SL::Controller::Base); use List::MoreUtils qw(any uniq apply); -use SL::ClientJS; use SL::Locale::String qw(t8); use SL::PriceSource; use Rose::Object::MakeMethods::Generic ( scalar => [ qw(record_item) ], - 'scalar --get_set_init' => [ qw(js record) ], + 'scalar --get_set_init' => [ qw(record) ], ); __PACKAGE__->run_before('check_auth'); @@ -53,7 +52,7 @@ sub render_price_dialog { # $self->js->show('#dialog_flash_error'); # } - $self->js->render($self); + $self->js->render; } @@ -62,11 +61,13 @@ sub render_price_dialog { # sub check_auth { - $::auth->assert('edit_prices'); -} - -sub init_js { - SL::ClientJS->new + if ($::form->{vc} eq 'customer') { + $::auth->assert('sales_edit_prices'); + } elsif ($::form->{vc} eq 'vendor') { + $::auth->assert('purchase_edit_prices'); + } else { + $::auth->assert('no_such_right'); + } } sub init_record { @@ -82,6 +83,8 @@ sub _make_record_item { sales_quotation => 'OrderItem', request_quotation => 'OrderItem', invoice => 'InvoiceItem', + invoice_for_advance_payment => 'InvoiceItem', + final_invoice => 'InvoiceItem', purchase_invoice => 'InvoiceItem', credit_note => 'InvoiceItem', purchase_delivery_order => 'DeliveryOrderItem', @@ -92,25 +95,44 @@ sub _make_record_item { $class = 'SL::DB::' . $class; + my %translated_methods = ( + 'SL::DB::OrderItem' => { + id => 'parts_id', + orderitems_id => 'id', + }, + 'SL::DB::DeliveryOrderItem' => { + id => 'parts_id', + delivery_order_items_id => 'id', + }, + 'SL::DB::InvoiceItem' => { + id => 'parts_id', + invoice_id => 'id', + }, + ); + eval "require $class"; my $obj = $::form->{"orderitems_id_$row"} ? $class->meta->convention_manager->auto_manager_class_name->find_by(id => $::form->{"orderitems_id_$row"}) : $class->new; - for my $method (apply { s/_$row$// } grep { /_$row$/ } keys %$::form) { + for my $key (grep { /_$row$/ } keys %$::form) { + my $method = $key; + $method =~ s/_$row$//; + $method = $translated_methods{$class}{$method} // $method; + my $value = $::form->{$key}; if ($obj->meta->column($method)) { if ($obj->meta->column($method)->isa('Rose::DB::Object::Metadata::Column::Date')) { - $obj->${\"$method\_as_date"}($::form->{"$method\_$row"}); + $obj->${\"$method\_as_date"}($value); } elsif ((ref $obj->meta->column($method)) =~ /^Rose::DB::Object::Metadata::Column::(?:Numeric|Float|DoublePrecsion)$/) { - $obj->${\"$method\_as_number"}($::form->{"$method\_$row"}); + $obj->${\"$method\_as_number"}($value); } elsif ((ref $obj->meta->column($method)) =~ /^Rose::DB::Object::Metadata::Column::Boolean$/) { - $obj->$method(!!$::form->{$method}); + $obj->$method(!!$value); } else { - $obj->$method($::form->{"$method\_$row"}); + $obj->$method($value); } } else { - $obj->{__additional_form_attributes}{$method} = $::form->{"$method\_$row"}; + $obj->{__additional_form_attributes}{$method} = $value; } } @@ -180,4 +202,3 @@ sub _make_record { } 1; -