IO->set_datepaid(table => 'ap', id => $form->{id}, dbh => $dbh);
# safety check datev export
- if ($::lx_office_conf{datev_check}{check_on_ap_transaction}) {
+ if ($::instance_conf->get_datev_check_on_ap_transaction) {
my $transdate = $::form->{transdate} ? DateTime->from_lxoffice($::form->{transdate}) : undef;
$transdate ||= DateTime->today;
IO->set_datepaid(table => 'ar', id => $form->{id}, dbh => $dbh);
# safety check datev export
- if ($::lx_office_conf{datev_check}{check_on_ar_transaction}) {
+ if ($::instance_conf->get_datev_check_on_ar_transaction) {
my $transdate = $::form->{transdate} ? DateTime->from_lxoffice($::form->{transdate}) : undef;
$transdate ||= DateTime->today;
$self->{payments_changeable} = SL::DB::Default->get->payments_changeable;
$self->{show_bestbefore} = SL::DB::Default->get->show_bestbefore;
+ map { $self->{$_} = SL::DB::Default->get->$_ } qw(datev_check_on_sales_invoice datev_check_on_purchase_invoice datev_check_on_ar_transaction datev_check_on_ap_transaction datev_check_on_gl_transaction);
+ # datev check: not implemented yet:
+ #check_on_cash_and_receipt = 0
+ #check_on_dunning = 0
+ #check_on_sepa_import = 0
+
$self->render('client_config/form', title => $::locale->text('Client Configuration'));
}
SL::DB::Default->get->update_attributes('payments_changeable' => $::form->{payments_changeable});
SL::DB::Default->get->update_attributes('show_bestbefore' => $::form->{show_bestbefore});
+ map { SL::DB::Default->get->update_attributes($_ => $::form->{$_}); } qw(datev_check_on_sales_invoice datev_check_on_purchase_invoice datev_check_on_ar_transaction datev_check_on_ap_transaction datev_check_on_gl_transaction);
+
flash_later('info', $::locale->text('Client Configuration saved!'));
$self->redirect_to(action => 'edit');
table => 'defaults',
columns => [
- inventory_accno_id => { type => 'integer' },
- income_accno_id => { type => 'integer' },
- expense_accno_id => { type => 'integer' },
- fxgain_accno_id => { type => 'integer' },
- fxloss_accno_id => { type => 'integer' },
- invnumber => { type => 'text' },
- sonumber => { type => 'text' },
- weightunit => { type => 'varchar', length => 5 },
- businessnumber => { type => 'text' },
- version => { type => 'varchar', length => 8 },
- curr => { type => 'text' },
- closedto => { type => 'date' },
- revtrans => { type => 'boolean', default => 'false' },
- ponumber => { type => 'text' },
- sqnumber => { type => 'text' },
- rfqnumber => { type => 'text' },
- customernumber => { type => 'text' },
- vendornumber => { type => 'text' },
- audittrail => { type => 'boolean', default => 'false' },
- articlenumber => { type => 'text' },
- servicenumber => { type => 'text' },
- coa => { type => 'text' },
- itime => { type => 'timestamp', default => 'now()' },
- mtime => { type => 'timestamp' },
- rmanumber => { type => 'text' },
- cnnumber => { type => 'text' },
- dunning_ar_amount_fee => { type => 'integer' },
- dunning_ar_amount_interest => { type => 'integer' },
- dunning_ar => { type => 'integer' },
- pdonumber => { type => 'text' },
- sdonumber => { type => 'text' },
- ar_paid_accno_id => { type => 'integer' },
- id => { type => 'serial', not_null => 1 },
- accounting_method => { type => 'text' },
- inventory_system => { type => 'text' },
- profit_determination => { type => 'text' },
- language_id => { type => 'integer' },
- payments_changeable => { type => 'integer', default => '0', not_null => 1 },
- show_bestbefore => { type => 'boolean', default => 'false' },
+ inventory_accno_id => { type => 'integer' },
+ income_accno_id => { type => 'integer' },
+ expense_accno_id => { type => 'integer' },
+ fxgain_accno_id => { type => 'integer' },
+ fxloss_accno_id => { type => 'integer' },
+ invnumber => { type => 'text' },
+ sonumber => { type => 'text' },
+ weightunit => { type => 'varchar', length => 5 },
+ businessnumber => { type => 'text' },
+ version => { type => 'varchar', length => 8 },
+ curr => { type => 'text' },
+ closedto => { type => 'date' },
+ revtrans => { type => 'boolean', default => 'false' },
+ ponumber => { type => 'text' },
+ sqnumber => { type => 'text' },
+ rfqnumber => { type => 'text' },
+ customernumber => { type => 'text' },
+ vendornumber => { type => 'text' },
+ audittrail => { type => 'boolean', default => 'false' },
+ articlenumber => { type => 'text' },
+ servicenumber => { type => 'text' },
+ coa => { type => 'text' },
+ itime => { type => 'timestamp', default => 'now()' },
+ mtime => { type => 'timestamp' },
+ rmanumber => { type => 'text' },
+ cnnumber => { type => 'text' },
+ dunning_ar_amount_fee => { type => 'integer' },
+ dunning_ar_amount_interest => { type => 'integer' },
+ dunning_ar => { type => 'integer' },
+ pdonumber => { type => 'text' },
+ sdonumber => { type => 'text' },
+ ar_paid_accno_id => { type => 'integer' },
+ id => { type => 'serial', not_null => 1 },
+ accounting_method => { type => 'text' },
+ inventory_system => { type => 'text' },
+ profit_determination => { type => 'text' },
+ language_id => { type => 'integer' },
+ payments_changeable => { type => 'integer', default => '0', not_null => 1 },
+ show_bestbefore => { type => 'boolean', default => 'false' },
+ datev_check_on_sales_invoice => { type => 'boolean', default => 'true' },
+ datev_check_on_purchase_invoice => { type => 'boolean', default => 'true' },
+ datev_check_on_ar_transaction => { type => 'boolean', default => 'true' },
+ datev_check_on_ap_transaction => { type => 'boolean', default => 'true' },
+ datev_check_on_gl_transaction => { type => 'boolean', default => 'true' },
],
primary_key_columns => [ 'id' ],
}
# safety check datev export
- if ($::lx_office_conf{datev_check}{check_on_gl_transaction}) {
+ if ($::instance_conf->get_datev_check_on_gl_transaction) {
my $transdate = $::form->{transdate} ? DateTime->from_lxoffice($::form->{transdate}) : undef;
$transdate ||= DateTime->today;
'table' => 'ap',);
# safety check datev export
- if ($::lx_office_conf{datev_check}{check_on_purchase_invoice}) {
+ if ($::instance_conf->get_datev_check_on_purchase_invoice) {
my $transdate = $::form->{invdate} ? DateTime->from_lxoffice($::form->{invdate}) : undef;
$transdate ||= DateTime->today;
'table' => 'ar',);
# safety check datev export
- if ($::lx_office_conf{datev_check}{check_on_sales_invoice}) {
+ if ($::instance_conf->get_datev_check_on_sales_invoice) {
my $transdate = $::form->{invdate} ? DateTime->from_lxoffice($::form->{invdate}) : undef;
$transdate ||= DateTime->today;
return $self->{data}->{profit_determination};
}
+sub get_datev_check_on_sales_invoice {
+ my ($self) = @_;
+ return $self->{data}->{datev_check_on_sales_invoice};
+}
+
+sub get_datev_check_on_purchase_invoice {
+ my ($self) = @_;
+ return $self->{data}->{datev_check_on_purchase_invoice};
+}
+
+sub get_datev_check_on_ar_transaction {
+ my ($self) = @_;
+ return $self->{data}->{datev_check_on_ar_transaction};
+}
+
+sub get_datev_check_on_ap_transaction {
+ my ($self) = @_;
+ return $self->{data}->{datev_check_on_ap_transaction};
+}
+
+sub get_datev_check_on_gl_transaction {
+ my ($self) = @_;
+ return $self->{data}->{datev_check_on_gl_transaction};
+}
+
sub get_show_bestbefore {
my ($self) = @_;
return $self->{data}->{show_bestbefore};
Returns the default profit determination method, balance or income
+=item C<get_datev_check_on_sales_invoice>
+
+Returns true if datev check should be performed on sales invoices
+
+=item C<get_datev_check_on_purchase_invoice>
+
+Returns true if datev check should be performed on purchase invoices
+
+=item C<get_datev_check_on_ar_transaction>
+
+Returns true if datev check should be performed on ar transactions
+
+=item C<get_datev_check_on_ap_transaction>
+
+Returns true if datev check should be performed on ap transactions
+
+=item C<get_datev_check_on_gl_transaction>
+
+Returns true if datev check should be performed on gl transactions
+
=item C<get_show_bestbefore>
Returns the default behavior for showing best before date, true or false
# template. currently txt and html templates are recognized and correctly mime send.
email_template = templates/mail/self_test/status_mail.txt
-[datev_check]
-# it is possible to make a quick DATEV export everytime you post a record to ensure things
-# work nicely with their data requirements. This will result in a slight overhead though
-# you can enable this for each type of record independantly.
-
-# check when a sales invoice or a payment for a sales invoice is posted
-check_on_sales_invoice = 1
-# check when a purchase invoice or a payment for a purchase invoice is posted
-check_on_purchase_invoice = 1
-# check when an ar transaction is posted
-check_on_ar_transaction = 1
-# check when an ap transaction is posted
-check_on_ap_transaction = 1
-# check when a gl transaction is posted
-check_on_gl_transaction = 1
-
-# not implemented yet:
-#check_on_cash_and_receipt = 0
-#check_on_dunning = 0
-#check_on_sepa_import = 0
-
[console]
# autologin to use if none is given
login =
'Check' => 'Scheck',
'Check Details' => 'Bitte Angaben überprüfen',
'Check for duplicates' => 'Dublettencheck',
+ 'Check on ap transaction' => 'Prüfen bei Kreditorenbuchung',
+ 'Check on ar transaction' => 'Prüfen bei Debitorenbuchung',
+ 'Check on gl transaction' => 'Prüfen bei Dialogbuchung',
+ 'Check on purchase invoice' => 'Prüfen bei Einkaufsrechnung',
+ 'Check on sales invoice' => 'Prüfen bei Verkaufsrechnung',
'Checks' => 'Schecks',
'Choose Customer' => 'Endkunde wählen:',
'Choose Outputformat' => 'Ausgabeformat auswählen...',
'DATEV - Export Assistent' => 'DATEV-Exportassistent',
'DATEV Angaben' => 'DATEV-Angaben',
'DATEV Export' => 'DATEV-Export',
+ 'DATEV check configuration' => 'Einstellungen für DATEV-Prüfung',
'DATEV check returned errors:' => 'Die DATEV Prüfung dieser Buchung ergab Fehler:',
'DATEX - Export Assistent' => 'DATEV-Exportassistent',
'DELETED' => 'Gelöscht',
'It is possible that even after such a correction there is something wrong with this transaction (e.g. taxes that don\'t match the selected taxkey). Therefore you should re-run the general ledger analysis.' => 'Auch nach einer Korrektur kann es mit dieser Buchung noch weitere Probleme geben (z.B. nicht zum Steuerschlüssel passende Steuern), weshalb ein erneutes Ausführen der Hauptbuchanalyse empfohlen wird.',
'It is possible to do this automatically for some Buchungsgruppen, but not for all.' => 'Es ist möglich, dies für einige, aber nicht für alle Buchungsgruppen automatisch zu erledigen.',
'It is possible to do this automatically for some units, but for others the user has to chose the new unit.' => 'Das ist für einige Einheiten automatisch möglich, aber bei anderen muss der Benutzer die neue Einheit auswählen.',
+ 'It is possible to make a quick DATEV export everytime you post a record to ensure things work nicely with their data requirements. This will result in a slight overhead though you can enable this for each type of record independantly.' => 'Es ist möglich, bei jeder Buchung einen schnellen DATEV-Export durchzuführen, um sicherzustellen, dass die Datensätze den DATEV-Anforderungen genügen. Da dies einen kleinen Overhead bedeutet, lässt sich dei Einstellung für jeden Buchungstyp getrennt einstellen.',
'It may optionally be compressed with "gzip".' => 'Sie darf optional mit "gzip" komprimiert sein.',
'It will simply set the taxkey to 0 (meaning "no taxes") which is the correct value for such inventory transactions.' => 'Es wird einfach die Steuerschlüssel auf 0 setzen, was "keine Steuer" bedeutet und für solche Warenbestandsbuchungen der richtige Wert ist.',
'Item deleted!' => 'Artikel gelöscht!',
'Payments' => 'Zahlungsausgänge',
'Payments Changeable' => 'Änderbarkeit von Zahlungen',
'Per. Inv.' => 'Wied. Rech.',
+ 'Perform check when a gl transaction is posted?' => 'Prüfung durchführen, wenn eine Dialogbuchung gebucht wird?',
+ 'Perform check when a purchase invoice or a payment for a purchase invoice is posted?' => 'Prüfung durchführen, wenn eine Einkaufsrechnung oder ein Zahlungsausgang hierfür gebucht wird?',
+ 'Perform check when a sales invoice or a payment for a sales invoice is posted?' => 'Prüfung durchführen, wenn eine Verkaufsrechnung oder ein Zahlungseingang hierfür gebucht wird?',
+ 'Perform check when an ap transaction is posted?' => 'Prüfung durchführen, wenn Kreditorenbuchung gebucht wird?',
+ 'Perform check when an ar transaction is posted?' => 'Prüfung durchführen, wenn Debiotorenbuchung gebucht wird?',
'Period' => 'Zeitraum',
'Period:' => 'Zeitraum:',
'Periodic Invoices' => 'Wiederkehrende Rechnungen',
'not yet executed' => 'Noch nicht ausgeführt',
'number' => 'Nummer',
'oe.pl::search called with unknown type' => 'oe.pl::search mit unbekanntem Typ aufgerufen',
- 'one-time execution' => 'einmalige Ausführung',
'on the same day' => 'am selben Tag',
+ 'one-time execution' => 'einmalige Ausführung',
'only OB Transactions' => 'nur EB-Buchungen',
'open' => 'Offen',
'order' => 'Reihenfolge',
'Check' => 'Scheck',
'Check Details' => 'Bitte Angaben überprüfen',
'Check for duplicates' => 'Dublettencheck',
+ 'Check on ap transaction' => 'Prüfen bei Kreditorenbuchung',
+ 'Check on ar transaction' => 'Prüfen bei Debitorenbuchung',
+ 'Check on gl transaction' => 'Prüfen bei Dialogbuchung',
+ 'Check on purchase invoice' => 'Prüfen bei Einkaufsrechnung',
+ 'Check on sales invoice' => 'Prüfen bei Verkaufsrechnung',
'Checks' => 'Schecks',
'Choose Customer' => 'Endkunde wählen:',
'Choose Outputformat' => 'Ausgabeformat auswählen...',
'Customers' => 'Kunden',
'Customers and vendors' => 'Kunden und Lieferanten',
'Customized Report' => 'Vorgewählte Zeiträume',
+ 'DATEV check configuration' => 'Einstellungen für DATEV-Prüfung',
'DATEV - Export Assistent' => 'DATEV-Exportassistent',
'DATEV Angaben' => 'DATEV-Angaben',
'DATEV Export' => 'DATEV-Export',
'It is possible that even after such a correction there is something wrong with this transaction (e.g. taxes that don\'t match the selected taxkey). Therefore you should re-run the general ledger analysis.' => 'Auch nach einer Korrektur kann es mit dieser Buchung noch weitere Probleme geben (z.B. nicht zum Steuerschlüssel passende Steuern), weshalb ein erneutes Ausführen der Hauptbuchanalyse empfohlen wird.',
'It is possible to do this automatically for some Buchungsgruppen, but not for all.' => 'Es ist möglich, dies für einige, aber nicht für alle Buchungsgruppen automatisch zu erledigen.',
'It is possible to do this automatically for some units, but for others the user has to chose the new unit.' => 'Das ist für einige Einheiten automatisch möglich, aber bei anderen muss der Benutzer die neue Einheit auswählen.',
+ 'It is possible to make a quick DATEV export everytime you post a record to ensure things work nicely with their data requirements. This will result in a slight overhead though you can enable this for each type of record independantly.' => 'Es ist möglich, bei jeder Buchung einen schnellen DATEV-Export durchzuführen, um sicherzustellen, dass die Datensätze den DATEV-Anforderungen genügen. Da dies einen kleinen Overhead bedeutet, lässt sich dei Einstellung für jeden Buchungstyp getrennt einstellen.',
'It may optionally be compressed with "gzip".' => 'Sie darf optional mit "gzip" komprimiert sein.',
'It will simply set the taxkey to 0 (meaning "no taxes") which is the correct value for such inventory transactions.' => 'Es wird einfach die Steuerschlüssel auf 0 setzen, was "keine Steuer" bedeutet und für solche Warenbestandsbuchungen der richtige Wert ist.',
'Item deleted!' => 'Artikel gelöscht!',
'Payments' => 'Zahlungsausgänge',
'Payments Changeable' => 'Änderbarkeit von Zahlungen',
'Per. Inv.' => 'Wied. Rech.',
+ 'Perform check when a gl transaction is posted?' => 'Prüfung durchführen, wenn eine Dialogbuchung gebucht wird?',
+ 'Perform check when a purchase invoice or a payment for a purchase invoice is posted?' => 'Prüfung durchführen, wenn eine Einkaufsrechnung oder ein Zahlungsausgang hierfür gebucht wird?',
+ 'Perform check when a sales invoice or a payment for a sales invoice is posted?' => 'Prüfung durchführen, wenn eine Verkaufsrechnung oder ein Zahlungseingang hierfür gebucht wird?',
+ 'Perform check when an ap transaction is posted?' => 'Prüfung durchführen, wenn Kreditorenbuchung gebucht wird?',
+ 'Perform check when an ar transaction is posted?' => 'Prüfung durchführen, wenn Debiotorenbuchung gebucht wird?',
'Period' => 'Zeitraum',
'Period:' => 'Zeitraum:',
'Periodic Invoices' => 'Wiederkehrende Rechnungen',
'Check' => 'Cheque',
'Check Details' => '',
'Check for duplicates' => '',
+ 'Check on ap transaction' => '',
+ 'Check on ar transaction' => '',
+ 'Check on gl transaction' => '',
+ 'Check on purchase invoice' => '',
+ 'Check on sales invoice' => '',
'Checks' => '',
'Choose Customer' => '',
'Choose Outputformat' => '',
'DATEV - Export Assistent' => '',
'DATEV Angaben' => '',
'DATEV Export' => '',
+ 'DATEV check configuration' => '',
'DATEV check returned errors:' => '',
'DATEX - Export Assistent' => '',
'DELETED' => '',
'It is possible that even after such a correction there is something wrong with this transaction (e.g. taxes that don\'t match the selected taxkey). Therefore you should re-run the general ledger analysis.' => '',
'It is possible to do this automatically for some Buchungsgruppen, but not for all.' => '',
'It is possible to do this automatically for some units, but for others the user has to chose the new unit.' => '',
+ 'It is possible to make a quick DATEV export everytime you post a record to ensure things work nicely with their data requirements. This will result in a slight overhead though you can enable this for each type of record independantly.' => '',
'It may optionally be compressed with "gzip".' => '',
'It will simply set the taxkey to 0 (meaning "no taxes") which is the correct value for such inventory transactions.' => '',
'Item deleted!' => '',
'Payments' => '',
'Payments Changeable' => '',
'Per. Inv.' => '',
+ 'Perform check when a gl transaction is posted?' => '',
+ 'Perform check when a purchase invoice or a payment for a purchase invoice is posted?' => '',
+ 'Perform check when a sales invoice or a payment for a sales invoice is posted?' => '',
+ 'Perform check when an ap transaction is posted?' => '',
+ 'Perform check when an ar transaction is posted?' => '',
'Period' => '',
'Period:' => '',
'Periodic Invoices' => '',
--- /dev/null
+# @tag: defaults_datev_check
+# @description: Einstellung für DATEV-Überprüfungen (datev_check) vom Config-File in die DB verlagern.
+# @depends: release_2_7_0
+# @charset: utf-8
+
+use utf8;
+use strict;
+
+die("This script cannot be run from the command line.") unless ($main::form);
+
+sub mydberror {
+ my ($msg) = @_;
+ die($dbup_locale->text("Database update error:") .
+ "<br>$msg<br>" . $DBI::errstr);
+}
+
+sub do_query {
+ my ($query, $may_fail) = @_;
+
+ if (!$dbh->do($query)) {
+ mydberror($query) unless ($may_fail);
+ $dbh->rollback();
+ $dbh->begin_work();
+ }
+}
+
+sub do_update {
+
+ # this query will fail if column already exist (new database)
+ do_query(qq|ALTER TABLE defaults ADD COLUMN datev_check_on_sales_invoice boolean DEFAULT true|, 1);
+ do_query(qq|ALTER TABLE defaults ADD COLUMN datev_check_on_purchase_invoice boolean DEFAULT true|, 1);
+ do_query(qq|ALTER TABLE defaults ADD COLUMN datev_check_on_ar_transaction boolean DEFAULT true|, 1);
+ do_query(qq|ALTER TABLE defaults ADD COLUMN datev_check_on_ap_transaction boolean DEFAULT true|, 1);
+ do_query(qq|ALTER TABLE defaults ADD COLUMN datev_check_on_gl_transaction boolean DEFAULT true|, 1);
+
+ # check current configuration and set default variables accordingly, so that
+ # kivitendo's behaviour isn't changed by this update
+ # if checks are not set in config set it to true
+ foreach my $check (qw(check_on_sales_invoice check_on_purchase_invoice check_on_ar_transaction check_on_ap_transaction check_on_gl_transaction)) {
+ my $check_set = 1;
+ if (!$::lx_office_conf{datev_check}->{$check}) {
+ $check_set = 0;
+ }
+
+ my $update_column = "UPDATE defaults SET datev_$check = '$check_set';";
+ do_query($update_column);
+ }
+
+
+ return 1;
+}
+
+return do_update();
+
<tr> </tr>
<tr> </tr>
+ <tr class='listheading'>
+ <th colspan="3">[% 'DATEV check configuration' | $T8 %]</th>
+ </tr>
+ <tr>
+ <td colspan="3">[% 'It is possible to make a quick DATEV export everytime you post a record to ensure things work nicely with their data requirements. This will result in a slight overhead though you can enable this for each type of record independantly.' | $T8 %]</td>
+ </tr>
+ <tr>
+ <td align="right">[% 'Check on sales invoice' | $T8 %]</td>
+ <td>[% L.yes_no_tag('datev_check_on_sales_invoice', SELF.datev_check_on_sales_invoice) %]</td>
+ <td>[% 'Perform check when a sales invoice or a payment for a sales invoice is posted?' | $T8 %]</td>
+ </tr>
+ <tr>
+ <td align="right">[% 'Check on purchase invoice' | $T8 %]</td>
+ <td>[% L.yes_no_tag('datev_check_on_purchase_invoice', SELF.datev_check_on_purchase_invoice) %]</td>
+ <td>[% 'Perform check when a purchase invoice or a payment for a purchase invoice is posted?' | $T8 %]</td>
+ </tr>
+ <tr>
+ <td align="right">[% 'Check on ar transaction' | $T8 %]</td>
+ <td>[% L.yes_no_tag('datev_check_on_ar_transaction', SELF.datev_check_on_ar_transaction) %]</td>
+ <td>[% 'Perform check when an ar transaction is posted?' | $T8 %]</td>
+ </tr>
+ <tr>
+ <td align="right">[% 'Check on ap transaction' | $T8 %]</td>
+ <td>[% L.yes_no_tag('datev_check_on_ap_transaction', SELF.datev_check_on_ap_transaction) %]</td>
+ <td>[% 'Perform check when an ap transaction is posted?' | $T8 %]</td>
+ </tr>
+ <tr>
+ <td align="right">[% 'Check on gl transaction' | $T8 %]</td>
+ <td>[% L.yes_no_tag('datev_check_on_gl_transaction', SELF.datev_check_on_gl_transaction) %]</td>
+ <td>[% 'Perform check when a gl transaction is posted?' | $T8 %]</td>
+ </tr>
+
+ <tr> </tr>
+ <tr> </tr>
+
<tr class='listheading'>
<th colspan="3">[% 'Warehouse' | $T8 %]</th>
</tr>