From ef87ca606c565112f6e6f1729f42238be8beb19a Mon Sep 17 00:00:00 2001 From: mohammedThaqi Date: Mon, 8 Apr 2024 10:21:57 +0530 Subject: [PATCH] confirmSlot&ApplicationLogs_added --- .../controller/TestController.java | 27 +- .../communityHall/entity/ApplicationLogs.java | 81 +++++- .../communityHall/entity/BookingCalendar.java | 83 +++++- .../communityHall/entity/BookingHistory.java | 48 ++++ .../gcc/communityHall/entity/EbDetails.java | 63 +++++ .../gcc/communityHall/entity/HallDetails.java | 13 + .../controller/PaymentController.java | 47 +--- .../service/PaymentGatewayServiceImpl.java | 5 - .../repository/ApplicationLogsRepository.java | 9 + .../repository/BookingCalendarRepository.java | 8 + .../service/ApplicationLogService.java | 5 + .../communityHall/service/BookingService.java | 11 +- .../Impl/ApplicationLogServiceImpl.java | 23 ++ .../service/Impl/BookingServiceImpl.java | 242 +++++++++++++++++- 14 files changed, 588 insertions(+), 77 deletions(-) create mode 100644 src/main/java/com/gcc/communityHall/repository/ApplicationLogsRepository.java create mode 100644 src/main/java/com/gcc/communityHall/service/ApplicationLogService.java create mode 100644 src/main/java/com/gcc/communityHall/service/Impl/ApplicationLogServiceImpl.java diff --git a/src/main/java/com/gcc/communityHall/controller/TestController.java b/src/main/java/com/gcc/communityHall/controller/TestController.java index 81411a8..33c47f0 100644 --- a/src/main/java/com/gcc/communityHall/controller/TestController.java +++ b/src/main/java/com/gcc/communityHall/controller/TestController.java @@ -1,8 +1,6 @@ package com.gcc.communityHall.controller; -import com.gcc.communityHall.entity.HallDetails; -import com.gcc.communityHall.entity.ReasonMaster; -import com.gcc.communityHall.entity.Users; +import com.gcc.communityHall.entity.*; import com.gcc.communityHall.others.UserSession; import com.gcc.communityHall.service.Impl.BookingServiceImpl; import com.gcc.communityHall.service.Impl.HallDetailServiceImpl; @@ -161,6 +159,28 @@ public ResponseEntity saveTheBookingDetails(HttpServletRequest request) { return ResponseEntity.ok(bookingService.getBookingsById(bookingId)); } + @GetMapping("/updateBookingStatusById") + private ResponseEntity updateBookingStatusById(@RequestParam int bookingId, + @RequestParam BookingDetails.BookingStatus status, + @RequestParam String comments){ + + return ResponseEntity.ok(bookingService.updateBookingStatusById(bookingId,status,comments)); + } + @GetMapping("/updateEbDetailsByBookingId") + private ResponseEntity updateEbDetailsByBookingId(@RequestParam int bookingId, + @RequestParam(required = false) double startUnit, + @RequestParam(required = false) double endUnit, + @RequestParam char status ){ + EbDetails ed =bookingService.updateEbDetails(bookingId,startUnit,endUnit,status); + return ResponseEntity.ok(ed); + } + + @GetMapping("/confirmSlot") + public ResponseEntity getBookingSlotById(@RequestParam int bookingId){ + return ResponseEntity.ok(bookingService.confirmBooking(bookingId)); + } + + public Map splitFormData(MultipartHttpServletRequest multipartRequest){ Map formData = new HashMap<>(); @@ -188,5 +208,4 @@ public ResponseEntity saveTheBookingDetails(HttpServletRequest request) { } - } diff --git a/src/main/java/com/gcc/communityHall/entity/ApplicationLogs.java b/src/main/java/com/gcc/communityHall/entity/ApplicationLogs.java index 830f20d..e2649b6 100644 --- a/src/main/java/com/gcc/communityHall/entity/ApplicationLogs.java +++ b/src/main/java/com/gcc/communityHall/entity/ApplicationLogs.java @@ -1,23 +1,94 @@ package com.gcc.communityHall.entity; -import jakarta.persistence.Column; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.gcc.communityHall.others.UserSession; +import jakarta.persistence.*; +import org.springframework.beans.factory.annotation.Autowired; import java.util.Date; +@Entity public class ApplicationLogs { + + @Autowired + @Transient + private UserSession userSession; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long logId; private String logType; private int bookingId; - private int loginId; + private int loginId = userSession.getUserId(); private String comments; @Column(name = "cdate",nullable = false, columnDefinition = "DATETIME DEFAULT CURRENT_TIMESTAMP") private Date cdate = new Date(); + + + public Long getLogId() { + return logId; + } + + public void setLogId(Long logId) { + this.logId = logId; + } + + public String getLogType() { + return logType; + } + + public void setLogType(String logType) { + this.logType = logType; + } + + public int getBookingId() { + return bookingId; + } + + public void setBookingId(int bookingId) { + this.bookingId = bookingId; + } + + public int getLoginId() { + return loginId; + } + + public void setLoginId(int loginId) { + this.loginId = loginId; + } + + public String getComments() { + return comments; + } + + public void setComments(String comments) { + this.comments = comments; + } + + public Date getCdate() { + return cdate; + } + + public void setCdate(Date cdate) { + this.cdate = cdate; + } + + + public enum logsOfMsg{ + SENDING_SMS,USER_CANCELLED_BOOKING,USER_INVALID,PAYMENT_STARTED,PAYMENT_COMPLETED,PAYMENT,FAILURE, + GCC_REJECTED,GCC_BLOCKED_DATE + }; + + @Transient + private ApplicationLogs.logsOfMsg logsOfMsg; + + public ApplicationLogs.logsOfMsg getLogsOfMsg() { + return logsOfMsg; + } + + public void setLogsOfMsg(ApplicationLogs.logsOfMsg logsOfMsg) { + this.logsOfMsg = logsOfMsg; + } } diff --git a/src/main/java/com/gcc/communityHall/entity/BookingCalendar.java b/src/main/java/com/gcc/communityHall/entity/BookingCalendar.java index 76bfaf1..e0df259 100644 --- a/src/main/java/com/gcc/communityHall/entity/BookingCalendar.java +++ b/src/main/java/com/gcc/communityHall/entity/BookingCalendar.java @@ -2,7 +2,8 @@ package com.gcc.communityHall.entity; import jakarta.persistence.*; -import java.util.Date; +import java.time.LocalDate; + @Entity public class BookingCalendar { @@ -10,7 +11,7 @@ public class BookingCalendar { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; - private Date date; + private LocalDate bdate; private boolean morningSlot; private boolean eveningSlot; private String bookingId_1; @@ -22,5 +23,83 @@ public class BookingCalendar { private int hallId; + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public LocalDate getBdate() { + return bdate; + } + + public void setBdate(LocalDate bdate) { + this.bdate = bdate; + } + + public boolean isMorningSlot() { + return morningSlot; + } + + public void setMorningSlot(boolean morningSlot) { + this.morningSlot = morningSlot; + } + + public boolean isEveningSlot() { + return eveningSlot; + } + + public void setEveningSlot(boolean eveningSlot) { + this.eveningSlot = eveningSlot; + } + + public String getBookingId_1() { + return bookingId_1; + } + + public void setBookingId_1(String bookingId_1) { + this.bookingId_1 = bookingId_1; + } + + public String getBookingId_2() { + return bookingId_2; + } + + public void setBookingId_2(String bookingId_2) { + this.bookingId_2 = bookingId_2; + } + + public boolean isIs_active() { + return is_active; + } + + public void setIs_active(boolean is_active) { + this.is_active = is_active; + } + + public boolean isIs_delete() { + return is_delete; + } + + public void setIs_delete(boolean is_delete) { + this.is_delete = is_delete; + } + + public int getIs_booked() { + return is_booked; + } + + public void setIs_booked(int is_booked) { + this.is_booked = is_booked; + } + + public int getHallId() { + return hallId; + } + public void setHallId(int hallId) { + this.hallId = hallId; + } } diff --git a/src/main/java/com/gcc/communityHall/entity/BookingHistory.java b/src/main/java/com/gcc/communityHall/entity/BookingHistory.java index e59cc3c..cc2e289 100644 --- a/src/main/java/com/gcc/communityHall/entity/BookingHistory.java +++ b/src/main/java/com/gcc/communityHall/entity/BookingHistory.java @@ -23,4 +23,52 @@ public class BookingHistory { private String updatedBy; @ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.EAGER) private BookingDetails bookingDetails; + + public int getHistoryId() { + return HistoryId; + } + + public void setHistoryId(int historyId) { + HistoryId = historyId; + } + + public Date getCdate() { + return cdate; + } + + public void setCdate(Date cdate) { + this.cdate = cdate; + } + + public BookingDetails.BookingStatus getBookingStatus() { + return bookingStatus; + } + + public void setBookingStatus(BookingDetails.BookingStatus bookingStatus) { + this.bookingStatus = bookingStatus; + } + + public String getComments() { + return comments; + } + + public void setComments(String comments) { + this.comments = comments; + } + + public String getUpdatedBy() { + return updatedBy; + } + + public void setUpdatedBy(String updatedBy) { + this.updatedBy = updatedBy; + } + + public BookingDetails getBookingDetails() { + return bookingDetails; + } + + public void setBookingDetails(BookingDetails bookingDetails) { + this.bookingDetails = bookingDetails; + } } diff --git a/src/main/java/com/gcc/communityHall/entity/EbDetails.java b/src/main/java/com/gcc/communityHall/entity/EbDetails.java index 58dec0e..50c73a3 100644 --- a/src/main/java/com/gcc/communityHall/entity/EbDetails.java +++ b/src/main/java/com/gcc/communityHall/entity/EbDetails.java @@ -1,5 +1,6 @@ package com.gcc.communityHall.entity; +import com.fasterxml.jackson.annotation.JsonIgnore; import jakarta.persistence.*; import java.util.Date; @@ -12,6 +13,7 @@ public class EbDetails { private int ebId; @OneToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY) + @JsonIgnore private BookingDetails bookingDetails; private double startingReading; @@ -22,6 +24,67 @@ public class EbDetails { private Date cdate; private Date updatedDate; + public int getEbId() { + return ebId; + } + public void setEbId(int ebId) { + this.ebId = ebId; + } + public BookingDetails getBookingDetails() { + return bookingDetails; + } + + public void setBookingDetails(BookingDetails bookingDetails) { + this.bookingDetails = bookingDetails; + } + + public double getStartingReading() { + return startingReading; + } + + public void setStartingReading(double startingReading) { + this.startingReading = startingReading; + } + + public double getEndingReading() { + return endingReading; + } + + public void setEndingReading(double endingReading) { + this.endingReading = endingReading; + } + + public float getUsedUnit() { + return usedUnit; + } + + public void setUsedUnit(float usedUnit) { + this.usedUnit = usedUnit; + } + + public double getEbAmount() { + return ebAmount; + } + + public void setEbAmount(double ebAmount) { + this.ebAmount = ebAmount; + } + + public Date getCdate() { + return cdate; + } + + public void setCdate(Date cdate) { + this.cdate = cdate; + } + + public Date getUpdatedDate() { + return updatedDate; + } + + public void setUpdatedDate(Date updatedDate) { + this.updatedDate = updatedDate; + } } diff --git a/src/main/java/com/gcc/communityHall/entity/HallDetails.java b/src/main/java/com/gcc/communityHall/entity/HallDetails.java index df4a363..1c7999e 100644 --- a/src/main/java/com/gcc/communityHall/entity/HallDetails.java +++ b/src/main/java/com/gcc/communityHall/entity/HallDetails.java @@ -65,6 +65,7 @@ public class HallDetails { @Column(name="update_date") private Date updatedDate = new Date(); private String ebNumber; + private float ebCostPerUnit; private String city; public int getHallId() { @@ -282,4 +283,16 @@ public class HallDetails { public void setCity(String city) { this.city = city; } + + public void setLandMark(String landMark) { + this.landMark = landMark; + } + + public float getEbCostPerUnit() { + return ebCostPerUnit; + } + + public void setEbCostPerUnit(float ebCostPerUnit) { + this.ebCostPerUnit = ebCostPerUnit; + } } diff --git a/src/main/java/com/gcc/communityHall/paymentService/controller/PaymentController.java b/src/main/java/com/gcc/communityHall/paymentService/controller/PaymentController.java index ade5c88..b88ff1a 100644 --- a/src/main/java/com/gcc/communityHall/paymentService/controller/PaymentController.java +++ b/src/main/java/com/gcc/communityHall/paymentService/controller/PaymentController.java @@ -77,52 +77,7 @@ public class PaymentController { response.setResponse(msg); response.setStatusCode(res[0]); if(paymentService.generateToken(c).equals(confirmToken) && status.equals(res[0])){ - int bookingId = response.getBookingId(); - - System.out.println("payment confirmed for booking Id:-"+bookingId); - //set logic here after payment confirmation.. - BookingDetails bookingsById = bookser.getBookingsById(bookingId); - - - int fromStartingSlot =0; - int fromEndingSlot=0; - int toStartingSlot =0; - int toEndingSlot =0; - int startingSlot = bookingsById.getStartingSlot(); - int endingSlot = bookingsById.getEndingSlot(); - int noOfDays = bookingsById.getNoOfDays(); - if(startingSlot ==1 && endingSlot ==2 && noOfDays==1){ - fromStartingSlot =1; - fromEndingSlot=1; - } - else if(startingSlot ==1 && endingSlot ==1 && noOfDays==1){ - fromStartingSlot=1; - }else if( startingSlot ==2 && endingSlot ==2 && noOfDays==1){ - fromEndingSlot=1; - }else if(noOfDays>1 && startingSlot ==1 && endingSlot ==2 ){ - fromStartingSlot =1; - fromEndingSlot=1; - toStartingSlot =1; - toEndingSlot =1; - }else if(noOfDays>1 && startingSlot ==1 && endingSlot==1){ - fromStartingSlot=1; - fromEndingSlot=1; - toStartingSlot =1; - } - else if(noOfDays>1 && startingSlot ==2 && endingSlot==1){ - fromEndingSlot=1; - toStartingSlot =1; - } - else if(noOfDays>1 && startingSlot ==2 && endingSlot==2){ - fromEndingSlot=1; - toStartingSlot =1; - toEndingSlot =1; - } - - String bookingStatus=bookser.confirmTheDateAndSlot(bookingsById.getStartDate(), bookingsById.getEndDate(), noOfDays, fromStartingSlot, fromEndingSlot, toStartingSlot, toEndingSlot, bookingsById.getBookingId(),bookingsById.getUsers().getUserId()); - System.out.println("booking Status ="+bookingStatus); - System.out.println(response.getId()); - System.out.println(response.toString()); + bookser.confirmBooking(response.getBookingId()); } System.out.println(response.toString()); diff --git a/src/main/java/com/gcc/communityHall/paymentService/service/PaymentGatewayServiceImpl.java b/src/main/java/com/gcc/communityHall/paymentService/service/PaymentGatewayServiceImpl.java index 7afd7ca..e7e58f3 100644 --- a/src/main/java/com/gcc/communityHall/paymentService/service/PaymentGatewayServiceImpl.java +++ b/src/main/java/com/gcc/communityHall/paymentService/service/PaymentGatewayServiceImpl.java @@ -212,11 +212,6 @@ public class PaymentGatewayServiceImpl implements PaymentGatewayService { TransactionRefundResponse myObject = objectMapper.readValue(decryptHxTRefund, TransactionRefundResponse.class); System.out.println(myObject.toString()); -// if(myObject.getPaymentMethod().getPaymentTransaction().getStatusCode().equals(this.paymentConfig.getRefundSuccessCode())) { -// System.out.println("Refund Process complete........"+bookingId); -// recordRefundResponse.setAmount(myObject.getPaymentMethod().getPaymentTransaction().getAmount()); -// recordRefundResponse.setBalaceAmount(myObject.getPaymentMethod().getPaymentTransaction().getBalanceAmount()); -// } recordRefundResponse.setStatusCode(myObject.getPaymentMethod().getPaymentTransaction().getStatusCode()); recordRefundResponse.setTxansactionId(myObject.getMerchantTransactionIdentifier()); if(myObject.getPaymentMethod().getPaymentTransaction().getStatusCode().equals(this.paymentConfig.getRefundSuccessCode())) { diff --git a/src/main/java/com/gcc/communityHall/repository/ApplicationLogsRepository.java b/src/main/java/com/gcc/communityHall/repository/ApplicationLogsRepository.java new file mode 100644 index 0000000..20ce55a --- /dev/null +++ b/src/main/java/com/gcc/communityHall/repository/ApplicationLogsRepository.java @@ -0,0 +1,9 @@ +package com.gcc.communityHall.repository; + +import com.gcc.communityHall.entity.ApplicationLogs; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface ApplicationLogsRepository extends JpaRepository { +} diff --git a/src/main/java/com/gcc/communityHall/repository/BookingCalendarRepository.java b/src/main/java/com/gcc/communityHall/repository/BookingCalendarRepository.java index bd9d007..28a6035 100644 --- a/src/main/java/com/gcc/communityHall/repository/BookingCalendarRepository.java +++ b/src/main/java/com/gcc/communityHall/repository/BookingCalendarRepository.java @@ -2,8 +2,16 @@ package com.gcc.communityHall.repository; import com.gcc.communityHall.entity.BookingCalendar; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; +import java.time.LocalDate; + @Repository public interface BookingCalendarRepository extends JpaRepository { + + BookingCalendar findByBdateAndHallId(LocalDate bdate, int hallId); + + } + diff --git a/src/main/java/com/gcc/communityHall/service/ApplicationLogService.java b/src/main/java/com/gcc/communityHall/service/ApplicationLogService.java new file mode 100644 index 0000000..ab956af --- /dev/null +++ b/src/main/java/com/gcc/communityHall/service/ApplicationLogService.java @@ -0,0 +1,5 @@ +package com.gcc.communityHall.service; + +public interface ApplicationLogService { + void saveLog(int bookingId,String logType,String comments); +} diff --git a/src/main/java/com/gcc/communityHall/service/BookingService.java b/src/main/java/com/gcc/communityHall/service/BookingService.java index b79ea76..4045bb8 100644 --- a/src/main/java/com/gcc/communityHall/service/BookingService.java +++ b/src/main/java/com/gcc/communityHall/service/BookingService.java @@ -1,14 +1,21 @@ package com.gcc.communityHall.service; +import com.gcc.communityHall.entity.BookingCalendar; import com.gcc.communityHall.entity.BookingDetails; +import com.gcc.communityHall.entity.EbDetails; +import org.springframework.web.bind.annotation.RequestParam; import java.util.Map; public interface BookingService { BookingDetails getBookingsById(int BookingId); BookingDetails updateBookingHistory(BookingDetails bd); - public String confirmTheDateAndSlot(String fromDate, String toDate, int days, int fromStartingSlot, int fromEndingSlot, int toStartingSlot, int toEndingSlot, int bookingId,int userId); - public String saveBookingDetails(Map formData); + public BookingDetails updateBookingStatusById( int bookingId, BookingDetails.BookingStatus status,String comments); + public EbDetails updateEbDetails(int bookingId,double startUnit,double endUnit,char status); + + //typeOfCancel depends { } + String cancelBooking(int bookingId,BookingDetails.BookingStatus currentStatus,String comments); + } diff --git a/src/main/java/com/gcc/communityHall/service/Impl/ApplicationLogServiceImpl.java b/src/main/java/com/gcc/communityHall/service/Impl/ApplicationLogServiceImpl.java new file mode 100644 index 0000000..2c0fee5 --- /dev/null +++ b/src/main/java/com/gcc/communityHall/service/Impl/ApplicationLogServiceImpl.java @@ -0,0 +1,23 @@ +package com.gcc.communityHall.service.Impl; + +import com.gcc.communityHall.entity.ApplicationLogs; +import com.gcc.communityHall.repository.ApplicationLogsRepository; +import com.gcc.communityHall.service.ApplicationLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class ApplicationLogServiceImpl implements ApplicationLogService { + + @Autowired + private ApplicationLogsRepository applicationLogsRepository; + @Override + public void saveLog(int bookingId, String logType, String comments) { + ApplicationLogs applicationLogs = new ApplicationLogs(); + applicationLogs.setBookingId(bookingId); + applicationLogs.setLogType(logType); + applicationLogs.setComments(comments); + applicationLogsRepository.save(applicationLogs); + + } +} diff --git a/src/main/java/com/gcc/communityHall/service/Impl/BookingServiceImpl.java b/src/main/java/com/gcc/communityHall/service/Impl/BookingServiceImpl.java index babbc84..3cc9181 100644 --- a/src/main/java/com/gcc/communityHall/service/Impl/BookingServiceImpl.java +++ b/src/main/java/com/gcc/communityHall/service/Impl/BookingServiceImpl.java @@ -2,23 +2,23 @@ package com.gcc.communityHall.service.Impl; import com.gcc.communityHall.entity.*; import com.gcc.communityHall.others.UserSession; -import com.gcc.communityHall.repository.BookingDetailsRepository; -import com.gcc.communityHall.repository.BookingDocumentsRepository; -import com.gcc.communityHall.repository.ReasonDocMasterRepository; -import com.gcc.communityHall.service.BookingService; -import com.gcc.communityHall.service.HallDetailService; -import com.gcc.communityHall.service.ReasonMasterService; -import com.gcc.communityHall.service.UserService; +import com.gcc.communityHall.paymentService.service.PaymentGatewayServiceImpl; +import com.gcc.communityHall.repository.*; +import com.gcc.communityHall.service.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.TransactionStatus; +import org.springframework.transaction.support.DefaultTransactionDefinition; + import java.io.FileOutputStream; +import java.text.SimpleDateFormat; import java.time.LocalDate; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.time.format.DateTimeFormatter; +import java.util.*; @Service public class BookingServiceImpl implements BookingService { @@ -28,11 +28,24 @@ public class BookingServiceImpl implements BookingService { @Autowired private BookingDocumentsRepository bookingDocumentsRepository; + @Autowired + private BookingHistoryRepository bookingHistoryRepository; + + @Autowired + private BookingCalendarRepository bookingCalendarRepository; + + @Autowired + private EbDetailsRepository ebDetailsRepository; + + @Autowired + private ApplicationLogService applicationLogService; @Autowired private ReasonMasterService reasonMasterService; @Autowired private HallDetailService hallDetailService; + @Autowired + private PaymentGatewayServiceImpl paymentGatewayService; @Autowired private UserService userService; @@ -44,7 +57,11 @@ public class BookingServiceImpl implements BookingService { @Value("${file.fullpath}") private String serverPath; + private final PlatformTransactionManager transactionManager; + public BookingServiceImpl( PlatformTransactionManager transactionManager) { + this.transactionManager = transactionManager; + } @Override public BookingDetails getBookingsById(int BookingId) { @@ -56,11 +73,124 @@ public class BookingServiceImpl implements BookingService { return null; } - @Override - public String confirmTheDateAndSlot(String fromDate, String toDate, int days, int fromStartingSlot, int fromEndingSlot, int toStartingSlot, int toEndingSlot, int bookingId, int userId) { - return null; +public String confirmBooking(int bookingId) { + TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition()); + try { + Optional bookingDet = bookingDetailsRepository.findById(bookingId); + if (!bookingDet.isPresent()){ + // Handle invalid booking ID + return "Invalid booking ID"; + } + BookingDetails bookingDetails=bookingDet.get(); + // Validate booking details + int hallId =bookingDetails.getHallDetails().getHallId(); + LocalDate startDate = LocalDate.parse(bookingDetails.getStartDate()); + LocalDate endDate = LocalDate.parse(bookingDetails.getEndDate()); + + // Iterate through each date of the booking + for (LocalDate date = startDate; !date.isAfter(endDate); date = date.plusDays(1)) { + BookingCalendar bookingCalendar = bookingCalendarRepository.findByBdateAndHallId(date, hallId); + if (bookingCalendar != null) { + // Check if the slot is already occupied + if ((date.equals(startDate) && bookingDetails.getStartingSlot() == 1 && bookingCalendar.isMorningSlot()) || + (date.equals(startDate) && bookingDetails.getStartingSlot() == 2 && bookingCalendar.isEveningSlot()) || + (date.equals(endDate) && bookingDetails.getEndingSlot() == 1 && bookingCalendar.isMorningSlot()) || + (date.equals(endDate) && bookingDetails.getEndingSlot() == 2 && bookingCalendar.isEveningSlot())) { + transactionManager.rollback(status); + return "Slot occupied"; + }else if(bookingCalendar.isMorningSlot() ==true && bookingCalendar.isEveningSlot()==true ) { + transactionManager.rollback(status); + return "Slot occupied"; + } + + } else { + bookingCalendar = new BookingCalendar(); + bookingCalendar.setBdate(date); + bookingCalendar.setHallId(hallId); + bookingCalendar.setIs_booked(0); + bookingCalendar.setIs_active(true); + } + + // Mark the appropriate slot as booked based on starting and ending slots + if (date.equals(startDate)) { + if (bookingDetails.getStartingSlot() == 1) { + bookingCalendar.setMorningSlot(true); + bookingCalendar.setBookingId_1(String.valueOf(bookingId)); + bookingCalendar.setIs_booked(bookingCalendar.getIs_booked()+1); + if(!date.equals(endDate)){ + bookingCalendar.setEveningSlot(true); + bookingCalendar.setBookingId_2(String.valueOf(bookingId)); + bookingCalendar.setIs_booked(bookingCalendar.getIs_booked()+1); + } + + } else { + bookingCalendar.setEveningSlot(true); + bookingCalendar.setBookingId_2(String.valueOf(bookingId)); + bookingCalendar.setIs_booked(bookingCalendar.getIs_booked()+1); + } + } else if (date.equals(endDate)) { + if (bookingDetails.getEndingSlot() == 1) { + bookingCalendar.setMorningSlot(true); + bookingCalendar.setBookingId_1(String.valueOf(bookingId)); + bookingCalendar.setIs_booked(bookingCalendar.getIs_booked()+1); + } else { + bookingCalendar.setEveningSlot(true); + bookingCalendar.setBookingId_2(String.valueOf(bookingId)); + bookingCalendar.setIs_booked(bookingCalendar.getIs_booked()+1); + if(bookingDetails.getEndingSlot()==2){ + bookingCalendar.setMorningSlot(true); + bookingCalendar.setBookingId_1(String.valueOf(bookingId)); + bookingCalendar.setIs_booked(bookingCalendar.getIs_booked()+1); + } + } + } else { + // For dates between start and end date, mark both slots as booked + bookingCalendar.setMorningSlot(true); + bookingCalendar.setEveningSlot(true); + bookingCalendar.setBookingId_1(String.valueOf(bookingId)); + bookingCalendar.setBookingId_2(String.valueOf(bookingId)); + bookingCalendar.setIs_booked(bookingCalendar.getIs_booked()+2); + } + + bookingCalendarRepository.save(bookingCalendar); + } + +// transactionManager.commit(status); + return "Booking confirmed successfully"; + } catch (Exception e) { + transactionManager.rollback(status); + e.printStackTrace(); + return "Error confirming booking"; + }finally { + transactionManager.commit(status); + } + +} + + + public String plusDateFromGivenDate(String dateString){ + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + LocalDate date = LocalDate.parse(dateString, formatter); + // Incrementing date by 1 day + LocalDate incrementedDate = date.plusDays(1); + System.out.println("increment date:-"+incrementedDate.toString()); + return incrementedDate.toString(); } + public Date convertStringToDate(String dateString){ + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + + try { + Date date = dateFormat.parse(dateString); + System.out.println("Date object: " + date); + return date; + } catch (Exception e) { + System.out.println("Error parsing date: " + e.getMessage()); + return null; + } + } + + @Override public String saveBookingDetails(Map formData) { System.out.println(formData); @@ -146,4 +276,90 @@ public class BookingServiceImpl implements BookingService { return hallAmount; } + + @Override + public BookingDetails updateBookingStatusById( int bookingId, BookingDetails.BookingStatus status,String comments) { + Optional bookingDetails= bookingDetailsRepository.findById(bookingId); + if(bookingDetails.isPresent()){ + BookingDetails bookDet = bookingDetails.get(); + + BookingHistory bookHistory = new BookingHistory(); + bookHistory.setBookingDetails(bookDet); + bookHistory.setBookingStatus(status); + bookHistory.setComments(comments); + bookHistory.setCdate(new Date()); + bookingHistoryRepository.save(bookHistory); + + bookDet.setBookingStatus(status); + BookingDetails bookingDetails1 = bookingDetailsRepository.save(bookDet); + return bookingDetails1; + } + return null; + } + + @Override + public EbDetails updateEbDetails(int bookingId,double startUnit,double endUnit,char status) { + Optional bookingDetails= bookingDetailsRepository.findById(bookingId); + if(bookingDetails.isPresent()){ + BookingDetails bd = bookingDetails.get(); + EbDetails ed = bd.getEbDetails(); + if(ed==null){ + ed= new EbDetails(); + ed.setBookingDetails(bd); + } + if(status=='S') { + ed.setCdate(new Date()); + ed.setStartingReading(startUnit); + return ebDetailsRepository.save(ed); + } else if (status=='E') { + double startReading = ed.getStartingReading(); + if(startReading != 0 && endUnit != 0 ){ + ed.setEndingReading(endUnit); + double usedUnit= endUnit - startReading; + ed.setUsedUnit(Float.parseFloat(usedUnit+"")); + float costPerUnit = bd.getHallDetails().getEbCostPerUnit(); + ed.setEbAmount(usedUnit * costPerUnit); + ed.setUpdatedDate(new Date()); + return ebDetailsRepository.save(ed); + } + } + } + return null; + } + + @Override + public String cancelBooking(int bookingId, BookingDetails.BookingStatus currentStatus,String comments) { + Optional bd =bookingDetailsRepository.findById(bookingId); + if(bd.isPresent()){ + BookingDetails bookingDetails = bd.get(); + if(bookingDetails.getBookingStatus().equals(BookingDetails.BookingStatus.APPROVED)){ + if(currentStatus.equals(BookingDetails.BookingStatus.CANCELED)){ + try{ + applicationLogService.saveLog(bookingDetails.getBookingId(),ApplicationLogs.logsOfMsg.USER_CANCELLED_BOOKING.toString(),comments); + paymentGatewayService.refundTheDepositAmount(bookingDetails.getBookingId(),bookingDetails.getUsers().getUserId(),bookingDetails.getDepositAmount()); + }catch (Exception e){ + e.printStackTrace(); + } + } else if (currentStatus.equals(BookingDetails.BookingStatus.REJECTED)) { + try{ + applicationLogService.saveLog(bookingDetails.getBookingId(),ApplicationLogs.logsOfMsg.GCC_REJECTED.toString(),comments); + paymentGatewayService.refundTheAmount(bookingDetails.getBookingId(),bookingDetails.getUsers().getUserId()); + }catch (Exception e){ + e.printStackTrace(); + } + } else if (currentStatus.equals(BookingDetails.BookingStatus.GCC_BLOCKED)) { + try{ + applicationLogService.saveLog(bookingDetails.getBookingId(),ApplicationLogs.logsOfMsg.GCC_BLOCKED_DATE.toString(),comments); + paymentGatewayService.refundTheAmount(bookingDetails.getBookingId(),bookingDetails.getUsers().getUserId()); + }catch (Exception e){ + e.printStackTrace(); + + } + } + } + + + } + return null; + } }