Steuerzonen ungültig machen
authorG. Richardson <information@kivitendo-premium.de>
Wed, 30 Jul 2014 18:38:28 +0000 (20:38 +0200)
committerG. Richardson <information@kivitendo-premium.de>
Mon, 4 Aug 2014 15:31:40 +0000 (17:31 +0200)
jede Steuerzone kann man unter "System->Steuerzonen->auf Steuerzone klicken"
individuell auf ungültig (obsolete) setzen.

ungültig heißt:

* Steuerzone erscheint nicht in der großen Buchungsgruppenübersicht
* Steuerzone erscheint nicht im Drop-Down Menü für Steuerzonen bei neuen
  Belegen (Angebot-Rechnung)

Bei alten Belegen, die erneut geöffnet werden, ist leider das Verhalten unterschiedlich:

* bei schon gebuchten EK/VK-Rechnungen (id) ist das Drop-Down ausgegraut und
  disabled und es wird nur die ausgewählte Steuerzone angezeigt -> funktioniert

* bei schon gebuchten Angeboten/Aufträgen müssen immer alle Steuerzonen
  angezeigt werden, da man die Steuerzone auch im Nachhinein ändern kann, aber
  auch alle alten Belege mit mittlerweile ungültigen Steuerzonen korrekt
  angezeigt werden müssen. Man kann also nicht einfach nach id fragen und
  entsprechend nach ungültig filtern.

Bucht man also einen Auftrag mit einer bestimmten Steuerzone, setzt die
Steuerzone auf ungültig, und generiert dann aus dem Auftrag z.B. eine Rechnung,
würde die Steuerzone aus dem Auftrag nicht übernommen werden, sondern die erste
Steuerzone aus der Liste standardmäßig ausgewählt sein.

SL/Controller/Buchungsgruppen.pm
SL/Controller/Taxzones.pm
SL/DB/MetaSetup/TaxZone.pm
SL/Form.pm
bin/mozilla/is.pl
bin/mozilla/oe.pl
sql/Pg-upgrade2/tax_zones_obsolete.sql [new file with mode: 0644]
templates/webpages/buchungsgruppen/form.html
templates/webpages/is/form_header.html
templates/webpages/oe/form_header.html
templates/webpages/taxzones/form.html

