#------------------------------------------------------------
# Copyright (C) 2009 RoyaltyShare, Inc.   All Rights Reserved
#------------------------------------------------------------

package RPS::ArtistRoyalty::Process::SaleException;

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

sub new
{
    my ($class, $sale, $details) = @_;

    my $self = bless {}, $class;

    return $self->_init($sale, $details);
}


sub _init
{
    my ($self, $sale, $details) = @_;
    assert($sale);
    $self->{sale} = $sale;

    # This is optional (but highly recommended!)
    #
    $self->{details} = $details;

    return $self;
}


sub sale
{
    my ($self) = @_;
    return $self->{sale};
}

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

    die "ERROR - You must override the 'error' method";
}

sub details
{
    my ($self) = @_;
    return $self->{details};
}


# ------------

1;
package RPS::ArtistRoyalty::Process::SaleException::NoContract;
use strict;
use base 'RPS::ArtistRoyalty::Process::SaleException';

sub error
{
    return 'no matching contract';
}

1;
# ------------

package RPS::ArtistRoyalty::Process::SaleException::NoPrice;
use strict;
use base 'RPS::ArtistRoyalty::Process::SaleException';

sub error
{
    return 'no price';
}

# ------------

package RPS::ArtistRoyalty::Process::SaleException::NoProduct;
use strict;
use base 'RPS::ArtistRoyalty::Process::SaleException';

sub error
{
    return '! No Product';
}


# ------------

package RPS::ArtistRoyalty::Process::SaleException::NoDateEnd;
use strict;
use base 'RPS::ArtistRoyalty::Process::SaleException';

sub error
{
    return 'no date_end';
}

# ------------

package RPS::ArtistRoyalty::Process::SaleException::NoRegion;
use strict;
use base 'RPS::ArtistRoyalty::Process::SaleException';

sub error
{
    return 'no region';
}




1;
