#------------------------------------------------------------
# Copyright (C) 2006 RoyaltyShare, Inc.   All Rights Reserved
#------------------------------------------------------------
package RPS::DB::Item::SaleImportError;
use strict;
use warnings;
use lib '/app/tools/common/lib';
use Common::DB::Item;
use Common::RSApp;
use Common::Assert;
use Common::Log;

use base 'Common::DB::Item';

use constant kTable => 'sale_import_error';
use constant kDB => Common::DB::Item::kClientDB();


# Error types
use constant kErrorNonqualifying => '0';
use constant kErrorService       => '1';
use constant kErrorCountry       => '2';
use constant kErrorProductType   => '3';
use constant kErrorFormatType    => '4';
use constant kErrorMediaType     => '5';


sub DeleteByFileID
{
	my ($class, $fileID) = @_;

    my $dbo = Common::RSApp::GetClientDB();

	my $sql = "DELETE FROM " . kTable . " WHERE file_id = $fileID";

    $dbo->DoCmd($sql);
    
    return 1;
}

sub GetAllNonqualifyingByFileID
{
    my ($class, $fileID) = @_;

	my $sql = "SELECT * FROM " . kTable . " "
			. "WHERE file_id = $fileID "
	        . "AND error_type = " . kErrorNonqualifying . " "
	        . "ORDER BY sale_id";

    return $class->SUPER::GetAll($sql);
}

sub GetAllQualifyingByFileID
{
    my ($class, $fileID) = @_;

	my $sql = "SELECT * FROM " . kTable . " "
			. "WHERE file_id = $fileID "
	        . "AND error_type != " . kErrorNonqualifying . " "
	        . "ORDER BY sale_id";

    return $class->SUPER::GetAll($sql);
}

sub GetAllNonqualifyingBySaleID
{
    my ($class, $saleID) = @_;

	my $sql = "SELECT * FROM " . kTable . " "
			. "WHERE sale_id = $saleID "
	        . "AND error_type = " . kErrorNonqualifying . " "
	        . "ORDER BY description";

    return $class->SUPER::GetAll($sql);
}

sub GetAllQualifyingBySaleID
{
    my ($class, $saleID) = @_;

	my $sql = "SELECT * FROM " . kTable . " "
			. "WHERE sale_id = $saleID "
	        . "AND error_type != " . kErrorNonqualifying . " "
	        . "ORDER BY description";

    return $class->SUPER::GetAll($sql);
}

sub GetAllByMappingID
{
    my ($class, $mappingID) = @_;

	my $sql = "SELECT * FROM " . kTable . " "
			. "WHERE mapface_temp_mapping_id = $mappingID "
	        . "ORDER BY sale_id";

    return $class->SUPER::GetAll($sql);
}


sub GetDistinctSalesByMappingID
{
    my ($class, $mappingID, $limit, $index) = @_;

	my $sql = "SELECT DISTINCT sale_id FROM " . kTable . " "
			. "WHERE mapface_temp_mapping_id = $mappingID "
	        . "ORDER BY sale_id";
	        
	if ($limit) {
	    if (!$index) {
	        $index = 0;   
	    }
	    $sql .= " LIMIT $index,$limit";        
    }
    
    return $class->SUPER::GetAll($sql);
}

sub GetCountByFileID
{
	my ($class, $fileID) = @_;

	my $dbo = Common::RSApp::GetClientDB();

	my $sql = "SELECT COUNT(*) as count FROM ".kTable." WHERE file_id=$fileID";
	
    my $sth = $dbo->DoCmd($sql);
    my $hr = $sth->fetchrow_hashref();
    return $hr->{count};
}

sub GetNonQualifiedCountByFileID
{
	my ($class, $fileID) = @_;

	my $dbo = Common::RSApp::GetClientDB();

	my $sql = "SELECT COUNT(*) as count FROM ".kTable." WHERE file_id=$fileID "
			. "AND error_type = " . kErrorNonqualifying;
	
    my $sth = $dbo->DoCmd($sql);
    my $hr = $sth->fetchrow_hashref();
    return $hr->{count};
}

sub GetQualifiedCountByFileID
{
	my ($class, $fileID) = @_;

	my $dbo = Common::RSApp::GetClientDB();

	my $sql = "SELECT COUNT(*) as count FROM ".kTable." WHERE file_id=$fileID "
			. "AND error_type != " . kErrorNonqualifying;
	
    my $sth = $dbo->DoCmd($sql);
    my $hr = $sth->fetchrow_hashref();
    return $hr->{count};
}

sub GetUnmappedByFileID
{
    my ($class, $fileID) = @_;

	my $sql = "SELECT * FROM " . kTable . " "
			. "WHERE file_id = $fileID "
	        . "AND error_type != " . kErrorNonqualifying . " "
	        . "AND mapped = 'N' "
	        . "ORDER BY sale_id";

    return $class->SUPER::GetAll($sql);
}

sub GetUnmappedCountByFileID
{
    my ($class, $fileID) = @_;
    
	my $dbo = Common::RSApp::GetClientDB();    

	my $sql = "SELECT COUNT(*) as count FROM " . kTable . " "
			. "WHERE file_id = $fileID "
	        . "AND mapped = 'N'";

    my $sth = $dbo->DoCmd($sql);
    my $hr = $sth->fetchrow_hashref();
    return $hr->{count};
}

sub GetUnmappedCountBySaleID
{
    my ($class, $saleID) = @_;
    
	my $dbo = Common::RSApp::GetClientDB();    

	my $sql = "SELECT COUNT(*) as count FROM " . kTable . " "
			. "WHERE sale_id = $saleID "
	        . "AND mapped = 'N'";

    my $sth = $dbo->DoCmd($sql);
    my $hr = $sth->fetchrow_hashref();
    return $hr->{count};
}

sub GetUnmappedCountByMappingID
{
    my ($class, $mappingID) = @_;
    
	my $dbo = Common::RSApp::GetClientDB();    

	my $sql = "SELECT COUNT(*) as count FROM " . kTable . " "
			. "WHERE mapface_temp_mapping_id = $mappingID "
	        . "AND mapped = 'N'";

    my $sth = $dbo->DoCmd($sql);
    my $hr = $sth->fetchrow_hashref();
    return $hr->{count};
}

1;