]> wagnertech.de Git - kivitendo-erp.git/commitdiff
Mandantenkonfig: Lieferdatum bei VK-Auftrag und Gültigsdatum bei VK-Angebot
authorJan Büren <jan@kivitendo.de>
Mon, 8 Mar 2021 12:59:37 +0000 (13:59 +0100)
committerJan Büren <jan@kivitendo.de>
Mon, 8 Mar 2021 13:01:29 +0000 (14:01 +0100)
Anstatt diese beiden Werte zu berechnen, gibt es die Möglichkeit
diese konfigurativ gar nicht zu setzen. Hoffentlich letzmalig auch
für die OE.pm implementiert.

SL/Controller/Order.pm
SL/DB/MetaSetup/Default.pm
SL/OE.pm
bin/mozilla/oe.pl
doc/changelog
locale/de/all
locale/en/all
sql/Pg-upgrade2/defaults_req_delivery_date.pl [new file with mode: 0644]
templates/webpages/client_config/_posting_configuration.html

index ea92d4be99223de87487b666f3edc313506c8883..04ec2e09dc42fd0d4d1fa34f2036a9d237e6f656 100644 (file)
@@ -71,7 +71,12 @@ sub action_add {
   $self->order->transdate(DateTime->now_local());
   my $extra_days = $self->{type} eq 'sales_quotation' ? $::instance_conf->get_reqdate_interval       :
                    $self->{type} eq 'sales_order'     ? $::instance_conf->get_delivery_date_interval : 1;
-  $self->order->reqdate(DateTime->today_local->next_workday(extra_days => $extra_days)) if !$self->order->reqdate;
+
+  if (   ($self->{type} eq 'sales_order'     &&  $::instance_conf->get_deliverydate_on)
+      || ($self->{type} eq 'sales_quotation' &&  $::instance_conf->get_reqdate_on)
+      && (!$self->order->reqdate)) {
+    $self->order->reqdate(DateTime->today_local->next_workday(extra_days => $extra_days));
+  }
 
 
   $self->pre_render();
@@ -220,11 +225,17 @@ sub action_save_as_new {
                         ? DateTime->today_local
                         : $order->transdate;
 
-  # Set new reqdate unless changed
+  # Set new reqdate unless changed if it is enabled in client config
   if ($order->reqdate == $saved_order->reqdate) {
     my $extra_days = $self->{type} eq 'sales_quotation' ? $::instance_conf->get_reqdate_interval       :
                      $self->{type} eq 'sales_order'     ? $::instance_conf->get_delivery_date_interval : 1;
-    $new_attrs{reqdate} = DateTime->today_local->next_workday(extra_days => $extra_days);
+
+    if (   ($self->{type} eq 'sales_order'     &&  !$::instance_conf->get_deliverydate_on)
+        || ($self->{type} eq 'sales_quotation' &&  !$::instance_conf->get_reqdate_on)) {
+      $new_attrs{reqdate} = '';
+    } else {
+      $new_attrs{reqdate} = DateTime->today_local->next_workday(extra_days => $extra_days);
+    }
   } else {
     $new_attrs{reqdate} = $order->reqdate;
   }
index 790e054a0e26bb2d3bf02b2bf83fde95a7cde8db..c998dc4d4f1151122076999e174dd300c843b5e9 100644 (file)
@@ -56,6 +56,7 @@ __PACKAGE__->meta->columns(
   datev_check_on_sales_invoice              => { type => 'boolean', default => 'true' },
   datev_export_format                       => { type => 'enum', check_in => [ 'cp1252', 'cp1252-translit', 'utf-8' ], db_type => 'datev_export_format_enum', default => 'cp1252-translit' },
   delivery_date_interval                    => { type => 'integer', default => '0' },
+  deliverydate_on                           => { type => 'boolean', default => 'true' },
   disabled_price_sources                    => { type => 'array' },
   doc_delete_printfiles                     => { type => 'boolean', default => 'false' },
   doc_files                                 => { type => 'boolean', default => 'false' },
@@ -133,6 +134,7 @@ __PACKAGE__->meta->columns(
   purchase_order_show_delete                => { type => 'boolean', default => 'true' },
   quick_search_modules                      => { type => 'array' },
   reqdate_interval                          => { type => 'integer', default => '0' },
+  reqdate_on                                => { type => 'boolean', default => 'true' },
   require_transaction_description_ps        => { type => 'boolean', default => 'false', not_null => 1 },
   requirement_spec_section_order_part_id    => { type => 'integer' },
   revtrans                                  => { type => 'boolean', default => 'false' },
index a517e05d2a3fb8ea24d724569789b9964f19abe8..1b640e37bc39aa6f1ac2393b79085c36698c410e 100644 (file)
--- a/SL/OE.pm
+++ b/SL/OE.pm
@@ -986,7 +986,12 @@ sub _retrieve {
   if (!$form->{id}) {
     my $extra_days = $form->{type} eq 'sales_quotation' ? $::instance_conf->get_reqdate_interval       :
                      $form->{type} eq 'sales_order'     ? $::instance_conf->get_delivery_date_interval : 1;
-    $form->{reqdate}   = DateTime->today_local->next_workday(extra_days => $extra_days)->to_kivitendo;
+    if (   ($form->{type} eq 'sales_order'     &&  !$::instance_conf->get_deliverydate_on)
+        || ($form->{type} eq 'sales_quotation' &&  !$::instance_conf->get_reqdate_on)) {
+      $form->{reqdate}   = '';
+    } else {
+      $form->{reqdate}   = DateTime->today_local->next_workday(extra_days => $extra_days)->to_kivitendo;
+    }
     $form->{transdate} = DateTime->today_local->to_kivitendo;
   }
 
index 0fe1ffb9adaa107ab0546e17077777d859a27a6e..254d016eea61ecbbb8905384239fe176797cac8b 100644 (file)
@@ -1781,11 +1781,16 @@ sub save_as_new {
     if ( $saved_order && $saved_order->{reqdate} eq $form->{reqdate} && $saved_order->{transdate} eq $form->{transdate} ) {
       my $extra_days = $form->{type} eq 'sales_quotation' ? $::instance_conf->get_reqdate_interval       :
                        $form->{type} eq 'sales_order'     ? $::instance_conf->get_delivery_date_interval : 1;
+
+    if (   ($form->{type} eq 'sales_order'     &&  !$::instance_conf->get_deliverydate_on)
+        || ($form->{type} eq 'sales_quotation' &&  !$::instance_conf->get_reqdate_on)) {
+      $form->{reqdate}   = '';
+    } else {
       $form->{reqdate}   = DateTime->today_local->next_workday(extra_days => $extra_days)->to_kivitendo;
+    }
       $form->{transdate} = DateTime->today_local->to_kivitendo;
     }
   }
-
   # update employee
   $form->get_employee();
 
index 3c8780c867a94893a57caba68a5a7036a7754d1e..efec8ec63110907a31de731f8928305887ac0a61 100644 (file)
@@ -47,6 +47,7 @@ Kleinere neue Features und Detailverbesserungen:
    eines Loginnamens auch eine E-Mail-Adresse verwendet werden. Es ist
    nicht nötig, dass diese Adresse einem der Anwenderkonten zugeordnet
    ist.
+-  Lieferdatum und Gültigkeitsdatum können optional auch nicht mehr gesetzt werden
 
 Bugfixes (Tracker: https://www.kivitendo.de/redmine):
 97 Benutzer löschen unter System->Benutzer funktioniert nicht
index aac14961d007c3dc9bea89c6989e6daf4b54a132..ef2994be681c1a23d27c129771d77e3f99d92469 100755 (executable)
@@ -1649,6 +1649,8 @@ $self->{texts} = {
   'If missing then the start date will be used.' => 'Falls es fehlt, so wird die erste Rechnung für das Startdatum erzeugt.',
   'If one or more space separated serial numbers are assigned in a sales invoice, match the charge number of the inventory item. Assumes that Serial Number and Charge Number have 1:1 relation. Otherwise throw a error message for the default sales invoice transfer.' => 'Falls eine oder mehrere Leerzeichen separierte Seriennummern in Verkaufsrechnungen definiert sind, nutz diese als Chargennummern fürs Standard-Auslagern über Rechnung. Seriennummern und eingelagerte Chargen kommen jeweils exakt nur einmal vor. Falls die Chargennummer oder das Mengenverhältnis (1:1) in keinem Lagerort existiert wird eine Fehlermeldung beim Auslagern generiert.',
   'If searching a part from a document and no part is found then offer to create a new part.' => 'Wenn bei der Artikelsuche aus einem Dokument heraus kein Artikel gefunden wird, dann wird ermöglicht, von dort aus einen neuen Artikel anzulegen.',
+  'If set to no the \'delivery date\' field for sales orders won\'t be set at all.' => 'Falls der Wert auf Nein gesetzt wird, wird überhaupt kein Lieferdatum in Verkaufsaufträgen gesetzt',
+  'If set to no the \'valid until\' field for sales quotation won\'t be set at all.' => 'Falls der Wert auf Nein gesetzt wird, wird überhaupt kein Gültigkeitsdatum bei Verkaufs-Angeboten gesetzt',
   'If the article type is set to \'mixed\' then a column called \'part_type\' or called \'pclass\' must be present.' => 'Falls der Artikeltyp auf \'mixed\' gesetzt ist muss entweder eine Spalte \'part_type\' oder \'pclass\' im Import vorhanden sein',
   'If the automatic creation of invoices for fees and interest is switched on for a dunning level then the following accounts will be used for the invoice.' => 'Wenn das automatische Erstellen einer Rechnung über Mahngebühren und Zinsen für ein Mahnlevel aktiviert ist, so werden die folgenden Konten für die Rechnung benutzt.',
   'If the counted quantity differs more than this threshold from the quantity in the database, a warning will be shown. Set to 0 to switch of this feature.' => 'Wenn die gezählte Menge mehr als diesen Schwellenwert von der Menge in der Datenbank abweicht, wird eine Warnmeldung angezeigt. Setzen Sie den Schwellenwert auf 0, um dieses Feature abzuschalten.',
@@ -2934,6 +2936,7 @@ $self->{texts} = {
   'Set (set to)'                => 'Setze',
   'Set all source and memo fields' => 'Alle Beleg-/Memo-Felder setzen',
   'Set count for one or more of the items to select them' => 'Zum Selektieren bitte Menge für einen oder mehrere Artikel setzen',
+  'Set delivery date for Sales Orders' => 'Lieferdatum im Verkaufsauftrag setzen',
   'Set eMail text'              => 'E-Mail Text eingeben',
   'Set fields'                  => 'Felder setzen',
   'Set lastcost'                => 'EK-Preis übernehmen',
@@ -2941,6 +2944,7 @@ $self->{texts} = {
   'Set the invoice duedate as the default execution date for SEPA export.' => 'Das Fälligkeitsdatum des Belegs als Ausführungsdatum im SEPA-Export setzen.',
   'Set the invoice skonto date (if exists) as the default execution date for SEPA export.' => 'Das Skonto-Datum des Belegs als Ausführungsdatum im SEPA-Export setzen. Hat Priorität vor dem Fälligkeitsdatum.',
   'Set to paid missing'         => 'Fehlbetrag setzen',
+  'Set valid until date for Sales Quotation' => 'Gültigkeitsdatum bei Verkaufs-Angeboten setzen',
   'Settings'                    => 'Einstellungen',
   'Setup Menu'                  => 'Menü-Variante',
   'Ship to (database ID)'       => 'Lieferadresse (Datenbank-ID)',
index c7fe39b99af314dcfa0e3e1fdbcff3df4ecf8764..d79401c4b255e8bce25e2a5ce3fcbb53428e1246 100644 (file)
@@ -1649,6 +1649,8 @@ $self->{texts} = {
   'If missing then the start date will be used.' => '',
   'If one or more space separated serial numbers are assigned in a sales invoice, match the charge number of the inventory item. Assumes that Serial Number and Charge Number have 1:1 relation. Otherwise throw a error message for the default sales invoice transfer.' => '',
   'If searching a part from a document and no part is found then offer to create a new part.' => '',
+  'If set to no the \'delivery date\' field for sales orders won\'t be set at all.' => '',
+  'If set to no the \'valid until\' field for sales quotation won\'t be set at all.' => '',
   'If the article type is set to \'mixed\' then a column called \'part_type\' or called \'pclass\' must be present.' => '',
   'If the automatic creation of invoices for fees and interest is switched on for a dunning level then the following accounts will be used for the invoice.' => '',
   'If the counted quantity differs more than this threshold from the quantity in the database, a warning will be shown. Set to 0 to switch of this feature.' => '',
@@ -2934,6 +2936,7 @@ $self->{texts} = {
   'Set (set to)'                => '',
   'Set all source and memo fields' => '',
   'Set count for one or more of the items to select them' => '',
+  'Set delivery date for Sales Orders' => '',
   'Set eMail text'              => '',
   'Set fields'                  => '',
   'Set lastcost'                => '',
@@ -2941,6 +2944,7 @@ $self->{texts} = {
   'Set the invoice duedate as the default execution date for SEPA export.' => '',
   'Set the invoice skonto date (if exists) as the default execution date for SEPA export.' => '',
   'Set to paid missing'         => '',
+  'Set valid until date for Sales Quotation' => '',
   'Settings'                    => '',
   'Setup Menu'                  => '',
   'Ship to (database ID)'       => '',
diff --git a/sql/Pg-upgrade2/defaults_req_delivery_date.pl b/sql/Pg-upgrade2/defaults_req_delivery_date.pl
new file mode 100644 (file)
index 0000000..0ee0c96
--- /dev/null
@@ -0,0 +1,20 @@
+# @tag: defaults_req_delivery_date
+# @description: Einstellung ob Liefertermin oder Gültigkeitstermin überhaupt gesetzt werden soll
+# @depends: release_3_5_6_1
+package SL::DBUpgrade2::defaults_req_delivery_date;
+
+use utf8;
+
+use parent qw(SL::DBUpgrade2::Base);
+use strict;
+
+sub run {
+  my ($self) = @_;
+
+  # this query will fail if column already exist (new database)
+  $self->db_query(qq|ALTER TABLE defaults ADD COLUMN reqdate_on boolean DEFAULT true|);
+  $self->db_query(qq|ALTER TABLE defaults ADD COLUMN deliverydate_on boolean DEFAULT true|);
+  return 1;
+}
+
+1;
index 824c9393c843137e3ff2079a6e2a81a17198474f..91b42579995800e0b5d89b96da7184e3d2996527 100644 (file)
    <td>[% L.select_tag('defaults.balance_startdate_method', SELF.balance_startdate_method_options, value_key = 'value', title_key = 'title', default = SELF.defaults.balance_startdate_method) %]</td>
    <td>[% LxERP.t8('This option controls the method used for determining the startdate for the balance report.') %]</td>
   </tr>
+  <tr>
+   <td align="right">[% LxERP.t8('Set valid until date for Sales Quotation') %]</td>
+   <td>[% L.yes_no_tag('defaults.reqdate_on', SELF.defaults.reqdate_on) %]</td>
+   <td>[% LxERP.t8("If set to no the 'valid until' field for sales quotation won't be set at all.") %]</td>
+  </tr>
   <tr>
    <td align="right">[% LxERP.t8('Sales Quotation valid interval') %]</td>
    <td>[% L.input_tag('defaults.reqdate_interval', LxERP.format_amount(SELF.defaults.reqdate_interval, 0), style=style) %]</td>
    <td>[% LxERP.t8('Usually the sales quotation is valid until the next working day. If a value is set here then the quotation will be valid for at least that many days. The resulting date will be adjusted to the next working day if it ends up on a weekend.') %]</td>
   </tr>
+  <tr>
+   <td align="right">[% LxERP.t8('Set delivery date for Sales Orders') %]</td>
+   <td>[% L.yes_no_tag('defaults.deliverydate_on', SELF.defaults.deliverydate_on) %]</td>
+   <td>[% LxERP.t8("If set to no the 'delivery date' field for sales orders won't be set at all.") %]</td>
+  </tr>
   <tr>
    <td align="right">[% LxERP.t8('Sales Order delivery date interval') %]</td>
    <td>[% L.input_tag('defaults.delivery_date_interval', LxERP.format_amount(SELF.defaults.delivery_date_interval, 0), style=style) %]</td>