SP Areas

 avatar
unknown
mysql
3 years ago
18 kB
6
Indexable
DROP PROCEDURE `usp_ci_upload_areas`

GO

CREATE  PROCEDURE `usp_ci_upload_areas`(
    int_year int,
    int_period int,
    int_userid int,
    int_error int,
    int_typeid int
)
BEGIN

declare has_error int default 0;

declare required_count int DEFAULT 0;

declare file_required_count int DEFAULT 0;

declare sql_territories varchar(1000) DEFAULT '';

declare sql_areas varchar(1000) DEFAULT '';

drop table if exists tmp_rawdata;

create table tmp_rawdata
(
	position varchar(250) DEFAULT NULL,
	areacode varchar(250) DEFAULT NULL,
	areatype varchar(250) DEFAULT NULL,
	areadescription varchar(250) DEFAULT NULL,
	areatypeid varchar(250) DEFAULT NULL,
	userroleid varchar(250) DEFAULT NULL,
	useraccesslevel varchar(250) DEFAULT NULL,
	areaaccesslevel varchar(250) DEFAULT NULL,
	errormessage varchar(8000) DEFAULT '',
	etimestamp timestamp DEFAULT CURRENT_TIMESTAMP,
	invalid int default 0
);




drop table if exists error_logs;



create temporary table error_logs
(
	position varchar(250) DEFAULT NULL,
	areacode varchar(250) DEFAULT NULL,
	areatype varchar(250) DEFAULT NULL,
	areadescription varchar(250) DEFAULT NULL,
	errormessage varchar(8000) DEFAULT NULL
);





drop table if exists tmp_duplicate_logs;




create temporary table tmp_duplicate_logs
(
	areacode varchar(250) DEFAULT NULL,
	areatype varchar(250) DEFAULT NULL,
	areadescription varchar(250) DEFAULT NULL
);





drop table if exists tmp_return_table;




create temporary table tmp_return_table
(
	returncode varchar(250) DEFAULT NULL,
	message varchar(250) DEFAULT NULL,
	pathoutfile varchar(250) DEFAULT NULL
);




 
 drop temporary table if exists temp;




create temporary table temp
(
	Position varchar(500) DEFAULT NULL,
	TerritoryName varchar(500) DEFAULT NULL,
	TerritoryDescription varchar(500) DEFAULT NULL,
	territoryareatype varchar(250) DEFAULT NULL,
  	TerritoryCode varchar(500) DEFAULT NULL,
  	Eyear varchar(500) DEFAULT NULL,
  	UserRoleID varchar(500) DEFAULT NULL,
  	UserAccessLevel varchar(500) DEFAULT NULL,
	errormessage varchar(8000) DEFAULT '',
	etimestamp timestamp DEFAULT CURRENT_TIMESTAMP,
	invalid int default 0
);





drop temporary table if exists tmp_error_logs;




create temporary table tmp_error_logs
(
	Position varchar(500) DEFAULT NULL,
	TerritoryName varchar(500) DEFAULT NULL,
	TerritoryDescription varchar(500) DEFAULT NULL,
  	TerritoryCode varchar(500) DEFAULT NULL,
	errormessage varchar(8000) DEFAULT NULL
);





drop table if exists tmp_terr_duplicate_logs;




