]> wagnertech.de Git - kivitendo-erp.git/commitdiff
Preisgruppen verbessert
authorG. Richardson <information@lx-office-hosting.de>
Wed, 19 Jan 2011 09:47:17 +0000 (10:47 +0100)
committerG. Richardson <information@lx-office-hosting.de>
Wed, 19 Jan 2011 09:49:42 +0000 (10:49 +0100)
Bei Hinzufügen neuer Artikel wird die Preisgruppe des Kunden berücksichtigt
Bei Wechseln von Preisgruppen wird der Preisgruppenpreis gesetzt

Laden von alten Angeboten/Aufträgen/Rechnungen funktioniert, Preisgruppen
werden korrekt in DB gespeichert

Workflow getestet:
     Angebot -> Auftrag -> Rechnung
     Angebot -> Rechnung

Workflow mit Lieferschein dazwischen funktioniert nicht

Das Verhalten, ob direkt nach Laden/Speichern/Workflow alle
Preisgruppenoptionen im Dropdownmenü angezeigt werden, oder nur die gewählte,
ist nicht in allen Masken einheitlich. Spätestens nach einem Erneuern stehen
aber alle Preisgruppen wieder zur Verfügung.

Ändert sich der Preisgruppenpreis einer Ware wird beim Aufrufen alter
Rechnungen nicht mehr der neue Preisgruppenpreis, sondern der korrekte Wert aus
der DB angezeigt. (Bug 1426)

Bug 1206 trifft auch nicht mehr zu.

SL/IS.pm
bin/mozilla/invoice_io.pl
bin/mozilla/io.pl
bin/mozilla/is.pl
bin/mozilla/oe.pl

