#------------------------------------------------------------
# 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;    #
###
