my $exchangerate = 0;
$form->{defaultcurrency} = $form->get_default_currency($myconfig);
+ $form->{taxincluded} = 0 unless $form->{taxincluded};
($null, $form->{department_id}) = split(/--/, $form->{department});
$form->{AP_amounts}{"amount_$i"} =
(split(/--/, $form->{"AP_amount_$i"}))[0];
}
+
($form->{AP_amounts}{payables}) = split(/--/, $form->{APselected});
($form->{AP_payables}) = split(/--/, $form->{APselected});
- # reverse and parse amounts
- for my $i (1 .. $form->{rowcount}) {
- $form->{"amount_$i"} =
- $form->round_amount(
- $form->parse_amount($myconfig, $form->{"amount_$i"}) *
- $form->{exchangerate} * -1,
- 2);
- $amount += ($form->{"amount_$i"} * -1);
-
- # parse tax_$i for later
- $form->{"tax_$i"} = $form->parse_amount($myconfig, $form->{"tax_$i"}) * -1;
- }
-
- # this is for ap
- $form->{amount} = $amount;
-
- # taxincluded doesn't make sense if there is no amount
- $form->{taxincluded} = 0 if ($form->{amount} == 0);
-
- for my $i (1 .. $form->{rowcount}) {
- ($form->{"tax_id_$i"}, undef) = split /--/, $form->{"taxchart_$i"};
-
- my $query =
- qq|SELECT c.accno, t.taxkey, t.rate | .
- qq|FROM tax t LEFT JOIN chart c on (c.id=t.chart_id) | .
- qq|WHERE t.id = ? | .
- qq|ORDER BY c.accno|;
- my $sth = $dbh->prepare($query);
- $sth->execute($form->{"tax_id_$i"}) || $form->dberror($query . " (" . $form->{"tax_id_$i"} . ")");
- ($form->{AP_amounts}{"tax_$i"}, $form->{"taxkey_$i"}, $form->{"taxrate_$i"}) = $sth->fetchrow_array();
-
- $sth->finish;
-
- my ($tax, $diff);
- if ($form->{taxincluded} *= 1) {
- $tax = $form->{"amount_$i"} - ($form->{"amount_$i"} / ($form->{"taxrate_$i"} + 1));
- $amount = $form->{"amount_$i"} - $tax;
- $form->{"amount_$i"} = $form->round_amount($amount, 2);
- $diff += $amount - $form->{"amount_$i"};
- $form->{"tax_$i"} = $form->round_amount($tax, 2);
- $form->{netamount} += $form->{"amount_$i"};
- } else {
- $form->{"tax_$i"} = $form->{"amount_$i"} * $form->{"taxrate_$i"};
- $form->{netamount} += $form->{"amount_$i"};
- }
- $form->{total_tax} += $form->{"tax_$i"} * -1;
- }
+ # calculate the totals while calculating and reformatting the $amount_$i and $tax_$i
+ ($form->{netamount},$form->{total_tax},$form->{invtotal}) = $form->calculate_arap('buy',$form->{taxincluded}, $form->{exchangerate});
# adjust paidaccounts if there is no date in the last row
$form->{paidaccounts}-- unless ($form->{"datepaid_$form->{paidaccounts}"});
$form->{invpaid} = 0;
- $form->{netamount} *= -1;
# add payments
for my $i (1 .. $form->{paidaccounts}) {
$form->{invpaid} =
$form->round_amount($form->{invpaid} * $form->{exchangerate}, 2);
- # store invoice total, this goes into ap table
- $form->{invtotal} = $form->{netamount} + $form->{total_tax};
+ # # store invoice total, this goes into ap table
+ # $form->{invtotal} = $form->{netamount} + $form->{total_tax};
# amount for total AP
$form->{payables} = $form->{invtotal};
do_query($form, $dbh, $query, $form->{id});
} else {
- my $uid = rand() . time;
-
- $uid .= $form->{login};
- $uid = substr($uid, 2, 75);
+ ($form->{id}) = selectrow_query($form, $dbh, qq|SELECT nextval('glid')|);
$query =
- qq|INSERT INTO ap (invnumber, employee_id,currency_id) | .
- qq|VALUES (?, (SELECT e.id FROM employee e WHERE e.login = ?),
- (SELECT id FROM currencies WHERE name = ?) )|;
- do_query($form, $dbh, $query, $uid, $form->{login}, $form->{currency});
-
- $query = qq|SELECT a.id FROM ap a
- WHERE a.invnumber = ?|;
- ($form->{id}) = selectrow_query($form, $dbh, $query, $uid);
- }
+ qq|INSERT INTO ap (id, invnumber, employee_id,currency_id, taxzone_id) | .
+ qq|VALUES (?, ?, (SELECT e.id FROM employee e WHERE e.login = ?),
+ (SELECT id FROM currencies WHERE name = ?), (SELECT taxzone_id FROM vendor WHERE id = ?) )|;
+ do_query($form, $dbh, $query, $form->{id}, $form->{invnumber}, $::myconfig{login}, $form->{currency}, $form->{vendor_id});
- $form->{invnumber} = $form->{id} unless $form->{invnumber};
+ }
- $query = qq|UPDATE ap SET
- invnumber = ?, transdate = ?, ordnumber = ?, vendor_id = ?, taxincluded = ?,
+ $query = qq|UPDATE ap SET invnumber = ?,
+ transdate = ?, ordnumber = ?, vendor_id = ?, taxincluded = ?,
amount = ?, duedate = ?, paid = ?, netamount = ?,
currency_id = (SELECT id FROM currencies WHERE name = ?), notes = ?, department_id = ?, storno = ?, storno_id = ?,
globalproject_id = ?, direct_debit = ?
exporttype => DATEV_ET_BUCHUNGEN,
format => DATEV_FORMAT_KNE,
dbh => $dbh,
- from => $transdate,
- to => $transdate,
trans_id => $form->{id},
);
my $query =
qq|SELECT a.id, a.invnumber, a.transdate, a.duedate, a.amount, a.paid, | .
qq| a.ordnumber, v.name, a.invoice, a.netamount, a.datepaid, a.notes, | .
- qq| a.globalproject_id, a.storno, a.storno_id, | .
+ qq| a.globalproject_id, a.storno, a.storno_id, a.direct_debit, | .
qq| pr.projectnumber AS globalprojectnumber, | .
qq| e.name AS employee, | .
qq| v.vendornumber, v.country, v.ustid, | .
) AS charts } .
qq|FROM ap a | .
qq|JOIN vendor v ON (a.vendor_id = v.id) | .
+ qq|LEFT JOIN contacts cp ON (a.cp_id = cp.cp_id) | .
qq|LEFT JOIN employee e ON (a.employee_id = e.id) | .
qq|LEFT JOIN project pr ON (a.globalproject_id = pr.id) | .
- qq|LEFT JOIN tax_zones tz ON (tz.id = v.taxzone_id)| .
- qq|LEFT JOIN payment_terms pt ON (pt.id = v.payment_id)|;
+ qq|LEFT JOIN tax_zones tz ON (tz.id = a.taxzone_id)| .
+ qq|LEFT JOIN payment_terms pt ON (pt.id = a.payment_id)|;
my $where = '';
$where .= " AND v.name ILIKE ?";
push(@values, $form->like($form->{vendor}));
}
+ if ($form->{"cp_name"}) {
+ $where .= " AND (cp.cp_name ILIKE ? OR cp.cp_givenname ILIKE ?)";
+ push(@values, ('%' . $form->{"cp_name"} . '%')x2);
+ }
if ($form->{department}) {
# ähnlich wie commit 0bbfb33b6aa8e38bb6c81d1684ab7d08e5b5c5af abteilung
# wird so nicht mehr als zeichenkette zusammengebaut
my $sortdir = !defined $form->{sortdir} ? 'ASC' : $form->{sortdir} ? 'ASC' : 'DESC';
my $sortorder = join(', ', map { "$_ $sortdir" } @a);
- if (grep({ $_ eq $form->{sort} } qw(transdate id invnumber ordnumber name netamount tax amount paid datepaid due duedate notes employee transaction_description))) {
+ if (grep({ $_ eq $form->{sort} } qw(transdate id invnumber ordnumber name netamount tax amount paid datepaid due duedate notes employee transaction_description direct_debit))) {
$sortorder = $form->{sort} . " $sortdir";
}
my ($self, $form, $for_post_payments) = @_;
my ($exchangerate, $i, $j, $k, $key, $akey, $ref, $index, $taxamount, $totalamount, $totaltax, $totalwithholding, $withholdingrate,
- $taxincluded, $tax, $diff);
+ $tax, $diff);
# forex
$form->{forex} = $form->{exchangerate};
}
}
- $form->{taxincluded} = $taxincluded if ($form->{id});
$form->{paidaccounts} = 1 if not defined $form->{paidaccounts};
if ($form->{taxincluded} && $form->{taxrate} && $totalamount) {