#------------------------------------------------------------
# Copyright (C) 2006 RoyaltyShare, Inc.   All Rights Reserved
# $Id$
#------------------------------------------------------------
package RPS::DB::Item::CAPublisherAccount;
use strict;
use warnings;
use lib '/app/tools/common/lib';
use Common::DB::Item;
use Common::DB::ItemCollection;
use Common::Assert;
use base 'Common::DB::Item';

use constant kTable => 'ca_publisher_account';
use constant kDB    => Common::DB::Item::kClientDB();

sub GetByPublisherID {
    my ( $class, $publisherID ) = @_;
    assert($publisherID);

    my $sql = "SELECT * FROM " . kTable . " WHERE ca_publisher_id = " . $class->quote($publisherID);
    return $class->GetAll($sql);
}

sub GetByPayorPublisherID {
    my ( $class, $payorID, $publisherID ) = @_;
    assert($payorID);
    assert($publisherID);

    my $sql = "SELECT * FROM " . kTable . " WHERE ca_publisher_id = " . $class->quote($publisherID) . " AND payor_id = " . $class->quote($payorID);
    return $class->GetAll($sql);
}

sub GetAllWithPendingTransactions {
    my ( $class, $payorID, $publisherID ) = @_;

    my $sql =
      "SELECT * FROM " . kTable . " WHERE finance_account_id in (select finance_account_id from pending_transaction where processed = 0)";
    if ($payorID) {
        $sql .= " AND payor_id = " . $class->quote($payorID);
    }
    if ($publisherID) {
        $sql .= " AND ca_publisher_id = " . $class->quote($publisherID);
    }

    return $class->GetAll($sql);
}

sub GetAllActiveOrOnHoldPublisherByPayorID {
    my ( $class, $payorID ) = @_;
    assert($payorID);

    $payorID = $class->quote($payorID);
    my $sql = qq/
        SELECT pa.*
        FROM ca_publisher_account AS pa
        LEFT JOIN ca_publisher AS p ON pa.ca_publisher_id = p.ca_publisher_id
        WHERE 1 = 1
            AND p.status != 0
            AND pa.payor_id = $payorID
            AND pa.finance_account_id in (
                SELECT finance_account_id FROM pending_transaction WHERE processed = 0
            )
    /;

    return $class->GetAll($sql);
}


1;
