X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=bin%2Fmozilla%2Far.pl;h=d6f55ff812d13d28f872311c50984fd1746410a2;hb=89dd4ca84494de24ac1ecc7bd3b84fdd35e28020;hp=d6f91e99f882746e14ad3e1edf79dcf2b55fd6b3;hpb=755dcacefa2cf4e73b50402b20a9a2e1febed97d;p=kivitendo-erp.git diff --git a/bin/mozilla/ar.pl b/bin/mozilla/ar.pl index d6f91e99f..d6f55ff81 100644 --- a/bin/mozilla/ar.pl +++ b/bin/mozilla/ar.pl @@ -31,14 +31,17 @@ # #====================================================================== +use POSIX qw(strftime); + use SL::AR; use SL::IS; use SL::PE; -use Data::Dumper; +use SL::ReportGenerator; require "bin/mozilla/arap.pl"; require "bin/mozilla/common.pl"; require "bin/mozilla/drafts.pl"; +require "bin/mozilla/report_generator.pl"; 1; @@ -177,112 +180,7 @@ sub create_links { # build the popup menus $form->{taxincluded} = ($form->{id}) ? $form->{taxincluded} : "checked"; - # forex - $form->{forex} = $form->{exchangerate}; - $exchangerate = ($form->{exchangerate}) ? $form->{exchangerate} : 1; - foreach $key (keys %{ $form->{AR_links} }) { - # if there is a value we have an old entry - my $j = 0; - my $k = 0; - - for $i (1 .. scalar @{ $form->{acc_trans}{$key} }) { - if ($key eq "AR_paid") { - $j++; - $form->{"AR_paid_$j"} = $form->{acc_trans}{$key}->[$i-1]->{accno}; - - # reverse paid - $form->{"paid_$j"} = $form->{acc_trans}{$key}->[$i - 1]->{amount} * -1; - $form->{"datepaid_$j"} = - $form->{acc_trans}{$key}->[$i - 1]->{transdate}; - $form->{"source_$j"} = $form->{acc_trans}{$key}->[$i - 1]->{source}; - $form->{"memo_$j"} = $form->{acc_trans}{$key}->[$i - 1]->{memo}; - - $form->{"forex_$j"} = $form->{"exchangerate_$i"} = - $form->{acc_trans}{$key}->[$i - 1]->{exchangerate}; - $form->{"paid_project_id_$j"} = $form->{acc_trans}{$key}->[$i - 1]->{project_id}; - $form->{paidaccounts}++; - - } else { - - $akey = $key; - $akey =~ s/AR_//; - - if ($key eq "AR_tax" || $key eq "AP_tax") { - $form->{"${key}_$form->{acc_trans}{$key}->[$i-1]->{accno}"} = - "$form->{acc_trans}{$key}->[$i-1]->{accno}--$form->{acc_trans}{$key}->[$i-1]->{description}"; - $form->{"${akey}_$form->{acc_trans}{$key}->[$i-1]->{accno}"} = - $form->round_amount( - $form->{acc_trans}{$key}->[$i - 1]->{amount} / $exchangerate, - 2); - - if ($form->{"$form->{acc_trans}{$key}->[$i-1]->{accno}_rate"} > 0) { - $totaltax += - $form->{"${akey}_$form->{acc_trans}{$key}->[$i-1]->{accno}"}; - $taxrate += - $form->{"$form->{acc_trans}{$key}->[$i-1]->{accno}_rate"}; - } else { - $totalwithholding += - $form->{"${akey}_$form->{acc_trans}{$key}->[$i-1]->{accno}"}; - $withholdingrate += - $form->{"$form->{acc_trans}{$key}->[$i-1]->{accno}_rate"}; - } - $index = $form->{acc_trans}{$key}->[$i - 1]->{index}; - $form->{"tax_$index"} = $form->{acc_trans}{$key}->[$i - 1]->{amount}; - $totaltax += $form->{"tax_$index"}; - - } else { - $k++; - $form->{"${akey}_$k"} = - $form->round_amount( - $form->{acc_trans}{$key}->[$i - 1]->{amount} / $exchangerate, - 2); - if ($akey eq 'amount') { - $form->{rowcount}++; - $totalamount += $form->{"${akey}_$i"}; - - $form->{"oldprojectnumber_$k"} = $form->{"projectnumber_$k"} = - "$form->{acc_trans}{$key}->[$i-1]->{projectnumber}"; - $form->{taxrate} = $form->{acc_trans}{$key}->[$i - 1]->{rate}; - $form->{"project_id_$k"} = - "$form->{acc_trans}{$key}->[$i-1]->{project_id}"; - } - $form->{"${key}_$i"} = - "$form->{acc_trans}{$key}->[$i-1]->{accno}--$form->{acc_trans}{$key}->[$i-1]->{description}"; - - if ($akey eq "AR") { - $form->{ARselected} = $form->{acc_trans}{$key}->[$i-1]->{accno}; - - } elsif ($akey eq "amount") { - $form->{"${key}_$k"} = $form->{acc_trans}{$key}->[$i-1]->{accno} . - "--" . $form->{acc_trans}{$key}->[$i-1]->{id}; - $form->{"taxchart_$k"} = $form->{acc_trans}{$key}->[$i-1]->{id} . - "--" . $form->{acc_trans}{$key}->[$i-1]->{rate}; - } - } - } - } - } - - $form->{taxincluded} = $taxincluded if ($form->{id}); - $form->{paidaccounts} = 1 if not defined $form->{paidaccounts}; - - if ($form->{taxincluded} && $form->{taxrate} && $totalamount) { - - # add tax to amounts and invtotal - for $i (1 .. $form->{rowcount}) { - $taxamount = - ($totaltax + $totalwithholding) * $form->{"amount_$i"} / $totalamount; - $tax = $form->round_amount($taxamount, 2); - $diff += ($taxamount - $tax); - $form->{"amount_$i"} += $form->{"tax_$i"}; - } - $form->{amount_1} += $form->round_amount($diff, 2); - } - - $taxamount = $form->round_amount($taxamount, 2); - $form->{tax} = $taxamount; - - $form->{invtotal} = $totalamount + $totaltax; + AR->setup_form($form); $form->{locked} = ($form->datetonum($form->{transdate}, \%myconfig) <= @@ -337,10 +235,22 @@ sub form_header { s/option>\Q$form->{$item}\E/option selected>$form->{$item}/; } + $form->{exchangerate} = $exchangerate + if ( + $form->{forex} = ( + $exchangerate = + $form->check_exchangerate( + \%myconfig, $form->{currency}, $form->{transdate}, 'buy' + ))); + # format amounts $form->{exchangerate} = $form->format_amount(\%myconfig, $form->{exchangerate}); + if ($form->{exchangerate} == 0) { + $form->{exchangerate} = ""; + } + $form->{creditlimit} = $form->format_amount(\%myconfig, $form->{creditlimit}, 0, "0"); $form->{creditremaining} = @@ -685,6 +595,7 @@ $jsscript $project = ""; } + $form->{invtotal_unformatted} = $form->{invtotal}; $form->{invtotal} = $form->format_amount(\%myconfig, $form->{invtotal}, 2); $ARselected = @@ -756,7 +667,9 @@ $jsscript "; - my @triggers = (); + my @triggers = (); + my $totalpaid = 0; + $form->{paidaccounts}++ if ($form->{"paid_$form->{paidaccounts}"}); for $i (1 .. $form->{paidaccounts}) { print " @@ -770,6 +683,8 @@ $jsscript '-labels' => \%AR_paid_labels, '-default' => $form->{"AR_paid_$i"})); + $totalpaid += $form->{"paid_$i"}; + # format amounts if ($form->{"paid_$i"}) { $form->{"paid_$i"} = @@ -778,6 +693,10 @@ $jsscript $form->{"exchangerate_$i"} = $form->format_amount(\%myconfig, $form->{"exchangerate_$i"}); + if ($form->{"exchangerate_$i"} == 0) { + $form->{"exchangerate_$i"} = ""; + } + $exchangerate = qq| |; if ($form->{currency} ne $form->{defaultcurrency}) { if ($form->{"forex_$i"}) { @@ -822,7 +741,22 @@ $jsscript push(@triggers, "datepaid_$i", "BL", "trigger_datepaid_$i"); } - print $form->write_trigger(\%myconfig, scalar(@triggers) / 3, @triggers) . + my $paid_missing = $form->{invtotal_unformatted} - $totalpaid; + + print qq| + + + + | . $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| + +| . $form->write_trigger(\%myconfig, scalar(@triggers) / 3, @triggers) . qq| {paidaccounts}> @@ -869,11 +803,12 @@ sub form_footer { $transdate = $form->datetonum($form->{transdate}, \%myconfig); $closedto = $form->datetonum($form->{closedto}, \%myconfig); - # ToDO: insert a global check for stornos, so that a storno is only possible a limited time after saving it + print qq|\n|; + + # ToDO: - insert a global check for stornos, so that a storno is only possible a limited time after saving it print qq|| - if ($form->{id} && !IS->has_storno(\%myconfig, $form, 'ar') && !IS->is_storno(\%myconfig, $form, 'ar')); + if ($form->{id} && !IS->has_storno(\%myconfig, $form, 'ar') && !IS->is_storno(\%myconfig, $form, 'ar') && !$form->{paid_1}); - print qq|\n|; if ($form->{id}) { if ($form->{radier}) { print qq| @@ -903,6 +838,13 @@ sub form_footer { print qq|{id}); name=history id=history value=| . $locale->text('history') . qq|>|; } # /button for saving history + # mark_as_paid button + if($form->{id} ne "") { + print qq||; + } + # /mark_as_paid button + print " @@ -913,6 +855,12 @@ sub form_footer { $lxdebug->leave_sub(); } +sub mark_as_paid { + $lxdebug->enter_sub(); + &mark_as_paid_common(\%myconfig,"ar"); + $lxdebug->leave_sub(); +} + sub update { $lxdebug->enter_sub(); @@ -1006,6 +954,9 @@ sub update { sub post_payment { $lxdebug->enter_sub(); + + $form->{defaultcurrency} = $form->get_default_currency(\%myconfig); + for $i (1 .. $form->{paidaccounts}) { if ($form->parse_amount(\%myconfig, $form->{"paid_$i"})) { $datepaid = $form->datetonum($form->{"datepaid_$i"}, \%myconfig); @@ -1026,7 +977,7 @@ sub post_payment { ($form->{AR}) = split /--/, $form->{AR}; ($form->{AR_paid}) = split /--/, $form->{AR_paid}; - $form->redirect($locale->text(' Payment posted!')) + $form->redirect($locale->text('Payment posted!')) if (AR->post_payment(\%myconfig, \%$form)); $form->error($locale->text('Cannot post payment!')); @@ -1078,8 +1029,11 @@ sub post { } $form->{AR}{receivables} = $form->{ARselected}; + $form->{storno} = 0; $form->{id} = 0 if $form->{postasnew}; + + if (AR->post_transaction(\%myconfig, \%$form)) { # saving the history if(!exists $form->{addition} && $form->{id} ne "") { @@ -1401,391 +1355,190 @@ $jsscript $lxdebug->leave_sub(); } +sub create_subtotal_row { + $lxdebug->enter_sub(); + + my ($totals, $columns, $column_alignment, $subtotal_columns, $class) = @_; + + my $row = { map { $_ => { 'data' => '', 'class' => $class, 'align' => $column_alignment->{$_}, } } @{ $columns } }; + + map { $row->{$_}->{data} = $form->format_amount(\%myconfig, $totals->{$_}, 2) } @{ $subtotal_columns }; + + $row->{tax}->{data} = $form->format_amount(\%myconfig, $totals->{amount} - $totals->{netamount}, 2); + + map { $totals->{$_} = 0 } @{ $subtotal_columns }; + + $lxdebug->leave_sub(); + + return $row; +} + sub ar_transactions { $lxdebug->enter_sub(); - $form->{customer} = $form->unescape($form->{customer}); ($form->{customer}, $form->{customer_id}) = split(/--/, $form->{customer}); + $form->{sort} ||= 'transdate'; + AR->ar_transactions(\%myconfig, \%$form); - $callback = - "$form->{script}?action=ar_transactions&login=$form->{login}&password=$form->{password}"; - $href = $callback; + $form->{title} = $locale->text('AR Transactions'); + + my $report = SL::ReportGenerator->new(\%myconfig, $form); + + my @columns = + qw(transdate id type invnumber ordnumber name netamount tax amount paid + datepaid due duedate transaction_description notes employee shippingpoint shipvia + globalprojectnumber); + + my @hidden_variables = map { "l_${_}" } @columns; + push @hidden_variables, "l_subtotal", qw(open closed customer invnumber ordnumber transaction_description notes project_id transdatefrom transdateto); + + my $href = build_std_url('action=ar_transactions', grep { $form->{$_} } @hidden_variables); + + my %column_defs = ( + 'transdate' => { 'text' => $locale->text('Date'), }, + 'id' => { 'text' => $locale->text('ID'), }, + 'type' => { 'text' => $locale->text('Type'), }, + 'invnumber' => { 'text' => $locale->text('Invoice'), }, + 'ordnumber' => { 'text' => $locale->text('Order'), }, + 'name' => { 'text' => $locale->text('Customer'), }, + 'netamount' => { 'text' => $locale->text('Amount'), }, + 'tax' => { 'text' => $locale->text('Tax'), }, + 'amount' => { 'text' => $locale->text('Total'), }, + 'paid' => { 'text' => $locale->text('Paid'), }, + 'datepaid' => { 'text' => $locale->text('Date Paid'), }, + 'due' => { 'text' => $locale->text('Amount Due'), }, + 'duedate' => { 'text' => $locale->text('Due Date'), }, + 'transaction_description' => { 'text' => $locale->text('Transaction description'), }, + 'notes' => { 'text' => $locale->text('Notes'), }, + 'employee' => { 'text' => $locale->text('Salesperson'), }, + 'shippingpoint' => { 'text' => $locale->text('Shipping Point'), }, + 'shipvia' => { 'text' => $locale->text('Ship via'), }, + 'globalprojectnumber' => { 'text' => $locale->text('Project Number'), }, + ); + + foreach my $name (qw(id transdate duedate invnumber ordnumber name datepaid + employee shippingpoint shipvia)) { + $column_defs{$name}->{link} = $href . "&sort=$name"; + } + + my %column_alignment = map { $_ => 'right' } qw(netamount tax amount paid due); + + $form->{"l_type"} = "Y"; + map { $column_defs{$_}->{visible} = $form->{"l_${_}"} ? 1 : 0 } @columns; + $report->set_columns(%column_defs); + $report->set_column_order(@columns); + + $report->set_export_options('ar_transactions', @hidden_variables); + + my @options; if ($form->{customer}) { - $callback .= "&customer=" . $form->escape($form->{customer}, 1); - $href .= "&customer=" . $form->escape($form->{customer}); - $option = $locale->text('Customer') . " : $form->{customer}"; + push @options, $locale->text('Customer') . " : $form->{customer}"; } if ($form->{department}) { - $callback .= "&department=" . $form->escape($form->{department}, 1); - $href .= "&department=" . $form->escape($form->{department}); ($department) = split /--/, $form->{department}; - $option .= "\n
" if ($option); - $option .= $locale->text('Department') . " : $department"; + push @options, $locale->text('Department') . " : $department"; } if ($form->{invnumber}) { - $callback .= "&invnumber=" . $form->escape($form->{invnumber}, 1); - $href .= "&invnumber=" . $form->escape($form->{invnumber}); - $option .= "\n
" if ($option); - $option .= $locale->text('Invoice Number') . " : $form->{invnumber}"; + push @options, $locale->text('Invoice Number') . " : $form->{invnumber}"; } if ($form->{ordnumber}) { - $callback .= "&ordnumber=" . $form->escape($form->{ordnumber}, 1); - $href .= "&ordnumber=" . $form->escape($form->{ordnumber}); - $option .= "\n
" if ($option); - $option .= $locale->text('Order Number') . " : $form->{ordnumber}"; + push @options, $locale->text('Order Number') . " : $form->{ordnumber}"; } if ($form->{notes}) { - $callback .= "¬es=" . $form->escape($form->{notes}, 1); - $href .= "¬es=" . $form->escape($form->{notes}); - $option .= "\n
" if $option; - $option .= $locale->text('Notes') . " : $form->{notes}"; + push @options, $locale->text('Notes') . " : $form->{notes}"; } if ($form->{transaction_description}) { - $callback .= "&transaction_description=" . $form->escape($form->{transaction_description}, 1); - $href .= "&transaction_description=" . $form->escape($form->{transaction_description}); - $option .= "\n
" if $option; - $option .= $locale->text('Transaction description') . " : $form->{transaction_description}"; + push @options, $locale->text('Transaction description') . " : $form->{transaction_description}"; } - if ($form->{transdatefrom}) { - $callback .= "&transdatefrom=$form->{transdatefrom}"; - $href .= "&transdatefrom=$form->{transdatefrom}"; - $option .= "\n
" if ($option); - $option .= - $locale->text('From') . " " - . $locale->date(\%myconfig, $form->{transdatefrom}, 1); + push @options, $locale->text('From') . " " . $locale->date(\%myconfig, $form->{transdatefrom}, 1); } if ($form->{transdateto}) { - $callback .= "&transdateto=$form->{transdateto}"; - $href .= "&transdateto=$form->{transdateto}"; - $option .= "\n
" if ($option); - $option .= - $locale->text('Bis') . " " - . $locale->date(\%myconfig, $form->{transdateto}, 1); + push @options, $locale->text('Bis') . " " . $locale->date(\%myconfig, $form->{transdateto}, 1); } if ($form->{open}) { - $callback .= "&open=$form->{open}"; - $href .= "&open=$form->{open}"; - $option .= "\n
" if ($option); - $option .= $locale->text('Open'); + push @options, $locale->text('Open'); } if ($form->{closed}) { - $callback .= "&closed=$form->{closed}"; - $href .= "&closed=$form->{closed}"; - $option .= "\n
" if ($option); - $option .= $locale->text('Closed'); - } - if ($form->{globalproject_id}) { - $callback .= "&globalproject_id=" . E($form->{globalproject_id}); - $href .= "&globalproject_id=" . E($form->{globalproject_id}); - } - - @columns = - qw(transdate id type invnumber ordnumber name netamount tax amount paid - datepaid due duedate transaction_description notes employee shippingpoint shipvia - globalprojectnumber); - - $form->{"l_type"} = "Y"; - - foreach $item (@columns) { - if ($form->{"l_$item"} eq "Y") { - push @column_index, $item; - - # add column to href and callback - $callback .= "&l_$item=Y"; - $href .= "&l_$item=Y"; - } + push @options, $locale->text('Closed'); } - if ($form->{l_subtotal} eq 'Y') { - $callback .= "&l_subtotal=Y"; - $href .= "&l_subtotal=Y"; - } - - $column_header{id} = - "" - . $locale->text('ID') - . ""; - $column_header{transdate} = - "" - . $locale->text('Date') - . ""; - $column_header{duedate} = - "" - . $locale->text('Due Date') - . ""; - $column_header{type} = - "" . $locale->text('Type') . ""; - $column_header{invnumber} = - "" - . $locale->text('Invoice') - . ""; - $column_header{ordnumber} = - "" - . $locale->text('Order') - . ""; - $column_header{name} = - "" - . $locale->text('Customer') - . ""; - $column_header{netamount} = - "" . $locale->text('Amount') . ""; - $column_header{tax} = - "" . $locale->text('Tax') . ""; - $column_header{amount} = - "" . $locale->text('Total') . ""; - $column_header{paid} = - "" . $locale->text('Paid') . ""; - $column_header{datepaid} = - "" - . $locale->text('Date Paid') - . ""; - $column_header{due} = - "" . $locale->text('Amount Due') . ""; - $column_header{notes} = - "" . $locale->text('Notes') . ""; - $column_header{employee} = - "" - . $locale->text('Salesperson') . ""; - - $column_header{shippingpoint} = - "" - . $locale->text('Shipping Point') - . ""; - $column_header{shipvia} = - "" - . $locale->text('Ship via') - . ""; - $column_header{globalprojectnumber} = - qq|| . $locale->text('Project Number') . qq||; - $column_header{transaction_description} = - "" . $locale->text('Transaction description') . ""; - - $form->{title} = $locale->text('AR Transactions'); - - $form->header; - - print qq| - - - - - - - - - - - - - - - - -
$form->{title}
$option
- - -|; - - map { print "\n$column_header{$_}" } @column_index; - - print qq| - -|; + $report->set_options('top_info_text' => join("\n", @options), + 'raw_bottom_info_text' => $form->parse_html_template('ar/ar_transactions_bottom'), + 'output_format' => 'HTML', + 'title' => $form->{title}, + 'attachment_basename' => $locale->text('invoice_list') . strftime('_%Y%m%d', localtime time), + ); + $report->set_options_from_form(); # add sort and escape callback, this one we use for the add sub - $form->{callback} = $callback .= "&sort=$form->{sort}"; + $form->{callback} = $href .= "&sort=$form->{sort}"; # escape callback for href - $callback = $form->escape($callback); - - if (@{ $form->{AR} }) { - $sameitem = $form->{AR}->[0]->{ $form->{sort} }; - } - - # sums and tax on reports by Antonio Gallardo - # - foreach $ar (@{ $form->{AR} }) { - - if ($form->{l_subtotal} eq 'Y') { - if ($sameitem ne $ar->{ $form->{sort} }) { - &ar_subtotal; - } - } - - $column_data{netamount} = - ""; - $column_data{tax} = ""; - $column_data{amount} = - ""; - $column_data{paid} = - ""; - $column_data{due} = ""; - - $subtotalnetamount += $ar->{netamount}; - $subtotalamount += $ar->{amount}; - $subtotalpaid += $ar->{paid}; - $subtotaldue += $ar->{amount} - $ar->{paid}; - - $totalnetamount += $ar->{netamount}; - $totalamount += $ar->{amount}; - $totalpaid += $ar->{paid}; - $totaldue += ($ar->{amount} - $ar->{paid}); - - $column_data{transdate} = ""; - $column_data{id} = ""; - $column_data{datepaid} = ""; - $column_data{duedate} = ""; - - $module = ($ar->{invoice}) ? "is.pl" : $form->{script}; - - $column_data{invnumber} = - ""; - - my $is_storno = $ar->{storno} && IS->is_storno(\%myconfig, $form, 'ar'); #($ar->{invnumber} =~ /^Storno zu/); # ToDO: fix this - my $has_storno = $ar->{storno} && !$is_storno; - - $column_data{type} = ""; - $column_data{ordnumber} = ""; - $column_data{name} = ""; - $ar->{notes} =~ s/\r\n/
/g; - $column_data{notes} = ""; - $column_data{shippingpoint} = ""; - $column_data{shipvia} = ""; - $column_data{employee} = ""; - $column_data{globalprojectnumber} = - ""; - $column_data{transaction_description} = - ""; - - $i++; - $i %= 2; - print " - -"; - - map { print "\n$column_data{$_}" } @column_index; - - print qq| - -|; + $callback = $form->escape($href); - } - - if ($form->{l_subtotal} eq 'Y') { - &ar_subtotal; - } + my @subtotal_columns = qw(netamount amount paid due); - # print totals - print qq| - -|; + my %totals = map { $_ => 0 } @subtotal_columns; + my %subtotals = map { $_ => 0 } @subtotal_columns; - map { $column_data{$_} = "" } @column_index; - - $column_data{netamount} = - ""; - $column_data{tax} = ""; - $column_data{amount} = - ""; - $column_data{paid} = - ""; - $column_data{due} = - ""; - - map { print "\n$column_data{$_}" } @column_index; + my $idx = 0; - print qq| - -
" - . $form->format_amount(\%myconfig, $ar->{netamount}, 2, " ") - . "" - . $form->format_amount(\%myconfig, $ar->{amount} - $ar->{netamount}, - 2, " ") - . "" - . $form->format_amount(\%myconfig, $ar->{amount}, 2, " ") . "" - . $form->format_amount(\%myconfig, $ar->{paid}, 2, " ") . "" - . $form->format_amount(\%myconfig, $ar->{amount} - $ar->{paid}, - 2, " ") - . "$ar->{transdate} $ar->{id}$ar->{datepaid} $ar->{duedate} {id}&login=$form->{login}&password=$form->{password}&callback=$callback>$ar->{invnumber}" . - ($has_storno ? $locale->text("Invoice with Storno (abbreviation)") : - $is_storno ? $locale->text("Storno (one letter abbreviation)") : - $ar->{amount} < 0 ? $locale->text("Credit note (one letter abbreviation)") : - $ar->{invoice} ? $locale->text("Invoice (one letter abbreviation)") : - $locale->text("AR Transaction (abbreviation)")) - . "$ar->{ordnumber} $ar->{name}$ar->{notes} $ar->{shippingpoint} $ar->{shipvia} $ar->{employee} " . H($ar->{globalprojectnumber}) . "" . H($ar->{transaction_description}) . "
 " - . $form->format_amount(\%myconfig, $totalnetamount, 2, " ") . "" - . $form->format_amount(\%myconfig, $totalamount - $totalnetamount, - 2, " ") - . "" - . $form->format_amount(\%myconfig, $totalamount, 2, " ") . "" - . $form->format_amount(\%myconfig, $totalpaid, 2, " ") . "" - . $form->format_amount(\%myconfig, $totaldue, 2, " ") . "
