Preisgruppen-Admin darf auch Preisgruppen bei allen verknüpften Kunden entfernen
authorJan Büren <jan@kivitendo.de>
Wed, 18 Aug 2021 08:23:19 +0000 (10:23 +0200)
committerJan Büren <jan@kivitendo.de>
Wed, 18 Aug 2021 08:53:04 +0000 (10:53 +0200)
SL/DB/Pricegroup.pm
locale/de/all
templates/webpages/simple_system_setting/_pricegroup_form.html

index eee044f..a7cfc20 100644 (file)
@@ -7,6 +7,7 @@ use SL::DB::Manager::Pricegroup;
 use SL::DB::Helper::ActsAsList;
 
 __PACKAGE__->meta->initialize;
+__PACKAGE__->before_save('_before_save_remove_customer_pricegroup');
 
 sub displayable_name {
   my $self = shift;
@@ -14,14 +15,32 @@ sub displayable_name {
   return join ' ', grep $_, $self->id, $self->pricegroup;
 }
 
+sub _before_save_remove_customer_pricegroup {
+  my ($self) = @_;
+
+  return 1 unless $::form->{SELF}{remove_customer_pricegroup};
+
+  my %attributes          = (pricegroup_id => undef);
+  require SL::DB::Customer;
+  SL::DB::Manager::Customer->update_all(
+    set   => \%attributes,
+    where => [
+      'pricegroup_id' => $self->id,
+    ],
+  );
+
+  return 1;
+}
+
 sub validate {
   my ($self) = @_;
   require SL::DB::Customer;
 
   my @errors;
-
-  if ( $self->obsolete && SL::DB::Manager::Customer->get_all_count(query => [ pricegroup_id => $self->id ]) ) {
-    push @errors, $::locale->text('The pricegroup is being used by customers.');
+  if (!$::form->{SELF}{remove_customer_pricegroup}                                    &&
+      $self->obsolete                                                                 &&
+      SL::DB::Manager::Customer->get_all_count(query => [ pricegroup_id => $self->id ]) ) {
+      push @errors, $::locale->text('The pricegroup is being used by customers.');
   }
 
   return @errors;
index 820a29e..33317d1 100755 (executable)
@@ -729,7 +729,7 @@ $self->{texts} = {
   'Costs'                       => 'Kosten',
   'Could not create new project #1' => 'Neues Projekt #1 kann nicht angelegt werden',
   'Could not extract Factur-X/ZUGFeRD data, data and error message:' => 'Konnte keine Factur-X-/ZUGFeRD-Daten extrahieren, folgende Fehlermeldung und das PDF:',
-  'Could not find an entry for this part in the pricegroup.' => 'Konnte keine Eintrag für diesen Artikel in der Preisgruppe finden.',
+  'Could not find an entry for this part in the pricegroup.' => 'Konnte keinen Eintrag für diesen Artikel in der Preisgruppe finden.',
   'Could not load class #1 (#2): "#3"' => 'Konnte Klasse #1 (#2) nicht laden: "#3"',
   'Could not load class #1, #2' => 'Konnte Klasse #1 nicht laden: "#2"',
   'Could not load employee'     => 'Konnte Benutzer nicht laden',
@@ -1012,6 +1012,7 @@ $self->{texts} = {
   'Delete Images'               => 'Bilder löschen',
   'Delete Shipto'               => 'Lieferadresse löschen',
   'Delete all'                  => 'Alle Löschen',
+  'Delete for Customers'        => 'Bei Kunden löschen',
   'Delete links'                => 'Verknüpfungen löschen',
   'Delete picture'              => 'Bild löschen',
   'Delete printfiles'           => 'Dokumente löschen',
@@ -3805,6 +3806,7 @@ $self->{texts} = {
   'This vendor has already a booking with this invoice number, do you really want to add the same invoice number again?' => 'Es gibt für diesen Lieferant schon einen Beleg mit dieser Rechnungsnummer. Möchten Sie wirklich eine weitere Buchung mit derselben Rechnungsnummer hinzufügen?',
   'This vendor has already been added.' => 'Der Lieferant wurde bereits hinzugefügt.',
   'This vendor number is already in use.' => 'Diese Lieferantennummer wird bereits verwendet.',
+  'This will also remove this pricegroup for all customers.' => 'Damit werden auch alle verknüpften Preisgruppen im Kundenstamm gelöscht!',
   'This will apply a 3% reduction to the master data price before entering it into the record item.' => 'Diese Zeile zieht vom Stammdatenpreis 3% ab, und schlägt den resultierenden Preis vor.',
   'This will be treated as a discount in percent points.' => 'Diese Option schlägt den Wert in Prozentpunkten als Rabatt vor.',
   'This will happen before the price is offered, and the reduction will not be printed in documents.' => 'Das passiert, bevor der Preis vorgeschlagen wird, und der Abschlag wird nicht in Belegen ausgewiesen.',
index fd4a905..ec7f817 100644 (file)
@@ -10,4 +10,9 @@
   <th align="right">[% LxERP.t8("Obsolete") %]</th>
   <td>[% L.checkbox_tag("object.obsolete", checked=SELF.object.obsolete, for_submit=1) %]</td>
  </tr>
+ <tr>
+  <th align="right">[% LxERP.t8("Delete for Customers") %]</th>
+  <td>[% L.checkbox_tag("SELF.remove_customer_pricegroup", checked=SELF.remove_customer_pricegroup, for_submit=1) %] [% LxERP.t8("This will also remove this pricegroup for all customers.") %]</td>
+ </tr>
+
 </table>