Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 554ddc07

Von Werner Hahn vor fast 2 Jahren hinzugefügt

  • ID 554ddc076d76286a87d7f6116f42d9be4cdea0ac
  • Vorgänger 2709dc1f
  • Nachfolger 4ac75385

Dispositionsmanager Zusätzliche Artikel des Lieferanten anzeigen

Unterschiede anzeigen:

SL/Controller/DispositionManager.pm
use SL::DB::PurchaseBasketItem;
use SL::PriceSource;
use SL::Locale::String qw(t8);
use SL::Helper::Flash qw(flash);
use Data::Dumper;
sub action_list_parts {
......
my $basket_part = SL::DB::PurchaseBasketItem->new(
parts_id => $part->id,
qty => $part->ordersize, # was ist wenn order_size < (rop-onhand) ist? sollte dann nicht (rop-onhand) genommen werden?
orderer => SL::DB::Manager::Employee->current;
orderer => SL::DB::Manager::Employee->current,
)->save;
}
$self->action_show_basket;
......
sub action_show_basket {
my ( $self ) = @_;
$::request->{layout}->add_javascripts('kivi.DispositionManager.js');
$::request->{layout}->add_javascripts('kivi.DispositionManager.js', 'kivi.PartDetail.js');
my $basket_items = SL::DB::Manager::PurchaseBasketItem->get_all( query => [ cleared => 'F' ], with_objects => [ 'part', 'part.makemodels' ]);
$self->_setup_show_basket_action_bar;
$self->render('disposition_manager/show_purchase_basket', BASKET_ITEMS => $basket_items, title => "Purchase basket" );
}
sub action_show_vendor_items {
my ( $self ) = @_;
my $makemodels_parts = SL::DB::Manager::Part->get_all( query => [ 'makemodels.make' => $::form->{v_id}, '!id' => ['5599'], ], sort_by => 'onhand', with_objects => [ 'makemodels' ]);
$self->render('disposition_manager/_show_vendor_parts', { layout => 0 }, MAKEMODEL_ITEMS => $makemodels_parts);
}
sub action_transfer_to_purchase_order {
my ( $self ) = @_;
require SL::DB::Order;
require SL::DB::OrderItem;
require SL::DB::Part;
require SL::DB::Vendor;
my @error_report;
unless (($::form->{ids} && scalar @{ $::form->{ids}}) || ( $::form->{vendor_part_ids} && scalar @{ $::form->{vendor_part_ids}})) {
die 'There are no items selected';
}
my $v_id = $::form->{vendor_ids}->[0] ;
my ($vendor, $employee);
$vendor = SL::DB::Manager::Vendor->find_by(id => $v_id) or die "Can't find vendor";
$employee = SL::DB::Manager::Employee->current or die "Can't find employee";
my $basket_items = SL::DB::Manager::PurchaseBasketItem->get_all( query => [ id => \@{ $::form->{ids} } ] );
my $basket_items;
$basket_items = SL::DB::Manager::PurchaseBasketItem->get_all( query => [ id => \@{ $::form->{ids} } ] ) if ($::form->{ids} && scalar @{ $::form->{ids}});
my $vendor_items;
$vendor_items = SL::DB::Manager::Part->get_all( query => [ id => \@{ $::form->{vendor_part_ids} } ] ) if ($::form->{vendor_part_ids} && scalar @{ $::form->{vendor_part_ids}});
# create order first so we have a record for PriceSource
my $order = SL::DB::Order->new(
......
my $i = 0;
my @items;
foreach my $basket_item ( @{ $basket_items } ) {
$i++;
my $mm = SL::DB::Manager::MakeModel->get_first( query => [ make => $vendor->id, parts_id => $basket_item->parts_id] );
my $current_order_item = SL::DB::OrderItem->new(
part => $basket_item->part,
description => $basket_item->part->description,
qty => $basket_item->qty || 1,
unit => $basket_item->part->unit,
position => $i,
);
if ($::form->{ids} && scalar @{ $::form->{ids}}) {
foreach my $basket_item ( @{ $basket_items } ) {
$i++;
my $current_order_item = SL::DB::OrderItem->new(
part => $basket_item->part,
description => $basket_item->part->description,
qty => $basket_item->part->min_order_qty || 1,
unit => $basket_item->part->unit,
position => $i,
orderer_id => $basket_item->orderer->id,
);
my $price_source = SL::PriceSource->new(record_item => $current_order_item, record => $order);
$current_order_item->sellprice($price_source->best_price->price);
$current_order_item->active_price_source($price_source->best_price->source);
push(@items, $current_order_item);
}
}
my $price_source = SL::PriceSource->new(record_item => $current_order_item, record => $order);
$current_order_item->sellprice($price_source->best_price->price);
$current_order_item->active_price_source($price_source->best_price->source);
push(@items, $current_order_item);
if ($::form->{vendor_part_ids} && scalar @{ $::form->{vendor_part_ids}}) {
foreach my $vendor_item ( @{ $vendor_items } ) {
$i++;
my $current_order_item = SL::DB::OrderItem->new(
part => $vendor_item,
description => $vendor_item->description,
qty => $vendor_item->min_order_qty || 1,
unit => $vendor_item->unit,
position => $i,
orderer_id => $employee->id,
);
my $price_source = SL::PriceSource->new(record_item => $current_order_item, record => $order);
$current_order_item->sellprice($price_source->best_price->price);
$current_order_item->active_price_source($price_source->best_price->source);
push(@items, $current_order_item);
}
}
$order->orderitems( [ @items ] );
$order->db->with_transaction( sub {
$order->calculate_prices_and_taxes;
$order->save;
......
$item->{custom_variables} = \@{ $item->cvars_by_config };
$item->save;
}
SL::DB::Manager::PurchaseBasketItem->delete_all( where => [ id => \@{ $::form->{ids} }]);
SL::DB::Manager::PurchaseBasketItem->delete_all( where => [ id => \@{ $::form->{ids} }]) if ($::form->{ids} && scalar @{ $::form->{ids}});
return 1;
}) || die "error: " . $order->db->error;
$self->redirect_to(controller => "oe.pl", action => 'edit', type => 'purchase_order', vc => 'vendor', id => $order->id);
......
$bar->add(
action => [
t8('Reload'),
submit => [ '#purchasebasket', { action => "DispositionManager/show_basket" } ],
link => $self->url_for(controller => 'DispositionManager', action => 'show_basket'),
],
action => [
t8('Action'),
......
Shows a list with parts which are in the basket.
This list can be filtered by vendor. Then you can create a purchase order.
When filtered by vendor, a table with the parts from the vendor of the purchase basket and
a table with all parts from the vendor will be shown. From there you can mark
the parts and create an order
=item C<action_transfer_to_purchase_order>
SL/DB/Part.pm
foreach my $mm ( @{$_[0]->makemodels} ){
my $vendor = SL::DB::Manager::Vendor->get_first( where => [ id => $mm->make ] );
my @tmp = ({ title => $vendor->name . " (" . $::form->format_amount(\%::myconfig, $mm->lastcost, 2) . ")", value => $vendor->{id} });
my @tmp = ({ title => $vendor->vendornumber . "--" .$vendor->name . " (" . $::form->format_amount(\%::myconfig, $mm->lastcost, 2) . ")", value => $vendor->{id} });
push @vendor_dd, @tmp;
}
return \@vendor_dd;
js/kivi.DispositionManager.js
namespace('kivi.DispositionManager', function(ns) {
ns.sort_vendors = function() {
ns.display_vendor_parts($('#vendor_id2').val());
$("table tr").each(function(index) {
if ( index !== 0 ) {
$row = $(this);
//alert( $row.find("select[name='vendor_ids[]']").val() + '!=' + $('#cv_id').val());
if( $row.find("select[name='vendor_ids[]']").val() != $('#cv_id').val()) {
if( $row.find("select[name='vendor_ids[]']").val() != $('#vendor_id2').val()) {
$row.remove();
}
}
});
}
ns.display_vendor_parts = function(vendor_id) {
var url = 'controller.pl?action=DispositionManager/show_vendor_items&v_id=' + vendor_id;
$('#vendor_parts').load(url);
}
ns.create_order = function() {
var data = $('#purchasebasket').serializeArray();
data.push({ name: 'action', value: 'DispositionManager/transfer_to_purchase_order' });
$.post("controller.pl", data, kivi.eval_json_result);
}
ns.show_detail_dialog = function(part_id,partnumber) {
if ( part_id && partnumber ) {
var title = kivi.t8('Details of article number "#1"',[partnumber]);
kivi.popup_dialog({
url: 'controller.pl',
data: {
action: 'Part/showdetails',
id : part_id,
},
id: 'detail_menu',
dialog: { title: title
, width: 1000
, height: 450
, modal: false }
});
}
return true;
};
});
sql/Pg-upgrade2/hmo_purchase_basket.sql
-- @tag: hmo_purchase_basket
-- @description: Änderungen HMO für Dispositionsmanager. Neue Spalte Besteller in orderitems und delivery_order_items
-- @depends: purchase_basket
-- @ignore: 0
ALTER TABLE purchase_basket_items DROP COLUMN description;
ALTER TABLE purchase_basket_items ADD COLUMN orderer_id INTEGER REFERENCES employee(id);
ALTER TABLE orderitems ADD COLUMN orderer_id INTEGER REFERENCES employee(id);
ALTER TABLE delivery_order_items ADD COLUMN orderer_id INTEGER REFERENCES employee(id);
templates/webpages/disposition_manager/_show_vendor_parts.html
[%- USE HTML -%][%- USE LxERP -%][%- USE L -%][%- USE T8 -%][% USE P %]
[% USE Dumper %]
<h2>[% 'All parts of vendor odered by onhand' | $T8 %]</h2>
<table width="100%">
<thead>
<tr class="listheading">
<th>[% 'Purchase basket' | $T8 %] </th>
<th>[% 'Partnumber' | $T8 %] </th>
<th>[% 'Description' | $T8 %] </th>
<th>[% 'Onhand / Ordered' | $T8 %] </th>
<th>[% 'Rop' | $T8 %] </th>
<th>[% 'Order quantity' | $T8 %] </th>
<th>[% 'Vendor' | $T8 %] </th>
</tr>
</thead>
<tbody>
[% FOREACH makemodel_item = MAKEMODEL_ITEMS %]
[% # Dumper.dump_html('TEST') %]
[% # Dumper.dump_html(basket_item) %]
[% SET select_size = basket_item.part.vendor_dropdown.size %]
<tr class="listrow">
<td>[% L.checkbox_tag('vendor_part_ids[+]', checked = '0', value=makemodel_item.id) %]</td>
<td>[% HTML.escape(makemodel_item.partnumber) %]
[% IF makemodel_item.id %]
<img class="odbuttons" onclick="kivi.DispositionManager.show_detail_dialog('[% makemodel_item.id %]','[% makemodel_item.partnumber %]')" src="image/icons/svg/information.svg"
title="[% 'Article details' | $T8 %]">
[% END %]
</td>
<td>[% HTML.escape(makemodel_item.description) %]</td>
<td class="numeric">[% makemodel_item.onhand_as_number %] / [% makemodel_item.get_ordered_qty %]</td>
<td class="numeric">[% makemodel_item.rop_as_number %] </td>
<td class="numeric">[% makemodel_item.qty_as_number %] </td>
<td>[% L.select_tag('vendor_ids[]', makemodel_item.vendor_dropdown, value_key = 'value', title_key = 'title', default = makemodel_item.makemodels.item(0).make, size = select_size, style='width: 350px;' ) %]</td>
</tr>
[% END %]
</tbody>
</table>
templates/webpages/disposition_manager/show_purchase_basket.html
<h1>[% title %]</h1>
[% # Dumper.dump_html(BASKET_ITEMS) %]
<form id="purchasebasket" style="margin:1em;">
[% P.customer_vendor.picker('vendor_id2', '', type='vendor', fat_set_item=1) %]<br>
<div>id from change: <span id='change3'></span></div>
[% L.hidden_tag('cv_id', '') %]
[% P.customer_vendor.picker('vendor_id2', '', type='vendor') %]<br>
<div>
<table id="baskettable" width="100%">
<thead>
<tr class="listheading">
<th>[% L.checkbox_tag('check_all') %][% 'Purchase basket' | $T8 %] </th>
<th>[% L.checkbox_tag("", id="check_all", checkall="[data-checkall=1]") %][% 'Purchase basket' | $T8 %] </th>
<th>[% 'Partnumber' | $T8 %] </th>
<th>[% 'Description' | $T8 %] </th>
<th>[% 'Onhand' | $T8 %] </th>
......
[% SET select_size = basket_item.part.vendor_dropdown.size %]
[% # IF !basket_item.part.get_ordered_qty(part.id) %]
<tr class="listrow">
<td>[% L.checkbox_tag('ids[+]', checked = '1', value=basket_item.id) %]</td>
<td>[% HTML.escape(basket_item.part.partnumber) %] </td>
<td>[% L.checkbox_tag('ids[+]', "data-checkall"=1, checked = '1', value=basket_item.id) %]</td>
<td>[% HTML.escape(basket_item.part.partnumber) %]
[% IF basket_item.part.id %]
<img class="odbuttons" onclick="kivi.DispositionManager.show_detail_dialog('[% basket_item.part.id %]','[% basket_item.part.partnumber %]')" src="image/icons/svg/information.svg"
title="[% 'Article details' | $T8 %]">
[% END %]
</td>
<td>[% HTML.escape(basket_item.part.description) %]</td>
<td class="numeric">[% basket_item.part.onhand_as_number %] </td>
<td class="numeric">[% basket_item.part.rop_as_number %] </td>
......
[% END %]
</tbody>
</table>
</div>
<hr>
<div id="vendor_parts"></div>
</form>
<hr>
<script type="text/javascript">
<!--
$('#vendor_id2').change(function() { $('#change3').html($('#vendor_id2').val()) })
$('#vendor_id2').on('set_item:CustomerVendorPicker', function(e,o) {
$('#cv_id').val(o.id)
$('#vendor_id2').change('set_item:CustomerVendorPicker', function(e,o) {
kivi.DispositionManager.sort_vendors();
})
$(function() {
$('#check_all').checkall('INPUT[name^="id"]');
});
-->
</script>

Auch abrufbar als: Unified diff