create temporary table tmp_terr_duplicate_logs
(
	TerritoryName varchar(500) DEFAULT NULL,
	TerritoryDescription varchar(500) DEFAULT NULL,	
  	TerritoryCode varchar(500) DEFAULT NULL
);



 
 IF EXISTS (select 1 from tbl_upload_areas where areacode <> '' and areatype <> '' and areadescription <> '' and areatype <> 'Field Personnel Area') THEN
	
	INSERT INTO tmp_rawdata(position, areacode, areatype, areadescription)
	SELECT position, areacode, areatype, areadescription
	FROM tbl_upload_areas where areatype <> 'Field Personnel Area';




	
	UPDATE tmp_rawdata a
	INNER JOIN areatype at
		ON a.areatype = at.areatypename
	SET a.areatypeid = at.areatypeid
	WHERE at.areatypeid in (1,2,3,4);





	UPDATE tmp_rawdata SET areaaccesslevel = CASE 
		WHEN areatypeid = 1 THEN 740
		WHEN areatypeid = 2 THEN 730
		WHEN areatypeid = 3 THEN 720
		WHEN areatypeid = 4 THEN 710
	END;




	UPDATE tmp_rawdata a
	INNER JOIN user_roles ur
		ON a.position = ur.rolename
	INNER JOIN employeepositions ep
		ON ur.userpositionid = ep.employeepositionid
	SET a.userroleid = ur.roleid, a.useraccesslevel = ep.accesslevelid
	WHERE ep.accesslevelid in (710,720,730,740);



	
	
	delete from tmp_rawdata
	where position is NULL and
		  areacode is NULL and
		  areatype is NULL and
		  areadescription is NULL;





		  
	
	SELECT COUNT(1) INTO required_count
	FROM user_roles a 
	INNER JOIN employeepositions b ON a.userpositionid = b.employeepositionid 
	WHERE b.accesslevelid IN (710,720,730,740);





	IF EXISTS (select 1 from tmp_rawdata where areacode is NULL or areacode = '') THEN
		
	update tmp_rawdata set invalid = 1, errormessage = concat(errormessage, '| AreaCode is Empty') where areacode is NULL or areacode = '';




		
	END IF;




	
	IF EXISTS (select 1 from tmp_rawdata where areatype is NULL or areatype = '') THEN
		
	update tmp_rawdata set invalid = 1, errormessage = concat(errormessage, '| AreaType is Empty') where areatype is NULL or areatype = '';





		
	END IF;





	
	IF EXISTS (select 1 from tmp_rawdata where areadescription is NULL or areadescription = '') THEN
		
	update tmp_rawdata set invalid = 1, errormessage = concat(errormessage, '| AreaDescription is Empty') where areadescription is NULL or areadescription = '';




		
	END IF;





	IF EXISTS (select 1 from tmp_rawdata where position is NULL or position = '') THEN
		
		update tmp_rawdata set invalid = 1, errormessage = concat(errormessage, '| Position is Empty') where position is NULL or position = '';





		
	END IF;





	IF EXISTS (select 1 from tmp_rawdata tv 
	inner join areas a 
	on a.areacode = tv.areacode) THEN
		
	update tmp_rawdata tv 
	inner join areas a 
	on a.areacode = tv.areacode
	set invalid = 1, errormessage = concat(errormessage, '| AreaCode already Exists');





		
	END IF;






	IF EXISTS (select 1 from tmp_rawdata tv 
	inner join areas a 
	on a.areadescription = tv.areadescription) THEN
		
	update tmp_rawdata tv 
	inner join areas a 
	on a.areadescription = tv.areadescription
	set invalid = 1, errormessage = concat(errormessage, '| AreaDescription already Exists');





		
	END IF;





	IF EXISTS (select * FROM tmp_rawdata
    WHERE areacode REGEXP '[^a-zA-Z0-9[.hyphen-minus.][.space.]]') THEN
         	  
    update tmp_rawdata set invalid = 1, errormessage = concat(errormessage, '| Invalid AreaCode')
    WHERE areacode REGEXP '[^a-zA-Z0-9[.hyphen-minus.][.space.]]';





         	  
    END IF;






	IF EXISTS (select * FROM tmp_rawdata
    WHERE areadescription REGEXP '[^a-zA-Z0-9[.hyphen-minus.][.space.]]') THEN
         	  
    update tmp_rawdata set invalid = 1, errormessage = concat(errormessage, '| Invalid AreaDescription')
    WHERE areadescription REGEXP '[^a-zA-Z0-9[.hyphen-minus.][.space.]]';





         	  
    END IF;





    
    IF EXISTS (select 1 FROM tmp_rawdata
    WHERE areatypeid is NULL) THEN
         	  
    update tmp_rawdata set invalid = 1, errormessage = concat(errormessage, '| Unknown AreaType') 
    WHERE areatypeid is NULL;





         	  
    END IF;






    IF EXISTS (select 1 FROM tmp_rawdata
    WHERE userroleid is NULL) THEN
         	  
    update tmp_rawdata set invalid = 1, errormessage = concat(errormessage, '| Unknown Position') 
    WHERE userroleid is NULL;





         	  
    END IF;





    IF EXISTS (select 1 FROM tmp_rawdata
    group by areacode having count(1) > 1) THEN
        
	insert into tmp_duplicate_logs(areacode, areatype, areadescription)
	select areacode, areatype, areadescription
	from tmp_rawdata group by areacode having count(1) > 1;





    	  
    update tmp_rawdata set invalid = 1, errormessage = concat(errormessage, '| Duplicate AreaCode') 
    where (areacode) in (
    select areacode from tmp_duplicate_logs);





         	  
    END IF;





    
    truncate table tmp_duplicate_logs;





    IF EXISTS (select 1 FROM tmp_rawdata
    group by areadescription having count(1) > 1) THEN
        
	insert into tmp_duplicate_logs(areacode, areatype, areadescription)
	select areacode, areatype, areadescription
	from tmp_rawdata group by areadescription having count(1) > 1;





    	  
    update tmp_rawdata set invalid = 1, errormessage = concat(errormessage, '| Duplicate AreaDescription') 
    where (areadescription) in (
    select areadescription from tmp_duplicate_logs);





         	  
    END IF;





    SELECT COUNT(distinct userroleid) INTO file_required_count
    FROM tmp_rawdata
    WHERE invalid <> 1;




    
    IF (file_required_count <> required_count) THEN
    	
	update tmp_rawdata 
	set invalid = 1, errormessage = concat(errormessage, '| Please select 1 for every Positions');




		
    END IF;







    IF EXISTS (SELECT 1 FROM tmp_rawdata 
	WHERE useraccesslevel <> areaaccesslevel) THEN

	update tmp_rawdata set invalid = 1, errormessage = concat(errormessage, '| Incorrect AreaType Assignment') 
    WHERE useraccesslevel <> areaaccesslevel;





	END IF;





    IF EXISTS (select 1 from tmp_rawdata where invalid = 1) THEN
    
    	set sql_areas = 'union all (select position, areacode, areatype, areadescription, errormessage 
					       	from tmp_rawdata where invalid = 1) ';




    END IF;





