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

use base 'Common::DB::Item';

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

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

    my $dbo = Common::RSApp::GetClientDB();

    # Find sales hitting the licenses linked to the specified publisher or
    # any sub-publishers
    my $sql = 'SELECT sale_id, licenses FROM ' . kTable
        . ' WHERE run_id='. $runID
        . " AND ( publisher_id NOT IN (select publisher_id from publisher where status = 0)) "
        . " AND ( publisher_id=" . $publisherID
        . "    OR publisher_id IN (SELECT publisher_id FROM publisher WHERE ( "

        . "       (agent_id=" . $publisherID . " OR (agent_id IS NULL OR agent_id=0) AND admin_id=". $publisherID . ") )"
        . "       OR "

        . "       ((agent_id IS NULL OR agent_id=0) AND (admin_id IS NULL OR admin_id=0) AND publisher_id=". $publisherID ." ) "
        . "        AND status != 0)"
        . " )"
        ;   

    my $sth = $dbo->DoCmd($sql);
    my %licenseMap;
    while ( my( $saleID, $licenses ) = $sth->fetchrow_array() ) { 
        foreach my $licenseID (split ',', $licenses) {
            $licenseMap{$saleID}{$licenseID} = 1;
        }   
    }   

    my %saleLicenseMap;
    foreach my $saleID (keys %licenseMap) {
        my $licenses = join(',', (keys %{$licenseMap{$saleID}}));
        $saleLicenseMap{$saleID} = $licenses;
    }   

    return \%saleLicenseMap;
}

sub DeleteAllForRun {
    my ( $class, $runID ) = @_;
    assert($runID);

    my $dbo = Common::RSApp::GetClientDB();

    my $sql = 'DELETE FROM ' . kTable . " WHERE run_id=$runID";
    $dbo->DoCmd($sql);
}

1;

