CREATE PROCEDURE [dbo].[Sp_HIXPrescription] @FieldName VARCHAR(10),  @AzTarikh SMALLDATETIME , @TaTarikh SMALLDATETIME , @Type CHAR(1) AS 
DECLARE @SqlCommmand NVARCHAR(Max)
DECLARE @Parameter NVARCHAR(100)

SET @SqlCommmand = 'Select HIXPrescription.Itemid, HIXPrescription.Nu_Forosh , Sazman_Code, Resive_Name, StatusDrug, InsertDate, InsertTime, ResultDate,ResultTime, Resultprescription,Messprescription,Id From(
                    SELECT dbo.HIX_Prescriptions.Itemid, dbo.DrugH.Nu_Forosh ,Sazman_Code, 
                    dbo.DrugH.Resive_Name ,
                    CASE WHEN Status = 0 THEN ''ارسال نشده''
                      WHEN Status = 1 THEN ''ارسال شده''
                      WHEN Status = 2 THEN ''جواب گرفته''
                      WHEN Status = 3 THEN ''آخرين ارسال نيست''
                    END AS StatusDrug ,
                    dbo.MiladiToShamsi(dbo.HIX_Prescriptions.InsertDate) InsertDate  ,
                    Convert(Varchar(10), dbo.HIX_Prescriptions.InsertDate,108)  InsertTime  ,
                    dbo.MiladiToShamsi(dbo.HIX_Prescriptions.ResultDate) ResultDate,
                    Convert(Varchar(10), dbo.HIX_Prescriptions.ResultDate,108)  ResultTime  ,
                    CASE 
                      WHEN Type = 1 THEN ''موفق''
                      WHEN Type = 2 THEN ''ناموفق''
                    END AS Resultprescription ,
                    CASE 
                      WHEN ExceptionCode = ''ix.sender.not.corresponding.dispatcher''  THEN ''سازمان سرويس گيرنده از کانال دسترسي مناسب متصل نشده است''
                      WHEN ExceptionCode = ''ix.required.fields.not.found''            THEN ''يکي از فيلدهاي اجباري پيغام درخواست ارسال نشده است''
                      WHEN ExceptionCode = ''ix.agreement.not.found''    THEN ''سازمان سرويس گيرنده تفاهم نامه فعالي با سازمان سرويس دهنده بر روي سرويس و عمليات درخواستي ندارد''
                      WHEN ExceptionCode = ''ix.micro.server.unreachable'' THEN ''کانال تحويل سازمان سرويس دهنده موقتا در دسترس نيست.بعدا تلاش کنيد''
                      WHEN ExceptionCode = ''ix.security.pass.gen.invalid'' THEN ''ترکيب فيلدهاي PlainId,encryptedId,SenderId نامعتبر است''
                      WHEN ExceptionCode = ''ix.agreement.time.violated''   THEN ''از زمان تفاهم نامه گذشته است''
                      WHEN ExceptionCode = ''ix.agreement.max.request.violated'' THEN ''تعداد درخواست ها از تعداد نفاهم نامه بيشتر است''
                      WHEN ExceptionCode = ''ix.agreement.temporary.deactivate'' THEN ''تفاهم نامه موقتا توسط سازمان سرويس دهنده غير فعال شده است''
                      WHEN ExceptionCode = ''ix.timeout.occurred'' THEN ''خطاي زماني رخ داده است''
                      WHEN ExceptionCode = ''ix.receiverId.xor.receiverIds'' THEN ''شما ميتوانيد بصورت همزمان تنها ارسال به يک مقصد يا ارسال به چند مقصد را انجام دهيد''
                      WHEN ExceptionCode = ''ix.this.action.only.one.receiverId'' THEN ''اين عمليات تنها ميتواند در حالت ارسال پيام به يک مقصد انجام شود''
                      WHEN ExceptionCode = ''ix.no.path.found.for.action'' THEN ''هيچ مسير دستيابي به سرويس نهائي وجود ندارد''
                      WHEN ExceptionCode = ''ix.action.type.not.found'' THEN ''عمليات درخواست شده وجود ندارد''
                      WHEN ExceptionCode = ''ix.max.receiverIds.violated'' THEN ''تعداد گيرندگان بيش از حد مجاز است''
                      WHEN ExceptionCode = ''ix.invalid.timeout'' THEN ''مقدار ارائه شده براي تاخير زماني نامناسب است''
                      WHEN ExceptionCode = ''ix.canonical.message.sender.id.null'' THEN ''کد فرستنده پيام نمي بايست خالي باشد''
                      WHEN ExceptionCode = ''ix.canonical.message.receiver.id.null'' THEN ''کد گيرنده پيام نمي بايست خالي باشد''
                      WHEN ExceptionCode = ''ix.canonical.message.service.null'' THEN ''نام سرويس نمي بايست خالي باشد''
                      WHEN ExceptionCode = ''ix.canonical.message.action.null''  THEN ''نام عمليات نمي بايست خالي باشد''
                      WHEN ExceptionCode = ''ix.canonical.message.version.null'' THEN ''شماره نسخه سرويس نمي بايست خالي باشد''
                      WHEN ExceptionCode = ''ix.canonical.message.plainId.null'' THEN ''کد آشکار نمي بايست خالي باشد''
                      WHEN ExceptionCode = ''ix.canonical.message.encryptedId''  THEN ''کد پنهان نمي بايست خالي باشد''
                      WHEN ExceptionCode = ''ix.route.path.not.found'' THEN ''مسير دستيابي به سرويس دهنده مشخص نيست''
                      WHEN ExceptionCode = ''ix.endpoint.could.not.process.request'' THEN ''سرويس دهنده نهائي توانائي پردازش درخواست را ندارد''
                      WHEN ExceptionCode = ''ix.could.not.cast.sent.message''  THEN ''ارائه شده نامعتبر است PayloadClass''
                      WHEN ExceptionCode = ''ix.allowed.time.gap.violated'' THEN ''اختلاف ساعت بين سرور و کلاينت بيشتر از 3 ساعت مي باشد''
                      WHEN ExceptionCode = ''prescription.admissionInfo.admissionDate.is.invalid'' THEN ''فرمت تاريخ ارسالي اشتباه مي باشد''
                      WHEN ExceptionCode = ''prescription.patientInfo.patientId.is.invalid'' THEN ''کد ملي بيمار نامعتبر است.'' 
                      ELSE ExceptionMessage
                    END AS Messprescription ,
        dbo.HIX_Prescriptions.Id
        FROM dbo.DrugH
        INNER JOIN dbo.HIX_Prescriptions ON dbo.HIX_Prescriptions.PrescriptionId = dbo.DrugH.Id_Havaleh
        Where CONVERT(Varchar(10),  ' + @FieldName + ', 111)  >= @StartDate 
        AND  CONVERT(Varchar(10),  '  + @FieldName + ', 111)  <= @EndDate) As HIXPrescription' 
        
