#------------------------------------------------------------
# Copyright (C) 2006 RoyaltyShare, Inc.   All Rights Reserved
# $Id$
#------------------------------------------------------------
package RPS::License::CA::TrackLicenseWithLiquidationSchedule;

use strict;
use warnings;
use Data::Dumper;
use Carp;
use Date::Calc qw( Date_to_Days Decode_Date_US );

use lib '/app/tools/common/lib';
use Common::Assert;
use Common::Util qw(decodeDateMysql);
use Common::Log;

use lib '/app/tools/rps/lib';
use RPS::License::BaseTrackLicense;
use RPS::License::ReserveLiquidationList;
use RPS::Publisher::CA::Publisher;
use RPS::DB::Item::CATrackLicense;
use RPS::DB::Item::CALicenseReserve;
use RPS::DB::Item::ReserveLiquidation;
use RPS::DB::Item::CAMechanicalStatementItem;
use RPS::DB::Item::CAPublisherTrackCrossedLicenseAccount;

use RPS::License::ReserveLiquidationList;
use RPS::DB::Item::ReserveLiquidation;
use RPS::Finance::Account;

use RPS::License::CA;
use base 'RPS::License::CA::TrackLicense';

sub _initProperties {
    my ( $self, $props ) = @_;

    $self->SUPER::_initProperties($props);

    my $id = $self->TrackLicenseID();

    $self->{ReserveLiquidationList} = RPS::License::ReserveLiquidationList->new(
        id   => $id,
        type => RPS::DB::Item::ReserveLiquidation::kTypeCAPublishingLicense,
    );

    $self->{FinanceAccount} = RPS::Finance::Account->new( accountID => $props->{finance_account_id} );

    # !!! We also need the CrossedAccount, so we can display the balance.
    # !!! But we won't have one if this is all brand new (and we don't have a publisher id yet, for example).
    #
    #
    if ( $self->PublisherID() ) {
        my $crossedAccountMap = RPS::DB::Item::CAPublisherTrackCrossedLicenseAccount->Lookup(
            ca_publisher_id => $self->PublisherID(),
            payor_id        => $self->PayorID(),
            track_id        => $self->TrackID(),
        );
        if ( $crossedAccountMap && $crossedAccountMap->finance_account_id ) {
            $self->{CrossedFinanceAccount} = RPS::Finance::Account->new( accountID => $crossedAccountMap->finance_account_id );
        }
    }

}

sub save {
    my ($self) = @_;

    # Need to stash the liquidation schedule away here because the one in $self
    # gets overwritten on save.
    #
    my $schedule = $self->{ReserveLiquidationList};

    $self->SUPER::save();

    # let's save the liquidation list
    #
    foreach my $liq ( @{ $schedule->getList() } ) {

        if ( defined $liq && $liq->Percent() ) {

            $liq->ID( $self->TrackLicenseID() );
            $liq->Type(RPS::DB::Item::ReserveLiquidation::kTypeCAPublishingLicense);
        }
    }

    $schedule->save();
}

###
1;    #
###