index 3b031bd96f33c5ca3ea225715452eb7691324097..666d8bc043c1e632c97d9c5a195ccae831eb666d 100644 (file)
--- a/SL/IS.pm
+++ b/SL/IS.pm
@@ -1997,6 +1997,10 @@ sub get_pricegroups_for_parts {
     my ($price, $selectedpricegroup_id) = split(/--/, $form->{"sellprice_pg_$i"});
 
     my $pricegroup_old = $form->{"pricegroup_old_$i"};
+
+    # sellprice has format 13,0000 or 0,00000, can't check for 0 numerically
+    my $sellprice = $form->{"sellprice_$i"};
+    my $pricegroup_id = $form->{"pricegroup_id_$i"};
     $form->{"new_pricegroup_$i"} = $selectedpricegroup_id;
     $form->{"old_pricegroup_$i"} = $pricegroup_old;
 
@@ -2075,10 +2079,27 @@ sub get_pricegroups_for_parts {
       $pkr->{price} = $form->format_amount($myconfig, $pkr->{price}, 5);
 
       if ($selectedpricegroup_id eq undef) {
-        if ($pkr->{pricegroup_id} eq $form->{customer_klass}) {
-
+        # new entries in article list, either old invoice was loaded (edit) or a new article was added
+        # Case A: open old invoice, no pricegroup selected
+        # Case B: add new article to invoice, no pricegroup selected
+
+        # to distinguish case A and B the variable pricegroup_id_$i is used
+        # for new articles this variable isn't defined, for loaded articles it is
+        # sellprice can't be used, as it already has 0,00 set
+        
+        if ($pkr->{pricegroup_id} eq $form->{"pricegroup_id_$i"} and defined $form->{"pricegroup_id_$i"}) {
+          # Case A
           $pkr->{selected}  = ' selected';
 
+        } elsif ($pkr->{pricegroup_id} eq $form->{customer_klass} 
+                 and not defined $form->{"pricegroup_id_$i"} 
+                 and $pkr->{price} != 0    # only use customer pricegroup price if it has a value, else use default_sellprice
+                                           # for the case where pricegroup prices haven't been set
+                ) {
+          # Case B: use default pricegroup of customer
+
+          $pkr->{selected}  = ' selected'; # unless $form->{selected};
+
           # no customer pricesgroup set
           if ($pkr->{price} == $pkr->{default_sellprice}) {
 
@@ -2087,29 +2108,34 @@ sub get_pricegroups_for_parts {
           } else {
 
 # this sub should not set anything and only return. --sschoeling, 20090506
-#            $form->{"sellprice_$i"} = $pkr->{price};
+# is this correct? put in again... -- grichardson 20110119
+            $form->{"sellprice_$i"} = $pkr->{price};
           }
 
-        } elsif ($pkr->{price} == $pkr->{default_sellprice}) {
+        } elsif ($pkr->{price} == $pkr->{default_sellprice} and $pkr->{default_sellprice} != 0) {
           $pkr->{price}    = $form->{"sellprice_$i"};
           $pkr->{selected} = ' selected';
         }
-      } else {
+      }
+
+      # existing article: pricegroup or price changed
+      if ($selectedpricegroup_id or $selectedpricegroup_id == 0) {
         if ($selectedpricegroup_id ne $pricegroup_old) {
+          # pricegroup has changed
           if ($pkr->{pricegroup_id} eq $selectedpricegroup_id) {
             $pkr->{selected}  = ' selected';
           }
-        } elsif (    (   $form->parse_amount($myconfig, $price_new)
-                      != $form->parse_amount($myconfig, $form->{"sellprice_$i"}))
-                 and ($price_new ne 0)) {
+        } elsif (($price_new != $form->{"sellprice_$i"}) and ($price_new ne 0) and defined $price_new) {
+          # sellprice has changed
+          # when loading existing invoices $price_new is NULL
           if ($pkr->{pricegroup_id} == 0) {
             $pkr->{price}     = $form->{"sellprice_$i"};
             $pkr->{selected}  = ' selected';
           }
         } elsif ($pkr->{pricegroup_id} eq $selectedpricegroup_id) {
+          # neither sellprice nor pricegroup changed
           $pkr->{selected}  = ' selected';
-          if (    ($pkr->{pricegroup_id} == 0)
-              and ($pkr->{price} == $form->{"sellprice_$i"})) {
+          if (    ($pkr->{pricegroup_id} == 0) and ($pkr->{price} == $form->{"sellprice_$i"})) {
             # $pkr->{price}                         = $form->{"sellprice_$i"};
           } else {
             $pkr->{price} = $form->{"sellprice_$i"};
index 8c803fb4d87b2956a1aa803fa6958bbebd10e209..952768611b02b2e4c89447d1c8db3cfd2b9fcd09 100644 (file)
@@ -126,7 +126,8 @@ sub set_pricegroup {
         if ($item->{selected} && ($pricegroup_id != 0)) {
           $form->{"pricegroup_old_$j"} = $pricegroup_id;
           $form->{"price_new_$j"}      = $price;
-          $form->{"sellprice_$j"}      = $price;
+          # edit: don't change the sellprice here
+          # $form->{"sellprice_$j"}      = $price;   # this must only be updated for existing articles, not new ones
         }
         if ($pricegroup_id == 0) {
           $form->{"price_new_$j"} = $form->{"sellprice_$j"};
index 926098188f923d54b2e0f4418cf59a6d9107dde1..3ec65da214e5073272f543aaf484c38440cd4703 100644 (file)
@@ -288,9 +288,11 @@ sub display_row {
       # for last row and report
       # set pricegroup drop down list from report menu
       if ($form->{"sellprice_$i"} != 0) {
+        # remember the pricegroup_id in pricegroup_old
+        # but don't overwrite it
         $form->{"pricegroup_old_$i"} = $form->{"pricegroup_id_$i"};
         my $default_option           = $form->{"sellprice_$i"}.'--'.$form->{"pricegroup_id_$i"};
-        $column_data{sellprice_pg}   = NTI($cgi->popup_menu("sellpricepg_$i", [ $default_option ], $default_option, { $default_option => $form->{"pricegroup_$i"} || '' }));
+        $column_data{sellprice_pg}   = NTI($cgi->popup_menu("sellprice_pg_$i", [ $default_option ], $default_option, { $default_option => $form->{"pricegroup_$i"} || '' }));
       } else {
         $column_data{sellprice_pg} = qq|&nbsp;|;
       }
index aeba18777ae74217d3ad8213400bd6ec215696ce..740002bee183fcc710e162cebcd2aba3ed753d01 100644 (file)
@@ -266,7 +266,13 @@ sub prepare_invoice {
 
     # get pricegroups for parts
     IS->get_pricegroups_for_parts(\%myconfig, \%$form);
-    set_pricegroup($_) for 1 .. $form->{rowcount};
+
+    # Problem: set_pricegroup resets the sellprice of old invoices to the price
+    # currently defined in the pricegroup, which is a problem if the price has
+    # changed, as the old invoice gets the new price
+    # set_pricegroup must never be called, when an old invoice is initially loaded
+
+    # set_pricegroup($_) for 1 .. $form->{rowcount};
   }
   $main::lxdebug->leave_sub();
 }
@@ -780,6 +786,11 @@ sub use_as_template {
   $form->{paidaccounts} = 1;
   $form->{rowcount}--;
   $form->{invdate} = $form->current_date(\%myconfig);
+
+  # remember pricegroups for "use as template"
+  IS->get_pricegroups_for_parts(\%myconfig, \%$form);
+  set_pricegroup($_) for 1 .. $form->{rowcount};
+
   &display_form;
 
   $main::lxdebug->leave_sub();
index b7d86538c5280e378a625be347aa5b6654dcdff7..0e469d8d3f8dee1c56aff4eaef9bbf630516925d 100644 (file)
@@ -1419,6 +1419,10 @@ sub invoice {
 
   }
 
+  #  show pricegroup in newly loaded invoice when creating invoice from quotation/order
+  IS->get_pricegroups_for_parts(\%myconfig, \%$form);
+  set_pricegroup($_) for 1 .. $form->{rowcount};
+
   &display_form;
 
   $main::lxdebug->leave_sub();