#------------------------------------------------------------
# Copyright (C) 2006 RoyaltyShare, Inc.   All Rights Reserved
# $Id$
#------------------------------------------------------------
package RPS::Statement::UKMechanical::BaseStatement;
use strict;
use warnings;

use lib '/app/tools/common/lib';
use Common::Client;
use Common::Assert;

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

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

##  !!! This file has not been fully updated yet.
##

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

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

    my %properties;
    if ( $args{_dbItem} ) {
        $self->_propertiesFromDBItem( \%properties, $args{_dbItem} );
    } elsif ( $args{mcpsStatementID} ) {
        $self->_propertiesFromDB( \%properties, $args{mcpsStatementID} );
    } else {
        $self->_propertiesFromDefaults( \%properties );
    }

    $self->_initProperties( \%properties );

    return $self;
}

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

    my $dbItem = RPS::DB::Item::McpsStatement->Lookup( mcps_statement_id => $id );
    $self->_propertiesFromDBItem( $hrProperties, $dbItem );
}

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

    assert($dbItem);

    $hrProperties->{mcps_statement_id}     = $dbItem->mcps_statement_id;
    $hrProperties->{uk_mechanical_run_id}  = $dbItem->uk_mechanical_run_id;
    $hrProperties->{status}                = $dbItem->status;
    $hrProperties->{mcps_scheme}           = $dbItem->mcps_scheme;
    $hrProperties->{net_units}             = $dbItem->net_units;
    $hrProperties->{gross_units}           = $dbItem->gross_units;
    $hrProperties->{royalty_payable_units} = $dbItem->royalty_payable_units;
    $hrProperties->{retentions_held}       = $dbItem->retentions_held;
    $hrProperties->{retentions_liquidated} = $dbItem->retentions_liquidated;
    $hrProperties->{estimated_liability}   = $dbItem->estimated_liability;
    $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 ) = @_;

    # !!! Eventually we're going to want to use the Publisher's currency code, but for
    # !!! now we'll assume GBP.
    #
    my $currencyCode = 'GBP';

    $self->{McpsStatementID}   = Common::FormObject::Scalar->new( value => $props->{mcps_statement_id},    readOnly => 1 );
    $self->{UKMechanicalRunID} = Common::FormObject::Scalar->new( value => $props->{uk_mechanical_run_id}, readOnly => 1 );
    $self->{Status}            = Common::FormObject::Scalar->new( value => $props->{status} );
    $self->{McpsScheme}        = Common::FormObject::Scalar->new( value => $props->{mcps_scheme} );
    $self->{NetUnits}             = Common::FormObject::Scalar::Integer->new( value => $props->{net_units} );
    $self->{GrossUnits}           = Common::FormObject::Scalar::Integer->new( value => $props->{gross_units} );
    $self->{RoyaltyPayableUnits}  = Common::FormObject::Scalar::Integer->new( value => $props->{royalty_payable_units} );
    $self->{RetentionsHeld}       = Common::FormObject::Scalar::Integer->new( value => $props->{retentions_held} );
    $self->{RetentionsLiquidated} = Common::FormObject::Scalar::Integer->new( value => $props->{retentions_liquidated} );
    $self->{EstimatedLiability} =
      Common::FormObject::Scalar::Money->new( value => $props->{estimated_liability}, precision => '.4', currencyCode => $currencyCode );

    $self->{DateCreated}  = Common::FormObject::Scalar::DateTime->new( value => $props->{date_created},  readOnly => 1 );
    $self->{DateModified} = 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 _propertiesFromDefaults {
    my ( $self, $hrProperties ) = @_;
}

###
1;    #
###
