Facebook
From Rikesh Mahat, 2 Weeks ago, written in SQL.
Embed
Download Paste or View Raw
Hits: 123
  1. --SP to create bookings.
  2. / We will need TO pass customerId, roomIds OR room numbers WITH DATE range AND this should mark those rooms AS occupied FOR those days. /
  3.  
  4. -- FIRST CREATE A SP TO UPDATE THE ROOM STATUS
  5. CREATE PROCEDURE SpRoomStatusUpdate
  6. @RoomId INT
  7. AS
  8. BEGIN
  9.  SET NOCOUNT ON
  10.  UPDATE Room SET RoomStatus = 'Occupied' WHERE RoomId = @RoomId;
  11.  
  12.  PRINT 'updated room status for Room Id ' + CAST(@RoomId AS VARCHAR)
  13. END
  14.  
  15. -- CREATE A SP TO CHECK FOR ROOM AVAILABILITY
  16. CREATE PROCEDURE SpRoomStatusCheck
  17. @RoomId INT,
  18. @RoomStatus NVARCHAR(50) OUTPUT
  19. AS
  20. BEGIN
  21.  SELECT @RoomStatus = RoomStatus FROM Room WHERE RoomId = @RoomId;
  22. END
  23.  
  24. -- CHECK IF THE TRANSACTION EXIST FOR THE CUSTOMER
  25.  
  26. ALTER PROCEDURE SpTransactionCustomerCheck
  27.     @CustomerId INT,
  28.     @NewCustomerId VARCHAR(50) OUTPUT,
  29.  @TransactionId INT OUTPUT
  30. AS
  31. BEGIN
  32.     SELECT @NewCustomerId = 'Exists', @TransactionId = TransactionId FROM [TRANSACTION] WHERE CustomerId = @CustomerId;
  33. END
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41. -- Corrected Room Booking Procedure
  42. CREATE PROCEDURE SpRoomBookingTsk
  43.     @RoomId INT,
  44.     @RentingDays INT,
  45.     @BookingTransactionId INT OUTPUT,
  46.     @PaidAmount MONEY,
  47.     @TransactionType VARCHAR(20),
  48.     @BranchId INT,
  49.     @CustomerId INT
  50. AS
  51. BEGIN
  52.     -- FIRST CHECK IF THE ROOM IS AVAILABLE
  53.     DECLARE @NewRoomStatus VARCHAR(50);
  54.     EXEC SpRoomStatusCheck @RoomId, @RoomStatus = @NewRoomStatus OUTPUT; -- Corrected the stored procedure call
  55.  
  56.     -- IF THE ROOM IS ALREADY BOOKED
  57.     IF @NewRoomStatus = 'Occupied'
  58.     BEGIN
  59.         PRINT 'The room is already booked';
  60.     END
  61.     -- IF THE ROOM ISN'T ALREADY BOOKED
  62.     ELSE
  63.     BEGIN
  64.         BEGIN TRANSACTION
  65.         BEGIN TRY
  66.             -- VARIABLE TO STORE CHECKIN DATE + CHECKOUT DATE
  67.             -- CHECKIN DATE
  68.             DECLARE @CheckInDate VARCHAR(50);
  69.             SET @CheckInDate = GETDATE();
  70.            
  71.             -- CHECKOUT DATE
  72.             DECLARE @CheckoutDate VARCHAR(50);
  73.             SET @CheckoutDate = DATEADD(MONTH, @RentingDays, @CheckInDate);
  74.            
  75.             -- VARIABLE TO GET PRICE FROM ROOM
  76.             DECLARE @RoomPrice MONEY;
  77.             SELECT @RoomPrice = Price FROM Room WHERE RoomId = @RoomId;
  78.  
  79.    DECLARE @DueAmount MONEY;
  80.    SET @DueAmount = @RoomPrice - @PaidAmount;
  81.  
  82.    DECLARE @STATUS VARCHAR(50);
  83.    IF @DueAmount > 0
  84.     SET @STATUS = 'Pending'
  85.    ELSE
  86.     SET @STATUS = 'Paid'
  87.            
  88.             -- UPDATE THE ROOM STATUS AS BOOKED
  89.             EXEC SpRoomStatusUpdate @RoomId; -- Corrected the stored procedure name
  90.  
  91.             DECLARE @CustomerTrans VARCHAR(50);
  92.             DECLARE @ExistingTransactionId INT;
  93.             EXEC SpTransactionCustomerCheck @CustomerId, @NewCustomerId = @CustomerTrans OUTPUT, @TransactionId = @ExistingTransactionId OUTPUT;
  94.  
  95.             IF @CustomerTrans = 'Exists'
  96.             BEGIN
  97.                 DECLARE @NewBookingTransactionId INT;
  98.                 EXEC SpInsertBookingTransaction
  99.                     @TransactionId = @ExistingTransactionId,
  100.                     @RoomId = @RoomId,
  101.                     @SubTotal = @RoomPrice,
  102.                     @CheckIn = @CheckInDate,
  103.                     @CheckOut = @CheckoutDate,
  104.                     @CreatedDate = @CheckInDate,
  105.                     @UpdatedDate = @CheckInDate,
  106.                     @PersonUser = 123,
  107.                     @BookingTransactionId = @NewBookingTransactionId OUTPUT; -- Corrected the output parameter
  108.             END
  109.             ELSE
  110.             BEGIN
  111.                 DECLARE @NewTransactionId INT;
  112.                 EXEC SpInsertTransaction
  113.                     @Amount = @RoomPrice,
  114.                     @PaidAmount = @PaidAmount,
  115.                     @DueAmount = @DueAmount,
  116.                     @TransactionDate = @CheckInDate,
  117.                     @STATUS = @STATUS,
  118.                     @TransactionType = @TransactionType,
  119.                     @BranchId = @BranchId,
  120.                     @CustomerId = @CustomerId,
  121.                     @UpdatedDate = @CheckoutDate, -- Corrected the parameter name
  122.                     @PersonUser = 1,
  123.                     @TransactionId = @NewTransactionId OUTPUT;
  124.  
  125.                 DECLARE @CurrentBookingTransactionId INT;
  126.                 EXEC SpInsertBookingTransaction
  127.                     @TransactionId = @NewTransactionId,
  128.                     @RoomId = @RoomId,
  129.                     @SubTotal = @RoomPrice,
  130.                     @CheckIn = @CheckInDate,
  131.                     @CheckOut = @CheckoutDate,
  132.                     @CreatedDate = @CheckInDate,
  133.                     @UpdatedDate = @CheckoutDate,
  134.                     @PersonUser = 1,
  135.                     @BookingTransactionId = @CurrentBookingTransactionId OUTPUT;
  136.             END
  137.         END TRY
  138.         BEGIN CATCH
  139.             ROLLBACK TRANSACTION
  140.         END CATCH
  141.         COMMIT TRANSACTION
  142.     END
  143. END
  144.  
  145.  
  146.  
  147. DECLARE @VeryNewBookingTransactionId INT;
  148.  
  149.  
  150.  
  151. EXEC SpRoomBookingTsk
  152.     @RoomId = 4,
  153.     @RentingDays = 4,
  154.     @BookingTransactionId = @VeryNewBookingTransactionId OUTPUT,
  155.     @PaidAmount = 120,
  156.     @TransactionType = 'Cash',
  157.     @BranchId = 1,
  158.     @CustomerId = 3;