X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=bin%2Fmozilla%2Fir.pl;h=440ee6e4064035e56fc3e861e193bd141c86a143;hb=7011fd23ae5457ee62f14a3ff37af5a344f4041d;hp=9cdb6d7d995ad581acfa6baa876991a13ca0f2f9;hpb=52983c089cf1b4f1a4451e57ffa76f846c4791ba;p=kivitendo-erp.git diff --git a/bin/mozilla/ir.pl b/bin/mozilla/ir.pl index 9cdb6d7d9..440ee6e40 100644 --- a/bin/mozilla/ir.pl +++ b/bin/mozilla/ir.pl @@ -31,12 +31,14 @@ # #====================================================================== +use SL::FU; use SL::IR; use SL::IS; use SL::PE; -use List::Util qw(max); +use List::Util qw(max sum); require "bin/mozilla/io.pl"; +require "bin/mozilla/invoice_io.pl"; require "bin/mozilla/arap.pl"; require "bin/mozilla/common.pl"; require "bin/mozilla/drafts.pl"; @@ -48,6 +50,8 @@ require "bin/mozilla/drafts.pl"; sub add { $lxdebug->enter_sub(); + $auth->assert('vendor_invoice_edit'); + return $lxdebug->leave_sub() if (load_draft_maybe()); $form->{title} = $locale->text('Add Vendor Invoice'); @@ -61,11 +65,13 @@ sub add { sub edit { $lxdebug->enter_sub(); - + + $auth->assert('vendor_invoice_edit'); + # show history button $form->{javascript} = qq||; #/show hhistory button - + $form->{title} = $locale->text('Edit Vendor Invoice'); &invoice_links; @@ -78,6 +84,8 @@ sub edit { sub invoice_links { $lxdebug->enter_sub(); + $auth->assert('vendor_invoice_edit'); + # create links $form->{webdav} = $webdav; $form->{jsscript} = 1; @@ -108,7 +116,7 @@ sub invoice_links { IR->get_vendor(\%myconfig, \%$form); IR->retrieve_invoice(\%myconfig, \%$form); $form->{cp_id} = $cp_id; - + if ($payment_id) { $form->{payment_id} = $payment_id; } @@ -181,6 +189,8 @@ sub invoice_links { sub prepare_invoice { $lxdebug->enter_sub(); + $auth->assert('vendor_invoice_edit'); + if ($form->{id}) { map { $form->{$_} =~ s/\"/"/g } qw(invnumber ordnumber quonumber); @@ -214,6 +224,10 @@ sub prepare_invoice { sub form_header { $lxdebug->enter_sub(); + $auth->assert('vendor_invoice_edit'); + + push @{ $form->{AJAX} }, CGI::Ajax->new('set_duedate_vendor' => "$form->{script}?action=set_duedate_vendor"); + # set option selected foreach $item (qw(AP vendor currency department)) { $form->{"select$item"} =~ s/ selected//; @@ -243,14 +257,15 @@ sub form_header { my @old_project_ids = ($form->{"globalproject_id"}); map { push @old_project_ids, $form->{"project_id_$_"} if $form->{"project_id_$_"}; } 1..$form->{"rowcount"}; - $form->get_lists("contacts" => "ALL_CONTACTS", - "projects" => { "key" => "ALL_PROJECTS", - "all" => 0, - "old_id" => \@old_project_ids }, - "taxzones" => "ALL_TAXZONES", - "employees" => "ALL_SALESMEN", - "currencies" => "ALL_CURRENCIES", - "vendors" => "ALL_VENDORS"); + $form->get_lists("contacts" => "ALL_CONTACTS", + "projects" => { "key" => "ALL_PROJECTS", + "all" => 0, + "old_id" => \@old_project_ids }, + "taxzones" => "ALL_TAXZONES", + "employees" => "ALL_SALESMEN", + "currencies" => "ALL_CURRENCIES", + "vendors" => "ALL_VENDORS", + "price_factors" => "ALL_PRICE_FACTORS"); my %labels; my @values = (undef); @@ -278,7 +293,7 @@ sub form_header { } my $globalprojectnumber = NTI($cgi->popup_menu('-name' => 'globalproject_id', '-values' => \@values, '-labels' => \%labels, '-default' => $form->{"globalproject_id"})); - + %labels = (); @values = (); my $i = 0; @@ -286,7 +301,7 @@ sub form_header { push(@values, $item); $labels{$item} = $item; } - + $form->{currency} = $form->{defaultcurrency} unless $form->{currency}; my $currencies; if (scalar @values) { @@ -332,7 +347,7 @@ sub form_header { : (NTI($cgi->popup_menu('-name' => 'vendor', '-default' => $form->{oldvendor}, '-onChange' => 'document.getElementById(\'update_button\').click();', '-values' => \@values, '-labels' => \%labels, '-style' => 'width: 250px')))) . qq| - + |; %labels = (); @@ -376,21 +391,33 @@ sub form_header { $jsscript = ""; $button1 = qq| - - text('button') . qq|>\n|; + + + + \n|; + +#, 'old_duedate__'' + document.getElementsByName('duedate')[0].value, 'vendor_id__' + document.getElementsByName('vendor_id')[0].value],['duedate'])"> $button2 = qq| - - text('button') . qq|>\n|; + + + text('button') . qq|> + \n|; #write Trigger $jsscript = - Form->write_trigger(\%myconfig, "2", + Form->write_trigger(\%myconfig, "2", "invdate", "BL", "trigger1", "duedate", "BL", "trigger2"); + my $follow_up_vc = $form->{vendor}; + $follow_up_vc =~ s/--\d*\s*$//; + my $follow_up_trans_info = "$form->{invnumber} ($follow_up_vc)"; + $form->{javascript} .= qq||; $form->{javascript} .= qq||; $form->{javascript} .= qq||; + $form->{javascript} .= qq||; $jsscript .= $form->write_trigger(\%myconfig, 2, "orddate", "BL", "trigger_orddate", "quodate", "BL", "trigger_quodate"); @@ -400,13 +427,14 @@ sub form_header { $onload .= qq|;setupPoints('|. $myconfig{numberformat} .qq|', '|. $locale->text("wrongformat") .qq|')|; print qq| - -
{script}> + + |; $form->hide_form(qw(id title vc type level creditlimit creditremaining closedto locked shippted storno storno_id max_dunning_level dunning_amount vendor_id oldvendor selectvendor taxaccounts - fxgain_accno fxloss_accno taxpart taxservice), + fxgain_accno fxloss_accno taxpart taxservice cursor_fokus + convert_from_oe_ids convert_from_do_ids), map { $_.'_rate', $_.'_description' } split / /, $form->{taxaccounts} ); print qq|

