USE [prince]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		Ghasem Babaie
-- Create date: 2025-02-24 | 1403.12.06
-- Description:	ثبت اطلاعات مربوط به فاکتور ترازوی رادین در دیتابیس پرنس
--				اطلاعات مربوط به فاکتوری که با بارکد تجمیعی (ته جمع) بارگذاری و در نرم افزار ذخیره شده است
--				در این جدول هم لاگ می شود تا مشخص باشد چه فاکتورهایی توسط نرم افزار ما پردازش شده اند
-- =============================================
ALTER PROCEDURE [Orginal].[FCS_InsertRadinScaleMKIIFactorFromInvoice]
(
	@SerialNumber			[Common].[_SMALL_],
	@FCT_ID					[Common].[_INT_],
	@RegDate				[Common].[_DATE_],
	@RegTime				[Common].[_TIME_],
	@UserID					[Common].[_INT_],
	@FCS_FactorBarcode		[Common].[_BIG_],
	@FCS_BarcodeReadingType	[Common].[_INT_] 
	/*
	  @FCS_BarcodeReadingType:
	  ------------------------
	  Radin_AggregateBarcodeReadingType_AdvancedQR = 0 » پبشرفته QR - بارکد تجمیعی
	  Radin_AggregateBarcodeReadingType_Series1 = 1 » بارکد تجمیعی - سری 1
	  Radin_AggregateBarcodeReadingType_Series2 = 2 » بارکد تجمیعی - سری 2
	  Radin_AggregateBarcodeReadingType_RFIDCard = 3 » RFID کارت
	*/        
)		
AS
BEGIN
	DECLARE @Query		NVARCHAR(MAX)
	DECLARE @DBName		NVARCHAR(200)

	SELECT @DBName = SST_Value FROM [Common].[SystemSetting] WHERE [SST_Title] = 'Radin_DBName' AND [SST_UserID] = @UserID
	IF ISNULL(@DBName, '') = ''
		SET @DBName = 'Prince'
		
	-- جدول فاکتورها
	DECLARE @RadinInvoiceHeaderTable	NVARCHAR(200)
	SET @RadinInvoiceHeaderTable = '[' + @DBName + '].[mkii].[InvoiceHeader]'	
	
	-- جدول ترازوها
	DECLARE @RadinScaleTable	NVARCHAR(200)
	SET @RadinScaleTable = '[' + @DBName + '].[mkii].[Scale]'	

	--------------------------

	DECLARE @FCS_FactorSerialNumber	[Common].[_BIGINT_] = '',
			@FCS_SCL_IP  			[Common].[_CARD_] = '',
			@FCS_SCL_ID				[Common].[_INT_] = 0,
			@FCS_Person  			[Common].[_TINY_] = '',
			@FCS_ID					[Common].[_INT_] = 0

	SET @FCS_FactorSerialNumber = @SerialNumber 

	--------------------------
    -- 1. [mkii].[InvoiceHeader] و شخصی که فاکتور را ثبت کرده است از جدول IP استخراج
	DECLARE @Param			[Common].[_BIG_]
	SET @Param = N'@FCS_SCL_IP_ NVARCHAR(16) OUTPUT,
					@FCS_Person_ NVARCHAR(32) OUTPUT'
				
	-- است و شرایط کوئری فرق می کند RFID بارکد تجمیعی از نوع کارت	
	IF @FCS_BarcodeReadingType = 3
	BEGIN
		SET @Query = N'
			SELECT @FCS_SCL_IP_     = [IP],	      
				   @FCS_Person_     = LTRIM(RTRIM(REPLACE(REPLACE([UserName], N''ی'', N''ي''), N''ک'', N''ك'')))
			FROM ' + @RadinInvoiceHeaderTable + '   
			WHERE [Id] = (SELECT MAX([Id]) 
							FROM ' + @RadinInvoiceHeaderTable + ' 
							WHERE [RFID] = CAST(' + @SerialNumber + ' AS BIGINT))'
	END
	ELSE
	BEGIN	
		SET @Query = N'
			SELECT @FCS_SCL_IP_     = [IP],	      
				   @FCS_Person_     = LTRIM(RTRIM(REPLACE(REPLACE([UserName], N''ی'', N''ي''), N''ک'', N''ك'')))
			FROM ' + @RadinInvoiceHeaderTable + '   
			WHERE [InvoiceSerialNo] = CAST(' + @SerialNumber + ' AS BIGINT)'
	END	
	
	--PRINT @Query
 
	EXECUTE sp_executesql @Query, @Param, @FCS_SCL_IP OUTPUT, @FCS_Person OUTPUT
    
	--------------------------
	-- 2. [mkii].[Scale] ترازو از جدول ID استخراج 
	SET @Param = N'@FCS_SCL_ID_ INT OUTPUT'	
	SET @Query = N'
		SET @FCS_SCL_ID_ = (SELECT TOP 1 [ScaleId]
							FROM ' + @RadinScaleTable + '
							WHERE [IP] = ''' + LTRIM(RTRIM(@FCS_SCL_IP)) + ''')'
	
	--PRINT @Query
							
	EXECUTE sp_executesql @Query, @Param, @FCS_SCL_ID OUTPUT

	--------------------------
	-- 3. [FinancialYear].[FactorScale] ثبت اطلاعات مربوط به فاکتور پردازش شده ترازو در جدول
	EXEC [Orginal].[FCS_Insert] @FCS_ID OUT, 2, @FCS_FactorBarcode, @FCS_FactorSerialNumber, @FCT_ID, 1, @FCS_SCL_ID, @FCS_SCL_IP, 
								@FCS_Person, @RegDate, @RegTime, @UserID 
								
								
	--------------------------
	-- 4. این بروز رسانی انجام می شود MKII مطابق با داکیومنت ترازوی رادین:
	-- پر می شود True وجود دارد که در هنگام صدور فاکتور توسط ترازو با مقدار New ستونی به نام [mkii].[InvoiceHeader] در جدول
	-- گردد False در صورت خواندن اطلاعات هر فاکتور بهتر است که این مقدار
	DECLARE @AffectedRows	[Common].[_INT_]
	SET @Param = N'@AffectedRows_ INT OUTPUT'	
	
	-- است و شرایط کوئری فرق می کند RFID بارکد تجمیعی از نوع کارت	
	IF @FCS_BarcodeReadingType = 3
	BEGIN	
		SET @Query = ' 
			   UPDATE ' + @RadinInvoiceHeaderTable + '
			   SET [New] = 0
			   WHERE [Id] = (SELECT MAX([Id]) 
								FROM ' + @RadinInvoiceHeaderTable + ' 
								WHERE [RFID] = CAST(' + @SerialNumber + ' AS BIGINT))
					
			   SET @AffectedRows_ = @@ROWCOUNT'
	END
	ELSE
	BEGIN
		SET @Query = ' 
			   UPDATE ' + @RadinInvoiceHeaderTable + '
			   SET [New] = 0
			   WHERE [InvoiceSerialNo] = CAST(' + @SerialNumber + ' AS BIGINT)
					
			   SET @AffectedRows_ = @@ROWCOUNT'
	END	
	
	--PRINT @Query	

	EXECUTE sp_executesql @Query, @Param, @AffectedRows OUTPUT
		
END		