CreatePeriodicInvoices-Job: for anstelle von map für reine Nebeneffekt-Schleifen
[kivitendo-erp.git] / SL / PriceSource / Vendor.pm
1 package SL::PriceSource::Vendor;
2
3 use strict;
4 use parent qw(SL::PriceSource::Base);
5
6 use SL::DB::Vendor;
7 use SL::PriceSource::Price;
8 use SL::Locale::String;
9
10 sub name { 'vendor_discount' }
11
12 sub description { t8('Vendor Discount') }
13
14 sub available_prices { }
15
16 sub available_discounts {
17   my ($self, %params) = @_;
18
19   return if     $self->record->is_sales;
20   return unless $self->record->vendor;
21   return unless $self->record->vendor->discount != 0;
22
23   SL::PriceSource::Vendor->new(
24     discount     => $self->record->vendor->discount,
25     spec         => $self->record->vendor->id,
26     description  => t8('Vendor Discount'),
27     price_source => $self,
28   );
29 }
30
31 sub price_from_source {
32   my ($self, $source, $spec) = @_;
33
34   my $vendor = SL::DB::Vendor->load_cached($spec);
35
36   if (!$vendor) {
37     return SL::PriceSource::Discount->new(
38       missing      => t8('Could not load this vendor'),
39       price_source => $self,
40     )
41   }
42
43   if (!$self->record->vendor) {
44     return SL::PriceSource::Discount->new(
45       discount     => $vendor->discount,
46       spec         => $vendor->id,
47       description  => t8('Vendor Discount'),
48       price_source => $self,
49       invalid      => t8('This discount is only valid in purchase documents'),
50     )
51   }
52
53   if ($vendor->id != $self->record->vendor->id) {
54     return SL::PriceSource::Discount->new(
55       discount     => $vendor->discount,
56       spec         => $vendor->id,
57       description  => t8('Vendor Discount'),
58       price_source => $self,
59       invalid      => t8('This discount is only valid for vendor #1', $vendor->full_description),
60     )
61   }
62
63   return SL::PriceSource::Discount->new(
64     discount     => $vendor->discount,
65     spec         => $vendor->id,
66     description  => t8('Vendor Discount'),
67     price_source => $self,
68   );
69 }
70
71
72 sub best_price { }
73
74 sub best_discount {
75   &available_discounts;
76 }
77
78 1;
79