$form->{saved_message}

| if $form->{saved_message}; @@ -441,7 +469,7 @@ sub form_header { $employees - + @@ -497,6 +525,8 @@ $jsscript sub form_footer { $lxdebug->enter_sub(); + $auth->assert('vendor_invoice_edit'); + $form->{invtotal} = $form->{invsubtotal}; if (($rows = $form->numtextrows($form->{notes}, 25, 8)) < 2) { @@ -594,6 +624,20 @@ sub form_footer { $form->{invtotal} = $form->format_amount(\%myconfig, $form->{invtotal}, 2, 0); + my $follow_ups_block; + if ($form->{id}) { + my $follow_ups = FU->follow_ups('trans_id' => $form->{id}); + + if (@{ $follow_ups} ) { + my $num_due = sum map { $_->{due} * 1 } @{ $follow_ups }; + $follow_ups_block = qq| + + + +|; + } + } + print qq| + $follow_ups_block
| . $locale->text('Invoice Number') . qq|
| . $locale->text("There are #1 unfinished follow-ups of which #2 are due.", scalar @{ $follow_ups }, $num_due) . qq|
@@ -609,6 +653,7 @@ sub form_footer { $notes $intnotes
@@ -732,9 +777,9 @@ sub form_footer { qq| |; $column_data{"source_$i"} = - qq|{"source_$i"}>|; + qq||; $column_data{"memo_$i"} = - qq|{"memo_$i"}>|; + qq||; map { print qq|$column_data{"${_}_$i"}\n| } @column_index; @@ -781,7 +826,7 @@ sub form_footer { |; if ($form->{id}) { - my $show_storno = !$form->{storno} && !IS->has_storno(\%myconfig, $form, "ap"); + my $show_storno = !$form->{storno} && !IS->has_storno(\%myconfig, $form, "ap") && (($totalpaid == 0) || ($totalpaid eq "")); print qq| @@ -797,6 +842,9 @@ sub form_footer { } print qq| + |; } @@ -809,7 +857,7 @@ sub form_footer { } print $form->write_trigger(\%myconfig, scalar(@triggers) / 3, @triggers); - $form->hide_form(qw(rowcount callback draft_id draft_description login password)); + $form->hide_form(qw(rowcount callback draft_id draft_description vendor_discount)); # button for saving history if($form->{id} ne "") { @@ -821,14 +869,13 @@ sub form_footer { . qq|">|; } # /button for saving history - # mark_as_paid button - if($form->{id} ne "") { - print qq| |; } # /mark_as_paid button print qq|
- |; @@ -838,25 +885,31 @@ print qq| sub mark_as_paid { $lxdebug->enter_sub(); - &mark_as_paid_common(\%myconfig,"ap"); + + $auth->assert('vendor_invoice_edit'); + + &mark_as_paid_common(\%myconfig,"ap"); + $lxdebug->leave_sub(); } sub update { $lxdebug->enter_sub(); + $auth->assert('vendor_invoice_edit'); + map { $form->{$_} = $form->parse_amount(\%myconfig, $form->{$_}) } qw(exchangerate creditlimit creditremaining); &check_name(vendor); - $form->{exchangerate} = $exchangerate if - $form->{forex} = $exchangerate = $form->check_exchangerate(\%myconfig, $form->{currency}, $form->{invdate}, 'sell'); + $form->{forex} = $form->check_exchangerate(\%myconfig, $form->{currency}, $form->{invdate}, 'sell'); + $form->{exchangerate} = $form->{forex} if $form->{forex}; for $i (1 .. $form->{paidaccounts}) { next unless $form->{"paid_$i"}; map { $form->{"${_}_$i"} = $form->parse_amount(\%myconfig, $form->{"${_}_$i"}) } qw(paid exchangerate); - $form->{"exchangerate_$i"} = $exchangerate if - $form->{"forex_$i"} = $exchangerate = $form->check_exchangerate(\%myconfig, $form->{currency}, $form->{"datepaid_$i"}, 'sell'); + $form->{"forex_$i"} = $form->check_exchangerate(\%myconfig, $form->{currency}, $form->{"datepaid_$i"}, 'sell'); + $form->{"exchangerate_$i"} = $form->{"forex_$i"} if $form->{"forex_$i"}; } $i = $form->{rowcount}; @@ -887,9 +940,14 @@ sub update { # override sellprice if there is one entered $sellprice = $form->parse_amount(\%myconfig, $form->{"sellprice_$i"}); + # ergaenzung fuer bug 736 Lieferanten-Rabatt auch in Einkaufsrechnungen vorbelegen jb + $form->{"discount_$i"} = $form->format_amount(\%myconfig, + $form->{vendor_discount} * 100 ); 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}; + ($sellprice || $form->{"sellprice_$i"}) =~ /\.(\d+)/; $decimalplaces = max 2, length $1; @@ -932,6 +990,8 @@ sub update { sub storno { $lxdebug->enter_sub(); + $auth->assert('vendor_invoice_edit'); + if ($form->{storno}) { $form->error($locale->text('Cannot storno storno invoice!')); } @@ -948,15 +1008,15 @@ 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 }; - + # saving the history if(!exists $form->{addition} && $form->{id} ne "") { - $form->{snumbers} = qq|invnumber_| . $form->{invnumber}; + $form->{snumbers} = qq|invnumber_| . $form->{invnumber}; $form->{addition} = "CANCELED"; $form->save_history($form->dbconnect(\%myconfig)); } # /saving the history - + $form->{storno_id} = $form->{id}; $form->{storno} = 1; $form->{id} = ""; @@ -971,6 +1031,8 @@ sub storno { sub use_as_template { $lxdebug->enter_sub(); + $auth->assert('vendor_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); $form->{paidaccounts} = 1; $form->{rowcount}--; @@ -983,6 +1045,8 @@ sub use_as_template { sub post_payment { $lxdebug->enter_sub(); + $auth->assert('vendor_invoice_edit'); + $form->{defaultcurrency} = $form->get_default_currency(\%myconfig); for $i (1 .. $form->{paidaccounts}) { if ($form->{"paid_$i"}) { @@ -991,7 +1055,7 @@ sub post_payment { $form->isblank("datepaid_$i", $locale->text('Payment date missing!')); $form->error($locale->text('Cannot post payment for a closed period!')) - if ($datepaid <= $closedto); + if ($form->date_closed($form->{"datepaid_$i"}, \%myconfig)); if ($form->{currency} ne $form->{defaultcurrency}) { $form->{"exchangerate_$i"} = $form->{exchangerate} @@ -1025,10 +1089,13 @@ sub post_payment { sub post { $lxdebug->enter_sub(); + $auth->assert('vendor_invoice_edit'); + $form->{defaultcurrency} = $form->get_default_currency(\%myconfig); - $form->isblank("invdate", $locale->text('Invoice Date missing!')); - $form->isblank("vendor", $locale->text('Vendor missing!')); + $form->isblank("invdate", $locale->text('Invoice Date missing!')); + $form->isblank("vendor", $locale->text('Vendor missing!')); + $form->isblank("invnumber", $locale->text('Invnumber missing!')); $form->{invnumber} =~ s/^\s*//g; $form->{invnumber} =~ s/\s*$//g; @@ -1045,7 +1112,7 @@ sub post { $invdate = $form->datetonum($form->{invdate}, \%myconfig); $form->error($locale->text('Cannot post invoice for a closed period!')) - if ($invdate <= $closedto); + if ($form->date_closed($form->{"datepaid_$i"}, \%myconfig)); $form->isblank("exchangerate", $locale->text('Exchangerate missing!')) if ($form->{currency} ne $form->{defaultcurrency}); @@ -1057,7 +1124,7 @@ sub post { $form->isblank("datepaid_$i", $locale->text('Payment date missing!')); $form->error($locale->text('Cannot post payment for a closed period!')) - if ($datepaid <= $closedto); + if ($form->date_closed($form->{"datepaid_$i"}, \%myconfig)); if ($form->{currency} ne $form->{defaultcurrency}) { $form->{"exchangerate_$i"} = $form->{exchangerate} @@ -1070,7 +1137,7 @@ sub post { ($form->{AP}) = split /--/, $form->{AP}; ($form->{AP_paid}) = split /--/, $form->{AP_paid}; - $form->{storno} = 0; + $form->{storno} ||= 0; $form->{id} = 0 if $form->{postasnew}; @@ -1079,7 +1146,7 @@ sub post { if (IR->post_invoice(\%myconfig, \%$form)){ # saving the history if(!exists $form->{addition} && $form->{id} ne "") { - $form->{snumbers} = qq|invnumber_| . $form->{invnumber}; + $form->{snumbers} = qq|invnumber_| . $form->{invnumber}; $form->{addition} = "POSTED"; #$form->{what_done} = $locale->text("Rechnungsnummer") . qq| | . $form->{invnumber}; $form->save_history($form->dbconnect(\%myconfig)); @@ -1098,6 +1165,8 @@ sub post { sub delete { $lxdebug->enter_sub(); + $auth->assert('vendor_invoice_edit'); + $form->header; print qq| @@ -1109,6 +1178,7 @@ sub delete { map { delete $form->{$_} } qw(action header); foreach $key (keys %$form) { + next if (($key eq 'login') || ($key eq 'password') || ('' ne ref $form->{$key})); $form->{$key} =~ s/\"/"/g; print qq|\n|; } @@ -1130,17 +1200,30 @@ sub delete { sub yes { $lxdebug->enter_sub(); + + $auth->assert('vendor_invoice_edit'); + if (IR->delete_invoice(\%myconfig, \%$form)) { # saving the history if(!exists $form->{addition}) { - $form->{snumbers} = qq|invnumber_| . $form->{invnumber}; + $form->{snumbers} = qq|invnumber_| . $form->{invnumber}; $form->{addition} = "DELETED"; $form->save_history($form->dbconnect(\%myconfig)); } - # /saving the history + # /saving the history $form->redirect($locale->text('Invoice deleted!')); } $form->error($locale->text('Cannot delete invoice!')); $lxdebug->leave_sub(); } + +sub set_duedate_vendor { + $lxdebug->enter_sub(); + + print $form->ajax_response_header(), IR->get_duedate('vendor_id' => $form->{vendor_id}, + 'invdate' => $form->{invdate}, + 'default' => $form->{old_duedate}); + + $lxdebug->leave_sub(); +}