X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=bin%2Fmozilla%2Fir.pl;h=00d85443c9d9a88c2eb0c97b7182baeb7a19c139;hb=b3caa17585a69e0c5092483f709dd1227b9acaaf;hp=f4970e43c10d1902fba5ca49dccb18ee453fe7a8;hpb=544f83800e6f90112934ba965970eec9da7d8f5d;p=kivitendo-erp.git diff --git a/bin/mozilla/ir.pl b/bin/mozilla/ir.pl index f4970e43c..00d85443c 100644 --- a/bin/mozilla/ir.pl +++ b/bin/mozilla/ir.pl @@ -59,7 +59,7 @@ sub add { return $main::lxdebug->leave_sub() if (load_draft_maybe()); - $form->{title} = $locale->text('Add Vendor Invoice'); + $form->{title} = $locale->text('Record Vendor Invoice'); &invoice_links; &prepare_invoice; @@ -100,7 +100,7 @@ sub invoice_links { $form->{vc} = 'vendor'; # create links - $form->{webdav} = $main::webdav; + $form->{webdav} = $::lx_office_conf{features}->{webdav}; $form->{jsscript} = 1; $form->create_links("AP", \%myconfig, "vendor"); @@ -171,7 +171,7 @@ sub invoice_links { foreach my $key (keys %{ $form->{AP_links} }) { foreach my $ref (@{ $form->{AP_links}{$key} }) { - $form->{"select$key"} .= ""; } next unless $form->{acc_trans}{$key}; @@ -258,14 +258,13 @@ 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}; $form->{salesman_id} = $form->{old_salesman_id} if $form->{old_salesman_id}; $form->{defaultcurrency} = $form->get_default_currency(\%myconfig); - $form->{radier} = ($form->current_date(\%myconfig) eq $form->{gldate}) ? 1 : 0; my $set_duedate_url = "$form->{script}?action=set_duedate"; @@ -283,6 +282,7 @@ sub form_header { "taxzones" => "ALL_TAXZONES", "currencies" => "ALL_CURRENCIES", "vendors" => "ALL_VENDORS", + "departments" => "all_departments", "price_factors" => "ALL_PRICE_FACTORS"); $TMPL_VAR{sales_employee_labels} = sub { $_[0]->{name} || $_[0]->{login} }; @@ -353,368 +353,69 @@ sub form_footer { my $form = $main::form; my %myconfig = %main::myconfig; my $locale = $main::locale; - my $cgi = $main::cgi; - - $main::auth->assert('vendor_invoice_edit'); - $form->{invtotal} = $form->{invsubtotal}; - - my ($rows, $introws); - if (($rows = $form->numtextrows($form->{notes}, 25, 8)) < 2) { - $rows = 2; - } - if (($introws = $form->numtextrows($form->{intnotes}, 35, 8)) < 2) { - $introws = 2; - } - $rows = ($rows > $introws) ? $rows : $introws; - my $notes = - qq||; - my $intnotes = - qq||; - - $form->{taxincluded} = ($form->{taxincluded}) ? "checked" : ""; - - my $taxincluded = ""; - if ($form->{taxaccounts}) { - $taxincluded = qq| - {taxincluded}> | - . $locale->text('Tax Included') . qq| -|; - } - - my ($tax, $subtotal); - if (!$form->{taxincluded}) { - - foreach my $item (split / /, $form->{taxaccounts}) { - if ($form->{"${item}_base"}) { - $form->{invtotal} += $form->{"${item}_total"} = - $form->round_amount( - $form->{"${item}_base"} * $form->{"${item}_rate"}, - 2); - $form->{"${item}_total"} = - $form->format_amount(\%myconfig, $form->{"${item}_total"}, 2); - - $tax .= qq| - - $form->{"${item}_description"} | - . $form->{"${item}_rate"} * 100 .qq|% - $form->{"${item}_total"} - -|; - } - } + $main::auth->assert('invoice_edit'); - $form->{invsubtotal} = - $form->format_amount(\%myconfig, $form->{invsubtotal}, 2, 0); + $form->{invtotal} = $form->{invsubtotal}; + $form->{oldinvtotal} = $form->{invtotal}; - $subtotal = qq| - - | . $locale->text('Subtotal') . qq| - $form->{invsubtotal} - -|; + # note rows + $form->{rows} = max 2, + $form->numtextrows($form->{notes}, 26, 8), + $form->numtextrows($form->{intnotes}, 35, 8); - } - if ($form->{taxincluded}) { - foreach my $item (split / /, $form->{taxaccounts}) { - if ($form->{"${item}_base"}) { - $form->{"${item}_total"} = - $form->round_amount( - ($form->{"${item}_base"} * $form->{"${item}_rate"} / - (1 + $form->{"${item}_rate"}) - ), - 2); - $form->{"${item}_base"} = - $form->round_amount($form->{"${item}_base"}, 2); - $form->{"${item}_netto"} = - $form->round_amount( - ($form->{"${item}_base"} - $form->{"${item}_total"}), - 2); - $form->{"${item}_netto"} = - $form->format_amount(\%myconfig, $form->{"${item}_netto"}, 2); - $form->{"${item}_total"} = - $form->format_amount(\%myconfig, $form->{"${item}_total"}, 2); - - $tax .= qq| - - Enthaltene $form->{"${item}_description"} | - . $form->{"${item}_rate"} * 100 .qq|% - $form->{"${item}_total"} - - - Nettobetrag - $form->{"${item}_netto"} - -|; + # tax, total and subtotal calculations + my ($tax, $subtotal); + $form->{taxaccounts_array} = [ split / /, $form->{taxaccounts} ]; + + foreach my $item (@{ $form->{taxaccounts_array} }) { + if ($form->{"${item}_base"}) { + if ($form->{taxincluded}) { + $form->{"${item}_total"} = $form->round_amount( ($form->{"${item}_base"} * $form->{"${item}_rate"} + / (1 + $form->{"${item}_rate"})), 2); + $form->{"${item}_netto"} = $form->round_amount( ($form->{"${item}_base"} - $form->{"${item}_total"}), 2); + } else { + $form->{"${item}_total"} = $form->round_amount( $form->{"${item}_base"} * $form->{"${item}_rate"}, 2); + $form->{invtotal} += $form->{"${item}_total"}; } } - } - $form->{oldinvtotal} = $form->{invtotal}; - $form->{invtotal} = - $form->format_amount(\%myconfig, $form->{invtotal}, 2, 0); - - my $follow_ups_block; + # follow ups 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| - - | . $locale->text("There are #1 unfinished follow-ups of which #2 are due.", scalar @{ $follow_ups }, $num_due) . qq| - -|; - } - } - - our $colspan; - print qq| - - - - - - - -
- - - - - - - - - - $follow_ups_block -
| . $locale->text('Notes') . qq|| . $locale->text('Internal Notes') . qq|
$notes$intnotes
-
- $taxincluded -
- - $subtotal - $tax - - - - -
| . $locale->text('Total') . qq|$form->{invtotal}
-
- - -|; - my $webdav_list; - if ($main::webdav) { - $webdav_list = qq| - -
- - - Dokumente im Webdav-Repository - - - - -|; - foreach my $file (@{ $form->{WEBDAV} }) { - $webdav_list .= qq| - - - - -|; - } - $webdav_list .= qq| -
DateinameWebdavlink
$file->{name}$file->{type}
- -|; - - print $webdav_list; - } - print qq| - - - - - - -|; - - my @column_index; - if ($form->{currency} eq $form->{defaultcurrency}) { - @column_index = qw(datepaid source memo paid AP_paid); - } else { - @column_index = qw(datepaid source memo paid exchangerate AP_paid); + $form->{follow_ups} = FU->follow_ups('trans_id' => $form->{id}) || []; + $form->{follow_ups_unfinished} = ( sum map { $_->{due} * 1 } @{ $form->{follow_ups} } ) || 0; } - my %column_data; - $column_data{datepaid} = ""; - $column_data{paid} = ""; - $column_data{exchangerate} = ""; - $column_data{AP_paid} = ""; - $column_data{source} = ""; - $column_data{memo} = ""; - - print qq| - -|; - map { print "$column_data{$_}\n" } @column_index; - print qq| - -|; - - my @triggers = (); + # payments my $totalpaid = 0; - $form->{paidaccounts}++ if ($form->{"paid_$form->{paidaccounts}"}); - for my $i (1 .. $form->{paidaccounts}) { + $form->{paid_indices} = [ 1 .. $form->{paidaccounts} ]; - print qq| - -|; + # Standard Konto für Umlaufvermögen + my $accno_arap = IS->get_standard_accno_current_assets(\%myconfig, \%$form); + for my $i (1 .. $form->{paidaccounts}) { $form->{"selectAP_paid_$i"} = $form->{selectAP_paid}; - $form->{"selectAP_paid_$i"} =~ - s/option>\Q$form->{"AP_paid_$i"}\E/option selected>$form->{"AP_paid_$i"}/; - - $totalpaid += $form->{"paid_$i"}; - - # format amounts - if ($form->{"paid_$i"}) { - $form->{"paid_$i"} = - $form->format_amount(\%myconfig, $form->{"paid_$i"}, 2); - } - $form->{"exchangerate_$i"} = - $form->format_amount(\%myconfig, $form->{"exchangerate_$i"}); - - my $exchangerate = qq| |; - if ($form->{currency} ne $form->{defaultcurrency}) { - if ($form->{"forex_$i"}) { - $exchangerate = - qq|{"exchangerate_$i"}>$form->{"exchangerate_$i"}|; - } else { - $exchangerate = - qq|{"exchangerate_$i"}>|; - } + if (!$form->{"AP_paid_$i"}) { + $form->{"selectAP_paid_$i"} =~ s/option>$accno_arap--(.*?)>/option selected>$accno_arap--$1>/; + } else { + $form->{"selectAP_paid_$i"} =~ s/option>\Q$form->{"AP_paid_$i"}\E/option selected>$form->{"AP_paid_$i"}/; } - $exchangerate .= qq| -{"forex_$i"}> -|; - - $column_data{"paid_$i"} = - qq||; - $column_data{"exchangerate_$i"} = qq||; - $column_data{"AP_paid_$i"} = - qq||; - $column_data{"datepaid_$i"} = - qq||; - $column_data{"source_$i"} = - qq||; - $column_data{"memo_$i"} = - qq||; - - map { print qq|$column_data{"${_}_$i"}\n| } @column_index; - - print qq| - -|; - push(@triggers, "datepaid_$i", "BL", "trigger_datepaid_$i"); - } - - my $paid_missing = $form->{oldinvtotal} - $totalpaid; - - print qq| - - - - - - - - - - - - - - {oldinvtotal}> - {paidaccounts}> - -
| . $locale->text('Payments') . qq|
" . $locale->text('Date') . "" . $locale->text('Amount') . "" . $locale->text('Exch') . "" . $locale->text('Account') . "" . $locale->text('Source') . "" . $locale->text('Memo') . "
$exchangerate -
| . $locale->text('Total') . qq|| . H($form->format_amount(\%myconfig, $totalpaid, 2)) . qq|
| . $locale->text('Missing amount') . qq|| . H($form->format_amount(\%myconfig, $paid_missing, 2)) . qq|
- - - -
- - -
-|; - - my $invdate = $form->datetonum($form->{invdate}, \%myconfig); - my $closedto = $form->datetonum($form->{closedto}, \%myconfig); - print qq| -|; - - if ($form->{id}) { - my $show_storno = !$form->{storno} && !IS->has_storno(\%myconfig, $form, "ap") && (($totalpaid == 0) || ($totalpaid eq "")); - - print qq| -|; - print qq| -| if ($show_storno); - if ($form->{radier}) { - print qq| - -|; - } - print qq| - -|; - - } - - if (!$form->{id} && ($invdate > $closedto)) { - print qq| | . - NTI($cgi->submit('-name' => 'action', '-value' => $locale->text('Save draft'), - '-class' => 'submit')); + $totalpaid += $form->{"paid_$i"}; } - print $form->write_trigger(\%myconfig, scalar(@triggers) / 3, @triggers); - $form->hide_form(qw(rowcount callback draft_id draft_description vendor_discount)); - - # button for saving history - if($form->{id} ne "") { - print qq| - |; - } - # /button for saving history - # mark_as_paid button - if($form->{id} ne "") { - print qq| |; - } - # /mark_as_paid button -print qq| - - -|; + print $form->parse_html_template('ir/form_footer', { + is_type_credit_note => ($form->{type} eq "credit_note"), + totalpaid => $totalpaid, + paid_missing => $form->{invtotal} - $totalpaid, + show_storno => $form->{id} && !$form->{storno} && !IS->has_storno(\%myconfig, $form, "ap") && !$totalpaid, + show_delete => ($form->current_date(\%myconfig) eq $form->{gldate}), + }); +##print $form->parse_html_template('ir/_payments'); # parser +##print $form->parse_html_template('webdav/_list'); # parser $main::lxdebug->leave_sub(); } @@ -770,21 +471,20 @@ sub update { my $rows = scalar @{ $form->{item_list} }; if ($rows) { - $form->{"qty_$i"} = 1 unless ($form->{"qty_$i"}); + $form->{"qty_$i"} = 1 unless $form->parse_amount(\%myconfig, $form->{"qty_$i"}); if ($rows > 1) { &select_item; - exit; + ::end_of_request(); } else { # override sellprice if there is one entered my $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 ); + # 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] }; @@ -860,7 +560,7 @@ sub storno { if(!exists $form->{addition} && $form->{id} ne "") { $form->{snumbers} = qq|invnumber_| . $form->{invnumber}; $form->{addition} = "CANCELED"; - $form->save_history($form->dbconnect(\%myconfig)); + $form->save_history; } # /saving the history @@ -921,14 +621,14 @@ sub post_payment { ($form->{AP}) = split /--/, $form->{AP}; ($form->{AP_paid}) = split /--/, $form->{AP_paid}; if (IR->post_payment(\%myconfig, \%$form)){ - if (!exists $form->{addition} && $form->{id} ne "") { - # saving the history + if (!exists $form->{addition} && $form->{id} ne "") { + # saving the history $form->{snumbers} = qq|invnumber_| . $form->{invnumber}; - $form->{addition} = "PAYMENT POSTED"; + $form->{addition} = "PAYMENT POSTED"; $form->{what_done} = $form->{currency} . qq| | . $form->{paid} . qq| | . $locale->text("POSTED"); - $form->save_history($form->dbconnect(\%myconfig)); - # /saving the history - } + $form->save_history; + # /saving the history + } $form->redirect($locale->text('Payment posted!')); } @@ -972,9 +672,16 @@ sub post { # if the vendor changed get new values if (&check_name('vendor')) { &update; + ::end_of_request(); + } + + if ($myconfig{mandatory_departments} && !$form->{department_id}) { + $form->{saved_message} = $::locale->text('You have to specify a department.'); + update(); exit; } + remove_emptied_rows(); &validate_items; my $closedto = $form->datetonum($form->{closedto}, \%myconfig); @@ -1014,16 +721,16 @@ sub post { relink_accounts(); if (IR->post_invoice(\%myconfig, \%$form)){ - # saving the history - if(!exists $form->{addition} && $form->{id} ne "") { + # saving the history + if(!exists $form->{addition} && $form->{id} ne "") { $form->{snumbers} = qq|invnumber_| . $form->{invnumber}; $form->{addition} = "POSTED"; - #$form->{what_done} = $locale->text("Rechnungsnummer") . qq| | . $form->{invnumber}; - $form->save_history($form->dbconnect(\%myconfig)); - } - # /saving the history + #$form->{what_done} = $locale->text("Rechnungsnummer") . qq| | . $form->{invnumber}; + $form->save_history; + } + # /saving the history remove_draft() if $form->{remove_draft}; - $form->redirect( $locale->text('Invoice') + $form->redirect( $locale->text('Invoice') . " $form->{invnumber} " . $locale->text('posted!')); } @@ -1084,8 +791,8 @@ sub yes { # saving the history if(!exists $form->{addition}) { $form->{snumbers} = qq|invnumber_| . $form->{invnumber}; - $form->{addition} = "DELETED"; - $form->save_history($form->dbconnect(\%myconfig)); + $form->{addition} = "DELETED"; + $form->save_history; } # /saving the history $form->redirect($locale->text('Invoice deleted!'));