-

+ foreach $ar (@{ $form->{AR} }) { + $ar->{tax} = $ar->{amount} - $ar->{netamount}; + $ar->{due} = $ar->{amount} - $ar->{paid}; -
-
{script}> + map { $subtotals{$_} += $ar->{$_}; + $totals{$_} += $ar->{$_} } @subtotal_columns; - + map { $ar->{$_} = $form->format_amount(\%myconfig, $ar->{$_}, 2) } qw(netamount tax amount paid due); -{login}> -{password}> - - - + my $is_storno = $ar->{storno} && IS->is_storno(\%myconfig, $form, 'ar'); + my $has_storno = $ar->{storno} && !$is_storno; -
+ $ar->{type} = + $has_storno ? $locale->text("Invoice with Storno (abbreviation)") : + $is_storno ? $locale->text("Storno (one letter abbreviation)") : + $ar->{amount} < 0 ? $locale->text("Credit note (one letter abbreviation)") : + $ar->{invoice} ? $locale->text("Invoice (one letter abbreviation)") : + $locale->text("AR Transaction (abbreviation)"); - - -|; - - $lxdebug->leave_sub(); -} + my $row = { }; -sub ar_subtotal { - $lxdebug->enter_sub(); + foreach my $column (@columns) { + $row->{$column} = { + 'data' => $ar->{$column}, + 'align' => $column_alignment{$column}, + }; + } - map { $column_data{$_} = " " } @column_index; + $row->{invnumber}->{link} = build_std_url("script=" . ($ar->{invoice} ? 'is.pl' : 'ar.pl'), 'action=edit') + . "&id=" . E($ar->{id}) . "&callback=${callback}"; - $column_data{tax} = "" - . $form->format_amount(\%myconfig, $subtotalamount - $subtotalnetamount, - 2, " ") - . ""; - $column_data{amount} = - "" - . $form->format_amount(\%myconfig, $subtotalamount, 2, " ") . ""; - $column_data{paid} = - "" - . $form->format_amount(\%myconfig, $subtotalpaid, 2, " ") . ""; - $column_data{due} = - "" - . $form->format_amount(\%myconfig, $subtotaldue, 2, " ") . ""; + my $row_set = [ $row ]; - $subtotalnetamount = 0; - $subtotalamount = 0; - $subtotalpaid = 0; - $subtotaldue = 0; + if (($form->{l_subtotal} eq 'Y') + && (($idx == (scalar @{ $form->{AR} } - 1)) + || ($ar->{ $form->{sort} } ne $form->{AR}->[$idx + 1]->{ $form->{sort} }))) { + push @{ $row_set }, create_subtotal_row(\%subtotals, \@columns, \%column_alignment, \@subtotal_columns, 'listsubtotal'); + } - $sameitem = $ar->{ $form->{sort} }; + $report->add_data($row_set); - print ""; + $idx++; + } - map { print "\n$column_data{$_}" } @column_index; + $report->add_separator(); + $report->add_data(create_subtotal_row(\%totals, \@columns, \%column_alignment, \@subtotal_columns, 'listtotal')); - print " - -"; + $report->generate_with_headers(); $lxdebug->leave_sub(); } - sub storno { $lxdebug->enter_sub(); @@ -1794,16 +1547,6 @@ sub storno { $form->error($locale->text("Transaction has already been cancelled!")); } - # ToDO: - # - nicht anzeigen wenn neue rechnung - # - nicht anzeigen wenn schons toniert - # - nicht anziegen wenn zahlungen da - - -# my %keep_keys = map { $_, 1 } qw(login password id stylesheet); -# map { delete $form->{$_} unless $keep_keys{$_} } keys %{ $form }; -# prepare_transaction(); - # negate amount/taxes for my $i (1 .. $form->{rowcount}) { $form->{"amount_$i"} *= -1; @@ -1834,5 +1577,4 @@ sub storno { # /saving the history $lxdebug->leave_sub(); - }