USP_DATAFORMTEMPLATE_ADD_RESERVATIONCOPY
The save procedure used by the add dataform template "Reservation Copy Add Data Form".
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | INOUT | The output parameter indicating the ID of the record added. |
@CONTEXTRESERVATIONID | uniqueidentifier | IN | Input parameter indicating the context ID for the record being added. |
@CHANGEAGENTID | uniqueidentifier | IN | Input parameter indicating the ID of the change agent invoking the procedure. |
@CURRENTAPPUSERID | uniqueidentifier | IN | Input parameter indicating the ID of the current user. |
@CONSTITUENTID | uniqueidentifier | IN | Patron |
@CONTACTRELATIONSHIPID | uniqueidentifier | IN | Contact |
@NAME | nvarchar(100) | IN | Reservation name |
@ARRIVALDATE | date | IN | Visit date |
@EXCEEDCAPACITY | bit | IN | Exceed capacity available |
@IGNOREITINERARYRESOURCECONFLICTS | bit | IN | Ignore itinerary resource conflicts |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_RESERVATIONCOPY
(
@ID uniqueidentifier = null output,
@CONTEXTRESERVATIONID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@CURRENTAPPUSERID uniqueidentifier,
@CONSTITUENTID uniqueidentifier = null,
@CONTACTRELATIONSHIPID uniqueidentifier = null,
@NAME nvarchar(100) = null,
@ARRIVALDATE date = null,
@EXCEEDCAPACITY bit = 0,
@IGNOREITINERARYRESOURCECONFLICTS bit = 0
)
as
set nocount on;
if @ID is null
set @ID = newid();
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
declare @CURRENTDATE datetime;
declare @TODAY date;
set @CURRENTDATE = getdate();
set @TODAY = @CURRENTDATE;
declare @PRICINGCODE tinyint;
declare @CONTACTCONSTITUENTID uniqueidentifier;
declare @CONTACTADDRESSID uniqueidentifier;
declare @CONTACTEMAILADDRESSID uniqueidentifier;
declare @CONTACTPHONEID uniqueidentifier;
declare @DEPOSITREQUIRED bit;
declare @DEPOSITTIMEVALUE smallint;
declare @DEPOSITTIMECODE tinyint;
declare @DEPOSITTYPECODE tinyint;
declare @DEPOSITAMOUNT money;
declare @SECURITYDEPOSITREQUIRED bit;
declare @SECURITYDEPOSITTIMEVALUE smallint;
declare @SECURITYDEPOSITTIMECODE tinyint;
declare @SECURITYDEPOSITTYPECODE tinyint;
declare @SECURITYDEPOSITAMOUNT money;
declare @CONTRACTREQUIRED bit;
declare @CONTRACTTIMEVALUE smallint;
declare @CONTRACTTIMECODE tinyint;
declare @FINALCOUNTREQUIRED bit;
declare @FINALCOUNTTIMEVALUE smallint;
declare @FINALCOUNTTIMECODE tinyint;
declare @FINALTIMEVALUE smallint;
declare @FINALTIMECODE tinyint;
declare @DEPOSITDUEDATE date;
declare @SECURITYDEPOSITDUEDATE date;
declare @FINALDUEDATE date;
declare @CONTRACTDUEDATE date;
declare @FINALCOUNTDUEDATE date;
select @PRICINGCODE = PRICINGCODE from dbo.RESERVATION where ID = @CONTEXTRESERVATIONID;
select top 1
@DEPOSITREQUIRED = DEPOSITREQUIRED,
@DEPOSITTIMEVALUE = DEPOSITTIMEVALUE,
@DEPOSITTIMECODE = DEPOSITTIMECODE,
@DEPOSITTYPECODE = DEPOSITTYPECODE,
@DEPOSITAMOUNT = DEPOSITAMOUNT,
@SECURITYDEPOSITREQUIRED = SECURITYDEPOSITREQUIRED,
@SECURITYDEPOSITTIMEVALUE = SECURITYDEPOSITTIMEVALUE,
@SECURITYDEPOSITTIMECODE = SECURITYDEPOSITTIMECODE,
@SECURITYDEPOSITTYPECODE = SECURITYDEPOSITTYPECODE,
@SECURITYDEPOSITAMOUNT = SECURITYDEPOSITAMOUNT,
@CONTRACTREQUIRED = CONTRACTREQUIRED,
@CONTRACTTIMEVALUE = CONTRACTTIMEVALUE,
@CONTRACTTIMECODE = CONTRACTTIMECODE,
@FINALCOUNTREQUIRED = FINALCOUNTREQUIRED,
@FINALCOUNTTIMEVALUE = FINALCOUNTTIMEVALUE,
@FINALCOUNTTIMECODE = FINALCOUNTTIMECODE,
@FINALTIMEVALUE = FINALTIMEVALUE,
@FINALTIMECODE = FINALTIMECODE
from
dbo.GROUPSALESDEFAULT;
if @DEPOSITREQUIRED = 1
begin
if @DEPOSITTIMECODE = 0
begin
set @DEPOSITDUEDATE = dateadd(day, -@DEPOSITTIMEVALUE, @ARRIVALDATE);
if @DEPOSITDUEDATE < @TODAY and @ARRIVALDATE >= @TODAY
set @DEPOSITDUEDATE = @TODAY;
end
else if @DEPOSITTIMECODE = 1
set @DEPOSITDUEDATE = dateadd(day, @DEPOSITTIMEVALUE, @TODAY);
if @DEPOSITTYPECODE = 1
set @DEPOSITAMOUNT = 0;
end
if @SECURITYDEPOSITREQUIRED = 1
begin
if @SECURITYDEPOSITTIMECODE = 0
begin
set @SECURITYDEPOSITDUEDATE = dateadd(day, -@SECURITYDEPOSITTIMEVALUE, @ARRIVALDATE);
if @SECURITYDEPOSITDUEDATE < @TODAY and @ARRIVALDATE >= @TODAY
set @SECURITYDEPOSITDUEDATE = @TODAY;
end
else if @SECURITYDEPOSITTIMECODE = 1
set @SECURITYDEPOSITDUEDATE = dateadd(day, @SECURITYDEPOSITTIMEVALUE, @TODAY);
if @SECURITYDEPOSITTYPECODE = 1
set @SECURITYDEPOSITAMOUNT = 0;
end
if @FINALTIMECODE = 0
set @FINALDUEDATE = dateadd(day, -@FINALTIMEVALUE, @ARRIVALDATE);
else if @FINALTIMECODE = 1
set @FINALDUEDATE = dateadd(day, @FINALTIMEVALUE, @TODAY);
else if @FINALTIMECODE = 2
set @FINALDUEDATE = dateadd(day, @FINALTIMEVALUE, @DEPOSITDUEDATE);
if @FINALDUEDATE > @ARRIVALDATE
set @FINALDUEDATE = @ARRIVALDATE;
else if @FINALDUEDATE < @TODAY and @ARRIVALDATE >= @TODAY
set @FINALDUEDATE = @TODAY;
if @DEPOSITDUEDATE > @FINALDUEDATE
set @DEPOSITDUEDATE = @FINALDUEDATE;
if @SECURITYDEPOSITDUEDATE > @FINALDUEDATE
set @SECURITYDEPOSITDUEDATE = @FINALDUEDATE;
if @CONTRACTREQUIRED = 1
begin
if @CONTRACTTIMECODE = 0
set @CONTRACTDUEDATE = dateadd(day, -@CONTRACTTIMEVALUE, @ARRIVALDATE);
else if @CONTRACTTIMECODE = 1
set @CONTRACTDUEDATE = dateadd(day, @CONTRACTTIMEVALUE, @TODAY);
if @CONTRACTDUEDATE > @FINALDUEDATE
set @CONTRACTDUEDATE = @FINALDUEDATE;
else if @CONTRACTDUEDATE < @TODAY and @ARRIVALDATE >= @TODAY
set @CONTRACTDUEDATE = @TODAY;
end
if @FINALCOUNTREQUIRED = 1
begin
if @FINALCOUNTTIMECODE = 0
set @FINALCOUNTDUEDATE = dateadd(day, -@FINALCOUNTTIMEVALUE, @ARRIVALDATE);
else if @FINALCOUNTTIMECODE = 1
set @FINALCOUNTDUEDATE = dateadd(day, @FINALCOUNTTIMEVALUE, @TODAY);
if @FINALCOUNTDUEDATE > @FINALDUEDATE
set @FINALCOUNTDUEDATE = @FINALDUEDATE;
else if @FINALCOUNTDUEDATE < @TODAY and @ARRIVALDATE >= @TODAY
set @FINALCOUNTDUEDATE = @TODAY;
end
begin try
if @EXCEEDCAPACITY = 0
begin
declare @CHECKCAPACITY bit;
select top 1 @CHECKCAPACITY = case when MAXIMUMCAPACITY > 0 then 1 else 0 end from dbo.GROUPSALESDEFAULT;
if @CHECKCAPACITY = 1
begin
declare @NUMBEROFDAYS int;
declare @CAPACITYNEEDED int;
declare @I int = 0;
select @NUMBEROFDAYS = datediff(day, STARTDATETIME, ENDDATETIME) + 1
from dbo.RESERVATION
where RESERVATION.ID = @CONTEXTRESERVATIONID;
set @CAPACITYNEEDED = dbo.UFN_RESERVATION_TOTALVISITORCOUNT(@CONTEXTRESERVATIONID);
while @I < @NUMBEROFDAYS
begin
if @CAPACITYNEEDED > dbo.UFN_GROUPSALESCAPACITY_CAPACITYREMAINING(dateadd(day, @I, @ARRIVALDATE), null)
raiserror('ERR_EXCEEDSCAPACITY', 13, 1);
set @I = @I + 1;
end
end
end
exec dbo.USP_RESERVATION_GETCONTACTINFO
@CONSTITUENTID,
@CONTACTRELATIONSHIPID,
@CONTACTCONSTITUENTID output,
@CONTACTADDRESSID output,
@CONTACTEMAILADDRESSID output,
@CONTACTPHONEID output;
-- Create new reservation
insert into dbo.SALESORDER
(
ID,
APPUSERID,
SALESMETHODTYPECODE,
CONSTITUENTID,
CONTACTRELATIONSHIPID,
RECIPIENTID,
ADDRESSID,
EMAILADDRESSID,
PHONEID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
values
(
@ID,
@CURRENTAPPUSERID,
3, -- Group Sales
@CONSTITUENTID,
@CONTACTRELATIONSHIPID,
@CONTACTCONSTITUENTID,
@CONTACTADDRESSID,
@CONTACTEMAILADDRESSID,
@CONTACTPHONEID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
);
insert into dbo.RESERVATION
(
ID,
NAME,
ARRIVALDATE,
ARRIVALTIME,
NUMBEROFBUSES,
ARRIVALAREACODEID,
ARRIVALNOTES,
DRIVERNAME,
DRIVERPHONENUMBER,
DEPOSITREQUIRED,
DEPOSITAMOUNT,
DEPOSITDUEDATE,
SECURITYDEPOSITREQUIRED,
SECURITYDEPOSITAMOUNT,
SECURITYDEPOSITDUEDATE,
FINALDUEDATE,
FINALCOUNTREQUIRED,
FINALCOUNTDUEDATE,
CONTRACTREQUIRED,
CONTRACTDUEDATE,
PRICINGCODE,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
@ID,
@NAME,
@ARRIVALDATE,
ARRIVALTIME,
NUMBEROFBUSES,
ARRIVALAREACODEID,
ARRIVALNOTES,
DRIVERNAME,
DRIVERPHONENUMBER,
@DEPOSITREQUIRED,
@DEPOSITAMOUNT,
@DEPOSITDUEDATE,
@SECURITYDEPOSITREQUIRED,
@SECURITYDEPOSITAMOUNT,
@SECURITYDEPOSITDUEDATE,
@FINALDUEDATE,
@FINALCOUNTREQUIRED,
@FINALCOUNTDUEDATE,
@CONTRACTREQUIRED,
@CONTRACTDUEDATE,
@PRICINGCODE,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from
dbo.RESERVATION
where
ID = @CONTEXTRESERVATIONID;
exec dbo.USP_RESERVATIONSTATUSHISTORY_ADD @ID, @CHANGEAGENTID, 0;
-- Handle rate scale
if @PRICINGCODE = 1
begin
insert into dbo.RESERVATIONRATESCALE
(
ID,
RATESCALEID,
INCLUDEALLPROGRAMS,
INCLUDEALLFEES,
INCLUDEALLRESOURCES,
INCLUDEALLSTAFFRESOURCES,
USEPERTICKETAFTERMAX,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
@ID,
RATESCALEID,
INCLUDEALLPROGRAMS,
INCLUDEALLFEES,
INCLUDEALLRESOURCES,
INCLUDEALLSTAFFRESOURCES,
USEPERTICKETAFTERMAX,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from
dbo.RESERVATIONRATESCALE
where
ID = @CONTEXTRESERVATIONID;
insert into dbo.RESERVATIONRATESCALEAPPLICATION
(
ID,
RESERVATIONRATESCALEID,
TYPECODE,
AMOUNT,
PROGRAMID,
FEEID,
RESOURCEID,
VOLUNTEERTYPEID,
ISADDEDMANUALLY,
ISADDEDAUTOMATICALLY,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
newid(),
@ID,
TYPECODE,
AMOUNT,
PROGRAMID,
FEEID,
RESOURCEID,
VOLUNTEERTYPEID,
ISADDEDMANUALLY,
ISADDEDAUTOMATICALLY,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from
dbo.RESERVATIONRATESCALEAPPLICATION
where
RESERVATIONRATESCALEID = @CONTEXTRESERVATIONID;
insert into dbo.RESERVATIONRATESCALEFEE
(
ID,
RESERVATIONRATESCALEID,
FEEID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
newid(),
@ID,
FEEID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from
dbo.RESERVATIONRATESCALEFEE
where
RESERVATIONRATESCALEID = @CONTEXTRESERVATIONID;
insert into dbo.RESERVATIONRATESCALEPRICE
(
ID,
RESERVATIONRATESCALEID,
AMOUNT,
GROUPMINIMUM,
GROUPMAXIMUM,
INUSE,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
newid(),
@ID,
AMOUNT,
GROUPMINIMUM,
GROUPMAXIMUM,
INUSE,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from
dbo.RESERVATIONRATESCALEPRICE
where
RESERVATIONRATESCALEID = @CONTEXTRESERVATIONID;
insert into dbo.RESERVATIONRATESCALEPROGRAM
(
ID,
RESERVATIONRATESCALEID,
PROGRAMID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
newid(),
@ID,
PROGRAMID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from
dbo.RESERVATIONRATESCALEPROGRAM
where
RESERVATIONRATESCALEID = @CONTEXTRESERVATIONID;
insert into dbo.RESERVATIONRATESCALERESOURCE
(
ID,
RESERVATIONRATESCALEID,
RESOURCEID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
newid(),
@ID,
RESOURCEID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from
dbo.RESERVATIONRATESCALERESOURCE
where
RESERVATIONRATESCALEID = @CONTEXTRESERVATIONID;
insert into dbo.RESERVATIONRATESCALESTAFFRESOURCE
(
ID,
RESERVATIONRATESCALEID,
VOLUNTEERTYPEID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
newid(),
@ID,
VOLUNTEERTYPEID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from
dbo.RESERVATIONRATESCALESTAFFRESOURCE
where
RESERVATIONRATESCALEID = @CONTEXTRESERVATIONID;
end
-- Copy itineraries
declare @SOURCEITINERARYID uniqueidentifier;
declare @DESTINATIONITINERARYID uniqueidentifier;
declare @START datetime;
declare @END datetime;
declare ITINERARIES_CURSOR cursor local fast_forward for
select ID from dbo.ITINERARY where RESERVATIONID = @CONTEXTRESERVATIONID;
open ITINERARIES_CURSOR;
fetch next from ITINERARIES_CURSOR
into @SOURCEITINERARYID;
while @@FETCH_STATUS = 0
begin
set @DESTINATIONITINERARYID = newid();
insert into dbo.ITINERARY
(
ID,
RESERVATIONID,
NAME,
GROUPSALESGROUPTYPECODEID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
@DESTINATIONITINERARYID,
@ID,
NAME,
GROUPSALESGROUPTYPECODEID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from
dbo.ITINERARY
where
ID = @SOURCEITINERARYID;
insert into dbo.ITINERARYATTENDEE
(
ID,
ITINERARYID,
PRICETYPECODEID,
QUANTITY,
SEQUENCE,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
newid(),
@DESTINATIONITINERARYID,
PRICETYPECODEID,
QUANTITY,
SEQUENCE,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from
dbo.ITINERARYATTENDEE
where
ITINERARYID = @SOURCEITINERARYID;
exec dbo.USP_ITINERARY_COPYFROMEXISTING @DESTINATIONITINERARYID, @SOURCEITINERARYID, @CHANGEAGENTID, @IGNOREITINERARYRESOURCECONFLICTS;
if @IGNOREITINERARYRESOURCECONFLICTS = 0 and
exists (select 1 from dbo.ITINERARYITEM where ITINERARYITEM.ITINERARYID = @DESTINATIONITINERARYID)
begin
select
@START = ITINERARY.STARTDATETIME,
@END = ITINERARY.ENDDATETIME
from dbo.ITINERARY
where ID = @DESTINATIONITINERARYID
if dbo.UFN_CONFLICTCHECK_CONFLICTSEXIST
(
@START, @END,
null,
dbo.UFN_ITINERARYRESOURCE_GETRESOURCES_TOITEMLISTXML(@DESTINATIONITINERARYID),
dbo.UFN_ITINERARY_GETSTAFFRESOURCES_TOITEMLISTXML(@DESTINATIONITINERARYID),
null, @DESTINATIONITINERARYID, null,
0,
1, -- Ignore itinerary resources
0,
0
) = 1
begin
raiserror('BBERR_CONFLICTSEXIST', 13, 1);
return 1;
end
end
fetch next from ITINERARIES_CURSOR
into @SOURCEITINERARYID;
end
close ITINERARIES_CURSOR;
deallocate ITINERARIES_CURSOR;
if @PRICINGCODE = 0
begin
-- WI #165816 - Copying over all discounts
-- Copy Adjustable first...
insert into dbo.SALESORDERADJUSTABLEDISCOUNT
(
ID,
SALESORDERID,
CALCULATIONTYPECODE,
[PERCENT],
AMOUNT,
DISCOUNTREASONCODEID,
DISCOUNTNAME,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
newid(),
@ID,
CALCULATIONTYPECODE,
[PERCENT],
AMOUNT,
DISCOUNTREASONCODEID,
DISCOUNTNAME,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from dbo.SALESORDERADJUSTABLEDISCOUNT
where SALESORDERID = @CONTEXTRESERVATIONID
-- holds all possible discounts for the order
declare @MANUALDISCOUNTS table
(
SALESORDERID uniqueidentifier,
DISCOUNTID uniqueidentifier,
PROMOTIONALCODE nvarchar(50),
ISPROMOTIONALCODE bit,
ISLIMITED bit,
NUMBEROFDISCOUNTSPERORDER int,
ISADJUSTABLEDISCOUNT bit
)
-- Order discounts first
insert into @MANUALDISCOUNTS
select
@ID,
SALESORDERITEMORDERDISCOUNT.DISCOUNTID,
isnull(SALESORDERMANUALDISCOUNT.PROMOTIONALCODE, ''),
case when (SALESORDERMANUALDISCOUNT.PROMOTIONALCODE is not null and SALESORDERMANUALDISCOUNT.PROMOTIONALCODE <> '')
then 1
else 0
end,
case when SALESORDERDISCOUNTLIMITOVERRIDE.NUMBEROFDISCOUNTSPERORDER is not null
then 1
else 0
end,
SALESORDERDISCOUNTLIMITOVERRIDE.NUMBEROFDISCOUNTSPERORDER,
SALESORDERITEMORDERDISCOUNT.ISADJUSTABLEDISCOUNT
from dbo.SALESORDERITEM
inner join dbo.SALESORDERITEMORDERDISCOUNT
on SALESORDERITEM.ID = SALESORDERITEMORDERDISCOUNT.ID
left join dbo.SALESORDERMANUALDISCOUNT
on (SALESORDERITEMORDERDISCOUNT.DISCOUNTID = SALESORDERMANUALDISCOUNT.DISCOUNTID and SALESORDERITEM.SALESORDERID = SALESORDERMANUALDISCOUNT.SALESORDERID)
left join dbo.SALESORDERDISCOUNTLIMITOVERRIDE
on (SALESORDERITEMORDERDISCOUNT.DISCOUNTID = SALESORDERDISCOUNTLIMITOVERRIDE.DISCOUNTID and SALESORDERITEM.SALESORDERID = SALESORDERDISCOUNTLIMITOVERRIDE.SALESORDERID)
where SALESORDERITEM.SALESORDERID = @CONTEXTRESERVATIONID
union all
select
@ID,
SALESORDERITEMITEMDISCOUNT.DISCOUNTID,
isnull(SALESORDERMANUALDISCOUNT.PROMOTIONALCODE, ''),
case when (SALESORDERMANUALDISCOUNT.PROMOTIONALCODE is not null and SALESORDERMANUALDISCOUNT.PROMOTIONALCODE <> '')
then 1
else 0
end,
case when SALESORDERDISCOUNTLIMITOVERRIDE.NUMBEROFDISCOUNTSPERORDER is not null
then 1
else 0
end,
SALESORDERDISCOUNTLIMITOVERRIDE.NUMBEROFDISCOUNTSPERORDER,
0
from dbo.SALESORDERITEM
inner join dbo.SALESORDERITEMITEMDISCOUNT
on SALESORDERITEM.ID = SALESORDERITEMITEMDISCOUNT.SALESORDERITEMID
left join dbo.SALESORDERMANUALDISCOUNT
on (SALESORDERITEMITEMDISCOUNT.DISCOUNTID = SALESORDERMANUALDISCOUNT.DISCOUNTID and SALESORDERITEM.SALESORDERID = SALESORDERMANUALDISCOUNT.SALESORDERID)
left join dbo.SALESORDERDISCOUNTLIMITOVERRIDE
on (SALESORDERITEMITEMDISCOUNT.DISCOUNTID = SALESORDERDISCOUNTLIMITOVERRIDE.DISCOUNTID and SALESORDERITEM.SALESORDERID = SALESORDERDISCOUNTLIMITOVERRIDE.SALESORDERID)
where SALESORDERITEM.SALESORDERID = @CONTEXTRESERVATIONID
-- get rid of all discounts already on the order
delete from @MANUALDISCOUNTS
where DISCOUNTID in
(
select
SALESORDERITEMORDERDISCOUNT.DISCOUNTID
from dbo.SALESORDERITEM
inner join dbo.SALESORDERITEMORDERDISCOUNT
on SALESORDERITEM.ID = SALESORDERITEMORDERDISCOUNT.ID
where SALESORDERITEM.SALESORDERID = @ID
and SALESORDERITEMORDERDISCOUNT.DISCOUNTID is not null
union all
select
SALESORDERITEMITEMDISCOUNT.DISCOUNTID
from dbo.SALESORDERITEM
inner join dbo.SALESORDERITEMITEMDISCOUNT
on SALESORDERITEM.ID = SALESORDERITEMITEMDISCOUNT.SALESORDERITEMID
where SALESORDERITEM.SALESORDERID = @ID
)
declare @DISCOUNTID uniqueidentifier
declare @PROMOTIONALCODE nvarchar(50)
declare @ISPROMOTIONALCODE bit
declare @ISLIMITED bit
declare @NUMBEROFDISCOUNTSPERORDER int
declare @ISADJUSTABLEDISCOUNT bit
declare DISCOUNTS_CURSOR cursor local fast_forward for
select DISCOUNTID, PROMOTIONALCODE, ISPROMOTIONALCODE, ISLIMITED, NUMBEROFDISCOUNTSPERORDER, ISADJUSTABLEDISCOUNT
from @MANUALDISCOUNTS
open DISCOUNTS_CURSOR;
fetch next from DISCOUNTS_CURSOR
into @DISCOUNTID, @PROMOTIONALCODE, @ISPROMOTIONALCODE, @ISLIMITED, @NUMBEROFDISCOUNTSPERORDER, @ISADJUSTABLEDISCOUNT;
-- apply discounts
while @@FETCH_STATUS = 0
begin
exec dbo.USP_DATAFORMTEMPLATE_ADD_DAILYSALESORDER_MANUALDISCOUNT null, @ID, @CHANGEAGENTID, @DISCOUNTID, @PROMOTIONALCODE, @ISPROMOTIONALCODE, @ISLIMITED, @NUMBEROFDISCOUNTSPERORDER, 0, @ISADJUSTABLEDISCOUNT
fetch next from DISCOUNTS_CURSOR
into @DISCOUNTID, @PROMOTIONALCODE, @ISPROMOTIONALCODE, @ISLIMITED, @NUMBEROFDISCOUNTSPERORDER, @ISADJUSTABLEDISCOUNT;
end
close DISCOUNTS_CURSOR;
deallocate DISCOUNTS_CURSOR;
end
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;