X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;ds=sidebyside;f=SL%2FDB%2FInventory.pm;h=8557719d54b5afa647d3a88ef3ed486a8e1212d0;hb=ded6910ee829a64b950b32f4452afcbefcd06adb;hp=98d505d703dbedcad8ea5fbdeddc959a417f4fa1;hpb=6cf3f7762efd40bee49a2b8f11bb4ab6915d9071;p=kivitendo-erp.git diff --git a/SL/DB/Inventory.pm b/SL/DB/Inventory.pm index 98d505d70..8557719d5 100644 --- a/SL/DB/Inventory.pm +++ b/SL/DB/Inventory.pm @@ -4,10 +4,81 @@ package SL::DB::Inventory; use strict; +use Carp; +use DateTime; +use SL::DBUtils qw(selectrow_query); use SL::DB::MetaSetup::Inventory; +use SL::DB::Manager::Inventory; -# Creates get_all, get_all_count, get_all_iterator, delete_all and update_all. -__PACKAGE__->meta->make_manager_class; +__PACKAGE__->meta->initialize; +__PACKAGE__->before_save(\&_before_save_create_trans_id); +__PACKAGE__->before_save(\&_before_save_set_shippingdate); +__PACKAGE__->before_save(\&_before_save_set_employee); + +# part accessor is badly named +sub part { + goto &parts; +} + +sub new_from { + my ($class, $obj) = @_; + + if ('SL::DB::DeliveryOrderItemsStock' eq ref $obj) { + return $class->new_from_delivery_order_stock($obj); + } + + croak "unknown obj type (@{[ ref $obj ]}) for SL::DB::Inventory::new_from"; +} + +sub new_from_delivery_order_stock { + my ($class, $stock) = @_; + + my $project = $stock->delivery_order_item->effective_project; + + return $class->new( + delivery_order_items_stock_id => $stock->id, + parts_id => $stock->delivery_order_item->parts_id, + qty => $stock->unit_obj->convert_to($stock->qty => $stock->delivery_order_item->part->unit_obj), + warehouse_id => $stock->warehouse_id, + bin_id => $stock->bin_id, + chargenumber => $stock->chargenumber, + bestbefore => $stock->bestbefore, + project_id => $project ? $project->id : undef, + # trans_type - not set here, set in controller + ); +} + +sub _before_save_create_trans_id { + my ($self, %params) = @_; + + return 1 if $self->trans_id; + + my ($trans_id) = selectrow_query($::form, SL::DB->client->dbh, qq|SELECT nextval('id')|); + + $self->trans_id($trans_id); + + return 1; +} + +sub _before_save_set_shippingdate { + my ($self, %params) = @_; + + return 1 if $self->shippingdate; + + $self->shippingdate(DateTime->now); + + return 1; +} + +sub _before_save_set_employee { + my ($self, %params) = @_; + + return 1 if $self->employee_id; + + $self->employee(SL::DB::Manager::Employee->current); + + return 1; +} 1;