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




