Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 4

USE [Tourpaq_Staging]

GO
/****** Object: StoredProcedure [dbo].[GetAutomaticDiscount] Script Date:
2/2/2023 11:31:14 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Gabriel Marinescu
-- Create date: 2019.05.28
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[GetAutomaticDiscount]
@companyID int,
@agencyID int,
@forSale bit,
@internetSale bit,
@bookingDate datetime,
@departureDate datetime,
@hotelRoomID int,
@transportID int,
@realTransportId int,
@period int,
@nights int,
@hotelArrivalIDs nvarchar(max),
@hotelResortID nvarchar(max),
@transportIDs nvarchar(max),
@realTransportIDs nvarchar(max),
@hotelIDs nvarchar(max),
@hotelRoomIDs nvarchar(max),
@priceTypes nvarchar(max),
@genderTypes nvarchar(max),
@discountIDs nvarchar(max),
@allowOneWay bit,
@ages nvarchar(max)
AS
BEGIN
declare @ageQuery nvarchar(MAX) = '( ' + replace(@ages, ',', N' between
Discount_Supplier_Price.StartAge AND Discount_Supplier_Price.EndAge) OR (') + N'
between Discount_Supplier_Price.StartAge AND Discount_Supplier_Price.EndAge )'

if @realTransportIDs is null or len(@realTransportIDs) = 0


begin
set @realTransportIDs = '0'
end

declare @sql nvarchar(max) = N'


SELECT
Discount_Supplier.Code,
Discount_Supplier.PlainText as [Name],
Discount_Supplier.FamilyDiscount,
Discount_Supplier.DiscountSuppID,
Discount_Supplier.Price,
Discount_Supplier.DiscountOrSupplier as DiscountOrSupplement,
Discount_Supplier.DiscSupplCategoryID as CategoryID,
Discount_Supplier.GenericService,
Discount_Supplier.LinkedToProduct as IsLinkedToProduct,
Discount_Supplier.Age,
Discount_Supplier.DoNotCombineWithOtherDiscounts,
Discount_Supplier.AvailableFirstPassenger,
Discount_Supplier.PassengersNoToApplyTo,
dsrHotelRoomIDs.SubTypeCode as HotelRoomID,
dsrHotelIDs.Code as HotelID,
dsrResourceHotelIDs.Code as ResourcesHotelID,
dsrTransportIDs.Code as ResourcesTransportID,
AvailableFirstPassengerInRoom =
Discount_Supplier.AvailableFirstPassengerInRoom,
Discount_Supplier.BkgDateStart as BookingStartDate,
Discount_Supplier.BkgDateStop as BookingEndDate,
Discount_Supplier.DateStart as DepartureStartDate,
Discount_Supplier.DateStop as DepartureEndDate,
DiscSupplCategory.BehaviorOnWeb
FROM Discount_Supplier
INNER JOIN DiscSupplCategory on Discount_Supplier.DiscSupplCategoryID =
DiscSupplCategory.DiscSupplCategoryID
INNER JOIN AgencyDiscountSupplier on
AgencyDiscountSupplier.DiscountSuppID = Discount_Supplier.DiscountSuppID and
AgencyDiscountSupplier.AgencyID = ' + cast( @agencyID as nvarchar(MAX)) + N'
LEFT JOIN Discount_Supplier_Resurser as dsrHotelRoomIDs on
dsrHotelRoomIDs.DiscountSuppID = Discount_Supplier.DiscountSuppID and
dsrHotelRoomIDs.Type = 5
LEFT JOIN Discount_Supplier_Resurser as dsrHotelIDs on
dsrHotelIDs.DiscountSuppID = Discount_Supplier.DiscountSuppID and
( dsrHotelIDs.Type = 2 or dsrHotelIDs.Type = 5 )
LEFT JOIN Discount_Supplier_Resurser as dsrResourceHotelIDs on
dsrResourceHotelIDs.DiscountSuppID = Discount_Supplier.DiscountSuppID and
dsrResourceHotelIDs.Type = 2
LEFT JOIN Discount_Supplier_Resurser as dsrTransportIDs on
dsrTransportIDs.DiscountSuppID = Discount_Supplier.DiscountSuppID and
dsrTransportIDs.Type = 3
LEFT JOIN Discount_Supplier_Resurser as dsrRealTransport on
dsrRealTransport.DiscountSuppID = Discount_Supplier.DiscountSuppID and
dsrRealTransport.Type = 4
LEFT JOIN Discount_Supplier_Resurser as dsrHotelResort on
dsrHotelResort.DiscountSuppID = Discount_Supplier.DiscountSuppID and
dsrHotelResort.Type = 1
LEFT JOIN Discount_Supplier_Resurser as dsrHotelArrival on
dsrHotelArrival.DiscountSuppID = Discount_Supplier.DiscountSuppID and
dsrHotelArrival.Type = 0

WHERE
Discount_Supplier.CompanyID = ' + cast( @companyID as nvarchar(MAX)) +
N'
and (dsrResourceHotelIDs.DiscountSuppID IS NULL
OR (
dsrResourceHotelIDs.DiscountSuppID IS NOT NULL
AND dsrResourceHotelIDs.Code in ( ' + @hotelIDs + N' ) and
dsrResourceHotelIDs.SubTypeCode IS NULL
))
and (dsrTransportIDs.DiscountSuppID IS NULL
OR (
dsrTransportIDs.DiscountSuppID IS NOT NULL
AND dsrTransportIDs.Code in ( ' + @transportIDs + N' ) and
dsrTransportIDs.SubTypeCode IS NULL
))
and (dsrRealTransport.DiscountSuppID IS NULL
OR (
dsrRealTransport.DiscountSuppID IS NOT NULL
AND dsrRealTransport.Code in ( ' + @realTransportIDs + N' )
))
and (dsrHotelResort.DiscountSuppID IS NULL
OR (
dsrHotelResort.DiscountSuppID IS NOT NULL
AND dsrHotelResort.Code in ( ' + @hotelResortID + N' )
))
and (dsrHotelArrival.DiscountSuppID IS NULL
OR (
dsrHotelArrival.DiscountSuppID IS NOT NULL
AND dsrHotelArrival.Code in ( ' + @hotelArrivalIDs + N' )
))
and (dsrHotelRoomIDs.DiscountSuppID IS NULL
OR (
dsrHotelRoomIDs.DiscountSuppID IS NOT NULL
AND dsrHotelRoomIDs.Code in ( ' + @hotelIDs + N' ) and
dsrHotelRoomIDs.SubTypeCode is null
)
OR (
dsrHotelRoomIDs.DiscountSuppID IS NOT NULL
AND dsrHotelRoomIDs.Code in ( ' + @hotelIDs + N' ) and
dsrHotelRoomIDs.SubTypeCode in ( ' + @hotelRoomIDs + N' )
)
)
and (
Discount_Supplier.PriceType is null
or Discount_Supplier.PriceType in ( ' + @priceTypes + N' )
)
and (
Discount_Supplier.Age is null or
Discount_Supplier.Age in ( ' + @genderTypes + N' )
)
and Discount_Supplier.GeneralOrSpecificate = 1
and Discount_Supplier.FixedOrManual = 0
and (Discount_Supplier.BkgDateStop is null or ''' +
convert(nvarchar(max), @bookingDate, 20) + N''' <= Discount_Supplier.BkgDateStop)
and (Discount_Supplier.BkgDateStart is null or ''' +
convert(nvarchar(max), @bookingDate, 20) + N''' >= Discount_Supplier.BkgDateStart)
and (Discount_Supplier.DateStop is null or ''' + convert(nvarchar(max),
@departureDate, 20) + N''' <= Discount_Supplier.DateStop)
and (Discount_Supplier.DateStart is null or ''' +
convert(nvarchar(max), @departureDate, 20) + N''' >= Discount_Supplier.DateStart)
and (Discount_Supplier.RoomType is null or ' + cast(@hotelRoomID as
nvarchar(MAX)) + N' = Discount_Supplier.RoomType)
and (Discount_Supplier.Transport is null or Discount_Supplier.Transport
= ' + cast(@transportID as nvarchar(MAX)) + N')
and (Discount_Supplier.PeriodOrTripLenght is null or
Discount_Supplier.PeriodOrTripLenght = 0 or Discount_Supplier.PeriodOrTripLenght =
' + cast(@period as nvarchar(MAX)) + N')
and (Discount_Supplier.MinimumLength is null or
Discount_Supplier.MinimumLength <= ' + cast(@nights as nvarchar(MAX)) + N')
and (Discount_Supplier.MaximumLength is null or
Discount_Supplier.MaximumLength >= ' + cast(@nights as nvarchar(MAX)) + N')
and (
Discount_Supplier.LinkedToProduct = 1
OR not exists(select top 1 1 from Discount_Supplier_Price where
Discount_Supplier_Price.DiscountSuppID = Discount_Supplier.DiscountSuppID)
OR exists(select top 1 1
from Discount_Supplier_Price
where
Discount_Supplier_Price.DiscountSuppID =
Discount_Supplier.DiscountSuppID
and ''' + convert(nvarchar(max), @departureDate, 20) + N'''
>= Discount_Supplier_Price.PeriodStart
and ''' + convert(nvarchar(max), @departureDate, 20) + N'''
<= Discount_Supplier_Price.PeriodStop
and ''' + convert(nvarchar(max), @bookingDate, 20) + N'''
>= Discount_Supplier_Price.BookingStartDate
and ''' + convert(nvarchar(max), @bookingDate, 20) + N'''
<= Discount_Supplier_Price.BookingStopDate
and (' + @ageQuery + N' )
)
)
'

if @discountIDs is not null and len(@discountIDs) > 0


begin
set @sql += N' AND Discount_Supplier.DiscountSuppID in ( ' +
@discountIDs + N' ) '
end

if @internetSale = 1
begin
set @sql += N' AND AgencyDiscountSupplier.InternetSale = 1 '
end
if @forSale = 1
begin
set @sql += N' AND AgencyDiscountSupplier.ForSale = 1 '
end

if @allowOneWay = 0
begin
set @sql += N' AND (discount_supplier.allowononeway is null or
discount_supplier.allowononeway = 0) '
end

if @allowOneWay = 1
begin
set @sql += N' AND Discount_Supplier.AllowOnOneWay = 1 '
end

execute sp_executesql @sql

select @sql
END

You might also like