#---------------------------------------------------------------
# ____                   _ _         ____  _
#|  _ \ ___  _   _  __ _| | |_ _   _/ ___|| |__   __ _ _ __ ___
#| |_) / _ \| | | |/ _` | | __| | | \___ \| '_ \ / _` | '__/ _ \
#|  _ < (_) | |_| | (_| | | |_| |_| |___) | | | | (_| | | |  __/
#|_| \_\___/ \__, |\__,_|_|\__|\__, |____/|_| |_|\__,_|_|  \___|
#            |___/             |___/
#
# Copyright (C) 2010 RoyaltyShare, Inc.   All Rights Reserved
#---------------------------------------------------------------
package BookPub::Price::SalePriceException::ExceptionsDisplay;
use strict;
use warnings;

use lib '/app/tools/common/lib';
use lib '/app/tools/bookpub/lib';
use BookPub::DB::Item::Sale;

use Common::RSApp;
use Common::Util;
use Common::Assert;
use Common::FormObject;

use Data::Dumper;

#use base 'BookPub::Price::SalePriceException::WithBook';
use base 'Common::FormObject';

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

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

    my %properties;
    if ( $args{dbItem} ) {
        $self->_propertiesFromDBItem( \%properties, $args{dbItem} );
    }

    #    elsif (exists($args{variance}) && exists($args{saleID}))
    #    {
    #        $self->_propertiesFromNew(\%properties, %args);
    #    }
    #    elsif ($args{saleID})
    #    {
    #        $self->_propertiesFromDB(\%properties, $args{saleID});
    #    }
    #    else
    #    {
    #        $self->_propertiesFromDefaults(\%properties);
    #    }

    $self->_initProperties( \%properties );

    return $self;
}

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

    $hrProperties->{sale_id}                 = $dbItem->{sale_id};
    $hrProperties->{approved}                = $dbItem->{approved};
    $hrProperties->{variance}                = $dbItem->{variance};
    $hrProperties->{product_market_price_id} = $dbItem->{product_market_price_id};
    $hrProperties->{price}                   = $dbItem->{price};
    $hrProperties->{currency_code}           = $dbItem->{currency_code};
    $hrProperties->{units}                   = $dbItem->{units};
    $hrProperties->{date_begin}              = $dbItem->{date_begin};
    $hrProperties->{date_end}                = $dbItem->{date_end};
    $hrProperties->{book_title}              = $dbItem->{book_title};
    $hrProperties->{author_last_name}        = $dbItem->{author_last_name};
    $hrProperties->{format}                  = $dbItem->{format};
    $hrProperties->{publishing_status}       = $dbItem->{publishing_status};
    $hrProperties->{list_price}              = $dbItem->{list_price};
    $hrProperties->{sale_currency_code}      = $dbItem->{sale_currency_code};
    $hrProperties->{total_exceptions}        = $dbItem->{total_exceptions};
    $hrProperties->{total_approved}          = $dbItem->{total_approved};

}

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

    $self->{SaleID}               = $props->{sale_id};
    $self->{Approved}             = $props->{approved};
    $self->{Country}              = $props->{country_code};
    $self->{Variance}             = $props->{variance};
    $self->{ProductMarketPriceID} = $props->{product_market_price_id};
    $self->{Price}        = Common::FormObject::Scalar::Money->new( value => $props->{price}, currencyCode => $props->{currency_code} );
    $self->{CurrencyCode} = $props->{currency_code};
    $self->{Units}        = $props->{units};
    $self->{DateBegin}    = $props->{date_begin};
    $self->{DateEnd}      = $props->{date_end};
    $self->{BookTitle}    = $props->{book_title};
    $self->{Author}       = $props->{author_last_name};
    $self->{Format}       = $props->{format};
    $self->{PublishingStatus} = $props->{publishing_status};
    $self->{ListPrice} =
      Common::FormObject::Scalar::Money->new( value => $props->{list_price}, currencyCode => $props->{sale_currency_code} );

    # we're going to display some data from the sale table
    my ( $country, $priceTypeID, $priceTypeQualifierID ) = $self->_getSalesData( $props->{sale_id} );
    $self->{Country}              = $country;
    $self->{PriceTypeID}          = $priceTypeID;
    $self->{PriceTypeQualifierID} = $priceTypeQualifierID;

    if ( defined( $self->{TotalExceptions} ) && defined( $self->{TotalApproved} ) ) {
        $self->{TotalUnapproved} = $self->{TotalExceptions} - $self->{TotalApproved};
    }

}

sub _getSalesData {
    my ( $self, $sale_id ) = @_;

    my $sale = BookPub::DB::Item::Sale->Lookup( sale_id => $sale_id );

    if ($sale) {
        return ( $sale->country_code(), $sale->price_type_id(), $sale->price_type_qualifier_id() );
    }

    return undef;
}

###
1;    #
###
