1 package SL::PriceSource::Customer;
4 use parent qw(SL::PriceSource::Base);
7 use SL::PriceSource::Discount;
8 use SL::Locale::String;
10 sub name { 'customer_discount' }
12 sub description { t8('Customer Discount') }
14 sub available_prices { }
16 sub available_discounts {
17 my ($self, %params) = @_;
19 return unless $self->record->is_sales;
20 return unless $self->record->customer;
21 return unless $self->record->customer->discount != 0;
23 SL::PriceSource::Discount->new(
24 discount => $self->record->customer->discount,
25 spec => $self->record->customer->id,
26 description => t8('Customer Discount'),
27 price_source => $self,
31 sub price_from_source {
32 my ($self, $source, $spec) = @_;
34 my $customer = SL::DB::Customer->load_cached($spec);
37 return SL::PriceSource::Discount->new(
38 missing => t8('Could not load this customer'),
39 price_source => $self,
43 if (!$self->record->customer) {
44 return SL::PriceSource::Discount->new(
45 discount => $customer->discount,
46 spec => $customer->id,
47 description => t8('Customer Discount'),
48 price_source => $self,
49 invalid => t8('This discount is only valid in sales documents'),
53 if ($customer->id != $self->record->customer->id) {
54 return SL::PriceSource::Discount->new(
55 discount => $customer->discount,
56 spec => $customer->id,
57 description => t8('Customer Discount'),
58 price_source => $self,
59 invalid => t8('This discount is only valid for customer #1', $customer->full_description),
63 return SL::PriceSource::Discount->new(
64 discount => $customer->discount,
65 spec => $customer->id,
66 description => t8('Customer Discount'),
67 price_source => $self,