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

use strict;
use warnings;
use Data::Dumper;
use lib '/app/tools/common/lib';
use Common::MapFace::MapFaceFile;

use lib '/app/tools/rps/lib';
use RPS::File::File;
use RPS::File::Sale;
use RPS::MapFace::MapFaceTempMapping;
use RPS::MapFace::SaleImportErrorList;
use RPS::CountryList;
use RPS::ServiceList;
use RPS::Product::TypeList;
use RPS::DB::Item::MapFaceTempMapping;
use RPS::DB::Item::MapFaceTempMappingCriteria;
use RPS::DB::Item::SaleImportErrorRawValue;
use RPS::DB::Item::SaleImportFieldMapping;

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

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

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

	my $fileID = $args{fileID};
	my $mappingGroup = $args{mappingGroup};    
	
    my $file = RPS::File::File->new(file_id => $fileID);
    $self->{File} = $file->GetObjectXML();	
    
    my $clientID = Common::RSApp::GetClientID(); 
    
    my $mapFaceFileID = Common::DB::Item::MapFaceFile->GetMapFaceIDByClientAndFileID($clientID, $fileID);
    
    $self->{MapFaceFile} = Common::MapFace::MapFaceFile->new(mapface_file_id => $mapFaceFileID);
    	
	$self->{CurrentGroupNum} = $mappingGroup;
	$self->{NextGroupNum} = RPS::DB::Item::MapFaceTempMapping->GetNextViewableGroupNum($fileID, $mappingGroup);
	$self->{PrevGroupNum} = RPS::DB::Item::MapFaceTempMapping->GetPreviousViewableGroupNum($fileID, $mappingGroup);
	$self->{TotalGroupCount} = RPS::DB::Item::MapFaceTempMapping->GetTotalViewableGroupCount($fileID);
	
	# Need to look up the actual max group id in sale_import_error
	$self->{MaxGroupNum} = RPS::DB::Item::MapFaceTempMapping->GetMaxGroupNumByFileID($fileID);
	
	my $tempMappings = RPS::DB::Item::MapFaceTempMapping->GetSortedByFileID($fileID);	
		
	$self->{MapFaceTempMapping} = RPS::MapFace::MapFaceTempMapping->new(fileID => $fileID, mappingGroup => $mappingGroup);	
	
	my $mappingID = $self->{MapFaceTempMapping}->{MapFaceTempMappingID}->_value();
	
    # So we need to figure out which "page number" we're on.  
    # That means sorting the groups and adjusting the group number by 
    # ignoring the auto-approved ones.  
    my $groupNum = 1;
	while ($tempMappings->hasNext()) {
		my $tempMapping = $tempMappings->next;			
		
		# Ignore auto-approved mappings
		if ($tempMapping->status == RPS::DB::Item::MapFaceTempMapping::STATUS_AUTO_APPROVED) {
		    next();
		}
		
		if ($tempMapping->mapface_temp_mapping_id == $mappingID) {
		    $self->{CurrentPage} = $groupNum;
		    last();
	    }
		
		$groupNum++;
	}			
	
	my $criteria = RPS::DB::Item::MapFaceTempMappingCriteria->GetAllByMappingID($mappingID);	
	while ($criteria->hasNext()) {
		my $row = $criteria->next;			
		my $field = $row->field;
		my $value = $row->value;
		$self->{MappingCriteria}{$field} = $value;
	}	
	
	# We only want to display the first five, but we need the full count.
    my $saleIDs = RPS::DB::Item::SaleImportError->GetDistinctSalesByMappingID($mappingID);
    $self->{SaleCount} = $saleIDs->size();
    
    my $displayCount = 0;
    my $firstSaleID;
	while ($saleIDs->hasNext()) {
		my $saleID = $saleIDs->next();		
		$saleID = $saleID->sale_id;
		
		if (!$firstSaleID) {
		    $firstSaleID = $saleID;   
		}				
		
		my $sale = RPS::File::Sale->new(sale_id => $saleID);
		push @{$self->{SaleGroup}{Sale}}, $sale->GetObjectXML();
		$displayCount++;
		if ($displayCount == 5) {
		    last();
		}		        	
    }   
    
    my $headers = RPS::DB::Item::SaleImportFileHeader->GetAllByFileID($fileID);
	while ($headers->hasNext())
	{
		my $header = $headers->next();
		my $field = $header->field;
		my $value = $header->header;
		if ($value) {
		    if ($self->{FileHeaders}{$field}) {
		        $self->{FileHeaders}{$field} .= " / ";
		    }
		    $self->{FileHeaders}{$field} .= $value;	
	    }        	
	}       
    
    my $mappings = RPS::DB::Item::SaleImportFieldMapping->GetAllByFileID($fileID);
	while ($mappings->hasNext())
	{
		my $mapping = $mappings->next();
		my $field = $mapping->field;
		my $value = $mapping->mapping;
		$self->{Mappings}{$field}{$value} = 1;	        	
	}          
    
	$self->{SaleImportErrorList} = RPS::MapFace::SaleImportErrorList->new(sale_id => $firstSaleID);    
	
	$self->{CountryList} = RPS::CountryList->new();
	$self->{ServiceList} = RPS::ServiceList->new(mapface => 1);

	return $self;
}

sub _propertyIsEditable
{
	my ($self, $propertyName) = @_;

	# The Product (and contained objects) can be edited.
	#
	if ($propertyName eq 'MapFaceTempMapping')
	{
		return 1;
	}
	return 0;
}

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

	$self->{MapFaceTempMapping}->save();
}


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

	my $valid = $self->{MapFaceTempMapping}->validate();

	return $valid;
}



###
1;#
###