ELSE 
	
	INSERT INTO tmp_return_table(returncode, message, pathoutfile)
	VALUES(2, 'Empty File', '');






END IF;




 
 IF EXISTS(select 1 from tbl_upload_areas where areacode <> '' and areatype <> '' and areadescription <> '' and areatype = 'Field Personnel Area') THEN
	
	insert into temp(Position, TerritoryName, TerritoryDescription, territoryareatype, TerritoryCode)
	select Position, AreaCode, AreaDescription, Areatype, AreaCode from tbl_upload_areas where areatype = 'Field Personnel Area';





	update temp a 
	inner join territories t
	on a.TerritoryName = t.TerritoryName and  a.TerritoryDescription = t.territorydescription
	set a.Eyear = t.Eyear;





	UPDATE temp a
	INNER JOIN user_roles ur
		ON a.position = ur.rolename
	INNER JOIN employeepositions ep
		ON ur.userpositionid = ep.employeepositionid
	SET a.userroleid = ur.roleid, a.useraccesslevel = ep.accesslevelid
	WHERE ep.accesslevelid in (800);





	if exists(select 1 from temp where Eyear is null) then

		update temp set Eyear = YEAR(CURDATE()) 
			where Eyear is null;





	end if;





	delete from temp where 
	Position is null and 
	TerritoryName is null and 
	TerritoryDescription is null and 
	TerritoryCode is null and
	Eyear is null;





	if exists(select 1 from temp where TerritoryDescription is null or TerritoryDescription = '') then 

		update temp set invalid = 1, errormessage = concat(errormessage, '| TerritoryDescription is Empty ') where TerritoryDescription is NULL or TerritoryDescription = '';





	end if;





	if exists(select 1 from temp where TerritoryCode is null or TerritoryCode = '') then

		update temp set invalid = 1, errormessage = concat(errormessage, '| TerritoryCode is Empty ') where TerritoryCode is NULL or TerritoryCode = '';





	end if;





	if exists(select 1 from temp where Position is null or Position = '') then

		update temp set invalid = 1, errormessage = concat(errormessage, '| Position is Empty ') where Position is NULL or Position = '';





	end if;





	IF EXISTS (select 1 from temp a 
				   inner join territories t 
						on t.TerritoryDescription = a.TerritoryDescription) THEN
			
			update temp a 
		    inner join territories t
				on a.TerritoryDescription = t.TerritoryDescription
			set invalid = 1, errormessage = concat(errormessage, '| TerritoryDescription already Exists');




			
	END IF;




		
	IF EXISTS (select 1 from temp a 
				   inner join territories t 
						on t.TerritoryCode = a.TerritoryCode) THEN
			
			update temp a 
		    inner join territories t
				on a.TerritoryCode = t.TerritoryCode
			set invalid = 1, errormessage = concat(errormessage, '| TerritoryCode already Exists');




			
	END IF;





	IF EXISTS (select 1 from temp a 
				   inner join territories t 
						on t.TerritoryCode = a.TerritoryCode 
						and a.Eyear = t.Eyear) THEN
			
			update temp a 
		    inner join territories t
			on a.TerritoryCode = t.TerritoryCode
			and a.Eyear = t.Eyear
			set invalid = 1, errormessage = concat(errormessage, '| TerritoryCode - Year already Exists');




			
	END IF;





	if exists(select TerritoryName from temp group by TerritoryName having count(1) > 1) then 

		insert into tmp_terr_duplicate_logs(TerritoryName, TerritoryCode, TerritoryDescription)
			select TerritoryName, TerritoryCode, TerritoryDescription
			from temp group by TerritoryDescription having count(TerritoryDescription) > 1;




	    		  
	    	update temp set invalid = 1, errormessage = concat(errormessage, '| Duplicate TerritoryDescription') 
	    	where TerritoryDescription in (
	    		select TerritoryDescription from tmp_terr_duplicate_logs);





	end if;






	if exists(select TerritoryCode from temp group by TerritoryCode having count(1) > 1) then 

		insert into tmp_terr_duplicate_logs(TerritoryName, TerritoryCode, TerritoryDescription)
			select TerritoryName, TerritoryCode, TerritoryDescription
			from temp group by TerritoryCode having count(TerritoryCode) > 1;




	    		  
	    	update temp set invalid = 1, errormessage = concat(errormessage, '| Duplicate TerritoryCode') 
	    	where TerritoryCode in (
	    		select TerritoryCode from tmp_terr_duplicate_logs);





	end if;





	if exists(select TerritoryDescription from temp
	         	  WHERE TerritoryDescription REGEXP '[^a-zA-Z0-9[.space.][.hyphen-minus.]]') THEN
	         	  
	        update temp set invalid = 1, errormessage = concat(errormessage, '| Invalid TerritoryDescription')
	        	WHERE TerritoryDescription REGEXP '[^a-zA-Z0-9[.space.][.hyphen-minus.]]';




	         	  
	end if;





	if exists(select TerritoryCode from temp
	         	  WHERE TerritoryCode REGEXP '[^a-zA-Z0-9[.space.][.hyphen-minus.]]') THEN

	        update temp set invalid = 1, errormessage = concat(errormessage, '| Invalid TerritoryCode')
	        	WHERE TerritoryCode REGEXP '[^a-zA-Z0-9[.space.][.hyphen-minus.]]';




	         	  
	end if;





	 	 	 	IF EXISTS (SELECT 1 FROM temp 
				WHERE useraccesslevel <> 800) THEN

		update temp set invalid = 1, errormessage = concat(errormessage, '| Incorrect User Role Assignment') 
        	WHERE useraccesslevel <> 800;





	END IF;






	 	 	     IF EXISTS (select 1 FROM temp
     	  WHERE userroleid is NULL) THEN
     	  
    	UPDATE temp set invalid = 1, errormessage = concat(errormessage, '| Unknown Position') 
    	WHERE userroleid is NULL;




         	  
    END IF;







	if exists(select 1 from temp where invalid = 1) THEN

    	set sql_territories = 'union all (select Position, TerritoryCode, TerritoryDescription, Eyear, errormessage 
					       	from temp where invalid = 1) ';





    end IF;





