X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=bin%2Fmozilla%2Fdo.pl;h=9b5943f5b98dc40e973173e4933275640868e5dd;hb=51a586e7fce096525d476919e809945a04dcf2ab;hp=f63254dc46793498a90abe9994df930c221fce05;hpb=927ec7273b39dffbd1cb91062fed46c60d9be47f;p=kivitendo-erp.git diff --git a/bin/mozilla/do.pl b/bin/mozilla/do.pl index f63254dc4..9b5943f5b 100644 --- a/bin/mozilla/do.pl +++ b/bin/mozilla/do.pl @@ -36,7 +36,9 @@ use List::MoreUtils qw(uniq); use List::Util qw(max sum); use POSIX qw(strftime); +use SL::Controller::DeliveryOrder; use SL::DB::DeliveryOrder; +use SL::DB::DeliveryOrder::TypeData qw(:types validate_type); use SL::DO; use SL::IR; use SL::IS; @@ -56,7 +58,10 @@ use strict; # end of main sub check_do_access { - $main::auth->assert($main::form->{type} . '_edit'); + validate_type($::form->{type}); + + my $right = SL::DB::DeliveryOrder::TypeData::get($::form->{type}, "right"); + $main::auth->assert($right); } sub set_headings { @@ -98,7 +103,7 @@ sub add { $form->{show_details} = $::myconfig{show_form_details}; $form->{callback} = build_std_url('action=add', 'type', 'vc') unless ($form->{callback}); - order_links(); + order_links(is_new => 1); prepare_order(); display_form(); @@ -168,6 +173,7 @@ sub order_links { check_do_access(); + my %params = @_; my $form = $main::form; my %myconfig = %main::myconfig; @@ -186,6 +192,7 @@ sub order_links { } else { IS->get_customer(\%myconfig, \%$form); $form->{discount} = $form->{customer_discount}; + $form->{billing_address_id} = $form->{default_billing_address_id} if $params{is_new}; } $form->restore_vars(qw(payment_id language_id taxzone_id intnotes cp_id delivery_term_id)); @@ -245,8 +252,7 @@ sub setup_do_action_bar { my $insertdate = DateTime->from_kivitendo($::form->{insertdate}); my $undo_transfer = 0; if (ref $undo_date eq 'DateTime' && ref $insertdate eq 'DateTime') { - # DateTime->compare it returns 1 if $dt1 > $dt2 - $undo_transfer = DateTime->compare($insertdate, $undo_date) == 1 ? 1 : 0; + $undo_transfer = $insertdate > $undo_date; } for my $bar ($::request->layout->get('actionbar')) { $bar->add( @@ -549,8 +555,12 @@ sub update_delivery_order { if (($form->{"previous_${vc}_id"} || $form->{"${vc}_id"}) != $form->{"${vc}_id"}) { $::form->{salesman_id} = SL::DB::Manager::Employee->current->id if exists $::form->{salesman_id}; - IS->get_customer(\%myconfig, $form) if $vc eq 'customer'; - IR->get_vendor(\%myconfig, $form) if $vc eq 'vendor'; + if ($vc eq 'customer') { + IS->get_customer(\%myconfig, $form); + $::form->{billing_address_id} = $::form->{default_billing_address_id}; + } else { + IR->get_vendor(\%myconfig, $form); + } } $form->{discount} = $form->{"$form->{vc}_discount"} if defined $form->{"$form->{vc}_discount"}; @@ -882,7 +892,9 @@ sub orders { 'align' => 'center', }; - $row->{donumber}->{link} = $edit_url . "&id=" . E($dord->{id}) . "&callback=${callback}"; + $row->{donumber}->{link} = SL::DB::DeliveryOrder::TypeData::get3($dord->{order_type}, "show_menu", "new_controller") + ? SL::Controller::DeliveryOrder->url_for(action => "edit", id => $dord->{id}, type => $dord->{order_type}) + : $edit_url . "&id=" . E($dord->{id}) . "&callback=${callback}"; $row->{ordnumber}->{link} = $edit_order_url . "&id=" . E($dord->{oe_id}) . "&callback=${callback}" if $dord->{oe_id}; $report->add_data($row); @@ -925,20 +937,43 @@ sub save { remove_emptied_rows(); validate_items(); + # check for serial number if part needs one + for my $i (1 .. $form->{rowcount} - 1) { + next unless $form->{"has_sernumber_$i"}; + $form->isblank("serialnumber_$i", + $locale->text('Serial Number missing in Row') . " $i"); + } # if the name changed get new values my $vc = $form->{vc}; if (($form->{"previous_${vc}_id"} || $form->{"${vc}_id"}) != $form->{"${vc}_id"}) { $::form->{salesman_id} = SL::DB::Manager::Employee->current->id if exists $::form->{salesman_id}; - IS->get_customer(\%myconfig, $form) if $vc eq 'customer'; - IR->get_vendor(\%myconfig, $form) if $vc eq 'vendor'; + if ($vc eq 'customer') { + IS->get_customer(\%myconfig, $form); + $::form->{billing_address_id} = $::form->{default_billing_address_id}; + } else { + IR->get_vendor(\%myconfig, $form); + } update(); $::dispatcher->end_request; } $form->{id} = 0 if $form->{saveasnew}; - + # we rely on converted_from_orderitems, if the workflow is used + # be sure that at least one position is linked to the original orderitem + if ($form->{convert_from_oe_ids}) { + my $has_linked_pos; + for my $i (1 .. $form->{rowcount}) { + if ($form->{"converted_from_orderitems_id_$i"}) { + $has_linked_pos = 1; + last; + } + } + if (!$has_linked_pos) { + $form->error($locale->text('Need at least one original position for the workflow Order to Delivery Order!')); + } + } DO->save(); # saving the history if(!exists $form->{addition}) { @@ -1027,6 +1062,8 @@ sub invoice { $main::auth->assert($form->{type} eq 'purchase_delivery_order' ? 'vendor_invoice_edit' : 'invoice_edit'); + $form->get_employee(); + $form->{convert_from_do_ids} = $form->{id}; # if we have a reqdate (Liefertermin), this is definetely the preferred # deliverydate for invoices @@ -1282,11 +1319,9 @@ sub calculate_stock_in_out { my $sum = AM->sum_with_unit(map { $_->{qty}, $_->{unit} } @{ $sinfo }); my $matches = $do_qty == $sum; - my $content = $form->format_amount_units('amount' => $sum * 1, - 'part_unit' => $form->{"partunit_$i"}, - 'amount_unit' => $all_units->{$form->{"partunit_$i"}}->{base_unit}, - 'conv_units' => 'convertible_not_smaller', - 'max_places' => 2); + my $amount_unit = $all_units->{$form->{"partunit_$i"}}->{base_unit}; + my $content = $form->format_amount(\%::myconfig, AM->convert_unit($amount_unit, $form->{"unit_$i"}) * $sum * 1) . ' ' . $form->{"unit_$i"}; + $content = qq|${content} |; $main::lxdebug->leave_sub(); @@ -1420,11 +1455,8 @@ sub _stock_in_out_set_qty_display { my $form = $::form; my $all_units = AM->retrieve_all_units(); my $sum = AM->sum_with_unit(map { $_->{qty}, $_->{unit} } @{ $stock_info }); - $form->{qty_display} = $form->format_amount_units(amount => $sum * 1, - part_unit => $form->{partunit}, - amount_unit => $all_units->{ $form->{partunit} }->{base_unit}, - conv_units => 'convertible_not_smaller', - max_places => 2); + my $amount_unit = $all_units->{$form->{"partunit"}}->{base_unit}; + $form->{qty_display} = $form->format_amount(\%::myconfig, AM->convert_unit($amount_unit, $form->{"do_unit"}) * $sum * 1) . ' ' . $form->{"do_unit"}; } sub set_stock_in { @@ -1478,10 +1510,7 @@ sub stock_out_form { if (!$form->{delivered}) { foreach my $row (@contents) { - $row->{available_qty} = $form->format_amount_units('amount' => $row->{qty} * 1, - 'part_unit' => $part_info->{unit}, - 'conv_units' => 'convertible_not_smaller', - 'max_places' => 2); + $row->{available_qty} = $form->format_amount(\%::myconfig, $row->{qty} * 1) . ' ' . $part_info->{unit}; foreach my $sinfo (@{ $stock_info }) { next if (($row->{bin_id} != $sinfo->{bin_id}) || @@ -1624,6 +1653,7 @@ sub transfer_in { SL::DB::DeliveryOrder->new(id => $form->{id})->load->update_attributes(delivered => 1); + flash_later('info', $locale->text("Transfer successful")); $form->{callback} = 'do.pl?action=edit&type=purchase_delivery_order&id=' . $form->escape($form->{id}); $form->redirect; @@ -1711,18 +1741,14 @@ sub transfer_out { $binfo->{bin_description}, $request->{chargenumber} ? $locale->text('chargenumber #1', $request->{chargenumber}) : $locale->text('no chargenumber'), $request->{bestbefore} ? $locale->text('bestbefore #1', $request->{bestbefore}) : $locale->text('no bestbefore'), - $form->format_amount_units('amount' => $request->{sum_base_qty}, - 'part_unit' => $pinfo->{unit}, - 'conv_units' => 'convertible_not_smaller')); + $form->format_amount(\%::myconfig, $request->{sum_base_qty}) . ' ' . $pinfo->{unit}); } else { push @{ $form->{ERRORS} }, $locale->text("There is not enough available of '#1' at warehouse '#2', bin '#3', #4, for the transfer of #5.", $pinfo->{description}, $binfo->{warehouse_description}, $binfo->{bin_description}, $request->{chargenumber} ? $locale->text('chargenumber #1', $request->{chargenumber}) : $locale->text('no chargenumber'), - $form->format_amount_units('amount' => $request->{sum_base_qty}, - 'part_unit' => $pinfo->{unit}, - 'conv_units' => 'convertible_not_smaller')); + $form->format_amount(\%::myconfig, $request->{sum_base_qty}) . ' ' . $pinfo->{unit}); } } } @@ -1742,6 +1768,7 @@ sub transfer_out { SL::DB::DeliveryOrder->new(id => $form->{id})->load->update_attributes(delivered => 1); + flash_later('info', $locale->text("Transfer successful")); $form->{callback} = 'do.pl?action=edit&type=sales_delivery_order&id=' . $form->escape($form->{id}); $form->redirect; @@ -1765,7 +1792,7 @@ sub mark_closed { sub display_form { $::lxdebug->enter_sub; - $::auth->assert('purchase_delivery_order_edit | sales_delivery_order_edit'); + check_do_access(); relink_accounts(); retrieve_partunits();