3f7c11d5d2bdfb5b0d39d03ae3fe49d64e68c8af
[kivitendo-erp.git] / SL / PriceSource / MasterData.pm
1 package SL::PriceSource::MasterData;
2
3 use strict;
4 use parent qw(SL::PriceSource::Base);
5
6 use SL::PriceSource::Price;
7 use SL::Locale::String;
8
9 sub name { 'master_data' }
10
11 sub description { t8('Master Data') }
12
13 sub available_prices {
14   my ($self, %params) = @_;
15
16   return () unless $self->part;
17
18   grep { $_->price > 0 } $self->record->is_sales
19     ? ($self->make_sellprice, $self->make_listprice)
20     : ($self->make_lastcost,  $self->make_listprice);
21 }
22
23 sub price_from_source {
24   my ($self, $source, $spec) = @_;
25
26     $spec eq 'sellprice' ? $self->make_sellprice
27   : $spec eq 'lastcost'  ? $self->make_lastcost
28   : $spec eq 'listprice' ? $self->make_listprice
29   : do { die "unknown spec '$spec'" };
30 }
31
32 sub best_price {
33   $_[0]->record->is_sales
34   ? $_[0]->make_sellprice
35   : $_[0]->make_lastcost
36 }
37
38 sub make_sellprice {
39   my ($self) = @_;
40
41   return SL::PriceSource::Price->new(
42     price        => $self->part->sellprice,
43     spec         => 'sellprice',
44     description  => t8('Sellprice'),
45     price_source => $self,
46   );
47 }
48
49 sub make_listprice {
50   my ($self) = @_;
51
52   return SL::PriceSource::Price->new(
53     price        => $self->part->listprice,
54     spec         => 'listprice',
55     description  => t8('List Price'),
56     price_source => $self,
57   );
58 }
59
60 sub make_lastcost {
61   my ($self) = @_;
62
63   return SL::PriceSource::Price->new(
64     price        => $self->part->lastcost,
65     spec         => 'lastcost',
66     description  => t8('Lastcost'),
67     price_source => $self,
68   );
69 }
70
71 1;