]> wagnertech.de Git - mfinanz.git/blobdiff - SL/IC.pm
Ware/Erzeugnis/Dienstleistung per parts.part_type unterscheiden 2
[mfinanz.git] / SL / IC.pm
index 09b9bdbca9f0ef3f28fdd003a227a19c878a3cf3..942831bfa34124d88a313d184026bf55591794cc 100644 (file)
--- a/SL/IC.pm
+++ b/SL/IC.pm
@@ -43,6 +43,7 @@ use SL::DBUtils;
 use SL::HTML::Restrict;
 use SL::TransNumber;
 use SL::Util qw(trim);
+use SL::DB;
 
 use strict;
 
@@ -77,10 +78,10 @@ sub get_part {
   $form->{lastmtime} = $form->{mtime};
   $form->{onhand} *= 1;
 
+  die "part needs a part_type" unless $form->{part_type}; # TODO from part_type enum conversion
   # part or service item
-  $form->{item} = ($form->{inventory_accno}) ? 'part' : 'service';
-  if ($form->{assembly}) {
-    $form->{item} = 'assembly';
+  $form->{item} = $form->{part_type};
+  if ($form->{item} eq 'assembly') {
 
     # retrieve assembly items
     $query =
@@ -224,12 +225,20 @@ sub retrieve_buchungsgruppen {
 }
 
 sub save {
+  my ($self, $myconfig, $form) = @_;
   $main::lxdebug->enter_sub();
 
+  my $rc = SL::DB->client->with_transaction(\&_save, $self, $myconfig, $form);
+
+  $main::lxdebug->leave_sub();
+  return $rc;
+}
+
+sub _save {
   my ($self, $myconfig, $form) = @_;
   my @values;
-  # connect to database, turn off AutoCommit
-  my $dbh = $form->get_standard_dbh;
+
+  my $dbh = SL::DB->client->dbh;
   my $restricter = SL::HTML::Restrict->create;
 
   # save the part
@@ -247,7 +256,6 @@ sub save {
 
   my $makemodel = ($form->{make_1} || $form->{model_1} || ($form->{makemodel_rows} > 1)) ? 1 : 0;
 
-  $form->{assembly} = ($form->{item} eq 'assembly') ? 1 : 0;
 
   my ($query, $sth);
 
@@ -291,7 +299,7 @@ sub save {
     $form->{partnumber} ||= $trans_number->create_unique;
 
     ($form->{id}) = selectrow_query($form, $dbh, qq|SELECT nextval('id')|);
-    do_query($form, $dbh, qq|INSERT INTO parts (id, partnumber, unit) VALUES (?, ?, ?)|, $form->{id}, $form->{partnumber}, $form->{unit});
+    do_query($form, $dbh, qq|INSERT INTO parts (id, partnumber, unit, part_type) VALUES (?, ?, ?, ?)|, $form->{id}, $form->{partnumber}, $form->{unit}, $form->{item});
 
     $form->{orphaned} = 1;
   }
@@ -327,7 +335,6 @@ sub save {
          partnumber = ?,
          description = ?,
          makemodel = ?,
-         assembly = ?,
          listprice = ?,
          sellprice = ?,
          lastcost = ?,
@@ -353,6 +360,7 @@ sub save {
          has_sernumber = ?,
          not_discountable = ?,
          microfiche = ?,
+         part_type = ?,
          partsgroup_id = ?,
          price_factor_id = ?
          $priceupdate
@@ -360,7 +368,6 @@ sub save {
   @values = ($form->{partnumber},
              $form->{description},
              $makemodel ? 't' : 'f',
-             $form->{assembly} ? 't' : 'f',
              $form->{listprice},
              $form->{sellprice},
              $form->{lastcost},
@@ -384,6 +391,7 @@ sub save {
              $form->{has_sernumber} ? 't' : 'f',
              $form->{not_discountable} ? 't' : 'f',
              $form->{microfiche},
+             $form->{item},
              conv_i($partsgroup_id),
              conv_i($form->{price_factor_id}),
              conv_i($form->{id})
@@ -535,12 +543,7 @@ sub save {
 SQL
   do_query($form, $dbh, $query, ($form->{id}) x 2);
 
-  # commit
-  my $rc = $dbh->commit;
-
-  $main::lxdebug->leave_sub();
-
-  return $rc;
+  return 1;
 }
 
 sub retrieve_assemblies {
@@ -572,7 +575,7 @@ sub retrieve_assemblies {
           FROM parts p2, assembly a
           WHERE (p2.id = a.parts_id) AND (a.id = p.id)) AS inventory
        FROM parts p
-       WHERE NOT p.obsolete AND p.assembly $where|;
+       WHERE NOT p.obsolete AND p.part_type = 'assembly' $where|;
 
   $form->{assembly_items} = selectall_hashref_query($form, $dbh, $query, @values);
 
@@ -580,26 +583,27 @@ sub retrieve_assemblies {
 }
 
 sub delete {
+  my ($self, $myconfig, $form) = @_;
   $main::lxdebug->enter_sub();
 
+  my $rc = SL::DB->client->with_transaction(\&_delete, $self, $myconfig, $form);
+
+  $main::lxdebug->leave_sub();
+  return $rc;
+}
+
+sub _delete {
   my ($self, $myconfig, $form) = @_;
   my @values = (conv_i($form->{id}));
-  # connect to database, turn off AutoCommit
-  my $dbh = $form->get_standard_dbh;
 
   my %columns = ( "assembly" => "id", "parts" => "id" );
 
   for my $table (qw(prices makemodel inventory assembly translation parts)) {
     my $column = defined($columns{$table}) ? $columns{$table} : "parts_id";
-    do_query($form, $dbh, qq|DELETE FROM $table WHERE $column = ?|, @values);
+    do_query($form, SL::DB->client->dbh, qq|DELETE FROM $table WHERE $column = ?|, @values);
   }
 
-  # commit
-  my $rc = $dbh->commit;
-
-  $main::lxdebug->leave_sub();
-
-  return $rc;
+  return 1;
 }
 
 sub assembly_item {
@@ -637,9 +641,6 @@ sub assembly_item {
     $where .= qq| ORDER BY p.description|;
   }
 
-  # connect to database
-  my $dbh = $form->get_standard_dbh;
-
   my $query =
     qq|SELECT p.id, p.partnumber, p.description, p.sellprice,
        p.weight, p.onhand, p.unit, pg.partsgroup, p.lastcost,
@@ -648,7 +649,7 @@ sub assembly_item {
        LEFT JOIN partsgroup pg ON (p.partsgroup_id = pg.id)
        LEFT JOIN price_factors pfac ON pfac.id = p.price_factor_id
        WHERE $where|;
-  $form->{item_list} = selectall_hashref_query($form, $dbh, $query, @values);
+  $form->{item_list} = selectall_hashref_query($form, SL::DB->client->dbh, $query, @values);
 
   $main::lxdebug->leave_sub();
 }
@@ -891,10 +892,9 @@ sub all_parts {
   }
 
   for ($form->{searchitems}) {
-    push @where_tokens, 'p.inventory_accno_id > 0'     if /part/;
-    push @where_tokens, 'p.inventory_accno_id IS NULL' if /service/;
-    push @where_tokens, 'NOT p.assembly'               if /service/;
-    push @where_tokens, '    p.assembly'               if /assembly/;
+    push @where_tokens, "p.part_type = 'part'"     if /part/;
+    push @where_tokens, "p.part_type = 'service'"  if /service/;
+    push @where_tokens, "p.part_type = 'assembly'" if /assembly/;
   }
 
   for ($form->{itemstatus}) {
@@ -1224,15 +1224,23 @@ sub get_num_matches_for_priceupdate {
 }
 
 sub update_prices {
+  my ($self, $myconfig, $form) = @_;
   $main::lxdebug->enter_sub();
 
+  my $num_updated = SL::DB->client->with_transaction(\&_update_prices, $self, $myconfig, $form);
+
+  $main::lxdebug->leave_sub();
+  return $num_updated;
+}
+
+sub _update_prices {
   my ($self, $myconfig, $form) = @_;
 
   my ($where, @where_values) = $self->_create_filter_for_priceupdate();
   my $num_updated = 0;
 
   # connect to database
-  my $dbh = $form->get_standard_dbh;
+  my $dbh = SL::DB->client->dbh;
 
   for my $column (qw(sellprice listprice)) {
     next if ($form->{$column} eq "");
@@ -1292,10 +1300,6 @@ sub update_prices {
   $sth_add->finish();
   $sth_multiply->finish();
 
-  my $rc= $dbh->commit;
-
-  $main::lxdebug->leave_sub();
-
   return $num_updated;
 }