7850a6445576a8355885cb56631b29109a408f01
[kivitendo-erp.git] / SL / DB / DeliveryOrderItem.pm
1 package SL::DB::DeliveryOrderItem;
2
3 use strict;
4
5 use SL::DB::MetaSetup::DeliveryOrderItem;
6 use SL::DB::Helper::ActsAsList;
7 use SL::DB::Helper::LinkedRecords;
8 use SL::DB::Helper::RecordItem;
9 use SL::DB::Helper::CustomVariables (
10   sub_module  => 'delivery_order_items',
11   cvars_alias => 1,
12   overloads   => {
13     parts_id => {
14       class => 'SL::DB::Part',
15       module => 'IC',
16     }
17   },
18 );
19
20 __PACKAGE__->meta->make_manager_class;
21
22 __PACKAGE__->meta->add_relationship(
23   delivery_order_stock_entries => {
24     type         => 'one to many',
25     class        => 'SL::DB::DeliveryOrderItemsStock',
26     column_map   => { id => 'delivery_order_item_id' },
27     manager_args => {
28       with_objects => [ 'inventory' ]
29     },
30   },
31 );
32
33 __PACKAGE__->meta->initialize;
34
35 __PACKAGE__->configure_acts_as_list(group_by => [qw(delivery_order_id)]);
36
37 # methods
38
39 sub record { goto &delivery_order }
40
41 sub displayable_delivery_order_info {
42   my ($self, $dec) = @_;
43
44   $dec //= 2;
45
46   $self->delivery_order->presenter->sales_delivery_order(display => 'inline')
47          . " " . $::form->format_amount(\%::myconfig, $self->qty, $dec) . " " . $self->unit
48          . " (" . $self->delivery_order->transdate->to_kivitendo . ")";
49 };
50
51 sub effective_project {
52   my ($self) = @_;
53
54   $self->project // $self->delivery_order->globalproject;
55 }
56
57 __END__
58
59 =pod
60
61 =encoding utf-8
62
63 =head1 NAME
64
65 SL::DB::DeliveryOrderItem Model for the 'delivery_order_items' table
66
67 =head1 SYNOPSIS
68
69 This is a standard Rose::DB::Object based model and can be used as one.
70
71 =head1 METHODS
72
73 =over 4
74
75 =item C<displayable_delivery_order_info DEC>
76
77 Returns a string with information about the delivery order item in relation to
78 its delivery order, specifically
79
80 * the (HTML-linked) delivery order number
81
82 * the qty and unit of the part in the delivery order
83
84 * the date of the delivery order
85
86 Doesn't include any part information, it is assumed that is already shown elsewhere.
87
88 The method takes an optional argument "dec" which determines how many decimals to
89 round to, as used by format_amount.
90
91   SL::DB::Manager::DeliveryOrderItem->get_first->displayable_delivery_order_info(0);
92   # 201601234 5 Stck (12.12.2016)
93
94 =back
95
96 =head1 AUTHORS
97
98 G. Richardson E<lt>grichardson@kivitendo-premium.deE<gt>
99
100 =cut
101
102 1;