ELSE 
	
	INSERT INTO tmp_return_table(returncode, message, pathoutfile)
	VALUES(2, 'Empty File', '');






END IF;




  
      		 		 		 		 		 		 		 		 


		 

		 

		 

	      
	  	  

	 
  		if (sql_areas = '' and sql_territories = '') THEN

			INSERT INTO tmp_return_table(returncode, message, pathoutfile)
		    VALUES(0, 'Successful', '');





		    if exists(select 1 from temp where Errormessage = '') then

			    INSERT INTO territories(TerritoryCode, TerritoryName, ETimeStamp, Eyear, RoleID, territorydescription)
				SELECT a.TerritoryCode, a.TerritoryName, a.ETimeStamp, YEAR(CURDATE()), a.UserRoleID, a.territorydescription
				FROM temp a;





			end if;




		    
		    INSERT INTO areas(AreaName, Active, ETimeStamp, AreaTypeID, AreaCode, AreaDescription, RoleID)
		    SELECT tv.areacode, 1, CURRENT_TIMESTAMP, tv.areatypeid, tv.areacode, tv.areadescription, tv.userroleid
		    FROM tmp_rawdata tv;



		END IF;



     
	drop table if exists tbl_areas;



	create table tbl_areas
	(
		position varchar(250) DEFAULT NULL,
		areacode varchar(250) DEFAULT NULL,
		areatype varchar(250) DEFAULT NULL,
		areadescription varchar(250) DEFAULT NULL
	);



	drop table if exists areas_data_error;



	create table areas_data_error
	(
		position varchar(250) DEFAULT NULL,
		areacode varchar(250) DEFAULT NULL,
		areatype varchar(250) DEFAULT NULL,
		areadescription varchar(250) DEFAULT NULL,
		errormessage varchar(8000) DEFAULT NULL
	);



	insert into tbl_areas(position, areacode, areatype, areadescription)
	select Position, AreaCode, AreaType, AreaDescription from tmp_rawdata where invalid != 1
	UNION
	select Position, TerritoryCode, territoryareatype, TerritoryDescription from temp where invalid != 1;



	INSERT INTO areas_data_error(position, areacode, areatype, areadescription, errormessage)
    SELECT position, areacode, areatype, areadescription, errormessage FROM tmp_rawdata where invalid = 1
    UNION
	select Position, TerritoryCode, territoryareatype, TerritoryDescription,errormessage from temp where invalid = 1;



    if exists(select 1 from areas_data_error)then
    
        if has_error != 2 then
            
                set has_error = 3;


      
        end if;


 
    end if;



    truncate tbl_upload_areas;



     
    select has_error;



END
Editor is loading...