Revision 096f9e3e
Von Bernd Blessmann vor fast 15 Jahren hinzugefügt
SL/DO.pm | ||
---|---|---|
258 | 258 |
my $h_item = prepare_query($form, $dbh, $q_item); |
259 | 259 |
|
260 | 260 |
my $q_item_stock = |
261 |
qq|INSERT INTO delivery_order_items_stock (delivery_order_item_id, qty, unit, warehouse_id, bin_id, chargenumber) |
|
262 |
VALUES (?, ?, ?, ?, ?, ?)|; |
|
261 |
qq|INSERT INTO delivery_order_items_stock (delivery_order_item_id, qty, unit, warehouse_id, bin_id, chargenumber, bestbefore)
|
|
262 |
VALUES (?, ?, ?, ?, ?, ?, ?)|;
|
|
263 | 263 |
my $h_item_stock = prepare_query($form, $dbh, $q_item_stock); |
264 | 264 |
|
265 | 265 |
my $in_out = $form->{type} =~ /^sales/ ? 'out' : 'in'; |
... | ... | |
309 | 309 |
|
310 | 310 |
foreach my $sinfo (@{ $stock_info }) { |
311 | 311 |
@values = ($item_id, $sinfo->{qty}, $sinfo->{unit}, conv_i($sinfo->{warehouse_id}), |
312 |
conv_i($sinfo->{bin_id}), $sinfo->{chargenumber}); |
|
312 |
conv_i($sinfo->{bin_id}), $sinfo->{chargenumber}, conv_date($sinfo->{bestbefore}));
|
|
313 | 313 |
do_statement($form, $h_item_stock, $q_item_stock, @values); |
314 | 314 |
} |
315 | 315 |
|
... | ... | |
693 | 693 |
my $in_out = $form->{type} =~ /^sales/ ? 'out' : 'in'; |
694 | 694 |
|
695 | 695 |
$query = |
696 |
qq|SELECT qty, unit, bin_id, warehouse_id, chargenumber |
|
696 |
qq|SELECT qty, unit, bin_id, warehouse_id, chargenumber, bestbefore
|
|
697 | 697 |
FROM delivery_order_items_stock |
698 | 698 |
WHERE delivery_order_item_id = ?|; |
699 | 699 |
my $sth = prepare_query($form, $dbh, $query); |
... | ... | |
792 | 792 |
qw(runningnumber number description longdescription qty unit |
793 | 793 |
partnotes serialnumber reqdate projectnumber |
794 | 794 |
si_runningnumber si_number si_description |
795 |
si_warehouse si_bin si_chargenumber si_qty si_unit); |
|
795 |
si_warehouse si_bin si_chargenumber si_bestbefore si_qty si_unit);
|
|
796 | 796 |
|
797 | 797 |
map { $form->{TEMPLATE_ARRAYS}->{$_} = [] } (@arrays); |
798 | 798 |
|
... | ... | |
875 | 875 |
push @{ $form->{TEMPLATE_ARRAYS}{si_warehouse}[$position-1] }, $bin_wh->{warehouse}; |
876 | 876 |
push @{ $form->{TEMPLATE_ARRAYS}{si_bin}[$position-1] }, $bin_wh->{bin}; |
877 | 877 |
push @{ $form->{TEMPLATE_ARRAYS}{si_chargenumber}[$position-1] }, $si->{chargenumber}; |
878 |
push @{ $form->{TEMPLATE_ARRAYS}{si_bestbefore}[$position-1] }, $si->{bestbefore}; |
|
878 | 879 |
push @{ $form->{TEMPLATE_ARRAYS}{si_qty}[$position-1] }, $form->format_amount($myconfig, $si->{qty} * 1); |
879 | 880 |
push @{ $form->{TEMPLATE_ARRAYS}{si_unit}[$position-1] }, $si->{unit}; |
880 | 881 |
} |
... | ... | |
944 | 945 |
my $myconfig = \%main::myconfig; |
945 | 946 |
|
946 | 947 |
my $query = |
947 |
qq|SELECT i.warehouse_id, i.bin_id, i.chargenumber, SUM(qty) AS qty, i.parts_id, |
|
948 |
qq|SELECT i.warehouse_id, i.bin_id, i.chargenumber, i.bestbefore, SUM(qty) AS qty, i.parts_id,
|
|
948 | 949 |
w.description AS warehousedescription, |
949 | 950 |
b.description AS bindescription |
950 | 951 |
FROM inventory i |
951 | 952 |
LEFT JOIN warehouse w ON (i.warehouse_id = w.id) |
952 | 953 |
LEFT JOIN bin b ON (i.bin_id = b.id) |
953 | 954 |
WHERE (i.parts_id IN (| . join(', ', ('?') x scalar(@parts_ids)) . qq|)) |
954 |
GROUP BY i.warehouse_id, i.bin_id, i.chargenumber, i.parts_id, w.description, b.description |
|
955 |
GROUP BY i.warehouse_id, i.bin_id, i.chargenumber, i.bestbefore, i.parts_id, w.description, b.description
|
|
955 | 956 |
HAVING SUM(qty) > 0 |
956 |
ORDER BY LOWER(w.description), LOWER(b.description), LOWER(i.chargenumber) |
|
957 |
ORDER BY LOWER(w.description), LOWER(b.description), LOWER(i.chargenumber), i.bestbefore
|
|
957 | 958 |
|; |
958 | 959 |
my $contents = selectall_hashref_query($form, $form->get_standard_dbh($myconfig), $query, @parts_ids); |
959 | 960 |
|
... | ... | |
991 | 992 |
foreach my $row (@contents) { |
992 | 993 |
next if (($row->{bin_id} != $sinfo->{bin_id}) || |
993 | 994 |
($row->{warehouse_id} != $sinfo->{warehouse_id}) || |
994 |
($row->{chargenumber} ne $sinfo->{chargenumber})); |
|
995 |
($row->{chargenumber} ne $sinfo->{chargenumber}) || |
|
996 |
($row->{bestbefore} ne $sinfo->{bestbefore})); |
|
995 | 997 |
|
996 | 998 |
$found = 1; |
997 | 999 |
|
... | ... | |
1039 | 1041 |
"${prefix}_warehouse_id" => $request->{warehouse_id}, |
1040 | 1042 |
"${prefix}_bin_id" => $request->{bin_id}, |
1041 | 1043 |
'chargenumber' => $request->{chargenumber}, |
1044 |
'bestbefore' => $request->{bestbefore}, |
|
1042 | 1045 |
'qty' => $request->{qty}, |
1043 | 1046 |
'unit' => $request->{unit}, |
1044 | 1047 |
'oe_id' => $form->{id}, |
SL/WH.pm | ||
---|---|---|
73 | 73 |
|
74 | 74 |
my ($now) = selectrow_query($form, $dbh, qq|SELECT current_date|); |
75 | 75 |
|
76 |
$query = qq|INSERT INTO inventory (warehouse_id, bin_id, parts_id, chargenumber, oe_id, orderitems_id, shippingdate, |
|
76 |
$query = qq|INSERT INTO inventory (warehouse_id, bin_id, parts_id, chargenumber, bestbefore, |
|
77 |
oe_id, orderitems_id, shippingdate, |
|
77 | 78 |
employee_id, project_id, trans_id, trans_type_id, comment, qty) |
78 |
VALUES (?, ?, ?, ?, ?, ?, ?, (SELECT id FROM employee WHERE login = ?), ?, ?, ?, ?, ?)|; |
|
79 |
VALUES (?, ?, ?, ?, ?, ?, ?, ?, (SELECT id FROM employee WHERE login = ?), ?, ?, ?, ?, ?)|;
|
|
79 | 80 |
|
80 | 81 |
$sth = prepare_query($form, $dbh, $query); |
81 | 82 |
|
... | ... | |
90 | 91 |
$direction |= 1 if ($transfer->{src_warehouse_id} && $transfer->{src_bin_id}); |
91 | 92 |
$direction |= 2 if ($transfer->{dst_warehouse_id} && $transfer->{dst_bin_id}); |
92 | 93 |
|
93 |
push @values, conv_i($transfer->{parts_id}), "$transfer->{chargenumber}", conv_i($transfer->{oe_id}), conv_i($transfer->{orderitems_id}); |
|
94 |
push @values, conv_i($transfer->{parts_id}), "$transfer->{chargenumber}", conv_date($transfer->{bestbefore}), conv_i($transfer->{oe_id}), conv_i($transfer->{orderitems_id});
|
|
94 | 95 |
push @values, $transfer->{shippingdate} eq 'current_date' ? $now : conv_date($transfer->{shippingdate}), $form->{login}, conv_i($transfer->{project_id}), $trans_id; |
95 | 96 |
|
96 | 97 |
if ($transfer->{transfer_type_id}) { |
... | ... | |
131 | 132 |
|
132 | 133 |
my $self = shift; |
133 | 134 |
my %params = @_; |
134 |
Common::check_params(\%params, qw(assembly_id dst_warehouse_id login qty unit dst_bin_id chargenumber comment)); |
|
135 |
Common::check_params(\%params, qw(assembly_id dst_warehouse_id login qty unit dst_bin_id chargenumber bestbefore comment));
|
|
135 | 136 |
|
136 | 137 |
# my $maxcreate=WH->check_assembly_max_create(assembly_id =>$params{'assembly_id'}, dbh => $my_dbh); |
137 | 138 |
|
... | ... | |
163 | 164 |
my $sth_part_qty_assembly = prepare_execute_query($form, $dbh, $query, $params{assembly_id}); |
164 | 165 |
|
165 | 166 |
# Hier wird das prepared Statement für die Schleife über alle Lagerplätze vorbereitet |
166 |
my $transferPartSQL = qq|INSERT INTO inventory (parts_id, warehouse_id, bin_id, chargenumber, comment, employee_id, qty, trans_id, trans_type_id) |
|
167 |
VALUES (?, ?, ?, ?, ?,(SELECT id FROM employee WHERE login = ?), ?, nextval('id'), |
|
167 |
my $transferPartSQL = qq|INSERT INTO inventory (parts_id, warehouse_id, bin_id, chargenumber, bestbefore, comment, employee_id, qty, trans_id, trans_type_id)
|
|
168 |
VALUES (?, ?, ?, ?, ?, ?, (SELECT id FROM employee WHERE login = ?), ?, nextval('id'),
|
|
168 | 169 |
(SELECT id FROM transfer_type WHERE direction = 'out' AND description = 'used'))|; |
169 | 170 |
my $sthTransferPartSQL = prepare_query($form, $dbh, $transferPartSQL); |
170 | 171 |
|
... | ... | |
191 | 192 |
next; # die weiteren Überprüfungen sind unnötig, daher das nächste elemente prüfen (genaue Ausgabe, was noch fehlt) |
192 | 193 |
} |
193 | 194 |
|
194 |
# Eine kurze Vorabfrage, um den Lagerplatz und die Chargennummber zu bestimmen
|
|
195 |
# Eine kurze Vorabfrage, um den Lagerplatz, Chargennummer und die Mindesthaltbarkeit zu bestimmen
|
|
195 | 196 |
# Offen: Die Summe über alle Lagerplätze wird noch nicht gebildet |
196 | 197 |
# Gelöst: Wir haben vorher schon die Abfrage durchgeführt, ob wir fertigen können. |
197 | 198 |
# Noch besser gelöst: Wir laufen durch alle benötigten Waren zum Fertigen und geben eine Rückmeldung an den Benutzer was noch fehlt |
198 | 199 |
# und lösen den Rest dann so wie bei xplace im Barcode-Programm |
199 | 200 |
# S.a. Kommentar im bin/mozilla-Code mb übernimmt und macht das in ordentlich |
200 | 201 |
|
201 |
my $tempquery = qq|SELECT SUM(qty), bin_id, chargenumber FROM inventory |
|
202 |
WHERE warehouse_id = ? AND parts_id = ? GROUP BY bin_id, chargenumber having SUM(qty)>0|; |
|
202 |
my $tempquery = qq|SELECT SUM(qty), bin_id, chargenumber, bestbefore FROM inventory
|
|
203 |
WHERE warehouse_id = ? AND parts_id = ? GROUP BY bin_id, chargenumber, bestbefore having SUM(qty)>0|;
|
|
203 | 204 |
my $tempsth = prepare_execute_query($form, $dbh, $tempquery, $params{dst_warehouse_id}, $currentPart_ID); |
204 | 205 |
|
205 | 206 |
# Alle Werte zu dem einzelnen Artikel, die wir später auslagern |
... | ... | |
208 | 209 |
while (my $temphash_ref = $tempsth->fetchrow_hashref()) { |
209 | 210 |
my $temppart_bin_id = $temphash_ref->{bin_id}; # kann man hier den quelllagerplatz beim verbauen angeben? |
210 | 211 |
my $temppart_chargenumber = $temphash_ref->{chargenumber}; |
212 |
my $temppart_bestbefore = $temphash_ref->{bestbefore}; |
|
211 | 213 |
my $temppart_qty = $temphash_ref->{sum}; |
212 | 214 |
|
213 | 215 |
if ($tmpPartsQTY > $temppart_qty) { # wir haben noch mehr waren zum wegbuchen. |
... | ... | |
218 | 220 |
# Dieser Wert IST und BLEIBT positiv!! Hilfe. |
219 | 221 |
# Liegt das daran, dass dieser Wert aus einem SQL-Statement stammt? |
220 | 222 |
do_statement($form, $sthTransferPartSQL, $transferPartSQL, $currentPart_ID, $params{dst_warehouse_id}, |
221 |
$temppart_bin_id, $temppart_chargenumber, 'Verbraucht für ' . |
|
223 |
$temppart_bin_id, $temppart_chargenumber, $temppart_bestbefore, 'Verbraucht für ' .
|
|
222 | 224 |
$self->get_part_description(parts_id => $params{assembly_id}), $params{login}, $temppart_qty); |
223 | 225 |
|
224 | 226 |
# hier ist noch ein fehler am besten mit definierten erzeugnissen debuggen 02/2009 jb |
... | ... | |
228 | 230 |
} else { # okay, wir haben weniger oder gleich Waren die wir wegbuchen müssen, wir können also aufhören |
229 | 231 |
$tmpPartsQTY *=-1; |
230 | 232 |
do_statement($form, $sthTransferPartSQL, $transferPartSQL, $currentPart_ID, $params{dst_warehouse_id}, |
231 |
$temppart_bin_id, $temppart_chargenumber, 'Verbraucht für ' . |
|
233 |
$temppart_bin_id, $temppart_chargenumber, $temppart_bestbefore, 'Verbraucht für ' .
|
|
232 | 234 |
$self->get_part_description(parts_id => $params{assembly_id}), $params{login}, $tmpPartsQTY); |
233 | 235 |
last; # beendet die schleife (springt zum letzten element) |
234 | 236 |
} |
235 |
} # ende while SELECT SUM(qty), bin_id, chargenumber FROM inventory WHERE warehouse_id |
|
237 |
} # ende while SELECT SUM(qty), bin_id, chargenumber, bestbefore FROM inventory WHERE warehouse_id
|
|
236 | 238 |
} #ende while select parts_id,qty from assembly where id = ? |
237 | 239 |
if ($kannNichtFertigen) { |
238 | 240 |
return $kannNichtFertigen; |
239 | 241 |
} |
240 | 242 |
|
241 | 243 |
# soweit alles gut. Jetzt noch die wirkliche Lagerbewegung für das Erzeugnis ausführen ... |
242 |
my $transferAssemblySQL = qq|INSERT INTO inventory (parts_id, warehouse_id, bin_id, chargenumber, |
|
244 |
my $transferAssemblySQL = qq|INSERT INTO inventory (parts_id, warehouse_id, bin_id, chargenumber, bestbefore,
|
|
243 | 245 |
comment, employee_id, qty, trans_id, trans_type_id) |
244 |
VALUES (?, ?, ?, ?, ?, (SELECT id FROM employee WHERE login = ?), ?, nextval('id'), |
|
246 |
VALUES (?, ?, ?, ?, ?, ?, (SELECT id FROM employee WHERE login = ?), ?, nextval('id'),
|
|
245 | 247 |
(SELECT id FROM transfer_type WHERE direction = 'in' AND description = 'stock'))|; |
246 | 248 |
my $sthTransferAssemblySQL = prepare_query($form, $dbh, $transferAssemblySQL); |
247 | 249 |
do_statement($form, $sthTransferAssemblySQL, $transferAssemblySQL, $params{assembly_id}, $params{dst_warehouse_id}, |
248 |
$params{dst_bin_id}, $params{chargenumber}, $params{comment}, $params{login}, $params{qty}); |
|
250 |
$params{dst_bin_id}, $params{chargenumber}, $params{bestbefore}, $params{comment}, $params{login}, $params{qty});
|
|
249 | 251 |
$dbh->commit(); |
250 | 252 |
|
251 | 253 |
$main::lxdebug->leave_sub(); |
... | ... | |
294 | 296 |
push @filter_vars, '%' . $filter{chargenumber} . '%'; |
295 | 297 |
} |
296 | 298 |
|
299 |
if ($form->{bestbefore}) { |
|
300 |
push @filter_ary, "?::DATE = i1.bestbefore::DATE"; |
|
301 |
push @filter_vars, $form->{bestbefore}; |
|
302 |
} |
|
303 |
|
|
297 | 304 |
if ($form->{fromdate}) { |
298 | 305 |
push @filter_ary, "?::DATE <= i1.itime::DATE"; |
299 | 306 |
push @filter_vars, $form->{fromdate}; |
... | ... | |
344 | 351 |
"partdescription" => "p.description", |
345 | 352 |
"bindescription" => "b.description", |
346 | 353 |
"chargenumber" => "i1.chargenumber", |
354 |
"bestbefore" => "i1.bestbefore", |
|
347 | 355 |
"warehousedescription" => "w.description", |
348 | 356 |
"partunit" => "p.unit", |
349 | 357 |
"bin_from" => "b1.description", |
... | ... | |
512 | 520 |
# - partsid - will return matches with this parts_id only |
513 | 521 |
# - description - will return only matches where the given string is a substring of the description |
514 | 522 |
# - chargenumber - will return only matches where the given string is a substring of the chargenumber |
523 |
# - bestbefore - will return only matches with this bestbefore date |
|
515 | 524 |
# - ean - will return only matches where the given string is a substring of the ean as stored in the table parts (article) |
516 | 525 |
# - charge_ids - must be an arrayref. will return contents with these ids only |
517 | 526 |
# - expires_in - will only return matches that expire within the given number of days |
... | ... | |
574 | 583 |
push @filter_ary, "i.chargenumber ILIKE ?"; |
575 | 584 |
push @filter_vars, '%' . $filter{chargenumber} . '%'; |
576 | 585 |
} |
586 |
|
|
587 |
if ($form->{bestbefore}) { |
|
588 |
push @filter_ary, "?::DATE = i.bestbefore::DATE"; |
|
589 |
push @filter_vars, $form->{bestbefore}; |
|
590 |
} |
|
591 |
|
|
577 | 592 |
if ($filter{ean}) { |
578 | 593 |
push @filter_ary, "p.ean ILIKE ?"; |
579 | 594 |
push @filter_vars, '%' . $filter{ean} . '%'; |
... | ... | |
616 | 631 |
"bindescription" => "b.description", |
617 | 632 |
"binid" => "b.id", |
618 | 633 |
"chargenumber" => "i.chargenumber", |
634 |
"bestbefore" => "i.bestbefore", |
|
619 | 635 |
"ean" => "p.ean", |
620 | 636 |
"chargeid" => "c.id", |
621 | 637 |
"warehousedescription" => "w.description", |
... | ... | |
810 | 826 |
|
811 | 827 |
my $dbh = $params{dbh} || $form->get_standard_dbh(); |
812 | 828 |
|
813 |
my $query = qq| SELECT SUM(qty), bin_id, chargenumber FROM inventory where parts_id = ? AND warehouse_id = ? GROUP BY bin_id, chargenumber|;
|
|
829 |
my $query = qq| SELECT SUM(qty), bin_id, chargenumber, bestbefore FROM inventory where parts_id = ? AND warehouse_id = ? GROUP BY bin_id, chargenumber, bestbefore|;
|
|
814 | 830 |
|
815 | 831 |
my $sth_QTY = prepare_execute_query($form, $dbh, $query, ,$params{parts_id}, $params{warehouse_id}); #info: aufruf an DBUtils.pm |
816 | 832 |
|
817 | 833 |
my $max_qty_parts = 0; #Initialisierung mit 0 |
818 |
while (my $ref = $sth_QTY->fetchrow_hashref()) { # wir laufen über alle chargen und Lagerorte (s.a. SQL-Query oben) |
|
834 |
while (my $ref = $sth_QTY->fetchrow_hashref()) { # wir laufen über alle Haltbarkeiten, chargen und Lagerorte (s.a. SQL-Query oben)
|
|
819 | 835 |
$max_qty_parts += $ref->{sum}; |
820 | 836 |
} |
821 | 837 |
|
bin/mozilla/common.pl | ||
---|---|---|
76 | 76 |
$has_charge = 1; |
77 | 77 |
map { $_->{has_charge} = 1; } @parts; |
78 | 78 |
} |
79 |
my $has_bestbefore = 0; |
|
80 |
if (defined($parts[0]->{bestbefore})) { |
|
81 |
$has_bestbefore = 1; |
|
82 |
map { $_->{has_bestbefore} = 1; } @parts; |
|
83 |
} |
|
79 | 84 |
my $has_ean = 0; |
80 | 85 |
if (defined($parts[0]->{ean})) { |
81 | 86 |
$has_ean = 1; |
... | ... | |
92 | 97 |
"nextsub" => "select_part_internal", |
93 | 98 |
"callback_sub" => $callback_sub, |
94 | 99 |
"has_charge" => $has_charge, |
100 |
"has_bestbefore" => $has_bestbefore, |
|
95 | 101 |
"has_ean" => $has_ean, |
96 | 102 |
"remap_parts_id" => $remap_parts_id, |
97 | 103 |
"remap_partnumber" => $remap_partnumber }); |
bin/mozilla/do.pl | ||
---|---|---|
1004 | 1004 |
|
1005 | 1005 |
foreach my $i (1..$form->{rowcount}) { |
1006 | 1006 |
$form->{"qty_$i"} = $form->parse_amount(\%myconfig, $form->{"qty_$i"}); |
1007 |
push @{ $stock_info }, { map { $_ => $form->{"${_}_${i}"} } qw(warehouse_id bin_id chargenumber qty unit) }; |
|
1007 |
push @{ $stock_info }, { map { $_ => $form->{"${_}_${i}"} } qw(warehouse_id bin_id chargenumber bestbefore qty unit) };
|
|
1008 | 1008 |
} |
1009 | 1009 |
|
1010 | 1010 |
display_stock_in_form($stock_info); |
... | ... | |
1033 | 1033 |
my %myconfig = %main::myconfig; |
1034 | 1034 |
my $locale = $main::locale; |
1035 | 1035 |
|
1036 |
$form->{jsscript} = 1; |
|
1037 |
|
|
1036 | 1038 |
$form->{title} = $locale->text('Stock'); |
1037 | 1039 |
|
1038 | 1040 |
my $part_info = IC->get_basic_part_info('id' => $form->{parts_id}); |
... | ... | |
1068 | 1070 |
|
1069 | 1071 |
next if ($form->{"qty_$i"} <= 0); |
1070 | 1072 |
|
1071 |
push @{ $stock_info }, { map { $_ => $form->{"${_}_${i}"} } qw(warehouse_id bin_id chargenumber qty unit) }; |
|
1073 |
push @{ $stock_info }, { map { $_ => $form->{"${_}_${i}"} } qw(warehouse_id bin_id chargenumber bestbefore qty unit) };
|
|
1072 | 1074 |
} |
1073 | 1075 |
|
1074 | 1076 |
$form->{stock} = YAML::Dump($stock_info); |
... | ... | |
1107 | 1109 |
foreach my $sinfo (@{ $stock_info }) { |
1108 | 1110 |
next if (($row->{bin_id} != $sinfo->{bin_id}) || |
1109 | 1111 |
($row->{warehouse_id} != $sinfo->{warehouse_id}) || |
1110 |
($row->{chargenumber} ne $sinfo->{chargenumber})); |
|
1112 |
($row->{chargenumber} ne $sinfo->{chargenumber}) || |
|
1113 |
($row->{bestbefore} ne $sinfo->{bestbefore})); |
|
1111 | 1114 |
|
1112 | 1115 |
map { $row->{"stock_$_"} = $sinfo->{$_} } qw(qty unit error); |
1113 | 1116 |
} |
... | ... | |
1147 | 1150 |
'warehouse_id' => $form->{"warehouse_id_$i"}, |
1148 | 1151 |
'bin_id' => $form->{"bin_id_$i"}, |
1149 | 1152 |
'chargenumber' => $form->{"chargenumber_$i"}, |
1153 |
'bestbefore' => $form->{"bestbefore_$i"}, |
|
1150 | 1154 |
'qty' => $form->{"qty_$i"}, |
1151 | 1155 |
'unit' => $form->{"unit_$i"}, |
1152 | 1156 |
'row' => $i, |
... | ... | |
1266 | 1270 |
$request->{parts_id} = $form->{"id_$i"}; |
1267 | 1271 |
$request->{base_qty} = $request->{qty} * $units->{$request->{unit}}->{factor} / $base_unit_factor; |
1268 | 1272 |
|
1269 |
my $map_key = join '--', ($form->{"id_$i"}, @{$request}{qw(warehouse_id bin_id chargenumber)}); |
|
1273 |
my $map_key = join '--', ($form->{"id_$i"}, @{$request}{qw(warehouse_id bin_id chargenumber bestbefore)});
|
|
1270 | 1274 |
|
1271 | 1275 |
$request_map{$map_key} ||= $request; |
1272 | 1276 |
$request_map{$map_key}->{sum_base_qty} ||= 0; |
... | ... | |
1292 | 1296 |
my @contents = DO->get_item_availability('parts_id' => \@part_ids); |
1293 | 1297 |
|
1294 | 1298 |
foreach my $inv (@contents) { |
1295 |
my $map_key = join '--', @{$inv}{qw(parts_id warehouse_id bin_id chargenumber)}; |
|
1299 |
my $map_key = join '--', @{$inv}{qw(parts_id warehouse_id bin_id chargenumber bestbefore)};
|
|
1296 | 1300 |
|
1297 | 1301 |
next unless ($request_map{$map_key}); |
1298 | 1302 |
|
... | ... | |
1306 | 1310 |
my $pinfo = $part_info_map{$request->{parts_id}}; |
1307 | 1311 |
my $binfo = $bin_info_map{$request->{bin_id}}; |
1308 | 1312 |
|
1309 |
push @{ $form->{ERRORS} }, $locale->text("There is not enough available of '#1' at warehouse '#2', bin '#3', #4, for the transfer of #5.",
|
|
1313 |
push @{ $form->{ERRORS} }, $locale->text("There is not enough available of '#1' at warehouse '#2', bin '#3', #4, #5, for the transfer of #6.",
|
|
1310 | 1314 |
$pinfo->{description}, $binfo->{warehouse_description}, $binfo->{bin_description}, |
1311 | 1315 |
$request->{chargenumber} ? $locale->text('chargenumber #1', $request->{chargenumber}) : $locale->text('no chargenumber'), |
1316 |
$request->{bestbefore} ? $locale->text('bestbefore #1', $request->{bestbefore}) : $locale->text('no bestbefore'), |
|
1312 | 1317 |
$form->format_amount_units('amount' => $request->{sum_base_qty}, |
1313 | 1318 |
'part_unit' => $pinfo->{unit}, |
1314 | 1319 |
'conv_units' => 'convertible_not_smaller')); |
bin/mozilla/wh.pl | ||
---|---|---|
164 | 164 |
|
165 | 165 |
$form->show_generic_error($locale->text("The source warehouse does not contain any bins.")) if (0 == scalar @{ $warehouse->{BINS} }); |
166 | 166 |
|
167 |
map { $form->{"l_$_"} = 'Y' } qw(parts_id qty warehouseid binid partnumber partdescription bindescription chargenumber partunit ean); |
|
167 |
map { $form->{"l_$_"} = 'Y' } qw(parts_id qty warehouseid binid partnumber partdescription bindescription chargenumber bestbefore partunit ean);
|
|
168 | 168 |
|
169 | 169 |
$form->{sort} = 'bindescription'; |
170 | 170 |
my @contents = WH->get_warehouse_report("warehouse_id" => $form->{warehouse_id}, |
171 | 171 |
"bin_id" => $form->{bin_id}, |
172 | 172 |
"chargenumber" => $form->{chargenumber}, |
173 |
"bestbefore" => $form->{bestbefore}, |
|
173 | 174 |
"partnumber" => $form->{partnumber}, |
174 | 175 |
"ean" => $form->{ean}, |
175 | 176 |
"description" => $form->{description}); |
... | ... | |
219 | 220 |
|
220 | 221 |
$form->show_generic_error($locale->text("The source warehouse does not contain any bins.")) if (0 == scalar @{ $warehouse->{BINS} }); |
221 | 222 |
|
222 |
map { $form->{"l_$_"} = 'Y' } qw(parts_id qty warehouseid binid partnumber partdescription bindescription chargenumber partunit); |
|
223 |
map { $form->{"l_$_"} = 'Y' } qw(parts_id qty warehouseid binid partnumber partdescription bindescription chargenumber bestbefore partunit);
|
|
223 | 224 |
|
224 | 225 |
$form->{sort} = 'bindescription'; |
225 | 226 |
my @contents = WH->get_warehouse_report("warehouse_id" => $form->{warehouse_id}); |
... | ... | |
243 | 244 |
'transfer_type_id' => $form->{transfer_type_id}, |
244 | 245 |
}; |
245 | 246 |
|
246 |
map { $transfer->{$_} = $form->{"${_}_${row}"} } qw(src_bin_id chargenumber parts_id qty dst_warehouse_id dst_bin_id); |
|
247 |
map { $transfer->{$_} = $form->{"${_}_${row}"} } qw(src_bin_id chargenumber bestbefore parts_id qty dst_warehouse_id dst_bin_id);
|
|
247 | 248 |
|
248 | 249 |
my $entry; |
249 | 250 |
|
250 | 251 |
foreach (@contents) { |
251 |
if (($_->{binid} == $transfer->{src_bin_id}) && ($_->{parts_id} == $transfer->{parts_id}) && ($_->{chargenumber} eq $transfer->{chargenumber})) { |
|
252 |
if (($_->{binid} == $transfer->{src_bin_id}) && ($_->{parts_id} == $transfer->{parts_id}) && ($_->{chargenumber} eq $transfer->{chargenumber}) && $_->{bestbefore} eq $transfer->{bestbefore}) {
|
|
252 | 253 |
$entry = $_; |
253 | 254 |
last; |
254 | 255 |
} |
... | ... | |
441 | 442 |
'dst_warehouse_id' => $form->{warehouse_id}, |
442 | 443 |
'dst_bin_id' => $form->{bin_id}, |
443 | 444 |
'chargenumber' => $form->{chargenumber}, |
445 |
'bestbefore' => $form->{bestbefore}, |
|
444 | 446 |
'assembly_id' => $form->{parts_id}, |
445 | 447 |
'qty' => $form->{qty}, |
446 | 448 |
'unit' => $form->{unit}, |
... | ... | |
455 | 457 |
$form->show_generic_error($ret, 'back_button' => 1); |
456 | 458 |
} |
457 | 459 |
|
458 |
delete @{$form}{qw(parts_id partnumber description qty unit chargenumber comment)}; |
|
460 |
delete @{$form}{qw(parts_id partnumber description qty unit chargenumber bestbefore comment)};
|
|
459 | 461 |
|
460 | 462 |
$form->{saved_message} = $locale->text('The assembly has been created.'); |
461 | 463 |
$form->{trans_type} = 'assembly'; |
... | ... | |
487 | 489 |
'dst_warehouse_id' => $form->{warehouse_id}, |
488 | 490 |
'dst_bin_id' => $form->{bin_id}, |
489 | 491 |
'chargenumber' => $form->{chargenumber}, |
492 |
'bestbefore' => $form->{bestbefore}, |
|
490 | 493 |
'parts_id' => $form->{parts_id}, |
491 | 494 |
'qty' => $form->{qty}, |
492 | 495 |
'unit' => $form->{unit}, |
... | ... | |
495 | 498 |
|
496 | 499 |
WH->transfer($transfer); |
497 | 500 |
|
498 |
delete @{$form}{qw(parts_id partnumber description qty unit chargenumber comment)}; |
|
501 |
delete @{$form}{qw(parts_id partnumber description qty unit chargenumber bestbefore comment)};
|
|
499 | 502 |
|
500 | 503 |
$form->{saved_message} = $locale->text('The parts have been stocked.'); |
501 | 504 |
$form->{trans_type} = 'stock'; |
... | ... | |
546 | 549 |
|
547 | 550 |
$form->show_generic_error($locale->text("The warehouse does not contain any bins.")) if (0 == scalar @{ $warehouse->{BINS} }); |
548 | 551 |
|
549 |
map { $form->{"l_$_"} = 'Y' } qw(parts_id qty warehouseid binid partnumber partdescription bindescription chargenumber partunit); |
|
552 |
map { $form->{"l_$_"} = 'Y' } qw(parts_id qty warehouseid binid partnumber partdescription bindescription chargenumber bestbefore partunit);
|
|
550 | 553 |
|
551 | 554 |
$form->{sort} = 'bindescription'; |
552 | 555 |
my @contents = WH->get_warehouse_report("warehouse_id" => $form->{warehouse_id}); |
... | ... | |
570 | 573 |
'transfer_type_id' => $form->{transfer_type_id}, |
571 | 574 |
}; |
572 | 575 |
|
573 |
map { $transfer->{$_} = $form->{"${_}_${row}"} } qw(src_bin_id chargenumber parts_id qty); |
|
576 |
map { $transfer->{$_} = $form->{"${_}_${row}"} } qw(src_bin_id chargenumber bestbefore parts_id qty);
|
|
574 | 577 |
|
575 | 578 |
my $entry; |
576 | 579 |
|
577 | 580 |
foreach (@contents) { |
578 |
if (($_->{binid} == $transfer->{src_bin_id}) && ($_->{parts_id} == $transfer->{parts_id}) && ($_->{chargenumber} eq $transfer->{chargenumber})) { |
|
581 |
if (($_->{binid} == $transfer->{src_bin_id}) && ($_->{parts_id} == $transfer->{parts_id}) && ($_->{chargenumber} eq $transfer->{chargenumber}) && ($_->{bestbefore} eq $transfer->{bestbefore})) {
|
|
579 | 582 |
$entry = $_; |
580 | 583 |
last; |
581 | 584 |
} |
... | ... | |
654 | 657 |
$form->{sort} ||= 'date'; |
655 | 658 |
|
656 | 659 |
my %filter; |
657 |
my @columns = qw(trans_id date warehouse_from bin_from warehouse_to bin_to partnumber partdescription chargenumber trans_type comment qty employee oe_id projectnumber); |
|
660 |
my @columns = qw(trans_id date warehouse_from bin_from warehouse_to bin_to partnumber partdescription chargenumber bestbefore trans_type comment qty employee oe_id projectnumber);
|
|
658 | 661 |
|
659 | 662 |
# filter stuff |
660 |
map { $filter{$_} = $form->{$_} if ($form->{$_}) } qw(warehouse_id bin_id partnumber description chargenumber); |
|
663 |
map { $filter{$_} = $form->{$_} if ($form->{$_}) } qw(warehouse_id bin_id partnumber description chargenumber bestbefore);
|
|
661 | 664 |
|
662 | 665 |
$filter{qty_op} = WH->convert_qty_op($form->{qty_op}); |
663 | 666 |
if ($filter{qty_op}) { |
... | ... | |
672 | 675 |
my $report = SL::ReportGenerator->new(\%myconfig, $form); |
673 | 676 |
|
674 | 677 |
my @hidden_variables = map { "l_${_}" } @columns; |
675 |
push @hidden_variables, qw(warehouse_id bin_id partnumber description chargenumber qty_op qty qty_unit fromdate todate); |
|
678 |
push @hidden_variables, qw(warehouse_id bin_id partnumber description chargenumber bestbefore qty_op qty qty_unit fromdate todate);
|
|
676 | 679 |
|
677 | 680 |
my %column_defs = ( |
678 | 681 |
'date' => { 'text' => $locale->text('Date'), }, |
... | ... | |
686 | 689 |
'partnumber' => { 'text' => $locale->text('Part Number'), }, |
687 | 690 |
'partdescription' => { 'text' => $locale->text('Description'), }, |
688 | 691 |
'chargenumber' => { 'text' => $locale->text('Charge Number'), }, |
692 |
'bestbefore' => { 'text' => $locale->text('Best Before'), }, |
|
689 | 693 |
'qty' => { 'text' => $locale->text('Qty'), }, |
690 | 694 |
'employee' => { 'text' => $locale->text('Employee'), }, |
691 | 695 |
'projectnumber' => { 'text' => $locale->text('Project Number'), }, |
... | ... | |
777 | 781 |
|
778 | 782 |
show_no_warehouses_error() if (!scalar @{ $form->{WAREHOUSES} }); |
779 | 783 |
|
780 |
$form->{fokus} = "partnumber"; |
|
781 |
$form->{onload} .= "focus();"; |
|
784 |
$form->{jsscript} = 1; |
|
785 |
|
|
786 |
# $form->{fokus} = "partnumber"; |
|
787 |
# $form->{onload} .= "focus();"; |
|
782 | 788 |
$form->{title} = $locale->text("Report about wareouse contents"); |
783 | 789 |
|
784 | 790 |
$form->header(); |
... | ... | |
804 | 810 |
my $sort_col = $form->{sort}; |
805 | 811 |
|
806 | 812 |
my %filter; |
807 |
my @columns = qw(warehousedescription bindescription partnumber partdescription chargenumber qty stock_value); |
|
813 |
my @columns = qw(warehousedescription bindescription partnumber partdescription chargenumber bestbefore qty stock_value);
|
|
808 | 814 |
|
809 | 815 |
# filter stuff |
810 |
map { $filter{$_} = $form->{$_} if ($form->{$_}) } qw(warehouse_id bin_id partnumber description chargenumber); |
|
816 |
map { $filter{$_} = $form->{$_} if ($form->{$_}) } qw(warehouse_id bin_id partnumber description chargenumber bestbefore);
|
|
811 | 817 |
|
812 | 818 |
$filter{qty_op} = WH->convert_qty_op($form->{qty_op}); |
813 | 819 |
if ($filter{qty_op}) { |
... | ... | |
824 | 830 |
my $report = SL::ReportGenerator->new(\%myconfig, $form); |
825 | 831 |
|
826 | 832 |
my @hidden_variables = map { "l_${_}" } @columns; |
827 |
push @hidden_variables, qw(warehouse_id bin_id partnumber description chargenumber qty_op qty qty_unit l_warehousedescription l_bindescription); |
|
833 |
push @hidden_variables, qw(warehouse_id bin_id partnumber description chargenumber bestbefore qty_op qty qty_unit l_warehousedescription l_bindescription);
|
|
828 | 834 |
push @hidden_variables, qw(include_empty_bins subtotal); |
829 | 835 |
|
830 | 836 |
my %column_defs = ( |
... | ... | |
833 | 839 |
'partnumber' => { 'text' => $locale->text('Part Number'), }, |
834 | 840 |
'partdescription' => { 'text' => $locale->text('Description'), }, |
835 | 841 |
'chargenumber' => { 'text' => $locale->text('Charge Number'), }, |
842 |
'bestbefore' => { 'text' => $locale->text('Best Before'), }, |
|
836 | 843 |
'qty' => { 'text' => $locale->text('Qty'), }, |
837 | 844 |
'stock_value' => { 'text' => $locale->text('Stock value'), }, |
838 | 845 |
); |
doc/dokumentenvorlagen-und-variablen.html | ||
---|---|---|
1212 | 1212 |
<td><code>si_chargenumber</code></td> |
1213 | 1213 |
<td>Chargennummer</td> |
1214 | 1214 |
</tr> |
1215 |
<tr> |
|
1216 |
<td><code>si_bestbefore</code></td> |
|
1217 |
<td>Mindesthaltbarkeit</td> |
|
1218 |
</tr> |
|
1215 | 1219 |
<tr> |
1216 | 1220 |
<td><code>si_number</code></td> |
1217 | 1221 |
<td>Artikelnummer</td> |
sql/Pg-upgrade2/warehouse_add_bestbefore.sql | ||
---|---|---|
1 |
-- @tag: warehouse_add_bestbefore |
|
2 |
-- @description: Spalten für Mindesthaltbarkeitsdatum |
|
3 |
-- @depends: release_2_6_0 |
|
4 |
ALTER TABLE inventory ADD COLUMN bestbefore date; |
|
5 |
ALTER TABLE delivery_order_items_stock ADD COLUMN bestbefore date; |
templates/webpages/do/stock_in_form_master.html | ||
---|---|---|
92 | 92 |
<th class="listheading"><translate>Warehouse</translate></th> |
93 | 93 |
<th class="listheading"><translate>Bin</translate></th> |
94 | 94 |
<th class="listheading"><translate>Charge Number</translate></th> |
95 |
<th class="listheading"><translate>Best Before</translate></th> |
|
95 | 96 |
<th align="right" class="listheading"><translate>Qty</translate></th> |
96 | 97 |
<th align="right" class="listheading"><translate>Unit</translate></th> |
97 | 98 |
</tr> |
... | ... | |
105 | 106 |
<td>[% HTML.escape(row.warehouse_description) %]</td> |
106 | 107 |
<td>[% HTML.escape(row.bin_description) %]</td> |
107 | 108 |
<td>[% HTML.escape(row.chargenumber) %]</td> |
109 |
<td>[% HTML.escape(row.bestbefore) %]</td> |
|
108 | 110 |
<td>[% HTML.escape(LxERP.format_amount(row.qty)) %]</td> |
109 | 111 |
<td>[% HTML.escape(row.unit) %]</td> |
110 | 112 |
|
... | ... | |
120 | 122 |
|
121 | 123 |
<td><select name="bin_id_[% loop.count %]" id="bin_id_[% loop.count %]"></select></td> |
122 | 124 |
<td><input name="chargenumber_[% loop.count %]" value="[% HTML.escape(row.chargenumber) %]"></td> |
125 |
|
|
126 |
<td> |
|
127 |
<input name="bestbefore_[% loop.count %]" id="bestbefore_[% loop.count %]" value="[% HTML.escape(row.bestbefore) %]" size="11" title="[% myconfig_dateformat %]"> |
|
128 |
<input type="button" name="b_bestbefore_[% loop.count %]" id="bestbefore_trigger_[% loop.count %]" value="?"> |
|
129 |
</td> |
|
130 |
|
|
123 | 131 |
<td><input name="qty_[% loop.count %]" size="12" value="[% HTML.escape(LxERP.format_amount(row.qty)) %]"></td> |
124 | 132 |
|
125 | 133 |
<td> |
... | ... | |
149 | 157 |
</p> |
150 | 158 |
</form> |
151 | 159 |
|
160 |
[%- IF NOT delivered %] |
|
161 |
<script type="text/javascript"> |
|
162 |
<!-- |
|
163 |
[%- FOREACH row = STOCK_INFO %] |
|
164 |
Calendar.setup( { |
|
165 |
inputField : "bestbefore_[% loop.count %]", |
|
166 |
ifFormat :"[% myconfig_jsc_dateformat %]", |
|
167 |
align : "BR", |
|
168 |
button : "bestbefore_trigger_[% loop.count %]" |
|
169 |
}); |
|
170 |
[%- END %] |
|
171 |
//--> |
|
172 |
</script> |
|
173 |
[%- END %] |
|
174 |
|
|
152 | 175 |
</body> |
153 | 176 |
</html> |
154 | 177 |
|
templates/webpages/do/stock_out_form_master.html | ||
---|---|---|
60 | 60 |
<th class="listheading"><translate>Warehouse</translate></th> |
61 | 61 |
<th class="listheading"><translate>Bin</translate></th> |
62 | 62 |
<th class="listheading"><translate>Charge Number</translate></th> |
63 |
<th class="listheading"><translate>Best Before</translate></th> |
|
63 | 64 |
[%- UNLESS delivered %] |
64 | 65 |
<th align="right" class="listheading"><translate>Available qty</translate></th> |
65 | 66 |
[%- END %] |
... | ... | |
73 | 74 |
<td>[% HTML.escape(row.warehousedescription) %]</td> |
74 | 75 |
<td>[% HTML.escape(row.bindescription) %]</td> |
75 | 76 |
<td>[% HTML.escape(row.chargenumber) %]</td> |
77 |
<td>[% HTML.escape(row.bestbefore) %]</td> |
|
76 | 78 |
|
77 | 79 |
[%- IF delivered %] |
78 | 80 |
|
... | ... | |
103 | 105 |
<input type="hidden" name="warehouse_id_[% loop.count %]" value="[% HTML.escape(row.warehouse_id) %]"> |
104 | 106 |
<input type="hidden" name="bin_id_[% loop.count %]" value="[% HTML.escape(row.bin_id) %]"> |
105 | 107 |
<input type="hidden" name="chargenumber_[% loop.count %]" value="[% HTML.escape(row.chargenumber) %]"> |
108 |
<input type="hidden" name="bestbefore_[% loop.count %]" value="[% HTML.escape(row.bestbefore) %]"> |
|
106 | 109 |
[%- END %] |
107 | 110 |
</table> |
108 | 111 |
</p> |
templates/webpages/generic/select_part_master.html | ||
---|---|---|
20 | 20 |
[% IF has_charge %] |
21 | 21 |
<th class="listheading"><translate>Charge number</translate></th> |
22 | 22 |
[% END %] |
23 |
[% IF has_bestbefore %] |
|
24 |
<th class="listheading"><translate>Best Before</translate></th> |
|
25 |
[% END %] |
|
23 | 26 |
[% IF has_ean %] |
24 | 27 |
<th class="listheading"><translate>EAN</translate></th> |
25 | 28 |
[% END %] |
... | ... | |
49 | 52 |
[% HTML.escape(part.chargenumber) %] |
50 | 53 |
</td> |
51 | 54 |
[% END %] |
55 |
[% IF has_bestbefore %] |
|
56 |
<td> |
|
57 |
<input type="hidden" name="new_bestbefore_id_[% loop.count %]" value="[% HTML.escape(part.bestbefore_id) %]"> |
|
58 |
<input type="hidden" name="new_bestbefore_[% loop.count %]" value="[% HTML.escape(part.bestbefore) %]"> |
|
59 |
[% HTML.escape(part.bestbefore) %] |
|
60 |
</td> |
|
61 |
[% END %] |
|
52 | 62 |
[% IF has_ean %] |
53 | 63 |
<td> |
54 | 64 |
<input type="hidden" name="new_ean_[% loop.count %]" value="[% HTML.escape(part.ean) %]"> |
templates/webpages/wh/journal_filter_master.html | ||
---|---|---|
104 | 104 |
<th align="right" nowrap><translate>Charge Number</translate>:</th> |
105 | 105 |
<td><input name="chargenumber" size=40></td> |
106 | 106 |
</tr> |
107 |
<tr> |
|
108 |
<th align="right" nowrap><translate>Best Before</translate>:</th> |
|
109 |
<td> |
|
110 |
<input name="bestbefore" id="bestbefore" size="11" title="[% myconfig_dateformat %]"> |
|
111 |
<input type="button" name="b_bestbefore" id="bestbefore_trigger" value="?"> |
|
112 |
</td> |
|
113 |
</tr> |
|
107 | 114 |
<tr> |
108 | 115 |
<th align="right" nowrap><translate>Transfer Quantity</translate>:</th> |
109 | 116 |
<td> |
... | ... | |
159 | 166 |
<td nowrap><label for="l_partnumber"><translate>Part Number</translate></label></td> |
160 | 167 |
<td align="right"><input name="l_chargenumber" id="l_chargenumber" class="checkbox" type="checkbox" value="Y" checked></td> |
161 | 168 |
<td nowrap><label for="l_chargenumber"><translate>Charge Number</translate></label></td> |
169 |
<td align="right"><input name="l_bestbefore" id="l_bestbefore" class="checkbox" type="checkbox" value="Y" checked></td> |
|
170 |
<td nowrap><label for="l_bestbefore"><translate>Best Before</translate></label></td> |
|
162 | 171 |
</tr> |
163 | 172 |
<tr> |
164 | 173 |
<td align="right"><input name="l_trans_id" id="l_trans_id" class="checkbox" type="checkbox" value="Y"></td> |
... | ... | |
199 | 208 |
|
200 | 209 |
<script type="text/javascript"> |
201 | 210 |
<!-- |
211 |
Calendar.setup( { |
|
212 |
inputField : "bestbefore", |
|
213 |
ifFormat :"[% myconfig_jsc_dateformat %]", |
|
214 |
align : "BR", |
|
215 |
button : "bestbefore_trigger" |
|
216 |
}); |
|
217 |
|
|
202 | 218 |
Calendar.setup( { |
203 | 219 |
inputField : "fromdate", |
204 | 220 |
ifFormat :"[% myconfig_jsc_dateformat %]", |
templates/webpages/wh/removal_parts_selection_master.html | ||
---|---|---|
34 | 34 |
<th class="listheading"><translate>Part Number</translate></th> |
35 | 35 |
<th class="listheading"><translate>Part Description</translate></th> |
36 | 36 |
<th class="listheading"><translate>Charge Number</translate></th> |
37 |
<th class="listheading"><translate>Best Before</translate></th> |
|
37 | 38 |
<th class="listheading"><translate>EAN</translate></th> |
38 | 39 |
<th class="listheading"><translate>Available qty</translate></th> |
39 | 40 |
<th class="listheading"><translate>Removal qty</translate></th> |
... | ... | |
46 | 47 |
<input type="hidden" name="partnumber_[% loop.count %]" value="[% HTML.escape(row.partnumber) %]"> |
47 | 48 |
<input type="hidden" name="partdescription_[% loop.count %]" value="[% HTML.escape(row.partdescription) %]"> |
48 | 49 |
<input type="hidden" name="chargenumber_[% loop.count %]" value="[% HTML.escape(row.chargenumber) %]"> |
50 |
<input type="hidden" name="bestbefore_[% loop.count %]" value="[% HTML.escape(row.bestbefore) %]"> |
|
49 | 51 |
<input type="hidden" name="ean_[% loop.count %]" value="[% HTML.escape(row.ean) %]"> |
50 | 52 |
<td>[% HTML.escape(row.bindescription) %]</td> |
51 | 53 |
<td>[% HTML.escape(row.partnumber) %]</td> |
52 | 54 |
<td>[% HTML.escape(row.partdescription) %]</td> |
53 | 55 |
<td>[% HTML.escape(row.chargenumber) %]</td> |
56 |
<td>[% HTML.escape(row.bestbefore) %]</td> |
|
54 | 57 |
<td>[% HTML.escape(row.ean) %]</td> |
55 | 58 |
<td>[% HTML.escape(row.qty) %]</td> |
56 | 59 |
<td> |
templates/webpages/wh/report_filter_master.html | ||
---|---|---|
104 | 104 |
<th align="right" nowrap><translate>Charge Number</translate>:</th> |
105 | 105 |
<td><input name="chargenumber" size=40></td> |
106 | 106 |
</tr> |
107 |
<tr> |
|
108 |
<th align="right" nowrap><translate>Best Before</translate>:</th> |
|
109 |
<td> |
|
110 |
<input name="bestbefore" id="bestbefore" size="11" title="[% myconfig_dateformat %]"> |
|
111 |
<input type="button" name="b_bestbefore" id="bestbefore_trigger" value="?"> |
|
112 |
</td> |
|
113 |
</tr> |
|
107 | 114 |
<tr> |
108 | 115 |
<th align="right" nowrap><translate>Qty in stock</translate>:</th> |
109 | 116 |
<td> |
... | ... | |
147 | 154 |
<td nowrap><label for="l_partnumber"><translate>Part Number</translate></label></td> |
148 | 155 |
<td align="right"><input name="l_chargenumber" id="l_chargenumber" class="checkbox" type="checkbox" value="Y" checked></td> |
149 | 156 |
<td nowrap><label for="l_chargenumber"><translate>Charge Number</translate></label></td> |
157 |
<td align="right"><input name="l_bestbefore" id="l_bestbefore" class="checkbox" type="checkbox" value="Y" checked></td> |
|
158 |
<td nowrap><label for="l_bestbefore"><translate>Best Before</translate></label></td> |
|
150 | 159 |
</tr> |
151 | 160 |
|
152 | 161 |
<tr><td colspan="4"><hr noshade height="1"></td></tr> |
... | ... | |
174 | 183 |
</p> |
175 | 184 |
</form> |
176 | 185 |
|
186 |
<script type="text/javascript"> |
|
187 |
<!-- |
|
188 |
Calendar.setup( { |
|
189 |
inputField : "bestbefore", |
|
190 |
ifFormat :"[% myconfig_jsc_dateformat %]", |
|
191 |
align : "BR", |
|
192 |
button : "bestbefore_trigger" |
|
193 |
}); |
|
194 |
//--> |
|
195 |
</script> |
|
196 |
|
|
177 | 197 |
</body> |
178 | 198 |
</html> |
templates/webpages/wh/transfer_parts_selection_master.html | ||
---|---|---|
66 | 66 |
<th class="listheading"><translate>Part Number</translate></th> |
67 | 67 |
<th class="listheading"><translate>Part Description</translate></th> |
68 | 68 |
<th class="listheading"><translate>Charge Number</translate></th> |
69 |
<th class="listheading"><translate>Best Before</translate></th> |
|
69 | 70 |
<th class="listheading"><translate>EAN</translate></th> |
70 | 71 |
<th class="listheading"><translate>Available qty</translate></th> |
71 | 72 |
<th class="listheading" colspan="2"><translate>Transfer qty</translate></th> |
... | ... | |
79 | 80 |
<input type="hidden" name="partnumber_[% loop.count %]" value="[% HTML.escape(row.partnumber) %]"> |
80 | 81 |
<input type="hidden" name="partdescription_[% loop.count %]" value="[% HTML.escape(row.partdescription) %]"> |
81 | 82 |
<input type="hidden" name="chargenumber_[% loop.count %]" value="[% HTML.escape(row.chargenumber) %]"> |
83 |
<input type="hidden" name="bestbefore_[% loop.count %]" value="[% HTML.escape(row.bestbefore) %]"> |
|
82 | 84 |
<input type="hidden" name="ean_[% loop.count %]" value="[% HTML.escape(row.ean) %]"> |
83 | 85 |
<td>[% HTML.escape(row.bindescription) %]</td> |
84 | 86 |
<td>[% HTML.escape(row.partnumber) %]</td> |
85 | 87 |
<td>[% HTML.escape(row.partdescription) %]</td> |
86 | 88 |
<td>[% HTML.escape(row.chargenumber) %]</td> |
89 |
<td>[% HTML.escape(row.bestbefore) %]</td> |
|
87 | 90 |
<td>[% HTML.escape(row.ean) %]</td> |
88 | 91 |
<td>[% HTML.escape(row.qty) %]</td> |
89 | 92 |
<td><input name="qty_[% loop.count %]" size="8" style="text-align: right"></td> |
templates/webpages/wh/warehouse_selection_assembly_master.html | ||
---|---|---|
105 | 105 |
<td><input name="chargenumber" size="30" value="[% HTML.escape(chargenumber) %]"></td> |
106 | 106 |
</tr> |
107 | 107 |
|
108 |
<tr> |
|
109 |
<th align="right" nowrap><translate>Best Before</translate></th> |
|
110 |
<td> |
|
111 |
<input name="bestbefore" id="bestbefore" size="11" value="[% HTML.escape(bestbefore) %]" title="[% myconfig_dateformat %]"> |
|
112 |
<input type="button" name="b_bestbefore" id="bestbefore_trigger" value="?"> |
|
113 |
</td> |
|
114 |
</tr> |
|
115 |
|
|
108 | 116 |
<tr> |
109 | 117 |
<th align="right" nowrap><translate>Quantity</translate></th> |
110 | 118 |
<td> |
... | ... | |
131 | 139 |
</p> |
132 | 140 |
</form> |
133 | 141 |
|
142 |
<script type="text/javascript"> |
|
143 |
<!-- |
|
144 |
Calendar.setup( { |
|
145 |
inputField : "bestbefore", |
|
146 |
ifFormat :"[% myconfig_jsc_dateformat %]", |
|
147 |
align : "BR", |
|
148 |
button : "bestbefore_trigger" |
|
149 |
}); |
|
150 |
//--> |
|
151 |
</script> |
|
152 |
|
|
134 | 153 |
</body> |
135 | 154 |
</html> |
templates/webpages/wh/warehouse_selection_master.html | ||
---|---|---|
118 | 118 |
<th align="right" nowrap><translate>Charge number</translate></th> |
119 | 119 |
<td><input name="chargenumber" size="30"></td> |
120 | 120 |
</tr> |
121 |
|
|
122 |
<tr> |
|
123 |
<th align="right" nowrap><translate>Best Before</translate></th> |
|
124 |
<td> |
|
125 |
<input name="bestbefore" id="bestbefore" size="11" title="[% myconfig_dateformat %]"> |
|
126 |
<input type="button" name="b_bestbefore" id="bestbefore_trigger" value="?"> |
|
127 |
</td> |
|
128 |
</tr> |
|
129 |
|
|
121 | 130 |
<tr> |
122 | 131 |
<th align="right" nowrap><translate>EAN</translate></th> |
123 | 132 |
<td><input name="ean" size="30"></td> |
... | ... | |
130 | 139 |
</p> |
131 | 140 |
</form> |
132 | 141 |
|
142 |
<script type="text/javascript"> |
|
143 |
<!-- |
|
144 |
Calendar.setup( { |
|
145 |
inputField : "bestbefore", |
|
146 |
ifFormat :"[% myconfig_jsc_dateformat %]", |
|
147 |
align : "BR", |
|
148 |
button : "bestbefore_trigger" |
|
149 |
}); |
|
150 |
//--> |
|
151 |
</script> |
|
152 |
|
|
133 | 153 |
</body> |
134 | 154 |
</html> |
templates/webpages/wh/warehouse_selection_stock_master.html | ||
---|---|---|
104 | 104 |
<th align="right" nowrap><translate>Charge number</translate></th> |
105 | 105 |
<td><input name="chargenumber" size="30" value="[% HTML.escape(chargenumber) %]"></td> |
106 | 106 |
</tr> |
107 |
|
|
108 |
<tr> |
|
109 |
<th align="right" nowrap><translate>Best Before</translate></th> |
|
110 |
<td> |
|
111 |
<input name="bestbefore" id="bestbefore" size="11" value="[% HTML.escape(bestbefore) %]" title="[% myconfig_dateformat %]"> |
|
112 |
<input type="button" name="b_bestbefore" id="bestbefore_trigger" value="?"> |
|
113 |
</td> |
|
114 |
</tr> |
|
115 |
|
|
107 | 116 |
<tr> |
108 | 117 |
<th align="right" nowrap><translate>EAN</translate></th> |
109 | 118 |
<td><input name="ean" size="30" value="[% HTML.escape(ean) %]"></td> |
... | ... | |
135 | 144 |
</p> |
136 | 145 |
</form> |
137 | 146 |
|
147 |
<script type="text/javascript"> |
|
148 |
<!-- |
|
149 |
Calendar.setup( { |
|
150 |
inputField : "bestbefore", |
|
151 |
ifFormat :"[% myconfig_jsc_dateformat %]", |
|
152 |
align : "BR", |
|
153 |
button : "bestbefore_trigger" |
|
154 |
}); |
|
155 |
//--> |
|
156 |
</script> |
|
157 |
|
|
138 | 158 |
</body> |
139 | 159 |
</html> |
Auch abrufbar als: Unified diff
Funktionalität für Mindesthaltbarkeitsdatum hinzugefügt.