Auftrags-Controller: Option für "Steuer im Preis inbegriffen"
authorBernd Bleßmann <bernd@kivitendo-premium.de>
Tue, 8 Mar 2016 14:54:15 +0000 (15:54 +0100)
committerBernd Bleßmann <bernd@kivitendo-premium.de>
Fri, 11 Mar 2016 11:45:30 +0000 (12:45 +0100)
SL/Controller/Order.pm
templates/webpages/order/tabs/_tax_row.html
templates/webpages/order/tabs/basic_data.html

index 496031a..ff3aca4 100644 (file)
@@ -137,18 +137,31 @@ sub action_customer_vendor_changed {
     $self->js->hide('#shipto_row');
   }
 
+  $self->order->taxzone_id($self->order->$cv_method->taxzone_id);
+
+  if ($self->order->is_sales) {
+    $self->order->taxincluded(defined($self->order->$cv_method->taxincluded_checked)
+                              ? $self->order->$cv_method->taxincluded_checked
+                              : $::myconfig{taxincluded_checked});
+  }
+
   $self->order->payment_id($self->order->$cv_method->payment_id);
   $self->order->delivery_term_id($self->order->$cv_method->delivery_term_id);
 
+  $self->_recalc();
+
   $self->js
-    ->replaceWith('#order_cp_id',     $self->build_contact_select)
-    ->replaceWith('#order_shipto_id', $self->build_shipto_select)
-    ->val('#order_taxzone_id', $self->order->taxzone_id)
-    ->val('#order_payment_id',       $self->order->payment_id)
-    ->val('#order_delivery_term_id', $self->order->delivery_term_id)
-    ->val('#order_intnotes',         $self->order->$cv_method->notes)
-    ->focus('#order_' . $self->cv . '_id')
-    ->render($self);
+    ->replaceWith('#order_cp_id',            $self->build_contact_select)
+    ->replaceWith('#order_shipto_id',        $self->build_shipto_select)
+    ->val(        '#order_taxzone_id',       $self->order->taxzone_id)
+    ->val(        '#order_taxincluded',      $self->order->taxincluded)
+    ->val(        '#order_payment_id',       $self->order->payment_id)
+    ->val(        '#order_delivery_term_id', $self->order->delivery_term_id)
+    ->val(        '#order_intnotes',         $self->order->$cv_method->notes)
+    ->focus(      '#order_' . $self->cv . '_id');
+
+  $self->_js_redisplay_amounts_and_taxes;
+  $self->js->render();
 }
 
 sub action_add_item {
@@ -220,6 +233,18 @@ sub _js_redisplay_linetotals {
 sub _js_redisplay_amounts_and_taxes {
   my ($self) = @_;
 
+  if (scalar @{ $self->{taxes} }) {
+    $self->js->show('#taxincluded_row_id');
+  } else {
+    $self->js->hide('#taxincluded_row_id');
+  }
+
+  if ($self->order->taxincluded) {
+    $self->js->hide('#subtotal_row_id');
+  } else {
+    $self->js->show('#subtotal_row_id');
+  }
+
   $self->js
     ->html('#netamount_id', $::form->format_amount(\%::myconfig, $self->order->netamount, -2))
     ->html('#amount_id',    $::form->format_amount(\%::myconfig, $self->order->amount,    -2))
@@ -303,7 +328,7 @@ sub build_tax_rows {
 
   my $rows_as_html;
   foreach my $tax (sort { $a->{tax}->rate cmp $b->{tax}->rate } @{ $self->{taxes} }) {
-    $rows_as_html .= $self->p->render('order/tabs/_tax_row', TAX => $tax);
+    $rows_as_html .= $self->p->render('order/tabs/_tax_row', TAX => $tax, TAXINCLUDED => $self->order->taxincluded);
   }
   return $rows_as_html;
 }
@@ -335,8 +360,11 @@ sub _recalc {
   $self->{taxes} = [];
   foreach my $tax_chart_id (keys %{ $pat{taxes} }) {
     my $tax = SL::DB::Manager::Tax->find_by(chart_id => $tax_chart_id);
-    push(@{ $self->{taxes} }, { amount => $pat{taxes}->{$tax_chart_id},
-                                tax    => $tax });
+
+    my @amount_keys = grep { $pat{amounts}->{$_}->{tax_id} == $tax->id } keys %{ $pat{amounts} };
+    push(@{ $self->{taxes} }, { amount    => $pat{taxes}->{$tax_chart_id},
+                                netamount => $pat{amounts}->{$amount_keys[0]}->{amount},
+                                tax       => $tax });
   }
 
   pairwise { $a->{linetotal} = $b->{linetotal} } @{$self->order->items}, @{$pat{items}};
index 010da3f..aa09a3a 100644 (file)
@@ -4,6 +4,12 @@
 [%- USE L %]
 
 <tr class="tax_row">
-  <th align="right">[%- TAX.tax.taxdescription %] [% TAX.tax.rate_as_percent %]%</th>
+  <th align="right">[%- IF TAXINCLUDED %][%- 'Including' | $T8 %]&nbsp;[%- END %][%- TAX.tax.taxdescription %] [% TAX.tax.rate_as_percent %]%</th>
   <td align="right">[%- LxERP.format_amount(TAX.amount, 2, 0) %]</td>
 </tr>
+[%- IF TAXINCLUDED %]
+<tr class="tax_row">
+  <th align="right">[%- 'Net amount' | $T8 %]</th>
+  <td align="right">[%- LxERP.format_amount(TAX.netamount, 2, 0) %]</td>
+</tr>
+[%- END%]
index 8d1a257..3d75071 100644 (file)
@@ -38,7 +38,7 @@
 
           <tr>
             <th align="right">[% 'Steuersatz' | $T8 %]</th>
-            <td>[% L.select_tag('order.taxzone_id', SELF.all_taxzones, default=SELF.order.taxzone_id, title_key='description', style='width: 300px') %]</td>
+            <td>[% L.select_tag('order.taxzone_id', SELF.all_taxzones, default=SELF.order.taxzone_id, title_key='description', style='width: 300px', class='recalc') %]</td>
           </tr>
 
           <tr>
 
             <td align="right">
               <table>
-                [%- IF NOT taxincluded %]
-                <tr>
+                <tr id="taxincluded_row_id" [%- IF !SELF.taxes.size %]style="display:none"[%- END %]>
+                  <td align=right colspan="2">
+                    <label for="order.taxincluded"><b>[% 'Tax Included' | $T8 %]</b></label>
+                    [% L.yes_no_tag('order.taxincluded', SELF.order.taxincluded, class='recalc') %]
+                  </td>
+                </tr>
+
+                <tr id="subtotal_row_id" [%- IF SELF.order.taxincluded %]style="display:none"[%- END %]>
                   <th align="right">[%- 'Subtotal' | $T8 %]</th>
                   <td align="right">
                     [%- L.div_tag(SELF.order.netamount_as_number, id='netamount_id') %]
                   </td>
                 </tr>
-                [%- END %]
                 [%- FOREACH tax = SELF.taxes %]
-                  [%- PROCESS order/tabs/_tax_row.html TAX=tax %]
+                  [%- PROCESS order/tabs/_tax_row.html TAX=tax TAXINCLUDED=SELF.order.taxincluded %]
                 [%- END %]
                 <tr id="amount_row_id">
                   <th align="right">[%- 'Total' | $T8 %]</th>
 
 <script type='text/javascript'>
 function reload_cv_dependend_selections() {
-  $.post("controller.pl", { 'action': 'Order/customer_vendor_changed',
-                            'cv_id':  function(){ return $('#order_[%- cv_id%]').val() },
-                            'type':   function(){ return $('#type').val() },
-                          }, kivi.eval_json_result);
+  var data = $('#order_form').serialize();
+  data += '&action=Order/customer_vendor_changed';
+
+  $.post("controller.pl", data, kivi.eval_json_result);
 }
 
 function add_item() {