+##########################
+# get pricegroups from database
+# build up selected pricegroup
+# if an exchange rate - change price
+# for each part
+#
+sub get_pricegroups_for_parts {
+
+ $main::lxdebug->enter_sub();
+
+ my ($self, $myconfig, $form) = @_;
+
+ my $dbh = $form->dbconnect($myconfig);
+
+ my $i = 1;
+ my $id = 0;
+ my $dimension_units = AM->retrieve_units($myconfig, $form, "dimension");
+ my $service_units = AM->retrieve_units($myconfig, $form, "service");
+ my $all_units = AM->retrieve_units($myconfig, $form);
+ while (($form->{"id_$i"}) or ($form->{"new_id_$i"})) {
+
+ $id = $form->{"id_$i"};
+
+ if (!($form->{"id_$i"}) and $form->{"new_id_$i"}) {
+
+ $id = $form->{"new_id_$i"};
+ }
+
+ ($price, $selectedpricegroup_id) = split /--/,
+ $form->{"sellprice_drag_$i"};
+
+ $pricegroup_old = $form->{"pricegroup_old_$i"};
+ $form->{"new_pricegroup_$i"} = $selectedpricegroup_id;
+ $form->{"old_pricegroup_$i"} = $pricegroup_old;
+ $price_new = $form->{"price_new_$i"};
+
+ $price_old = $form->{"price_old_$i"};
+ $query =
+ qq|SELECT pricegroup_id, (SELECT p.sellprice from parts p where p.id = $id) as default_sellprice,(SELECT pg.pricegroup FROM pricegroup pg WHERE id=pricegroup_id) AS pricegroup, price, '' AS selected FROM prices WHERE parts_id = $id UNION SELECT 0 as pricegroup_id,(SELECT sellprice FROM parts WHERE id=$id) as default_sellprice,'' as pricegroup, (SELECT DISTINCT sellprice from parts where id=$id) as price, 'selected' AS selected from prices ORDER BY pricegroup|;
+
+ $pkq = $dbh->prepare($query);
+ $pkq->execute || $form->dberror($query);
+ if (!$form->{"unit_old_$i"}) {
+ # Neue Ware aus der Datenbank. In diesem Fall ist unit_$i die
+ # Einheit, wie sie in den Stammdaten hinterlegt wurde.
+ # Es sollte also angenommen werden, dass diese ausgewaehlt war.
+ $form->{"unit_old_$i"} = $form->{"unit_$i"};
+ }
+
+ # Die zuletzt ausgewaehlte mit der aktuell ausgewaehlten Einheit
+ # vergleichen und bei Unterschied den Preis entsprechend umrechnen.
+ $form->{"selected_unit_$i"} = $form->{"unit_$i"} unless ($form->{"selected_unit_$i"});
+
+ my $check_units = $form->{"inventory_accno_$i"} ? $dimension_units : $service_units;
+ if (!$check_units->{$form->{"selected_unit_$i"}} ||
+ ($check_units->{$form->{"selected_unit_$i"}}->{"base_unit"} ne
+ $all_units->{$form->{"unit_old_$i"}}->{"base_unit"})) {
+ # Die ausgewaehlte Einheit ist fuer diesen Artikel nicht gueltig
+ # (z.B. Dimensionseinheit war ausgewaehlt, es handelt sich aber
+ # um eine Dienstleistung). Dann keinerlei Umrechnung vornehmen.
+ $form->{"unit_old_$i"} = $form->{"selected_unit_$i"} = $form->{"unit_$i"};
+ }
+ my $basefactor = 1;
+
+ if ($form->{"unit_old_$i"} ne $form->{"selected_unit_$i"}) {
+ if (defined($all_units->{$form->{"unit_old_$i"}}->{"factor"}) &&
+ $all_units->{$form->{"unit_old_$i"}}->{"factor"}) {
+ $basefactor = $all_units->{$form->{"selected_unit_$i"}}->{"factor"} /
+ $all_units->{$form->{"unit_old_$i"}}->{"factor"};
+ }
+ }
+ if (!$form->{"basefactor_$i"}) {
+ $form->{"basefactor_$i"} = 1;
+ }
+ while ($pkr = $pkq->fetchrow_hashref(NAME_lc)) {
+
+ # push @{ $form->{PRICES}{$id} }, $pkr;
+ #push @{ $form->{PRICES}{$i} }, $pkr;
+ $pkr->{id} = $id;
+ $pkr->{selected} = '';
+
+ # if there is an exchange rate change price
+ if (($form->{exchangerate} * 1) != 0) {
+
+ $pkr->{price} /= $form->{exchangerate};
+ }
+
+ $pkr->{price} *= $form->{"basefactor_$i"};
+
+ $pkr->{price} *= $basefactor;
+
+ $pkr->{price} = $form->format_amount($myconfig, $pkr->{price}, 5);
+
+ if ($selectedpricegroup_id eq undef) {
+ if ($pkr->{pricegroup_id} eq $form->{customer_klass}) {
+
+ $pkr->{selected} = ' selected';
+
+ # no customer pricesgroup set
+ if ($pkr->{price} == $pkr->{default_sellprice}) {
+
+ $pkr->{price} = $form->{"sellprice_$i"};
+
+ } else {
+
+ $form->{"sellprice_$i"} = $pkr->{price};
+ }
+
+ } else {
+ if ($pkr->{price} == $pkr->{default_sellprice}) {
+
+ $pkr->{price} = $form->{"sellprice_$i"};
+ $pkr->{selected} = ' selected';
+ }
+ }
+ }
+
+ if ($selectedpricegroup_id or $selectedpricegroup_id == 0) {
+ if ($selectedpricegroup_id ne $pricegroup_old) {
+ if ($pkr->{pricegroup_id} eq $selectedpricegroup_id) {
+ $pkr->{selected} = ' selected';
+ }
+ } else {
+ if (($price_new != $form->{"sellprice_$i"}) and ($price_new ne 0)) {
+ if ($pkr->{pricegroup_id} == 0) {
+ $pkr->{price} = $form->{"sellprice_$i"};
+ $pkr->{selected} = ' selected';
+ }
+ } else {
+ if ($pkr->{pricegroup_id} eq $selectedpricegroup_id) {
+ $pkr->{selected} = ' selected';
+ if ( ($pkr->{pricegroup_id} == 0)
+ and ($pkr->{price} == $form->{"sellprice_$i"})) {
+
+ # $pkr->{price} = $form->{"sellprice_$i"};
+ } else {
+ $pkr->{price} = $form->{"sellprice_$i"};
+ }
+ }
+ }
+ }
+ }
+ push @{ $form->{PRICES}{$i} }, $pkr;
+
+ }
+ $form->{"basefactor_$i"} *= $basefactor;
+
+ $i++;
+
+ $pkq->finish;
+ }
+
+ $dbh->disconnect;
+
+ $main::lxdebug->leave_sub();
+}
+