X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=bin%2Fmozilla%2Fis.pl;h=740002bee183fcc710e162cebcd2aba3ed753d01;hb=c0f1c3eec56473b63fe132bea71b5cf3b2943065;hp=4a08e718542a6f12e3af8f18daae32710396cc6a;hpb=382e874cd5a9ffcf41643b2b8b3b34d1f4737421;p=kivitendo-erp.git diff --git a/bin/mozilla/is.pl b/bin/mozilla/is.pl index 4a08e7185..740002bee 100644 --- a/bin/mozilla/is.pl +++ b/bin/mozilla/is.pl @@ -144,6 +144,8 @@ sub invoice_links { } } + my $editing = $form->{id}; + $form->backup_vars(qw(payment_id language_id taxzone_id salesman_id taxincluded cp_id intnotes id shipto_id)); IS->get_customer(\%myconfig, \%$form); @@ -153,20 +155,12 @@ sub invoice_links { $ref->{name} = $form->quote($ref->{name}); } - # Load data for a specific order and update form fields - my $order_data = OE->get_order_data_by_ordnumber(%$form) if $form->{ordnumber}; - - # Copy the fields we need to %form - for my $key (qw(payment_id salesman_id orddate taxzone_id quonumber)) { - $form->{$key} = $order_data->{$key}; - } - $form->restore_vars(qw(id)); IS->retrieve_invoice(\%myconfig, \%$form); $form->restore_vars(qw(payment_id language_id taxzone_id intnotes cp_id shipto_id)); $form->restore_vars(qw(taxincluded)) if $form->{id}; - $form->restore_vars(qw(salesman_id)) if $main::editing; + $form->restore_vars(qw(salesman_id)) if $editing; # build vendor/customer drop down comatibility... don't ask @@ -264,13 +258,21 @@ sub prepare_invoice { $form->{"qty_$i"} = $form->format_amount(\%myconfig, $form->{"qty_$i"}, $dec_qty); + $form->{"sellprice_pg_$i"} = join ('--', $form->{"sellprice_$i"}, $form->{"pricegroup_id_$i"}); + $form->{rowcount} = $i; } # get pricegroups for parts IS->get_pricegroups_for_parts(\%myconfig, \%$form); - set_pricegroup($_) for 1 .. $form->{rowcount}; + + # Problem: set_pricegroup resets the sellprice of old invoices to the price + # currently defined in the pricegroup, which is a problem if the price has + # changed, as the old invoice gets the new price + # set_pricegroup must never be called, when an old invoice is initially loaded + + # set_pricegroup($_) for 1 .. $form->{rowcount}; } $main::lxdebug->leave_sub(); } @@ -285,7 +287,7 @@ sub form_header { $main::auth->assert('invoice_edit'); - our %TMPL_VAR = (); + my %TMPL_VAR = (); my @custom_hiddens; $form->{employee_id} = $form->{old_employee_id} if $form->{old_employee_id}; @@ -331,7 +333,7 @@ sub form_header { my %labels = map { $_ => $_ } @{ $form->{ALL_CURRENCIES} }; $form->{currency} = $form->{defaultcurrency} unless $form->{currency}; $TMPL_VAR{show_exchangerate} = $form->{currency} ne $form->{defaultcurrency}; - $TMPL_VAR{currencies} = NTI($cgi->popup_menu('-name' => 'currency', '-default' => $form->{"currency"}, + $TMPL_VAR{currencies} = NTI($::cgi->popup_menu('-name' => 'currency', '-default' => $form->{"currency"}, '-values' => \@values, '-labels' => \%labels)) if scalar @values; push @custom_hiddens, "forex"; push @custom_hiddens, "exchangerate" if $form->{forex}; @@ -421,9 +423,17 @@ sub form_footer { $form->{paidaccounts}++ if ($form->{"paid_$form->{paidaccounts}"}); $form->{paid_indices} = [ 1 .. $form->{paidaccounts} ]; + # Standard Konto für Umlaufvermögen + my $accno_arap = IS->get_standard_accno_current_assets(\%myconfig, \%$form); + for my $i (1 .. $form->{paidaccounts}) { $form->{"selectAR_paid_$i"} = $form->{selectAR_paid}; - $form->{"selectAR_paid_$i"} =~ s/option>\Q$form->{"AR_paid_$i"}\E/option selected>$form->{"AR_paid_$i"}/; + if (!$form->{"AR_paid_$i"}) { + $form->{"selectAR_paid_$i"} =~ s/option>$accno_arap--(.*?)$accno_arap--$1{"selectAR_paid_$i"} =~ s/option>\Q$form->{"AR_paid_$i"}\E/option selected>$form->{"AR_paid_$i"}/; + } + $totalpaid += $form->{"paid_$i"}; } @@ -464,7 +474,7 @@ sub update { my ($recursive_call) = shift; -# map { $form->{$_} = $form->parse_amount(\%myconfig, $form->{$_}) } qw(exchangerate creditlimit creditremaining) unless $recursive_call; + $form->{exchangerate} = $form->parse_amount(\%myconfig, $form->{exchangerate}) unless $recursive_call; $form->{print_and_post} = 0 if $form->{second_run}; my $taxincluded = "checked" if $form->{taxincluded}; @@ -501,7 +511,11 @@ sub update { my $rows = scalar @{ $form->{item_list} }; - $form->{"discount_$i"} = $form->format_amount(\%myconfig, $form->{customer_discount} * 100); + # Falls kein Kundenrabatt vorhanden ist, den aktuellen Rabatt nicht mit 0% überschreiben, + # da hier der Anwender schon manual einen Wert eingetragen haben könnte (analog zu qty) Bugfix: 1412 + if ($form->{customer_discount}){ + $form->{"discount_$i"} = $form->format_amount(\%myconfig, $form->{customer_discount} * 100); + } if ($rows) { $form->{"qty_$i"} = ($form->{"qty_$i"} * 1) ? $form->{"qty_$i"} : 1; @@ -596,7 +610,7 @@ sub post_payment { $main::auth->assert('invoice_edit'); - our $invdate; + my $invdate = $form->datetonum($form->{invdate}, \%myconfig); $form->{defaultcurrency} = $form->get_default_currency(\%myconfig); for my $i (1 .. $form->{paidaccounts}) { @@ -605,8 +619,6 @@ sub post_payment { $form->isblank("datepaid_$i", $locale->text('Payment date missing!')); - $form->error($locale->text('Cannot post payment for a closed period!')) - if ($form->date_closed($form->{"datepaid_$i"}, \%myconfig)); if ($form->{currency} ne $form->{defaultcurrency}) { $form->{"exchangerate_$i"} = $form->{exchangerate} @@ -616,6 +628,18 @@ sub post_payment { } } } + # Abgeschlossene Zeiträume nur für den letzten (aktuellen) Zahlungseingang prüfen + # Details s.a. Bug 1502 + # Das Problem ist jetzt, dass man Zahlungseingänge nachträglich ändern kann + # Wobei dies für Installationen die sowieso nicht mit Bücherkontrolle arbeiten keinen + # keinen Unterschied macht. + # Optimal wäre, wenn gegen einen Zeitstempel des Zahlungsfelds geprüft würde ... + # Das Problem hierbei ist, dass in IS.pm post_invoice IMMER alle Zahlungseingänge aus $form + # erneut gespeichert werden. Prinzipiell wäre es besser NUR die Änderungen des Rechnungs- + # belegs (neue Zahlung aber nichts anderes) zu speichern ... + # Vielleicht könnte man ähnlich wie bei Rechnung löschen verfahren + $form->error($locale->text('Cannot post payment for a closed period!')) + if ($form->date_closed($form->{"datepaid_$form->{paidaccounts}"}, \%myconfig)); ($form->{AR}) = split /--/, $form->{AR}; ($form->{AR_paid}) = split /--/, $form->{AR_paid}; @@ -719,10 +743,9 @@ sub post { $form->{addition} = $form->{print_and_post} ? "PRINTED AND POSTED" : $form->{storno} ? "STORNO" : "POSTED"; - $form->save_history($form->dbconnect(\%myconfig)); + $form->save_history; } - # macnetix: after invoice->Post, redirect to edit. if (!$form->{no_redirect_after_post}) { $form->{action} = 'edit'; $form->{script} = 'is.pl'; @@ -763,6 +786,11 @@ sub use_as_template { $form->{paidaccounts} = 1; $form->{rowcount}--; $form->{invdate} = $form->current_date(\%myconfig); + + # remember pricegroups for "use as template" + IS->get_pricegroups_for_parts(\%myconfig, \%$form); + set_pricegroup($_) for 1 .. $form->{rowcount}; + &display_form; $main::lxdebug->leave_sub(); @@ -886,8 +914,6 @@ sub credit_note { $form->{title} = $locale->text('Add Credit Note'); $form->{script} = 'is.pl'; - our $script = "is"; - our $buysell = 'buy'; # bo creates the id, reset it @@ -906,7 +932,7 @@ sub credit_note { &invoice_links; $form->{currency} = $currency; - $form->{forex} = $form->check_exchangerate( \%myconfig, $form->{currency}, $form->{invdate}, $buysell); + $form->{forex} = $form->check_exchangerate( \%myconfig, $form->{currency}, $form->{invdate}, 'buy'); $form->{exchangerate} = $form->{forex} || ''; $form->{creditremaining} -= ($form->{oldinvtotal} - $form->{ordtotal}); @@ -943,7 +969,7 @@ sub yes { if(!exists $form->{addition}) { $form->{snumbers} = qq|invnumber_| . $form->{invnumber}; $form->{addition} = "DELETED"; - $form->save_history($form->dbconnect(\%myconfig)); + $form->save_history; } # /saving the history $form->redirect($locale->text('Invoice deleted!'));