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

use strict;
use Carp;
use Data::Dumper;

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

use lib '/app/tools/rps/lib';
use RPS::DB::Item::ArtistRoyaltyIncomeItem;
use RPS::DB::Item::Album;
use RPS::DB::Item::Track;

use Common::FormObject;
use base 'Common::FormObject';


sub _init
{
    my ($self, %args) = @_;
    my $timer = Common::Timer->new();

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

    my %properties;
    if ($args{_dbItem})
    {
        $self->_propertiesFromDBItem(\%properties, $args{_dbItem});
    }
    elsif ($args{artistRoyaltyIncomeItemID})
    {
		# I'm pretty sure we'll always be instantiating with _dbItem
		#
        $self->_propertiesFromDB(\%properties, $args{artistRoyaltyIncomeItemID});
    }
    else
    {
        $self->_propertiesFromDefaults(\%properties);
    }

    $self->_initProperties(\%properties);
    $self->_initSubs(\%properties);

    return $self;
}


sub _propertiesFromDB
{
    my ($self, $hrProperties, $id) = @_;
    my $timer = Common::Timer->new();

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


sub _propertiesFromDBItem
{
	my ($self, $hrProperties, $dbItem) = @_;
    my $timer = Common::Timer->new();

    $hrProperties->{artist_royalty_income_item_id}	= $dbItem->artist_royalty_income_item_id;
    $hrProperties->{artist_royalty_album_id}		= $dbItem->artist_royalty_album_id;
    $hrProperties->{album_id}						= $dbItem->album_id;
    $hrProperties->{track_id}						= $dbItem->track_id;
    $hrProperties->{artist_contract_term_id}		= $dbItem->artist_contract_term_id;
    $hrProperties->{income_source_id}				= $dbItem->income_source_id;
    $hrProperties->{region_id}						= $dbItem->region_id;
    $hrProperties->{channel_id}						= $dbItem->channel_id;
    $hrProperties->{price_level_id}					= $dbItem->price_level_id;
    $hrProperties->{contract_rate_type_id}			= $dbItem->contract_rate_type_id;
    $hrProperties->{rate}							= $dbItem->rate;
    $hrProperties->{rate_reduction}					= $dbItem->rate_reduction;
    $hrProperties->{percentage_of_sales}			= $dbItem->percentage_of_sales;
    $hrProperties->{packaging_deduction}			= $dbItem->packaging_deduction;
    $hrProperties->{free_goods_deduction}			= $dbItem->free_goods_deduction;
    $hrProperties->{sales}							= $dbItem->sales;
    $hrProperties->{returns}						= $dbItem->returns;
    $hrProperties->{units_reserved}					= $dbItem->units_reserved;
    $hrProperties->{revenue_reserved}				= $dbItem->revenue_reserved;
    $hrProperties->{units_liquidated}				= $dbItem->units_liquidated;
    $hrProperties->{revenue_liquidated}				= $dbItem->revenue_liquidated;
    $hrProperties->{net_units}						= $dbItem->net_units;
    $hrProperties->{revenue}					    = $dbItem->revenue;
    $hrProperties->{net_revenue}					= $dbItem->net_revenue;
    $hrProperties->{net_rate}						= $dbItem->net_rate;
    $hrProperties->{uses_default_net_rate}			= $dbItem->uses_default_net_rate;
    $hrProperties->{price}							= $dbItem->price;
    $hrProperties->{total}							= $dbItem->total;

    $hrProperties->{base_rate}						= $dbItem->base_rate;
    $hrProperties->{prorate_track_count}			= $dbItem->prorate_track_count;
}

sub _initProperties
{
    my ($self, $props) = @_;
    my $timer = Common::Timer->new();

    $self->{ArtistRoyaltyIncomeItemID}  = Common::FormObject::Scalar->new(value => $props->{artist_royalty_income_item_id}, readOnly => 1);
    $self->{ArtistRoyaltyAlbumID}		= Common::FormObject::Scalar->new(value => $props->{artist_royalty_album_id});
    $self->{AlbumID}					= Common::FormObject::Scalar->new(value => $props->{album_id});
    $self->{UPC}						= Common::FormObject::Scalar->new(value => $props->{upc_ean});
    $self->{TrackID}					= Common::FormObject::Scalar->new(value => $props->{track_id});
    $self->{ArtistContractTermID}		= Common::FormObject::Scalar->new(value => $props->{artist_contract_term_id});
    $self->{IncomeSourceID}				= Common::FormObject::Scalar->new(value => $props->{income_source_id});
    $self->{RegionID}					= Common::FormObject::Scalar->new(value => $props->{region_id});
    $self->{ChannelID}					= Common::FormObject::Scalar->new(value => $props->{channel_id});
    $self->{PriceLevelID}				= Common::FormObject::Scalar->new(value => $props->{price_level_id});
    $self->{ContractRateTypeID}			= Common::FormObject::Scalar->new(value => $props->{contract_rate_type_id});
    $self->{Rate}						= Common::FormObject::Scalar::Decimal->new(value => $props->{rate});
    my $rateReduction = $props->{rate_reduction};
    $rateReduction = 100 unless $rateReduction > 0;
    $self->{RateReduction}				= Common::FormObject::Scalar::Percent->new(value => $rateReduction);
    my $percentOfSales = $props->{percentage_of_sales};
    $percentOfSales = 100 unless $percentOfSales > 0;
    $self->{PercentageOfSales}			= Common::FormObject::Scalar::Percent->new(value => $percentOfSales);
    $self->{PackagingDeduction}			= Common::FormObject::Scalar::Percent->new(value => $props->{packaging_deduction});
    $self->{FreeGoodsDeduction}			= Common::FormObject::Scalar::Percent->new(value => $props->{free_goods_deduction});
    $self->{Sales}						= Common::FormObject::Scalar::Integer->new(value => $props->{sales});
    $self->{Returns}					= Common::FormObject::Scalar::Integer->new(value => $props->{returns});
    $self->{UnitsReserved}				= Common::FormObject::Scalar::Integer->new(value => $props->{units_reserved});
    $self->{UnitsLiquidated}			= Common::FormObject::Scalar::Integer->new(value => $props->{units_liquidated});
    $self->{RevenueLiquidated}			= Common::FormObject::Scalar::Money->new(value => $props->{revenue_liquidated});
    $self->{RevenueReserved}			= Common::FormObject::Scalar::Money->new(value => $props->{revenue_reserved});
    $self->{NetUnits}					= Common::FormObject::Scalar::Integer->new(value => $props->{net_units});
    $self->{Revenue}					= Common::FormObject::Scalar::Money->new(value => $props->{revenue});
    $self->{NetRevenue}					= Common::FormObject::Scalar::Money->new(value => $props->{net_revenue});
    $self->{NetRate}					= Common::FormObject::Scalar::Decimal->new(value => $props->{net_rate});
    $self->{UsesDefaultNetRate}			= Common::FormObject::Scalar->new(value => $props->{uses_default_net_rate});
    $self->{Price}						= Common::FormObject::Scalar::Money->new(value => $props->{price});
    $self->{Total}						= Common::FormObject::Scalar::Money->new(value => $props->{total});

    $self->{BaseRate}					= Common::FormObject::Scalar::Decimal->new(value => $props->{base_rate});
    $self->{ProrateTrackCount}			= Common::FormObject::Scalar->new(value => $props->{prorate_track_count});
}


sub _initSubs
{
    my ($self, $props) = @_;
    my $timer = Common::Timer->new();

	if($self->loadSubs())
	{
        # then let's get the album info
        #
        my $trackObj = RPS::DB::Item::Track->Lookup(track_id => $props->{track_id});
		if($trackObj)
		{
			my $trackTitle = $trackObj->title;
			$trackTitle =~ s/^\s+//;
			$trackTitle =~ s/\s+$//;
			$self->{TrackName} = Common::FormObject::Scalar::String->new(value => $trackTitle);
		}
        else
        {
            $self->{TrackName} = Common::FormObject::Scalar::String->new();
        }
	}
}


sub _propertiesFromDefaults
{
    my ($self, $hrProperties) = @_;
}


###
1;#
###



