From: Thomas Heck
Date: Wed, 27 Feb 2013 13:44:58 +0000 (+0100)
Subject: Merge branch 'master' into dev
X-Git-Tag: release-3.1.0beta1~554^2~1^2~7
X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/commitdiff_plain/6061749dc0ece2873ef61a0c14af1b8a9e46034a?hp=224291ddfd1633e2e3a47632cca24c1039fcb105
Merge branch 'master' into dev
---
diff --git a/SL/AM.pm b/SL/AM.pm
index c7a88d2df..5645c4dd7 100644
--- a/SL/AM.pm
+++ b/SL/AM.pm
@@ -1779,7 +1779,9 @@ sub get_tax {
taxkey,
taxdescription,
round(rate * 100, 2) AS rate,
- chart_id
+ chart_id,
+ (id IN (SELECT tax_id
+ FROM acc_trans)) AS tax_already_used
FROM tax
WHERE id = ? |;
diff --git a/SL/AP.pm b/SL/AP.pm
index 03a21e3c6..54abcd17e 100644
--- a/SL/AP.pm
+++ b/SL/AP.pm
@@ -209,24 +209,28 @@ sub post_transaction {
# insert detail records in acc_trans
$query =
qq|INSERT INTO acc_trans | .
- qq| (trans_id, chart_id, amount, transdate, project_id, taxkey, tax_id)| .
+ qq| (trans_id, chart_id, amount, transdate, project_id, taxkey, tax_id, chart_link)| .
qq|VALUES (?, (SELECT c.id FROM chart c WHERE c.accno = ?), | .
- qq| ?, ?, ?, ?, ?)|;
+ qq| ?, ?, ?, ?, ?,| .
+ qq| (SELECT c.link FROM chart c WHERE c.accno = ?))|;
@values = ($form->{id}, $form->{AP_amounts}{"amount_$i"},
$form->{"amount_$i"}, conv_date($form->{transdate}),
- $project_id, $form->{"taxkey_$i"}, conv_i($form->{"tax_id_$i"}));
+ $project_id, $form->{"taxkey_$i"}, conv_i($form->{"tax_id_$i"}),
+ $form->{AP_amounts}{"amount_$i"});
do_query($form, $dbh, $query, @values);
if ($form->{"tax_$i"} != 0) {
# insert detail records in acc_trans
$query =
qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, | .
- qq| project_id, taxkey, tax_id) | .
+ qq| project_id, taxkey, tax_id, chart_link) | .
qq|VALUES (?, (SELECT c.id FROM chart c WHERE c.accno = ?), | .
- qq| ?, ?, ?, ?, ?)|;
+ qq| ?, ?, ?, ?, ?,| .
+ qq| (SELECT c.link FROM chart c WHERE c.accno = ?))|;
@values = ($form->{id}, $form->{AP_amounts}{"tax_$i"},
$form->{"tax_$i"}, conv_date($form->{transdate}),
- $project_id, $form->{"taxkey_$i"}, conv_i($form->{"tax_id_$i"}));
+ $project_id, $form->{"taxkey_$i"}, conv_i($form->{"tax_id_$i"}),
+ $form->{AP_amounts}{"tax_$i"});
do_query($form, $dbh, $query, @values);
}
@@ -235,7 +239,7 @@ sub post_transaction {
# add payables
$query =
- qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, taxkey, tax_id) | .
+ qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, taxkey, tax_id, chart_link) | .
qq|VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?, | .
qq| (SELECT taxkey_id FROM chart WHERE accno = ?),| .
qq| (SELECT tax_id| .
@@ -244,9 +248,11 @@ sub post_transaction {
qq| FROM chart| .
qq| WHERE accno = ?)| .
qq| AND startdate <= ?| .
- qq| ORDER BY startdate DESC LIMIT 1))|;
+ qq| ORDER BY startdate DESC LIMIT 1),| .
+ qq| (SELECT c.link FROM chart c WHERE c.accno = ?))|;
@values = ($form->{id}, $form->{AP_amounts}{payables}, $form->{payables},
- conv_date($form->{transdate}), $form->{AP_amounts}{payables}, $form->{AP_amounts}{payables}, conv_date($form->{transdate}));
+ conv_date($form->{transdate}), $form->{AP_amounts}{payables}, $form->{AP_amounts}{payables}, conv_date($form->{transdate}),
+ $form->{AP_amounts}{payables});
do_query($form, $dbh, $query, @values);
}
@@ -290,7 +296,7 @@ sub post_transaction {
2);
if ($form->{payables}) {
$query =
- qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, project_id, taxkey, tax_id) | .
+ qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, project_id, taxkey, tax_id, chart_link) | .
qq|VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?, ?, | .
qq| (SELECT taxkey_id FROM chart WHERE accno = ?),| .
qq| (SELECT tax_id| .
@@ -299,10 +305,12 @@ sub post_transaction {
qq| FROM chart| .
qq| WHERE accno = ?)| .
qq| AND startdate <= ?| .
- qq| ORDER BY startdate DESC LIMIT 1))|;
+ qq| ORDER BY startdate DESC LIMIT 1),| .
+ qq| (SELECT c.link FROM chart c WHERE c.accno = ?))|;
@values = ($form->{id}, $form->{AP_payables}, $amount,
conv_date($form->{"datepaid_$i"}), $project_id,
- $form->{AP_payables}, $form->{AP_payables}, conv_date($form->{"datepaid_$i"}));
+ $form->{AP_payables}, $form->{AP_payables}, conv_date($form->{"datepaid_$i"}),
+ $form->{AP_payables});
do_query($form, $dbh, $query, @values);
}
$form->{payables} = $amount;
@@ -310,7 +318,7 @@ sub post_transaction {
# add payment
my $gldate = (conv_date($form->{"gldate_$i"}))? conv_date($form->{"gldate_$i"}) : conv_date($form->current_date($myconfig));
$query =
- qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, gldate, source, memo, project_id, taxkey, tax_id) | .
+ qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, gldate, source, memo, project_id, taxkey, tax_id, chart_link) | .
qq|VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?, ?, ?, ?, ?, | .
qq| (SELECT taxkey_id FROM chart WHERE accno = ?), | .
qq| (SELECT tax_id| .
@@ -319,11 +327,13 @@ sub post_transaction {
qq| FROM chart| .
qq| WHERE accno = ?)| .
qq| AND startdate <= ?| .
- qq| ORDER BY startdate DESC LIMIT 1))|;
+ qq| ORDER BY startdate DESC LIMIT 1),| .
+ qq| (SELECT c.link FROM chart c WHERE c.accno = ?))|;
@values = ($form->{id}, $form->{"AP_paid_account_$i"}, $form->{"paid_$i"},
conv_date($form->{"datepaid_$i"}), $gldate, $form->{"source_$i"},
$form->{"memo_$i"}, $project_id, $form->{"AP_paid_account_$i"},
- $form->{"AP_paid_account_$i"}, conv_date($form->{"datepaid_$i"}));
+ $form->{"AP_paid_account_$i"}, conv_date($form->{"datepaid_$i"}),
+ $form->{"AP_paid_account_$i"});
do_query($form, $dbh, $query, @values);
# add exchange rate difference
@@ -332,7 +342,7 @@ sub post_transaction {
($form->{"exchangerate_$i"} - 1), 2);
if ($amount != 0) {
$query =
- qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, fx_transaction, cleared, project_id, taxkey, tax_id) | .
+ qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, fx_transaction, cleared, project_id, taxkey, tax_id, chart_link) | .
qq|VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?, 't', 'f', ?, | .
qq| (SELECT taxkey_id FROM chart WHERE accno = ?), | .
qq| (SELECT tax_id| .
@@ -341,11 +351,13 @@ sub post_transaction {
qq| FROM chart| .
qq| WHERE accno = ?)| .
qq| AND startdate <= ?| .
- qq| ORDER BY startdate DESC LIMIT 1))|;
+ qq| ORDER BY startdate DESC LIMIT 1),| .
+ qq| (SELECT c.link FROM chart c WHERE c.accno = ?))|;
@values = ($form->{id}, $form->{"AP_paid_account_$i"}, $amount,
conv_date($form->{"datepaid_$i"}), $project_id,
$form->{"AP_paid_account_$i"},
- $form->{"AP_paid_account_$i"}, conv_date($form->{"datepaid_$i"}));
+ $form->{"AP_paid_account_$i"}, conv_date($form->{"datepaid_$i"}),
+ $form->{"AP_paid_account_$i"});
do_query($form, $dbh, $query, @values);
}
@@ -357,7 +369,7 @@ sub post_transaction {
if ($amount != 0) {
$query =
- qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, fx_transaction, cleared, project_id, taxkey, tax_id) | .
+ qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, fx_transaction, cleared, project_id, taxkey, tax_id, chart_link) | .
qq|VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?, 't', 'f', ?, | .
qq| (SELECT taxkey_id FROM chart WHERE accno = ?)| .
qq| (SELECT tax_id| .
@@ -366,13 +378,14 @@ sub post_transaction {
qq| FROM chart| .
qq| WHERE accno = ?)| .
qq| AND startdate <= ?| .
- qq| ORDER BY startdate DESC LIMIT 1))|;
- @values = ($form->{id}, ($amount > 0) ?
- $form->{fxgain_accno} : $form->{fxloss_accno},
+ qq| ORDER BY startdate DESC LIMIT 1),| .
+ qq| (SELECT c.link FROM chart c WHERE c.accno = ?))|;
+ @values = ($form->{id},
+ ($amount > 0) ? $form->{fxgain_accno} : $form->{fxloss_accno},
$amount, conv_date($form->{"datepaid_$i"}), $project_id,
- ($amount > 0) ?
- $form->{fxgain_accno} : $form->{fxloss_accno},
- ($amount > 0) ? $form->{fxgain_accno} : $form->{fxloss_accno}, conv_date($form->{"datepaid_$i"}));
+ ($amount > 0) ? $form->{fxgain_accno} : $form->{fxloss_accno},
+ ($amount > 0) ? $form->{fxgain_accno} : $form->{fxloss_accno}, conv_date($form->{"datepaid_$i"}),
+ ($amount > 0) ? $form->{fxgain_accno} : $form->{fxloss_accno});
do_query($form, $dbh, $query, @values);
}
diff --git a/SL/AR.pm b/SL/AR.pm
index a953af44b..795849583 100644
--- a/SL/AR.pm
+++ b/SL/AR.pm
@@ -172,25 +172,25 @@ sub post_transaction {
my $project_id = conv_i($form->{"project_id_$i"});
# insert detail records in acc_trans
- $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, project_id, taxkey, tax_id)
- VALUES (?, (SELECT c.id FROM chart c WHERE c.accno = ?), ?, ?, ?, ?, ?)|;
+ $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, project_id, taxkey, tax_id, chart_link)
+ VALUES (?, (SELECT c.id FROM chart c WHERE c.accno = ?), ?, ?, ?, ?, ?, (SELECT c.link FROM chart c WHERE c.accno = ?))|;
@values = (conv_i($form->{id}), $form->{AR_amounts}{"amount_$i"}, conv_i($form->{"amount_$i"}), conv_date($form->{transdate}), $project_id,
- conv_i($form->{"taxkey_$i"}), conv_i($form->{"tax_id_$i"}));
+ conv_i($form->{"taxkey_$i"}), conv_i($form->{"tax_id_$i"}), $form->{AR_amounts}{"amount_$i"});
do_query($form, $dbh, $query, @values);
if ($form->{"tax_$i"} != 0) {
# insert detail records in acc_trans
- $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, project_id, taxkey, tax_id)
- VALUES (?, (SELECT c.id FROM chart c WHERE c.accno = ?), ?, ?, ?, ?, ?)|;
+ $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, project_id, taxkey, tax_id, chart_link)
+ VALUES (?, (SELECT c.id FROM chart c WHERE c.accno = ?), ?, ?, ?, ?, ?, (SELECT c.link FROM chart c WHERE c.accno = ?))|;
@values = (conv_i($form->{id}), $form->{AR_amounts}{"tax_$i"}, conv_i($form->{"tax_$i"}), conv_date($form->{transdate}), $project_id,
- conv_i($form->{"taxkey_$i"}), conv_i($form->{"tax_id_$i"}));
+ conv_i($form->{"taxkey_$i"}), conv_i($form->{"tax_id_$i"}), $form->{AR_amounts}{"tax_$i"});
do_query($form, $dbh, $query, @values);
}
}
}
# add recievables
- $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, taxkey, tax_id)
+ $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, taxkey, tax_id, chart_link)
VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?, (SELECT taxkey_id FROM chart WHERE accno = ?),
(SELECT tax_id
FROM taxkeys
@@ -198,9 +198,10 @@ sub post_transaction {
FROM chart
WHERE accno = ?)
AND startdate <= ?
- ORDER BY startdate DESC LIMIT 1))|;
+ ORDER BY startdate DESC LIMIT 1),
+ (SELECT c.link FROM chart c WHERE c.accno = ?))|;
@values = (conv_i($form->{id}), $form->{AR_amounts}{receivables}, conv_i($form->{receivables}), conv_date($form->{transdate}),
- $form->{AR_amounts}{receivables}, $form->{AR_amounts}{receivables}, conv_date($form->{transdate}));
+ $form->{AR_amounts}{receivables}, $form->{AR_amounts}{receivables}, conv_date($form->{transdate}), $form->{AR_amounts}{receivables});
do_query($form, $dbh, $query, @values);
} else {
@@ -237,7 +238,7 @@ sub post_transaction {
if ($amount != 0) {
# add receivable
- $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, project_id, taxkey, tax_id)
+ $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, project_id, taxkey, tax_id, chart_link)
VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?, ?, (SELECT taxkey_id FROM chart WHERE accno = ?),
(SELECT tax_id
FROM taxkeys
@@ -245,8 +246,11 @@ sub post_transaction {
FROM chart
WHERE accno = ?)
AND startdate <= ?
- ORDER BY startdate DESC LIMIT 1))|;
- @values = (conv_i($form->{id}), $form->{AR}{receivables}, $amount, conv_date($form->{"datepaid_$i"}), $project_id, $form->{AR}{receivables}, $form->{AR}{receivables}, conv_date($form->{"datepaid_$i"}));
+ ORDER BY startdate DESC LIMIT 1),
+ (SELECT c.link FROM chart c WHERE c.accno = ?))|;
+ @values = (conv_i($form->{id}), $form->{AR}{receivables}, $amount, conv_date($form->{"datepaid_$i"}), $project_id, $form->{AR}{receivables}, $form->{AR}{receivables}, conv_date($form->{"datepaid_$i"}),
+ $form->{AR}{receivables});
+
do_query($form, $dbh, $query, @values);
}
@@ -255,7 +259,7 @@ sub post_transaction {
my $project_id = conv_i($form->{"paid_project_id_$i"});
my $gldate = (conv_date($form->{"gldate_$i"}))? conv_date($form->{"gldate_$i"}) : conv_date($form->current_date($myconfig));
$amount = $form->{"paid_$i"} * -1;
- $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, gldate, source, memo, project_id, taxkey, tax_id)
+ $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, gldate, source, memo, project_id, taxkey, tax_id, chart_link)
VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?, ?, ?, ?, ?, (SELECT taxkey_id FROM chart WHERE accno = ?),
(SELECT tax_id
FROM taxkeys
@@ -263,16 +267,17 @@ sub post_transaction {
FROM chart
WHERE accno = ?)
AND startdate <= ?
- ORDER BY startdate DESC LIMIT 1))|;
+ ORDER BY startdate DESC LIMIT 1),
+ (SELECT c.link FROM chart c WHERE c.accno = ?))|;
@values = (conv_i($form->{id}), $form->{AR}{"paid_$i"}, $amount, conv_date($form->{"datepaid_$i"}), $gldate, $form->{"source_$i"}, $form->{"memo_$i"}, $project_id, $form->{AR}{"paid_$i"},
- $form->{AR}{"paid_$i"}, conv_date($form->{"datepaid_$i"}));
+ $form->{AR}{"paid_$i"}, conv_date($form->{"datepaid_$i"}), $form->{AR}{"paid_$i"});
do_query($form, $dbh, $query, @values);
# exchangerate difference for payment
$amount = $form->round_amount( $form->{"paid_$i"} * ($form->{"exchangerate_$i"} - 1) * -1, 2);
if ($amount != 0) {
- $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, fx_transaction, cleared, project_id, taxkey, tax_id)
+ $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, fx_transaction, cleared, project_id, taxkey, tax_id, chart_link)
VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?, 't', 'f', ?, (SELECT taxkey_id FROM chart WHERE accno = ?),
(SELECT tax_id
FROM taxkeys
@@ -280,9 +285,10 @@ sub post_transaction {
FROM chart
WHERE accno = ?)
AND startdate <= ?
- ORDER BY startdate DESC LIMIT 1))|;
+ ORDER BY startdate DESC LIMIT 1),
+ (SELECT c.link FROM chart c WHERE c.accno = ?))|;
@values = (conv_i($form->{id}), $form->{AR}{"paid_$i"}, $amount, conv_date($form->{"datepaid_$i"}), $project_id, $form->{AR}{"paid_$i"},
- $form->{AR}{"paid_$i"}, conv_date($form->{"datepaid_$i"}));
+ $form->{AR}{"paid_$i"}, conv_date($form->{"datepaid_$i"}), $form->{AR}{"paid_$i"});
do_query($form, $dbh, $query, @values);
}
@@ -291,7 +297,7 @@ sub post_transaction {
if ($amount != 0) {
my $accno = ($amount > 0) ? $form->{fxgain_accno} : $form->{fxloss_accno};
- $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, fx_transaction, cleared, project_id, taxkey, tax_id)
+ $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, fx_transaction, cleared, project_id, taxkey, tax_id, chart_link)
VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?, 't', 'f', ?, (SELECT taxkey_id FROM chart WHERE accno = ?),
(SELECT tax_id
FROM taxkeys
@@ -299,8 +305,9 @@ sub post_transaction {
FROM chart
WHERE accno = ?)
AND startdate <= ?
- ORDER BY startdate DESC LIMIT 1))|;
- @values = (conv_i($form->{id}), $accno, $amount, conv_date($form->{"datepaid_$i"}), $project_id, $accno, $accno, conv_date($form->{"datepaid_$i"}));
+ ORDER BY startdate DESC LIMIT 1),
+ (SELECT c.link FROM chart c WHERE c.accno = ?))|;
+ @values = (conv_i($form->{id}), $accno, $amount, conv_date($form->{"datepaid_$i"}), $project_id, $accno, $accno, conv_date($form->{"datepaid_$i"}), $accno);
do_query($form, $dbh, $query, @values);
}
}
diff --git a/SL/BackgroundJob/SelfTest/Transactions.pm b/SL/BackgroundJob/SelfTest/Transactions.pm
index 881298d98..a7fe76364 100644
--- a/SL/BackgroundJob/SelfTest/Transactions.pm
+++ b/SL/BackgroundJob/SelfTest/Transactions.pm
@@ -309,7 +309,7 @@ sub check_stornos_ohne_partner {
LEFT JOIN vendor v on (v.id = ap.vendor_id)
WHERE storno_id is null AND storno is true AND ap.id not in (SELECT storno_id FROM ap WHERE storno_id is not null AND storno is true);
|;
-
+
my $stornos_ohne_partner = selectall_hashref_query($::form, $self->dbh, $query);
$self->tester->ok(@$stornos_ohne_partner == 0, 'Es sollte keine Stornos ohne Partner geben');
diff --git a/SL/CT.pm b/SL/CT.pm
index a32486b59..97f57c72c 100644
--- a/SL/CT.pm
+++ b/SL/CT.pm
@@ -614,13 +614,37 @@ sub search {
my $where = "1 = 1";
my @values;
- my %allowed_sort_columns =
- map { $_, 1 } qw(
- id customernumber vendornumber name contact phone fax email street
- taxnumber business invnumber ordnumber quonumber zipcode city
+ my %allowed_sort_columns = (
+ "id" => "id",
+ "customernumber" => "customernumber",
+ "vendornumber" => "vendornumber",
+ "name" => "ct.name",
+ "contact" => "contact",
+ "phone" => "phone",
+ "fax" => "fax",
+ "email" => "email",
+ "street" => "street",
+ "taxnumber" => "taxnumber",
+ "business" => "business",
+ "invnumber" => "invnumber",
+ "ordnumber" => "ordnumber",
+ "quonumber" => "quonumber",
+ "zipcode" => "zipcode",
+ "city" => "city",
+ "country" => "country",
+ "salesman" => "e.name"
);
- my $sortorder = $form->{sort} && $allowed_sort_columns{$form->{sort}} ? $form->{sort} : "name";
- $form->{sort} = $sortorder;
+
+ $form->{sort} ||= "name";
+ my $sortorder;
+ if ( $join_records ) {
+ # in UNION case order by hash key, e.g. salesman
+ # the UNION created an implicit select around the result
+ $sortorder = $allowed_sort_columns{$form->{sort}} ? $form->{sort} : "name";
+ } else {
+ # in not UNION case order by hash value, e.g. e.name
+ $sortorder = $allowed_sort_columns{$form->{sort}} ? $allowed_sort_columns{$form->{sort}} : "ct.name";
+ }
my $sortdir = !defined $form->{sortdir} ? 'ASC' : $form->{sortdir} ? 'ASC' : 'DESC';
if ($sortorder !~ /(business|id)/ && !$join_records) {
@@ -659,6 +683,19 @@ sub search {
push @values, ('%' . $form->{addr_city} . '%') x 2;
}
+ if ($form->{addr_country}) {
+ $where .= " AND ((lower(ct.country) LIKE lower(?))
+ OR
+ (ct.id IN (
+ SELECT trans_id
+ FROM shipto
+ WHERE (module = 'CT')
+ AND (lower(shiptocountry) LIKE lower(?))
+ ))
+ )";
+ push @values, ('%' . $form->{addr_country} . '%') x 2;
+ }
+
if ( $form->{status} eq 'orphaned' ) {
$where .=
qq| AND ct.id NOT IN | .
@@ -716,10 +753,11 @@ sub search {
}
my $query =
- qq|SELECT ct.*, b.description AS business | .
+ qq|SELECT ct.*, b.description AS business, e.name as salesman | .
(qq|, NULL AS invnumber, NULL AS ordnumber, NULL AS quonumber, NULL AS invid, NULL AS module, NULL AS formtype, NULL AS closed | x!! $join_records) .
qq|FROM $cv ct | .
qq|LEFT JOIN business b ON (ct.business_id = b.id) | .
+ qq|LEFT JOIN employee e ON (ct.salesman_id = e.id) | .
qq|WHERE $where|;
my @saved_values = @values;
@@ -733,13 +771,14 @@ sub search {
push(@values, @saved_values);
$query .=
qq| UNION | .
- qq|SELECT ct.*, b.description AS business, | .
+ qq|SELECT ct.*, b.description AS business, e.name as salesman, | .
qq| a.invnumber, a.ordnumber, a.quonumber, a.id AS invid, | .
qq| '$module' AS module, 'invoice' AS formtype, | .
qq| (a.amount = a.paid) AS closed | .
qq|FROM $cv ct | .
qq|JOIN $ar a ON (a.${cv}_id = ct.id) | .
qq|LEFT JOIN business b ON (ct.business_id = b.id) | .
+ qq|LEFT JOIN employee e ON (ct.salesman_id = e.id) | .
qq|WHERE $where AND (a.invoice = '1')|;
}
@@ -747,12 +786,13 @@ sub search {
push(@values, @saved_values);
$query .=
qq| UNION | .
- qq|SELECT ct.*, b.description AS business,| .
+ qq|SELECT ct.*, b.description AS business, e.name as salesman, | .
qq| ' ' AS invnumber, o.ordnumber, o.quonumber, o.id AS invid, | .
qq| 'oe' AS module, 'order' AS formtype, o.closed | .
qq|FROM $cv ct | .
qq|JOIN oe o ON (o.${cv}_id = ct.id) | .
qq|LEFT JOIN business b ON (ct.business_id = b.id) | .
+ qq|LEFT JOIN employee e ON (ct.salesman_id = e.id) | .
qq|WHERE $where AND (o.quotation = '0')|;
}
@@ -760,12 +800,13 @@ sub search {
push(@values, @saved_values);
$query .=
qq| UNION | .
- qq|SELECT ct.*, b.description AS business, | .
+ qq|SELECT ct.*, b.description AS business, e.name as salesman, | .
qq| ' ' AS invnumber, o.ordnumber, o.quonumber, o.id AS invid, | .
qq| 'oe' AS module, 'quotation' AS formtype, o.closed | .
qq|FROM $cv ct | .
qq|JOIN oe o ON (o.${cv}_id = ct.id) | .
qq|LEFT JOIN business b ON (ct.business_id = b.id) | .
+ qq|LEFT JOIN employee e ON (ct.salesman_id = e.id) | .
qq|WHERE $where AND (o.quotation = '1')|;
}
}
diff --git a/SL/Common.pm b/SL/Common.pm
index 726c4c8e2..159609d30 100644
--- a/SL/Common.pm
+++ b/SL/Common.pm
@@ -441,6 +441,9 @@ sub get_vc_details {
$query = qq|SELECT * FROM contacts WHERE (cp_cv_id = ?)|;
$form->{CONTACTS} = selectall_hashref_query($form, $dbh, $query, $vc_id);
+ # Only show default pricegroup for customer, not vendor, which is why this is outside the main query
+ ($form->{pricegroup}) = selectrow_query($form, $dbh, qq|SELECT pricegroup FROM pricegroup WHERE id = ?|, $form->{klass});
+
$dbh->disconnect();
$main::lxdebug->leave_sub();
diff --git a/SL/Controller/Base.pm b/SL/Controller/Base.pm
index aa65645ae..2d86f0f96 100644
--- a/SL/Controller/Base.pm
+++ b/SL/Controller/Base.pm
@@ -80,6 +80,7 @@ sub render {
croak "Unsupported type: " . $options->{type} unless $options->{type} =~ m/^(?:html|js|json)$/;
# The "template" argument must be a string or a reference to one.
+ $template = ${ $template } if ((ref($template) || '') eq 'REF') && (ref(${ $template }) eq 'SL::Presenter::EscapedText');
croak "Unsupported 'template' reference type: " . ref($template) if ref($template) && (ref($template) !~ m/^(?:SCALAR|SL::Presenter::EscapedText)$/);
# If all output is turned off then don't output the header either.
@@ -380,6 +381,11 @@ If C<$template> is a reference to a scalar then the referenced
scalar's content is used as the content to process. The C option
is not considered in this case.
+C<$template> can also be an instance of L
+or a reference to such an instance. Both of these cases are handled
+the same way as if C<$template> were a reference to a scalar: its
+content is processed, and C is not considered.
+
Other reference types, unknown options and unknown arguments to the
C option cause the function to L.
diff --git a/SL/Controller/RecordLinks.pm b/SL/Controller/RecordLinks.pm
new file mode 100644
index 000000000..fd424b967
--- /dev/null
+++ b/SL/Controller/RecordLinks.pm
@@ -0,0 +1,35 @@
+package SL::Controller::RecordLinks;
+
+use strict;
+
+use parent qw(SL::Controller::Base);
+
+use SL::DB::Order;
+use SL::DB::DeliveryOrder;
+use SL::DB::Invoice;
+use SL::DB::PurchaseInvoice;
+use SL::Locale::String;
+
+#
+# actions
+#
+
+sub action_ajax_list {
+ my ($self) = @_;
+
+ eval {
+ die $::locale->text("Invalid parameters") if (!$::form->{object_id} || ($::form->{object_model} !~ m/^(?:Order|DeliveryOrder|Invoice|PurchaseInvoice)$/));
+
+ my $model = 'SL::DB::' . $::form->{object_model};
+ my $object = $model->new(id => $::form->{object_id})->load || die $::locale->text("Record not found");
+ my $linked_records = $object->linked_records(direction => 'both');
+ my $output = SL::Presenter->get->grouped_record_list($linked_records);
+ $self->render(\$output, { layout => 0, process => 0 });
+
+ 1;
+ } or do {
+ $self->render('generic/error', { layout => 0 }, label_error => $@);
+ };
+}
+
+1;
diff --git a/SL/DATEV.pm b/SL/DATEV.pm
index 875588859..b748d30d2 100644
--- a/SL/DATEV.pm
+++ b/SL/DATEV.pm
@@ -465,11 +465,11 @@ sub _get_transactions {
next;
}
- # determine at which array position the reference value (called absumsatz) is
+ # determine at which array position the reference value (called absumsatz) is
# and which amount it has
for my $j (0 .. (scalar(@{$trans}) - 1)) {
-
+
# Three cases:
# 1: gl transaction (Dialogbuchung), invoice is false, no double split booking allowed
diff --git a/SL/DB/Invoice.pm b/SL/DB/Invoice.pm
index dd26532e0..77d6769a8 100644
--- a/SL/DB/Invoice.pm
+++ b/SL/DB/Invoice.pm
@@ -170,16 +170,21 @@ sub _post_add_acctrans {
my ($self, $entries) = @_;
my $default_tax_id = SL::DB::Manager::Tax->find_by(taxkey => 0)->id;
+ my $chart_link;
while (my ($chart_id, $spec) = each %{ $entries }) {
$spec = { taxkey => 0, tax_id => $default_tax_id, amount => $spec } unless ref $spec;
+ $chart_link = SL::DB::Manager::Chart->find_by(id => $chart_id)->{'link'};
+ $chart_link ||= '';
+
SL::DB::AccTransaction->new(trans_id => $self->id,
chart_id => $chart_id,
amount => $spec->{amount},
tax_id => $spec->{tax_id},
taxkey => $spec->{taxkey},
project_id => $self->globalproject_id,
- transdate => $self->transdate)->save;
+ transdate => $self->transdate,
+ chart_link => $chart_link)->save;
}
}
diff --git a/SL/DB/MetaSetup/AccTransaction.pm b/SL/DB/MetaSetup/AccTransaction.pm
index 29d5c3534..db89491cf 100644
--- a/SL/DB/MetaSetup/AccTransaction.pm
+++ b/SL/DB/MetaSetup/AccTransaction.pm
@@ -27,6 +27,7 @@ __PACKAGE__->meta->setup(
itime => { type => 'timestamp', default => 'now()' },
mtime => { type => 'timestamp' },
tax_id => { type => 'integer', not_null => 1 },
+ chart_link => { type => 'text', not_null => 1 },
],
primary_key_columns => [ 'acc_trans_id' ],
@@ -41,6 +42,11 @@ __PACKAGE__->meta->setup(
class => 'SL::DB::Project',
key_columns => { project_id => 'id' },
},
+
+ tax => {
+ class => 'SL::DB::Tax',
+ key_columns => { tax_id => 'id' },
+ },
],
);
diff --git a/SL/DB/MetaSetup/PeriodicInvoicesConfig.pm b/SL/DB/MetaSetup/PeriodicInvoicesConfig.pm
index aeaf1c2ed..8860e8c80 100644
--- a/SL/DB/MetaSetup/PeriodicInvoicesConfig.pm
+++ b/SL/DB/MetaSetup/PeriodicInvoicesConfig.pm
@@ -32,7 +32,7 @@ __PACKAGE__->meta->setup(
key_columns => { ar_chart_id => 'id' },
},
- oe => {
+ order => {
class => 'SL::DB::Order',
key_columns => { oe_id => 'id' },
},
diff --git a/SL/DB/PeriodicInvoicesConfig.pm b/SL/DB/PeriodicInvoicesConfig.pm
index c9ef22285..2b4542a97 100644
--- a/SL/DB/PeriodicInvoicesConfig.pm
+++ b/SL/DB/PeriodicInvoicesConfig.pm
@@ -4,16 +4,6 @@ use strict;
use SL::DB::MetaSetup::PeriodicInvoicesConfig;
-__PACKAGE__->meta->add_relationships(
- order => {
- type => 'many to one',
- class => 'SL::DB::Order',
- column_map => { oe_id => 'id' },
- },
-);
-
-__PACKAGE__->meta->initialize;
-
# Creates get_all, get_all_count, get_all_iterator, delete_all and update_all.
__PACKAGE__->meta->make_manager_class;
diff --git a/SL/Form.pm b/SL/Form.pm
index f406817f6..e7d142599 100644
--- a/SL/Form.pm
+++ b/SL/Form.pm
@@ -490,10 +490,12 @@ sub header {
push @header, "";
}
- push @header, map { qq|| } $layout->stylesheets;
+ my $auto_reload_resources_param = $layout->auto_reload_resources_param;
+
+ push @header, map { qq|| } $layout->stylesheets;
push @header, " " if $self->{landscape};
push @header, "" if -f $self->{favicon};
- push @header, map { qq|| } $layout->javascripts;
+ push @header, map { qq|| } $layout->javascripts;
push @header, $self->{javascript} if $self->{javascript};
push @header, map { $_->show_javascript } @{ $self->{AJAX} || [] };
diff --git a/SL/GL.pm b/SL/GL.pm
index 5783fbfd3..10d6ee120 100644
--- a/SL/GL.pm
+++ b/SL/GL.pm
@@ -157,11 +157,11 @@ sub post_transaction {
if ($amount != 0) {
$query =
qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate,
- source, memo, project_id, taxkey, ob_transaction, cb_transaction, tax_id)
+ source, memo, project_id, taxkey, ob_transaction, cb_transaction, tax_id, chart_link)
VALUES (?, (SELECT id FROM chart WHERE accno = ?),
- ?, ?, ?, ?, ?, ?, ?, ?, ?)|;
+ ?, ?, ?, ?, ?, ?, ?, ?, ?, (SELECT link FROM chart WHERE accno = ?))|;
@values = (conv_i($form->{id}), $accno, $amount, conv_date($form->{transdate}),
- $form->{"source_$i"}, $form->{"memo_$i"}, $project_id, $taxkey, $form->{ob_transaction} ? 't' : 'f', $form->{cb_transaction} ? 't' : 'f', conv_i($form->{"tax_id_$i"}));
+ $form->{"source_$i"}, $form->{"memo_$i"}, $project_id, $taxkey, $form->{ob_transaction} ? 't' : 'f', $form->{cb_transaction} ? 't' : 'f', conv_i($form->{"tax_id_$i"}), $accno);
do_query($form, $dbh, $query, @values);
}
@@ -169,12 +169,16 @@ sub post_transaction {
# add taxentry
$query =
qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate,
- source, memo, project_id, taxkey, tax_id)
+ source, memo, project_id, taxkey, tax_id, chart_link)
VALUES (?, (SELECT chart_id FROM tax WHERE id = ?),
- ?, ?, ?, ?, ?, ?, ?)|;
+ ?, ?, ?, ?, ?, ?, ?, (SELECT link
+ FROM chart
+ WHERE id = (SELECT chart_id
+ FROM tax
+ WHERE id = ?)))|;
@values = (conv_i($form->{id}), conv_i($form->{"tax_id_$i"}),
$tax, conv_date($form->{transdate}), $form->{"source_$i"},
- $form->{"memo_$i"}, $project_id, $taxkey, conv_i($form->{"tax_id_$i"}));
+ $form->{"memo_$i"}, $project_id, $taxkey, conv_i($form->{"tax_id_$i"}), conv_i($form->{"tax_id_$i"}));
do_query($form, $dbh, $query, @values);
}
}
@@ -280,7 +284,7 @@ sub all_transactions {
push(@arvalues, '%' . $form->{description} . '%');
push(@apvalues, '%' . $form->{description} . '%');
}
-
+
if ($form->{employee} =~ /--/) {
($form->{employee_id},$form->{employee_name}) = split(/--/,$form->{employee});
#if ($form->{employee_id}) {
@@ -366,7 +370,7 @@ sub all_transactions {
'source' => { 'gl' => 'ac.source', 'arap' => 'ac.source', },
'description' => { 'gl' => 'g.description', 'arap' => 'ct.name', },
);
-
+
# sortdir = sort direction (ascending or descending)
my $sortdir = !defined $form->{sortdir} ? 'ASC' : $form->{sortdir} ? 'ASC' : 'DESC';
my $sortkey = $sort_columns{$form->{sort}} ? $form->{sort} : $form->{datesort}; # default used to be transdate
diff --git a/SL/IR.pm b/SL/IR.pm
index bd8bd591d..48c5134fa 100644
--- a/SL/IR.pm
+++ b/SL/IR.pm
@@ -269,27 +269,37 @@ sub post_invoice {
# allocated >= 0
# add entry for inventory, this one is for the sold item
- $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, taxkey, tax_id) VALUES (?, ?, ?, ?, (SELECT taxkey_id FROM chart WHERE id = ?),
- (SELECT tax_id
+ $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, taxkey, tax_id) VALUES (?, ?, ?, ?,
+ (SELECT taxkey_id
+ FROM taxkeys
+ WHERE chart_id= ?
+ AND startdate <= ?
+ ORDER BY startdate DESC LIMIT 1),
+ (SELECT tax_id
FROM taxkeys
- WHERE chart_id= (SELECT id
- FROM chart
- WHERE accno = ?)
+ WHERE chart_id= ?
AND startdate <= ?
- ORDER BY startdate DESC LIMIT 1))|;
- @values = ($ref->{trans_id}, $ref->{inventory_accno_id}, $linetotal, $ref->{transdate}, $ref->{inventory_accno_id}, $ref->{inventory_accno_id}, $ref->{transdate});
+ ORDER BY startdate DESC LIMIT 1),
+ (SELECT chart_link FROM chart WHERE id = ?))|;
+ @values = ($ref->{trans_id}, $ref->{inventory_accno_id}, $linetotal, $ref->{transdate}, $ref->{inventory_accno_id}, $ref->{transdate}, $ref->{inventory_accno_id}, $ref->{transdate},
+ $ref->{inventory_accno_id});
do_query($form, $dbh, $query, @values);
# add expense
- $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, taxkey, tax_id) VALUES (?, ?, ?, ?, (SELECT taxkey from tax WHERE chart_id = ?),
+ $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, taxkey, tax_id) VALUES (?, ?, ?, ?,
+ (SELECT taxkey_id
+ FROM taxkeys
+ WHERE chart_id= ?
+ AND startdate <= ?
+ ORDER BY startdate DESC LIMIT 1),
(SELECT tax_id
FROM taxkeys
- WHERE chart_id= (SELECT id
- FROM chart
- WHERE accno = ?)
+ WHERE chart_id= ?
AND startdate <= ?
- ORDER BY startdate DESC LIMIT 1))|;
- @values = ($ref->{trans_id}, $ref->{expense_accno_id}, ($linetotal * -1), $ref->{transdate}, $ref->{expense_accno_id}, $ref->{expense_accno_id}, $ref->{transdate});
+ ORDER BY startdate DESC LIMIT 1),
+ (SELECT chart_link FROM chart WHERE id = ?))|;
+ @values = ($ref->{trans_id}, $ref->{expense_accno_id}, ($linetotal * -1), $ref->{transdate}, $ref->{expense_accno_id}, $ref->{transdate}, $ref->{expense_accno_id}, $ref->{transdate},
+ $ref->{expense_accno_id});
do_query($form, $dbh, $query, @values);
}
};
@@ -492,18 +502,26 @@ sub post_invoice {
next if $payments_only || !$form->{amount}{$trans_id}{$accno};
- $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, taxkey, project_id, tax_id)
+ $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, taxkey, project_id, tax_id, chart_link)
VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?,
- (SELECT taxkey_id FROM chart WHERE accno = ?), ?,
+ (SELECT taxkey_id
+ FROM taxkeys
+ WHERE chart_id= (SELECT id
+ FROM chart
+ WHERE accno = ?)
+ AND startdate <= ?
+ ORDER BY startdate DESC LIMIT 1),
+ ?,
(SELECT tax_id
FROM taxkeys
WHERE chart_id= (SELECT id
FROM chart
WHERE accno = ?)
AND startdate <= ?
- ORDER BY startdate DESC LIMIT 1))|;
+ ORDER BY startdate DESC LIMIT 1),
+ (SELECT link FROM chart WHERE accno = ?))|;
@values = ($trans_id, $accno, $form->{amount}{$trans_id}{$accno},
- conv_date($form->{invdate}), $accno, $project_id, $accno, conv_date($form->{invdate}));
+ conv_date($form->{invdate}), $accno, conv_date($form->{invdate}), $project_id, $accno, conv_date($form->{invdate}), $accno);
do_query($form, $dbh, $query, @values);
}
}
@@ -538,18 +556,26 @@ sub post_invoice {
# record AP
if ($form->{amount}{ $form->{id} }{ $form->{AP} } != 0) {
- $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, taxkey, project_id, tax_id)
+ $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, taxkey, project_id, tax_id, chart_link)
VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?,
- (SELECT taxkey_id FROM chart WHERE accno = ?), ?,
+ (SELECT taxkey_id
+ FROM taxkeys
+ WHERE chart_id= (SELECT id
+ FROM chart
+ WHERE accno = ?)
+ AND startdate <= ?
+ ORDER BY startdate DESC LIMIT 1),
+ ?,
(SELECT tax_id
FROM taxkeys
WHERE chart_id= (SELECT id
FROM chart
WHERE accno = ?)
AND startdate <= ?
- ORDER BY startdate DESC LIMIT 1))|;
+ ORDER BY startdate DESC LIMIT 1),
+ (SELECT link FROM chart WHERE accno = ?))|;
@values = (conv_i($form->{id}), $form->{AP}, $amount,
- $form->{"datepaid_$i"}, $form->{AP}, $project_id, $form->{AP}, conv_date($form->{"datepaid_$i"}));
+ $form->{"datepaid_$i"}, $form->{AP}, conv_date($form->{"datepaid_$i"}), $project_id, $form->{AP}, conv_date($form->{"datepaid_$i"}), $form->{AP});
do_query($form, $dbh, $query, @values);
}
@@ -557,17 +583,24 @@ sub post_invoice {
my $gldate = (conv_date($form->{"gldate_$i"}))? conv_date($form->{"gldate_$i"}) : conv_date($form->current_date($myconfig));
$query =
- qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, gldate, source, memo, taxkey, project_id, tax_id)
+ qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, gldate, source, memo, taxkey, project_id, tax_id, chart_link)
VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?, ?, ?, ?,
- (SELECT taxkey_id FROM chart WHERE accno = ?), ?,
+ (SELECT taxkey_id
+ FROM taxkeys
+ WHERE chart_id= (SELECT id
+ FROM chart WHERE accno = ?)
+ AND startdate <= ?
+ ORDER BY startdate DESC LIMIT 1),
+ ?,
(SELECT tax_id
FROM taxkeys
WHERE chart_id= (SELECT id
FROM chart WHERE accno = ?)
AND startdate <= ?
- ORDER BY startdate DESC LIMIT 1))|;
+ ORDER BY startdate DESC LIMIT 1),
+ (SELECT link FROM chart WHERE accno = ?))|;
@values = (conv_i($form->{id}), $accno, $form->{"paid_$i"}, $form->{"datepaid_$i"},
- $gldate, $form->{"source_$i"}, $form->{"memo_$i"}, $accno, $project_id, $accno, conv_date($form->{"datepaid_$i"}));
+ $gldate, $form->{"source_$i"}, $form->{"memo_$i"}, $accno, conv_date($form->{"datepaid_$i"}), $project_id, $accno, conv_date($form->{"datepaid_$i"}), $accno);
do_query($form, $dbh, $query, @values);
$exchangerate = 0;
@@ -605,16 +638,11 @@ sub post_invoice {
$form->{fx}{$accno}{$transdate} = $form->round_amount($form->{fx}{$accno}{$transdate}, 2);
next if ($form->{fx}{$accno}{$transdate} == 0);
- $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, cleared, fx_transaction, taxkey, project_id, tax_id)
+ $query = qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, cleared, fx_transaction, taxkey, project_id, tax_id, chart_link)
VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?, '0', '1', 0, ?,
- (SELECT tax_id
- FROM taxkeys
- WHERE chart_id= (SELECT id
- FROM chart
- WHERE accno = ?)
- AND startdate <= ?
- ORDER BY startdate DESC LIMIT 1))|;
- @values = (conv_i($form->{id}), $accno, $form->{fx}{$accno}{$transdate}, conv_date($transdate), $project_id, $accno, $form->{fx}{$accno}{$transdate});
+ (SELECT id FROM tax WHERE taxkey=0 LIMIT 1),
+ (SELECT link FROM chart WHERE accno = ?))|;
+ @values = (conv_i($form->{id}), $accno, $form->{fx}{$accno}{$transdate}, conv_date($transdate), $project_id, $accno);
do_query($form, $dbh, $query, @values);
}
}
diff --git a/SL/IS.pm b/SL/IS.pm
index 196d6dff2..052dcfd3f 100644
--- a/SL/IS.pm
+++ b/SL/IS.pm
@@ -832,9 +832,9 @@ sub post_invoice {
if (!$payments_only && ($form->{amount_cogs}{$trans_id}{$accno} != 0)) {
$query =
- qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, tax_id, taxkey, project_id)
- VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?, (SELECT id FROM tax WHERE taxkey=0), 0, ?)|;
- @values = (conv_i($trans_id), $accno, $form->{amount_cogs}{$trans_id}{$accno}, conv_date($form->{invdate}), conv_i($project_id));
+ qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, tax_id, taxkey, project_id, chart_link)
+ VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?, (SELECT id FROM tax WHERE taxkey=0), 0, ?, (SELECT link FROM chart WHERE accno = ?))|;
+ @values = (conv_i($trans_id), $accno, $form->{amount_cogs}{$trans_id}{$accno}, conv_date($form->{invdate}), conv_i($project_id), $accno);
do_query($form, $dbh, $query, @values);
$form->{amount_cogs}{$trans_id}{$accno} = 0;
}
@@ -845,9 +845,9 @@ sub post_invoice {
if (!$payments_only && ($form->{amount_cogs}{$trans_id}{$accno} != 0)) {
$query =
- qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, tax_id, taxkey, project_id)
- VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?, (SELECT id FROM tax WHERE taxkey=0), 0, ?)|;
- @values = (conv_i($trans_id), $accno, $form->{amount_cogs}{$trans_id}{$accno}, conv_date($form->{invdate}), conv_i($project_id));
+ qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, tax_id, taxkey, project_id, chart_link)
+ VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?, (SELECT id FROM tax WHERE taxkey=0), 0, ?, (SELECT link FROM chart WHERE accno = ?))|;
+ @values = (conv_i($trans_id), $accno, $form->{amount_cogs}{$trans_id}{$accno}, conv_date($form->{invdate}), conv_i($project_id), $accno);
do_query($form, $dbh, $query, @values);
}
}
@@ -861,7 +861,7 @@ sub post_invoice {
if (!$payments_only && ($form->{amount}{$trans_id}{$accno} != 0)) {
$query =
- qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, tax_id, taxkey, project_id)
+ qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, tax_id, taxkey, project_id, chart_link)
VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?,
(SELECT tax_id
FROM taxkeys
@@ -870,8 +870,16 @@ sub post_invoice {
WHERE accno = ?)
AND startdate <= ?
ORDER BY startdate DESC LIMIT 1),
- (SELECT taxkey_id FROM chart WHERE accno = ?), ?)|;
- @values = (conv_i($trans_id), $accno, $form->{amount}{$trans_id}{$accno}, conv_date($form->{invdate}), $accno, conv_date($taxdate), $accno, conv_i($project_id));
+ (SELECT taxkey_id
+ FROM taxkeys
+ WHERE chart_id= (SELECT id
+ FROM chart
+ WHERE accno = ?)
+ AND startdate <= ?
+ ORDER BY startdate DESC LIMIT 1),
+ ?,
+ (SELECT link FROM chart WHERE accno = ?))|;
+ @values = (conv_i($trans_id), $accno, $form->{amount}{$trans_id}{$accno}, conv_date($form->{invdate}), $accno, conv_date($taxdate), $accno, conv_date($taxdate), conv_i($project_id), $accno);
do_query($form, $dbh, $query, @values);
$form->{amount}{$trans_id}{$accno} = 0;
}
@@ -882,7 +890,7 @@ sub post_invoice {
if (!$payments_only && ($form->{amount}{$trans_id}{$accno} != 0)) {
$query =
- qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, tax_id, taxkey, project_id)
+ qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, tax_id, taxkey, project_id, chart_link)
VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?,
(SELECT tax_id
FROM taxkeys
@@ -891,8 +899,16 @@ sub post_invoice {
WHERE accno = ?)
AND startdate <= ?
ORDER BY startdate DESC LIMIT 1),
- (SELECT taxkey_id FROM chart WHERE accno = ?), ?)|;
- @values = (conv_i($trans_id), $accno, $form->{amount}{$trans_id}{$accno}, conv_date($form->{invdate}), $accno, conv_date($taxdate), $accno, conv_i($project_id));
+ (SELECT taxkey_id
+ FROM taxkeys
+ WHERE chart_id= (SELECT id
+ FROM chart
+ WHERE accno = ?)
+ AND startdate <= ?
+ ORDER BY startdate DESC LIMIT 1),
+ ?,
+ (SELECT link FROM chart WHERE accno = ?))|;
+ @values = (conv_i($trans_id), $accno, $form->{amount}{$trans_id}{$accno}, conv_date($form->{invdate}), $accno, conv_date($taxdate), $accno, conv_date($taxdate), conv_i($project_id), $accno);
do_query($form, $dbh, $query, @values);
}
}
@@ -938,7 +954,7 @@ sub post_invoice {
if ($form->{amount}{ $form->{id} }{ $form->{AR} } != 0) {
$query =
- qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, tax_id, taxkey, project_id)
+ qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, tax_id, taxkey, project_id, chart_link)
VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?,
(SELECT tax_id
FROM taxkeys
@@ -947,8 +963,16 @@ sub post_invoice {
WHERE accno = ?)
AND startdate <= ?
ORDER BY startdate DESC LIMIT 1),
- (SELECT taxkey_id FROM chart WHERE accno = ?), ?)|;
- @values = (conv_i($form->{"id"}), $form->{AR}, $amount, $form->{"datepaid_$i"}, $form->{AR}, conv_date($taxdate), $form->{AR}, $project_id);
+ (SELECT taxkey_id
+ FROM taxkeys
+ WHERE chart_id= (SELECT id
+ FROM chart
+ WHERE accno = ?)
+ AND startdate <= ?
+ ORDER BY startdate DESC LIMIT 1),
+ ?,
+ (SELECT link FROM chart WHERE accno = ?))|;
+ @values = (conv_i($form->{"id"}), $form->{AR}, $amount, $form->{"datepaid_$i"}, $form->{AR}, conv_date($taxdate), $form->{AR}, conv_date($taxdate), $project_id, $form->{AR});
do_query($form, $dbh, $query, @values);
}
@@ -957,7 +981,7 @@ sub post_invoice {
my $gldate = (conv_date($form->{"gldate_$i"}))? conv_date($form->{"gldate_$i"}) : conv_date($form->current_date($myconfig));
$query =
- qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, gldate, source, memo, tax_id, taxkey, project_id)
+ qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, gldate, source, memo, tax_id, taxkey, project_id, chart_link)
VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?, ?, ?, ?,
(SELECT tax_id
FROM taxkeys
@@ -966,9 +990,17 @@ sub post_invoice {
WHERE accno = ?)
AND startdate <= ?
ORDER BY startdate DESC LIMIT 1),
- (SELECT taxkey_id FROM chart WHERE accno = ?), ?)|;
+ (SELECT taxkey_id
+ FROM taxkeys
+ WHERE chart_id= (SELECT id
+ FROM chart
+ WHERE accno = ?)
+ AND startdate <= ?
+ ORDER BY startdate DESC LIMIT 1),
+ ?,
+ (SELECT link FROM chart WHERE accno = ?))|;
@values = (conv_i($form->{"id"}), $accno, $form->{"paid_$i"}, $form->{"datepaid_$i"},
- $gldate, $form->{"source_$i"}, $form->{"memo_$i"}, $accno, conv_date($taxdate), $accno, $project_id);
+ $gldate, $form->{"source_$i"}, $form->{"memo_$i"}, $accno, conv_date($taxdate), $accno, conv_date($taxdate), $project_id, $accno);
do_query($form, $dbh, $query, @values);
# exchangerate difference
@@ -1008,7 +1040,7 @@ sub post_invoice {
if ( $form->{fx}{$accno}{$transdate} != 0 ) {
$query =
- qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, cleared, fx_transaction, tax_id, taxkey, project_id)
+ qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, cleared, fx_transaction, tax_id, taxkey, project_id, chart_link)
VALUES (?, (SELECT id FROM chart WHERE accno = ?), ?, ?, '0', '1',
(SELECT tax_id
FROM taxkeys
@@ -1017,8 +1049,16 @@ sub post_invoice {
WHERE accno = ?)
AND startdate <= ?
ORDER BY startdate DESC LIMIT 1),
- (SELECT taxkey_id FROM chart WHERE accno = ?), ?)|;
- @values = (conv_i($form->{"id"}), $accno, $form->{fx}{$accno}{$transdate}, conv_date($transdate), $accno, conv_date($taxdate), $accno, conv_i($project_id));
+ (SELECT taxkey_id
+ FROM taxkeys
+ WHERE chart_id= (SELECT id
+ FROM chart
+ WHERE accno = ?)
+ AND startdate <= ?
+ ORDER BY startdate DESC LIMIT 1),
+ ?,
+ (SELECT link FROM chart WHERE accno = ?))|;
+ @values = (conv_i($form->{"id"}), $accno, $form->{fx}{$accno}{$transdate}, conv_date($transdate), $accno, conv_date($taxdate), $accno, conv_date($taxdate), conv_i($project_id), $accno);
do_query($form, $dbh, $query, @values);
}
}
diff --git a/SL/Layout/Base.pm b/SL/Layout/Base.pm
index cd5ace939..de94ee054 100644
--- a/SL/Layout/Base.pm
+++ b/SL/Layout/Base.pm
@@ -4,9 +4,10 @@ use strict;
use parent qw(SL::Controller::Base);
use List::MoreUtils qw(uniq);
+use Time::HiRes qw();
use Rose::Object::MakeMethods::Generic (
- 'scalar --get_set_init' => qw(menu),
+ 'scalar --get_set_init' => [ qw(menu auto_reload_resources_param) ],
'scalar' => qw(focus),
'array' => [
'add_stylesheets_inline' => { interface => 'add', hash_key => 'stylesheets_inline' },
@@ -30,6 +31,11 @@ sub init_menu {
Menu->new('menu.ini');
}
+sub init_auto_reload_resources_param {
+ return '' unless $::lx_office_conf{debug}->{auto_reload_resources};
+ return sprintf('?rand=%d-%d-%d', Time::HiRes::gettimeofday(), int(rand 1000000000000));
+}
+
##########################################
# inheritable/overridable
##########################################
diff --git a/SL/MoreCommon.pm b/SL/MoreCommon.pm
index 6fbf87dc4..dfc5a7d80 100644
--- a/SL/MoreCommon.pm
+++ b/SL/MoreCommon.pm
@@ -171,7 +171,7 @@ sub uri_encode {
}
sub uri_decode {
- my $str = $_[0] || '';
+ my $str = $_[0] // '';
$str =~ tr/+/ /;
$str =~ s/\\$//;
diff --git a/SL/Presenter.pm b/SL/Presenter.pm
index 6658184c1..f328cce9e 100644
--- a/SL/Presenter.pm
+++ b/SL/Presenter.pm
@@ -41,6 +41,7 @@ sub render {
croak "Unsupported type: " . $options->{type} unless $options->{type} =~ m/^(?:html|js|json)$/;
# The "template" argument must be a string or a reference to one.
+ $template = ${ $template } if ((ref($template) || '') eq 'REF') && (ref(${ $template }) eq 'SL::Presenter::EscapedText');
croak "Unsupported 'template' reference type: " . ref($template) if ref($template) && (ref($template) !~ m/^(?:SCALAR|SL::Presenter::EscapedText)$/);
# Look for the file given by $template if $template is not a reference.
@@ -61,7 +62,9 @@ sub render {
# If no processing is requested then return the content.
if (!$options->{process}) {
# If $template is a reference then don't try to read a file.
- return SL::Presenter::EscapedText->new(text => ${ $template }, is_escaped => 1) if ref $template;
+ my $ref = ref $template;
+ return $template if $ref eq 'SL::Presenter::EscapedText';
+ return SL::Presenter::EscapedText->new(text => ${ $template }, is_escaped => 1) if $ref eq 'SCALAR';
# Otherwise return the file's content.
my $file = IO::File->new($source, "r") || croak("Template file ${source} could not be read");
@@ -194,6 +197,11 @@ If C<$template> is a reference to a scalar then the referenced
scalar's content is used as the content to process. The C option
is not considered in this case.
+C<$template> can also be an instance of L
+or a reference to such an instance. Both of these cases are handled
+the same way as if C<$template> were a reference to a scalar: its
+content is processed, and C is not considered.
+
Other reference types, unknown options and unknown arguments to the
C option cause the function to L.
diff --git a/SL/SEPA.pm b/SL/SEPA.pm
index e07fdcaf5..73a333030 100644
--- a/SL/SEPA.pm
+++ b/SL/SEPA.pm
@@ -357,8 +357,8 @@ sub post_payment {
AND ((c.link LIKE '%:${ARAP}') OR (c.link LIKE '${ARAP}:%') OR (c.link = '${ARAP}'))
LIMIT 1| ],
- 'add_acc_trans' => [ qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, gldate, source, memo)
- VALUES (?, ?, ?, ?, current_date, ?, '')| ],
+ 'add_acc_trans' => [ qq|INSERT INTO acc_trans (trans_id, chart_id, amount, transdate, gldate, source, memo, taxkey, tax_id , chart_link)
+ VALUES (?, ?, ?, ?, current_date, ?, '', 0, (SELECT id FROM tax WHERE taxkey=0 LIMIT 1), (SELECT link FROM chart WHERE id=?))| ],
'update_arap' => [ qq|UPDATE ${arap}
SET paid = paid + ?
@@ -397,8 +397,9 @@ sub post_payment {
my ($arap_chart_id) = $handles{get_arap}->[0]->fetchrow_array();
# Record the payment in acc_trans offsetting AR/AP.
- do_statement($form, @{ $handles{add_acc_trans} }, $orig_item->{"${arap}_id"}, $arap_chart_id, -1 * $mult * $orig_item->{amount}, $item->{execution_date}, '');
- do_statement($form, @{ $handles{add_acc_trans} }, $orig_item->{"${arap}_id"}, $orig_item->{chart_id}, $mult * $orig_item->{amount}, $item->{execution_date}, $orig_item->{reference});
+ do_statement($form, @{ $handles{add_acc_trans} }, $orig_item->{"${arap}_id"}, $arap_chart_id, -1 * $mult * $orig_item->{amount}, $item->{execution_date}, '', $arap_chart_id);
+ do_statement($form, @{ $handles{add_acc_trans} }, $orig_item->{"${arap}_id"}, $orig_item->{chart_id}, $mult * $orig_item->{amount}, $item->{execution_date}, $orig_item->{reference},
+ $orig_item->{chart_id});
# Update the invoice to reflect the new paid amount.
do_statement($form, @{ $handles{update_arap} }, $orig_item->{amount}, $orig_item->{"${arap}_id"});
diff --git a/SL/VK.pm b/SL/VK.pm
index c056aac65..c373a1956 100644
--- a/SL/VK.pm
+++ b/SL/VK.pm
@@ -52,7 +52,7 @@ sub invoice_transactions {
my $query =
qq|SELECT ct.id as customerid, ct.name as customername,ct.customernumber,ct.country,ar.invnumber,ar.id,ar.transdate,p.partnumber,pg.partsgroup,i.parts_id,i.qty,i.price_factor,i.discount,i.description as description,i.lastcost,i.sellprice,i.fxsellprice,i.marge_total,i.marge_percent,i.unit,b.description as business,e.name as employee,e2.name as salesman, to_char(ar.transdate,'Month') as month, to_char(ar.transdate, 'YYYYMM') as nummonth, p.unit as parts_unit, p.weight | .
- qq|FROM invoice i | .
+ qq|FROM invoice i | .
qq|JOIN ar on (i.trans_id = ar.id) | .
qq|JOIN parts p on (i.parts_id = p.id) | .
qq|LEFT JOIN partsgroup pg on (p.partsgroup_id = pg.id) | .
@@ -157,7 +157,7 @@ sub invoice_transactions {
push(@values, $form->{"project_id"}, $form->{"project_id"});
}
if ($form->{business_id}) {
- $where .= qq| AND ct.business_id = ? |;
+ $where .= qq| AND ct.business_id = ? |;
push(@values, $form->{"business_id"});
}
@@ -179,7 +179,7 @@ sub invoice_transactions {
$where .= qq| AND ($cvar_where_ic)|;
push @values, @cvar_values_ic;
}
-
+
$query .= " WHERE $where ORDER BY $sortorder "; # LIMIT 5000";
my @result = selectall_hashref_query($form, $dbh, $query, @values);
diff --git a/bin/mozilla/am.pl b/bin/mozilla/am.pl
index 2b7cdf8ee..bcb39d258 100644
--- a/bin/mozilla/am.pl
+++ b/bin/mozilla/am.pl
@@ -1491,7 +1491,11 @@ sub edit_tax {
$form->header();
+ #set readonly if the there are entries in acc_trans with the tax
+ my $readonly = $form->{tax_already_used} ? 'readonly' : '';
+
my $parameters_ref = {
+ readonly => $readonly,
};
# Ausgabe des Templates
@@ -1552,12 +1556,16 @@ sub save_tax {
$main::auth->assert('config');
- $form->isblank("rate", $locale->text('Taxrate missing!'));
- $form->isblank("taxdescription", $locale->text('Taxdescription missing!'));
- $form->isblank("taxkey", $locale->text('Taxkey missing!'));
+ $form->error($locale->text('Taxkey missing!')) unless length($form->{taxkey}) != 0;
+ $form->error($locale->text('Taxdescription missing!')) unless length($form->{taxdescription}) != 0;
+ $form->error($locale->text('Taxrate missing!')) unless length($form->{rate}) != 0;
$form->{rate} = $form->parse_amount(\%myconfig, $form->{rate});
+ if ($form->{taxkey} == 0 and $form->{rate} > 0) {
+ $form->error($locale->text('Taxkey 0 is reserved for rate 0'));
+ }
+
if ( $form->{rate} < 0 || $form->{rate} >= 100 ) {
$form->error($locale->text('Tax Percent is a number between 0 and 100'));
}
diff --git a/bin/mozilla/ct.pl b/bin/mozilla/ct.pl
index ff7eedef6..8a30094fa 100644
--- a/bin/mozilla/ct.pl
+++ b/bin/mozilla/ct.pl
@@ -161,6 +161,7 @@ sub list_names {
push @options, $locale->text('Billing/shipping address (city)') . " : $form->{addr_city}" if $form->{addr_city};
push @options, $locale->text('Billing/shipping address (zipcode)') . " : $form->{zipcode}" if $form->{addr_zipcode};
push @options, $locale->text('Billing/shipping address (street)') . " : $form->{street}" if $form->{addr_street};
+ push @options, $locale->text('Billing/shipping address (country)') . " : $form->{country}" if $form->{addr_country};
if ($form->{business_id}) {
my $business = SL::DB::Manager::Business->find_by(id => $form->{business_id});
@@ -171,9 +172,9 @@ sub list_names {
}
my @columns = (
- 'id', 'name', "$form->{db}number", 'contact', 'phone',
- 'fax', 'email', 'taxnumber', 'street', 'zipcode' , 'city',
- 'business', 'invnumber', 'ordnumber', 'quonumber'
+ 'id', 'name', "$form->{db}number", 'contact', 'phone',
+ 'fax', 'email', 'taxnumber', 'street', 'zipcode' , 'city',
+ 'business', 'invnumber', 'ordnumber', 'quonumber', 'salesman', 'country'
);
my @includeable_custom_variables = grep { $_->{includeable} } @{ $cvar_configs };
@@ -199,6 +200,8 @@ sub list_names {
'street' => { 'text' => $locale->text('Street'), },
'zipcode' => { 'text' => $locale->text('Zipcode'), },
'city' => { 'text' => $locale->text('City'), },
+ 'country' => { 'text' => $locale->text('Country'), },
+ 'salesman' => { 'text' => $locale->text('Salesman'), },
%column_defs_cvars,
);
@@ -206,7 +209,7 @@ sub list_names {
my @hidden_variables = ( qw(
db status obsolete name contact email cp_name addr_street addr_zipcode
- addr_city business_id
+ addr_city addr_country business_id
), "$form->{db}number",
map({ "cvar_$_->{name}" } @searchable_custom_variables),
map({'cvar_'. $_->{name} .'_qtyop'} grep({$_->{type} eq 'number'} @searchable_custom_variables)),
diff --git a/config/kivitendo.conf.default b/config/kivitendo.conf.default
index 2f4c88a6b..875cfe0c3 100644
--- a/config/kivitendo.conf.default
+++ b/config/kivitendo.conf.default
@@ -293,3 +293,9 @@ file_name = /tmp/kivitendo-debug.log
# If set to 1 then the installation will be kept unlocked even if a
# database upgrade fails.
keep_installation_unlocked = 0
+
+# If set to 1 then all resource links (JavaScript, CSS files) output
+# via $::request->{layout}->use_stylesheet() / use_javascript() will
+# be made unique by appending a random GET parameter. This will cause
+# the web browser to always reload the resources.
+auto_reload_resources = 0
diff --git a/css/kivitendo/jquery-ui.custom.css b/css/kivitendo/jquery-ui.custom.css
index e9dae4f10..2ec0e2370 100644
--- a/css/kivitendo/jquery-ui.custom.css
+++ b/css/kivitendo/jquery-ui.custom.css
@@ -9,6 +9,7 @@
color: #333333;
font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif;
font-size: 1.1em;
+ overflow: hidden;
}
.tabwidget ul {
@@ -25,7 +26,6 @@
border: 1px #dddddd;
color: #fe5f14;
margin: 0;
- padding: .2em .2em 0;
}
.tabwidget ul::after {
@@ -86,3 +86,5 @@
.tabwidget .ui-state-hover a, .tabwidget .ui-state-hover a:hover {
color: #fe5f14;
}
+
+.ui-tabs .ui-tabs-nav li a { padding: .2em .7em; }
diff --git a/css/lx-office-erp/jquery-ui.custom.css b/css/lx-office-erp/jquery-ui.custom.css
index e4c151cf0..5df9b6387 100644
--- a/css/lx-office-erp/jquery-ui.custom.css
+++ b/css/lx-office-erp/jquery-ui.custom.css
@@ -9,6 +9,7 @@
color: #000000;
font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif;
font-size: 1.1em;
+ overflow: hidden;
}
.tabwidget ul {
@@ -25,7 +26,6 @@
border: 0;
color: #000000;
margin: 0;
- padding: .2em .2em 0;
}
.tabwidget ul::after {
@@ -88,3 +88,5 @@
color: #000000;
text-decoration: underline;
}
+
+.ui-tabs .ui-tabs-nav li a { padding: .2em .7em; }
diff --git a/locale/de/all b/locale/de/all
index 9e7f46f0a..15f94b8af 100644
--- a/locale/de/all
+++ b/locale/de/all
@@ -20,9 +20,11 @@ $self->{texts} = {
'*) Since version 2.7 these parameters ares set in the client database and not in the configuration file, details in chapter:' => '*) Seit 2.7 werden Gewinnermittlungsart, Versteuerungsart und Warenbuchungsmethode in der Mandanten-DB gesteuert und nicht mehr in der Konfigurationsdatei, Umstellungs-Details:',
'*/' => '*/',
'---please select---' => '---bitte auswählen---',
+ '. Automatically generated.' => '. Automatisch erzeugt.',
'...after loggin in' => '...nach dem Anmelden',
'...done' => '...fertig',
'...on the TODO list' => '...auf der Aufgabenliste',
+ '0% tax with taxkey' => '0% Steuer mit Steuerschlüssel ',
'1. Quarter' => '1. Quartal',
'2. Quarter' => '2. Quartal',
'3. Quarter' => '3. Quartal',
@@ -282,6 +284,7 @@ $self->{texts} = {
'Bilanz' => 'Bilanz',
'Billing Address' => 'Rechnungsadresse',
'Billing/shipping address (city)' => 'Rechnungsadresse (Stadt)',
+ 'Billing/shipping address (country)' => 'Rechnungsadresse (Land)',
'Billing/shipping address (street)' => 'Rechnungsadresse (StraÃe)',
'Billing/shipping address (zipcode)' => 'Rechnungsadresse (PLZ)',
'Bin' => 'Lagerplatz',
@@ -1008,6 +1011,7 @@ $self->{texts} = {
'Income accno' => 'Erlöskonto',
'Incoming Payments' => 'Zahlungseingänge',
'Incoming invoice number' => 'Eingangsrechnungsnummer',
+ 'Inconsistency in database' => 'Unstimmigkeiten in der Datenbank',
'Incorrect Password!' => 'Ungültiges Passwort!',
'Incorrect password!' => 'Ungültiges Passwort!',
'Incorrect username or password!' => 'Ungültiger Benutzername oder falsches Passwort!',
@@ -1417,6 +1421,7 @@ $self->{texts} = {
'Please Check the bank information for each vendor:' => 'Bitte überprüfen Sie die Kontoinformationen der Lieferanten:',
'Please ask your administrator to create warehouses and bins.' => 'Bitten Sie Ihren Administrator, dass er Lager und Lagerplätze anlegt.',
'Please contact your administrator.' => 'Bitte wenden Sie sich an Ihren Administrator.',
+ 'Please define a taxkey for the following taxes and run the update again:' => 'Bitte definieren Sie einen Steuerschlüssel für die folgenden Steuern und starten Sie dann das Update erneut:',
'Please enter a profile name.' => 'Bitte geben Sie einen Profilnamen an.',
'Please enter the login for the new user.' => 'Bitte geben Sie das Login für den neuen Benutzer ein.',
'Please enter the name of the database that will be used as the template for the new database:' => 'Bitte geben Sie den Namen der Datenbank an, die als Vorlage für die neue Datenbank benutzt wird:',
@@ -1440,6 +1445,7 @@ $self->{texts} = {
'Please select the destination bank account for the collections:' => 'Bitte wählen Sie das Bankkonto als Ziel für die Einzüge aus:',
'Please select the source bank account for the transfers:' => 'Bitte wählen Sie das Bankkonto als Quelle für die Ãberweisungen aus:',
'Please seletct the dataset you want to delete:' => 'Bitte wählen Sie die zu löschende Datenbank aus:',
+ 'Please set another taxnumber for the following taxes and run the update again:' => 'Bitte wählen Sie ein anderes Steuerautomatik-Konto für die folgenden Steuern aus uns starten Sie dann das Update erneut.',
'Please specify a description for the warehouse designated for these goods.' => 'Bitte geben Sie den Namen des Ziellagers für die übernommenen Daten ein.',
'Plural' => 'Plural',
'Port' => 'Port',
@@ -1858,6 +1864,7 @@ $self->{texts} = {
'Taxes' => 'Steuern',
'Taxkey' => 'Steuerschlüssel',
'Taxkey missing!' => 'Steuerschlüssel fehlt!',
+ 'Taxkey 0 is reserved for rate 0' => 'Der Steuerschlüssel 0 darf keinen Steuersatz über 0 haben.',
'Taxkey_coa' => 'Steuerschlüssel',
'Taxkeys and Taxreport Preferences' => 'Steuerautomatik und UStVA',
'Taxlink_coa' => 'Steuerautomatik',
@@ -2052,7 +2059,9 @@ $self->{texts} = {
'There are #1 more open invoices from this vendor with other currencies.' => 'Es gibt #1 weitere offene Rechnungen von diesem Lieferanten, die in anderen Währungen ausgestellt wurden.',
'There are #1 unfinished follow-ups of which #2 are due.' => 'Es gibt #1 Wiedervorlage(n), von denen #2 fällig ist/sind.',
'There are bookings to the account 3803 after 01.01.2007. If you didn\'t change this account manually to 19% the bookings are probably incorrect.' => 'Das Konto 3803 wurde nach dem 01.01.2007 bebucht. Falls Sie dieses Konto nicht manuell auf 19% gestellt haben sind die Buchungen wahrscheinlich mit falscher Umsatzsteuer gebucht worden.',
+ 'There are entries in tax where taxkey is NULL.' => 'In der Datenbank sind Steuern ohne Steuerschlüssel vorhanden (in der Tabelle tax Spalte taxkey).',
'There are four tax zones.' => 'Es gibt vier Steuerzonen.',
+ 'There are invalid taxnumbers in use.' => 'Es werden ungültige Steuerautomatik-Konten benutzt.',
'There are no entries in the background job history.' => 'Es gibt keine Einträge im Hintergrund-Job-Verlauf.',
'There are no items in stock.' => 'Dieser Artikel ist nicht eingelagert.',
'There are no items on your TODO list at the moment.' => 'Ihre Aufgabenliste enthält momentan keine Einträge.',
@@ -2060,6 +2069,7 @@ $self->{texts} = {
'There are still transfers not matching the qty of the delivery order. Stock operations can not be changed later. Do you really want to proceed?' => 'Einige der Lagerbewegungen sind nicht vollständig und Lagerbewegungen können nachträglich nicht mehr verändert werden. Wollen Sie wirklich fortfahren?',
'There are usually three ways to install Perl modules.' => 'Es gibt normalerweise drei Arten, ein Perlmodul zu installieren.',
'There is already a taxkey 0 with tax rate not 0.' => 'Es existiert bereits ein Steuerschlüssel mit Steuersatz ungleich 0%.',
+ 'There is an inconsistancy in your database.' => 'In Ihrer Datenbank sind Unstimmigkeiten vorhanden.',
'There is at least one sales or purchase invoice for which kivitendo recorded an inventory transaction with taxkeys even though no tax was recorded.' => 'Es gibt mindestens eine Verkaufs- oder Einkaufsrechnung, für die kivitendo eine Warenbestandsbuchung ohne dazugehörige Steuerbuchung durchgeführt hat.',
'There is at least one transaction for which the user has chosen a logically wrong taxkey.' => 'Es gibt mindestens eine Buchung, bei der ein logisch nicht passender Steuerschlüssel ausgewählt wurde.',
'There is not enough available of \'#1\' at warehouse \'#2\', bin \'#3\', #4, #5, for the transfer of #6.' => 'Von \'#1\' ist in Lager \'#2\', Lagerplatz \'#3\', #4, #5, nicht genügend eingelagert, um insgesamt #6 auszulagern.',
diff --git a/locale/en/all b/locale/en/all
index 7734f90cf..3424a0158 100644
--- a/locale/en/all
+++ b/locale/en/all
@@ -20,9 +20,11 @@ $self->{texts} = {
'*) Since version 2.7 these parameters ares set in the client database and not in the lx-erp.conf / lx_office.conf file, details in chapter:' => '',
'*/' => '',
'---please select---' => '',
+ '. Automatically generated.' => '',
'...after loggin in' => '',
'...done' => '',
'...on the TODO list' => '',
+ '0% tax with taxkey' => '',
'1. Quarter' => '',
'2. Quarter' => '',
'3. Quarter' => '',
@@ -1814,6 +1816,7 @@ $self->{texts} = {
'Taxes' => '',
'Taxkey' => '',
'Taxkey missing!' => '',
+ 'Taxkey 0 is reserved for rate 0' => '',
'Taxkey_coa' => '',
'Taxkeys and Taxreport Preferences' => '',
'Taxlink_coa' => '',
@@ -1985,13 +1988,17 @@ $self->{texts} = {
'There are #1 more open invoices from this vendor with other currencies.' => '',
'There are #1 unfinished follow-ups of which #2 are due.' => '',
'There are bookings to the account 3803 after 01.01.2007. If you didn\'t change this account manually to 19% the bookings are probably incorrect.' => '',
+ 'There are entries in tax where taxkey is NULL.' => '',
'There are four tax zones.' => '',
+ 'There are invalid taxnumbers in use.' => '',
+ 'There are no entries in the background job history.' => '',
'There are no items in stock.' => '',
'There are no items on your TODO list at the moment.' => '',
'There are still entries in the database for which no unit has been assigned.' => '',
'There are still transfers not matching the qty of the delivery order. Stock operations can not be changed later. Do you really want to proceed?' => '',
'There are usually three ways to install Perl modules.' => '',
'There is already a taxkey 0 with tax rate not 0.' => '',
+ 'There is an inconsistancy in your database.' => '',
'There is at least one sales or purchase invoice for which kivitendo recorded an inventory transaction with taxkeys even though no tax was recorded.' => '',
'There is at least one transaction for which the user has chosen a logically wrong taxkey.' => '',
'There is not enough available of \'#1\' at warehouse \'#2\', bin \'#3\', #4, #5, for the transfer of #6.' => '',
diff --git a/scripts/console b/scripts/console
index 239ed5431..d264a8941 100755
--- a/scripts/console
+++ b/scripts/console
@@ -48,6 +48,7 @@ use SL::InstanceConfiguration;
use SL::Locale;
use SL::LXDebug;
use Data::Dumper;
+use List::Util qw(max);
# this is a cleaned up version of am.pl
# it lacks redirection, some html setup and most of the authentication process.
@@ -129,6 +130,43 @@ sub pp {
Data::Dumper::Dumper(@_);
}
+sub ptab {
+ my @rows = ref($_[0]) eq 'ARRAY' ? @{ $_[0] } : @_;
+ return '' unless @rows;
+
+ my @columns = sort keys %{ $rows[0] };
+ my @widths = map { max @{ $_ } } map { my $column = $_; [ length($column), map { length("" . ($_->{$column} // '')) } @rows ] } @columns;
+ my @output = (join ' | ', map { my $width = $widths[$_]; sprintf "\%-${width}s", $columns[$_] } (0..@columns - 1));
+ push @output, join('-+-', map { '-' x $_ } @widths);
+ push @output, map { my $row = $_; join(' | ', map { my $width = $widths[$_]; sprintf "\%-${width}s", $row->{ $columns[$_] } // '' } (0..@columns - 1) ) } @rows;
+
+ return join("\n", @output);
+}
+
+sub pobj {
+ my ($obj) = @_;
+ return '' unless $obj;
+
+ my $ref = ref $obj;
+ $ref =~ s/^SL::DB:://;
+ my %primaries = map { ($_ => 1) } $obj->meta->primary_key;
+ my @columns = map { "${_}:" . ($obj->$_ // 'UNDEF') } sort $obj->meta->primary_key;
+ push @columns, map { "${_}:" . ($obj->$_ // 'UNDEF') } grep { !$primaries{$_} } sort map { $_->{name} } $obj->meta->columns;
+
+ return "<${ref} " . join(' ', @columns) . '>';
+}
+
+sub sql {
+ my $dbh = ref($_[0]) ? shift : $::form->get_standard_dbh;
+ my ($query, @args) = @_;
+
+ if ($query =~ m/^\s*select/i) {
+ ptab($dbh->selectall_arrayref($query, { Slice => {} }, @args));
+ } else {
+ $dbh->do($query, { Slice => {} }, @args);
+ }
+}
+
1;
__END__
@@ -165,6 +203,47 @@ Currently C will set the Data::Dumper depth to 2, so if you need a
different depth, you'll have to change that. A nice feature would be to
configure that, or at least to be able to change it at runtime.
+=head2 ptab C<@data>
+
+Returns a tabular representation of C<@data>. C<@data> must be an
+array or array reference containing hash references. Column widths are
+calculated automatically.
+
+Undefined values are represented by an empty column.
+
+Example usage:
+
+ ptab($dbh->selectall_arrayref("SELECT * FROM employee", { Slice => {} }));
+
+=head2 pobj C<$obj>
+
+Returns a textual representation of the L instance
+C<$obj>. This includes the class name, then the primary key columns as
+name/value pairs and then all other columns as name/value pairs.
+
+Undefined values are represented by C.
+
+Example usage:
+
+ pobj(SL::DB::Manager::Employee->find_by(login => 'demo'));
+
+=head2 sql C<[ $dbh, ] $query, @bind_values>
+
+Executes an SQL query using the optional bind values. If the first
+parameter is a database handle then that database handle is used;
+otherwise the handle returned by L is used.
+
+If the query is a C
-
+
+[% PROCESS 'webdav/_list.html' %]
+
+ [%- LxERP.t8("Loading...") %]
+
+
- [%- IF conf_webdav %]
- [% 'Documents in the WebDAV repository' | $T8 %]
-
-
-
-
- | [% 'File name' | $T8 %] |
- [% 'WebDAV link' | $T8 %] |
-
-
- [%- FOREACH file = WEBDAV %]
-
- | [% HTML.escape(file.name) %] |
- [% HTML.escape(file.type) %] |
-
- [%- END %]
-
-
-
-
-
- [%- END %]
+
[% PRINT_OPTIONS %]
diff --git a/templates/webpages/do/form_header.html b/templates/webpages/do/form_header.html
index cd99f9619..ceed4e564 100644
--- a/templates/webpages/do/form_header.html
+++ b/templates/webpages/do/form_header.html
@@ -45,6 +45,19 @@