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

use Carp;

use Data::Dumper;
use Date::Calc;

use lib '/app/tools/common/lib';
use Common::Assert;

use lib '/app/tools/rps/lib';
use RPS::Statement::Mechanical::CA::StatementTrackList;
use RPS::Statement::Mechanical::CA::StatementTransactionList;
use RPS::Statement::Mechanical::CA::StatementPublisherList;
use RPS::Statement::Mechanical::CA::BaseStatement;
use RPS::DB::Item::CAMechanicalStatement;
use RPS::Payor::Payor;

use base 'RPS::Statement::Mechanical::CA::BaseStatement';


sub _init
{
    my ($self, %args) = @_;

    $self->{_focusPublisherID} = $args{focusPublisherID};

    $self->SUPER::_init(%args);

    return $self;
}



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

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

    my $mechanicalStatementID = $props->{mechanical_statement_id};
    assert($mechanicalStatementID);

    $self->{NumLines} = Common::FormObject::Scalar->new(value => $self->_numLines($mechanicalStatementID));


    if ($self->{Publisher}->IsAdmin()
     || $self->{Publisher}->IsAgency())
    {
        $self->{MechanicalStatementPublisherList} = $self->_getStatementPublisherList($mechanicalStatementID, $self->{_focusPublisherID});
    }
    else
    {
        # Load the list of statement lines.
        #
        $self->{MechanicalStatementTrackList} = $self->_getStatementTrackList($mechanicalStatementID);
    }

    $self->{MechanicalStatementTransactionList} = $self->_getStatementTransactionList($mechanicalStatementID);

    $self->{Payor} = RPS::Payor::Payor->new(payorID => $props->{payor_id}, loadSubs => 0);



    # jpk - transaction date is supposed to be the date this statement is submitted to hfa.
    #      So, we'll just use the current date.
    #
    my (undef,undef,undef,$mday,$mon,$year,undef,undef,$isdst)=localtime(time);
    my $now = sprintf("%4d%02d%02d", $year+1900, $mon+1, $mday);
    $self->{TransactionDate}        = Common::FormObject::Scalar->new(value => $now, readOnly => 1);
}


sub _numLines
{
    my ($self, $id) = @_;
    return RPS::DB::Item::CAMechanicalStatementItem->GetNumItemsByStatementID($id);
}

sub _getStatementPublisherList
{
    my ($self, $statementID, $focusPublisherID) = @_;

    return RPS::Statement::Mechanical::CA::StatementPublisherList->new
    (
        mechanicalStatementID => $statementID,
        focusPublisherID => $focusPublisherID,
    );
}

sub _getStatementTrackList
{
    my ($self, $statementID) = @_;
    return RPS::Statement::Mechanical::CA::StatementTrackList->new(mechanicalStatementID => $statementID);
}

sub _getStatementTransactionList
{
    my ($self, $statementID) = @_;
    return RPS::Statement::Mechanical::CA::StatementTransactionList->new(mechanicalStatementID => $statementID);
}

sub _calculateReportingPeriod
{
    my ($startDate, $endDate) = @_;

    my ($startYear, $startMonth, $startDay) = split('-', $startDate);
    my ($endYear, $endMonth, $endDay) = split('-', $endDate);

    my ($dy, $dm, $dd) = Date::Calc::Delta_YMD($startYear, $startMonth, $startDay, $endYear, $endMonth, $endDay);

    my $months = (12 * $dy) + $dm;
    if ($dd > 0)
    {
        $months++;
    }

    # Good ole' harry fox assumes the year is >= 2000.
    #
    my $period = sprintf("%02d%02d%02d", $months, $endMonth, ($endYear - 2000));
    return $period;
}


###
1;#
###
