Revision 9854c20c
Von wernerh vor fast 2 Jahren hinzugefügt
SL/Controller/DispositionManager.pm | ||
---|---|---|
use SL::PriceSource;
|
||
use SL::Locale::String qw(t8);
|
||
use SL::Helper::Flash qw(flash);
|
||
use SL::DBUtils;
|
||
|
||
use Data::Dumper;
|
||
|
||
sub action_list_parts {
|
||
my ( $self ) = @_;
|
||
|
||
my $parts = $self->_get_parts;
|
||
my $parts_tmp;
|
||
for my $part(@{ $parts }) {
|
||
my $openitems = SL::DB::Manager::OrderItem->get_all(where => [ parts_id => $part->id, 'order.closed' => 0 ],
|
||
with_objects => ['order'],);
|
||
my ($not_delivered, $ordered) = 0;
|
||
for my $openitem (@{ $openitems }) {
|
||
if($openitem->order->type eq 'sales_order') {
|
||
$not_delivered += $openitem->qty - $openitem->shipped_qty;
|
||
} elsif ( $openitem->order->type eq 'purchase_order' ) {
|
||
$ordered += $openitem->qty - $openitem->delivered_qty;
|
||
}
|
||
}
|
||
$part->assign_attributes( gv => $ordered );
|
||
push @{ $parts_tmp }, $part;
|
||
}
|
||
$self->_setup_list_action_bar;
|
||
$self->render('disposition_manager/list_parts', title => t8('Parts short onhand'), PARTS => $parts_tmp);
|
||
$self->render('disposition_manager/list_parts', title => t8('Parts short onhand'), PARTS => $parts);
|
||
}
|
||
|
||
sub action_add_to_purchase_basket{
|
SL/DB/Manager/Part.pm | ||
---|---|---|
my $class = shift;
|
||
my $part_id = shift;
|
||
return () unless $part_id;
|
||
my $openitems = SL::DB::Manager::OrderItem->get_all(where => [ parts_id => $part_id, 'order.closed' => 0 ],
|
||
with_objects => ['order'],);
|
||
return () unless $openitems;
|
||
my %ordered;
|
||
my %delivered;
|
||
my $open = 0;
|
||
my $ordered_qty = 0;
|
||
my $delivered_qty = 0;
|
||
for my $openitem (@{ $openitems }) {
|
||
if($openitem->order->type eq 'purchase_order') {
|
||
$ordered_qty += $openitem->qty;
|
||
$delivered_qty += $openitem->delivered_qty;
|
||
}
|
||
}
|
||
if( $ordered_qty - $delivered_qty > 0 ) {
|
||
$open = $ordered_qty - $delivered_qty;
|
||
%ordered = ($part_id => $open);
|
||
} else {
|
||
$open = $ordered_qty - $delivered_qty;
|
||
%ordered = ($part_id => $open);
|
||
}
|
||
return %ordered;
|
||
|
||
my $query = <<SQL;
|
||
SELECT
|
||
sum(oi.qty) as sum
|
||
FROM
|
||
orderitems oi
|
||
LEFT OUTER JOIN oe o ON (oi.trans_id = o.id)
|
||
WHERE
|
||
( o.closed = 'F' OR
|
||
o.closed IS NULL) AND
|
||
oi.parts_id = ? AND
|
||
o.vendor_id IS NOT NULL
|
||
GROUP BY oi.parts_id
|
||
SQL
|
||
|
||
my ($ordered_qty) = selectrow_query($::form, $class->object_class->init_db->dbh, $query, $part_id);
|
||
return $ordered_qty;
|
||
}
|
||
|
||
sub _sort_spec {
|
SL/DB/Part.pm | ||
---|---|---|
|
||
__PACKAGE__->meta->initialize;
|
||
|
||
use Rose::Object::MakeMethods::Generic (
|
||
'scalar --get_set_init' => [ qw(onhandqty stockqty get_open_ordered_qty) ],
|
||
);
|
||
__PACKAGE__->attr_html('notes');
|
||
__PACKAGE__->attr_sorted({ unsorted => 'makemodels', position => 'sortorder' });
|
||
__PACKAGE__->attr_sorted({ unsorted => 'customerprices', position => 'sortorder' });
|
||
... | ... | |
__PACKAGE__->before_save('_before_save_set_partnumber');
|
||
__PACKAGE__->before_save('_before_save_set_assembly_weight');
|
||
|
||
sub onhandqty_as_number {
|
||
my ($self, $string) = @_;
|
||
$self->onhandqty($::form->parse_amount(\%::myconfig, $string)) if @_ > 1;
|
||
return $::form->format_amount(\%::myconfig, $self->onhandqty, 2);
|
||
}
|
||
|
||
sub init_onhandqty{
|
||
my ($self) = @_;
|
||
my $qty = SL::Helper::Inventory::get_onhand(part => $self->id);
|
||
return $qty;
|
||
}
|
||
|
||
sub stockqty_as_number {
|
||
my ($self, $string) = @_;
|
||
$self->stockqty($::form->parse_amount(\%::myconfig, $string)) if @_ > 1;
|
||
return $::form->format_amount(\%::myconfig, $self->stockqty, 2);
|
||
}
|
||
|
||
sub init_stockqty{
|
||
my ($self) = @_;
|
||
my $qty = SL::Helper::Inventory::get_stock(part => $self->id);
|
||
return $qty;
|
||
}
|
||
|
||
sub get_open_ordered_qty_as_number {
|
||
my ($self, $string) = @_;
|
||
$self->get_open_ordered_qty($::form->parse_amount(\%::myconfig, $string)) if @_ > 1;
|
||
return $::form->format_amount(\%::myconfig, $self->get_open_ordered_qty, 2);
|
||
}
|
||
|
||
sub init_get_open_ordered_qty {
|
||
my $self = shift;
|
||
my $result = SL::DB::Manager::Part->get_open_ordered_qty($self->id);
|
||
|
||
return $result;
|
||
}
|
||
#sub reservedqty_as_number {
|
||
# my ($self, $string) = @_;
|
||
# $self->reservedqty($::form->parse_amount(\%::myconfig, $string)) if @_ > 1;
|
||
# return $::form->format_amount(\%::myconfig, $self->reservedqty, $self->places);
|
||
#}
|
||
|
||
#sub init_onhandqty{
|
||
# my ($self) = @_;
|
||
# my $qty = get_onhand(part => $self->id);
|
||
# return $qty;
|
||
#}
|
||
>>>>>>> cf3ff322d1 (Einkaufshelfer/Dispositionsmanager bescheleunigt)
|
||
|
||
sub _before_save_set_partnumber {
|
||
my ($self) = @_;
|
||
|
||
... | ... | |
return $result{ $self->id };
|
||
}
|
||
|
||
sub get_open_ordered_qty {
|
||
my $self = shift;
|
||
my %result = SL::DB::Manager::Part->get_open_ordered_qty($self->id);
|
||
sub is_parts_first_order {
|
||
|
||
return $result{ $self->id };
|
||
my ($self, %params) = @_;
|
||
|
||
require SL::DB::OrderItem;
|
||
my $orders_count = SL::DB::Manager::OrderItem->get_all_count( where => [ %params ], with_objects => 'order' );
|
||
|
||
return $orders_count == 1 ? 1 : 0;
|
||
}
|
||
|
||
sub available_units {
|
templates/webpages/disposition_manager/list_parts.html | ||
---|---|---|
</tr>
|
||
</thead>
|
||
[% FOREACH part = PARTS %]
|
||
[% IF !part.gv %]
|
||
[% IF !part.get_open_ordered_qty %]
|
||
<tr class="listrow">
|
||
<td>[% IF part.makemodels.size %][% L.checkbox_tag('ids[+]', "data-checkall"=1, checked = '1', value=part.id) %][% ELSE %][% 'No Vendor' | $T8 %][% END %]</td>
|
||
<td>[% HTML.escape(part.partnumber) %]</td>
|
||
... | ... | |
</tr>
|
||
</thead>
|
||
[% FOREACH part = PARTS %]
|
||
[% IF part.gv %]
|
||
[% IF part.get_open_ordered_qty %]
|
||
<tr class="listrow">
|
||
<td>[% HTML.escape(part.partnumber) %]</td>
|
||
<td>[% HTML.escape(part.description) %] </td>
|
||
<td class="numeric">[% part.onhand_as_number %] </td>
|
||
<td class="numeric">[% part.rop_as_number %] </td>
|
||
<td class="numeric">[% part.gv %] </td>
|
||
<td class="numeric">[% part.get_open_ordered_qty_as_number %] </td>
|
||
</tr>
|
||
[% END %]
|
||
[% END %]
|
Auch abrufbar als: Unified diff
Einkaufshelfer/Dispositionsmanager bescheleunigt