USP_DATAFORMTEMPLATE_EDIT_SALESDEPOSITPROCESSPREPROCESS_PRELOAD

The load procedure used by the edit dataform template "Sales Deposit Preprocess Edit Form"

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN The input ID parameter used to load the fields defined on the form.
@DATALOADED bit INOUT Output parameter indicating whether or not data was actually loaded.
@TSLONG bigint INOUT Output parameter indicating the TSLONG value of the record being edited. This is used to manage multi-user concurrency issues when multiple users access the same record.
@UNDEFINEDPAYMENTTYPE xml INOUT You must add the following payment methods to an existing or new deposit template before you can run the process.
@SALESDEPOSITTEMPLATE xml INOUT
@NAME nvarchar(100) INOUT Process name
@NUMBEROFDEPOSITS int INOUT Number of deposits
@SALESDEPOSITPROCESSID uniqueidentifier INOUT

Definition

Copy


                CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_SALESDEPOSITPROCESSPREPROCESS_PRELOAD
                (
                    @ID uniqueidentifier,
                    @DATALOADED bit = 0 output,
                    @TSLONG bigint = 0 output,
                    @UNDEFINEDPAYMENTTYPE xml = null output,
                    @SALESDEPOSITTEMPLATE xml = null output,
                    @NAME nvarchar(100) = null output,
                    @NUMBEROFDEPOSITS integer = null output,
                    @SALESDEPOSITPROCESSID uniqueidentifier = null output
                )
                as
                    set nocount on;

                    declare @ISRECONCILEDPROCESS bit = null

                    select
                        @DATALOADED = 1,
                        @NAME = [NAME],
                        @ISRECONCILEDPROCESS = [ISRECONCILEDPROCESS],
                        @TSLONG = [TSLONG]
                    from dbo.[SALESDEPOSITPROCESS]
                    where [ID] = @ID

                    set @SALESDEPOSITPROCESSID = @ID

                    declare @SALESORDERPAYMENTPAYMENTTYPES table (
                        [PAYMENTMETHODCODE] tinyint,
                        [CREDITTYPECODEID] uniqueidentifier,
                        [OTHERPAYMENTMETHODCODEID] uniqueidentifier,
                        [PAYMENTMETHOD] nvarchar(100)
                    )

                    insert into @SALESORDERPAYMENTPAYMENTTYPES
                    select distinct
                        [REVENUEPAYMENTMETHOD].[PAYMENTMETHODCODE],
                        [CREDITCARDPAYMENTMETHODDETAIL].[CREDITTYPECODEID],
                        [OTHERPAYMENTMETHODDETAIL].[OTHERPAYMENTMETHODCODEID],
                        case [REVENUEPAYMENTMETHOD].[PAYMENTMETHODCODE]
                            when 2 then dbo.UFN_CREDITTYPECODE_GETDESCRIPTION([CREDITCARDPAYMENTMETHODDETAIL].[CREDITTYPECODEID])
                            when 10 then dbo.UFN_OTHERPAYMENTMETHODCODE_GETDESCRIPTION([OTHERPAYMENTMETHODDETAIL].[OTHERPAYMENTMETHODCODEID])
                            else dbo.UFN_REVENUEPAYMENTMETHOD_PAYMENTMETHODCODE_GETDESCRIPTION([REVENUEPAYMENTMETHOD].[PAYMENTMETHODCODE])
                        end
                    from dbo.[SALESORDERPAYMENT]
                    inner join dbo.[REVENUEPAYMENTMETHOD]
                        on [SALESORDERPAYMENT].[PAYMENTID] = [REVENUEPAYMENTMETHOD].[REVENUEID]
                    inner join dbo.[SALESORDER]
                        on [SALESORDER].[ID] = [SALESORDERPAYMENT].[SALESORDERID]
                    left join dbo.[CREDITCARDPAYMENTMETHODDETAIL] 
                        on [REVENUEPAYMENTMETHOD].[ID] = [CREDITCARDPAYMENTMETHODDETAIL].[ID]
                    left join dbo.[OTHERPAYMENTMETHODDETAIL]
                        on [REVENUEPAYMENTMETHOD].[ID] = [OTHERPAYMENTMETHODDETAIL].[ID]
                    left join dbo.[RECONCILIATION]
                        on [SALESORDERPAYMENT].[RECONCILIATIONID] = [RECONCILIATION].[ID]
                    where
                        (
                            (@ISRECONCILEDPROCESS = 1 and [SALESORDERPAYMENT].[DONOTRECONCILE] = 0 and [RECONCILIATION].[STATUSCODE] = 2) or
                            (@ISRECONCILEDPROCESS = 0 and [SALESORDERPAYMENT].[DONOTRECONCILE] = 1 and [SALESORDER].[STATUSCODE] = 1)
                        ) and
                        (
                        [OTHERPAYMENTMETHODDETAIL].[ID] is null or
                        [OTHERPAYMENTMETHODDETAIL].[OTHERPAYMENTMETHODCODEID] not in 
                            (select ID from dbo.NONDEPOSITABLEPAYMENTMETHOD)
                        ) and
                        --Unlinked

                        [REVENUEPAYMENTMETHOD].[REVENUEID] not in (
                            select [BANKACCOUNTDEPOSITPAYMENT].[ID] 
                            from dbo.[BANKACCOUNTDEPOSITPAYMENT] with (nolock)
                        ) 

          -- Reservation security deposit payments

                    insert into @SALESORDERPAYMENTPAYMENTTYPES
                    select distinct
                        [REVENUEPAYMENTMETHOD].[PAYMENTMETHODCODE],
                        [CREDITCARDPAYMENTMETHODDETAIL].[CREDITTYPECODEID],
                        [OTHERPAYMENTMETHODDETAIL].[OTHERPAYMENTMETHODCODEID],
                        case [REVENUEPAYMENTMETHOD].[PAYMENTMETHODCODE]
                            when 2 then dbo.UFN_CREDITTYPECODE_GETDESCRIPTION([CREDITCARDPAYMENTMETHODDETAIL].[CREDITTYPECODEID])
                            when 10 then dbo.UFN_OTHERPAYMENTMETHODCODE_GETDESCRIPTION([OTHERPAYMENTMETHODDETAIL].[OTHERPAYMENTMETHODCODEID])
                            else dbo.UFN_REVENUEPAYMENTMETHOD_PAYMENTMETHODCODE_GETDESCRIPTION([REVENUEPAYMENTMETHOD].[PAYMENTMETHODCODE])
                        end
                    from dbo.[RESERVATIONSECURITYDEPOSITPAYMENT]
                    inner join dbo.[REVENUEPAYMENTMETHOD]
                        on [RESERVATIONSECURITYDEPOSITPAYMENT].[PAYMENTID] = [REVENUEPAYMENTMETHOD].[REVENUEID]
                    inner join dbo.[SALESORDER]
                        on [SALESORDER].[ID] = [RESERVATIONSECURITYDEPOSITPAYMENT].[RESERVATIONID]
                    left join dbo.[CREDITCARDPAYMENTMETHODDETAIL] 
                        on [REVENUEPAYMENTMETHOD].[ID] = [CREDITCARDPAYMENTMETHODDETAIL].[ID]
                    left join dbo.[OTHERPAYMENTMETHODDETAIL]
                        on [REVENUEPAYMENTMETHOD].[ID] = [OTHERPAYMENTMETHODDETAIL].[ID]
                    left join dbo.[RECONCILIATION]
                        on [RESERVATIONSECURITYDEPOSITPAYMENT].[RECONCILIATIONID] = [RECONCILIATION].[ID]
                    where
                        (
                            (@ISRECONCILEDPROCESS = 1 and [RECONCILIATION].[STATUSCODE] = 2) or
                            (@ISRECONCILEDPROCESS = 0 and [SALESORDER].[SALESMETHODTYPECODE] = 2)
                        ) and
                        (
                        [OTHERPAYMENTMETHODDETAIL].[ID] is null or
                        [OTHERPAYMENTMETHODDETAIL].[OTHERPAYMENTMETHODCODEID] not in 
                            (select ID from dbo.NONDEPOSITABLEPAYMENTMETHOD)
                        ) and
                        --Unlinked

                        [REVENUEPAYMENTMETHOD].[REVENUEID] not in (
                            select [BANKACCOUNTDEPOSITPAYMENT].[ID] 
                            from dbo.[BANKACCOUNTDEPOSITPAYMENT] with (nolock)
                        ) 

          --Refund payment types that might not be in sales

                    insert into @SALESORDERPAYMENTPAYMENTTYPES
                    select distinct
                        [CREDITPAYMENT].[PAYMENTMETHODCODE],
                        [CREDITCARDPAYMENTMETHODDETAIL].[CREDITTYPECODEID],
                        [CREDITPAYMENT].[OTHERPAYMENTMETHODCODEID],
                        case [CREDITPAYMENT].[PAYMENTMETHODCODE]
                            when 2 then dbo.UFN_CREDITTYPECODE_GETDESCRIPTION([CREDITCARDPAYMENTMETHODDETAIL].[CREDITTYPECODEID])
                            when 10 then dbo.UFN_OTHERPAYMENTMETHODCODE_GETDESCRIPTION([CREDITPAYMENT].[OTHERPAYMENTMETHODCODEID])
                            else dbo.UFN_REVENUEPAYMENTMETHOD_PAYMENTMETHODCODE_GETDESCRIPTION([CREDITPAYMENT].[PAYMENTMETHODCODE])
                        end
                    from dbo.[CREDITPAYMENT]
                    left join dbo.[REVENUESPLIT]
                        on [CREDITPAYMENT].[REVENUESPLITID] = [REVENUESPLIT].[ID]
                    inner join dbo.[REVENUE]
                        on 
                            [CREDITPAYMENT].[REVENUEID] = [REVENUE].[ID] or 
                            REVENUESPLIT.REVENUEID = REVENUE.ID
                    inner join dbo.[REVENUEPAYMENTMETHOD]
                        on [REVENUE].[ID] = [REVENUEPAYMENTMETHOD].[REVENUEID]
                    left join dbo.[CREDITCARDPAYMENTMETHODDETAIL] 
                        on 
                            [REVENUEPAYMENTMETHOD].[ID] = [CREDITCARDPAYMENTMETHODDETAIL].[ID] and
                            [CREDITPAYMENT].[PAYMENTMETHODCODE] = 2 --Only getting the creditcard type if the credit card was refunded as a credit card refund

                    left join dbo.[RECONCILIATION]
                        on [CREDITPAYMENT].[RECONCILIATIONID] = [RECONCILIATION].[ID]
                    where    
                        (@ISRECONCILEDPROCESS = 1 and [RECONCILIATION].[STATUSCODE] = 2) and
                        (
                            [CREDITPAYMENT].[OTHERPAYMENTMETHODCODEID] is null or
                            [CREDITPAYMENT].[OTHERPAYMENTMETHODCODEID] not in 
                            (select ID from dbo.NONDEPOSITABLEPAYMENTMETHOD)
                        ) and
                        not exists (
                            select [SALESPAYMENTTYPES].[PAYMENTMETHODCODE]
                            from @SALESORDERPAYMENTPAYMENTTYPES as [SALESPAYMENTTYPES]
                            where 
                                [SALESPAYMENTTYPES].[PAYMENTMETHODCODE] = [CREDITPAYMENT].[PAYMENTMETHODCODE] and
                                (
                                    [CREDITPAYMENT].[PAYMENTMETHODCODE] not in (2, 10) or
                                    ([CREDITPAYMENT].[PAYMENTMETHODCODE] = 2 and
                                    [SALESPAYMENTTYPES].[CREDITTYPECODEID] = [CREDITCARDPAYMENTMETHODDETAIL].[CREDITTYPECODEID]) or
                                    ([CREDITPAYMENT].[PAYMENTMETHODCODE] = 10 and
                                    [SALESPAYMENTTYPES].[OTHERPAYMENTMETHODCODEID] = [CREDITPAYMENT].[OTHERPAYMENTMETHODCODEID])
                                )
                            )

                    --If there are no cash payments, make sure that there is also no cash over/short

                    if not exists(
                        select [PAYMENTMETHODCODE]
                        from @SALESORDERPAYMENTPAYMENTTYPES as [PAYMENTPAYMENTTYPES]
                        where [PAYMENTMETHODCODE] = 0
                    ) 
                    begin
                        declare @CASHOVERSHORT money = 0
                        select @CASHOVERSHORT = coalesce(sum([ACTUALCASH]),0)
                        from dbo.[RECONCILIATION]
                        where 
                            [STATUSCODE] = 2 and
                            @ISRECONCILEDPROCESS = 1

                        if @CASHOVERSHORT <> 0
                        begin
                            insert into @SALESORDERPAYMENTPAYMENTTYPES (
                                [PAYMENTMETHODCODE],
                                [PAYMENTMETHOD]
                            ) 
                            values (
                                0,
                                dbo.UFN_REVENUEPAYMENTMETHOD_PAYMENTMETHODCODE_GETDESCRIPTION(0)
                            )
                        end    
                    end

                    --The payment types currently in a sales deposit template in this process

                    declare @CURRENTSALESDEPOSITPAYMENTTYPES table (
                        [ID] uniqueidentifier,
                        [SALESDEPOSITTEMPLATENAME] nvarchar(100),
                        [PAYMENTMETHODCODE] tinyint,
                        [CREDITTYPECODEID] uniqueidentifier,
                        [OTHERPAYMENTMETHODCODEID] uniqueidentifier,
                        [PAYMENTMETHOD] nvarchar(100)
                    )

                    insert into @CURRENTSALESDEPOSITPAYMENTTYPES
                    select 
                        [SALESDEPOSITTEMPLATE].[ID],
                        [SALESDEPOSITTEMPLATE].[NAME],
                        [SALESDEPOSITTEMPLATEPAYMENTMETHOD].[PAYMENTMETHODCODE],
                        [SALESDEPOSITTEMPLATEPAYMENTMETHOD].[CREDITTYPECODEID],
                        [SALESDEPOSITTEMPLATEPAYMENTMETHOD].[OTHERPAYMENTMETHODCODEID],
                        case [SALESDEPOSITTEMPLATEPAYMENTMETHOD].[PAYMENTMETHODCODE]
                            when 2 then dbo.UFN_CREDITTYPECODE_GETDESCRIPTION([SALESDEPOSITTEMPLATEPAYMENTMETHOD].[CREDITTYPECODEID])
                            when 10 then dbo.UFN_OTHERPAYMENTMETHODCODE_GETDESCRIPTION([SALESDEPOSITTEMPLATEPAYMENTMETHOD].[OTHERPAYMENTMETHODCODEID])
                            else dbo.UFN_REVENUEPAYMENTMETHOD_PAYMENTMETHODCODE_GETDESCRIPTION([SALESDEPOSITTEMPLATEPAYMENTMETHOD].[PAYMENTMETHODCODE])
                        end
                    from dbo.[SALESDEPOSITTEMPLATE]
                    inner join dbo.[SALESDEPOSITTEMPLATEPAYMENTMETHOD] 
                        on [SALESDEPOSITTEMPLATE].[ID] = [SALESDEPOSITTEMPLATEPAYMENTMETHOD].[SALESDEPOSITTEMPLATEID]
                    inner join @SALESORDERPAYMENTPAYMENTTYPES as [PAYMENTS]
                        on 
                            [SALESDEPOSITTEMPLATEPAYMENTMETHOD].[PAYMENTMETHODCODE] = [PAYMENTS].[PAYMENTMETHODCODE] and
                            (
                                [SALESDEPOSITTEMPLATEPAYMENTMETHOD].[PAYMENTMETHODCODE] not in (2, 10) or
                                ([SALESDEPOSITTEMPLATEPAYMENTMETHOD].[PAYMENTMETHODCODE] = 2 and
                                [SALESDEPOSITTEMPLATEPAYMENTMETHOD].[CREDITTYPECODEID] = [PAYMENTS].[CREDITTYPECODEID]) or
                                ([SALESDEPOSITTEMPLATEPAYMENTMETHOD].[PAYMENTMETHODCODE] = 10 and
                                [SALESDEPOSITTEMPLATEPAYMENTMETHOD].[OTHERPAYMENTMETHODCODEID] = [PAYMENTS].[OTHERPAYMENTMETHODCODEID])
                            )
                    where [SALESDEPOSITTEMPLATE].[SALESDEPOSITPROCESSID] = @ID

                    set @UNDEFINEDPAYMENTTYPE = (
                        select         
                            [PAYMENTS].[PAYMENTMETHODCODE],
                            [PAYMENTS].[CREDITTYPECODEID],
                            [PAYMENTS].[PAYMENTMETHOD],
                            null as [SALESDEPOSITTEMPLATEID],
                            [PAYMENTS].[OTHERPAYMENTMETHODCODEID]
                        from @SALESORDERPAYMENTPAYMENTTYPES as [PAYMENTS]
                        where not exists(
                            select [PAYMENTMETHODCODE]
                            from @CURRENTSALESDEPOSITPAYMENTTYPES as [DEPOSITPAYMENTTYPES]
                            where 
                                [PAYMENTS].[PAYMENTMETHODCODE] = [DEPOSITPAYMENTTYPES].[PAYMENTMETHODCODE] and 
                                (
                                    [PAYMENTS].[PAYMENTMETHODCODE] not in (2, 10) or
                                    ([PAYMENTS].[PAYMENTMETHODCODE] = 2 and
                                    [PAYMENTS].[CREDITTYPECODEID] = [DEPOSITPAYMENTTYPES].[CREDITTYPECODEID]) or
                                    ([PAYMENTS].[PAYMENTMETHODCODE] = 10 and
                                    [PAYMENTS].[OTHERPAYMENTMETHODCODEID] = [DEPOSITPAYMENTTYPES].[OTHERPAYMENTMETHODCODEID])
                                )
                            )
                        for xml raw ('ITEM'), type, elements, root('UNDEFINEDPAYMENTTYPE'), BINARY BASE64
                    )

                    set @SALESDEPOSITTEMPLATE = (
                        select
                            distinct
                            [CSDPT].[ID] as [SALESDEPOSITTEMPLATEID],
                            (
                                select dbo.UDA_BUILDLIST(distinct [CURRENTSALESDEPOSITPAYMENTTYPES].[PAYMENTMETHOD])
                                from @CURRENTSALESDEPOSITPAYMENTTYPES as [CURRENTSALESDEPOSITPAYMENTTYPES]
                                where [CURRENTSALESDEPOSITPAYMENTTYPES].[ID] = [CSDPT].[ID]
                            ) as [CURRENTPAYMENTMETHODS],
                            [CSDPT].[SALESDEPOSITTEMPLATENAME] as [SALESDEPOSITTEMPLATENAME]
                        from @CURRENTSALESDEPOSITPAYMENTTYPES as [CSDPT]
                        group by 
                            [CSDPT].[SALESDEPOSITTEMPLATENAME],
                            [CSDPT].[ID]
                        for xml raw ('ITEM'), type, elements, root('SALESDEPOSITTEMPLATE'), BINARY BASE64
                    )

                return 0;