X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=bin%2Fmozilla%2Fdo.pl;h=7f83bf399b7398b0083096116fd3ae7819e96863;hb=429203bfb57dd673aa807d749ab43c8e3332f8c8;hp=26ebde50b08d83e319a6c9b1eaa3f14f4babdf81;hpb=0f33c880b8fdb7ab48bc40dd0464e7458ac00c8a;p=kivitendo-erp.git diff --git a/bin/mozilla/do.pl b/bin/mozilla/do.pl index 26ebde50b..7f83bf399 100644 --- a/bin/mozilla/do.pl +++ b/bin/mozilla/do.pl @@ -121,7 +121,8 @@ sub edit { } if ($form->{print_and_save}) { - $form->{action} = "print"; + $form->{action} = "dispatcher"; + $form->{action_print} = "1"; $form->{resubmit} = 1; $language_id = $form->{language_id}; $printer_id = $form->{printer_id}; @@ -159,14 +160,19 @@ sub order_links { DO->retrieve('vc' => $form->{vc}, 'ids' => $form->{id}); - $payment_id = $form->{payment_id} if ($form->{payment_id}); - $language_id = $form->{language_id} if ($form->{language_id}); - $taxzone_id = $form->{taxzone_id} if ($form->{taxzone_id}); - $salesman_id = $form->{salesman_id} if ($editing); + $form->backup_vars(qw(payment_id language_id taxzone_id salesman_id taxincluded cp_id intnotes)); + $form->{shipto} = 1 if $form->{id}; + # get customer / vendor + if ($form->{vc} eq 'vendor') { + IR->get_vendor(\%myconfig, \%$form); + } else { + IS->get_customer(\%myconfig, \%$form); + } - $taxincluded = $form->{taxincluded}; - $form->{shipto} = 1 if $form->{id}; + $form->restore_vars(qw(payment_id language_id taxzone_id intnotes cp_id)); + $form->restore_vars(qw(taxincluded)) if $form->{id}; + $form->restore_vars(qw(salesman_id)) if $editing; if ($form->{"all_$form->{vc}"}) { unless ($form->{"$form->{vc}_id"}) { @@ -174,25 +180,11 @@ sub order_links { } } - $cp_id = $form->{cp_id}; - $intnotes = $form->{intnotes}; - - $form->{cp_id} = $cp_id; - - $form->{payment_id} = $payment_id if ($payment_id); - $form->{language_id} = $language_id if ($language_id); - $form->{taxzone_id} = $taxzone_id if ($taxzone_id); - $form->{intnotes} = $intnotes if ($intnotes); - ($form->{ $form->{vc} }) = split /--/, $form->{ $form->{vc} }; $form->{"old$form->{vc}"} = qq|$form->{$form->{vc}}--$form->{"$form->{vc}_id"}|; - $form->{taxincluded} = $taxincluded if ($form->{id}); - $form->{employee} = "$form->{employee}--$form->{employee_id}"; - $form->{salesman_id} = $salesman_id if ($editing); - $lxdebug->leave_sub(); } @@ -227,8 +219,6 @@ sub prepare_order { (my $dec_qty) = ($form->{"qty_$i"} =~ /\.(\d+)/); $dec_qty = length $dec_qty; $form->{"qty_$i"} = $form->format_amount(\%myconfig, $form->{"qty_$i"}, $dec_qty); - - map { $form->{"${_}_$i"} =~ s/\"/"/g } qw(partnumber description unit); } $lxdebug->leave_sub(); @@ -281,10 +271,15 @@ sub form_header { if ($form->{format} eq "html") { $form->{onload} = "window.open('about:blank','Beleg'); document.do.target = 'Beleg';"; } + # emulate click for resubmitting actions + $form->{onload} .= "document.do.${_}.click(); " for grep { /^action_/ } keys %$form; $form->{onload} .= "document.do.submit();" } $form->header(); + # Fix für Bug 1082 Erwartet wird: 'abteilungsNAME--abteilungsID' + $form->{department} .= '--' . $form->{department_id}; + print $form->parse_html_template('do/form_header'); $lxdebug->leave_sub(); @@ -346,7 +341,6 @@ sub update_delivery_order { } else { - map { $form->{item_list}[$i]{$_} =~ s/\"/"/g } qw(partnumber description unit); map { $form->{"${_}_$i"} = $form->{item_list}[0]{$_} } keys %{ $form->{item_list}[0] }; $form->{"marge_price_factor_$i"} = $form->{item_list}->[0]->{price_factor}; @@ -409,7 +403,7 @@ sub orders { ($form->{ $form->{vc} }, $form->{"${form->{vc}}_id"}) = split(/--/, $form->{ $form->{vc} }); - $form->{sort} ||= 'transdate'; + report_generator_set_default_sort('transdate', 1); DO->transactions(); @@ -455,8 +449,9 @@ sub orders { 'delivered' => { 'text' => $locale->text('Delivered'), }, ); - foreach my $name (qw(id transdate donumber ordnumber name employee shipvia)) { - $column_defs{$name}->{link} = $href . "&sort=$name"; + foreach my $name (qw(id transdate donumber ordnumber name employee shipvia transaction_description)) { + my $sortdir = $form->{sort} eq $name ? 1 - $form->{sortdir} : $form->{sortdir}; + $column_defs{$name}->{link} = $href . "&sort=$name&sortdir=$sortdir"; } $form->{"l_type"} = "Y"; @@ -467,9 +462,9 @@ sub orders { $report->set_columns(%column_defs); $report->set_column_order(@columns); - $report->set_export_options('orders', @hidden_variables); + $report->set_export_options('orders', @hidden_variables, qw(sort sortdir)); - $report->set_sort_indicator($form->{sort}, 1); + $report->set_sort_indicator($form->{sort}, $form->{sortdir}); my @options; if ($form->{customer}) { @@ -492,10 +487,10 @@ sub orders { push @options, $locale->text('Transaction description') . " : $form->{transaction_description}"; } if ($form->{transdatefrom}) { - push @options, $locale->text('From') . " " . $locale->date(\%myconfig, $form->{transdatefrom}, 1); + push @options, $locale->text('From') . " " . $locale->date(\%myconfig, $form->{transdatefrom}, 1); } if ($form->{transdateto}) { - push @options, $locale->text('Bis') . " " . $locale->date(\%myconfig, $form->{transdateto}, 1); + push @options, $locale->text('Bis') . " " . $locale->date(\%myconfig, $form->{transdateto}, 1); } if ($form->{open}) { push @options, $locale->text('Open'); @@ -648,20 +643,21 @@ sub invoice { check_do_access(); $auth->assert($form->{type} eq 'purchase_delivery_order' ? 'vendor_invoice_edit' : 'invoice_edit'); - $form->{deliverydate} = $form->{transdate}; - $form->{transdate} = $form->{invdate} = $form->current_date(\%myconfig); - $form->{duedate} = $form->current_date(\%myconfig, $form->{invdate}, $form->{terms} * 1); + $form->{convert_from_do_ids} = $form->{id}; + $form->{deliverydate} = $form->{transdate}; + $form->{transdate} = $form->{invdate} = $form->current_date(\%myconfig); + $form->{duedate} = $form->current_date(\%myconfig, $form->{invdate}, $form->{terms} * 1); + $form->{defaultcurrency} = $form->get_default_currency(\%myconfig); - $form->{id} = ''; - $form->{closed} = 0; $form->{rowcount}--; - $form->{defaultcurrency} = $form->get_default_currency(\%myconfig); + delete @{$form}{qw(id closed delivered)}; if ($form->{type} eq 'purchase_delivery_order') { $form->{title} = $locale->text('Add Vendor Invoice'); $form->{script} = 'ir.pl'; $script = "ir"; + $buysell = 'sell'; } else { $form->{title} = $locale->text('Add Sales Invoice'); @@ -740,15 +736,22 @@ sub invoice_multi { 'back_button' => 1); } - $form->{deliverydate} = $form->{transdate}; - $form->{transdate} = $form->current_date(\%myconfig); - $form->{duedate} = $form->current_date(\%myconfig, $form->{invdate}, $form->{terms} * 1); - $form->{type} = "invoice"; - $form->{closed} = 0; - $form->{defaultcurrency} = $form->get_default_currency(\%myconfig); + my $source_type = $form->{type}; + $form->{convert_from_do_ids} = join ' ', @do_ids; + # bei der auswahl von mehreren Lieferscheinen fuer eine Rechnung, die einfach in donumber_array + # zwischenspeichern (DO.pm) und als ' '-separierte Liste wieder zurueckschreiben + # Hinweis: delete gibt den wert zurueck und loescht danach das element (nett und einfach) + # $shell: perldoc perlunc; /delete EXPR + $form->{donumber} = delete $form->{donumber_array}; + $form->{deliverydate} = $form->{transdate}; + $form->{transdate} = $form->current_date(\%myconfig); + $form->{duedate} = $form->current_date(\%myconfig, $form->{invdate}, $form->{terms} * 1); + $form->{type} = "invoice"; + $form->{closed} = 0; + $form->{defaultcurrency} = $form->get_default_currency(\%myconfig); my $buysell; - if ($form->{type} eq 'purchase_delivery_order') { + if ($source_type eq 'purchase_delivery_order') { $form->{title} = $locale->text('Add Vendor Invoice'); $form->{script} = 'ir.pl'; $script = "ir"; @@ -766,8 +769,12 @@ sub invoice_multi { $form->{rowcount} = 0; foreach my $ref (@{ $form->{form_details} }) { $form->{rowcount}++; + $ref->{reqdate} ||= $ref->{dord_transdate}; # copy transdates into each invoice row map { $form->{"${_}_$form->{rowcount}"} = $ref->{$_} } keys %{ $ref }; map { $form->{"${_}_$form->{rowcount}"} = $form->format_amount(\%myconfig, $ref->{$_}) } qw(qty sellprice discount lastcost); + $form->{"discount_$form->{rowcount}"} = $form->{"discount_$form->{rowcount}"} * 100; #s.a. Bug 1151 + # Anm.: Eine Änderung des discounts in der SL/DO.pm->retrieve (select (doi.discount * 100) as discount) ergibt in psql einen + # Wert von 10.0000001490116. Ferner ist der Rabatt in der Rechnung dann bei 1.0 (?). Deswegen lasse ich das hier. jb 10.10.09 } delete $form->{form_details}; @@ -789,6 +796,7 @@ sub save_as_new { $form->{saveasnew} = 1; $form->{closed} = 0; + $form->{delivered} = 0; map { delete $form->{$_} } qw(printed emailed queued); # Let Lx-Office assign a new order number if the user hasn't changed the @@ -939,7 +947,7 @@ sub display_stock_in_form { $form->get_lists('warehouses' => { 'key' => 'WAREHOUSES', 'bins' => 'BINS' }); - redo_stock_info('stock_info' => $stock_info, 'add_empty_row' => !$form->{closed}); + redo_stock_info('stock_info' => $stock_info, 'add_empty_row' => !$form->{delivered}); get_basic_bin_wh_info($stock_info); @@ -986,7 +994,7 @@ sub stock_out_form { my $stock_info = DO->unpack_stock_information('packed' => $form->{stock}); - if (!$form->{closed}) { + if (!$form->{delivered}) { foreach my $row (@contents) { $row->{available_qty} = $form->format_amount_units('amount' => $row->{qty} * 1, 'part_unit' => $part_info->{unit}, @@ -1012,7 +1020,7 @@ sub stock_out_form { $form->header(); print $form->parse_html_template('do/stock_out_form', { 'UNITS' => $units_data, - 'WHCONTENTS' => $form->{closed} ? $stock_info : \@contents, + 'WHCONTENTS' => $form->{delivered} ? $stock_info : \@contents, 'PART_INFO' => $part_info, }); $lxdebug->leave_sub(); @@ -1056,9 +1064,13 @@ sub set_stock_out { $lxdebug->leave_sub(); } -sub transfer_in_and_close { +sub transfer_in { $lxdebug->enter_sub(); + if (DO->is_marked_as_delivered('id' => $form->{id})) { + $form->show_generic_error($locale->text('The parts for this delivery order have already been transferred in.'), 'back_button' => 1); + } + my @part_ids = map { $form->{"id_${_}"} } grep { $form->{"id_${_}"} && $form->{"stock_in_${_}"} } (1 .. $form->{rowcount}); my @all_requests; @@ -1093,7 +1105,7 @@ sub transfer_in_and_close { } if (@{ $form->{ERRORS} }) { - push @{ $form->{ERRORS} }, $locale->text('The delivery order has not been closed. The warehouse contents have not changed.'); + push @{ $form->{ERRORS} }, $locale->text('The delivery order has not been marked as delivered. The warehouse contents have not changed.'); update(); $lxdebug->leave_sub(); @@ -1105,7 +1117,6 @@ sub transfer_in_and_close { DO->transfer_in_out('direction' => 'in', 'requests' => \@all_requests); - $form->{closed} = 1; $form->{delivered} = 1; save(); @@ -1113,9 +1124,13 @@ sub transfer_in_and_close { $lxdebug->leave_sub(); } -sub transfer_out_and_close { +sub transfer_out { $lxdebug->enter_sub(); + if (DO->is_marked_as_delivered('id' => $form->{id})) { + $form->show_generic_error($locale->text('The parts for this delivery order have already been transferred out.'), 'back_button' => 1); + } + my @part_ids = map { $form->{"id_${_}"} } grep { $form->{"id_${_}"} && $form->{"stock_out_${_}"} } (1 .. $form->{rowcount}); my @all_requests; @@ -1186,7 +1201,7 @@ sub transfer_out_and_close { } if (@{ $form->{ERRORS} }) { - push @{ $form->{ERRORS} }, $locale->text('The delivery order has not been closed. The warehouse contents have not changed.'); + push @{ $form->{ERRORS} }, $locale->text('The delivery order has not been marked as delivered. The warehouse contents have not changed.'); update(); $lxdebug->leave_sub(); @@ -1198,7 +1213,6 @@ sub transfer_out_and_close { DO->transfer_in_out('direction' => 'out', 'requests' => \@all_requests); - $form->{closed} = 1; $form->{delivered} = 1; save(); @@ -1206,6 +1220,19 @@ sub transfer_out_and_close { $lxdebug->leave_sub(); } +sub mark_closed { + $lxdebug->enter_sub(); + + DO->close_orders('ids' => [ $form->{id} ]); + + $form->{closed} = 1; + + update(); + + $lxdebug->leave_sub(); +} + + sub yes { call_sub($form->{yes_nextsub}); } @@ -1217,3 +1244,14 @@ sub no { sub update { call_sub($form->{update_nextsub} || $form->{nextsub} || 'update_delivery_order'); } + +sub dispatcher { + foreach my $action (qw(update ship_to print e_mail save transfer_out transfer_in mark_closed save_as_new invoice delete)) { + if ($form->{"action_${action}"}) { + call_sub($action); + return; + } + } + + $form->error($locale->text('No action defined.')); +}