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

use Carp;

use Data::Dumper;

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

use RPS::DB::Item::ArtistPayee;

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{artistPayeeID} ) {
        return $self->_initFromDB( $args{artistPayeeID} );
    } else {
        return $self->_initWithDefaults();
    }
}

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

    my $dbItem = RPS::DB::Item::ArtistPayee->Lookup( artist_payee_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->{ArtistPayeeID} = RPS::XMLObject::Scalar::Integer->new( value => $dbItem->artist_payee_id, readOnly => 1 );
    $self->{Name}          = RPS::XMLObject::Scalar::String->new( value => $dbItem->name );
    $self->{Address1}      = RPS::XMLObject::Scalar::String->new( value => $dbItem->address1 );
    $self->{Address2}      = RPS::XMLObject::Scalar::String->new( value => $dbItem->address2 );
    $self->{Address3}      = RPS::XMLObject::Scalar::String->new( value => $dbItem->address3 );
    $self->{City}          = RPS::XMLObject::Scalar::String->new( value => $dbItem->city );
    $self->{StateProvince} = RPS::XMLObject::Scalar::String->new( value => $dbItem->state_province );
    $self->{CountryCode}   = RPS::XMLObject::Scalar::String->new( value => $dbItem->country_code );     # !!!
    $self->{PostalCode}    = RPS::XMLObject::Scalar::String->new( value => $dbItem->postal_code );      # !!!
    $self->{Email} = RPS::XMLObject::Scalar::EmailAddress->new( value => $dbItem->email );
    $self->{PhoneNumber} = RPS::XMLObject::Scalar::String->new( value => $dbItem->phone_number );       # !!!
    $self->{FaxNumber}   = RPS::XMLObject::Scalar::String->new( value => $dbItem->fax_number );         # !!!
    $self->{TaxID}       = RPS::XMLObject::Scalar::String->new( value => $dbItem->tax_id );
    $self->{CycleCode}      = RPS::XMLObject::Scalar::Integer->new( value => $dbItem->cycle_code );
    $self->{MinPayment}     = RPS::XMLObject::Scalar::Decimal->new( value => $dbItem->min_payment, format => '8.2' );
    $self->{BeginMonthCode} = RPS::XMLObject::Scalar::Integer->new( value => $dbItem->begin_month_code );
    $self->{Comments} = RPS::XMLObject::Scalar::String->new( value => $dbItem->comments );

    $self->{FinanceAccountID} = RPS::XMLObject::Scalar::Integer->new( value => $dbItem->finance_account_id, readOnly  => 1 );
    $self->{OpeningBalance}   = RPS::XMLObject::Scalar::Decimal->new( value => $dbItem->opening_balance,    precision => 8.2 );

    $self->{CreatedDate}  = RPS::XMLObject::Scalar::DateTime->new( value => $dbItem->date_created,  readOnly => 1 );
    $self->{ModifiedDate} = RPS::XMLObject::Scalar::DateTime->new( value => $dbItem->date_modified, readOnly => 1 );
    $self->{CreatedBy}    = RPS::XMLObject::Scalar::UserName->new( value => $dbItem->created_by,    readOnly => 1 );
    $self->{ModifiedBy}   = RPS::XMLObject::Scalar::UserName->new( value => $dbItem->modified_by,   readOnly => 1 );

    return $self;
}

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

    if ( $self->loadSubs() ) {

        # Account information (including current balance) will be held in a seperate class.
        #
        $self->{Account} = RPS::Finance::Account->new( accountID => $dbItem->finance_account_id );
    }

    return $self;
}

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

    $self->{ArtistPayeeID}  = RPS::XMLObject::Scalar::Integer->new( readOnly => 1 );
    $self->{Name}           = RPS::XMLObject::Scalar::String->new();
    $self->{Address1}       = RPS::XMLObject::Scalar::String->new();
    $self->{Address2}       = RPS::XMLObject::Scalar::String->new();
    $self->{Address3}       = RPS::XMLObject::Scalar::String->new();
    $self->{City}           = RPS::XMLObject::Scalar::String->new();
    $self->{StateProvince}  = RPS::XMLObject::Scalar::String->new();
    $self->{CountryCode}    = RPS::XMLObject::Scalar::String->new();
    $self->{PostalCode}     = RPS::XMLObject::Scalar::String->new();
    $self->{Email}          = RPS::XMLObject::Scalar::EmailAddress->new();
    $self->{PhoneNumber}    = RPS::XMLObject::Scalar::String->new();
    $self->{FaxNumber}      = RPS::XMLObject::Scalar::String->new();
    $self->{TaxID}          = RPS::XMLObject::Scalar::String->new();
    $self->{CycleCode}      = RPS::XMLObject::Scalar::Integer->new();
    $self->{MinPayment}     = RPS::XMLObject::Scalar::Decimal->new( format => '8.2' );
    $self->{BeginMonthCode} = RPS::XMLObject::Scalar::Integer->new();
    $self->{Comments}       = RPS::XMLObject::Scalar::String->new();

    $self->{FinanceAccountID} = RPS::XMLObject::Scalar::Integer->new( readOnly  => 1 );
    $self->{OpeningBalance}   = RPS::XMLObject::Scalar::Decimal->new( precision => 8.2 );

    $self->{CreatedDate}  = RPS::XMLObject::Scalar::DateTime->new( readOnly => 1 );
    $self->{ModifiedDate} = RPS::XMLObject::Scalar::DateTime->new( readOnly => 1 );
    $self->{CreatedBy}    = RPS::XMLObject::Scalar::UserName->new( readOnly => 1 );
    $self->{ModifiedBy}   = RPS::XMLObject::Scalar::UserName->new( readOnly => 1 );

    if ( $self->loadSubs() ) {
        $self->{Account} = RPS::Finance::Account->new();
    }

    return $self;
}

###
1;    #
###

