1 package SL::DB::DeliveryOrderItem;
7 use Rose::DB::Object::Helpers qw(as_tree strip);
9 use SL::DB::MetaSetup::DeliveryOrderItem;
10 use SL::DB::Manager::DeliveryOrderItem;
11 use SL::DB::Helper::ActsAsList;
12 use SL::DB::Helper::LinkedRecords;
13 use SL::DB::Helper::RecordLink qw(RECORD_ITEM_ID RECORD_ITEM_TYPE_REF);
14 use SL::DB::Helper::RecordItem;
15 use SL::DB::Helper::CustomVariables (
16 sub_module => 'delivery_order_items',
20 class => 'SL::DB::Part',
26 __PACKAGE__->meta->add_relationship(
27 delivery_order_stock_entries => {
28 type => 'one to many',
29 class => 'SL::DB::DeliveryOrderItemsStock',
30 column_map => { id => 'delivery_order_item_id' },
32 with_objects => [ 'inventory' ]
37 __PACKAGE__->meta->initialize;
39 __PACKAGE__->configure_acts_as_list(group_by => [qw(delivery_order_id)]);
44 my ($class, $source, %params) = @_;
46 my %allowed_sources = map { $_ => 1 } qw(
47 SL::DB::ReclamationItem
49 SL::DB::DeliveryOrderItem
51 unless( $allowed_sources{ref $source} ) {
52 croak("Unsupported source object type '" . ref($source) . "'");
55 my @custom_variables = map { _clone_cvar_for_delivery_order_item($_) } @{ $source->custom_variables };
58 if (ref($source) eq 'SL::DB::ReclamationItem') {
59 map { $item_args{$_} = $source->$_ } # {{{ for vim folds
61 active_discount_source
80 $item_args{custom_variables} = \@custom_variables;
82 } elsif (ref($source) eq 'SL::DB::OrderItem') {
83 map { $item_args{$_} = $source->$_ } # {{{ for vim folds
85 active_discount_source
106 $item_args{custom_variables} = \@custom_variables;
107 $item_args{ordnumber} = ref($source->record) eq 'SL::DB::Order' ? $source->record->ordnumber : $source->ordnumber;
109 } elsif (ref($source) eq 'SL::DB::DeliveryOrderItem') {
110 map { $item_args{$_} = $source->$_ } # {{{ for vim folds
112 active_discount_source
133 $item_args{custom_variables} = \@custom_variables;
137 my $item = $class->new(%item_args);
139 unless ($params{no_linked_records}) {
140 $item->{ RECORD_ITEM_ID() } = $source->id;
141 $item->{ RECORD_ITEM_TYPE_REF() } = ref $source;
147 sub _clone_cvar_for_delivery_order_item {
150 my $cloned = $_->clone_and_reset;
151 $cloned->sub_module('delivery_order_items');
156 sub record { goto &delivery_order }
157 sub record_id { goto &delivery_order_id }
159 sub displayable_delivery_order_info {
160 my ($self, $dec) = @_;
164 $self->delivery_order->presenter->sales_delivery_order(display => 'inline')
165 . " " . $::form->format_amount(\%::myconfig, $self->qty, $dec) . " " . $self->unit
166 . " (" . $self->delivery_order->transdate->to_kivitendo . ")";
169 sub effective_project {
172 $self->project // $self->delivery_order->globalproject;
183 SL::DB::DeliveryOrderItem Model for the 'delivery_order_items' table
187 This is a standard Rose::DB::Object based model and can be used as one.
193 =item C<displayable_delivery_order_info DEC>
195 Returns a string with information about the delivery order item in relation to
196 its delivery order, specifically
198 * the (HTML-linked) delivery order number
200 * the qty and unit of the part in the delivery order
202 * the date of the delivery order
204 Doesn't include any part information, it is assumed that is already shown elsewhere.
206 The method takes an optional argument "dec" which determines how many decimals to
207 round to, as used by format_amount.
209 SL::DB::Manager::DeliveryOrderItem->get_first->displayable_delivery_order_info(0);
210 # 201601234 5 Stck (12.12.2016)
216 G. Richardson E<lt>grichardson@kivitendo-premium.deE<gt>