use SL::MoreCommon;
use SL::Template;
+use strict;
+
sub get_config {
$main::lxdebug->enter_sub();
(dunning_level, dunning_description, email_subject, email_body,
template, fee, interest_rate, active, auto, email,
email_attachment, payment_terms, terms, create_invoices_for_fees)
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)|;
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)|;
}
do_query($form, $dbh, $query, @values);
}
}
my ($ar_id) = selectrow_query($form, $dbh, qq|SELECT nextval('glid')|);
+ my $curr = $form->get_default_currency($myconfig);
$query =
qq|INSERT INTO ar (id, invnumber, transdate, gldate, customer_id,
?, -- netamount
0, -- paid
-- duedate:
- (SELECT duedate FROM dunning WHERE dunning_id = ?),
+ (SELECT duedate FROM dunning WHERE dunning_id = ? LIMIT 1),
'f', -- invoice
?, -- curr
?, -- notes
$amount,
$amount,
$dunning_id, # duedate
- (split m/:/, $myconfig->{currency})[0], # currency
+ $curr, # default currency
sprintf($main::locale->text('Automatically created invoice for fee and interest for dunning %s'), $dunning_id), # notes
$form->{login}); # employee_id
do_query($form, $dbh, $query, @values);
sub save_dunning {
$main::lxdebug->enter_sub();
- my ($self, $myconfig, $form, $rows, $userspath, $spool, $sendmail) = @_;
+ my ($self, $myconfig, $form, $rows, $userspath, $spool) = @_;
# connect to database
my $dbh = $form->dbconnect_noauto($myconfig);
push(@values, $form->{minamount});
}
- $query =
+ my $query =
qq|SELECT id
FROM dunning_config
WHERE dunning_level = (SELECT MAX(dunning_level) FROM dunning_config)|;
$form->{DUNNINGS} = [];
- while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
- next if !$ref->{terms} || ($ref->{pastdue} < $ref->{terms});
+ while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
+ next if ($ref->{pastdue} < $ref->{terms});
$ref->{interest} = $form->round_amount($ref->{interest}, 2);
push(@{ $form->{DUNNINGS} }, $ref);
# connect to database
my $dbh = $form->dbconnect($myconfig);
- $where = qq| WHERE (da.trans_id = a.id)|;
+ my $where = qq| WHERE (da.trans_id = a.id)|;
my @values;
push(@values, $form->{dunningto});
}
- $query =
+ if ($form->{salesman_id}) {
+ $where .= qq| AND a.salesman_id = ?|;
+ push(@values, conv_i($form->{salesman_id}));
+ }
+
+ my %sort_columns = (
+ 'dunning_description' => [ qw(dn.dunning_description customername invnumber) ],
+ 'customername' => [ qw(customername invnumber) ],
+ 'invnumber' => [ qw(a.invnumber) ],
+ 'transdate' => [ qw(a.transdate a.invnumber) ],
+ 'duedate' => [ qw(a.duedate a.invnumber) ],
+ 'dunning_date' => [ qw(dunning_date a.invnumber) ],
+ 'dunning_duedate' => [ qw(dunning_duedate a.invnumber) ],
+ 'salesman' => [ qw(salesman) ],
+ );
+
+ my $sortdir = !defined $form->{sortdir} ? 'ASC' : $form->{sortdir} ? 'ASC' : 'DESC';
+ my $sortkey = $sort_columns{$form->{sort}} ? $form->{sort} : 'customername';
+ my $sortorder = join ', ', map { "$_ $sortdir" } @{ $sort_columns{$sortkey} };
+
+ my $query =
qq|SELECT a.id, a.ordnumber, a.invoice, a.transdate, a.invnumber, a.amount,
ct.name AS customername, ct.id AS customer_id, a.duedate, da.fee,
da.interest, dn.dunning_description, da.transdate AS dunning_date,
- da.duedate AS dunning_duedate, da.dunning_id, da.dunning_config_id
+ da.duedate AS dunning_duedate, da.dunning_id, da.dunning_config_id,
+ e2.name AS salesman
FROM ar a
- JOIN customer ct ON (a.customer_id = ct.id), dunning da
+ JOIN customer ct ON (a.customer_id = ct.id)
+ LEFT JOIN employee e2 ON (a.salesman_id = e2.id), dunning da
LEFT JOIN dunning_config dn ON (da.dunning_config_id = dn.id)
$where
- ORDER BY name, a.id|;
+ ORDER BY $sortorder|;
$form->{DUNNINGS} = selectall_hashref_query($form, $dbh, $query, @values);
$form->error($main::locale->text('Could not spawn the printer command.')) unless $out;
} else {
+ my $dunning_filename = $form->get_formname_translation('dunning');
$out = IO::File->new('>-');
$out->print(qq|Content-Type: Application/PDF\n| .
- qq|Content-Disposition: attachment; filename="dunning_${dunning_id}.pdf"\n\n|);
+ qq|Content-Disposition: attachment; filename="${dunning_filename}_${dunning_id}.pdf"\n\n|);
}
while (my $line = <$in>) {
dcfg.email_subject, dcfg.email_body, dcfg.email_attachment,
ar.transdate, ar.duedate, ar.customer_id,
- ar.invnumber, ar.ordnumber,
+ ar.invnumber, ar.ordnumber, ar.cp_id,
ar.amount, ar.netamount, ar.paid,
ar.amount - ar.paid AS open_amount,
ar.amount - ar.paid + da.fee + da.interest AS linetotal
my $sth = prepare_execute_query($form, $dbh, $query, $dunning_id);
my $first = 1;
- while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
+ while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
if ($first) {
- map({ $form->{"dn_$_"} = []; } keys(%{$ref}));
+ $form->{TEMPLATE_ARRAYS} = {};
+ map({ $form->{TEMPLATE_ARRAYS}->{"dn_$_"} = []; } keys(%{$ref}));
$first = 0;
}
map { $ref->{$_} = $form->format_amount($myconfig, $ref->{$_}, 2) } qw(amount netamount paid open_amount fee interest linetotal);
map { $form->{$_} = $ref->{$_} } keys %$ref;
- map { push @{ $form->{"dn_$_"} }, $ref->{$_}} keys %$ref;
+ map { push @{ $form->{TEMPLATE_ARRAYS}->{"dn_$_"} }, $ref->{$_} } keys %$ref;
}
$sth->finish();
$query =
qq|SELECT
- c.id AS customer_id, c.name, c.street, c.zipcode, c.city,
- c.country, c.department_1, c.department_2, c.email, c.customernumber
+ c.id AS customer_id, c.name, c.street, c.zipcode, c.city,
+ c.country, c.department_1, c.department_2, c.email, c.customernumber,
+ c.greeting, c.contact, c.phone, c.fax, c.homepage,
+ c.email, c.taxincluded, c.business_id, c.taxnumber, c.iban,
+ co.*
FROM dunning d
- LEFT JOIN ar ON (d.trans_id = ar.id)
- LEFT JOIN customer c ON (ar.customer_id = c.id)
+ LEFT JOIN ar ON (d.trans_id = ar.id)
+ LEFT JOIN customer c ON (ar.customer_id = c.id)
+ LEFT JOIN contacts co ON (ar.cp_id = co.cp_id)
WHERE (d.dunning_id = ?)
LIMIT 1|;
- $ref = selectfirst_hashref_query($form, $dbh, $query, $dunning_id);
+ my $ref = selectfirst_hashref_query($form, $dbh, $query, $dunning_id);
map { $form->{$_} = $ref->{$_} } keys %{ $ref };
$query =
$query =
qq|SELECT
- ar.invnumber, ar.transdate, ar.amount, ar.netamount,
+ ar.invnumber, ar.transdate AS invdate, ar.amount, ar.netamount,
ar.duedate, ar.notes, ar.notes AS invoicenotes,
c.name, c.department_1, c.department_2, c.street, c.zipcode, c.city, c.country,
c.contact, c.customernumber, c.phone, c.fax, c.email,
- c.taxnumber, c.sic_code, c.greeting
+ c.taxnumber, c.greeting
FROM ar
LEFT JOIN customer c ON (ar.customer_id = c.id)
WHERE ar.id = ?|;
- $ref = selectfirst_hashref_query($form, $dbh, $query, $ar_id);
+ my $ref = selectfirst_hashref_query($form, $dbh, $query, $ar_id);
map { $form->{$_} = $ref->{$_} } keys %{ $ref };
$query = qq|SELECT * FROM employee WHERE login = ?|;
$ref = selectfirst_hashref_query($form, $dbh, $query, $form->{login});
map { $form->{"employee_${_}"} = $ref->{$_} } keys %{ $ref };
- $query = qq|SELECT * FROM acc_trans WHERE trans_id = ? ORDER BY oid ASC|;
+ $query = qq|SELECT * FROM acc_trans WHERE trans_id = ? ORDER BY acc_trans_id ASC|;
$sth = prepare_execute_query($form, $dbh, $query, $ar_id);
my ($row, $fee, $interest) = (0, 0, 0);