Optionale auftragszentrische Verknüpfte Belege
authorJan Büren <jan@kivitendo.de>
Fri, 15 Oct 2021 13:24:21 +0000 (15:24 +0200)
committerJan Büren <jan@kivitendo.de>
Fri, 15 Oct 2021 13:24:21 +0000 (15:24 +0200)
Konfigurierbar in der Mandantenkonfiguration. Unabhängig vom
aktuellen Belegort werden die verknüpften Belege immer vom VK-Auftrag
aufgebaut

SL/Controller/RecordLinks.pm
SL/DB/MetaSetup/Default.pm
doc/changelog
locale/de/all
sql/Pg-upgrade2/defaults_view_record_links.sql [new file with mode: 0644]
templates/webpages/client_config/_record_links.html [new file with mode: 0644]
templates/webpages/client_config/form.html

index 3e8f028..aceb57f 100644 (file)
@@ -65,7 +65,10 @@ sub action_ajax_list {
   my ($self) = @_;
 
   eval {
-    my $linked_records = $self->object->linked_records(direction => 'both', recursive => 1, save_path => 1);
+    my $linked_records = ($::instance_conf->get_always_record_links_from_order && ref $self->object ne 'SL::DB::Order')
+                       ?  $self->get_order_centric_linked_records
+                       :  $self->object->linked_records(direction => 'both', recursive => 1, save_path => 1);
+
     push @{ $linked_records }, $self->object->sepa_export_items if $self->object->can('sepa_export_items');
 
     my $output         = grouped_record_list(
@@ -242,4 +245,17 @@ sub check_auth {
   $::auth->assert('record_links');
 }
 
+# internal
+
+sub get_order_centric_linked_records {
+  my ($self) = @_;
+
+  my $all_linked_records = $self->object->linked_records(direction => 'from', recursive => 1);
+  my $filtered_orders = [ grep { 'SL::DB::Order' eq ref $_ && $_->is_type('sales_order') } @$all_linked_records ];
+  my $id_ref = [ map { $_->id } @$filtered_orders ];
+  my $linked_records = SL::DB::Order->new->linked_records(direction => 'to', recursive => 1, batch => $id_ref);
+  push @{ $linked_records }, @$filtered_orders;
+
+  return $linked_records;
+}
 1;
index 7da1ce5..97e3b70 100644 (file)
@@ -19,6 +19,7 @@ __PACKAGE__->meta->columns(
   allow_new_purchase_invoice                => { type => 'boolean', default => 'true', not_null => 1 },
   allow_sales_invoice_from_sales_order      => { type => 'boolean', default => 'true', not_null => 1 },
   allow_sales_invoice_from_sales_quotation  => { type => 'boolean', default => 'true', not_null => 1 },
+  always_record_links_from_order            => { type => 'boolean', default => 'false' },
   ap_add_doc                                => { type => 'boolean', default => 'false', not_null => 1 },
   ap_changeable                             => { type => 'integer', default => 2, not_null => 1 },
   ap_chart_id                               => { type => 'integer' },
index 25ceec7..48e0217 100644 (file)
@@ -25,6 +25,8 @@ Kleinere neue Features und Detailverbesserungen:
   Mandantenkonfiguration eingestellt werden
 - Optionale Warnung falls eine Verkaufsrechnung nicht aus einem Lieferschein
   erzeugt wurde (Konfigurierbar in der Mandantenkonfiguration)
+- Die Ansicht der verknüpften Belegen kann unabhängig vom aktuellen Beleg immer
+  vom Auftrag her aufgebaut werden
 
 Bugfixes (Tracker: https://www.kivitendo.de/redmine):
 
index cf42752..fbc8203 100755 (executable)
@@ -1700,6 +1700,7 @@ $self->{texts} = {
   'If enabled a warning will be shown in sales delivery orders on workflow to invoices if positions are not stocked out.' => 'Falls aktiviert, wird eine Warnung beim Workflow von Verkaufslieferscheinen zu Rechnungen ausgegeben, wenn die Positionen noch nicht ausgelagert sind.',
   'If enabled only those projects that are assigned to the currently selected customer are offered for selection in sales records.' => 'Wenn eingeschaltet, so werden in Verkaufsbelegen nur diejenigen Projekte zur Auswahl angeboten, die dem aktuell ausgewählten Kunden zugewiesen wurden.',
   'If enabled purchase and sales records cannot be saved if no transaction description has been entered.' => 'Wenn angeschaltet, so können Einkaufs- und Verkaufsbelege nicht gespeichert werden, solange keine Vorgangsbezeichnung eingegeben wurde.',
+  'If enabled the record links view starts always from the sales order including all sublevels' => 'Falls aktiv, werden die verknüpften Belege immer vom Verkaufsauftrag inkl. aller darunterliegenden Belege angezeigt',
   'If item not found, allow creation of new item' => 'Falls Artikel nicht gefunden, erlaube Erfassen eines Neuen',
   'If left empty the default sender from the kivitendo configuration will be used (key \'email_from\' in section \'periodic_invoices\'; current value: #1).' => 'Falls leer, so wird der Standardabsender aus der kivitendo-Konfiguration genutzt (Schlüssel »email_from« in Abschnitt »periodic_invoices«; aktueller Wert: #1).',
   'If missing then the start date will be used.' => 'Falls es fehlt, so wird die erste Rechnung für das Startdatum erzeugt.',
@@ -4102,6 +4103,7 @@ $self->{texts} = {
   'Versions'                    => 'Versionen',
   'View SEPA export'            => 'SEPA-Export-Details ansehen',
   'View background job execution result' => 'Verlauf der Hintergrund-Job-Ausführungen anzeigen',
+  'View record links from Sales Order' => 'Verknüpfte Belege immer vom Verkaufsauftrag ansehen',
   'View sent email'             => 'Verschickte E-Mail anzeigen',
   'View warehouse content'      => 'Lagerbestand ansehen',
   'View/edit all employees purchase documents' => 'Bearbeiten/ansehen der Einkaufsdokumente aller Mitarbeiter',
diff --git a/sql/Pg-upgrade2/defaults_view_record_links.sql b/sql/Pg-upgrade2/defaults_view_record_links.sql
new file mode 100644 (file)
index 0000000..fc142bb
--- /dev/null
@@ -0,0 +1,5 @@
+-- @tag: defaults_view_record_links
+-- @description: Mandantenkonfiguration: Sichtweise für record links immer vom Auftrag
+-- @depends: release_3_5_8
+
+ALTER TABLE defaults ADD COLUMN always_record_links_from_order BOOLEAN DEFAULT FALSE;
diff --git a/templates/webpages/client_config/_record_links.html b/templates/webpages/client_config/_record_links.html
new file mode 100644 (file)
index 0000000..5dd49f6
--- /dev/null
@@ -0,0 +1,12 @@
+[%- USE HTML -%][%- USE LxERP -%][%- USE L -%]
+<div id="record_links">
+ <table>
+  <tr>
+   <td align="right" nowrap="true">[% LxERP.t8('View record links from Sales Order') %]</td>
+   <td>[% L.yes_no_tag('defaults.always_record_links_from_order', SELF.defaults.always_record_links_from_order) %]</td>
+   <td>
+    [% LxERP.t8('If enabled the record links view starts always from the sales order including all sublevels') %]<br>
+   </td>
+  </tr>
+ </table>
+</div>
index dcb5576..79c2cdd 100644 (file)
@@ -93,6 +93,7 @@ $(function() {
    <li><a href="#warehouse">[% LxERP.t8('Warehouse') %]</a></li>
    <li><a href="#features">[% LxERP.t8('Features') %]</a></li>
    <li><a href="#stocktaking">[% LxERP.t8('Stocktaking') %]</a></li>
+   <li><a href="#record_links">[% LxERP.t8('Linked Records') %]</a></li>
   </ul>
 
 [% PROCESS 'client_config/_ranges_of_numbers.html' %]
@@ -106,6 +107,7 @@ $(function() {
 [% PROCESS 'client_config/_warehouse.html' %]
 [% PROCESS 'client_config/_features.html' %]
 [% PROCESS 'client_config/_stocktaking.html' %]
+[% PROCESS 'client_config/_record_links.html' %]
 [% PROCESS 'client_config/_miscellaneous.html' %]
  </div>
 </form>