X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FWH.pm;h=91ac127076c94916f542da34254f284e522f8b0e;hb=684e84d8b410627473b2187c031f0d9143ea1a60;hp=97b5a41fe0290b54db174ded1111541e5595c6fd;hpb=4f63ea874f629459e1a73643595ab5e23e38e7f0;p=kivitendo-erp.git
diff --git a/SL/WH.pm b/SL/WH.pm
index 97b5a41fe..91ac12707 100644
--- a/SL/WH.pm
+++ b/SL/WH.pm
@@ -123,9 +123,6 @@ sub transfer {
$main::lxdebug->leave_sub();
}
-#
-# Testfall:
-#
sub transfer_assembly {
$main::lxdebug->enter_sub();
@@ -141,16 +138,25 @@ sub transfer_assembly {
my $dbh = $params{dbh} || $form->get_standard_dbh($myconfig);
-# Ablauferklärung
-#
-# ... Standard-Check oben Ende. Hier die eigentliche SQL-Abfrage
-# select parts_id,qty from assembly where id=1064;
-#
+ # Ablauferklärung
+ #
+ # ... Standard-Check oben Ende. Hier die eigentliche SQL-Abfrage
+ # select parts_id,qty from assembly where id=1064;
+ # Erweiterung für bug 935 am 23.4.09 - Erzeugnisse können Dienstleistungen enthalten, die ja nicht 'lagerbar' sind.
+ # select parts_id,qty from assembly inner join parts on assembly.parts_id = parts.id where assembly.id=1066 and inventory_accno_id IS NOT NULL;
+ # Erweiterung für bug 23.4.09 -2 Erzeugnisse in Erzeugnissen können nicht ausgelagert werden, wenn assembly nicht überprüft wird ...
+ # patch von joachim eingespielt 24.4.2009:
+ # my $query = qq|select parts_id,qty from assembly inner join parts
+ # on assembly.parts_id = parts.id where assembly.id = ? and
+ # (inventory_accno_id IS NOT NULL or parts.assembly = TRUE)|;
+
+
+ # my $query = qq|select parts_id,qty from assembly where id = ?|;
+ my $query = qq|select parts_id,qty from assembly inner join parts on assembly.parts_id = parts.id where assembly.id = ? and (inventory_accno_id IS NOT NULL or parts.assembly = TRUE)|;
- my $query = qq|select parts_id,qty from assembly where id = ?|;
my $sth_part_qty_assembly = prepare_execute_query($form, $dbh, $query, $params{assembly_id});
-# Hier wird das prepared Statement für die Schleife über alle Lagerplätze vorbereitet
+ # Hier wird das prepared Statement für die Schleife über alle Lagerplätze vorbereitet
my $transferPartSQL = qq|INSERT INTO inventory (parts_id, warehouse_id, bin_id, chargenumber, comment, employee_id, qty, trans_id, trans_type_id)
VALUES (?, ?, ?, ?, ?,(SELECT id FROM employee WHERE login = ?), ?, nextval('id'),
(SELECT id FROM transfer_type WHERE direction = 'out' AND description = 'used'))|;
@@ -167,17 +173,17 @@ sub transfer_assembly {
my $max_parts = get_max_qty_parts($self, parts_id => $currentPart_ID, warehouse_id => $params{dst_warehouse_id}); #$self angeben, damit die Standardkonvention (Name, Parameter) eingehalten wird
if ($partsQTY > $max_parts){
-
- # Gibt es hier ein Problem mit nicht "escapten" Zeichen?
- $kannNichtFertigen .= "Zum Fertigen fehlen:" . abs($partsQTY) . " Stueck der Ware:" . get_part_description($self, parts_id => $currentPart_ID) . ", um das Erzeugnis herzustellen.
"; # Konnte die Menge nicht mit der aktuellen Anzahl der Waren fertigen
+ # Gibt es hier ein Problem mit nicht "escapten" Zeichen? 25.4.09 Antwort: Ja. Aber erst wenn im Frontend die locales-Funktion aufgerufen wird
+ $kannNichtFertigen .= "Zum Fertigen fehlen:" . abs($partsQTY - $max_parts) . " Einheiten der Ware:" . get_part_description($self, parts_id => $currentPart_ID) . ", um das Erzeugnis herzustellen.
"; # Konnte die Menge nicht mit der aktuellen Anzahl der Waren fertigen
+ next; # die weiteren Ãberprüfungen sind unnötig
}
-# Eine kurze Vorabfrage, um den Lagerplatz und die Chargennummber zu bestimmen
-# Offen: Die Summe über alle Lagerplätze wird noch nicht gebildet
-# Gelöst: Wir haben vorher schon die Abfrage durchgeführt, ob wir fertigen können.
-# Noch besser gelöst: Wir laufen durch alle benötigten Waren zum Fertigen und geben eine Rückmeldung an den Benutzer was noch fehlt
-# und lösen den Rest dann so wie bei xplace im Barcode-Programm
-# S.a. Kommentar im bin/mozilla-Code mb übernimmt und macht das in ordentlich
+ # Eine kurze Vorabfrage, um den Lagerplatz und die Chargennummber zu bestimmen
+ # Offen: Die Summe über alle Lagerplätze wird noch nicht gebildet
+ # Gelöst: Wir haben vorher schon die Abfrage durchgeführt, ob wir fertigen können.
+ # Noch besser gelöst: Wir laufen durch alle benötigten Waren zum Fertigen und geben eine Rückmeldung an den Benutzer was noch fehlt
+ # und lösen den Rest dann so wie bei xplace im Barcode-Programm
+ # S.a. Kommentar im bin/mozilla-Code mb übernimmt und macht das in ordentlich
my $tempquery = qq|SELECT SUM(qty), bin_id, chargenumber FROM inventory WHERE warehouse_id = ? AND parts_id = ? GROUP BY bin_id, chargenumber having SUM(qty)>0|;
my $tempsth = prepare_execute_query($form, $dbh, $tempquery, $params{dst_warehouse_id}, $currentPart_ID);
@@ -295,11 +301,14 @@ sub get_warehouse_journal {
$filter{na} = '-' unless $filter{na};
# make order, search in $filter and $form
- $form->{sort} = $filter{sort} unless $form->{sort};
- $form->{order} = ($form->{sort} = 'itime') unless $form->{sort};
- $form->{sort} = 'itime' if $form->{sort} eq "date";
- $form->{order} = $filter{order} unless $form->{order};
- $form->{sort} .= (($form->{order}) ? " DESC" : " ASC");
+ my $sort_col = $form->{sort};
+ my $sort_order = $form->{order};
+
+ $sort_col = $filter{sort} unless $sort_col;
+ $sort_order = ($sort_col = 'itime') unless $sort_col;
+ $sort_col = 'itime' if $sort_col eq 'date';
+ $sort_order = $filter{order} unless $sort_order;
+ my $sort_spec = "${sort_col} " . ($sort_order ? " DESC" : " ASC");
my $where_clause = join(" AND ", @filter_ary) . " AND " if (@filter_ary);
@@ -394,7 +403,7 @@ sub get_warehouse_journal {
WHERE $where_clause i1.qty > 0 AND
i1.trans_id IN ( SELECT i.trans_id FROM inventory i GROUP BY i.trans_id HAVING COUNT(i.trans_id) = 1 )
GROUP BY $group_clause
- ORDER BY r_$form->{sort}|;
+ ORDER BY r_${sort_spec}|;
my $sth = prepare_execute_query($form, $dbh, $query, @filter_vars, @filter_vars, @filter_vars);
@@ -432,6 +441,7 @@ sub get_warehouse_journal {
# - partsid - will return matches with this parts_id only
# - description - will return only matches where the given string is a substring of the description
# - chargenumber - will return only matches where the given string is a substring of the chargenumber
+# - ean - will return only matches where the given string is a substring of the ean as stored in the table parts (article)
# - charge_ids - must be an arrayref. will return contents with these ids only
# - expires_in - will only return matches that expire within the given number of days
# will also add a column named 'has_expired' containing if the match has already expired or not
@@ -457,7 +467,7 @@ sub get_warehouse_report {
my $dbh = $form->get_standard_dbh($myconfig);
# filters
- my (@filter_ary, @filter_vars, @wh_bin_filter_ary, @wh_bin_filter_vars, $columns, $group_by);
+ my (@filter_ary, @filter_vars, @wh_bin_filter_ary, @wh_bin_filter_vars);
delete $form->{include_empty_bins} unless ($form->{l_warehousedescription} || $form->{l_bindescription});
@@ -493,6 +503,10 @@ sub get_warehouse_report {
push @filter_ary, "i.chargenumber ILIKE ?";
push @filter_vars, '%' . $filter{chargenumber} . '%';
}
+ if ($filter{ean}) {
+ push @filter_ary, "p.ean ILIKE ?";
+ push @filter_vars, '%' . $filter{ean} . '%';
+ }
# prepare qty comparison for later filtering
my ($f_qty_op, $f_qty, $f_qty_base_unit);
@@ -510,12 +524,15 @@ sub get_warehouse_report {
map { $form->{"l_${_}id"} = "Y" if ($form->{"l_${_}description"} || $form->{"l_${_}number"}); } qw(warehouse bin);
# make order, search in $filter and $form
- $form->{sort} = $filter{sort} unless $form->{sort};
- $form->{sort} = "parts_id" unless $form->{sort};
- $form->{order} = $filter{order} unless $form->{order};
- $form->{sort} =~ s/ASC|DESC//; # kill stuff left in from previous queries
- my $orderby = $form->{sort};
- $form->{sort} .= (($form->{order}) ? " DESC" : " ASC");
+ my $sort_col = $form->{sort};
+ my $sort_order = $form->{order};
+
+ $sort_col = $filter{sort} unless $sort_col;
+ $sort_col = "parts_id" unless $sort_col;
+ $sort_order = $filter{order} unless $sort_order;
+ $sort_col =~ s/ASC|DESC//; # kill stuff left in from previous queries
+ my $orderby = $sort_col;
+ my $sort_spec = "${sort_col} " . ($sort_order ? " DESC" : " ASC");
my $where_clause = join " AND ", ("1=1", @filter_ary);
@@ -528,6 +545,7 @@ sub get_warehouse_report {
"bindescription" => "b.description",
"binid" => "b.id",
"chargenumber" => "i.chargenumber",
+ "ean" => "p.ean",
"chargeid" => "c.id",
"warehousedescription" => "w.description",
"partunit" => "p.unit",
@@ -551,15 +569,14 @@ sub get_warehouse_report {
my $query =
qq|SELECT $select_clause
- $columns
FROM inventory i
LEFT JOIN parts p ON i.parts_id = p.id
LEFT JOIN bin b ON i.bin_id = b.id
LEFT JOIN warehouse w ON i.warehouse_id = w.id
$joins
WHERE $where_clause
- GROUP BY $group_clause $group_by
- ORDER BY $form->{sort}|;
+ GROUP BY $group_clause
+ ORDER BY $sort_spec|;
my $sth = prepare_execute_query($form, $dbh, $query, @filter_vars);
@@ -585,7 +602,7 @@ sub get_warehouse_report {
@all_fields = keys %{ $ref } unless (@all_fields);
}
- $ref->{stock_value} *= $ref->{qty};
+ $ref->{stock_value} = ($ref->{stock_value} || 0) * $ref->{qty};
push @contents, $ref;
}