IF @Type = '1'
  SET @SqlCommmand = @SqlCommmand + 
                    ' INNER JOIN ( 
                                   SELECT Nu_Forosh, MAX(ItemId) ItemId FROM dbo.HIX_Prescriptions INNER JOIN dbo.DrugH 
                                   ON dbo.HIX_Prescriptions.PrescriptionId = DrugH.Id_Havaleh  
                                   Where CONVERT(Varchar(10),  ' + @FieldName + ', 111)  >= @StartDate 
                                   AND  CONVERT(Varchar(10),  ' + @FieldName + ', 111)  <= @EndDate
                                   GROUP BY Nu_Forosh 
                                 ) AS T ON T.Nu_Forosh = HIXPrescription.Nu_Forosh AND T.ItemId = HIXPrescription.ItemId'
ELSE IF @type = '2' 
SET @SqlCommmand = ' UPDATE dbo.HIX_Prescriptions SET Type = 0 , Status = 0, InsertDate = GetDate(), ExceptionCode = Null,
                     ExceptionMessage = Null , ExceptionStacktrace = Null, PayloadClass = Null, ConversationId = NULL
                     WHERE ItemId IN(
                                     SELECT HIXPrescription.Itemid 
                                     FROM(
                                           SELECT  dbo.HIX_Prescriptions.Itemid, dbo.DrugH.Nu_Forosh
                                           FROM dbo.DrugH
                                           INNER JOIN dbo.HIX_Prescriptions ON dbo.HIX_Prescriptions.PrescriptionId = dbo.DrugH.Id_Havaleh
                                           Where CONVERT(Varchar(10),  ' + @FieldName + ', 111)  >= @StartDate 
                                           AND  CONVERT(Varchar(10),  '  + @FieldName + ', 111)  <= @EndDate
                                           And Type= 2 AND Status = 2 
                                          ) As HIXPrescription
                                          INNER JOIN ( 
				                                        SELECT Nu_Forosh, MAX(ItemId) ItemId FROM dbo.HIX_Prescriptions INNER JOIN dbo.DrugH 
					                                    ON dbo.HIX_Prescriptions.PrescriptionId = DrugH.Id_Havaleh WHERE Type= 2 AND Status = 2 
														AND  CONVERT(Varchar(10),  ' + @FieldName + ', 111)  >= @StartDate 
														AND  CONVERT(Varchar(10),  ' + @FieldName + ', 111)  <= @EndDate
														GROUP BY Nu_Forosh 
													  ) AS T 
													  ON T.Nu_Forosh = HIXPrescription.Nu_Forosh AND T.ItemId = HIXPrescription.ItemId
                                          )
                       Update HIX_Prescriptions Set Status = 3 
                       Where CONVERT(Varchar(10),  ' + @FieldName + ', 111)  >= @StartDate 
                       AND  CONVERT(Varchar(10),  '  + @FieldName + ', 111)  <= @EndDate
                       And Status =  2 '
SET @Parameter = N'@StartDate SMALLDATETIME, @EndDate SMALLDATETIME'
Exec Sp_ExecuteSql  @SqlCommmand, @Parameter, @StartDate = @AzTarikh, @EndDate = @TaTarikh
