USP_DATALIST_SALESORDERMERCHANDISE

Lists all merchandise belonging to a sales order.

Parameters

Parameter Parameter Type Mode Description
@CONTEXTID uniqueidentifier IN Input parameter indicating the context ID for the data list.

Definition

Copy


CREATE procedure dbo.USP_DATALIST_SALESORDERMERCHANDISE
(
  @CONTEXTID uniqueidentifier
)
as
  set nocount on;

  -- Non-refunded merchandise

  select
    [SALESORDERITEM].[ID],
    [SALESORDERITEM].[DESCRIPTION] as [DESCRIPTION],
    [MERCHANDISEPRODUCTINSTANCE].[BARCODE],
    [SALESORDERITEM].[QUANTITY] - sum(coalesce([CREDITITEM].[QUANTITY],0)) as [QUANTITY],
    [SALESORDERITEM].[PRICE],
    coalesce(sum([SALESORDERITEMITEMDISCOUNT].[AMOUNT]),0.0)  as [DISCOUNTS],
    [SALESORDERITEM].[TOTAL] - sum(coalesce([CREDITITEM].[TOTAL],0)) - coalesce(sum([SALESORDERITEMITEMDISCOUNT].[AMOUNT]),0.0) as [TOTAL],
    [SALESORDERITEM].[TYPECODE],
    0 as ISREFUND
  from dbo.[SALESORDERITEM]
  inner join dbo.[SALESORDERITEMMERCHANDISE] on [SALESORDERITEM].[ID] = [SALESORDERITEMMERCHANDISE].[ID]
  inner join dbo.[MERCHANDISEPRODUCTINSTANCE] on [SALESORDERITEMMERCHANDISE].[MERCHANDISEPRODUCTINSTANCEID] = [MERCHANDISEPRODUCTINSTANCE].[ID]
  left outer join dbo.[CREDITITEM]  on [SALESORDERITEM].[ID] = [CREDITITEM].[SALESORDERITEMID]
  left outer join dbo.[CREDIT] on [CREDITITEM].[CREDITID] = [CREDIT].[ID]
  left join dbo.[SALESORDERITEMITEMDISCOUNT] on [SALESORDERITEMITEMDISCOUNT].[SALESORDERITEMID] = [SALESORDERITEM].[ID]
  where [SALESORDERITEM].[SALESORDERID] = @CONTEXTID
  group by 
    [SALESORDERITEM].[ID],
    [SALESORDERITEM].[DESCRIPTION],
    [MERCHANDISEPRODUCTINSTANCE].[BARCODE],
    [SALESORDERITEM].[QUANTITY],
    [SALESORDERITEM].[PRICE],
    [SALESORDERITEM].[TOTAL],
    [SALESORDERITEM].[TYPECODE]
  having ([SALESORDERITEM].[QUANTITY] - sum(coalesce([CREDITITEM].[QUANTITY],0))) > 0

  union all

  -- Refunded merchandise

  select
    [SALESORDERITEM].[ID],
    --The "GETEARLIESTTIME" date function has been inlined here for performance (the part with "cast(@DATE as date)")...

    'Refund ' + convert(nvarchar(20), cast([CREDIT].[TRANSACTIONDATE] as date), 1) + ', ' + [SALESORDERITEM].[DESCRIPTION] as [DESCRIPTION],
    [MERCHANDISEPRODUCTINSTANCE].[BARCODE],
    sum([CREDITITEM].[QUANTITY]),
    [SALESORDERITEM].[PRICE],
    [CREDITITEM].[DISCOUNTS],
    sum([CREDITITEM].[TOTAL]) as [TOTAL],
    [SALESORDERITEM].[TYPECODE],
    1 as [ISREFUND]
  from dbo.[SALESORDERITEM]
  inner join dbo.[SALESORDERITEMMERCHANDISE] on [SALESORDERITEM].[ID] = [SALESORDERITEMMERCHANDISE].[ID]
  inner join dbo.[MERCHANDISEPRODUCTINSTANCE] on [SALESORDERITEMMERCHANDISE].[MERCHANDISEPRODUCTINSTANCEID] = [MERCHANDISEPRODUCTINSTANCE].[ID]
  left outer join dbo.[CREDITITEM] on [SALESORDERITEM].[ID] = [CREDITITEM].[SALESORDERITEMID]
  left outer join dbo.[CREDIT] on [CREDITITEM].[CREDITID] = [CREDIT].[ID]
  where [SALESORDERITEM].[SALESORDERID] = @CONTEXTID
  and ([CREDITITEM].[QUANTITY]) > 0
  group by
    [SALESORDERITEM].[ID],
    [SALESORDERITEM].[DESCRIPTION],
    [MERCHANDISEPRODUCTINSTANCE].[BARCODE],
    [SALESORDERITEM].[PRICE],
    [SALESORDERITEM].[TOTAL],
    [SALESORDERITEM].[TYPECODE],
    --The "GETEARLIESTTIME" date function has been inlined here for performance (the part with "cast(@DATE as date)")...

    cast([CREDIT].[TRANSACTIONDATE] as date),
    [CREDITITEM].[DISCOUNTS];

  return 0;