X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;ds=inline;f=bin%2Fmozilla%2Fis.pl;h=489a6d936112e4bb5db30286b2d2628505cc3518;hb=02cb7e02771247f3106001076366d119277a7d30;hp=3c5282cbe4bdcb6aec0972563cdbb160ed9e3bd4;hpb=05174f19ea29a44817ef9172c7fbdb7f89212806;p=kivitendo-erp.git
diff --git a/bin/mozilla/is.pl b/bin/mozilla/is.pl
index 3c5282cbe..489a6d936 100644
--- a/bin/mozilla/is.pl
+++ b/bin/mozilla/is.pl
@@ -45,9 +45,6 @@ require "bin/mozilla/drafts.pl";
use strict;
-my $edit;
-my $print_post;
-
1;
# end of main
@@ -97,14 +94,6 @@ sub edit {
$form->{javascript} = qq||;
#/show hhistory button
- if ($form->{type} eq "credit_note") {
- $form->{title} = $locale->text('Edit Credit Note');
- $form->{title} = $locale->text('Edit Storno Credit Note') if $form->{storno};
- } else {
- $form->{title} = $locale->text('Edit Sales Invoice');
- $form->{title} = $locale->text('Edit Storno Invoice') if $form->{storno};
- }
-
my ($language_id, $printer_id);
if ($form->{print_and_post}) {
$form->{action} = "print";
@@ -112,7 +101,16 @@ sub edit {
$language_id = $form->{language_id};
$printer_id = $form->{printer_id};
}
+
&invoice_links;
+ if ($form->{type} eq "credit_note") {
+ $form->{title} = $locale->text('Edit Credit Note');
+ $form->{title} = $locale->text('Edit Storno Credit Note') if $form->{storno};
+ } else {
+ $form->{title} = $locale->text('Edit Sales Invoice');
+ $form->{title} = $locale->text('Edit Storno Invoice') if $form->{storno};
+ }
+
&prepare_invoice;
if ($form->{print_and_post}) {
$form->{language_id} = $language_id;
@@ -135,8 +133,7 @@ sub invoice_links {
$form->{vc} = 'customer';
# create links
- $form->{webdav} = $main::webdav;
- $form->{lizenzen} = $main::lizenzen;
+ $form->{webdav} = $::lx_office_conf{features}->{webdav};
$form->create_links("AR", \%myconfig, "customer");
@@ -147,7 +144,9 @@ sub invoice_links {
}
}
- $form->backup_vars(qw(payment_id language_id taxzone_id salesman_id taxincluded cp_id intnotes id shipto_id));
+ my $editing = $form->{id};
+
+ $form->backup_vars(qw(payment_id language_id taxzone_id salesman_id taxincluded currency cp_id intnotes id shipto_id));
IS->get_customer(\%myconfig, \%$form);
@@ -156,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(payment_id language_id taxzone_id currency 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
@@ -204,9 +195,11 @@ sub invoice_links {
for my $i (1 .. scalar @{ $form->{acc_trans}{$key} }) {
$form->{"AR_paid_$i"} = "$form->{acc_trans}{$key}->[$i-1]->{accno}--$form->{acc_trans}{$key}->[$i-1]->{description}";
+ $form->{"acc_trans_id_$i"} = $form->{acc_trans}{$key}->[$i - 1]->{acc_trans_id};
# reverse paid
$form->{"paid_$i"} = $form->{acc_trans}{$key}->[$i - 1]->{amount} * -1;
$form->{"datepaid_$i"} = $form->{acc_trans}{$key}->[$i - 1]->{transdate};
+ $form->{"gldate_$i"} = $form->{acc_trans}{$key}->[$i - 1]->{gldate};
$form->{"exchangerate_$i"} = $form->{acc_trans}{$key}->[$i - 1]->{exchangerate};
$form->{"forex_$i"} = $form->{"exchangerate_$i"};
$form->{"source_$i"} = $form->{acc_trans}{$key}->[$i - 1]->{source};
@@ -267,13 +260,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();
}
@@ -284,11 +285,11 @@ sub form_header {
my $form = $main::form;
my %myconfig = %main::myconfig;
my $locale = $main::locale;
- my $cgi = $main::cgi;
+ my $cgi = $::request->{cgi};
$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};
@@ -296,10 +297,6 @@ sub form_header {
$form->{defaultcurrency} = $form->get_default_currency(\%myconfig);
- my $set_duedate_url = "$form->{script}?action=set_duedate";
-
- push @ { $form->{AJAX} }, new CGI::Ajax( 'set_duedate' => $set_duedate_url );
-
my @old_project_ids = ($form->{"globalproject_id"});
map { push @old_project_ids, $form->{"project_id_$_"} if $form->{"project_id_$_"}; } 1..$form->{"rowcount"};
@@ -333,9 +330,11 @@ sub form_header {
my @values = map { $_ } @{ $form->{ALL_CURRENCIES} };
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"},
- '-values' => \@values, '-labels' => \%labels)) if scalar @values;
+ $form->{show_exchangerate} = $form->{currency} ne $form->{defaultcurrency};
+ $TMPL_VAR{currencies} = NTI($::request->{cgi}->popup_menu('-name' => 'currency', '-default' => $form->{"currency"},
+ '-values' => \@values, '-labels' => \%labels,
+ '-onchange' => "document.getElementById('update_button').click();"
+ )) if scalar @values;
push @custom_hiddens, "forex";
push @custom_hiddens, "exchangerate" if $form->{forex};
@@ -365,7 +364,7 @@ sub form_header {
title creditlimit creditremaining tradediscount business closedto locked shipped storno storno_id
max_dunning_level dunning_amount
shiptoname shiptostreet shiptozipcode shiptocity shiptocountry shiptocontact shiptophone shiptofax
- shiptoemail shiptodepartment_1 shiptodepartment_2 message email subject cc bcc taxaccounts cursor_fokus
+ shiptoemail shiptodepartment_1 shiptodepartment_2 shiptocp_gender message email subject cc bcc taxaccounts cursor_fokus
convert_from_do_ids convert_from_oe_ids
), @custom_hiddens,
map { $_.'_rate', $_.'_description', $_.'_taxnumber' } split / /, $form->{taxaccounts}];
@@ -424,9 +423,27 @@ 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->{"changeable_$i"} = 1;
+ if ($::lx_office_conf{features}->{payments_changeable} == 0) {
+ # never
+ $form->{"changeable_$i"} = ($form->{"acc_trans_id_$i"})? 0 : 1;
+ } elsif ($::lx_office_conf{features}->{payments_changeable} == 2) {
+ # on the same day
+ $form->{"changeable_$i"} = (($form->{"gldate_$i"} eq '') ||
+ ($form->current_date(\%myconfig) eq $form->{"gldate_$i"}));
+ }
+
$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;
+ } else {
+ $form->{"selectAR_paid_$i"} =~ s/option>\Q$form->{"AR_paid_$i"}\E/option selected>$form->{"AR_paid_$i"}/;
+ }
+
$totalpaid += $form->{"paid_$i"};
}
@@ -465,12 +482,12 @@ sub update {
$main::auth->assert('invoice_edit');
- my ($recursive_call) = shift;
+ my ($recursive_call) = @_;
-# 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};
+ my $taxincluded = $form->{taxincluded} ? "checked" : '';
$form->{update} = 1;
&check_name("customer");
@@ -504,15 +521,19 @@ 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;
if ($rows > 1) {
- &select_item;
- exit;
+ select_item(mode => 'IS');
+ ::end_of_request();
} else {
@@ -550,16 +571,6 @@ sub update {
$form->{"qty_$i"} = $form->format_amount(\%myconfig, $form->{"qty_$i"});
- if ($main::lizenzen) {
- if ($form->{"inventory_accno_$i"} ne "") {
- $form->{"lizenzen_$i"} = qq||;
- foreach my $item (@{ $form->{LIZENZEN}{ $form->{"id_$i"} } }) {
- $form->{"lizenzen_$i"} .= qq||;
- }
- $form->{"lizenzen_$i"} .= qq||;
- }
- }
-
# get pricegroups for parts
IS->get_pricegroups_for_parts(\%myconfig, \%$form);
@@ -599,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}) {
@@ -608,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}
@@ -619,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};
@@ -652,7 +673,7 @@ sub post {
# if oldcustomer ne customer redo form
if (&check_name('customer')) {
&update;
- exit;
+ ::end_of_request();
}
if ($myconfig{mandatory_departments} && !$form->{department_id}) {
@@ -719,14 +740,19 @@ sub post {
if(!exists $form->{addition}) {
$form->{snumbers} = qq|invnumber_| . $form->{invnumber};
- $form->{addition} = $print_post ? "PRINTED AND POSTED" :
- $form->{storno} ? "STORNO" :
- "POSTED";
- $form->save_history($form->dbconnect(\%myconfig));
+ $form->{addition} = $form->{print_and_post} ? "PRINTED AND POSTED" :
+ $form->{storno} ? "STORNO" :
+ "POSTED";
+ $form->save_history;
}
- $form->redirect( $form->{label} . " $form->{invnumber} " . $locale->text('posted!'))
- unless $print_post;
+ if (!$form->{no_redirect_after_post}) {
+ $form->{action} = 'edit';
+ $form->{script} = 'is.pl';
+ $form->{saved_message} = $form->{label} . " $form->{invnumber} " . $locale->text('posted!');
+ $form->{callback} = build_std_url(qw(action edit id saved_message));
+ $form->redirect;
+ }
$main::lxdebug->leave_sub();
}
@@ -738,9 +764,9 @@ sub print_and_post {
$main::auth->assert('invoice_edit');
- my $old_form = new Form;
- $print_post = 1;
- $form->{print_and_post} = 1;
+ my $old_form = new Form;
+ $form->{no_redirect_after_post} = 1;
+ $form->{print_and_post} = 1;
&post();
&edit();
@@ -756,10 +782,15 @@ sub use_as_template {
$main::auth->assert('invoice_edit');
- map { delete $form->{$_} } qw(printed emailed queued invnumber invdate deliverydate id datepaid_1 source_1 memo_1 paid_1 exchangerate_1 AP_paid_1 storno);
+ map { delete $form->{$_} } qw(printed emailed queued invnumber invdate deliverydate id datepaid_1 gldate_1 acc_trans_id_1 source_1 memo_1 paid_1 exchangerate_1 AP_paid_1 storno);
$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();
@@ -790,7 +821,7 @@ sub storno {
# Payments must not be recorded for the new storno invoice.
$form->{paidaccounts} = 0;
- map { my $key = $_; delete $form->{$key} if grep { $key =~ /^$_/ } qw(datepaid_ source_ memo_ paid_ exchangerate_ AR_paid_) } keys %{ $form };
+ map { my $key = $_; delete $form->{$key} if grep { $key =~ /^$_/ } qw(datepaid_ gldate_ acc_trans_id_ source_ memo_ paid_ exchangerate_ AR_paid_) } keys %{ $form };
$form->{storno_id} = $form->{id};
$form->{storno} = 1;
@@ -883,10 +914,9 @@ sub credit_note {
$form->{title} = $locale->text('Add Credit Note');
$form->{script} = 'is.pl';
- our $script = "is";
- our $buysell = 'buy';
-
+ # Bei Gutschriften bezug zur Rechnungsnummer
+ $form->{invnumber_for_credit_note} = $form->{invnumber};
# bo creates the id, reset it
map { delete $form->{$_} }
qw(id invnumber subject message cc bcc printed emailed queued);
@@ -903,7 +933,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});
@@ -914,6 +944,8 @@ sub credit_note {
delete $form->{"source_$i"};
delete $form->{"memo_$i"};
delete $form->{"datepaid_$i"};
+ delete $form->{"gldate_$i"};
+ delete $form->{"acc_trans_id_$i"};
delete $form->{"AR_paid_$i"};
};
$form->{paidaccounts} = 1;
@@ -935,12 +967,12 @@ sub yes {
$main::auth->assert('invoice_edit');
- if (IS->delete_invoice(\%myconfig, \%$form, $main::spool)) {
+ if (IS->delete_invoice(\%myconfig, \%$form)) {
# saving the history
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!'));
@@ -958,7 +990,7 @@ sub e_mail {
$main::auth->assert('invoice_edit');
if (!$form->{id}) {
- $print_post = 1;
+ $form->{no_redirect_after_post} = 1;
my $saved_form = save_form();