USE [Prince]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [Common].[FetchFactor_ByScale]
(
		@Factor_Num				[Common].[_BIG_],
		
		-- Added By Ghasem Babaie - 1404.09.09 [ PRI-4621 ]
		-- وجود می داشت، چون این پارامترها در اس پی فیلتر نمی شد MKII اگر در مجموعه ای چند ترازو رادین 
		-- در هنگام استخراج اطلاعات فاکتور با مشکل مواجه می شدیم
		-- به همین دلیل این 2 پارامتر هم افزوده شد تا در شرایط فیلتر قرار گیرد
		@FactorNo				[Common].[_BIG_],
		@WorkStationNo			[Common].[_INT_],
		-- ××××××××××××××××××××××××××××××××××××××××××
		
		@Date                   [Common].[_DATE_],
		@ScaleType              [Common].[_INT_],
		@UserID                 [Common].[_INT_]
)		
WITH EXECUTE AS CALLER
AS
BEGIN
  
   /*
	  Scale_Radin = 1;
	  Scale_Sadr  = 2;
	  Scale_Dibal = 3;    
   */

    SET NOCOUNT ON;
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
    ------------------------------------------------
     
	DECLARE @Query		NVARCHAR(MAX)
	DECLARE @DBName		NVARCHAR(200)     
     
    -- ××××××××××××××××××××××××
    -- ××××× ترازوی رادین ×××××
    -- ××××××××××××××××××××××××
    IF @ScaleType = 1
    Begin   
		/* کالای وزنی و تعداد ی رادین */
		DECLARE @CMD_Weight  Common._INT_
		DECLARE @CMD_Number  Common._INT_     
     
		SELECT  @CMD_Weight = SST_Value FROM Common.SystemSetting WHERE SST_Title = 'Radin_Commodity_Weight' AND SST_UserID = @UserID 
		SELECT  @CMD_Number = SST_Value FROM Common.SystemSetting WHERE SST_Title = 'Radin_Commodity_Num' AND SST_UserID = @UserID

		-- Added & Changed By Ghasem Babaie - 1403.11.29 [ PRI-3377 ]
		-- تشخیص نوع ترازو رادین
		-- با بقیه ترازوهای رادین متفاوت است MKII نحوه ارتباط ترازوی رادین
		/*
			انواع ترازوهای رادین:
			---------------------
			Radin_6600Series = 0 »» 6700 Series (Pro / Plus / Wifi)
			Radin_8800Series_40KG = 1 »» 8800 Series - 40Kg (Pro / Plus / Wifi)
			Radin_8800Series_70KG = 2 »» 8800 Series - 70Kg (Pro / Plus / Wifi)
			Radin_MKII_A_Series = 3 »» MKII A Series - با ستون (LAN / Wifi / RFID)
			Radin_MKII_B_Series = 4 »» MKII B Series - بدون ستون (LAN / Wifi / RFID)
			---------------------
			عملکرد نرم افزار هنگام انتخاب ترازوهای
			RADIN_6600Series, RADIN_8800Series_40KG, RADIN_8800Series_70KG
			مشابه است
			---------------------
			عملکرد نرم افزار هنگام انتخاب ترازوهای
			RADIN_MKII_A_Series, RADIN_MKII_B_Series
			مشابه است
		*/
		DECLARE @RadinScaleModel	[Common].[_INT_]
		
		SELECT  @RadinScaleModel = [SST_Value] 
		FROM [Common].[SystemSetting] 
		WHERE [SST_Title] = 'RadinScaleModel' AND [SST_UserID] = @UserID
		
		-- عملکرد نرم افزار در هنگامی که ترازوهای زیر انتخاب شده باشند، بدین صورت است:
		-- Radin_6600Series = 0 »» 6700 Series (Pro / Plus / Wifi)
		-- Radin_8800Series_40KG = 1 »» 8800 Series - 40Kg (Pro / Plus / Wifi)
		-- Radin_8800Series_70KG = 2 »» 8800 Series - 70Kg (Pro / Plus / Wifi)
		IF @RadinScaleModel in (0,1,2)
		BEGIN
			-- این قسمت قبلا توسط خانم مهذبیه نوشته شده است
			SELECT * 
			FROM (
				SELECT 
					CONVERT (date, receipt_time) as Date_Reciept, 

					Product_id  = case when Product_id = -1 then 
									case when Unit = 'W' then (select CMD_Code from Common.Commodity where CMD_ID = @CMD_Weight) else (select CMD_Code from Common.Commodity where CMD_ID = @CMD_Number) end
							   else Product_id end  ,


					Weight_quantity as Amount	,
					Price as PRL_SalePrice	,
					Unit ,
					Invoice_type		
				FROM [dbo].[ReceiptHeader]
					Join [dbo].[ReceiptDetail] on RowID = HeaderRowID
				WHERE  
					@Factor_Num = 
						RIGHT(REPLICATE('0',7) + cast(Serial_no as nvarchar(100)), 7) +
						RIGHT(REPLICATE('0',6) + cast(Receipt_no as nvarchar(100)), 4) +
						--RIGHT(REPLICATE('0',6) + Gorfeh_name, 2) +
						RIGHT(REPLICATE('0',6) + cast(Workstation_number as nvarchar(100)), 2)		
			) AS E
			WHERE Date_Reciept = CONVERT(date, GETDATE())
		END
		-- عملکرد نرم افزار در هنگامی که ترازوهای زیر انتخاب شده باشند، بدین صورت است:
		-- Radin_MKII_A_Series = 3 »» MKII A Series - با ستون (LAN / Wifi / RFID)
		-- Radin_MKII_B_Series = 4 »» MKII B Series - بدون ستون (LAN / Wifi / RFID)
		ELSE IF @RadinScaleModel in (3,4)
		BEGIN
			SELECT @DBName = SST_Value FROM [Common].[SystemSetting] WHERE [SST_Title] = 'Radin_DBName' AND [SST_UserID] = @UserID
			IF ISNULL(@DBName, '') = ''
				SET @DBName = 'Prince'
				
			-- جدول حافظه ها - اطلاعات کالاها در این جدول درج می شود
			DECLARE @RadinPluTable	NVARCHAR(200)
			SET @RadinPluTable = '[' + @DBName + '].[mkii].[Plu]'				
				
			-- جدول فاکتورها
			DECLARE @RadinInvoiceHeaderTable	NVARCHAR(200)
			SET @RadinInvoiceHeaderTable = '[' + @DBName + '].[mkii].[InvoiceHeader]'	
			
			-- جدول جزئیات فاکتورها
			DECLARE @RadinInvoiceDetailTable	NVARCHAR(200)
			SET @RadinInvoiceDetailTable = '[' + @DBName + '].[mkii].[InvoiceDetail]'	
			
			-- MKII مقادیر مربوط به واحد در ترازوی رادین
			/*
				Radin_Unit_Auto = 65 » تشخیص واحد خودکار
				Radin_Unit_Quantity = 81 » واحد تعدادی
				Radin_Unit_Weight = 87 » واحد وزنی
			*/
			
			-- MKII نوع خواندن بارکد تجمیعی ترازوی رادین 
			/*
				Radin_AggregateBarcodeReadingType_AdvancedQR = 0 » پبشرفته QR - بارکد تجمیعی
				پیشرفته توسط ترازو رادین QR - نحوه ایجاد یارکد تجمیعی:
				شماره سریال فاکتور: 7 رقم
				شماره فاکتور: 4 رقم
				شماره دستگاه: 2 رقم
				تعداد اقلام: 2 رقم
				جمع کل فاکتور: 10 رقم
				تاریخ: 6 رقم
				ساعت: 4 رقم
				اطلاعات اقلام فاکتور: که به ازاء هر قلم، کد کالا 5 رقم و مقدار 5 رقم
				Barcode Lenght: More Than 45!
				Ex: 0000018,0010,01,02,0000094000,031124,1429,0000100040,0000200040
					FactorSerial,FactorNo,ScaleNo,ItemsCount,SumFactor,Date,Time,ItemsDetails... (Code & Weight)
				-------
				Radin_AggregateBarcodeReadingType_Series1 = 1 » بارکد تجمیعی - سری 1
				نحوه ایجاد بارکد تجمیعی - سری 1 توسط تراز رادین:
				شماره سریال فاکتور: 7 رقم
				شماره فاکتور: 4 رقم
				شماره غرفه: 2 رقم
				شماره دستگاه: 2 رقم
				جمع کل فاکتور: 8 رقم
				Barcode Lenght: 23
				Ex: 00000300001010100060000
					FactorSerial,FactorNo,BoothNo,ScaleNo,SumFactor
				-------
				Radin_AggregateBarcodeReadingType_Series2 = 2 » بارکد تجمیعی - سری 2
				نحوه ایجاد بارکد تجمیعی - سری 2 توسط تراز رادین:
				شماره سریال فاکتور: 7 رقم
				شماره فاکتور: 4 رقم
				شماره دستگاه: 2 رقم
				جمع کل فاکتور: 10 رقم
				Barcode Lenght: 23
				Ex: 00000310002010000060000
					FactorSerial,FactorNo,ScaleNo,SumFactor
				-------
				Radin_AggregateBarcodeReadingType_RFIDCard = 3 » RFID کارت
				در جدول فاکتور ترازو رادین RFID نحوه ذخیره اطلاعات:
				ذخیره می شود [mkii].[InvoiceHeader] در جداول رادین [RFID] در فیلد RFID شماره کارت
				به این فاکتور انتساب داده شده است RFID وقتی این فیلد خالی / صفر نباشد، بدین معنی است که کارت
			*/
			DECLARE @RadinScaleAggregateBarcodeReadingType	[Common].[_INT_]
			
			SELECT  @RadinScaleAggregateBarcodeReadingType = [SST_Value] 
			FROM [Common].[SystemSetting] 
			WHERE [SST_Title] = 'RadinScaleAggregateBarcodeReadingType' AND [SST_UserID] = @UserID			
			
			--------------------------------------------------
			
			-- بررسی تاریخ صدور فاکتور در ترازو، در هنگام بارگذاری فاکتور ترازو بر روی نرم افزار
			DECLARE @RadinScaleJustLoadFactorsWithSameDate	[Common].[_INT_]
			
			SELECT  @RadinScaleJustLoadFactorsWithSameDate = [SST_Value] 
			FROM [Common].[SystemSetting] 
			WHERE [SST_Title] = 'RadinScaleJustLoadFactorsWithSameDate' AND [SST_UserID] = @UserID				
			
			DECLARE @BaseQueryCondition		NVARCHAR(512) = ''
			IF @RadinScaleJustLoadFactorsWithSameDate = 1
				SET @BaseQueryCondition = ' WHERE DateReciept = CONVERT(Date, GETDATE())'
			--------------------------------------------------			
			
			DECLARE @QueryCondition		NVARCHAR(512)
			-- Added By Ghasem Babaie - 1404.09.09 [ PRI-4621 ]
			DECLARE @QueryCondition1	NVARCHAR(512) = ''
			DECLARE @QueryCondition2	NVARCHAR(512) = ''
			
			-- پبشرفته QR - بارکد تجمیعی
			-- بارکد تجمیعی - سری 1
			-- بارکد تجمیعی - سری 2
			IF @RadinScaleAggregateBarcodeReadingType in (0,1,2)
			BEGIN
				SET @QueryCondition = '([H].[InvoiceSerialNo] = '
				SET @QueryCondition1 = ' AND ([H].[InvoiceNo] = ' + @FactorNo + ') '
				SET @QueryCondition2 = ' AND ([H].[WorkstationNo] = ' + LTRIM(RTRIM(CAST(@WorkStationNo AS NVARCHAR(10)))) + ') '
			END
			ELSE
			BEGIN
				SET @QueryCondition = '[H].[New] = 1 AND 
										[H].[Id] = (SELECT MAX([Id]) FROM ' + @RadinInvoiceHeaderTable + ' WHERE [RFID] = '
				SET @QueryCondition1 = ''
				SET @QueryCondition2 = ''
			END

			SET @Query = ' 
				    SELECT *,
							(SELECT TOP 1 [LKP_EngCaption]
								FROM [Common].[Commodity] 
									LEFT OUTER JOIN [Common].[CommodityGroupMembership] ON [CMD_ID] = [CGM_CMD_ID]
										LEFT OUTER JOIN [Common].[CountingUnitMultiple] ON [CUM_CMD_ID] = [CMD_ID] AND 
																							[CUM_IsDefault] = 1 AND 
																							[CUM_IsDelete] = 0
											LEFT OUTER JOIN [Common].[CountingUnit] ON [CNU_CUM_ID] = [CUM_ID] AND 
																						[CMD_ID] = [CNU_CMD_ID] AND 
																						[CNU_IsDefault] = 1	 
												LEFT OUTER JOIN [Common].[Lookup] ON [CNU_LKP_UnitID] = [LKP_ID] AND
																						[LKP_Type] = 1
								WHERE [CMD_Code] = [Product_id]) AS [Unit_Software_EngCaption] 
					FROM (
						SELECT 
							CONVERT(Date, [H].[ReceivedDateTime]) AS [DateReciept], 
							[Product_id] = (CASE WHEN NOT EXISTS (SELECT 1 FROM ' + @RadinPluTable + ' WHERE [PluId] = [D].[PluId]) THEN
												CASE WHEN [D].[Unit] = 87 THEN 
														(SELECT [CMD_Code] FROM [Common].[Commodity] WHERE [CMD_ID] = ' + CAST(@CMD_Weight AS NVARCHAR(200)) + ')
													ELSE 
														(SELECT [CMD_Code] FROM [Common].[Commodity] WHERE [CMD_ID] = ' + CAST(@CMD_Number AS NVARCHAR(200)) + ') 
												END
											ELSE
												[P].[Barcode] COLLATE DATABASE_DEFAULT
											END),	   
							[D].[Amount],
							[D].[UnitPrice] AS [PRL_SalePrice],
							[D].[Unit],
							[H].[InvoiceType] AS [Invoice_type]	
						FROM ' + @RadinInvoiceHeaderTable + ' AS H
							LEFT JOIN ' + @RadinInvoiceDetailTable + ' AS D ON [H].[Id] = [D].[InvoiceHeaderId]
								LEFT JOIN ' + @RadinPluTable + ' AS P ON [P].[PluId] = [D].[PluId]
						WHERE
							' + @QueryCondition + @Factor_Num + ') ' + @QueryCondition1 + @QueryCondition2 + ' 	
					) AS E
					' + @BaseQueryCondition
					
			EXEC (@Query)
		END		
    END
    
    -- ××××××××××××××××××××××××
    -- ×××××× ترازوی صدر ××××××
    -- ××××××××××××××××××××××××    
    IF @ScaleType = 2
    Begin
		SELECT @DbName = SST_Value FROM Common.SystemSetting WHERE SST_Title = 'Sadr_DbName' and SST_UserID = @UserID
		IF @DbName IS NULL
			SET @DbName = 'Prince'

		SET @Query = 'SELECT SI.ItemCode as Product_id,[Weight],QTY ,Uprice,ActPrice,			 
						 Weight_quantity = case isnull([Weight],0) when 0 then QTY Else  [Weight] End 
						 FROM ['+@DbName+'].[dbo].SADR_Detail SD
						 Left JOIN  ['+@DbName+'].dbo.SADR_Item SI on  SD.PluNo = SI.PluNo
						 where TotalBarcode = '''+@Factor_Num+''''		 
		EXEC (@Query)			 
    End
    
    -- ××××××××××××××××××××××××
    -- ××××× ترازوی دیبال ×××××
    -- ××××××××××××××××××××××××    
    IF @ScaleType = 3
    Begin
		DECLARE @OLD_Dibal_Scale  _INT_ 
		SELECT  @OLD_Dibal_Scale = SST_Value FROM Common.SystemSetting WHERE SST_Title = 'DibalOldReadingWay' AND SST_UserID = @UserID 
    
		IF @OLD_Dibal_Scale = 0
		 Begin    
		 SET @Date = SUBSTRING(@Date,3,8) 
			select 
			ItemCode as Product_id,
			Amount as Amount
			 
			from [OnlineSales].[dbo].Sales 
			where ItemCode >0
			and @Date = [Date] 
			and   cast( SUBSTRING(@Factor_Num,1,4) as decimal(38,0)) = cast (Receipt as decimal(38,0)) 
			and ((cast(SUBSTRING(@Factor_Num,5,3) as int)) = ScaleNo)
			
		 END
		ELSE
		 Begin 
			select 
			Quantity  as Amount,
  		    RI.Item_Id   as Product_id
			From [ScaleCommDB].dbo.SalesReceipts SR
			Left join [ScaleCommDB].dbo.ReceiptItems RI on SR.Id = RI.SalesReceipt_Id 
			where 
				  cast (@Factor_Num as decimal(38,0)) = cast (ReceiptNumber as decimal(38,0))
				 --RIGHT(REPLICATE('0',4) + cast(ReceiptNumber as nvarchar(100)), 4)
				 --+ RIGHT(REPLICATE('0',3) + cast(Scale_Id as nvarchar(100)), 3)
		 END
     END
		
	----------------------------------------------
    SET TRANSACTION ISOLATION LEVEL READ COMMITTED
    SET NOCOUNT OFF;
END	    
    