Projekt

Allgemein

Profil

Herunterladen (4,34 KB) Statistiken
| Zweig: | Markierung: | Revision:
82515b2d Sven Schöling
package SL::DB::DeliveryOrderItem;

use strict;

1d13e16e Bernd Bleßmann
use Carp;

9b0937a9 Tamino Steinert
use Rose::DB::Object::Helpers qw(as_tree strip);

82515b2d Sven Schöling
use SL::DB::MetaSetup::DeliveryOrderItem;
b945837f Bernd Bleßmann
use SL::DB::Manager::DeliveryOrderItem;
3954d14b Bernd Bleßmann
use SL::DB::Helper::ActsAsList;
ca808f20 Geoffrey Richardson
use SL::DB::Helper::LinkedRecords;
1904d8c6 Sven Schöling
use SL::DB::Helper::RecordItem;
e1bf173b Sven Schöling
use SL::DB::Helper::CustomVariables (
03b6d9ab Bernd Bleßmann
sub_module => 'delivery_order_items',
e1bf173b Sven Schöling
cvars_alias => 1,
overloads => {
5a7ae14c Sven Schöling
parts_id => {
class => 'SL::DB::Part',
module => 'IC',
}
e1bf173b Sven Schöling
},
);
82515b2d Sven Schöling
201c9038 Geoffrey Richardson
__PACKAGE__->meta->add_relationship(
delivery_order_stock_entries => {
type => 'one to many',
class => 'SL::DB::DeliveryOrderItemsStock',
column_map => { id => 'delivery_order_item_id' },
manager_args => {
with_objects => [ 'inventory' ]
},
},
);

f1d475ff Moritz Bunkus
__PACKAGE__->meta->initialize;

3954d14b Bernd Bleßmann
__PACKAGE__->configure_acts_as_list(group_by => [qw(delivery_order_id)]);

82515b2d Sven Schöling
# methods

9b5b900b Tamino Steinert
sub new_from {
my ($class, $source, %params) = @_;

my %allowed_sources = map { $_ => 1 } qw(
SL::DB::ReclamationItem
SL::DB::OrderItem
);
unless( $allowed_sources{ref $source} ) {
croak("Unsupported source object type '" . ref($source) . "'");
}

my @custom_variables = map { _clone_cvar_for_delivery_order_item($_) } @{ $source->custom_variables };

my %item_args;
if (ref($source) eq 'SL::DB::ReclamationItem') {
map { $item_args{$_} = $source->$_ } # {{{ for vim folds
qw(
active_discount_source
active_price_source
base_qty
description
discount
lastcost
longdescription
parts_id
position
price_factor
price_factor_id
pricegroup_id
project_id
qty
reqdate
sellprice
serialnumber
unit
);
$item_args{custom_variables} = \@custom_variables;
# }}} for vim folds
} elsif (ref($source) eq 'SL::DB::OrderItem') {
map { $item_args{$_} = $source->$_ } # {{{ for vim folds
qw(
active_discount_source
active_price_source
base_qty
cusordnumber
description
discount
lastcost
longdescription
marge_price_factor
parts_id
price_factor
price_factor_id
project_id
qty
reqdate
sellprice
serialnumber
transdate
unit
);
$item_args{custom_variables} = \@custom_variables;
$item_args{ordnumber} = ref($source->record) eq 'SL::DB::Order' ? $source->record->ordnumber : $source->ordnumber;
# }}} for vim folds
}

my $item = $class->new(%item_args);

my $source_table = '';
if( ref($source) eq 'SL::DB::OrderItem' ) {
$source_table = 'orderitems';
} elsif ( ref($source) eq 'SL::DB::ReclamationItem' ) {
$source_table = 'reclamation_items';
}
$item->{"converted_from_". $source_table ."_id"} = $_->{id};

return $item;
}

sub _clone_cvar_for_delivery_order_item {
my ($cvar) = @_;

my $cloned = $_->clone_and_reset;
$cloned->sub_module('delivery_order_items');

return $cloned;
}

073ee541 Geoffrey Richardson
sub record { goto &delivery_order }
44aceacb Tamino Steinert
sub record_id { goto &delivery_order_id }
073ee541 Geoffrey Richardson
19c3be79 Geoffrey Richardson
sub displayable_delivery_order_info {
my ($self, $dec) = @_;

$dec //= 2;

0aa885f4 Sven Schöling
$self->delivery_order->presenter->sales_delivery_order(display => 'inline')
19c3be79 Geoffrey Richardson
. " " . $::form->format_amount(\%::myconfig, $self->qty, $dec) . " " . $self->unit
. " (" . $self->delivery_order->transdate->to_kivitendo . ")";
};

b24583b6 Sven Schöling
sub effective_project {
my ($self) = @_;

e73048f9 Sven Schöling
$self->project // $self->delivery_order->globalproject;
b24583b6 Sven Schöling
}

19c3be79 Geoffrey Richardson
__END__

=pod

=encoding utf-8

=head1 NAME

SL::DB::DeliveryOrderItem Model for the 'delivery_order_items' table

=head1 SYNOPSIS

This is a standard Rose::DB::Object based model and can be used as one.

=head1 METHODS

=over 4

=item C<displayable_delivery_order_info DEC>

Returns a string with information about the delivery order item in relation to
its delivery order, specifically

* the (HTML-linked) delivery order number

* the qty and unit of the part in the delivery order

* the date of the delivery order

Doesn't include any part information, it is assumed that is already shown elsewhere.

The method takes an optional argument "dec" which determines how many decimals to
round to, as used by format_amount.

SL::DB::Manager::DeliveryOrderItem->get_first->displayable_delivery_order_info(0);
# 201601234 5 Stck (12.12.2016)

=back

=head1 AUTHORS

G. Richardson E<lt>grichardson@kivitendo-premium.deE<gt>

=cut

82515b2d Sven Schöling
1;