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

use Carp;
use Data::Dumper;

use lib '/app/tools/rps/lib';
use RPS::DB::Item::ArtistContractUnitEscalation;

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


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

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

    my %properties;

    if ($args{_dbItem})
    {   
        $self->_propertiesFromDBItem(\%properties, $args{_dbItem});
    }
    elsif($args{contractID} && $args{contractMode})
    {   
        $self->_propertiesFromDefaults(\%properties, $args{contractID}, $args{contractMode});
    }
	else
	{
		die "bad call to UnitEscalation";
	}


    $self->_initProperties(\%properties);
    $self->_initSubs(\%properties);

    return $self;
}


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

    my $dbItem = RPS::DB::Item::ArtistContractUnitEscalation->Lookup(artist_contract_unit_escalation_id => $id);
    return $self->_initFromDBItem($hrProperties, $dbItem);
}


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

    $hrProperties->{artist_contract_unit_escalation_id} = $dbItem->artist_contract_unit_escalation_id;
    $hrProperties->{artist_contract_id} = $dbItem->artist_contract_id;
    $hrProperties->{contract_mode} = $dbItem->contract_mode;
    $hrProperties->{units} = $dbItem->units;
    $hrProperties->{amount} = $dbItem->amount;
    $hrProperties->{penny_based} = $dbItem->penny_based;
}


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

    $self->{ArtistContractUnitEscalationID}   = RPS::XMLObject::Scalar::Integer->new(value => $props->{artist_contract_unit_escalation_id}, readOnly => 1);
    $self->{ArtistContractID}			        = RPS::XMLObject::Scalar::Integer->new(value => $props->{artist_contract_id}, required => 1);
    $self->{ContractMode}	            = RPS::XMLObject::Scalar::Integer->new(value => $props->{contract_mode}, required => 1);
    $self->{Units}	                    = RPS::XMLObject::Scalar::Integer->new(value => $props->{units}, required => 1);
    $self->{Amount}				        = RPS::XMLObject::Scalar::Percent->new(value => $props->{amount}, required => 1);
    $self->{PennyBased}			        = RPS::XMLObject::Scalar::Boolean->new(value => $props->{penny_based}, required => 1);

	# this is how the template tells the backend to delete one of these.
	# the default is 'OFF' (ie. don't delete)
	#
	$self->{Delete} = RPS::XMLObject::Scalar->new();

}


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

}


sub _propertiesFromDefaults
{
    my ($self, $hrProperties, $contractID, $contractMode) = @_;

    $hrProperties->{artist_contract_id} = $contractID;
    $hrProperties->{contract_mode} = $contractMode;
}

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

    # If this guy is being deleted, we don't really care what values it has...
    #
    if ($self->Delete())
    {
        return 1;
    }

	my $valid = 1;

	# only validate if something was entered
	#
	if(defined $self->Units() || defined $self->Amount())
	{
		$valid = $self->SUPER::validate();

		if($self->Units() <= 0)
		{
			$self->{Units}->setError(RPS::XMLObject::kErrFieldInvalid);
			$valid = 0;
		}
		if($self->Amount() <= 0)
		{
			$self->{Amount}->setError(RPS::XMLObject::kErrFieldInvalid);
			$valid = 0;
		}
	}

	return $valid;
}



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


	if($self->Delete())
	{
		$self->delete();
		return;
	}


	my $dbObj;
	if($self->ArtistContractUnitEscalationID())
	{
		$dbObj = RPS::DB::Item::ArtistContractUnitEscalation->Lookup(artist_contract_unit_escalation_id => $self->ArtistContractUnitEscalationID());
	}
	else
	{
		$dbObj = RPS::DB::Item::ArtistContractUnitEscalation->Create();
	}


	# set fields here
	#
	$dbObj->artist_contract_id($self->ArtistContractID());
	$dbObj->contract_mode($self->ContractMode());
	$dbObj->units($self->Units());
	$dbObj->amount($self->Amount());
	$dbObj->penny_based($self->PennyBased());


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

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

sub delete
{
	my $self = shift;

	my $myDBObj = RPS::DB::Item::ArtistContractUnitEscalation->Lookup(artist_contract_unit_escalation_id => $self->ArtistContractUnitEscalationID());
	$myDBObj->delete();
}


###
1;#
###




