#------------------------------------------------------------
# Copyright (C) 2006 RoyaltyShare, Inc.   All Rights Reserved
#------------------------------------------------------------
package RPS::DB::Item::TrackContract;
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 => 'track_contract';
use constant kDB => Common::DB::Item::kClientDB();

use constant kStatusActive => 1;
use constant kStatusInactive => 2;





sub GetByContractIDAlbumID
{
	my ($class, $contractID, $albumID) = @_;
    assert($contractID);
    assert($albumID);

	my $sql = "SELECT * FROM ".kTable." WHERE artist_contract_id=$contractID"
     . " AND track_id IN (select track_id from track where album_id=$albumID)";

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

sub GetByTrackID
{
	my ($class, $trackID) = @_;
    assert($trackID);

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


sub GetByContractID
{
	my ($class, $contractID) = @_;
    assert($contractID);

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


sub GetByAlbumID
{
    my ($class, $albumID) = @_;
    assert($albumID);

    my $sql = "SELECT * FROM ".kTable." WHERE track_id IN "
     . " (SELECT track_id FROM track WHERE album_id=$albumID)";

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


sub GetCrossCollateralized
{
    my ($class) = @_;

    my $sql = "SELECT * FROM ".kTable." where cross_collateralized=1";

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

sub GetByPayorIDArtistIDAlbumID
{
    my ($class, $payorID, $artistPayeeID, $albumID) = @_;
    assert($payorID);
    assert($artistPayeeID);
    assert($albumID);

    my $sql = "SELECT * FROM ".kTable." WHERE track_id in (select track_id from track where album_id=$albumID)"
     . " AND artist_contract_id IN "
     . " (SELECT artist_contract_id FROM new_artist_contract WHERE artist_payee_id=$artistPayeeID AND payor_id=$payorID)";


	my $collection = $class->GetAll($sql);
    assert($collection->size < 2);

    return $collection->next;
}


sub HasBeenIncludedInRoyaltyRun
{
    my ($class, $trackContractID) = @_;

    my $item = $class->Lookup(track_contract_id => $trackContractID);
    return undef unless $item;

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

    my $sql = "SELECT COUNT(*) FROM artist_royalty_income_item INNER JOIN new_artist_contract_term USING (artist_contract_term_id) WHERE track_id=".$item->track_id." AND artist_contract_id=".$item->artist_contract_id;

    my $sth = $dbo->DoCmd($sql);
    my $hr = $sth->fetchrow_hashref();
    my $count = $hr->{"COUNT(*)"};
    return ($count > 0);
}


1;
