Revision a88f2c21
Von Bernd Bleßmann vor 4 Monaten hinzugefügt
SL/Controller/StockCountingReconciliation.pm | ||
---|---|---|
14 | 14 |
use SL::DB::StockCountingItem; |
15 | 15 |
use SL::Helper::Flash qw(flash_later); |
16 | 16 |
use SL::Helper::Number qw(_format_total); |
17 |
use SL::JSON; |
|
18 | 17 |
use SL::Locale::String qw(t8); |
19 |
use SL::Presenter::Tag qw(checkbox_tag); |
|
20 | 18 |
use SL::ReportGenerator; |
21 | 19 |
use SL::WH; |
22 | 20 |
|
... | ... | |
84 | 82 |
sub action_reconcile { |
85 | 83 |
my ($self) = @_; |
86 | 84 |
|
87 |
my @transfer_errors; |
|
88 |
|
|
89 |
foreach my $selection (@{$::form->{ids}}) { |
|
90 |
my $ids = SL::JSON::from_json($selection); |
|
91 |
my @counting_item_ids = split ',', $ids; |
|
92 |
my $counting_items = SL::DB::Manager::StockCountingItem->get_all(query => [id => \@counting_item_ids]); |
|
93 |
|
|
94 |
my $counted_qty = sum0 map { $_->qty } @$counting_items; |
|
95 |
my $stocked_qty = $counting_items->[0]->part->get_stock(bin_id => $counting_items->[0]->bin_id); |
|
96 |
|
|
97 |
my $comment = t8('correction from stock counting (counting "#1")', $counting_items->[0]->counting->name); |
|
98 |
|
|
99 |
my $transfer_qty = $counted_qty - $stocked_qty; |
|
100 |
my $src_or_dst = $transfer_qty < 0? 'src' : 'dst'; |
|
101 |
$transfer_qty = abs($transfer_qty); |
|
102 |
|
|
103 |
my $transfer_error; |
|
104 |
# do stock |
|
105 |
$::form->throw_on_error(sub { |
|
106 |
eval { |
|
107 |
WH->transfer({ |
|
108 |
parts => $counting_items->[0]->part, |
|
109 |
$src_or_dst.'_bin' => $counting_items->[0]->bin, |
|
110 |
$src_or_dst.'_wh' => $counting_items->[0]->bin->warehouse, |
|
111 |
qty => $transfer_qty, |
|
112 |
unit => $counting_items->[0]->part->unit, |
|
113 |
transfer_type => 'correction', |
|
114 |
comment => $comment, |
|
115 |
}); |
|
116 |
1; |
|
117 |
} or do { $transfer_error = ref($EVAL_ERROR) eq 'SL::X::FormError' ? $EVAL_ERROR->error : $EVAL_ERROR; } |
|
118 |
}); |
|
119 |
|
|
120 |
push @transfer_errors, $transfer_error if $transfer_error; |
|
121 |
} |
|
122 |
|
|
123 |
if (@transfer_errors) { |
|
124 |
flash_later('error', @transfer_errors); |
|
85 |
my $counting_id = $::form->{filter}->{counting_id}; |
|
86 |
my $counting_items = SL::DB::Manager::StockCountingItem->get_all(query => [counting_id => $counting_id]); |
|
87 |
|
|
88 |
my $counted_qty = sum0 map { $_->qty } @$counting_items; |
|
89 |
my $stocked_qty = $counting_items->[0]->part->get_stock(bin_id => $counting_items->[0]->bin_id); |
|
90 |
|
|
91 |
my $comment = t8('correction from stock counting (counting "#1")', $counting_items->[0]->counting->name); |
|
92 |
|
|
93 |
my $transfer_qty = $counted_qty - $stocked_qty; |
|
94 |
my $src_or_dst = $transfer_qty < 0? 'src' : 'dst'; |
|
95 |
$transfer_qty = abs($transfer_qty); |
|
96 |
|
|
97 |
my $transfer_error; |
|
98 |
# do stock |
|
99 |
$::form->throw_on_error(sub { |
|
100 |
eval { |
|
101 |
WH->transfer({ |
|
102 |
parts => $counting_items->[0]->part, |
|
103 |
$src_or_dst.'_bin' => $counting_items->[0]->bin, |
|
104 |
$src_or_dst.'_wh' => $counting_items->[0]->bin->warehouse, |
|
105 |
qty => $transfer_qty, |
|
106 |
unit => $counting_items->[0]->part->unit, |
|
107 |
transfer_type => 'correction', |
|
108 |
comment => $comment, |
|
109 |
}); |
|
110 |
1; |
|
111 |
} or do { $transfer_error = ref($EVAL_ERROR) eq 'SL::X::FormError' ? $EVAL_ERROR->error : $EVAL_ERROR; } |
|
112 |
}); |
|
113 |
|
|
114 |
if ($transfer_error) { |
|
115 |
flash_later('error', $transfer_error); |
|
125 | 116 |
} else { |
126 | 117 |
flash_later('info', t8('successfully reconciled')); |
127 | 118 |
} |
... | ... | |
158 | 149 |
my @columns = qw(ids counting part bin qty stocked); |
159 | 150 |
|
160 | 151 |
my %column_defs = ( |
161 |
ids => { raw_header_data => checkbox_tag("", id => "check_all", checkall => "[data-checkall=1]"), |
|
162 |
align => 'center', |
|
163 |
raw_data => sub { $_[0]->correction_inventory_id ? '' : checkbox_tag("ids[]", value => SL::JSON::to_json($_[0]->id), "data-checkall" => 1) } }, |
|
164 | 152 |
counting => { text => t8('Stock Counting'), sub => sub { $_[0]->counting->name }, }, |
165 | 153 |
counted_at => { text => t8('Counted At'), sub => sub { $_[0]->counted_at_as_timestamp }, }, |
166 | 154 |
qty => { text => t8('Qty'), sub => sub { $_[0]->qty_as_number }, align => 'right' }, |
Auch abrufbar als: Unified diff
Zwischeninventur-Abgleich: nur eine Zählung gleichzeitig abgleichen können