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

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

use constant kAdjustmentTypeCCompNewLicense => 1;
    #
    # This code is used for adjustments triggered by a new license
    # being added to a product, causing previously unallocated
    # funds to be adjusted.



sub GetLastStatementAdjustment
{
    my ($class, $statementItemID) = @_;

# JPK - We apparently cannot rely on 'previous_ca_mechanical_statement_adjustment_item_id' anymore.
# Going to re-write this query to sort by run id instead to find the last adjustment.
#
#    my $sql = "select * from ca_mechanical_statement_adjustment_item where original_ca_mechanical_statement_item_id=$statementItemID "
#            . " and ca_mechanical_statement_adjustment_item_id NOT IN "
#            . " ("
#            . "  select previous_ca_mechanical_statement_adjustment_item_id from ca_mechanical_statement_adjustment_item "
#            . "  where original_ca_mechanical_statement_item_id=$statementItemID"
#            . " )";
    my $sql = " select ca_mechanical_statement_adjustment_item.*, ca_mechanical_run.ca_mechanical_run_id from ca_mechanical_statement_adjustment_item"
            . " join ca_mechanical_statement using (ca_mechanical_statement_id)"
            . " join ca_mechanical_run using (ca_mechanical_run_id)"
            . "where original_ca_mechanical_statement_item_id=$statementItemID"
            . " and ca_mechanical_run.status in (0,2,5)"
            . " order by ca_mechanical_run.ca_mechanical_run_id desc";

    my $collection = $class->GetAll($sql);

    return undef unless $collection->hasNext();

# JPK - Don't need this assertion anymore.
#    assert($collection->size == 1);

    my $item = $collection->next;
    return $item;
}


sub GetByMechanicalStatementID
{
    my ($class, $statementID) = @_;

    my $sql = "SELECT * FROM ca_mechanical_statement_adjustment_item WHERE ca_mechanical_statement_id=$statementID";
    return $class->GetAll($sql);
}


sub GetByMechanicalStatementIDPublisherID
{
    my ($class, $statementID, $publisherID) = @_;

    my $sql = "SELECT * FROM ca_mechanical_statement_adjustment_item WHERE ca_mechanical_statement_id=$statementID"
     . " AND ca_track_license_id in (select ca_track_license_id from ca_track_license where ca_publisher_id=$publisherID)";
    return $class->GetAll($sql);
}


sub GetByMechanicalStatementIDTrackLicenseID
{
    my ($class, $statementID, $trackLicenseID) = @_;

    my $sql = "SELECT * FROM ca_mechanical_statement_adjustment_item"
            . " WHERE ca_mechanical_statement_id=$statementID"
            . " AND ca_track_license_id=$trackLicenseID";

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

sub DeleteByMechanicalStatementID
{
    my ($class, $id) = @_;

	my $sql = "DELETE from ca_mechanical_statement_adjustment_item WHERE ca_mechanical_statement_id=$id";
	my $dbo = Common::RSApp::GetClientDB();
    $dbo->DoCmd($sql);
}


1;
