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;