Merge branch 'b-3.6.1' of ../kivitendo-erp_20220811
[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 available_discounts { }
24
25 sub price_from_source {
26   my ($self, $source, $spec) = @_;
27
28     $spec eq 'sellprice' ? $self->make_sellprice
29   : $spec eq 'lastcost'  ? $self->make_lastcost
30   : $spec eq 'listprice' ? $self->make_listprice
31   : do { die "unknown spec '$spec'" };
32 }
33
34 sub discount_from_source { }
35
36 sub best_price {
37   $_[0]->record->is_sales
38   ? $_[0]->make_sellprice
39   : $_[0]->make_lastcost
40 }
41
42 sub best_discount { }
43
44 sub unit_mul {
45   $_[0]->record_item ? $_[0]->record_item->unit_multiplier : 1
46 }
47
48 sub make_sellprice {
49   my ($self) = @_;
50
51   return SL::PriceSource::Price->new(
52     price        => $self->part->sellprice * $self->unit_mul,
53     spec         => 'sellprice',
54     description  => t8('Sellprice'),
55     price_source => $self,
56   );
57 }
58
59 sub make_listprice {
60   my ($self) = @_;
61
62   return SL::PriceSource::Price->new(
63     price        => $self->part->listprice * $self->unit_mul,
64     spec         => 'listprice',
65     description  => t8('List Price'),
66     price_source => $self,
67   );
68 }
69
70 sub make_lastcost {
71   my ($self) = @_;
72
73   return SL::PriceSource::Price->new(
74     price        => $self->part->lastcost * $self->unit_mul,
75     spec         => 'lastcost',
76     description  => t8('Lastcost'),
77     price_source => $self,
78     priority     => 2,
79   );
80 }
81
82 1;