USP_REPORT_SALESBYPROGRAM
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@FROMDATE | datetime | IN | |
@TODATE | datetime | IN | |
@PROGRAMID | uniqueidentifier | IN | |
@PROGRAMQUERY | uniqueidentifier | IN | |
@SALESMETHODID | uniqueidentifier | IN | |
@PROGRAMCATEGORYID | uniqueidentifier | IN |
Definition
Copy
create procedure dbo.USP_REPORT_SALESBYPROGRAM
(
@FROMDATE datetime = null,
@TODATE datetime = null,
@PROGRAMID uniqueidentifier = null,
@PROGRAMQUERY uniqueidentifier = null,
@SALESMETHODID uniqueidentifier = null,
@PROGRAMCATEGORYID uniqueidentifier = null
)
as
set nocount on;
declare @SALESMETHODTYPECODE tinyint = null;
select @SALESMETHODTYPECODE = [TYPECODE]
from dbo.[SALESMETHOD]
where [ID] = @SALESMETHODID;
declare @PROGRAMFILTER bit = 1;
declare @PROGRAMS table (
ID uniqueidentifier not null
)
if @PROGRAMID is not null
insert into @PROGRAMS (ID)
values (@PROGRAMID);
else if @PROGRAMQUERY is not null
insert into @PROGRAMS (ID)
select [ID] from dbo.UFN_IDSETREADER_GETRESULTS_GUID(@PROGRAMQUERY);
else if @PROGRAMCATEGORYID is not null
insert into @PROGRAMS (ID)
select ID
from dbo.PROGRAM
where [PROGRAM].[PROGRAMCATEGORYCODEID] = @PROGRAMCATEGORYID;
else
--I'd rather not place all the programs in a temp table--a potentially large amount
set @PROGRAMFILTER = 0;
with REPORTPARAMETERS_CTE as (
select
[SALESORDERITEMTICKET].[PROGRAMNAME],
isnull(sum([SALESORDERITEM].[TOTAL]), 0) as [GROSS],
isnull(sum([ITEMDISCOUNTS].[AMOUNT]), 0) + isnull(sum(SALESORDERITEMORDERDISCOUNTDETAIL.AMOUNT), 0) as [DISCOUNTS],
0 as [REFUNDS],
isnull(sum(FEES.TOTAL), 0) as [FEES],
0 as [NET],
0 as [PERCENTOFNET],
SALESORDERS.SALESMETHODTYPECODE,
0 as [FEESREFUNDED]
from
dbo.[SALESORDERITEMTICKET]
inner join
dbo.[SALESORDERITEM] on [SALESORDERITEM].[ID] = [SALESORDERITEMTICKET].[ID]
inner join
dbo.PROGRAM on [PROGRAM].[ID] = [SALESORDERITEMTICKET].[PROGRAMID]
inner join (
select SALESORDER.ID, SALESORDER.STATUSCODE, SALESORDER.SALESMETHODTYPECODE, FT.CALCULATEDDATE as DATE
from dbo.SALESORDER
inner join dbo.FINANCIALTRANSACTION as FT on FT.ID = SALESORDER.REVENUEID
union all
select ID, STATUSCODE, SALESMETHODTYPECODE, TRANSACTIONDATE as DATE
from dbo.SALESORDER
where REVENUEID is null
) as SALESORDERS on SALESORDERS.ID = SALESORDERITEM.SALESORDERID
outer apply (
select sum(SALESORDERITEMITEMDISCOUNT.AMOUNT) as AMOUNT
from dbo.SALESORDERITEMITEMDISCOUNT
where SALESORDERITEMITEMDISCOUNT.SALESORDERITEMID = SALESORDERITEM.ID
) as ITEMDISCOUNTS
outer apply (
select sum(FEEORDERITEM.TOTAL) as TOTAL
from dbo.SALESORDERITEMFEE
inner join dbo.SALESORDERITEM as FEEORDERITEM on FEEORDERITEM.ID = SALESORDERITEMFEE.ID
where SALESORDERITEMFEE.SALESORDERITEMID = SALESORDERITEM.ID
) as FEES
outer apply (
select sum(SALESORDERITEMORDERDISCOUNTDETAIL.AMOUNT) as AMOUNT
from dbo.SALESORDERITEMORDERDISCOUNTDETAIL
where SALESORDERITEMORDERDISCOUNTDETAIL.SALESORDERITEMID = SALESORDERITEM.ID
) as SALESORDERITEMORDERDISCOUNTDETAIL
where
SALESORDERS.DATE between @FROMDATE and @TODATE and
SALESORDERS.STATUSCODE = 1 and
(@SALESMETHODTYPECODE is null or SALESORDERS.SALESMETHODTYPECODE = @SALESMETHODTYPECODE)
and (@PROGRAMFILTER = 0 or PROGRAM.ID in (select ID from @PROGRAMS))
group by
[PROGRAMNAME], SALESORDERS.SALESMETHODTYPECODE
union all
select
[SALESORDERITEMTICKET].[PROGRAMNAME],
0 as [GROSS],
0 as [DISCOUNTS],
isnull(sum((LI.QUANTITY * LI.UNITVALUE) - EXT.DISCOUNTS), 0) - isnull(sum([SALESORDERITEMORDERDISCOUNTDETAIL].[AMOUNT]), 0) as [REFUNDS],
0 as [FEES],
0 as [NET],
0 as [PERCENTOFNET],
[SALESORDER].[SALESMETHODTYPECODE],
isnull(sum(EXT.FEES), 0) as [FEESREFUNDED]
from
dbo.FINANCIALTRANSACTION as FT
inner join
dbo.FINANCIALTRANSACTIONLINEITEM as LI on LI.FINANCIALTRANSACTIONID = FT.ID
inner join
dbo.CREDITITEM_EXT as EXT on EXT.ID = LI.ID
inner join
dbo.[SALESORDERITEM] on [SALESORDERITEM].[ID] = EXT.SALESORDERITEMID
inner join
dbo.[SALESORDERITEMTICKET] on [SALESORDERITEMTICKET].[ID] = EXT.SALESORDERITEMID
inner join
dbo.[SALESORDER] on [SALESORDER].[ID] = [SALESORDERITEM].[SALESORDERID]
inner join
dbo.PROGRAM on PROGRAM.ID = SALESORDERITEMTICKET.PROGRAMID
outer apply (
select sum(SALESORDERITEMORDERDISCOUNTDETAIL.AMOUNT) as AMOUNT
from dbo.SALESORDERITEMORDERDISCOUNTDETAIL
where SALESORDERITEMORDERDISCOUNTDETAIL.SALESORDERITEMID = SALESORDERITEM.ID
) as SALESORDERITEMORDERDISCOUNTDETAIL
where
FT.CALCULATEDDATE between @FROMDATE and @TODATE and
[SALESORDER].[STATUSCODE] = 1 and
(@SALESMETHODTYPECODE is null or [SALESORDER].[SALESMETHODTYPECODE] = @SALESMETHODTYPECODE) and
(@PROGRAMFILTER = 0 or PROGRAM.ID in (select ID from @PROGRAMS))
group by [PROGRAMNAME], [SALESORDER].[SALESMETHODTYPECODE]
)
select
[PROGRAMNAME],
sum([GROSS]) as GROSS,
sum([DISCOUNTS]) as DISCOUNTS,
sum([REFUNDS] + [FEESREFUNDED]) as [REFUNDS],
sum([FEES]) as FEES,
0 as TAXES,
sum([GROSS] - [DISCOUNTS] - [REFUNDS] - [FEESREFUNDED] + [FEES]) as [NET],
SALESMETHOD.TYPE as [SALESMETHODFIELDTEXT]
from REPORTPARAMETERS_CTE
inner join dbo.SALESMETHOD on REPORTPARAMETERS_CTE.SALESMETHODTYPECODE = SALESMETHOD.TYPECODE
group by [PROGRAMNAME], SALESMETHOD.TYPE
order by PROGRAMNAME, SALESMETHOD.TYPE
option (recompile)
return 0;