/*
   شنبه, 10 مرداد 1405 - 14:14:22 ب.ظ
   User: 
   Server: TAHERIAN
   Database: ATNDB
   Application: 
*/

Use ATNDBTest
Go

/*
-- اگر ورژن دیتابیس جاری مناسب این آپدیت نباشد در زیر خطا تولید می کنیم تا ادامه اجرا وارد بلاک کچ شود
If Not Exists(Select * From [dbo].[SystemParameters] Where SubjectKey = 'Database_Version' And DefaultValue = '201')
Begin
    -- Severity 20 ==> از اجرای ادامه کد جلوگیری می‌کند
    -- در غیر این صورت کدهایی که بعد گو هستند اجرا می‌شوند
    RaisError('ورژن دیتابیس جاری مناسب این آپدیت نمی باشد',20,1) WITH LOG
    Return
End
*/

ALTER DATABASE ATNDBTest SET RECOVERY SIMPLE;
Go
-- SELECT * FROM dbo.FactorHistory WHERE DetailHistory Is Not Null
/*=============================================================================================================*/
If Exists(Select * From sys.objects Where name = 'JsonEscape') Drop Function dbo.JsonEscape
Go
Create Function dbo.JsonEscape (@Text Nvarchar(max))
Returns Nvarchar(max) 
With Encryption
As  
Begin
	Set @Text = ISNULL(@Text, N'')
	Set @Text = REPLACE(@Text, N'\',  N'\\')
	Set @Text = REPLACE(@Text, N'"',  N'\"')
	Set @Text = REPLACE(@Text, CHAR(8),  N'\b')
	Set @Text = REPLACE(@Text, CHAR(9),  N'\t')
	Set @Text = REPLACE(@Text, CHAR(10), N'\n')
	Set @Text = REPLACE(@Text, CHAR(12), N'\f')
	Set @Text = REPLACE(@Text, CHAR(13), N'\r')
    Return @Text
End
Go
/*=============================================================================================================*/
If Exists(Select * From sys.objects Where name = 'HeaderToJson') Drop Function dbo.HeaderToJson
Go
CREATE FUNCTION dbo.HeaderToJson
(
    @Header NVARCHAR(MAX)
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
    DECLARE
        @Result NVARCHAR(MAX),
        @Item NVARCHAR(MAX),
        @Key NVARCHAR(500),
        @Value NVARCHAR(MAX),
        @Pos INT,
        @EndPos INT,
        @Colon INT

    SET @Result = '{'

    SET @Header = ISNULL(@Header,'')

    WHILE CHARINDEX('[',@Header) > 0
    BEGIN
        SET @Pos = CHARINDEX('[',@Header) + 1
        SET @EndPos = CHARINDEX(']',@Header,@Pos)

        IF @EndPos = 0
            BREAK

        SET @Item = SUBSTRING(@Header,@Pos,@EndPos-@Pos)

        SET @Colon = CHARINDEX(':',@Item)

        IF @Colon > 0
        BEGIN
            SET @Key = LTRIM(RTRIM(LEFT(@Item,@Colon-1)))
            SET @Value = LTRIM(RTRIM(SUBSTRING(@Item,@Colon+1,LEN(@Item))))
        END
        ELSE
        BEGIN
            SET @Key = N'مشتري'
            SET @Value = LTRIM(RTRIM(@Item))
        END

        SET @Result = @Result +
            '"' + dbo.JsonEscape(@Key) + '":"' +
            dbo.JsonEscape(@Value) + '",'

        SET @Header = SUBSTRING(@Header,@EndPos+1,LEN(@Header))
    END

    IF RIGHT(@Result,1)=','
        SET @Result=LEFT(@Result,LEN(@Result)-1)

    SET @Result=@Result+'}'

    RETURN @Result
END
GO
/*=============================================================================================================*/
If Exists(Select * From sys.objects Where name = 'DetailToJson') Drop Function dbo.DetailToJson
Go
CREATE FUNCTION dbo.DetailToJson
(
    @Detail NVARCHAR(MAX)
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
    DECLARE
        @Result NVARCHAR(MAX),
        @Row NVARCHAR(MAX),
        @Item NVARCHAR(MAX),
        @Key NVARCHAR(500),
        @Value NVARCHAR(MAX),
        @Pos INT,
        @NextPos INT,
        @EndPos INT,
        @Colon INT,
        @First BIT

    SET @Detail = LTRIM(RTRIM(ISNULL(@Detail,'')))

    IF @Detail = ''
        RETURN '[]'

    -- اگر قبلاً جیسون شده است
    IF LEFT(@Detail,2)='[{'
        RETURN @Detail

    SET @Result = '['
    SET @First = 1

    /*
       هر رکورد از [کد کالا: شروع مي‌شود
    */
    WHILE CHARINDEX('[کد کالا:', @Detail) > 0
    BEGIN
        SET @Pos = CHARINDEX('[کد کالا:', @Detail)

        SET @NextPos = CHARINDEX('[کد کالا:', @Detail, @Pos + 1)

        IF @NextPos = 0
        BEGIN
            SET @Row = SUBSTRING(@Detail, @Pos, LEN(@Detail))
            SET @Detail = ''
        END
        ELSE
        BEGIN
            SET @Row = SUBSTRING(@Detail, @Pos, @NextPos - @Pos)
            SET @Detail = SUBSTRING(@Detail, @NextPos, LEN(@Detail))
        END


        IF @First = 0
            SET @Result = @Result + ','

        SET @First = 0

        SET @Result = @Result + '{'


        WHILE CHARINDEX('[', @Row) > 0
        BEGIN
            SET @Pos = CHARINDEX('[', @Row) + 1
            SET @EndPos = CHARINDEX(']', @Row, @Pos)

            IF @EndPos = 0
                BREAK

            SET @Item = SUBSTRING(@Row, @Pos, @EndPos - @Pos)

            SET @Colon = CHARINDEX(':', @Item)

            IF @Colon > 0
            BEGIN
                SET @Key =
                    LTRIM(RTRIM(LEFT(@Item,@Colon-1)))

                SET @Value =
                    LTRIM(RTRIM(
                        SUBSTRING(@Item,@Colon+1,LEN(@Item))
                    ))

                SET @Result = @Result +
                    '"' + dbo.JsonEscape(@Key) +
                    '":"' + dbo.JsonEscape(@Value) + '",'
            END

            SET @Row =
                SUBSTRING(@Row,@EndPos+1,LEN(@Row))
        END


        IF RIGHT(@Result,1)=','
            SET @Result = LEFT(@Result,LEN(@Result)-1)

        SET @Result = @Result + '}'
    END


    SET @Result = @Result + ']'

    RETURN @Result
END
GO
/*=============================================================================================================*/
UPDATE dbo.FactorHistory SET
    HeaderHistory = 
        REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
        dbo.HeaderToJson(HeaderHistory),
        N'"مشتري":', '"GetterOrPayerFactorFAName":'),
        N'"شماره کنترل":', '"ControlNo":'),
        N'"تاريخ موثر":', '"EffectiveDate":'),
        N'"تاريخ تسويه":', '"PayDate":'),
        N'"انبار":', '"WarehouseDetail":'),
        N'"سهم واسطه":', '"SaleBrokerPrice":'),
        N'"واسطه":', '"BrokerName":'),
        N'"رسته":', '"FactorCategoryFADescription":'),
        N'"ماليات":', '"VAT":'),
        N'"عوارض":', '"Toll":'),
        N'"هزينه":', '"Cost2th":'),
        N'"تخفيف":', '"Rebate":'),
        N'"مجموع مبلغ کل":', '"Sum_TotalPrice":'),
        N'"ويرايش کننده":', '"Editor":'),
        N'"تاريخ ويرايش":', '"EditDate":'),
        N'"توضيحات سند":', '"Description":'),

    DetailHistory =
        REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
        dbo.DetailToJson(DetailHistory),
        N'"کد کالا":', '"PartCode":'),
        N'"عنوان کالا":', '"PartName":'),
        N'"مقدار":', '"Quantity":'),
        N'"في واحد مصوب":', '"ApprovedUnitPrice":'),
        N'"في واحد":', '"UnitPrice":'),
        N'"بهاء تمم شده":', '"BuyUnitPriceInPartTable":'),
        N'"بهاء تمام شده":', '"BuyUnitPriceInPartTable":'),
        N'"مبلغ کل":', '"TotalPrice":'),
        N'"مبلغ تخفيف":', '"RebatePrice":'),
        N'"درصد تخفيف":', '"RebatePercent":'),
        N'"ملاحظات":', '"FactorDetailDescription":')

WHERE
    DetailHistory IS NOT NULL
/*=============================================================================================================*/
