X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/87bd35148cceaf805d14d5ed2042142a40981519..88a78448cd46a676f4b9342f2991a58ae9393074:/SL/Controller/Order.pm diff --git a/SL/Controller/Order.pm b/SL/Controller/Order.pm index 193382790..79e4ee834 100644 --- a/SL/Controller/Order.pm +++ b/SL/Controller/Order.pm @@ -24,7 +24,7 @@ use SL::Helper::DateTime; use SL::Helper::CreatePDF qw(:all); use List::Util qw(max first); -use List::MoreUtils qw(none pairwise); +use List::MoreUtils qw(none pairwise first_index); use English qw(-no_match_vars); use File::Spec; @@ -124,7 +124,9 @@ sub action_create_pdf { my $key = join('_', Time::HiRes::gettimeofday(), int rand 1000000000000); $::auth->set_session_value("Order::create_pdf-${key}" => $sfile->file_name); - my $pdf_filename = t8('Sales Order') . '_' . $self->order->ordnumber . '.pdf'; + $::form->{formname} = $self->type; + $::form->{language} = 'de'; + my $pdf_filename = $::form->get_formname_translation . '_' . $self->order->ordnumber . '.pdf'; $self->js ->run('download_pdf', $pdf_filename, $key) @@ -259,9 +261,11 @@ sub action_customer_vendor_changed { $self->order->taxzone_id($self->order->$cv_method->taxzone_id); - $self->order->taxincluded(defined($self->order->$cv_method->taxincluded_checked) - ? $self->order->$cv_method->taxincluded_checked - : $::myconfig{taxincluded_checked}); + if ($self->order->is_sales) { + $self->order->taxincluded(defined($self->order->$cv_method->taxincluded_checked) + ? $self->order->$cv_method->taxincluded_checked + : $::myconfig{taxincluded_checked}); + } $self->_recalc(); @@ -286,22 +290,42 @@ sub action_add_item { my $item = SL::DB::OrderItem->new; $item->assign_attributes(%$form_attr); - my $part = SL::DB::Part->new(id => $form_attr->{parts_id})->load; - my $cv_method = $self->cv; - my $cv_discount = $self->order->$cv_method? $self->order->$cv_method->discount : 0.0; + my $part = SL::DB::Part->new(id => $form_attr->{parts_id})->load; + + my $price_source = SL::PriceSource->new(record_item => $item, record => $self->order); - my $price = $item->sellprice; - $price ||= ($self->order->$cv_method && $self->order->$cv_method->klass) - ? (SL::DB::Manager::Price->find_by(parts_id => $part->id, pricegroup_id => $self->order->$cv_method->klass)->price || $part->sellprice) - : $part->sellprice; + my $price_src; + if ($item->sellprice) { + $price_src = $price_source->price_from_source(""); + $price_src->price($item->sellprice); + } else { + $price_src = $price_source->best_price + ? $price_source->best_price + : $price_source->price_from_source(""); + $price_src->price(0) if !$price_source->best_price; + } + + # bb: not sure but: maybe there should be a $price_source->discount_from_source + # which can also return an empty_discout if source is "". + my $discount; + my $discount_src; + if ($item->discount) { + $discount = $item->discount; + } else { + $discount = $price_source->best_discount + ? $price_source->best_discount->discount + : 0; + $discount_src = $price_source->best_discount->source if $price_source->best_discount; + } my %new_attr; - $new_attr{part} = $part; - $new_attr{description} = $part->description if ! $item->description; - $new_attr{qty} = 1.0 if ! $item->qty; - $new_attr{unit} = $part->unit; - $new_attr{sellprice} = $price; - $new_attr{discount} = $cv_discount if ! $item->discount; + $new_attr{part} = $part; + $new_attr{description} = $part->description if ! $item->description; + $new_attr{qty} = 1.0 if ! $item->qty; + $new_attr{sellprice} = $price_src->price; + $new_attr{discount} = $discount; + $new_attr{active_price_source} = $price_src; + $new_attr{active_discount_source} = $discount_src; # add_custom_variables adds cvars to an orderitem with no cvars for saving, but # they cannot be retrieved via custom_variables until the order/orderitem is @@ -344,6 +368,15 @@ sub action_recalc_amounts_and_taxes { $self->js->render(); } +sub action_price_popup { + my ($self) = @_; + + my $idx = first_index { $_ eq $::form->{item_id} } @{ $::form->{orderitem_ids} }; + my $item = $self->order->items->[$idx]; + + $self->render_price_dialog($item); +} + sub _js_redisplay_linetotals { my ($self) = @_; @@ -449,13 +482,34 @@ sub build_tax_rows { my ($self) = @_; my $rows_as_html; - foreach my $tax (@{ $self->{taxes} }) { + foreach my $tax (sort { $a->{tax}->rate cmp $b->{tax}->rate } @{ $self->{taxes} }) { $rows_as_html .= $self->p->render('order/tabs/_tax_row', TAX => $tax, TAXINCLUDED => $self->order->taxincluded); } return $rows_as_html; } +sub render_price_dialog { + my ($self, $record_item) = @_; + + my $price_source = SL::PriceSource->new(record_item => $record_item, record => $self->order); + + $self->js + ->run( + 'kivi.io.price_chooser_dialog', + t8('Available Prices'), + $self->render('order/tabs/_price_sources_dialog', { output => 0 }, price_source => $price_source) + ) + ->reinit_widgets; + +# if (@errors) { +# $self->js->text('#dialog_flash_error_content', join ' ', @errors); +# $self->js->show('#dialog_flash_error'); +# } + + $self->js->render; +} + sub _make_order { my ($self) = @_; @@ -471,7 +525,6 @@ sub _make_order { return $order; } - sub _recalc { my ($self) = @_; @@ -500,12 +553,10 @@ sub _get_unalterable_data { if ($item->id) { # load data from orderitems (db) my $db_item = SL::DB::OrderItem->new(id => $item->id)->load; - $item->$_($db_item->$_) for qw(active_discount_source active_price_source longdescription); + $item->$_($db_item->$_) for qw(longdescription); } else { # set data from part (or other sources) $item->longdescription($item->part->notes); - #$item->active_price_source(''); - #$item->active_discount_source(''); } # autovivify all cvars that are not in the form (cvars_by_config can do it). @@ -551,6 +602,17 @@ sub _pre_render { $self->{current_employee_id} = SL::DB::Manager::Employee->current->id; + foreach my $item (@{$self->order->items}) { + my $price_source = SL::PriceSource->new(record_item => $item, record => $self->order); + + my $price_src = $price_source->price_from_source($item->active_price_source); + $item->active_price_source($price_src); + + my $discount_src; + $discount_src = $price_source->price_from_source($item->active_discount_source)->source if $item->active_discount_source; + $item->active_discount_source($discount_src); + } + $::request->{layout}->use_javascript("${_}.js") for qw(ckeditor/ckeditor ckeditor/adapters/jquery); } @@ -558,8 +620,8 @@ sub _create_pdf { my ($order, $pdf_ref, $params) = @_; my $print_form = Form->new(''); - $print_form->{type} = 'sales_order'; - $print_form->{formname} = 'sales_order', + $print_form->{type} = $order->type; + $print_form->{formname} = $order->type; $print_form->{format} = $params->{format} || 'pdf', $print_form->{media} = $params->{media} || 'file';