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

use strict;
use warnings;
use Carp;
use Data::Dumper;

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

use Common::FormObject;
use base 'Common::FormObject';


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

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

    my %properties;
    if ($args{_dbItem})
    {
        $self->_propertiesFromDBItem(\%properties, $args{_dbItem});
    }
    elsif ($args{mcps_license_id} && $args{period_id})
    {
        $self->_propertiesFromDB(\%properties, $args{mcps_license_id}, $args{period_id});
    }
    else
    {
        $self->_propertiesFromDefaults(\%properties, $args{period_id}, $args{units_held}, $args{price_level_id});
    }

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

    return $self;
}


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

    my $dbItem = RPS::DB::Item::McpsLicenseRetention->Lookup(mcps_license_id => $mcpsLicenseID,
														     period_id       => $periodID);

    $self->_propertiesFromDBItem($hrProperties, $dbItem);
}


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

	$self->{_inDB} = 1; # !!! Using an extra flag to denote that this was actually loaded from the db.

	$hrProperties->{mcps_license_id} = $dbItem->mcps_license_id;
    $hrProperties->{period_id}		 = $dbItem->period_id;
    $hrProperties->{units_held}	     = $dbItem->units_held;
    $hrProperties->{price_level_id}  = $dbItem->price_level_id;  
    $hrProperties->{price}           = $dbItem->price;   
    $hrProperties->{retention_category} = $dbItem->retention_category; 
}


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

	$self->{McpsLicenseID} = Common::FormObject::Scalar::Integer->new(value => $props->{mcps_license_id});
    $self->{PeriodID}	   = Common::FormObject::Scalar::Integer->new(value => $props->{period_id});
    $self->{UnitsHeld}	   = Common::FormObject::Scalar::Decimal->new(value => $props->{units_held}, precision => '0.0');
    $self->{PriceLevelID}  = Common::FormObject::Scalar::Integer->new(value => $props->{price_level_id});
    $self->{Delete}        = Common::FormObject::Scalar::Integer->new();
    $self->{Price}	       = Common::FormObject::Scalar::Decimal->new(value => $props->{price}, precision => '.2');
    $self->{RetentionCategory} = Common::FormObject::Scalar::String->new(value => $props->{retention_category});
    
}


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


sub _propertiesFromDefaults
{
    my ($self, $hrProperties, $periodID, $unitsHeld, $priceLevelID) = @_;

    $hrProperties->{period_id}      = $periodID;
    $hrProperties->{units_held}     = $unitsHeld;
    $hrProperties->{price_level_id} = $priceLevelID;

	$self->{_inDB} = 0; # !!! Using an extra flag to denote whether this was actually loaded from the db.
}


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

	return 1 if(! $self->UnitsHeld());

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

    return $valid if $ignoreRequiredFields;

	if(! $self->PeriodID())
	{
		print STDERR "validate: missing Period ID\n";
		$self->{PeriodID}->setError(Common::FormObject::kErrFieldBlank);
		$valid = 0;
	}

	return $valid;
}


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

    #
	# let's look for entries we need to delete
	#
	if (! $self->UnitsHeld())
	{

		# we don't save blank Unit amounts, so try to delete
		#
		$self->delete();
		return;
	}


	# -------------------------------
	# Save myself (McpsLicenseRetention)
	# -------------------------------
	#
	
	my $dbObj;
	if ($self->{_inDB})
	{
		# lookup existing
		#
		$dbObj = RPS::DB::Item::McpsLicenseRetention->Lookup(mcps_license_id => $self->McpsLicenseID(),
														     period_id => $self->PeriodID());											     
														     
	}
	else
	{
		# create new entry
		#
		$dbObj = RPS::DB::Item::McpsLicenseRetention->Create();
		$dbObj->mcps_license_id($self->McpsLicenseID());
		$dbObj->period_id($self->PeriodID());
	}


	$dbObj->units_held($self->UnitsHeld());
	$dbObj->price_level_id($self->PriceLevelID());
    $dbObj->retention_category($self->RetentionCategory());


	$dbObj->save();
	$self->{_inDB} = 1;
}


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


	if($self->{_inDB})
	{
		my $dbObj = RPS::DB::Item::McpsLicenseRetention->Lookup(mcps_license_id => $self->McpsLicenseID(),
															    period_id => $self->PeriodID());
		$dbObj->delete();
		$self->{_inDB} = 0;
	}
}



###
1;#
###

