Neue Methode orphaned für Buchungsgruppe
authorG. Richardson <information@kivitendo-premium.de>
Mon, 4 Aug 2014 10:07:54 +0000 (12:07 +0200)
committerG. Richardson <information@kivitendo-premium.de>
Mon, 4 Aug 2014 15:31:42 +0000 (17:31 +0200)
Zum Prüfen, ob eine Buchungsgruppe gelöscht oder bearbeitet werden kann.

SL/Controller/Buchungsgruppen.pm
SL/DB/Buchungsgruppe.pm
templates/webpages/buchungsgruppen/form.html

index 3ecba13..aac6f73 100644 (file)
@@ -61,14 +61,12 @@ sub show_form {
 sub action_edit {
   my ($self) = @_;
 
-  # Allow editing of Buchungsgruppe if it isn't assigned to any parts. The
-  # variable is checked in the template, which toggles between L.select_tag and
-  # text.
-
-  my $number_of_parts_with_buchungsgruppe = SL::DB::Manager::Part->get_objects_count(where => [ buchungsgruppen_id => $self->config->id]);
+  # Allow editing of the charts of the Buchungsgruppe if it isn't assigned to
+  # any parts. This is checked inside the template via the Buchungsgruppen
+  # orphaned method, where an IF-ELSE statement toggles between L.select_tag
+  # and text.
 
   $self->show_form(title     => t8('Edit Buchungsgruppe'),
-                   linked_parts  => $number_of_parts_with_buchungsgruppe,
                    CHARTLIST => SL::DB::TaxzoneChart->get_all_accounts_by_buchungsgruppen_id($self->config->id));
 }
 
@@ -147,11 +145,8 @@ sub create_or_update {
 
   $self->config->save;
 
-  # check whether there are any assigned parts 
-  my $number_of_parts_with_buchungsgruppe = SL::DB::Manager::Part->get_objects_count(where => [ buchungsgruppen_id => $self->config->id]);
-
-  # Save or update taxzone_charts:
-  if ($is_new or $number_of_parts_with_buchungsgruppe == 0) {
+  # Save or update taxzone_charts for new or unused Buchungsgruppen
+  if ($is_new or $self->config->orphaned) {
     my $taxzones = SL::DB::Manager::TaxZone->get_all_sorted();
 
     foreach my $tz (@{ $taxzones }) {
index 3504e2a..d3ddccc 100644 (file)
@@ -72,6 +72,15 @@ sub taxzonecharts {
   my ($self) = @_;
   return SL::DB::Manager::TaxzoneChart->get_all(where => [ buchungsgruppen_id => $self->id ]);
 }
+sub orphaned {
+  my ($self) = @_;
+  die 'not an accessor' if @_ > 1;
+
+  require SL::DB::Part;
+  return 0 if SL::DB::Manager::Part->get_all_count(query => [ buchungsgruppen_id => $self->id ]);
+  return 1;
+}
 
 1;
 __END__
@@ -111,6 +120,10 @@ Return the chart (an instance of L<SL::DB::Chart>) for the income
 account for the given taxzone (either the DB id or an instance of
 L<SL::DB::TaxZone>).
 
+=item C<orphaned>
+
+Checks whether this Buchungsgruppe is assigned to any parts.
+
 =back
 
 =head1 BUGS
index 9fe2fd9..04b7496 100644 (file)
@@ -12,9 +12,9 @@
   </tr>
   <tr>
     <th align="right">[% 'Inventory account' | $T8 %]</th>
-    [%- IF SELF.config.id AND linked_parts != 0 %]
+    [%- IF SELF.config.id AND NOT SELF.config.orphaned %]
     <td>[%- CHARTLIST.inventory_accno %] -- [%- CHARTLIST.inventory_accno_description %]</td>
-    [%- ELSIF NOT SELF.config.id AND linked_parts != 0 %]
+    [%- ELSIF NOT SELF.config.id AND NOT SELF.config.orphaned %]
     <td>[%- L.select_tag("config.inventory_accno_id", ACCOUNTS.ic, title_sub=\account_label, default=SELF.defaults.inventory_accno_id) %]</td>
     [%- ELSE %]
     <td>[%- L.select_tag("config.inventory_accno_id", ACCOUNTS.ic, title_sub=\account_label, default=SELF.config.inventory_accno_id) %]</td>
@@ -23,9 +23,9 @@
 [%- FOREACH tz = TAXZONES %]
   <tr>
     <th align="right">[% 'Revenue' | $T8 %] [% HTML.escape(tz.description) %]</th>
-    [%- IF SELF.config.id AND linked_parts != 0 %]
+    [%- IF SELF.config.id AND NOT SELF.config.orphaned %]
     <td>[% CHARTLIST.${tz.id}.income_accno %] -- [% CHARTLIST.${tz.id}.income_accno_description %]</td>
-    [%- ELSIF NOT SELF.config.id AND linked_parts != 0 %]
+    [%- ELSIF NOT SELF.config.id AND NOT SELF.config.orphaned %]
     <td>[%- L.select_tag('income_accno_id_' _ tz.id, ACCOUNTS.ic_income, title_sub=\account_label, default=SELF.defaults.income_accno_id) %]</td>
     [%- ELSE %]
     <td>[%- L.select_tag('income_accno_id_' _ tz.id, ACCOUNTS.ic_income, title_sub=\account_label, default=CHARTLIST.${tz.id}.income_accno_id) %]</td>
@@ -33,9 +33,9 @@
   </tr>
   <tr>
     <th align="right">[% 'Expense' | $T8 %] [% HTML.escape(tz.description) %]</th>
-    [%- IF SELF.config.id AND linked_parts != 0 %]
+    [%- IF SELF.config.id AND NOT SELF.config.orphaned %]
     <td>[% CHARTLIST.${tz.id}.expense_accno %] -- [% CHARTLIST.${tz.id}.expense_accno_description %]</td>
-    [%- ELSIF NOT SELF.config.id AND linked_parts != 0 %]
+    [%- ELSIF NOT SELF.config.id AND NOT SELF.config.orphaned %]
     <td>[%- L.select_tag('expense_accno_id_' _ tz.id, ACCOUNTS.ic_expense, title_sub=\account_label, default=SELF.defaults.expense_accno_id) %]</td>
     [%- ELSE %]
     <td>[%- L.select_tag('expense_accno_id_' _ tz.id, ACCOUNTS.ic_expense, title_sub=\account_label, default=CHARTLIST.${tz.id}.expense_accno_id) %]</td>
@@ -47,7 +47,7 @@
  <p>
   [% L.hidden_tag("action", "Buchungsgruppen/dispatch") %]
   [% L.submit_tag("action_" _  (SELF.config.id ? "update" : "create"), LxERP.t8('Save'), onclick="return check_prerequisites();") %]
-  [%- IF SELF.config.id AND linked_parts == 0 %]
+  [%- IF SELF.config.id AND SELF.config.orphaned %]
     [% L.submit_tag("action_delete", LxERP.t8('Delete'), confirm=LxERP.t8('Are you sure?')) %]
   [%- END %]
  </p>