X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FController%2FPriceSource.pm;h=aea9f46454c7412939f287e963df35d25d5561b6;hb=e83604f2c7d6d499d9db8d066cc7f637e6f609de;hp=6e33285de0e6013b6d3e79032c7cda83a75c11f8;hpb=17384c044b465c262772eb9737ea298069c4d826;p=kivitendo-erp.git diff --git a/SL/Controller/PriceSource.pm b/SL/Controller/PriceSource.pm index 6e33285de..aea9f4645 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'); @@ -25,6 +24,12 @@ sub action_price_popup { my ($self) = @_; my $record_item = _make_record_item($::form->{row}); + my $old_unit; + if (($old_unit = $record_item->{__additional_form_attributes}{unit_old}) && $old_unit ne $record_item->unit) { + # reset unit changes. the way these interact on update breaks stuff + $record_item->unit_obj(SL::DB::Manager::Unit->find_by(name => $old_unit)); + $self->js->val("select[name='unit_$::form->{row}']", $old_unit); + } $self->render_price_dialog($record_item); } @@ -47,7 +52,7 @@ sub render_price_dialog { # $self->js->show('#dialog_flash_error'); # } - $self->js->render($self); + $self->js->render; } @@ -59,10 +64,6 @@ sub check_auth { $::auth->assert('edit_prices'); } -sub init_js { - SL::ClientJS->new -} - sub init_record { _make_record(); } @@ -72,11 +73,12 @@ sub _make_record_item { my $class = { sales_order => 'OrderItem', - purchase_oder => 'OrderItem', + purchase_order => 'OrderItem', sales_quotation => 'OrderItem', request_quotation => 'OrderItem', invoice => 'InvoiceItem', purchase_invoice => 'InvoiceItem', + credit_note => 'InvoiceItem', purchase_delivery_order => 'DeliveryOrderItem', sales_delivery_order => 'DeliveryOrderItem', }->{$::form->{type}}; @@ -92,13 +94,18 @@ sub _make_record_item { : $class->new; for my $method (apply { s/_$row$// } grep { /_$row$/ } keys %$::form) { - next unless $obj->meta->column($method); - if ($obj->meta->column($method)->isa('Rose::DB::Object::Metadata::Column::Date')) { - $obj->${\"$method\_as_date"}($::form->{"$method\_$row"}); - } elsif ((ref $obj->meta->column($method)) =~ /^Rose::DB::Object::Metadata::Column::(?:Numeric|Float|DoublePrecsion)$/) { - $obj->${\"$method\_as_number"}($::form->{"$method\_$row"}); + if ($obj->meta->column($method)) { + if ($obj->meta->column($method)->isa('Rose::DB::Object::Metadata::Column::Date')) { + $obj->${\"$method\_as_date"}($::form->{"$method\_$row"}); + } elsif ((ref $obj->meta->column($method)) =~ /^Rose::DB::Object::Metadata::Column::(?:Numeric|Float|DoublePrecsion)$/) { + $obj->${\"$method\_as_number"}($::form->{"$method\_$row"}); + } elsif ((ref $obj->meta->column($method)) =~ /^Rose::DB::Object::Metadata::Column::Boolean$/) { + $obj->$method(!!$::form->{$method}); + } else { + $obj->$method($::form->{"$method\_$row"}); + } } else { - $obj->$method($::form->{"$method\_$row"}); + $obj->{__additional_form_attributes}{$method} = $::form->{"$method\_$row"}; } } @@ -114,9 +121,10 @@ sub _make_record { my $class = { sales_order => 'Order', - purchase_oder => 'Order', + purchase_order => 'Order', sales_quotation => 'Order', request_quotation => 'Order', + purchase_invoice => 'PurchaseInvoice', purchase_delivery_order => 'DeliveryOrder', sales_delivery_order => 'DeliveryOrder', }->{$::form->{type}}; @@ -145,6 +153,8 @@ sub _make_record { $obj->${\"$method\_as_date"}($::form->{$method}); } elsif ((ref $obj->meta->column($method)) =~ /^Rose::DB::Object::Metadata::Column::(?:Numeric|Float|DoublePrecsion)$/) { $obj->${\"$method\_as\_number"}($::form->{$method}); + } elsif ((ref $obj->meta->column($method)) =~ /^Rose::DB::Object::Metadata::Column::Boolean$/) { + $obj->$method(!!$::form->{$method}); } else { $obj->$method($::form->{$method}); } @@ -159,6 +169,7 @@ sub _make_record { $obj->items(@items) if @items; } + $obj->is_sales(!!$obj->customer_id) if $class eq 'SL::DB::DeliveryOrder'; return $obj; }