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

