Inventory::new_from aus DeliveryOrderItemsStock Objekten
[kivitendo-erp.git] / SL / DB / Inventory.pm
1 # This file has been auto-generated only because it didn't exist.
2 # Feel free to modify it at will; it will not be overwritten automatically.
3
4 package SL::DB::Inventory;
5
6 use strict;
7 use Carp;
8 use DateTime;
9
10 use SL::DBUtils qw(selectrow_query);
11 use SL::DB::MetaSetup::Inventory;
12 use SL::DB::Manager::Inventory;
13
14 __PACKAGE__->meta->initialize;
15
16 __PACKAGE__->before_save(\&_before_save_create_trans_id);
17 __PACKAGE__->before_save(\&_before_save_set_shippingdate);
18 __PACKAGE__->before_save(\&_before_save_set_employee);
19
20 # part accessor is badly named
21 sub part {
22   goto &parts;
23 }
24
25 sub new_from {
26   my ($class, $obj) = @_;
27
28   if ('SL::DB::DeliveryOrderItemsStock' eq ref $obj) {
29     return $class->new_from_delivery_order_stock($obj);
30   }
31
32   croak "unknown obj type (@{[ ref $obj ]}) for SL::DB::Inventory::new_from";
33 }
34
35 sub new_from_delivery_order_stock {
36   my ($stock) = @_;
37
38   my $project = $stock->delivery_order_item->effective_project;
39
40   return __PACKAGE__->new(
41     delivery_order_items_stock_id => $stock->id,
42     parts_id                      => $stock->delivery_order_item->parts_id,
43     qty                           => $stock->unit->convert_to($stock->qty => $stock->delivery_order_item->part->unit_obj),
44     unit                          => $stock->delivery_order_item->part->unit_obj,
45     warehouse_id                  => $stock->warehouse_id,
46     bin_id                        => $stock->bin_id,
47     chargenumber                  => $stock->chargenumber,
48     bestbefore                    => $stock->bestbefore,
49     project_id                    => $project ? $project->id : undef,
50     # trans_type - not set here, set in controller
51   );
52 }
53
54 sub _before_save_create_trans_id {
55   my ($self, %params) = @_;
56
57   return 1 if $self->trans_id;
58
59   my ($trans_id) = selectrow_query($::form, SL::DB->client->dbh, qq|SELECT nextval('id')|);
60
61   $self->trans_id($trans_id);
62
63   return 1;
64 }
65
66 sub _before_save_set_shippingdate {
67   my ($self, %params) = @_;
68
69   return 1 if $self->shippingdate;
70
71   $self->shippingdate(DateTime->now);
72
73   return 1;
74 }
75
76 sub _before_save_set_employee {
77   my ($self, %params) = @_;
78
79   return 1 if $self->emplyee_id;
80
81   $self->employee(SL::DB::Manager::Employee->current);
82
83   return 1;
84 }
85 1;