IF (EXISTS(Select * from sys.sysprocedure where LCase(proc_name) = LCase('FillArticleLodgings'))) THEN Drop procedure FillArticleLodgings END IF GO create procedure DBA.FillArticleLodgings(in @RegNo integer,in @PackagePrice numeric(12,2),in @FillAll integer,in @place varchar(50)) begin declare @Price numeric(12,4); declare @ArticlePrice numeric(12,4); declare @KodCurrency integer; declare @NachinPlat integer; declare @ServiceNoLodging integer; declare @NumDays integer; declare @DateReg date; declare @TipDDS integer; declare @RoomNo integer; declare @RoomName varchar(6); declare @IsRest integer; declare @ArticleName varchar(100); declare @ServiceName varchar(40); declare @DateStart date; declare @MDays integer; declare @SeasonN integer; declare @ZInd integer; set @ZInd=1; delete from #ArticleLodgings; select B.Price,B.KodCurrency,B.Room,PK.NachinPlat,isNull(PK.ServiceNo,-1),B.NumLodgings-B.PayedLodgings,dateadd(day,B.PayedLodgings,B.DateRegDt),B.IsRest into @Price, @KodCurrency,@RoomNo,@NachinPlat,@ServiceNoLodging,@NumDays,@DateReg, @IsRest from Book as B,PriceKinds as PK where B.RegNum = @RegNo and B.PriceKind = PK.PriceKind; if(@NumDays > 0) then if @ServiceNoLodging = 0 then set @ServiceNoLodging=-1 end if; select(ExchangeRate*@Price) into @ArticlePrice from Currencies where KodCurrency = @KodCurrency; select ServiceName into @ServiceName from Services where ServiceNo = @ServiceNoLodging; select V.TipDDS into @TipDDS from Services as S,VidSdelki as V where S.ServiceNo = @ServiceNoLodging and S.TipSdelka = V.N; if @TipDDS = 2 then set @ArticlePrice=@ArticlePrice*(bvrDDSPart+1); //ako dds-to e vkliucheno v cenata set @TipDDS=1 end if; set @ArticlePrice=@ArticlePrice-@PackagePrice; if @TipDDS = 1 then set @ArticlePrice=@ArticlePrice/(bvrDDSPart+1); //ako dds-to ne e vkliucheno v cenata set @TipDDS=2 end if; set @RoomName=(select RoomName from Rooms where RoomNum = @RoomNo); if @NachinPlat = 0 then if @IsRest = 1 then set @ArticleName='Почивка ' || @place || @RoomName+' за '+dateformat(@DateReg,'dd.mm') end if; //else Dobrin 2612 - po-dolu shte setna @ArticleName, ako ne e pochivka //set @ArticleName=@ServiceName || ' ' || @place || @RoomName+' от '+dateformat(@DateReg,'dd.mm')+' до '+dateformat(dateadd(day,@NumDays,@DateReg),'Dd.Mm') --Dobrin 2612 + Za da se syobrazqva sys zapisite ot PriceSeasonPeriods - shte e syshtoto kato po-dolu, no malko po-prostichko if @IsRest <> 1 then set @DateStart=@DateReg; while(@NumDays > 0) loop set @ArticleName=@ServiceName || ' ' || @place || @RoomName || ' от ' || dateformat(@DateStart,'dd.mm.yyyy') || ' до '; call GetDataForDateSeasonPeriods(@DateStart,@SeasonN,@MDays,@DateStart,@NumDays); if @MDays < @NumDays then set @NumDays=@NumDays-@MDays; set @ArticleName=@ArticleName || dateformat(dateadd(day,-1,@DateStart),'dd.mm.yyyy') else set @ArticleName=@ArticleName || dateformat(dateadd(day,-1,dateadd(day,@NumDays-@MDays,@DateStart)),'dd.mm.yyyy'); set @MDays=@NumDays; set @NumDays=0 end if; select V.TipDDS into @TipDDS from Services as S,VidSdelki as V where S.ServiceNo = @ServiceNoLodging and S.TipSdelka = V.N; set @ArticlePrice=GetRentPriceForDate(@RegNo,null,@SeasonN); if @TipDDS = 2 then set @ArticlePrice=@ArticlePrice*(bvrDDSPart+1); //ako dds-to e vkliucheno v cenata set @TipDDS=1 end if; set @ArticlePrice=@ArticlePrice-@PackagePrice; if @TipDDS = 1 then set @ArticlePrice=@ArticlePrice/(bvrDDSPart+1); //ako dds-to ne e vkliucheno v cenata set @TipDDS=2 end if; insert into #ArticleLodgings( RegNum,Name,RealLodgingsNum,Price,Qty,MaxQty,MinQty,ZIndex,TipDDS) values( @RegNo,@ArticleName,@MDays,@ArticlePrice,@MDays,@MDays,0,@ZInd,@TipDDS) ; set @ZInd=@ZInd+1 end loop else insert into #ArticleLodgings( RegNum,Name,RealLodgingsNum,Price,Qty,MaxQty,MinQty,ZIndex,TipDDS) values( @RegNo,@ArticleName,0,@ArticlePrice,@NumDays,@NumDays,0,0,@TipDDS) end if else --Dobrin 2612 - // @NachinPlat =1 // vurti cikul mesec po mesec i populva tablicata za vseki mesec set @DateStart=@DateReg; while(@NumDays > 0) loop select FillSingleArticleLodging(@RegNo,@DateStart,@NumDays,@ArticlePrice,@PackagePrice,@ServiceName,@FillAll,@TipDDS,@place) into @MDays; set @DateStart=dateadd(day,@NumDays-@MDays,@DateStart); set @NumDays=@MDays end loop end if; // @NachinPlat=1 update #ArticleLodgings set ServiceNoLodging = @ServiceNoLodging where ServiceNoLodging is null end if // @NumDays > 0 end --[04.09.2009] Dobrin 2612 - cenovite sezoni da okazvat vliqnie i kogato cenorazpisa ne e za mesec --[30.09.2009] Dobrin 2672 - da sloji ZIndex kogato se razdelq na cenovi sezoni za noshtuvka, za da moje da se podrejdat posle artikulite kato svqt go