index bbb5893..f3f07d5 100644 (file)
@@ -25,7 +25,7 @@ sub action_list {
   my ($self) = @_;
 
   my $buchungsgruppen = SL::DB::Manager::Buchungsgruppe->get_all_sorted();
-  my $taxzones        = SL::DB::Manager::TaxZone->get_all_sorted();
+  my $taxzones        = SL::DB::Manager::TaxZone->get_all_sorted(query => [ obsolete => 0 ]);
 
   my %chartlist = ();
   foreach my $gruppe (@{ $buchungsgruppen }) {
@@ -59,7 +59,11 @@ sub show_form {
 sub action_edit {
   my ($self) = @_;
 
+  # check whether buchungsgruppe is assigned to any parts
+  my $number_of_parts_with_buchungsgruppe = SL::DB::Manager::Part->get_objects_count(where => [ buchungsgruppen_id => $self->config->id]);
+
   $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));
 }
 
@@ -120,8 +124,11 @@ sub create_or_update {
 
   $self->config->save;
 
-  #Save taxzone_charts:
-  if ($is_new) {
+  # 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) {
     my $taxzones = SL::DB::Manager::TaxZone->get_all_sorted();
 
     foreach my $tz (@{ $taxzones }) {
index 5f19ea6..9bdf355 100644 (file)
@@ -54,7 +54,7 @@ sub show_form {
 sub action_edit {
   my ($self) = @_;
 
-  $self->show_form(title     => t8('Edit custom variable'),
+  $self->show_form(title     => t8('Edit taxzone'),
                    CHARTLIST => SL::DB::TaxzoneChart->get_all_accounts_by_taxzone_id($self->config->id));
 }
 
@@ -115,6 +115,7 @@ sub create_or_update {
   }
 
   $self->config->save;
+  $self->config->obsolete($::form->{"obsolete"});
 
   #Save taxzone_charts for new taxzones:
   if ($is_new) {
index 993d28f..5529d89 100644 (file)
@@ -11,6 +11,7 @@ __PACKAGE__->meta->table('tax_zones');
 __PACKAGE__->meta->columns(
   description => { type => 'text' },
   id          => { type => 'integer', not_null => 1, sequence => 'id' },
+  obsolete    => { type => 'boolean', default => 'false' },
   sortkey     => { type => 'integer', not_null => 1 },
 );
 
index b3138ac..a36ffd5 100644 (file)
@@ -2145,8 +2145,10 @@ sub _get_taxzones {
   my ($self, $dbh, $key) = @_;
 
   $key = "all_taxzones" unless ($key);
+  my $tzfilter = "";
+  $tzfilter = "WHERE obsolete is FALSE" if $key eq 'ALL_ACTIVE_TAXZONES'; 
 
-  my $query = qq|SELECT * FROM tax_zones ORDER BY sortkey|;
+  my $query = qq|SELECT * FROM tax_zones $tzfilter ORDER BY sortkey|;
 
   $self->{$key} = selectall_hashref_query($self, $dbh, $query);
 
index b6c6298..35b08b9 100644 (file)
@@ -305,7 +305,7 @@ sub form_header {
 
   $form->{defaultcurrency} = $form->get_default_currency(\%myconfig);
 
-  $form->get_lists("taxzones"      => "ALL_TAXZONES",
+  $form->get_lists("taxzones"      => ($form->{id} ? "ALL_TAXZONES" : "ALL_ACTIVE_TAXZONES"),
                    "currencies"    => "ALL_CURRENCIES",
                    "customers"     => "ALL_CUSTOMERS",
                    "departments"   => "all_departments",
index 9a8aea4..fb3a7ff 100644 (file)
@@ -350,8 +350,7 @@ sub form_header {
 
   my $vc = $form->{vc} eq "customer" ? "customers" : "vendors";
 
-  # project ids
-  $form->get_lists("taxzones"      => "ALL_TAXZONES",
+  $form->get_lists("taxzones"      => ($form->{id} ? "ALL_TAXZONES" : "ALL_ACTIVE_TAXZONES"),
                    "payments"      => "ALL_PAYMENTS",
                    "currencies"    => "ALL_CURRENCIES",
                    "departments"   => "ALL_DEPARTMENTS",
diff --git a/sql/Pg-upgrade2/tax_zones_obsolete.sql b/sql/Pg-upgrade2/tax_zones_obsolete.sql
new file mode 100644 (file)
index 0000000..c6891a2
--- /dev/null
@@ -0,0 +1,4 @@
+-- @tag: tax_zones_obsolete
+-- @description: Steuerzonen auf ungültig setzen können
+-- @depends: change_taxzone_id_0
+ALTER TABLE tax_zones ADD COLUMN obsolete boolean DEFAULT FALSE;
index 5dad157..88c19f3 100644 (file)
@@ -10,7 +10,7 @@
   </tr>
   <tr>
     <th align="right">[% 'Inventory account' | $T8 %]</th>
-    [%- IF SELF.config.id %]
+    [%- IF SELF.config.id AND linked_parts != 0 %]
     <td>[%- CHARTLIST.inventory_accno %] -- [%- CHARTLIST.inventory_accno_description %]</td>
     [%- ELSE %]
     <td>[%- L.select_tag("config.inventory_accno_id", ACCOUNTS.ic, title_sub=\account_label, default=SELF.config.inventory_accno_id) %]</td>
@@ -19,7 +19,7 @@
 [%- FOREACH tz = TAXZONES %]
   <tr>
     <th align="right">[% 'Revenue' | $T8 %] [% HTML.escape(tz.description) %]</th>
-    [%- IF SELF.config.id %]
+    [%- IF SELF.config.id AND linked_parts != 0 %]
     <td>[% CHARTLIST.${tz.id}.income_accno %] -- [% CHARTLIST.${tz.id}.income_accno_description %]</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>
@@ -27,7 +27,7 @@
   </tr>
   <tr>
     <th align="right">[% 'Expense' | $T8 %] [% HTML.escape(tz.description) %]</th>
-    [%- IF SELF.config.id %]
+    [%- IF SELF.config.id AND linked_parts != 0 %]
     <td>[% CHARTLIST.${tz.id}.expense_accno %] -- [% CHARTLIST.${tz.id}.expense_accno_description %]</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>
index 5fa5bb1..0d4a255 100644 (file)
         <tr>
           <th align="right">[% 'Steuersatz' | $T8 %]</th>
           <td>
-            [% L.select_tag('taxzone_id', ALL_TAXZONES, default = taxzone_id, title_key = 'description', disabled = (id ? 1 : 0), style='width: 250px', onchange = "document.getElementById('update_button').click();") %]
+            [% L.select_tag('taxzone_id', ( id ? ALL_TAXZONES : ALL_ACTIVE_TAXZONES) , default = taxzone_id, title_key = 'description', disabled = (id ? 1 : 0), style='width: 250px', onchange = "document.getElementById('update_button').click();") %]
   [%- IF id %]
           <input type='hidden' name='taxzone_id' value='[% taxzone_id %]'>
   [%- END %]
index e017349..644879c 100644 (file)
                   <tr>
                     <th align="right">[% 'Steuersatz' | $T8 %]</th>
                     <td>
-                      [% L.select_tag('taxzone_id', ALL_TAXZONES, default=taxzone_id, title_key='description', style='width: 250px') %]
+                      [% L.select_tag('taxzone_id', ( id ? ALL_TAXZONES : ALL_ACTIVE_TAXZONES), default=taxzone_id, title_key='description', style='width: 250px') %]
                     </td>
                   </tr>
 [%- IF ALL_DEPARTMENTS %]
index 4e1c89e..72b8327 100644 (file)
@@ -28,6 +28,8 @@
 [%- END %]
 </table>
 
+[% LxERP.t8('Obsolete') %]: [% L.checkbox_tag('config.obsolete', checked = SELF.config.obsolete, for_submit=1) %]
+
  <p>
   [% L.hidden_tag("action", "Taxzones/dispatch") %]
   [% L.submit_tag("action_" _  (SELF.config.id ? "update" : "create"), LxERP.t8('Save'), onclick="return check_prerequisites();") %]