UFN_REVENUE_GENERATESTOCKDETAILGLDISTRIBUTION

Generates GL Account Code for Stock from the Account code mappings defined in the system.

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@REVENUEID uniqueidentifier IN

Definition

Copy


            CREATE function dbo.UFN_REVENUE_GENERATESTOCKDETAILGLDISTRIBUTION(@REVENUEID uniqueidentifier = null)
            returns table 
            as return 
            /*    Getting 'Postable' Stock Sales    */
            select 
                REVENUE.ID as REVENUEID, 
                REVENUESPLIT.ID as REVENUESPLITID, 
                dbo.UFN_POSTTOGLPROCESS_GETGLPAYMENTMETHODREVENUETYPEMAPPINGID(CODES.PAYMENTMETHODCODE, CODES.REVENUETYPECODE, CODES.REVENUETYPECODE, CODES.REVENUETYPECODE, tf.TRANSACTIONTYPECODE) as GLPAYMENTMETHODREVENUETYPEMAPPINGID,
                tf.TRANSACTIONTYPECODE, 
                case when STOCKSALEADJUSTMENT.ID is null then STOCKSALE.SALEPOSTDATE  --if no unposted adjustment then use Stock Detail Post Date

                     else STOCKSALEADJUSTMENT.POSTDATE
                end AS POSTDATE,                 
                case when STOCKSALEADJUSTMENT.ID is null then STOCKSALE.SALEPOSTSTATUSCODE  --if no unposted adjustment then use Stock Detail Post Status Code

                     else STOCKSALEADJUSTMENT.POSTSTATUSCODE
                end AS POSTSTATUSCODE,
                tf.ACCOUNTSTRING, 
                tf.PROJECTCODE as PROJECT, 
                SPLITS.AMOUNT AMOUNT, 
                dbo.UFN_POSTTOGLPROCESS_GETJOURNALREFERENCE  (REVENUESPLIT.ID, CODES.PAYMENTMETHOD, CODES.REVENUETYPE) as REFERENCE, 
                tf.ERRORMESSAGE,
                REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE,
                REVENUE.TRANSACTIONTYPECODE as REVENUETRANSACTIONTYPECODE,
                REVENUEPAYMENTMETHOD.ID as REVENUEPAYMENTMETHODID,
                STOCKSALE.ID as STOCKSALEID,
                tf.ACCOUNTID as ACCOUNTID, 
                SPLITS.TRANSACTIONSPLITAMOUNT TRANSACTIONAMOUNT, 
                SPLITS.ORGANIZATIONAMOUNT ORGANIZATIONAMOUNT, 
                REVENUE.TRANSACTIONCURRENCYID as TRANSACTIONCURRENCYID, 
                REVENUE.BASECURRENCYID as BASECURRENCYID, 
                REVENUE.BASEEXCHANGERATEID as BASEEXCHANGERATEID, 
                REVENUE.ORGANIZATIONEXCHANGERATEID as ORGANIZATIONEXCHANGERATEID,
                tf.MAPPEDVALUES
            from dbo.REVENUE with (nolock)            
                inner join dbo.REVENUEPAYMENTMETHOD with (nolock) on REVENUE.ID = REVENUEPAYMENTMETHOD.REVENUEID
                inner join dbo.REVENUESPLIT with (nolock) on REVENUE.ID = REVENUESPLIT.REVENUEID
                inner join dbo.STOCKDETAIL with (nolock) on REVENUEPAYMENTMETHOD.ID = STOCKDETAIL.ID
                inner join dbo.STOCKSALE with (nolock) on STOCKDETAIL.ID = STOCKSALE.STOCKDETAILID
                left join dbo.STOCKSALEADJUSTMENT with (nolock) on STOCKSALE.ID = STOCKSALEADJUSTMENT.STOCKSALEID and STOCKSALEADJUSTMENT.POSTSTATUSCODE <> 0
                cross join 
                    ( 
                        select '7' as PAYMENTMETHODCODE, 'Sold Stock' as PAYMENTMETHOD, 'All' as REVENUETYPE, '200' as REVENUETYPECODE
                            union all 
                        select '200' as PAYMENTMETHODCODE, 'Gain' as PAYMENTMETHOD, 'All' as REVENUETYPE, '200' as REVENUETYPECODE 
                            union all 
                        select '202' as PAYMENTMETHODCODE, 'Loss' AS PAYMENTMETHOD, 'All' as REVENUETYPE, '200' as REVENUETYPECODE 
                            union all 
                        select '204' as PAYMENTMETHODCODE, 'Fees' AS PAYMENTMETHOD, 'All' as REVENUETYPE, '200' as REVENUETYPECODE 
                    ) as CODES
                cross apply dbo.UFN_REVENUE_GENERATEGLACCOUNT(REVENUESPLIT.ID, CODES.REVENUETYPECODE, CODES.REVENUETYPECODE, CODES.REVENUETYPECODE, CODES.PAYMENTMETHODCODE, REVENUESPLIT.DESIGNATIONID) as tf 
                outer apply dbo.UFN_REVENUE_GETSTOCKDETAILSPLITSBYTRANSACTION(REVENUE.ID, CODES.PAYMENTMETHODCODE) as SPLITS                
            where  
                (REVENUE.ID = @REVENUEID or @REVENUEID is NULL
                and ((CODES.PAYMENTMETHODCODE = 200 and STOCKSALE.SALEAMOUNT > (STOCKSALE.NUMBEROFUNITS * STOCKDETAIL.MEDIANPRICE)) or    -- Stock Gain

                     (CODES.PAYMENTMETHODCODE = 202 and STOCKSALE.SALEAMOUNT < (STOCKSALE.NUMBEROFUNITS * STOCKDETAIL.MEDIANPRICE)) or    -- Stock Loss

                     (CODES.PAYMENTMETHODCODE = 204 and STOCKSALE.FEE > 0) or                                                           -- Broker Fee

                      CODES.PAYMENTMETHODCODE = 7)                                                                                        -- Sold Stock

                and (SPLITS.REVENUESPLITID = REVENUESPLIT.ID or (SPLITS.REVENUESPLITID is null and REVENUESPLIT.ID is null and REVENUESPLIT.APPLICATIONCODE = 1 and SPLITS.REVENUEID = REVENUE.ID))
                and SPLITS.STOCKSALEID = STOCKSALE.ID
                and STOCKSALE.SALEPOSTSTATUSCODE != 2 -- 2 Do Not Post

                and (REVENUEPAYMENTMETHOD.PAYMENTMETHODCODE = 4) -- Verify the stock has sold (it's now implied since STOCKSALE is included in the join)