X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=bin%2Fmozilla%2Fis.pl;h=502525782e9220b9f863467ca5c0b7cd4ff85be9;hb=8d18edeb2dd216794954e65ffcce64851425b0bf;hp=49b0c1e04c14fadfab3ed32ed5e90719a2d165b6;hpb=0b9fc4e613db11933371e06ccd2f2ed1ca293e38;p=kivitendo-erp.git diff --git a/bin/mozilla/is.pl b/bin/mozilla/is.pl index 49b0c1e04..502525782 100644 --- a/bin/mozilla/is.pl +++ b/bin/mozilla/is.pl @@ -35,6 +35,7 @@ use SL::FU; use SL::IS; use SL::PE; use SL::OE; +use SL::MoreCommon qw(restore_form save_form); use Data::Dumper; use DateTime; use List::MoreUtils qw(uniq); @@ -47,9 +48,7 @@ use SL::DB::Customer; use SL::DB::PaymentTerm; require "bin/mozilla/io.pl"; -require "bin/mozilla/invoice_io.pl"; require "bin/mozilla/arap.pl"; -require "bin/mozilla/drafts.pl"; use strict; @@ -65,7 +64,7 @@ sub add { $main::auth->assert('invoice_edit'); - return $main::lxdebug->leave_sub() if (load_draft_maybe()); + $form->{show_details} = $::myconfig{show_form_details}; if ($form->{type} eq "credit_note") { $form->{title} = $locale->text('Add Credit Note'); @@ -96,6 +95,7 @@ sub edit { $main::auth->assert('invoice_edit'); + $form->{show_details} = $::myconfig{show_form_details}; $form->{taxincluded_changed_by_user} = 1; # show history button @@ -140,8 +140,6 @@ sub invoice_links { $form->{vc} = 'customer'; # create links - $form->{webdav} = $::instance_conf->get_webdav; - $form->create_links("AR", \%myconfig, "customer"); if ($form->{all_customer}) { @@ -380,12 +378,14 @@ sub form_header { $TMPL_VAR{dateformat} = $myconfig{dateformat}; $TMPL_VAR{numberformat} = $myconfig{numberformat}; + push @custom_hiddens, map { "shiptocvar_" . $_->name } @{ SL::DB::Manager::CustomVariableConfig->get_all(where => [ module => 'ShipTo' ]) }; + # hiddens $TMPL_VAR{HIDDENS} = [qw( - id action type media format queued printed emailed title vc discount + id type media format queued printed emailed title vc discount title creditlimit creditremaining tradediscount business closedto locked shipped storno storno_id max_dunning_level dunning_amount dunning_description - shiptoname shiptostreet shiptozipcode shiptocity shiptocountry shiptocontact shiptophone shiptofax + shiptoname shiptostreet shiptozipcode shiptocity shiptocountry shiptogln shiptocontact shiptophone shiptofax shiptoemail shiptodepartment_1 shiptodepartment_2 shiptocp_gender message email subject cc bcc taxaccounts cursor_fokus convert_from_do_ids convert_from_oe_ids convert_from_ar_ids useasnew invoice_id @@ -393,10 +393,10 @@ sub form_header { ), @custom_hiddens, map { $_.'_rate', $_.'_description', $_.'_taxnumber' } split / /, $form->{taxaccounts}]; - $::request->{layout}->use_javascript(map { "${_}.js" } qw(kivi.SalesPurchase ckeditor/ckeditor ckeditor/adapters/jquery kivi.io autocomplete_customer autocomplete_part client_js)); + $::request->{layout}->use_javascript(map { "${_}.js" } qw(kivi.Draft kivi.SalesPurchase ckeditor/ckeditor ckeditor/adapters/jquery kivi.io autocomplete_customer autocomplete_part client_js)); $TMPL_VAR{payment_terms_obj} = get_payment_terms_for_invoice(); - $form->{duedate} = $TMPL_VAR{payment_terms_obj}->calc_date(reference_date => $form->{invdate}, due_date => $form->{due_due})->to_kivitendo if $TMPL_VAR{payment_terms_obj}; + $form->{duedate} = $TMPL_VAR{payment_terms_obj}->calc_date(reference_date => $form->{invdate}, due_date => $form->{duedate})->to_kivitendo if $TMPL_VAR{payment_terms_obj}; $form->header(); @@ -463,9 +463,16 @@ sub form_footer { } } + my $grossamount = $form->{invtotal}; + $form->{invtotal} = $form->round_amount( $form->{invtotal}, 2, 1 ); + $form->{rounding} = $form->round_amount( + $form->{invtotal} - $form->round_amount($grossamount, 2), + 2 + ); + # follow ups if ($form->{id}) { - $form->{follow_ups} = FU->follow_ups('trans_id' => $form->{id}) || []; + $form->{follow_ups} = FU->follow_ups('trans_id' => $form->{id}, 'not_done' => 1) || []; $form->{follow_ups_unfinished} = ( sum map { $_->{due} * 1 } @{ $form->{follow_ups} } ) || 0; } @@ -490,6 +497,11 @@ sub form_footer { ($form->current_date(\%myconfig) eq $form->{"gldate_$i"})); } + #deaktivieren von gebuchten Zahlungen ausserhalb der Bücherkontrolle, vorher prüfen ob heute eingegeben + if ($form->date_closed($form->{"gldate_$i"})) { + $form->{"changeable_$i"} = 0; + } + $form->{"selectAR_paid_$i"} = $form->{selectAR_paid}; if (!$form->{"AR_paid_$i"}) { $form->{"selectAR_paid_$i"} =~ s/option>$accno_arap--(.*?)$accno_arap--$1 1) { select_item(mode => 'IS', pre_entered_qty => $form->{"qty_$i"}); - ::end_of_request(); + $::dispatcher->end_request; } else { @@ -682,6 +694,7 @@ sub post_payment { $main::auth->assert('invoice_edit'); + $form->mtime_ischanged('ar') ; my $invdate = $form->datetonum($form->{invdate}, \%myconfig); $form->{defaultcurrency} = $form->get_default_currency(\%myconfig); @@ -698,20 +711,15 @@ sub post_payment { $form->isblank("exchangerate_$i", $locale->text('Exchangerate for payment missing!')); } + $form->error($locale->text('Cannot post transaction above the maximum future booking date!')) + if ($form->date_max_future($form->{"datepaid_$i"}, \%myconfig)); + + #Zusätzlich noch das Buchungsdatum in die Bücherkontrolle einbeziehen + # (Dient zur Prüfung ob ZE oder ZA geprüft werden soll) + $form->error($locale->text('Cannot post payment for a closed period!')) + if ($form->date_closed($form->{"datepaid_$i"}) && !$form->date_closed($form->{"gldate_$i"}, \%myconfig)); } } - # 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}; @@ -737,6 +745,7 @@ sub post { my $locale = $main::locale; $main::auth->assert('invoice_edit'); + $form->mtime_ischanged('ar'); $form->{defaultcurrency} = $form->get_default_currency(\%myconfig); $form->isblank("invdate", $locale->text('Invoice Date missing!')); @@ -750,7 +759,7 @@ sub post { # if oldcustomer ne customer redo form if (&check_name('customer')) { &update; - ::end_of_request(); + $::dispatcher->end_request; } if ($myconfig{mandatory_departments} && !$form->{department_id}) { @@ -783,8 +792,13 @@ sub post { $form->isblank("datepaid_$i", $locale->text('Payment date missing!')); + $form->error($locale->text('Cannot post transaction above the maximum future booking date!')) + if ($form->date_max_future($form->{"datepaid_$i"}, \%myconfig)); + + #Zusätzlich noch das Buchungsdatum in die Bücherkontrolle einbeziehen + # (Dient zur Prüfung ob ZE oder ZA geprüft werden soll) $form->error($locale->text('Cannot post payment for a closed period!')) - if ($form->date_closed($form->{"datepaid_$i"}, \%myconfig)); + if ($form->date_closed($form->{"datepaid_$i"}) && !$form->date_closed($form->{"gldate_$i"}, \%myconfig)); if ($form->{currency} ne $form->{defaultcurrency}) { $form->{"exchangerate_$i"} = $form->{exchangerate} @@ -853,8 +867,6 @@ sub post { } } - remove_draft() if $form->{remove_draft}; - if(!exists $form->{addition}) { $form->{snumbers} = 'invnumber' .'_'. $form->{invnumber}; # ($form->{type} eq 'credit_note' ? 'cnnumber' : 'invnumber') .'_'. $form->{invnumber}; $form->{what_done} = 'invoice'; @@ -954,6 +966,8 @@ sub storno { $form->{paidaccounts} = 0; map { my $key = $_; delete $form->{$key} if grep { $key =~ /^$_/ } qw(datepaid_ gldate_ acc_trans_id_ source_ memo_ paid_ exchangerate_ AR_paid_) } keys %{ $form }; + # record link invoice to storno + $form->{convert_from_ar_ids} = $form->{id}; $form->{storno_id} = $form->{id}; $form->{storno} = 1; $form->{id} = ""; @@ -961,7 +975,8 @@ sub storno { $form->{invdate} = DateTime->today->to_lxoffice; $form->{rowcount}++; # set new ids for storno invoice - delete $form->{"invoice_id_$_"} for 1 .. $form->{"rowcount"}; + # set new persistent ids for storno invoice items + $form->{"converted_from_invoice_id_$_"} = delete $form->{"invoice_id_$_"} for 1 .. $form->{"rowcount"}; post(); $main::lxdebug->leave_sub(); @@ -983,49 +998,6 @@ sub preview { } -sub delete { - $main::lxdebug->enter_sub(); - - my $form = $main::form; - my $locale = $main::locale; - - $main::auth->assert('invoice_edit'); - - if ($form->{second_run}) { - $form->{print_and_post} = 0; - } - $form->header; - - print qq| -
-|; - - # delete action variable - map { delete $form->{$_} } qw(action header); - - foreach my $key (keys %$form) { - next if (($key eq 'login') || ($key eq 'password') || ('' ne ref $form->{$key})); - $form->{$key} =~ s/\"/"/g; - print qq|\n|; - } - - print qq| -

| . $locale->text('Confirm!') . qq|

- -

| - . $locale->text('Are you sure you want to delete Invoice Number') - . qq| $form->{invnumber} -

- -

- -

-|; - - $main::lxdebug->leave_sub(); -} - sub credit_note { $main::lxdebug->enter_sub(); @@ -1093,29 +1065,42 @@ sub credit_note { $main::lxdebug->leave_sub(); } -sub yes { - $main::lxdebug->enter_sub(); +sub display_form { + $::lxdebug->enter_sub; - my $form = $main::form; - my %myconfig = %main::myconfig; - my $locale = $main::locale; + $::auth->assert('invoice_edit'); - $main::auth->assert('invoice_edit'); + relink_accounts(); + + my $new_rowcount = $::form->{"rowcount"} * 1 + 1; + $::form->{"project_id_${new_rowcount}"} = $::form->{"globalproject_id"}; + + $::form->language_payment(\%::myconfig); - if (IS->delete_invoice(\%myconfig, \%$form)) { + Common::webdav_folder($::form); + + form_header(); + display_row(++$::form->{rowcount}); + form_footer(); + + $::lxdebug->leave_sub; +} + +sub delete { + $::auth->assert('invoice_edit'); + + if (IS->delete_invoice(\%::myconfig, $::form)) { # saving the history - if(!exists $form->{addition}) { - $form->{snumbers} = 'invnumber' .'_'. $form->{invnumber}; # ($form->{type} eq 'credit_note' ? 'cnnumber' : 'invnumber') .'_'. $form->{invnumber}; - $form->{what_done} = 'invoice'; - $form->{addition} = "DELETED"; - $form->save_history; + if(!exists $::form->{addition}) { + $::form->{snumbers} = 'invnumber' .'_'. $::form->{invnumber}; + $::form->{what_done} = 'invoice'; + $::form->{addition} = "DELETED"; + $::form->save_history; } # /saving the history - $form->redirect($locale->text('Invoice deleted!')); + $::form->redirect($::locale->text('Invoice deleted!')); } - $form->error($locale->text('Cannot delete invoice!')); - - $main::lxdebug->leave_sub(); + $::form->error($::locale->text('Cannot delete invoice!')); } sub post_and_e_mail { @@ -1143,3 +1128,18 @@ sub e_mail { $main::lxdebug->leave_sub(); } + +sub dispatcher { + for my $action (qw( + print update ship_to e_mail storno post_payment use_as_new credit_note + delete post order preview post_and_e_mail print_and_post + mark_as_paid + )) { + if ($::form->{"action_$action"}) { + call_sub($action); + return; + } + } + + $::form->error($::locale->text('No action defined.')); +}