X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=bin%2Fmozilla%2Fwh.pl;h=3aff194e96f7661e3053177f0e85bffa6c6f4791;hb=748a66d0b3a44c651c0d3744fa0372b3a9074ecf;hp=26986c7237fa83ccd1fce498d772ee354aef2860;hpb=79b75e0750039323bc8a931c653c6b0964f35c0e;p=kivitendo-erp.git diff --git a/bin/mozilla/wh.pl b/bin/mozilla/wh.pl index 26986c723..3aff194e9 100644 --- a/bin/mozilla/wh.pl +++ b/bin/mozilla/wh.pl @@ -45,13 +45,12 @@ use SL::Helper::Flash qw(flash_later); use SL::IC; use SL::WH; use SL::OE; -# use SL::Helper::Inventory qw(produce_assembly); +use SL::Helper::Inventory qw(produce_assembly); use SL::Locale::String qw(t8); use SL::ReportGenerator; use SL::Presenter::Tag qw(checkbox_tag); use SL::Presenter::Part; -use SL::DB::AssemblyInventoryPart; use SL::DB::Part; use Data::Dumper; @@ -372,13 +371,6 @@ sub transfer_stock_get_partunit { $main::lxdebug->leave_sub(); } -# vorüberlegung jb 22.2.2009 -# wir benötigen für diese funktion, die anzahl die vom erzeugnis hergestellt werden soll. vielleicht direkt per js fehleingaben verhindern? -# ferner dann nochmal mit check_asssembly_max_create gegenprüfen und dann transaktionssicher wegbuchen. -# wir brauchen eine hilfsfunktion, die nee. brauchen wir nicht. der algorithmus läuft genau wie bei check max_create, nur dass hier auch eine lagerbewegung (verbraucht) stattfindet -# Manko ist derzeit noch, dass unterschiedliche Lagerplätze, bzw. das Quelllager an sich nicht ausgewählt werden können. -# Laut Absprache in KW11 09 übernimmt mb hier den rest im April ... jb 18.3.09 - sub create_assembly { $main::lxdebug->enter_sub(); @@ -390,44 +382,31 @@ sub create_assembly { if ($form->{qty} <= 0) { $form->show_generic_error($locale->text('Invalid quantity.')); } - # TODO Es wäre schön, hier schon die maximale Anzahl der zu fertigenden Erzeugnisse zu haben - #else { if ($form->{qty} > $maxcreate) { #s.o. - # $form->show_generic_error($locale->text('Can not create that quantity with current stock')); - # $form->show_generic_error('Maximale Stückzahl' . $maxcreate); - # } - # } - if (!$form->{warehouse_id} || !$form->{bin_id}) { $form->error($locale->text('The warehouse or the bin is missing.')); } + # need part and bin object + my ($bin, $assembly); + $assembly = SL::DB::Manager::Part->find_by(id => $form->{parts_id}, part_type => 'assembly'); + $form->show_generic_error($locale->text('Invalid assembly')) unless ref $assembly eq 'SL::DB::Part'; + + $bin = SL::DB::Manager::Bin->find_by(id => $form->{bin_id}); + $form->show_generic_error($locale->text('Invalid bin')) unless ref $bin eq 'SL::DB::Bin'; if (!$::instance_conf->get_show_bestbefore) { - $form->{bestbefore} = ''; + $form->{bestbefore} = ''; } - # WIESO war das nicht vorher schon ein %HASH?? ein hash ist ein hash! das hat mich mehr als eine Stunde gekostet herauszufinden. grr. jb 3.3.2009 - # Anm. jb 18.3. vielleicht auch nur meine unwissenheit in perl-datenstrukturen - my %TRANSFER = ( - 'transfer_type' => 'assembly', - 'login' => $::myconfig{login}, - 'dst_warehouse_id' => $form->{warehouse_id}, - 'dst_bin_id' => $form->{bin_id}, - 'chargenumber' => $form->{chargenumber}, - 'bestbefore' => $form->{bestbefore}, - 'assembly_id' => $form->{parts_id}, - 'qty' => $form->{qty}, - 'unit' => $form->{unit}, - 'comment' => $form->{comment} + produce_assembly( + part => $assembly, # target assembly + qty => $form->{qty}, # qty + auto_allocate => 1, + bin => $bin, # needed unless a global standard target is configured + chargenumber => $form->{chargenumber}, # optional + bestbefore => $form->{bestbefore}, + comment => $form->{comment}, # optional ); - my $ret = WH->transfer_assembly (%TRANSFER); - # Frage: Ich pack in den return-wert auch gleich die Fehlermeldung. Irgendwelche Nummern als Fehlerkonstanten definieren find ich auch nicht besonders schick... - # Ideen? jb 18.3.09 - if ($ret ne "1"){ - # Die locale-Funktion kann keine Double-Quotes escapen, deswegen hier erstmal so (ein wahrscheinlich immerwährender Hotfix) s.a. Frage davor jb 25.4.09 - $form->show_generic_error($ret); - } - delete @{$form}{qw(parts_id partnumber description qty unit chargenumber bestbefore comment)}; $form->{saved_message} = $locale->text('The assembly has been created.'); @@ -560,37 +539,18 @@ sub disassemble_assembly { croak("No assembly ids") unless scalar @{ $form->{ids}} > 0; - # fail safe, only allow disassemble in certain intervals - my $undo_date = DateTime->today->subtract(days => $::instance_conf->get_undo_transfer_interval); + # everything in one transaction + my $db = SL::DB::Inventory->new->db; + $db->with_transaction(sub { - foreach my $assembly_id (@{ $::form->{ids}} ) { - my $assembly_parts; - $assembly_parts = SL::DB::Manager::AssemblyInventoryPart->get_all(where => [ inventory_assembly_id => $assembly_id ]); - $form->show_generic_error(t8('No relations found for #1', $assembly_id)) unless $assembly_parts; - # check first entry for insertdate - # everything in one transaction - my $db = SL::DB::Inventory->new->db; - $db->with_transaction(sub { - my ($assembly_entry, $part_entry); - foreach my $assembly_part (@{ $assembly_parts }) { - die("No valid entry found") unless (ref($assembly_part) eq 'SL::DB::AssemblyInventoryPart'); - # fail safe undo date - die("Invalid time interval") unless DateTime->compare($assembly_part->itime, $undo_date); - - $assembly_entry //= $assembly_part->assembly; - $part_entry = $assembly_part->part; - $assembly_part->delete; - $part_entry->delete; - } - flash_later('info', t8("Disassembly successful for #1", $assembly_entry->part->partnumber)); - - $assembly_entry->delete; - - 1; + foreach my $trans_id (@{ $::form->{ids}} ) { + SL::DB::Manager::Inventory->delete_all(where => [ trans_id => $trans_id ]); + flash_later('info', t8("Disassembly successful for trans_id #1", $trans_id)); + } - }) || die t8('error while disassembling assembly #1 : #2', $assembly_id) . $db->error . "\n"; + 1; + }) || die t8('error while disassembling for trans_ids #1 : #2', $form->{ids}) . $db->error . "\n"; - } $main::lxdebug->leave_sub(); $form->redirect; } @@ -670,7 +630,10 @@ sub generate_journal { $last_nr = $pages->{per_page}; } + my $old_l_trans_id = $form->{l_trans_id}; my @contents = WH->get_warehouse_journal(%filter); + $form->{l_trans_id} = $old_l_trans_id; + # get maxcount if (!$form->{maxrows}) { $form->{maxrows} = scalar @contents ; @@ -752,7 +715,7 @@ sub generate_journal { ); my $idx = 0; - + my $undo_date = DateTime->today->subtract(days => $::instance_conf->get_undo_transfer_interval); foreach my $entry (@contents) { $entry->{type_and_classific} = SL::Presenter::Part::type_abbreviation($entry->{part_type}) . SL::Presenter::Part::classification_abbreviation($entry->{classification_id}); @@ -768,8 +731,12 @@ sub generate_journal { }; } - $row->{ids}->{raw_data} = checkbox_tag("ids[]", value => $entry->{id}, "data-checkall" => 1) if $entry->{assembled}; - + if ($entry->{assembled}) { + my $insertdate = DateTime->from_kivitendo($entry->{shippingdate}); + if (ref $undo_date eq 'DateTime' && ref $insertdate eq 'DateTime' && $insertdate > $undo_date) { + $row->{ids}->{raw_data} = checkbox_tag("ids[]", value => $entry->{trans_id}, "data-checkall" => 1); + } + } $row->{trans_type}->{raw_data} = $entry->{trans_type}; if ($form->{l_oe_id}) { $row->{oe_id}->{data} = ''; @@ -850,8 +817,6 @@ sub generate_report { my %myconfig = %main::myconfig; my $locale = $main::locale; - my $cvar_configs = CVar->get_configs('module' => 'IC'); - $form->{title} = $locale->text("Report about warehouse contents"); $form->{sort} ||= 'partnumber'; my $sort_col = $form->{sort}; @@ -927,6 +892,7 @@ sub generate_report { my $report = SL::ReportGenerator->new(\%myconfig, $form); + my $cvar_configs = CVar->get_configs('module' => 'IC'); my @includeable_custom_variables = grep { $_->{includeable} } @{ $cvar_configs }; push @columns, map { "cvar_$_->{name}" } @includeable_custom_variables; @@ -950,10 +916,11 @@ sub generate_report { 'list_price' => { 'text' => $locale->text('List Price'), }, ); + my %column_defs_cvars = map { +"cvar_$_->{name}" => { 'text' => $_->{description} } } @includeable_custom_variables; + %column_defs = (%column_defs, %column_defs_cvars); + my $href = build_std_url('action=generate_report', grep { $form->{$_} } @hidden_variables); $href .= "&maxrows=".$form->{maxrows}; - my %column_defs_cvars = map { +"cvar_$_->{name}" => { 'text' => $_->{description} } } @includeable_custom_variables; - %column_defs = (%column_defs, %column_defs_cvars); map { $column_defs{$_}->{link} = $href . "&page=".$page."&sort=${_}&order=" . Q($_ eq $sort_col ? 1 - $form->{order} : $form->{order}) } @columns;