31 |
31 |
#
|
32 |
32 |
#======================================================================
|
33 |
33 |
|
|
34 |
use POSIX qw(strftime);
|
|
35 |
|
34 |
36 |
use SL::AP;
|
35 |
37 |
use SL::IR;
|
36 |
38 |
use SL::IS;
|
37 |
39 |
use SL::PE;
|
|
40 |
use SL::ReportGenerator;
|
38 |
41 |
|
39 |
42 |
require "bin/mozilla/arap.pl";
|
40 |
43 |
require "bin/mozilla/common.pl";
|
41 |
44 |
require "bin/mozilla/drafts.pl";
|
|
45 |
require "bin/mozilla/report_generator.pl";
|
42 |
46 |
|
43 |
47 |
1;
|
44 |
48 |
|
... | ... | |
1308 |
1312 |
$lxdebug->leave_sub();
|
1309 |
1313 |
}
|
1310 |
1314 |
|
|
1315 |
sub create_subtotal_row {
|
|
1316 |
$lxdebug->enter_sub();
|
|
1317 |
|
|
1318 |
my ($totals, $columns, $column_alignment, $subtotal_columns, $class) = @_;
|
|
1319 |
|
|
1320 |
my $row = { map { $_ => { 'data' => '', 'class' => $class, 'align' => $column_alignment->{$_}, } } @{ $columns } };
|
|
1321 |
|
|
1322 |
map { $row->{$_}->{data} = $form->format_amount(\%myconfig, $totals->{$_}, 2) } @{ $subtotal_columns };
|
|
1323 |
|
|
1324 |
$row->{tax}->{data} = $form->format_amount(\%myconfig, $totals->{amount} - $totals->{netamount}, 2);
|
|
1325 |
|
|
1326 |
map { $totals->{$_} = 0 } @{ $subtotal_columns };
|
|
1327 |
|
|
1328 |
$lxdebug->leave_sub();
|
|
1329 |
|
|
1330 |
return $row;
|
|
1331 |
}
|
|
1332 |
|
1311 |
1333 |
sub ap_transactions {
|
1312 |
1334 |
$lxdebug->enter_sub();
|
1313 |
1335 |
|
1314 |
|
$form->{vendor} = $form->unescape($form->{vendor});
|
1315 |
1336 |
($form->{vendor}, $form->{vendor_id}) = split(/--/, $form->{vendor});
|
1316 |
1337 |
|
|
1338 |
$form->{sort} ||= 'transdate';
|
|
1339 |
|
1317 |
1340 |
AP->ap_transactions(\%myconfig, \%$form);
|
1318 |
1341 |
|
1319 |
|
$callback =
|
1320 |
|
"$form->{script}?action=ap_transactions&login=$form->{login}&password=$form->{password}";
|
1321 |
|
$href = $callback;
|
|
1342 |
$form->{title} = $locale->text('AP Transactions');
|
1322 |
1343 |
|
|
1344 |
my $report = SL::ReportGenerator->new(\%myconfig, $form);
|
|
1345 |
|
|
1346 |
my @columns =
|
|
1347 |
qw(transdate id type invnumber ordnumber name netamount tax amount paid datepaid
|
|
1348 |
due duedate transaction_description notes employee globalprojectnumber);
|
|
1349 |
|
|
1350 |
my @hidden_variables = map { "l_${_}" } @columns;
|
|
1351 |
push @hidden_variables, "l_subtotal", qw(open closed vendor invnumber ordnumber activity_description notes project_id transdatefrom transdateto);
|
|
1352 |
|
|
1353 |
my $href = build_std_url('action=ap_transactions', grep { $form->{$_} } @hidden_variables);
|
|
1354 |
|
|
1355 |
my %column_defs = (
|
|
1356 |
'transdate' => { 'text' => $locale->text('Date'), },
|
|
1357 |
'id' => { 'text' => $locale->text('ID'), },
|
|
1358 |
'type' => { 'text' => $locale->text('Type'), },
|
|
1359 |
'invnumber' => { 'text' => $locale->text('Invoice'), },
|
|
1360 |
'ordnumber' => { 'text' => $locale->text('Order'), },
|
|
1361 |
'name' => { 'text' => $locale->text('Vendor'), },
|
|
1362 |
'netamount' => { 'text' => $locale->text('Amount'), },
|
|
1363 |
'tax' => { 'text' => $locale->text('Tax'), },
|
|
1364 |
'amount' => { 'text' => $locale->text('Total'), },
|
|
1365 |
'paid' => { 'text' => $locale->text('Paid'), },
|
|
1366 |
'datepaid' => { 'text' => $locale->text('Date Paid'), },
|
|
1367 |
'due' => { 'text' => $locale->text('Amount Due'), },
|
|
1368 |
'duedate' => { 'text' => $locale->text('Due Date'), },
|
|
1369 |
'transaction_description' => { 'text' => $locale->text('Transaction description'), },
|
|
1370 |
'notes' => { 'text' => $locale->text('Notes'), },
|
|
1371 |
'employee' => { 'text' => $locale->text('Salesperson'), },
|
|
1372 |
'globalprojectnumber' => { 'text' => $locale->text('Project Number'), },
|
|
1373 |
);
|
|
1374 |
|
|
1375 |
foreach my $name (qw(id transdate duedate invnumber ordnumber name datepaid
|
|
1376 |
employee shippingpoint shipvia)) {
|
|
1377 |
$column_defs{$name}->{link} = $href . "&sort=$name";
|
|
1378 |
}
|
|
1379 |
|
|
1380 |
my %column_alignment = map { $_ => 'right' } qw(netamount tax amount paid due);
|
|
1381 |
|
|
1382 |
$form->{"l_type"} = "Y";
|
|
1383 |
map { $column_defs{$_}->{visible} = $form->{"l_${_}"} ? 1 : 0 } @columns;
|
|
1384 |
|
|
1385 |
$report->set_columns(%column_defs);
|
|
1386 |
$report->set_column_order(@columns);
|
|
1387 |
|
|
1388 |
$report->set_export_options('ap_transactions', @hidden_variables);
|
|
1389 |
|
|
1390 |
my @options;
|
1323 |
1391 |
if ($form->{vendor}) {
|
1324 |
|
$callback .= "&vendor=" . $form->escape($form->{vendor}, 1);
|
1325 |
|
$href .= "&vendor=" . $form->escape($form->{vendor});
|
1326 |
|
$option .= $locale->text('Vendor') . " : $form->{vendor}";
|
|
1392 |
push @options, $locale->text('Vendor') . " : $form->{vendor}";
|
1327 |
1393 |
}
|
1328 |
1394 |
if ($form->{department}) {
|
1329 |
|
$callback .= "&department=" . $form->escape($form->{department}, 1);
|
1330 |
|
$href .= "&department=" . $form->escape($form->{department});
|
1331 |
1395 |
($department) = split /--/, $form->{department};
|
1332 |
|
$option .= "\n<br>" if ($option);
|
1333 |
|
$option .= $locale->text('Department') . " : $department";
|
|
1396 |
push @options, $locale->text('Department') . " : $department";
|
1334 |
1397 |
}
|
1335 |
1398 |
if ($form->{invnumber}) {
|
1336 |
|
$callback .= "&invnumber=" . $form->escape($form->{invnumber}, 1);
|
1337 |
|
$href .= "&invnumber=" . $form->escape($form->{invnumber});
|
1338 |
|
$option .= "\n<br>" if ($option);
|
1339 |
|
$option .= $locale->text('Invoice Number') . " : $form->{invnumber}";
|
|
1399 |
push @options, $locale->text('Invoice Number') . " : $form->{invnumber}";
|
1340 |
1400 |
}
|
1341 |
1401 |
if ($form->{ordnumber}) {
|
1342 |
|
$callback .= "&ordnumber=" . $form->escape($form->{ordnumber}, 1);
|
1343 |
|
$href .= "&ordnumber=" . $form->escape($form->{ordnumber});
|
1344 |
|
$option .= "\n<br>" if ($option);
|
1345 |
|
$option .= $locale->text('Order Number') . " : $form->{ordnumber}";
|
|
1402 |
push @options, $locale->text('Order Number') . " : $form->{ordnumber}";
|
1346 |
1403 |
}
|
1347 |
1404 |
if ($form->{notes}) {
|
1348 |
|
$callback .= "¬es=" . $form->escape($form->{notes}, 1);
|
1349 |
|
$href .= "¬es=" . $form->escape($form->{notes});
|
1350 |
|
$option .= "\n<br>" if $option;
|
1351 |
|
$option .= $locale->text('Notes') . " : $form->{notes}";
|
|
1405 |
push @options, $locale->text('Notes') . " : $form->{notes}";
|
|
1406 |
}
|
|
1407 |
if ($form->{transaction_description}) {
|
|
1408 |
push @options, $locale->text('Transaction description') . " : $form->{transaction_description}";
|
1352 |
1409 |
}
|
1353 |
|
|
1354 |
1410 |
if ($form->{transdatefrom}) {
|
1355 |
|
$callback .= "&transdatefrom=$form->{transdatefrom}";
|
1356 |
|
$href .= "&transdatefrom=$form->{transdatefrom}";
|
1357 |
|
$option .= "\n<br>" if ($option);
|
1358 |
|
$option .=
|
1359 |
|
$locale->text('From') . " "
|
1360 |
|
. $locale->date(\%myconfig, $form->{transdatefrom}, 1);
|
|
1411 |
push @options, $locale->text('From') . " " . $locale->date(\%myconfig, $form->{transdatefrom}, 1);
|
1361 |
1412 |
}
|
1362 |
1413 |
if ($form->{transdateto}) {
|
1363 |
|
$callback .= "&transdateto=$form->{transdateto}";
|
1364 |
|
$href .= "&transdateto=$form->{transdateto}";
|
1365 |
|
$option .= "\n<br>" if ($option);
|
1366 |
|
$option .=
|
1367 |
|
$locale->text('Bis') . " "
|
1368 |
|
. $locale->date(\%myconfig, $form->{transdateto}, 1);
|
|
1414 |
push @options, $locale->text('Bis') . " " . $locale->date(\%myconfig, $form->{transdateto}, 1);
|
1369 |
1415 |
}
|
1370 |
1416 |
if ($form->{open}) {
|
1371 |
|
$callback .= "&open=$form->{open}";
|
1372 |
|
$href .= "&open=$form->{open}";
|
1373 |
|
$option .= "\n<br>" if ($option);
|
1374 |
|
$option .= $locale->text('Open');
|
|
1417 |
push @options, $locale->text('Open');
|
1375 |
1418 |
}
|
1376 |
1419 |
if ($form->{closed}) {
|
1377 |
|
$callback .= "&closed=$form->{closed}";
|
1378 |
|
$href .= "&closed=$form->{closed}";
|
1379 |
|
$option .= "\n<br>" if ($option);
|
1380 |
|
$option .= $locale->text('Closed');
|
1381 |
|
}
|
1382 |
|
if ($form->{globalproject_id}) {
|
1383 |
|
$callback .= "&globalproject_id=" . E($form->{globalproject_id});
|
1384 |
|
$href .= "&globalproject_id=" . E($form->{globalproject_id});
|
|
1420 |
push @options, $locale->text('Closed');
|
1385 |
1421 |
}
|
1386 |
1422 |
|
1387 |
|
@columns =
|
1388 |
|
qw(transdate id type invnumber ordnumber name netamount tax amount paid datepaid
|
1389 |
|
due duedate notes employee globalprojectnumber);
|
|
1423 |
$report->set_options('top_info_text' => join("\n", @options),
|
|
1424 |
'raw_bottom_info_text' => $form->parse_html_template('ap/ap_transactions_bottom'),
|
|
1425 |
'output_format' => 'HTML',
|
|
1426 |
'title' => $form->{title},
|
|
1427 |
'attachment_basename' => $locale->text('invoice_list') . strftime('_%Y%m%d', localtime time),
|
|
1428 |
);
|
|
1429 |
$report->set_options_from_form();
|
1390 |
1430 |
|
1391 |
|
$form->{"l_type"} = "Y";
|
|
1431 |
# add sort and escape callback, this one we use for the add sub
|
|
1432 |
$form->{callback} = $href .= "&sort=$form->{sort}";
|
1392 |
1433 |
|
1393 |
|
foreach $item (@columns) {
|
1394 |
|
if ($form->{"l_$item"} eq "Y") {
|
1395 |
|
push @column_index, $item;
|
|
1434 |
# escape callback for href
|
|
1435 |
$callback = $form->escape($href);
|
1396 |
1436 |
|
1397 |
|
# add column to href and callback
|
1398 |
|
$callback .= "&l_$item=Y";
|
1399 |
|
$href .= "&l_$item=Y";
|
1400 |
|
}
|
1401 |
|
}
|
|
1437 |
my @subtotal_columns = qw(netamount amount paid due);
|
1402 |
1438 |
|
1403 |
|
if ($form->{l_subtotal} eq 'Y') {
|
1404 |
|
$callback .= "&l_subtotal=Y";
|
1405 |
|
$href .= "&l_subtotal=Y";
|
1406 |
|
}
|
1407 |
|
|
1408 |
|
$column_header{id} =
|
1409 |
|
qq|<th><a class=listheading href=$href&sort=id>|
|
1410 |
|
. $locale->text('ID')
|
1411 |
|
. qq|</a></th>|;
|
1412 |
|
$column_header{transdate} =
|
1413 |
|
qq|<th><a class=listheading href=$href&sort=transdate>|
|
1414 |
|
. $locale->text('Date')
|
1415 |
|
. qq|</a></th>|;
|
1416 |
|
$column_header{type} =
|
1417 |
|
"<th class=\"listheading\">" . $locale->text('Type') . "</th>";
|
1418 |
|
$column_header{duedate} =
|
1419 |
|
qq|<th><a class=listheading href=$href&sort=duedate>|
|
1420 |
|
. $locale->text('Due Date')
|
1421 |
|
. qq|</a></th>|;
|
1422 |
|
$column_header{due} =
|
1423 |
|
qq|<th class=listheading>| . $locale->text('Amount Due') . qq|</th>|;
|
1424 |
|
$column_header{invnumber} =
|
1425 |
|
qq|<th><a class=listheading href=$href&sort=invnumber>|
|
1426 |
|
. $locale->text('Invoice')
|
1427 |
|
. qq|</a></th>|;
|
1428 |
|
$column_header{ordnumber} =
|
1429 |
|
qq|<th><a class=listheading href=$href&sort=ordnumber>|
|
1430 |
|
. $locale->text('Order')
|
1431 |
|
. qq|</a></th>|;
|
1432 |
|
$column_header{name} =
|
1433 |
|
qq|<th><a class=listheading href=$href&sort=name>|
|
1434 |
|
. $locale->text('Vendor')
|
1435 |
|
. qq|</a></th>|;
|
1436 |
|
$column_header{netamount} =
|
1437 |
|
qq|<th class=listheading>| . $locale->text('Amount') . qq|</th>|;
|
1438 |
|
$column_header{tax} =
|
1439 |
|
qq|<th class=listheading>| . $locale->text('Tax') . qq|</th>|;
|
1440 |
|
$column_header{amount} =
|
1441 |
|
qq|<th class=listheading>| . $locale->text('Total') . qq|</th>|;
|
1442 |
|
$column_header{paid} =
|
1443 |
|
qq|<th class=listheading>| . $locale->text('Paid') . qq|</th>|;
|
1444 |
|
$column_header{datepaid} =
|
1445 |
|
qq|<th><a class=listheading href=$href&sort=datepaid>|
|
1446 |
|
. $locale->text('Date Paid')
|
1447 |
|
. qq|</a></th>|;
|
1448 |
|
$column_header{notes} =
|
1449 |
|
qq|<th class=listheading>| . $locale->text('Notes') . qq|</th>|;
|
1450 |
|
$column_header{employee} =
|
1451 |
|
"<th><a class=listheading href=$href&sort=employee>"
|
1452 |
|
. $locale->text('Employee') . "</th>";
|
1453 |
|
$column_header{globalprojectnumber} =
|
1454 |
|
qq|<th class="listheading">| . $locale->text('Project Number') . qq|</th>|;
|
1455 |
|
|
1456 |
|
$form->{title} = $locale->text('AP Transactions');
|
|
1439 |
my %totals = map { $_ => 0 } @subtotal_columns;
|
|
1440 |
my %subtotals = map { $_ => 0 } @subtotal_columns;
|
1457 |
1441 |
|
1458 |
|
$form->header;
|
1459 |
|
|
1460 |
|
print qq|
|
1461 |
|
<body>
|
1462 |
|
|
1463 |
|
<table width=100%>
|
1464 |
|
<tr>
|
1465 |
|
<th class=listtop>$form->{title}</th>
|
1466 |
|
</tr>
|
1467 |
|
<tr height="5"></tr>
|
1468 |
|
<tr>
|
1469 |
|
<td>$option</td>
|
1470 |
|
</tr>
|
1471 |
|
<tr>
|
1472 |
|
<td>
|
1473 |
|
<table width=100%>
|
1474 |
|
<tr class=listheading>
|
1475 |
|
|;
|
|
1442 |
my $idx = 0;
|
1476 |
1443 |
|
1477 |
|
map { print "\n$column_header{$_}" } @column_index;
|
|
1444 |
foreach $ap (@{ $form->{AP} }) {
|
|
1445 |
$ap->{tax} = $ap->{amount} - $ap->{netamount};
|
|
1446 |
$ap->{due} = $ap->{amount} - $ap->{paid};
|
1478 |
1447 |
|
1479 |
|
print qq|
|
1480 |
|
</tr>
|
1481 |
|
|;
|
|
1448 |
map { $subtotals{$_} += $ap->{$_};
|
|
1449 |
$totals{$_} += $ap->{$_} } @subtotal_columns;
|
1482 |
1450 |
|
1483 |
|
# add sort and escape callback
|
1484 |
|
$form->{callback} = "$callback&sort=$form->{sort}";
|
1485 |
|
$callback = $form->escape($form->{callback});
|
|
1451 |
map { $ap->{$_} = $form->format_amount(\%myconfig, $ap->{$_}, 2) } qw(netamount tax amount paid due);
|
1486 |
1452 |
|
1487 |
|
if (@{ $form->{AP} }) {
|
1488 |
|
$sameitem = $form->{AP}->[0]->{ $form->{sort} };
|
1489 |
|
}
|
|
1453 |
$ap->{type} =
|
|
1454 |
$ap->{invoice} ? $locale->text("Invoice (one letter abbreviation)") :
|
|
1455 |
$locale->text("AP Transaction (abbreviation)");
|
1490 |
1456 |
|
1491 |
|
# sums and tax on reports by Antonio Gallardo
|
1492 |
|
#
|
1493 |
|
foreach $ap (@{ $form->{AP} }) {
|
|
1457 |
my $row = { };
|
1494 |
1458 |
|
1495 |
|
if ($form->{l_subtotal} eq 'Y') {
|
1496 |
|
if ($sameitem ne $ap->{ $form->{sort} }) {
|
1497 |
|
&ap_subtotal;
|
1498 |
|
$sameitem = $ap->{ $form->{sort} };
|
1499 |
|
}
|
|
1459 |
foreach my $column (@columns) {
|
|
1460 |
$row->{$column} = {
|
|
1461 |
'data' => $ap->{$column},
|
|
1462 |
'align' => $column_alignment{$column},
|
|
1463 |
};
|
1500 |
1464 |
}
|
1501 |
1465 |
|
1502 |
|
$column_data{netamount} =
|
1503 |
|
"<td align=right>"
|
1504 |
|
. $form->format_amount(\%myconfig, $ap->{netamount}, 2, " ")
|
1505 |
|
. "</td>";
|
1506 |
|
$column_data{tax} = "<td align=right>"
|
1507 |
|
. $form->format_amount(\%myconfig, $ap->{amount} - $ap->{netamount},
|
1508 |
|
2, " ")
|
1509 |
|
. "</td>";
|
1510 |
|
$column_data{amount} =
|
1511 |
|
"<td align=right>"
|
1512 |
|
. $form->format_amount(\%myconfig, $ap->{amount}, 2, " ") . "</td>";
|
1513 |
|
$column_data{paid} =
|
1514 |
|
"<td align=right>"
|
1515 |
|
. $form->format_amount(\%myconfig, $ap->{paid}, 2, " ") . "</td>";
|
1516 |
|
$column_data{due} = "<td align=right>"
|
1517 |
|
. $form->format_amount(\%myconfig, $ap->{amount} - $ap->{paid},
|
1518 |
|
2, " ")
|
1519 |
|
. "</td>";
|
1520 |
|
|
1521 |
|
$totalnetamount += $ap->{netamount};
|
1522 |
|
$totalamount += $ap->{amount};
|
1523 |
|
$totalpaid += $ap->{paid};
|
1524 |
|
$totaldue += ($ap->{amount} - $ap->{paid});
|
1525 |
|
|
1526 |
|
$subtotalnetamount += $ap->{netamount};
|
1527 |
|
$subtotalamount += $ap->{amount};
|
1528 |
|
$subtotalpaid += $ap->{paid};
|
1529 |
|
$subtotaldue += ($ap->{amount} - $ap->{paid});
|
1530 |
|
|
1531 |
|
$column_data{transdate} = "<td>$ap->{transdate} </td>";
|
1532 |
|
$column_data{type} = "<td>" .
|
1533 |
|
($ap->{invoice} ? $locale->text("Invoice (one letter abbreviation)") :
|
1534 |
|
$locale->text("AP Transaction (abbreviation)"))
|
1535 |
|
. "</td>";
|
1536 |
|
$column_data{duedate} = "<td>$ap->{duedate} </td>";
|
1537 |
|
$column_data{datepaid} = "<td>$ap->{datepaid} </td>";
|
1538 |
|
|
1539 |
|
$module = ($ap->{invoice}) ? "ir.pl" : $form->{script};
|
1540 |
|
|
1541 |
|
$column_data{invnumber} =
|
1542 |
|
qq|<td><a href="$module?action=edit&id=$ap->{id}&login=$form->{login}&password=$form->{password}&callback=$callback">$ap->{invnumber}</a></td>|;
|
1543 |
|
$column_data{id} = "<td>$ap->{id}</td>";
|
1544 |
|
$column_data{ordnumber} = "<td>$ap->{ordnumber} </td>";
|
1545 |
|
$column_data{name} = "<td>$ap->{name}</td>";
|
1546 |
|
$ap->{notes} =~ s/\r\n/<br>/g;
|
1547 |
|
$column_data{notes} = "<td>$ap->{notes} </td>";
|
1548 |
|
$column_data{employee} = "<td>$ap->{employee} </td>";
|
1549 |
|
$column_data{globalprojectnumber} =
|
1550 |
|
"<td>" . H($ap->{globalprojectnumber}) . "</td>";
|
1551 |
|
|
1552 |
|
$i++;
|
1553 |
|
$i %= 2;
|
1554 |
|
print "
|
1555 |
|
<tr class=listrow$i >
|
1556 |
|
";
|
|
1466 |
$row->{invnumber}->{link} = build_std_url("script=" . ($ap->{invoice} ? 'ir.pl' : 'ap.pl'), 'action=edit')
|
|
1467 |
. "&id=" . E($ap->{id}) . "&callback=${callback}";
|
1557 |
1468 |
|
1558 |
|
map { print "\n$column_data{$_}" } @column_index;
|
|
1469 |
my $row_set = [ $row ];
|
1559 |
1470 |
|
1560 |
|
print qq|
|
1561 |
|
</tr>
|
1562 |
|
|;
|
|
1471 |
if (($form->{l_subtotal} eq 'Y')
|
|
1472 |
&& (($idx == (scalar @{ $form->{AP} } - 1))
|
|
1473 |
|| ($ap->{ $form->{sort} } ne $form->{AP}->[$idx + 1]->{ $form->{sort} }))) {
|
|
1474 |
push @{ $row_set }, create_subtotal_row(\%subtotals, \@columns, \%column_alignment, \@subtotal_columns, 'listsubtotal');
|
|
1475 |
}
|
1563 |
1476 |
|
1564 |
|
}
|
|
1477 |
$report->add_data($row_set);
|
1565 |
1478 |
|
1566 |
|
if ($form->{l_subtotal} eq 'Y') {
|
1567 |
|
&ap_subtotal;
|
|
1479 |
$idx++;
|
1568 |
1480 |
}
|
1569 |
1481 |
|
1570 |
|
# print totals
|
1571 |
|
print qq|
|
1572 |
|
<tr class=listtotal>
|
1573 |
|
|;
|
1574 |
|
|
1575 |
|
map { $column_data{$_} = "<td> </td>" } @column_index;
|
1576 |
|
|
1577 |
|
$column_data{netamount} =
|
1578 |
|
"<th class=listtotal align=right>"
|
1579 |
|
. $form->format_amount(\%myconfig, $totalnetamount, 2, " ") . "</th>";
|
1580 |
|
$column_data{tax} = "<th class=listtotal align=right>"
|
1581 |
|
. $form->format_amount(\%myconfig, $totalamount - $totalnetamount,
|
1582 |
|
2, " ")
|
1583 |
|
. "</th>";
|
1584 |
|
$column_data{amount} =
|
1585 |
|
"<th class=listtotal align=right>"
|
1586 |
|
. $form->format_amount(\%myconfig, $totalamount, 2, " ") . "</th>";
|
1587 |
|
$column_data{paid} =
|
1588 |
|
"<th class=listtotal align=right>"
|
1589 |
|
. $form->format_amount(\%myconfig, $totalpaid, 2, " ") . "</th>";
|
1590 |
|
$column_data{due} =
|
1591 |
|
"<th class=listtotal align=right>"
|
1592 |
|
. $form->format_amount(\%myconfig, $totaldue, 2, " ") . "</th>";
|
1593 |
|
|
1594 |
|
map { print "$column_data{$_}\n" } @column_index;
|
1595 |
|
|
1596 |
|
print qq|
|
1597 |
|
</tr>
|
1598 |
|
</table>
|
1599 |
|
</td>
|
1600 |
|
</tr>
|
1601 |
|
<tr>
|
1602 |
|
<td><hr size=3 noshade></td>
|
1603 |
|
</tr>
|
1604 |
|
</table>
|
|
1482 |
$report->add_separator();
|
|
1483 |
$report->add_data(create_subtotal_row(\%totals, \@columns, \%column_alignment, \@subtotal_columns, 'listtotal'));
|
1605 |
1484 |
|
1606 |
|
<br>
|
1607 |
|
<form method=post action=$form->{script}>
|
1608 |
|
|
1609 |
|
<input name=callback type=hidden value="$form->{callback}">
|
1610 |
|
|
1611 |
|
<input type=hidden name=login value=$form->{login}>
|
1612 |
|
<input type=hidden name=password value=$form->{password}>
|
1613 |
|
|
1614 |
|
<input class=submit type=submit name=action value="|
|
1615 |
|
. $locale->text('AP Transaction') . qq|">
|
1616 |
|
|
1617 |
|
<input class=submit type=submit name=action value="|
|
1618 |
|
. $locale->text('Vendor Invoice') . qq|">
|
1619 |
|
|
1620 |
|
</form>
|
1621 |
|
|
1622 |
|
</body>
|
1623 |
|
</html>
|
1624 |
|
|;
|
1625 |
|
|
1626 |
|
$lxdebug->leave_sub();
|
1627 |
|
}
|
1628 |
|
|
1629 |
|
sub ap_subtotal {
|
1630 |
|
$lxdebug->enter_sub();
|
1631 |
|
|
1632 |
|
map { $column_data{$_} = "<td> </td>" } @column_index;
|
1633 |
|
|
1634 |
|
$column_data{netamount} =
|
1635 |
|
"<th class=listsubtotal align=right>"
|
1636 |
|
. $form->format_amount(\%myconfig, $subtotalnetamount, 2, " ")
|
1637 |
|
. "</th>";
|
1638 |
|
$column_data{tax} = "<th class=listsubtotal align=right>"
|
1639 |
|
. $form->format_amount(\%myconfig, $subtotalamount - $subtotalnetamount,
|
1640 |
|
2, " ")
|
1641 |
|
. "</th>";
|
1642 |
|
$column_data{amount} =
|
1643 |
|
"<th class=listsubtotal align=right>"
|
1644 |
|
. $form->format_amount(\%myconfig, $subtotalamount, 2, " ") . "</th>";
|
1645 |
|
$column_data{paid} =
|
1646 |
|
"<th class=listsubtotal align=right>"
|
1647 |
|
. $form->format_amount(\%myconfig, $subtotalpaid, 2, " ") . "</th>";
|
1648 |
|
$column_data{due} =
|
1649 |
|
"<th class=listsubtotal align=right>"
|
1650 |
|
. $form->format_amount(\%myconfig, $subtotaldue, 2, " ") . "</th>";
|
1651 |
|
|
1652 |
|
$subtotalnetamount = 0;
|
1653 |
|
$subtotalamount = 0;
|
1654 |
|
$subtotalpaid = 0;
|
1655 |
|
$subtotaldue = 0;
|
1656 |
|
|
1657 |
|
print "<tr class=listsubtotal>";
|
1658 |
|
|
1659 |
|
map { print "\n$column_data{$_}" } @column_index;
|
1660 |
|
|
1661 |
|
print qq|
|
1662 |
|
</tr>
|
1663 |
|
|;
|
|
1485 |
$report->generate_with_headers();
|
1664 |
1486 |
|
1665 |
1487 |
$lxdebug->leave_sub();
|
1666 |
1488 |
}
|
Die Liste der Kreditorenbuchungen auf die Verwendung der ReportGenerator-Klasse umgestellt.