--USE [SAP_SMADAR]
CREATE PROCEDURE SP_HANA_INSERT_ALL(
   -- Input parameters --
   
   IN DataFile NVARCHAR(255),
   IN DocumentNumber NVARCHAR(50),
   IN DocumentName NVARCHAR(255),
   OUT Result integer)
	LANGUAGE SQLSCRIPT 
	AS

BEGIN
	--DECLARE Result INT;
	-- Temporary variables --
	DECLARE MYTYPE NVARCHAR(30);
	DECLARE Code NVARCHAR(30);
	DECLARE Name NVARCHAR(30);
	DECLARE DocNumber NVARCHAR(50);
	DECLARE DocTable NVARCHAR(255);
	DECLARE Path NVARCHAR(255); --ntext
	DECLARE Remarks NVARCHAR(255);
	--DECLARE  Description NVARCHAR(MAX);
	DECLARE Date DATETIME;
	DECLARE Time SMALLINT;
	DECLARE UserName NVARCHAR(255);
	DECLARE Type NVARCHAR(255);
	DECLARE DocTablePath NVARCHAR(255);
	DECLARE MSG NVARCHAR(255);
	
	DECLARE TEMPPROC NVARCHAR(255);
	
	DECLARE FldName NVARCHAR(255);
	DECLARE Signs SMALLINT;
	DECLARE ind SMALLINT;
	DECLARE TimeBuff NVARCHAR(8);
	DECLARE TimeChar NVARCHAR(8);
	--DECLARE K INT;
	DECLARE found INT := 0;
	DECLARE COMPANY NVARCHAR(30);
	DECLARE IND SMALLINT := 0;
	DECLARE DOCTABNAME NVARCHAR(30);

	Result :=0;
	
	
	Date := CURRENT_DATE;-- AS nvarchar(10);-- N'250218'; --GETDATE();
	TimeBuff := CAST(CURRENT_TIME AS NVARCHAR(8)); --'250218'; --CONVERT(NVARCHAR(8), GETDATE(), 108);
	-- CAST(TO_TIME(CAST(CURRENT_TIME AS NVARCHAR(8)),'HHMI') AS NVARCHAR(8));--
	TimeChar := CONCAT(SUBSTRING(:TimeBuff, 1, 2), SUBSTRING(:TimeBuff, 4, 2));
	Time := CAST(TimeChar AS SMALLINT);
	
	IND := PATINDEX('%[^0-9]%', :DocumentNumber);
	IF :IND>1 THEN
		COMPANY := SUBSTRING(:DocumentNumber,1,:IND-1); 
	ELSE 
		RAISERROR (N'Not found company number :  %s' , 11, 1, N'0'); 
		RETURN -1; 
	END IF;

	IF :COMPANY = N'000' THEN
		DOCTABNAME := N'HANA_DB'; 
	END IF;
	
	MYTYPE := SUBSTRING(:DocumentNumber, :IND, 1);
	--32
	ind := LOCATE(:DataFile,'.');
	Type = RIGHT(:DataFile,LENGTH(:DataFile) - ind);
	
	DocNumber := SUBSTRING(:DocumentNumber, :IND+1, LENGTH(:DocumentNumber) - 1);

	IF :MYTYPE =N'A' THEN
		DocNumber := SUBSTRING(:DocumentNumber, 3, LENGTH(:DocumentNumber) - 2);
		MYTYPE := SUBSTRING(:DocumentNumber, 1, 2);
	END IF;

	IF :MYTYPE = N'D' THEN 
		 DocTable := N'ODLN'; 
		 FldName := N'DocNum'; 
	--END   -- 1 תעודת משלוח

	ELSEIF :MYTYPE = N'O' 
	THEN 
		DocTable := N'ORDR'; 
		FldName := N'DocNum'; 
	--END   -- 2 הזמנת לקוח

	ELSEIF :MYTYPE = N'I' 
	THEN 
		DocTable := N'OINV'; 
		FldName := N'DocNum'; 
	--END   -- 3 חשבונית

	ELSEIF :MYTYPE = N'L' 
	THEN 
		DocTable := N'OQUT';
		FldName := N'DocNum';
	--END   -- 4 הצעות מחיר

	ELSEIF :MYTYPE = N'H'
	THEN 
		DocTable := N'ORDN'; 
		FldName := N'DocNum'; 
	--END  -- 5 החזרה
	ELSEIF :MYTYPE = N'J'
	THEN 
		DocTable := N'ORIN'; 
		FldName := N'DocNum'; 
	--END   -- 6 חשבונית זיכוי
	ELSEIF :MYTYPE = N'N' 
	THEN 
		DocTable := N'ORPC'; 
		FldName := N'DocNum'; 
	--END   -- 7 זיכוי רכש
	ELSEIF :MYTYPE = N'M' 
	THEN 
		DocTable := N'OPDN'; 
		FldName := N'DocNum'; 
	--END   -- 8  89תעודת משלוח רכש
	ELSEIF :MYTYPE = N'R'
	THEN
		DocTable := N'OPOR'; 
		FldName := N'DocNum';
	--94END    -- 9 הזמנת רכש
	ELSEIF :MYTYPE = N'U'
	THEN
		DocTable := N'ORPD'; 
		FldName := N'DocNum';
	--END    -- 10 החזרת רכש
	ELSEIF :MYTYPE = N'Q'
	THEN 
		DocTable := N'OPCH'; 
		FldName := N'DocNum';
		--END    -- 11 חשבונית ספק
	ELSEIF :MYTYPE = N'T'
	THEN
		DocTable := N'OSCL';
		FldName := N'callID'; --END   -- 12 קריאת שירות
	ELSEIF :MYTYPE = N'E'
	THEN
		DocTable := N'ODPS';
		FldName := N'DeposNum';-- END -- 13 הפקדות לבנק
	ELSEIF :MYTYPE = N'K'
	THEN
		DocTable := N'ORCT';
		FldName := N'DocNum';-- END   -- 14 קבלות
	ELSEIF :MYTYPE = N'C'
	THEN
		DocTable := N'OCRD';
		FldName := N'DocEntry';-- END -- 15 כרטיס לקוח / ספק
	ELSEIF :MYTYPE = N'F'
	THEN 
		DocTable := N'OJDT';
		FldName := N'transID';--END   -- 16 תנועת יומן
	ELSEIF :MYTYPE = N'X'
	THEN
		DocTable := N'OIPF';
		FldName := N'DocNum'; --END   -- 17 תיק יבוא
	ELSEIF :MYTYPE = N'P'
	THEN
		DocTable := N'OHEM';
		FldName := N'empID';-- END    -- 18 ניהול עובדים
	ELSEIF :MYTYPE = N'B'
	THEN
		DocTable := N'OBNK';
		FldName := N'CardCode'; --END -- 19 דפי בנק )לפי כרטיס(
	ELSEIF :MYTYPE = N'W'
	THEN
		DocTable := N'OWTR';
		FldName = N'DocNum';-- END   -- 20 העברה בין מחסנים
	ELSEIF :MYTYPE = N'G'
	THEN
		DocTable := N'OITM';
		FldName := N'DocEntry';-- END -- 21 כרטיס פריט
	ELSEIF :MYTYPE = N'Z'
	THEN
		DocTable := N'OCLG';
		FldName := N'ClgCode'; --END  -- 22 פעילות
	ELSEIF :MYTYPE = N'S'
	THEN
		DocTable := N'OWOR';
		FldName := N'DocNum'; --END   -- 23 הזמנת ייצור
	ELSEIF :MYTYPE = N'Y'
	THEN
		DocTable := N'OCTR';
		FldName := N'ContractID'; --END  -- 24 חוזה שירות
	ELSEIF :MYTYPE = N'V'
	THEN
		DocTable := N'OACT';
		FldName := N'FormatCode'; --END  -- 25 דפי בנק )לפי קוד חשבון(
	ELSEIF :MYTYPE = N'AB'
	THEN
		DocTable := N'OOPR'; 
		FldName := N'OpprId'; --END --26 הזדמנות מכירה
	ELSEIF :MYTYPE = N'AC'
	THEN
		DocTable := N'OPQT'; 
		FldName := N'DocNum'; --END --27 הצעת מחיר לקניה
	ELSEIF :MYTYPE = N'AP'
	THEN
		DocTable := N'OVPM'; 
		FldName := N'DocNum'; --END --28 תשלומים לספקים
	ELSEIF :MYTYPE = N'AN'
	THEN
		DocTable := N'OIGN'; 
		FldName := N'DocNum'; --END --29 כניסה כללית למלאי
	ELSEIF :MYTYPE = N'AE'
	THEN
		DocTable := N'OIGE'; 
		FldName := N'DocNum'; --END --30 יציאה כללית מהמלאי
	ELSEIF :MYTYPE = N'AD'
	THEN
		DocTable := N'OPKL'; 
		FldName := N'AbsEntry'; --END --31 רשימת איסוף
	ELSEIF :MYTYPE = N'AF'
	THEN
		DocTable := N'OBTD'; 
		FldName := N'BatchNum'; --END --32 פקודות יומן
	ELSEIF :MYTYPE = N'AT'
	THEN
		DocTable := N'OACT'; 
		FldName := N'AcctCode'; --END --33 לוח חשבונות
	ELSEIF :MYTYPE = N'AH'
	THEN
		DocTable := N'ODPO'; 
		FldName := N'DocNum'; --END --34 
	ELSEIF :MYTYPE = N'AM'
	THEN
		DocTable := N'OIQR'; 
		FldName := N'DocNum'; --END --35 

	ELSEIF :MYTYPE = N'AL'
	THEN
		DocTable := N'OPRQ'; 
		FldName := N'DocNum'; --END --36 בקשת רכש
	
	ELSEIF :MYTYPE = N'AV'
	THEN
		DocTable := N'ORRR'; 
		FldName := N'DocNum'; --END --37 בקשת החזרה

	ELSEIF :MYTYPE = N'AI'
	THEN
		DocTable := N'OPRR'; 
		FldName := N'DocNum'; --END --38 בקשת החזרת רכש 

	ELSEIF :MYTYPE = N'AO'
	THEN
		DocTable := N'OWTQ'; 
		FldName := N'DocNum'; --END --39 בקשת העברה בין מחסנים

	ELSEIF :MYTYPE = N'AR'
	THEN
		DocTable := N'ODRF'; 
		FldName := N'DocEntry'; --END --40 טיוטה

	ELSEIF :MYTYPE = N'AG'
	THEN
		DocTable := N'OOAT'; 
		FldName := N'Number'; --END --41`בקשת העברה בין מחסנים

	ELSEIF :MYTYPE = N'AU'
	THEN
		DocTable = N'OINS'; 
		FldName = N'internalSN'; --END  -- 42 כרטיס ציוד

	/* Support ZIV Systems types */
	--120
	ELSEIF :MYTYPE = N'AA' 
	THEN 
		MYTYPE := SUBSTRING( :DocumentNumber, 1, 3); 
		DocNumber := SUBSTRING( :DocumentNumber, 4, LENGTH( :DocumentNumber) - 3);
		IF :MYTYPE = N'AAB' 
		THEN 
			DocTable := N' A1GEN_PROJ_SITE'; 
			FldName := N'Code'; 
		--END        -- 1 פרוייקט/אתר השכרה
		ELSEIF :MYTYPE = N'AAC' 
		THEN 
			DocTable := N' A1SALE_BUILDING'; 
			FldName := N'Code'; 
		--END        -- 2 מבנה מכירה
		ELSEIF :MYTYPE = N'AAD'
		THEN
			DocTable := N' A1SALE_FLOOR'; 
			FldName := N'Code'; 
		--END           -- 3 קומה מכירה
		ELSEIF :MYTYPE = N'AAE' 
		THEN 
			DocTable := N' A1SALE_ASSET'; 
			FldName := N'Code'; 
		--END           -- 4 נכס מכירה
		ELSEIF :MYTYPE = N'AAF'
		THEN 
			DocTable := N' A1SALE_Price_List'; 
			FldName := N'Code'; 
		--END      -- 5 מחירון נכס מכירה
		ELSEIF :MYTYPE = N'AAG'
		THEN
			DocTable := N' A1SALE_CONTRACT'; 
			FldName := N'Code'; 
		--END        -- 6 חוזה מכירה
		ELSEIF :MYTYPE = N'AAH'
		THEN 
			DocTable = N' A1SALE_Add_To_Con'; 
			FldName = N'Code'; 
		--END      -- 7 תוספת מכירה
		ELSEIF :MYTYPE = N'AAI'
		THEN
			DocTable := N' A1SALE_SPECIFICTON'; 
			FldName := N'Code'; 
		--END   -- 8 מפרט מכירה
		ELSEIF :MYTYPE = N'AAJ'
		THEN
			DocTable := N' A1RENT_BUILDING'; 
			FldName := N'Code'; 
		--END        -- 9 מבנה השכרה
		ELSEIF :MYTYPE = N'AAK'
		THEN
			DocTable := N' A1RENT_FLOOR'; 
			FldName := N'Code'; 
		--END           -- 10 קומה השכרה
		ELSEIF :MYTYPE = N'AAL'
		THEN 
			DocTable := N' A1RENT_ASSET';
			FldName := N'Code'; 
		--END           -- 11 נכס השכרה
		ELSEIF :MYTYPE = N'AAM' 
		THEN
			DocTable := N' A1RENT_CONTRACT';
			FldName := N'Code'; 
		--END        -- 12 חוזה השכרה
		END IF;
	ELSE 
		
		--RAISERROR (N'Not found specified document type :  %s' , 11, 1,  MYTYPE); 
		Result :=-1;
	END IF;

	Path := :DataFile;
	Remarks := N'';
	DocTable := REPLACE( DocTable, ' ', '');
	Signs := 0;	
  
	DocTablePath :=  :DocTable;
	
	--MSG := 'Not found document number : ' || :DocNumber || ', in table '|| :DocTable;
	
	CREATE LOCAL TEMPORARY COLUMN TABLE "#TempProc"
	(
		"Dec" INT
	);
	
	TempProc := 'INSERT INTO "#TempProc" SELECT COUNT(*) FROM ' || :DOCTABNAME || '.' || :DocTablePath || ' WHERE "' ||  :FldName || '" LIKE '|| :DocNumber;
	EXEC (:TempProc);
	SELECT "Dec" INTO found FROM "#TempProc";
	
	--SELECT COUNT(*) AS "AA"  FROM PILOT7.ORDR WHERE "DocNum" LIKE 386;

	--SELECT :TempProc AS "BB" FROM DUMMY;		
	DROP TABLE "#TempProc";
	
	
	IF :found >0 THEN
	
		SELECT CLIENT_HOST INTO UserName FROM M_CONNECTIONS WHERE CONNECTION_ID = CURRENT_CONNECTION;
		
		IF :COMPANY = N'000' THEN
					
			INSERT INTO SCANDOCS_HANA_DB
			(
				DocNumber, DocTable, Path, 
				Remarks, Description, Date, Time, 
				UserName, Type,Manual,Signs
				
			) 
			VALUES 
			(
				 :DocNumber,  :DocTable,  :DataFile,  :TimeChar,  
				 :DocumentName, 
				 :Date,  :Time,  :UserName,  :Type,0, 0
			) ;
			Result := 1;
		ELSE
			Result :=-3;
		END IF
		
	ELSE
		--MSG := CONCAT('Not found document number : ',CONCAT(:DocNumber,', in table '));
		--MSG:= CONCAT(:MSG,:DocTable);
		Result := -2;
	END IF;
	
	SELECT :Result AS "AA" FROM DUMMY;	
END;