my $i;
- # check if debit and credit balances
-
- if ($form->{storno}) {
- $form->{reference} = "Storno-" . $form->{reference};
- $form->{description} = "Storno-" . $form->{description};
- }
-
# connect to database, turn off AutoCommit
my $dbh = $form->dbconnect_noauto($myconfig);
$query =
qq|UPDATE gl SET
reference = ?, description = ?, notes = ?,
- transdate = ?, department_id = ?, taxincluded = ?
+ transdate = ?, department_id = ?, taxincluded = ?,
+ storno = ?, storno_id = ?
WHERE id = ?|;
@values = ($form->{reference}, $form->{description}, $form->{notes},
conv_date($form->{transdate}), $department_id, $form->{taxincluded},
+ $form->{storno} ? 't' : 'f', conv_i($form->{storno_id}),
conv_i($form->{id}));
do_query($form, $dbh, $query, @values);
}
}
+ if ($form->{storno} && $form->{storno_id}) {
+ do_query($form, $dbh, qq|UPDATE gl SET storno = 't' WHERE id = ?|, conv_i($form->{storno_id}));
+ }
+
# commit and redirect
my $rc = $dbh->commit;
$dbh->disconnect;
(SELECT id FROM chart c2 WHERE c2.category = ?))|;
$apwhere .=
qq| AND ap.id in (SELECT trans_id FROM acc_trans ac2 WHERE ac2.chart_id IN
- (SELECT id FROM chart c2 WHERE c2.category = ?))"|;
+ (SELECT id FROM chart c2 WHERE c2.category = ?))|;
push(@glvalues, $form->{category});
push(@arvalues, $form->{category});
push(@apvalues, $form->{category});
$query = qq|SELECT closedto, revtrans FROM defaults|;
($form->{closedto}, $form->{revtrans}) = selectrow_query($form, $dbh, $query);
+ $query = qq|SELECT id, gldate
+ FROM gl
+ WHERE id = (SELECT max(id) FROM gl)|;
+ ($form->{previous_id}, $form->{previous_gldate}) = selectrow_query($form, $dbh, $query);
+
if ($form->{id}) {
$query =
- qq|SELECT g.reference, g.description, g.notes, g.transdate,
+ qq|SELECT g.reference, g.description, g.notes, g.transdate, g.storno, g.storno_id,
d.description AS department, e.name AS employee, g.taxincluded, g.gldate
FROM gl g
LEFT JOIN department d ON (d.id = g.department_id)
# retrieve individual rows
$query =
- qq|SELECT c.accno, t.taxkey AS accnotaxkey, a.amount, a.memo,
+ qq|SELECT c.accno, t.taxkey AS accnotaxkey, a.amount, a.memo, a.source,
a.transdate, a.cleared, a.project_id, p.projectnumber,
a.taxkey, t.rate AS taxrate, t.id,
(SELECT c1.accno
$main::lxdebug->leave_sub();
}
+sub storno {
+ $main::lxdebug->enter_sub();
+
+ my ($self, $form, $myconfig, $id) = @_;
+
+ my ($query, $new_id, $storno_row, $acc_trans_rows);
+ my $dbh = $form->get_standard_dbh($myconfig);
+
+ $query = qq|SELECT nextval('glid')|;
+ ($new_id) = selectrow_query($form, $dbh, $query);
+
+ $query = qq|SELECT * FROM gl WHERE id = ?|;
+ $storno_row = selectfirst_hashref_query($form, $dbh, $query, $id);
+
+ $storno_row->{id} = $new_id;
+ $storno_row->{storno_id} = $id;
+ $storno_row->{storno} = 't';
+ $storno_row->{reference} = 'Storno-' . $storno_row->{reference};
+
+ delete @$storno_row{qw(itime mtime)};
+
+ $query = sprintf 'INSERT INTO gl (%s) VALUES (%s)', join(', ', keys %$storno_row), join(', ', map '?', values %$storno_row);
+ do_query($form, $dbh, $query, (values %$storno_row));
+
+ $query = qq|UPDATE gl SET storno = 't' WHERE id = ?|;
+ do_query($form, $dbh, $query, $id);
+
+ # now copy acc_trans entries
+ $query = qq|SELECT * FROM acc_trans WHERE trans_id = ?|;
+ my $rowref = selectall_hashref_query($form, $dbh, $query, $id);
+
+ for my $row (@$rowref) {
+ delete @$row{qw(itime mtime)};
+ $query = sprintf 'INSERT INTO acc_trans (%s) VALUES (%s)', join(', ', keys %$row), join(', ', map '?', values %$row);
+ $row->{trans_id} = $new_id;
+ $row->{amount} *= -1;
+ do_query($form, $dbh, $query, (values %$row));
+ }
+
+ $dbh->commit;
+
+ $main::lxdebug->leave_sub();
+}
+
1;