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

use strict;
use warnings;
use Carp;

use Data::Dumper;

use lib '/app/tools/common/lib';

use lib '/app/tools/rps/lib';

use RPS::License::CA::TrackLicense;
use RPS::DB::Item::CAMechanicalStatementItem;

use RPS::DB::Item::Album;
use RPS::DB::Item::Product;
use RPS::DB::Item::CAStatRate;

use RPS::Statement::Mechanical::StatementItem;
use base 'RPS::Statement::Mechanical::StatementItem';


sub _getTrackLicense
{
    my ($self, $trackLicenseID) = @_;
    return RPS::License::CA::TrackLicense->new(trackLicenseID => $trackLicenseID);
}

sub _getCurrencyCode
{
    my ($self) = @_;
    return 'CAD';
}

sub _propertiesFromDB
{
    my ($self, $hrProperties, $id) = @_;

    my $dbItem = RPS::DB::Item::CAMechanicalStatementItem->Lookup(ca_mechanical_statement_item_id => $id);
    $self->_propertiesFromDBItem($hrProperties, $dbItem);
}


sub _propertiesFromDBItem
{
	my ($self, $hrProperties, $dbItem) = @_;

    $hrProperties->{mechanical_statement_item_id}   = $dbItem->ca_mechanical_statement_item_id;
    $hrProperties->{mechanical_statement_id}        = $dbItem->ca_mechanical_statement_id;
    $hrProperties->{track_license_id}               = $dbItem->ca_track_license_id;
    $hrProperties->{product_id}                     = $dbItem->product_id;
    $hrProperties->{issue_stat_rate_id}             = $dbItem->issue_stat_rate_id;
    $hrProperties->{sale_stat_rate_id}              = $dbItem->sale_stat_rate_id;
    $hrProperties->{applied_stat_rate_id}           = $dbItem->applied_stat_rate_id;
    $hrProperties->{sales}                          = $dbItem->sales;
    $hrProperties->{returns}                        = $dbItem->returns;
    $hrProperties->{previous_carryover}             = $dbItem->previous_carryover;
    $hrProperties->{carryover}                      = $dbItem->carryover;
    $hrProperties->{gross_units}                    = $dbItem->gross_units;
    $hrProperties->{net_units}                      = $dbItem->net_units;
    $hrProperties->{reserved}                       = $dbItem->reserved;
    $hrProperties->{liquidated}                     = $dbItem->liquidated;
    $hrProperties->{base_rate}                      = $dbItem->base_rate;
    $hrProperties->{net_rate}                       = $dbItem->net_rate;
    $hrProperties->{total}                          = $dbItem->total;
    $hrProperties->{amount_paid}                    = $dbItem->amount_paid;
    $hrProperties->{upc}                            = $dbItem->upc;
    $hrProperties->{isrc}                           = $dbItem->isrc;
    $hrProperties->{service}                        = $dbItem->service;
    $hrProperties->{hfa_reporting_period}           = $dbItem->hfa_reporting_period;
}


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

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

    # Some HFA-related stuff
    #
    # Use the applied stat rate ID if we have one, otherwise use the sale stat rate id.
    #
    my $statRateIDToUse = $props->{applied_stat_rate_id};
    if (! $statRateIDToUse)
    {
        $statRateIDToUse = $props->{sale_stat_rate_id};
    }
    my $ratePeriod = _getRatePeriod($statRateIDToUse);
    $self->{RatePeriod}                 = Common::FormObject::Scalar::String->new(value => $ratePeriod, maxlength => 32);


    my $configurationCode;
    if (RPS::DB::Item::Product::kProductTypeDigitalTrack == $self->{ProductTypeID})
    {
        $configurationCode = 'SP';
    }
    elsif (RPS::DB::Item::Product::kProductTypeDigital == $self->{ProductTypeID})
    {
        $configurationCode = 'DP';
    }
    else
    {
        # assume physical - I don't see a code for this in the spec.
        #
        $configurationCode = 'CD';
    }
    $self->{ConfigurationCode}          = Common::FormObject::Scalar::String->new(value => $configurationCode);
}



my $gRatePeriodMap;
sub _getRatePeriod
{
    my ($id) = @_;

    return "" unless $id;

    if (! $gRatePeriodMap)
    {
        $gRatePeriodMap = RPS::DB::Item::StatRate->GetRatePeriodMap();
    }

    return $gRatePeriodMap->{$id};
}


###
1;#
###



