package CLMApp::Controller::Import;
use Mojo::Base 'Mojolicious::Controller';
use Data::Show;
use Moose;
use Moose::Autobox;
use Perl6::Junction qw/any/;
use Data::Show;
use JSON;
use Cwd;
use Storable qw(dclone);
use Spreadsheet::ParseXLSX;
use Spreadsheet::ParseExcel;
use Text::CSV;
use JSON;

use Class::Tiny qw//, {
	title => 'Import',
	table =>undef,
	module => 'import',
	pk => undef,
	columns => [qw//],
	prefetch => [qw//],
	order_by => undef
};


sub index{
	my $c = shift;

	my ($frm,$butt) = $c->populate_form('default');

	$c->stash(frm => $frm,butt => undef);
	$c->stash(title=>'Import',table => 'importtable',module => 'import');

	$c->render(template => 'customer/index');
}

sub itn2{
	my $c = shift;
	my $json = $c->req->json;
# show $json;
# $c->render(json => $json);
	$c->itn_process(2,$json);
	
	# $c->render(json => $json);
}

sub itn{
	my $c = shift;

	# Check file size
	return $c->render(text => 'File is too big.', status => 200) if $c->req->is_limit_exceeded;

	# Process uploaded file
	return $c->redirect_to('form') unless my $itn = $c->param('itn');
	my $size = $itn->size;
	my $name = $itn->filename;
	my $ext = 'upload';
	if($name =~ /(.*)\.(.*)$/){
	
		$ext = '.' . $2;
		$name = $1;
	}
	$name =~ s/\W/_/g;
	my $fpath = '/tmp/' . $name . $ext;
	$itn->move_to($fpath);



	my @rows;
	my $csv = Text::CSV->new ( { binary => 1 } ) or warn "Cannot use CSV: ".Text::CSV->error_diag ();
	my $cols = ["AccountStatus","DistributorID","DCNbr","DCSite","CustomerUnitName","DMACustNo","AmphDistCustNo","CustomerID","ExistingYN"];
	$csv->column_names(@$cols);
	open my $fh, "<:encoding(utf8)", $fpath or warn "$fpath: $!";
	
	my @rows;
	while ( my $r = $csv->getline_hr( $fh ) ) {
		push(@rows,$r);
	}
# show @rows;
	$c->itn_process(1,\@rows);

}


sub itn_process{
	my $c = shift;
	my ($step,$rows) = (@_);


	my $cols = ["AccountStatus","DistributorID","DCNbr","DCSite","CustomerUnitName","DMACustNo","AmphDistCustNo","CustomerID","ExistingYN"];

	my $importcnt = 0;
	my $rowcnt = 0;
    my @err;
    my @frows;
    my %skip;
    my @cnotice;
    for(my $rc = 0; $rc < scalar(@$rows); $rc++){
    	next if $rc == 0 && $step == 1;
    	my $r = $rows->[$rc];
    	my $rrc = $rc + 1;
		my %fro = %$r;

		# show $r->{AccountStatus};
		# next unless $r->{AccountStatus} =~/Found Amphire CustomerIDs/;
		my $amphireid = $r->{CustomerID};
		my $s = $c->db->resultset('Customer')->find({customerid => $r->{DMACustNo} });
		if($step == 2 && $s && $r->{AccountStatus} =~ /Found/){
			my $dt = DateTime->now(time_zone => 'America/Chicago');
			my $u = {
				lastupdatedbyid => $c->session->{user_id} || 1,
				lastchangeddate => $dt->ymd('-') . ' ' . $dt->hms(':'),
				amphireid => $amphireid
			};
			my %c = $s->update($u);
			push(@cnotice, { customerid => $r->{DMACustNo} });
			$importcnt++;
		}elsif($step == 1 && $s && $r->{AccountStatus} =~ /Found/){	
			$importcnt++;
		}else{
			# return $c->render(json => { type => 'error', msg => 'Error', details => 'Import failed with the following errors: Cannot find DMACustNo: ' . $r->{DMACustNo} });
			$fro{error} = 1;
			$fro{msg} = 'Not Importable.';
		}
		$rowcnt++;
		push(@frows,\%fro);

	}
		my $msgs = [];
		if($importcnt){
			if($step == 2){
				$c->check_email_notification(\@cnotice);
				push(@$msgs, {type => 'success', msg => 'Step 2: Complete', details => '(' . $importcnt . ') Rows Imported of (' . $rowcnt . ')'});
			}else{
				push(@$msgs, {type => 'success', msg => 'Step 1: Complete', details => '(' . $importcnt . ') Rows Importable of (' . $rowcnt . ')'});
			}
			
		}else{
				push(@$msgs, {type => 'warn', msg => 'Step 1: No data matched to import. All set!', details => '(' . $importcnt . ') Rows Importable of (' . $rowcnt . ')'});			
		}
		# if(@err){
		# 	push(@$msgs, { type => 'error', msg => 'Error', details => '(' . $importcnt . ') Rows Imported of (' . $rowcnt . '). Import rows failed with the following errors:', errs => \@err});
		# }
		my $jobj = {"data"=>\@frows,"draw"=>1,"header"=>$cols,"recordsFiltered"=>scalar(@frows),"recordsTotal"=>scalar(@frows)};
 		$c->render(json => {msgs => $msgs , tabledata => $jobj });	


}

sub excel{

	my $c = shift;

	# Check file size
	return $c->render(text => 'File is too big.', status => 200) if $c->req->is_limit_exceeded;

	# Process uploaded file
	return $c->redirect_to('form') unless my $excel = $c->param('excel');
	my $size = $excel->size;
	my $name = $excel->filename;
	my $ext = 'upload';
	if($name =~ /(.*)\.(.*)$/){
	
		$ext = '.' . $2;
		$name = $1;
	}
	$name =~ s/\W/_/g;
	my $fpath = '/tmp/' . $name . $ext;
	$excel->move_to($fpath);

	my($parser,$workbook);
	if($ext =~ /xlsx/i){
		$parser = Spreadsheet::ParseXLSX->new;
  		$workbook = $parser->parse($fpath);
	}else{
   		$parser   = Spreadsheet::ParseExcel->new();
    	$workbook = $parser->parse($fpath);
    }
	if ( !defined $workbook ) {
		return $c->render(text =>  $parser->error());
	}

	my @rows; my $header; my @header;
	my $headermap = {
			"address" => "address",
			"bp flag" => "brandedprocurement",
			"bp deleted flag" => "brandedprocurementdeleted",
			"chain concept id" => "chainconcept",
			"chain group id" => "chaingroup",
			"chain unit id" => "chainunitid",
			"city" => "city",
			"notes" => "comments",
			"country code" => "countrycode",
			"customer id" => "customerid",
			"customer nbr" => "customernumber",
			"unit #" => "customerunitnumber",
			"distributor company id" => "distributorcompany",
			"distributor warehouse id" => "distributorwarehouse",
			"group/unit name" => "groupname",
			"og flag" => "orderguideflagid",
			"ownership" => "ownership",
			"ownership 2" => "ownership2",
			"state" => "state",
			"status" => "statusid",
			"system name" => "systemname",
			"customer name" => "unitname",
			"zip code" => "zip",
			"operating status" => "opstatus",
			"operator type" => "ownershiptype",
			"custom warehouse name" => "customwarehousename",
			"custom warehouse number" => "customwarehousenumber",
			"order system" => "ordersystem",
			"invoice system" => "invoicesystem",
			"email address" => "email"
      };

 

	my @cols = (qw/statusid customerid customernumber distributorcompany distributorwarehouse chaingroup chainconcept ownership customerunitnumber unitname address city state zip orderguideflagid countrycode systemname ownership2 groupname comments chainunitid brandedprocurement opstatus ownershiptype customwarehousename customwarehousenumber ordersystem invoicesystem email/); # brandedprocurementdeleted
    for my $worksheet ( $workbook->worksheets() ) {

        my ( $row_min, $row_max ) = $worksheet->row_range();
        my ( $col_min, $col_max ) = $worksheet->col_range();

        for my $row ( $row_min .. $row_max ) {

        	my $r = {};
            for(my $col = 0; $col < scalar(@cols); $col++) {

                my $cell = $worksheet->get_cell( $row, $col );
                if($cell){
                	$r->{ $cols[$col] } = $cell->value();
                }else{
                	$r->{ $cols[$col] } = "";
                }
                if($row == 0 && $cell){
                	$header[$col] = $cell->value() || "";
                	$header->{ $cols[$col] } = $cell->value() || "";
                }
            }
        	if($row == 0){
        		# $header = $r; 
        	}else{
            	push(@rows,$r);       		
        	}
        }
    }
#show $header; show @header;
    # check header for non-default
    my @vals = values %$header;
show @vals;
show $headermap;
show @cols;
show $header[0];
    my @verr;
    if(scalar(@vals) != scalar(@cols) || $header[0] ne 'Status'){
    	foreach my $v (@vals){
    		push(@verr,{ msg => "Invalid Header Field: $v", row => 0}) if !$headermap->{lc($v)};
    	}
    }
    if(@verr){
    	my @msgs; my $importcnt = 0; my $rowcnt = 0;
			push(@msgs, { type => 'error', msg => 'Error', details => '(' . $importcnt . ') Rows Imported of (' . $rowcnt . '). Import rows failed with the following errors:', errs => \@verr});
		my $jobj = {"data"=>[],"draw"=>1,"header"=>\@header,"recordsFiltered"=>0,"recordsTotal"=>0};
 		return $c->render(json => {msgs => \@msgs , tabledata => $jobj });
    }elsif(scalar(@vals) != scalar(@cols)){
    	my @ncols;
    	foreach my $h (@header){
    		push(@ncols, $headermap->{lc($h)});
    	}
    	@cols = @ncols;
    	@rows = ();

		    for my $worksheet ( $workbook->worksheets() ) {

		        my ( $row_min, $row_max ) = $worksheet->row_range();
		        my ( $col_min, $col_max ) = $worksheet->col_range();

		        for my $row ( $row_min .. $row_max ) {
		        	next if $row == 0;
		        	my $r = {};
		            for(my $col = 0; $col < scalar(@cols); $col++) {

		                my $cell = $worksheet->get_cell( $row, $col );
		                if($cell){
		                	$r->{ $cols[$col] } = $cell->value();
		                }else{
		                	$r->{ $cols[$col] } = "";
		                }
		            }
		            push(@rows,$r);
		        }
		    }    	

    }
    



show @cols;
# show @rows;

    # 	return $c->render(text => 'Custom field import, "Customer ID" required and not found. Import Cancelled.', status => 405);
    # }


 
    # Invalid Status (not 0,1,2 =  0 means no change)
    # Invalid Customer ID (populated but no match, therefore no update/status change)
    # Distributor Customer #: (anything goes?? or only numbers and '~', including blank)
    # Invalid Amphire IDs (Distributor, Warehouse, Chain Group, Chain Concept --- all required)
    # owner/store#/name/address/city/state/zip all free (state and zip free form due to international)
    # invalid country code
    # invalid back office system name
    # group name/notes free-form
    # maybe worry about 50 character limit in future for certain fields

    my %valid = (
		customerid => {tb=>'Customer',fd=>'me.customerid', blank => 1},
		# CustomerNbr  => {tb=>'Customer',fd=>'me.customernumber'},
		distributorcompany  => {tb=>'DistributorCompany',fd=>'me.distributoramphireid',set=>'distributorcompanyid',newval=>'distributorcompanyid'},
		distributorwarehouse  => {tb=>'DistributorWarehouse',fd=>'me.distributorwarehouseamphireid',set=>'distributorwarehouseid',newval=>'distributorwarehouseid'},
		chaingroup  => {tb=>'ChainGroup',fd=>'me.chaingroupamphireid',set=>'chaingroupid',newval=>'chaingroupid'},
		chainconcept => {tb=>'ChainConcept',fd=>'me.chainconceptamphireid',set=>'chainconceptid',newval=>'chainconceptid'},
		countrycode => {tb=>'Country',fd=>'me.countrycode'},
		systemname => {tb=>'BackOfficeSystem',fd=>'me.systemname', blank => 1, csv => 1,,set=>'systemid',newval=>'systemid'},
		chainunitid => {tb=>'ChainUnit',fd=>'me.chainunitid', blank => 1,set=>'chainunitid',newval=>'chainunitid'},
		
		customwarehousename => {tb=>'Market',fd=>'me.customwarehousename', blank => 1,set=>'marketid',newval=>'marketid'},
		customwarehousenumber => {tb=>'Market',fd=>'me.customwarehousenumber', blank => 1,set=>'marketid',newval=>'marketid'},
		ordersystem => {tb=>'OrderInvoiceSystem',fd=>'me.systemname', blank => 1,set=>'ordersystem',newval=>'id'},
		invoicesystem => {tb=>'OrderInvoiceSystem',fd=>'me.systemname', blank => 1,set=>'invoicesystem',newval=>'id'},
    );
    my @err;
    my @frows;
    my %skip;


    for(my $rc = 0; $rc < scalar(@rows); $rc++){
    	my $r = $rows[$rc];
    	my $rrc = $rc + 1;
		my %fro = %$r;
		my @terr;

#		next unless $r->{customernumber};
		if(exists($r->{orderguideflagid}) && $r->{orderguideflagid}){			
			$r->{orderguideflagid} = $r->{orderguideflagid} eq 'Y' ? 1 :$r->{orderguideflagid}  eq 'P' ? 2 : 3;	
		}  	


    	if($r->{statusid} && $r->{statusid} !~ /0|1|2|3/){
    		push(@terr,{rowid => $rrc, row=> "Row $rrc", msg => 'Invalid "Status" value: ' . $r->{Status} } ) and $fro{error} = 1 and $skip{$rc} = 1 and next;
    	}elsif($r->{statusid} && $r->{statusid} == 2){
    		push(@frows,\%fro);
    		next;
    	}
    	if(!$r->{customerid} && exists($r->{customernumber}) && ($r->{customernumber} eq "" || $r->{customernumber} !~ /\d+/) ){
    		push(@terr,{rowid => $rrc, row=> "Row $rrc", msg => 'Invalid "CustomerNbr" value: ' . $r->{customernumber} } ) and $fro{error} = 1 and $skip{$rc} = 1 and next;
    	}


    	my @opstatus = ("NEW","OWNERSHIP CHANGE","WAREHOUSE TRANSFER","CLOSURE","NEW BUSINESS","RELOCATION","LOST BUSINESS","");
    	my $opstatus = uc($r->{opstatus});

    	if( !grep( /^$opstatus$/, @opstatus ) ){
    		push(@err,{row=> "Row $rrc", msg => 'Invalid "Operating Status": ' . $r->{customernumber} } ) and $fro{error} = 1 and $skip{$rc} = 1 and next;
    	}

    	if($r->{unitname} && length($r->{unitname}) > 50){

    		push(@err,{rowid => $rrc, row=> "Row $rrc", msg => 'Invalid "Customer Name" or "Unit Name" value (over 50 characters): ' . $r->{unitname} } ) and $fro{error} = 1 and $skip{$rc} = 1 and next;
    	}


    	# only validate if no customerid
    	
	    	foreach my $k (keys %valid){
	    		next unless exists($r->{$k});
	    		if($r->{$k} || !$valid{$k}->{blank}){
	    			if($valid{$k}->{csv}){
	    				my @vals = split('\s*,\s*', $r->{$k});
	    				foreach my $v (@vals){

							my $res = $c->db->resultset($valid{$k}->{tb})->find({ $valid{$k}->{fd} => $v }, 
							{result_class=>'DBIx::Class::ResultClass::HashRefInflator'}
							) or push(@terr,{rowid => $rrc, row=> "Row $rrc", msg => 'ID Not Found ' . $k . ': ' . $v } ) and $fro{error} = 1 and $skip{$rc} = 1;


							if($valid{$k}->{set}){

								push(@{ $r->{ $valid{$k}->{set} } }, $res->{ $valid{$k}->{newval} });
								delete($r->{$k}) unless $k eq $valid{$k}->{set};;
								# show $res, $r;
							}

	    				}

	    			}else{

						my $res = $c->db->resultset($valid{$k}->{tb})->find({ $valid{$k}->{fd} => $r->{$k} }, 
							{result_class=>'DBIx::Class::ResultClass::HashRefInflator'}
							) or push(@terr,{rowid => $rrc, row=> "Row $rrc", msg => 'ID Not Found ' . $k . ': ' . $r->{$k} } ) and $fro{error} = 1 and $skip{$rc} = 1 ;

						if($valid{$k}->{set}){

							$r->{ $valid{$k}->{set} } = $res->{ $valid{$k}->{newval} };
							delete($r->{$k}) unless $k eq $valid{$k}->{set};
							# show $res, $r;
						}

						
					}
				}
	    	}
	    
	    if($r->{statusid} == 3){
	    	delete($skip{$rc});
	    }else{
	    	push(@err,@terr);
	    }

    	push(@frows,\%fro);
    	# last;
    }

    my %cidseen;
    my $rowcnt = scalar(@rows);
    	my $importcnt = 0;
	    for(my $rc = 0; $rc < scalar(@rows); $rc++){
	    	my $r = $rows[$rc];
			my $fro = $frows[$rc];
			my $rrc = $rc+1;
	    	# check dupes
	    	next if $skip{$rc};

	    	my @dupes = $c->db->resultset('Customer')->search({ customernumber => $r->{customernumber} , 'distributorwarehouseid' => $r->{distributorwarehouseid} }, 
				{result_class=>'DBIx::Class::ResultClass::HashRefInflator',
					# prefetch => ['warehouse']
				});
	    	if($r->{statusid} == 1 && $dupes[0] && $dupes[0]->{customerid}){
	    		# show $r;
	    		push(@err,{row=> "Row $rrc", msg => 'Duplicate Customer: ' .  $r->{customernumber} . '(DMA# ' . $dupes[0]->{customerid} . ')' } );
	    		delete($fro->{error});
	    		$fro->{warn} = 1;
#	    		$frows[$rc] = \%fro;
	    		next;
	    	}
	    	if($r->{statusid} == 1 && !$r->{groupname} && !$r->{chainunitid} && exists($r->{chainunitid})){
	    		push(@err,{row=> "Row $rrc", msg => 'Missing "Unit Name" and/or "Unit ID": ' . $r->{customernumber} } ) and $fro->{warn} = 1 and next;    
	    	}
	    	if($r->{statusid} == 3 && !$r->{customerid}){
				my $rs = $c->db->resultset('Customer')->find({ customernumber => $r->{customernumber} , 'distributorwarehouseid' => $r->{distributorwarehouseid} });
				if($rs){
					$r->{customerid} = $rs->customerid;
					$r->{statusid} = $rs->statusid;
				}
	    	}elsif($r->{statusid} == 3 && $r->{customerid}){
				my $rs = $c->db->resultset('Customer')->find({ customerid => $r->{customerid} });
				if($rs){
					$r->{statusid} = $rs->statusid;
				}
	    	}






    		foreach my $k (keys %$r){
    			delete($r->{$k}) unless $r->{$k};
    		}
    		delete($r->{systemname});
    		my $systemid = $r->{systemid}; delete($r->{systemid});

# show $systemid, $r;

    		# should be default in schema
    		# $r->{dmavpid} = 0;
    		# $r->{dmaprogrammanagerid} = 0;
    		# $r->{ownershipid} = 0;
    		# $r->{lastinvdate} = '0000-00-00 00:00:00';
    		if(!$r->{customerid}){
# show $r;    			
				$r->{lastupdatedbyid} = $c->session->{user_id};
				my $dt = DateTime->now(time_zone => 'America/Chicago');
				$r->{lastchangeddate} =  $dt->ymd('-') . ' ' . $dt->hms(':');
				$r->{setupdate} =  $dt->ymd('-') . ' ' . $dt->hms(':');
				$r->{opstatusdate} = $dt->year() . sprintf("%02d", $dt->month()) . sprintf("%02d", $dt->day());

				# my %p = $c->db->resultset('Customer')->by_id($s->pid)->get_columns;
				# my $a = join(", ", ($r->{address}, $r->{city}, $r->{state}, $r->{zip}) );
				# ($r->{latitude},$r->{longitude}) = $c->gpslatlon($a);

				# my $w = $c->db->resultset('DistributorWarehouse')->find({distributorwarehouseid => $r->{distributorwarehouseid} },{result_class=>'DBIx::Class::ResultClass::HashRefInflator'});
				# my $d = join(", ", ($w->{address}, $w->{cityname}, $w->{state}, $w->{zip}) );
				# $r->{distancetodistcenter} = $c->gpslatlon($a,$d);
				
				my $cuid = $c->unitid_create_update($r);
				push(@err,{row=> "Row $rrc", msg => 'Chain "Unit ID" Not Found To Rename - New Record NOT Created' . $r->{chainunitid} } ) and $fro->{warn} = 1 and next unless $cuid;				
				$r->{chainunitid} = $cuid;
				$r->{bpflagdate} = $r->{brandedprocurement} ? \'NOW()' : undef;
				my $s = $c->db->resultset('Customer')->create($r);
				if($systemid){
				  	my @systems = $c->db->resultset('BackOfficeSystem')->search({ systemid => { '-in' => $systemid } }); # in ARRAY or STRING
					$s->set_systems(\@systems);
				}				
				$importcnt++;
    		}else{
    			my $cid = $r->{customerid};
    			delete $r->{customerid};
				$r->{lastupdatedbyid} = $c->session->{user_id};
				my $dt = DateTime->now(time_zone => 'America/Chicago');
				$r->{lastchangeddate} =  $dt->ymd('-') . ' ' . $dt->hms(':');
				$r->{opstatusdate} = $dt->year() . sprintf("%02d", $dt->month()) . sprintf("%02d", $dt->day());
				$r->{bpflagdate} = $r->{brandedprocurement} ? \'NOW()' : undef;
				# if(ref($r->{backofficesys}) eq 'ARRAY'){
				# 	$r->{backofficesys} = join(",", @{$r->{backofficesys}});
				# }
				# my $a = join(", ", ($r->{address}, $r->{city}, $r->{state}, $r->{zip}) );
				# ($r->{latitude},$r->{longitude}) = $c->gpslatlon($a);

				# my $w = $c->db->resultset('DistributorWarehouse')->find({distributorwarehouseid => $r->{distributorwarehouseid} },{result_class=>'DBIx::Class::ResultClass::HashRefInflator'});
				# my $d = join(", ", ($w->{address}, $w->{cityname}, $w->{state}, $w->{zip}) );
				# $r->{distancetodistcenter} = $c->gpslatlon($a,$d);

				if($r->{statusid} == 2){
					 $c->db->resultset('Customer')->by_id($cid)->update({ statusid => 2, active => 0, comments => $r->{comments}, opstatus => $r->{opstatus} });

				}else{
					if(exists($c->{chainunitid})){
						my $cuid = $c->unitid_create_update($r);
						push(@err,{row=> "Row $rrc", msg => 'Chain "Unit ID" Not Found To Rename - New Record NOT Created' . $r->{chainunitid} } ) and $fro->{warn} = 1 and next unless $cuid;
						$r->{chainunitid} = $cuid;
					}

					my %c = $c->db->resultset('Customer')->by_id($cid)->update($r)->get_columns;
					my $customer =  $c->db->resultset('Customer')->by_id($cid);
					if($systemid){
					  	my @systems = $c->db->resultset('BackOfficeSystem')->search({ systemid => { '-in' => $systemid} }); # in ARRAY or STRING
						$customer->set_systems(\@systems);
					}

				}



				$importcnt++;
    		}


    	}


# resp success
# show @frows;
		my $one = [$frows[0]];
show $one;		
		$c->check_email_notification($one, 1);



		my $msgs = [];
		if($importcnt){
			push(@$msgs, {type => 'success', msg => 'Success', details => '(' . $importcnt . ') Rows Imported of (' . $rowcnt . ')'});
		}
		if(@err){
			push(@$msgs, { type => 'error', msg => 'Error', details => '(' . $importcnt . ') Rows Imported of (' . $rowcnt . '). Import rows failed with the following errors:', errs => \@err});
		}
		my $jobj = {"data"=>\@frows,"draw"=>1,"header"=>\@cols,"recordsFiltered"=>scalar(@frows),"recordsTotal"=>scalar(@frows)};
 		$c->render(json => {msgs => $msgs , tabledata => $jobj });

}

sub unitid_create_update{
	my $c = shift;
	my $r = shift;

	if($r->{chainunitid} && $r->{groupname}){	
		# create new if not found?
   		return undef unless $c->db->resultset('ChainUnit')->search({chainunitid => $r->{chainunitid} })->count;

		my $cu = {
			chainunitname => uc($r->{groupname}),
			active => 1
		};						

		$c->db->resultset('ChainUnit')->find({chainunitid => $r->{chainunitid} })->update($cu);

	}elsif(!$r->{chainunitid}){
		my $cu = {
			chainconceptid => $r->{chainconceptid},
			chaingroupid => $r->{chaingroupid},
			chainunitname => $r->{customerunitnumber} ? uc(join(" ", $r->{groupname}, $r->{customerunitnumber})) : uc($r->{groupname}),
			active => 1
		};
		my $s = $c->db->resultset('ChainUnit')->create($cu);
		$r->{chainunitid} = $s->chainunitid;
	}	

	return $r->{chainunitid};

}

sub setup{
	my $c = shift;


	my $fform = {
		attrs => {
			name => 'importform',
			title => '',
			action => '',
			method => 'POST',
			formon => 'form-always',
			formoff => 'form-never',
			cols => 1,
			autocomplete=>"new-password",
			enctype => 'multipart/form-data'
		},
		sorder => [],
		eorder => [qw/spacer excel importexcel empty empty itn importitn importitn2/],
		elems =>     {
			empty => { attrs =>{ name => 'empty'}, type => 'empty' },
			excel => {
			      attrs => {
			                 class => "form-control input-md",
			                 name => "excel",
			               },
			      title => "Excel File to Import (<a href='/Import.Template.xls'>Download Import Template</a>)",
			      type => "file",
			      val => undef,
			},

			importexcel => {
			      attrs => [{
			                 class => "form-control form-btn btn btn-md btn-primary importfile",
			                 name => "importexcel",
			                 'data-file' => 'excel',
			                 'data-url' => '/import/excel'
			               }],
			      labels => ["Import from Excel"],
			      type => "button",
			      val => undef,
			},			
			itn => {
			      attrs => {
			                 class => "form-control input-md",
			                 name => "itn",
			               },
			      title => "ITN File to Import",
			      type => "file",
			      val => undef,
			},	
			importitn => {
			      attrs => [{
			                 class => "form-control form-btn btn btn-md btn-primary importfile",
			                 name => "importitn",
			                 'data-file' => 'itn',
			                 'data-url' => '/import/itn'			                 
			               }],
			      labels => ["Import from ITN"],
			      type => "button",
			      val => undef,
			},		
			importitn2 => {
			      attrs => [{
			                 class => "form-control form-btn btn btn-md btn-success",
			                 name => "importitn2",
			                 # 'data-file' => 'itn',
			                 # 'data-url' => '/import/itn',
			                 style => 'display:none;',
			                 type => 'button'
			               }],
			      labels => ["Complete Import from ITN"],
			      type => "button",
			      val => undef,
			},						
			spacer => { attrs =>{ name => 'spacer '}}		
    	},
	};


	$c->{_forms}->{default} = $c->form($fform);


}

1;