5 use List::MoreUtils qw(uniq);
10 our @ISA = qw(Exporter);
11 our @EXPORT = qw(get_credit_remaining get_all_email_addresses);
13 sub get_credit_remaining {
15 my ($type, $arap) = ref $vc eq 'SL::DB::Customer' ? ('customer', 'ar') : ('vendor', 'ap');
18 my $credit_remaining = $vc->creditlimit || 0;
21 SELECT SUM(${arap}.amount - ${arap}.paid)
25 my ($amount_unpaid) = selectfirst_array_query($::form, $vc->dbh, $query, $vc->id);
26 $credit_remaining -= $amount_unpaid;
30 (SELECT e.buy FROM exchangerate e
31 WHERE e.currency_id = o.currency_id
32 AND e.transdate = o.transdate)
34 WHERE (o.${type}_id = ?)
35 AND NOT COALESCE(o.quotation, FALSE)
36 AND NOT COALESCE(o.closed, FALSE)
40 if ($params{exclude_order_id}) {
41 $query .= qq| AND (o.id <> ?)|;
42 push @values, $params{exclude_order_id};
45 my $sth = prepare_execute_query($::form, $vc->dbh, $query, $vc->id, @values);
47 while (my ($amount, $exch) = $sth->fetchrow_array) {
48 $credit_remaining -= $amount * ($exch || 1);
52 return $credit_remaining;
55 sub get_all_email_addresses {
58 my $is_sales = ref $self eq 'SL::DB::Customer';
63 push @addresses, $self->$_ for qw(email cc bcc);
65 push @addresses, $self->$_ for qw(delivery_order_mail invoice_mail);
68 # additional billing addresses
70 foreach my $additional_billing_address (@{ $self->additional_billing_addresses }) {
71 push @addresses, $additional_billing_address->$_ for qw(email);
76 foreach my $contact (@{ $self->contacts }) {
77 push @addresses, $contact->$_ for qw(cp_email cp_privatemail);
81 foreach my $shipto (@{ $self->shipto }) {
82 push @addresses, $shipto->$_ for qw(shiptoemail);
85 # remove empty ones and duplicates
86 @addresses = grep { $_ } @addresses;
87 @addresses = uniq @addresses;