"alle" E-Mail-Adressen per Anhaken als Empfänger hinzufügen können
[kivitendo-erp.git] / SL / DB / VC.pm
1 package SL::DB::VC;
2
3 use strict;
4
5 use List::MoreUtils qw(uniq);
6 use SL::DBUtils;
7
8 require Exporter;
9
10 our @ISA    = qw(Exporter);
11 our @EXPORT = qw(get_credit_remaining get_all_email_addresses);
12
13 sub get_credit_remaining {
14   my $vc               = shift;
15   my ($type, $arap)    = ref $vc eq 'SL::DB::Customer' ? ('customer', 'ar') : ('vendor', 'ap');
16   my %params           = @_;
17
18   my $credit_remaining = $vc->creditlimit || 0;
19
20   my $query            = <<SQL;
21     SELECT SUM(${arap}.amount - ${arap}.paid)
22     FROM ${arap}
23     WHERE ${type}_id = ?
24 SQL
25   my ($amount_unpaid)  = selectfirst_array_query($::form, $vc->dbh, $query, $vc->id);
26   $credit_remaining   -= $amount_unpaid;
27
28   $query = <<SQL;
29     SELECT o.amount,
30       (SELECT e.buy FROM exchangerate e
31        WHERE e.currency_id = o.currency_id
32          AND e.transdate = o.transdate)
33     FROM oe o
34     WHERE (o.${type}_id = ?)
35       AND NOT COALESCE(o.quotation, FALSE)
36       AND NOT COALESCE(o.closed,    FALSE)
37 SQL
38
39   my @values;
40   if ($params{exclude_order_id}) {
41     $query .= qq| AND (o.id <> ?)|;
42     push @values, $params{exclude_order_id};
43   }
44
45   my $sth = prepare_execute_query($::form, $vc->dbh, $query, $vc->id, @values);
46
47   while (my ($amount, $exch) = $sth->fetchrow_array) {
48     $credit_remaining -= $amount * ($exch || 1);
49   }
50   $sth->finish;
51
52   return $credit_remaining;
53 }
54
55 sub get_all_email_addresses {
56   my ($self) = @_;
57
58   my $is_sales = ref $self eq 'SL::DB::Customer';
59
60   my @addresses;
61
62   # billing address
63   push @addresses, $self->$_ for qw(email cc bcc);
64   if ($is_sales) {
65     push @addresses, $self->$_ for qw(delivery_order_mail invoice_mail);
66   }
67
68   # additional billing addresses
69   if ($is_sales) {
70     foreach my $additional_billing_address (@{ $self->additional_billing_addresses }) {
71       push @addresses, $additional_billing_address->$_ for qw(email);
72     }
73   }
74
75   # contacts
76   foreach my $contact (@{ $self->contacts }) {
77     push @addresses, $contact->$_ for qw(cp_email cp_privatemail);
78   }
79
80   # shiptos
81   foreach my $shipto (@{ $self->shipto }) {
82     push @addresses, $shipto->$_ for qw(shiptoemail);
83   }
84
85   # remove empty ones and duplicates
86   @addresses = grep { $_ } @addresses;
87   @addresses = uniq @addresses;
88
89
90   return \@addresses;
91 }
92
93 1;