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

use Carp;

use Data::Dumper;

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

use RPS::DB::Item::ControlledComposition;

use RPS::XMLObject;
use base 'RPS::XMLObject';


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

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

    if ($args{_dbItem})
    {   
        return $self->_initFromDBItem($args{_dbItem});
    }
    elsif ($args{controlledCompositionID})
    {   
        return $self->_initFromDBWithControlledCompID($args{controlledCompositionID});
    }
    elsif ($args{contractID})
    {
        return $self->_initFromDBWithContractID($args{contractID});
    }
    else
    {   
        return $self->_initWithDefaults();
    }
}


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

    my $dbItem = RPS::DB::Item::ControlledComposition->Lookup(controlled_composition_id => $id);
    return $self->_initFromDBItem($dbItem);
}

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

    my $dbItem = RPS::DB::Item::ControlledComposition->Lookup(artist_contract_id => $id);
    return $self->_initFromDBItem($dbItem);
}


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

	$self->_initProperties($dbItem);
	$self->_initSubs($dbItem);
	
	return $self;
}


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


    $self->{ControlledCompositionID} =  RPS::XMLObject::Scalar::Integer->new(value => $dbItem->controlled_composition_id, readOnly => 1);
    $self->{ArtistContractID} =         RPS::XMLObject::Scalar::Integer->new(value => $dbItem->artist_contract_id);
    $self->{PublisherID} =              RPS::XMLObject::Scalar::Integer->new(value => $dbItem->publisher_id);
    $self->{TrackCap} =                 RPS::XMLObject::Scalar::Integer->new(value => $dbItem->track_cap);
    $self->{RateType} =                 RPS::XMLObject::Scalar::Integer->new(value => $dbItem->rate_type);
    $self->{RatePercentage} =           RPS::XMLObject::Scalar::Decimal->new(value => $dbItem->rate_type, precision => '5.4');
    $self->{TermStart} =                RPS::XMLObject::Scalar::Date->new(value => $dbItem->term_start);
    $self->{TermEnd} =                  RPS::XMLObject::Scalar::Date->new(value => $dbItem->term_end);
    $self->{RateBasis} =                RPS::XMLObject::Scalar::Integer->new(value => $dbItem->rate_basis); # !!!


    return $self;
}


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


	if($self->loadSubs())
	{
	}

    return $self;
}


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

    $self->{ControlledCompositionID} =  RPS::XMLObject::Scalar::Integer->new(readOnly => 1);
    $self->{ArtistContractID} =         RPS::XMLObject::Scalar::Integer->new();
    $self->{PublisherID} =          RPS::XMLObject::Scalar::Integer->new();
    $self->{TrackCap} =      RPS::XMLObject::Scalar::Integer->new();
    $self->{RateType} =      RPS::XMLObject::Scalar::Integer->new();
    $self->{RatePercentage} =      RPS::XMLObject::Scalar::Decimal->new(precision => '5.4');
    $self->{TermStart} =            RPS::XMLObject::Scalar::Date->new();
    $self->{TermEnd} =              RPS::XMLObject::Scalar::Date->new();
    $self->{RateBasis} =            RPS::XMLObject::Scalar::Integer->new(); 


	if($self->loadSubs())
	{
	}

    return $self;
}

###
1;#
###


