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

use strict;
use warnings;

use lib '/app/tools/rps/lib';
use RPS::DB::Item::ArtistPayee;
use RPS::DB::Item::ArtistPayeeAccount;
use RPS::Finance::Account;
use RPS::StateList;

use RPS::Payee::ArtistPayeeSimple;
use RPS::Payee::ArtistPayeeAccount;
use base 'RPS::Payee::ArtistPayeeSimple';


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

    # First, call the inherited method to get it's fields.
    #
    $self->SUPER::_propertiesFromDBItem($hrProperties, $dbItem);

    # $hrProperties->{artist_payee_id}    = $dbItem->artist_payee_id;
	# $hrProperties->{name}               = $dbItem->name;
	$hrProperties->{street_address}     = $dbItem->street_address;
	$hrProperties->{street_address_2}   = $dbItem->street_address_2;
	$hrProperties->{street_address_3}   = $dbItem->street_address_3;
	$hrProperties->{city}               = $dbItem->city;
	$hrProperties->{state_province}     = $dbItem->state_province;
	$hrProperties->{country_code}       = $dbItem->country_code;
	$hrProperties->{postal_code}        = $dbItem->postal_code;
	$hrProperties->{email}              = $dbItem->email;
	$hrProperties->{phone_number}       = $dbItem->phone_number;
	$hrProperties->{fax_number}         = $dbItem->fax_number;
	$hrProperties->{tax_id}             = $dbItem->tax_id;
	$hrProperties->{cycle_code}         = $dbItem->cycle_code;
#	$hrProperties->{min_payment}        = $dbItem->min_payment;
	$hrProperties->{begin_month_code}   = $dbItem->begin_month_code;
	$hrProperties->{comments}           = $dbItem->comments;

#    $hrProperties->{finance_account_id} = $dbItem->finance_account_id;
#    $hrProperties->{opening_balance}    = $dbItem->opening_balance;

    $hrProperties->{client_payee_id}	= $dbItem->client_payee_id;
    $hrProperties->{status}	            = $dbItem->status;

    $hrProperties->{date_created}       = $dbItem->date_created;
    $hrProperties->{date_modified}      = $dbItem->date_modified;
    $hrProperties->{created_by}         = $dbItem->created_by;
    $hrProperties->{modified_by}        = $dbItem->modified_by;
}


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

    # Call the inherited method first, to let it get the first crack at this.
    #
    $self->SUPER::_initProperties($props);

    # $self->{ArtistPayeeID}      = Common::FormObject::Scalar::Integer->new(value => $props->{artist_payee_id}, readOnly => 1);
	# $self->{Name}               = Common::FormObject::Scalar::String->new(value => $props->{name}, required => 1);
	$self->{StreetAddress}      = Common::FormObject::Scalar::String->new(value => $props->{street_address});
	$self->{StreetAddress2}     = Common::FormObject::Scalar::String->new(value => $props->{street_address_2});
	$self->{StreetAddress3}     = Common::FormObject::Scalar::String->new(value => $props->{street_address_3});
	$self->{City}               = Common::FormObject::Scalar::String->new(value => $props->{city}, maxlength => 80);
	$self->{StateProvince}      = Common::FormObject::Scalar::String->new(value => $props->{state_province}, maxlength => 80);
	$self->{CountryCode}        = Common::FormObject::Scalar::String->new(value => $props->{country_code}, maxlength => 2);
	$self->{PostalCode}         = Common::FormObject::Scalar::String->new(value => $props->{postal_code}, maxlength => 15);
	$self->{Email}              = Common::FormObject::Scalar::EmailAddress->new(value => $props->{email}, maxlength => 80);
	$self->{PhoneNumber}        = Common::FormObject::Scalar::String->new(value => $props->{phone_number}, maxlength => 30);
	$self->{FaxNumber}          = Common::FormObject::Scalar::String->new(value => $props->{fax_number}, maxlength => 30);
	$self->{TaxID}              = Common::FormObject::Scalar::String->new(value => $props->{tax_id}, maxlength => 30);
	$self->{CycleCode}          = Common::FormObject::Scalar->new(value => $props->{cycle_code});
#	$self->{MinPayment}         = Common::FormObject::Scalar::Decimal->new(value => $props->{min_payment});
	$self->{BeginMonthCode}     = Common::FormObject::Scalar->new(value => $props->{begin_month_code});
	$self->{Comments}           = Common::FormObject::Scalar::String->new(value => $props->{comments}, maxlength => 0);

#    $self->{FinanceAccountID}   = Common::FormObject::Scalar::Integer->new(value => $props->{finance_account_id}, readOnly => 1);
#    $self->{OpeningBalance}     = Common::FormObject::Scalar::Decimal->new(value => $props->{opening_balance});

    $self->{ClientPayeeID}		= Common::FormObject::Scalar::String->new(value => $props->{client_payee_id});
    $self->{Status}		        = Common::FormObject::Scalar->new(value => $props->{status});

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


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

    if ($self->loadSubs())
    {
	    # Account information (including current balance) will be held in a seperate class.
	    #
#	    $self->{Account} = RPS::Finance::Account->new(accountID => $props->{finance_account_id});
        my $artistPayeeID = $self->ArtistPayeeID();
        if ($artistPayeeID)
        {
            my $accounts = RPS::DB::Item::ArtistPayeeAccount->GetByArtistPayeeID($artistPayeeID);
            while (my $account = $accounts->next())
            {
                push @{$self->{Account}}, RPS::Payee::ArtistPayeeAccount->new(_dbItem => $account, readOnly => 1);
            }
        }
    }
}


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

	my $valid = $self->SUPER::validate();

	if($self->StateProvince() && $self->CountryCode())
	{
		if($self->CountryCode() eq 'US')
		{
			if(! RPS::StateList::IsValidState($self->StateProvince()))
			{
				$self->{StateProvince}->setError(Common::FormObject::kErrInvalidState);
				$valid = 0;
			}
		}
	}

    return $valid;
}


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

	my $dbObj;
	if($self->ArtistPayeeID())
	{
		$dbObj = RPS::DB::Item::ArtistPayee->Lookup(artist_payee_id => $self->ArtistPayeeID());
	}
	else
	{
		$dbObj = RPS::DB::Item::ArtistPayee->Create();
	}

	$dbObj->name($self->Name());
	$dbObj->street_address($self->StreetAddress());
	$dbObj->street_address_2($self->StreetAddress2());
	$dbObj->street_address_3($self->StreetAddress3());
	$dbObj->city($self->City());
	$dbObj->state_province($self->StateProvince());
	$dbObj->country_code($self->CountryCode());
	$dbObj->postal_code($self->PostalCode());
	$dbObj->email($self->Email());
	$dbObj->phone_number($self->PhoneNumber());
	$dbObj->fax_number($self->FaxNumber());
	$dbObj->tax_id($self->TaxID());
	$dbObj->cycle_code($self->CycleCode());
#	$dbObj->min_payment($self->MinPayment());
	$dbObj->begin_month_code($self->BeginMonthCode());
	$dbObj->comments($self->Comments());
#	$dbObj->opening_balance($self->OpeningBalance());

	$dbObj->client_payee_id($self->ClientPayeeID());
	$dbObj->client_account_id($self->ClientAccountID());
	$dbObj->status($self->Status());

	# save db item
	#
	$dbObj->save();

	# reload object
	#
	$self->_init(_dbItem => $dbObj);
}




###
1;#
###
