Browse Source

changed bookingid to referenceid in acknowledgement page

master
AJITHKUMAR12 11 months ago
parent
commit
17d9af5e4c
  1. 41
      src/main/java/com/gcc/communityHall/configuration/EncryptionUtil.java
  2. 78
      src/main/java/com/gcc/communityHall/configuration/UuidBookingUtil.java
  3. 78
      src/main/java/com/gcc/communityHall/controller/UserController.java
  4. 13
      src/main/java/com/gcc/communityHall/entity/BookingDetails.java
  5. 238
      src/main/java/com/gcc/communityHall/entity/SettlementHistory.java
  6. 125
      src/main/java/com/gcc/communityHall/paymentService/controller/PaymentController.java
  7. 22
      src/main/java/com/gcc/communityHall/repository/BookingDetailsRepository.java
  8. 9
      src/main/java/com/gcc/communityHall/repository/SettlementHistoryRepository.java
  9. 4
      src/main/java/com/gcc/communityHall/service/BookingService.java
  10. 63
      src/main/java/com/gcc/communityHall/service/Impl/BookingServiceImpl.java
  11. 4
      src/main/resources/templates/admin/settlement-list.html
  12. 4
      src/main/resources/templates/headquarters/settlement-list.html
  13. 4
      src/main/resources/templates/officer/settlement-list.html

41
src/main/java/com/gcc/communityHall/configuration/EncryptionUtil.java

@ -0,0 +1,41 @@
package com.gcc.communityHall.configuration;
import org.springframework.stereotype.Component;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
@Component
public class EncryptionUtil {
private static final String SECRET_KEY = "MySecretKey12345"; // 16 chars
private static final String ALGORITHM = "AES";
public String encrypt(String value) {
try {
SecretKeySpec key = new SecretKeySpec(SECRET_KEY.getBytes(), ALGORITHM);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encrypted = cipher.doFinal(value.getBytes());
return Base64.getUrlEncoder().encodeToString(encrypted); // URL safe
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public String decrypt(String encryptedValue) {
try {
SecretKeySpec key = new SecretKeySpec(SECRET_KEY.getBytes(), ALGORITHM);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] decoded = Base64.getUrlDecoder().decode(encryptedValue);
return new String(cipher.doFinal(decoded));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}

78
src/main/java/com/gcc/communityHall/configuration/UuidBookingUtil.java

@ -0,0 +1,78 @@
package com.gcc.communityHall.configuration;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
/**
* Utility class for handling UUID-based ref_id for booking verification
* This provides a secure and URL-friendly approach for booking reference IDs
*/
public class UuidBookingUtil {
// In-memory cache to store UUID to booking ID mapping
// In production, this should be replaced with a database table or Redis
private static final Map<String, Integer> uuidToBookingIdMap = new ConcurrentHashMap<>();
private static final Map<Integer, String> bookingIdToUuidMap = new ConcurrentHashMap<>();
/**
* Generate a UUID ref_id for a booking ID
* @param bookingId The original booking ID
* @return UUID string that can be used as ref_id
*/
public static String generateRefIdForBooking(int bookingId) {
String uuid = UUID.randomUUID().toString();
// Store the mapping
uuidToBookingIdMap.put(uuid, bookingId);
bookingIdToUuidMap.put(bookingId, uuid);
return uuid;
}
/**
* Get booking ID from ref_id UUID
* @param refId The UUID string from URL
* @return Original booking ID, or null if not found
*/
public static Integer getBookingIdFromRefId(String refId) {
return uuidToBookingIdMap.get(refId);
}
/**
* Get ref_id UUID for existing booking ID (if already generated)
* @param bookingId The booking ID
* @return UUID string, or null if not found
*/
public static String getRefIdForBooking(int bookingId) {
return bookingIdToUuidMap.get(bookingId);
}
/**
* Remove mapping when booking is cancelled or expired
* @param bookingId The booking ID to remove
*/
public static void removeBookingMapping(int bookingId) {
String uuid = bookingIdToUuidMap.remove(bookingId);
if (uuid != null) {
uuidToBookingIdMap.remove(uuid);
}
}
/**
* Check if ref_id UUID is valid
* @param refId The UUID string to validate
* @return true if UUID exists in mapping
*/
public static boolean isValidRefId(String refId) {
return uuidToBookingIdMap.containsKey(refId);
}
/**
* Get total number of active mappings (for monitoring)
* @return Number of active UUID mappings
*/
public static int getActiveMappingCount() {
return uuidToBookingIdMap.size();
}
}

78
src/main/java/com/gcc/communityHall/controller/UserController.java

@ -3,11 +3,14 @@ package com.gcc.communityHall.controller;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@ -15,6 +18,7 @@ import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.gcc.communityHall.entity.BookingCalendar;
import com.gcc.communityHall.entity.BookingDetails;
@ -250,14 +254,47 @@ public class UserController {
return "user/hallbookingform";
}
@GetMapping("/acknowledgement")
/* @GetMapping("/acknowledgement")
public String viewakowledgement(Model model, int bookingId) {
BookingDetails bookingsDetails = bookingService.getBookingsById(bookingId);
model.addAttribute("bookingsDetails", bookingsDetails); // Add single BookingDetails object
model.addAttribute("userName", userSession.getDispayName());
return "user/acknowledgement";
}*/
//ak
@GetMapping("/acknowledgement")
public String viewAcknowledgement(@RequestParam("ref_id") String refId, Model model) {
// Fetch booking using booking_ref_id
BookingDetails bookingsDetails = bookingService.getBookingByRefId(refId);
if (bookingsDetails == null) {
model.addAttribute("errorMsg", "Invalid booking reference number.");
return "user/error";
}
model.addAttribute("bookingsDetails", bookingsDetails);
model.addAttribute("userName", userSession.getDispayName());
return "user/acknowledgement";
}
//ak
@PostMapping("/migrate-old-bookings")
@ResponseBody
public ResponseEntity<String> migrateOldBookings() {
try {
bookingService.migrateOldBookingsToRefId();
return ResponseEntity.ok("Migration completed successfully. All old bookings now have ref_ids.");
} catch (Exception e) {
e.printStackTrace();
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
.body("Migration failed: " + e.getMessage());
}
}
@GetMapping("/logout")
public String logout(Model model) {
// Clear all login session (Check API Controller /gcc-login)
@ -268,7 +305,7 @@ public class UserController {
return "redirect:/communityhall/user/dashboard";
}
@GetMapping("/viewhistory")
/*@GetMapping("/viewhistory")
public String viewBookingDetails(Model model, @RequestParam(name = "bookingStatus", required = false) String bookingStatus) {
// Retrieve userId from session
Integer userId = userSession.getUserId();
@ -285,7 +322,44 @@ public class UserController {
model.addAttribute("serverDate", LocalDate.now().toString()); //for server date
return "user/viewhistory";
}*/
//ak
@GetMapping("/viewhistory")
public String viewBookingDetails(Model model,
@RequestParam(name = "bookingStatus", required = false) String bookingStatus) {
Integer userId = userSession.getUserId();
model.addAttribute("userName", userSession.getDispayName());
model.addAttribute("counter", userSession.getCounter());
model.addAttribute("counterName", userSession.getCounterName());
// Fetch all past bookings
List<Map<String, Object>> bookingPast = bookingService.getAllBookingEventsByUserId(userId);
// Extract booking_ref_id per booking
Map<Integer, String> refIdMap = new HashMap<>();
for (Map<String, Object> row : bookingPast) {
Integer bookingId = (Integer) row.get("booking_id");
String refId = (String) row.get("booking_ref_id"); // <-- coming from SQL
if (bookingId != null && refId != null) {
refIdMap.put(bookingId, refId);
}
}
System.out.println("Row keys: " + bookingPast.get(0).keySet());
System.out.println("RefId Map123: " + refIdMap);
model.addAttribute("userBookingspast", bookingPast);
model.addAttribute("bookingRefIds", refIdMap); // <-- SENT TO FRONTEND
model.addAttribute("serverDate", LocalDate.now().toString());
return "user/viewhistory";
}
@GetMapping("/CommunityHallList")
public String viewhalllist(Model model) {

13
src/main/java/com/gcc/communityHall/entity/BookingDetails.java

@ -61,6 +61,10 @@ public class BookingDetails {
private String relationship;
private String comments;
//ak
@Column(name = "booking_ref_id")
private String bookingRefId;
@OneToOne(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
@JoinColumn(name = "counterdetails_counter_id")
private CounterDetails counterDetails;
@ -112,7 +116,14 @@ public class BookingDetails {
public void setNoOfDays(double days) {
this.noOfDays = days;
}
}//ak
public String getBookingRefId() {
return bookingRefId;
}
public void setBookingRefId(String bookingRefId) {
this.bookingRefId = bookingRefId;
}
public String getStartDate() {
return startDate;

238
src/main/java/com/gcc/communityHall/entity/SettlementHistory.java

@ -0,0 +1,238 @@
package com.gcc.communityHall.entity;
import java.time.Instant;
import java.time.LocalDate;
import java.util.Date;
import org.springframework.web.multipart.MultipartFile;
import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.OneToOne;
import jakarta.persistence.Transient;
@Entity
public class SettlementHistory {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "history_id")
private int historyId;
private int settlementId;
private String comments;
private LocalDate cdate;
private double damageAmount;
private double ebAmount;
private double depositAmount;
private double refundedAmount;
private Date updatedDate;
private String updatedId;
@Column(name = "challon_url")
private String challon;
private String dddate;
private long ddnumber;
private double collectionPending;
private String collectionStatus;
private long challonnumber;
private long challonamount;
private long ddamount;
//ak
@Column(name = "approved_flag")
private Integer approvedFlag = 0;
@Column(name = "approved_flag_date")
private Date approvedFlagDate;
@Column(name = "sh_date")
private Date ShDate;
@OneToOne(fetch = FetchType.EAGER,cascade = CascadeType.ALL)
@JsonIgnore
private BookingDetails bookingDetails;
public int getHistoryId() {
return historyId;
}
public void setHistoryId(int historyId) {
this.historyId = historyId;
}
public int getSettlementId() {
return settlementId;
}
public void setSettlementId(int settlementId) {
this.settlementId = settlementId;
}
public String getComments() {
return comments;
}
public void setComments(String comments) {
this.comments = comments;
}
public LocalDate getCdate() {
return cdate;
}
public void setCdate(LocalDate cdate) {
this.cdate = cdate;
}
public double getDamageAmount() {
return damageAmount;
}
public void setDamageAmount(double damageAmount) {
this.damageAmount = damageAmount;
}
public double getEbAmount() {
return ebAmount;
}
public void setEbAmount(double ebAmount) {
this.ebAmount = ebAmount;
}
public double getDepositAmount() {
return depositAmount;
}
public void setDepositAmount(double depositAmount) {
this.depositAmount = depositAmount;
}
public double getRefundedAmount() {
return refundedAmount;
}
public void setRefundedAmount(double refundedAmount) {
this.refundedAmount = refundedAmount;
}
public Date getUpdatedDate() {
return updatedDate;
}
public void setUpdatedDate(Date updatedDate) {
this.updatedDate = updatedDate;
}
public String getUpdatedId() {
return updatedId;
}
public void setUpdatedId(String updatedId) {
this.updatedId = updatedId;
}
public BookingDetails getBookingDetails() {
return bookingDetails;
}
public void setBookingDetails(BookingDetails bookingDetails) {
this.bookingDetails = bookingDetails;
}
public String getChallon() {
return challon;
}
public void setChallon(String challon) {
this.challon = challon;
}
public String getDddate() {
return dddate;
}
public void setDddate(String dddate) {
this.dddate = dddate;
}
public long getDdnumber() {
return ddnumber;
}
public void setDdnumber(long ddnumber) {
this.ddnumber = ddnumber;
}
public double getCollectionPending() {
return collectionPending;
}
public void setCollectionPending(double collectionPending) {
this.collectionPending = collectionPending;
}
public long getChallonnumber() {
return challonnumber;
}
public void setChallonnumber(long challonnumber) {
this.challonnumber = challonnumber;
}
public long getDdamount() {
return ddamount;
}
public void setDdamount(long ddamount) {
this.ddamount = ddamount;
}
public long getChallonamount() {
return challonamount;
}
public void setChallonamount(long challonamount) {
this.challonamount = challonamount;
}
public String getCollectionStatus() {
return collectionStatus;
}
public void setCollectionStatus(String collectionStatus) {
this.collectionStatus = collectionStatus;
}
// Getter for approvedFlag
public Integer getApprovedFlag() {
return approvedFlag;
}
// Setter for approvedFlag
public void setApprovedFlag(Integer approvedFlag) {
this.approvedFlag = approvedFlag;
}
// Getter for approvedFlagDate
public Date getApprovedFlagDate() {
return approvedFlagDate;
}
// Setter for approvedFlagDate
public void setApprovedFlagDate(Date approvedFlagDate) {
this.approvedFlagDate = approvedFlagDate;
}
// Getter for ShDate
public Date getShDate() {
return ShDate;
}
// Setter for ShDate
public void setShDate(Date shDate) {
ShDate = shDate;
}
public SettlementHistory(int settlementId, String comments, LocalDate cdate, double damageAmount, double ebAmount,
double depositAmount, double refundedAmount, Date updatedDate, String updatedId, String challon,
String dddate, long ddnumber, BookingDetails bookingDetails,double collectionPending, long ddamount, long challonnumber, String collectionStatus) {
super();
this.settlementId = settlementId;
this.comments = comments;
this.cdate = cdate;
this.damageAmount = damageAmount;
this.ebAmount = ebAmount;
this.depositAmount = depositAmount;
this.refundedAmount = refundedAmount;
this.updatedDate = updatedDate;
this.updatedId = updatedId;
this.challon = challon;
this.dddate = dddate;
this.ddnumber = ddnumber;
this.bookingDetails = bookingDetails;
this.collectionPending=collectionPending;
this.ddamount=ddamount;
this.challonnumber=challonnumber;
this.collectionStatus=collectionStatus;
}
public SettlementHistory() {
super();
}
}

125
src/main/java/com/gcc/communityHall/paymentService/controller/PaymentController.java

@ -13,6 +13,7 @@ import java.util.*;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.gcc.communityHall.configuration.EncryptionUtil;
import com.gcc.communityHall.entity.*;
import com.gcc.communityHall.others.AppConfig;
//import com.gcc.communityHall.repository.ErpPostDataRepository;
@ -28,7 +29,6 @@ import org.springframework.web.bind.annotation.RequestParam;
import com.gcc.communityHall.entity.BookingDetails.BookingStatus;
import com.gcc.communityHall.entity.BookingDetails.RefundStatus;
import com.gcc.communityHall.entity.Users;
import com.gcc.communityHall.paymentService.config.PaymentConfig;
import com.gcc.communityHall.paymentService.entity.TransactionResponse;
import com.gcc.communityHall.paymentService.repository.TransactionResponseRepository;
@ -45,6 +45,9 @@ import org.springframework.web.util.UriComponentsBuilder;
@Controller
@RequestMapping("/communityhall/payment")
public class PaymentController {
//ak
@Autowired
private EncryptionUtil encryptionUtil;
@Autowired
PaymentGatewayService paymentService;
@ -76,9 +79,120 @@ public class PaymentController {
@Autowired
private PaymentsService paymentsService;
//ak
@PostMapping(value = "/response")
public String response(Model model, @RequestParam(required = false) String msg) throws NoSuchAlgorithmException {
String salt = this.paymentConfig.getEncryptionKey();
String confirmToken = "";
String status = this.paymentConfig.getTransactionSuccessCode();
String[] res = msg.split("\\|");
String c = "";
TransactionResponse response = this.paymentService.getTransactionResponseByTxansactionId(res[3], "temp");
Payments payment = new Payments();
payment.setTransactionId(response.getTxansactionId());
double amount = 0;
// ------------------ PAYMENT STRING PROCESSING ------------------
for (int i = 0; i < res.length; i++) {
if (i == res.length - 1) {
c = c + salt;
confirmToken = res[i];
} else if (res[i].isEmpty()) {
c = c + "|";
} else if (res[i].equals("NA")) {
c = c + "NA|";
} else {
c = c + res[i] + "|";
}
if (i == 5) {
response.setTpslTxnId(res[i]);
response.setAmount(res[6]);
response.setTxansactionId(res[3]);
response.setDate(res[8]);
}
}
int bookingId = response.getBookingId();
try {
amount = Double.parseDouble(response.getAmount());
} catch (Exception e) {}
payment.setAmountReceived(amount);
payment.setPaymentStatus("Not Completed");
BookingDetails bookingsDetails = bookser.getBookingsById(bookingId); // JPA fetch
payment.setBookingDetails(bookingsDetails);
response.setResponse(msg);
response.setStatusCode(res[0]);
bookingsDetails.setPayments(payment);
payment.setCdate(new Date());
// save transaction response
transactionResRepo.save(response);
// =============================================================
// CASE 1: FAILURE - AMOUNT MISMATCH
// =============================================================
if (bookingsDetails.getAmountReceived() != amount) {
if(paymentService.generateToken(c).equals(confirmToken) && status.equals(res[0])){
payment.setPaymentStatus("Success");
bookingsDetails.setPayments(payment);
paymentRepo.save(payment);
// booking failure logic
bookser.bookingFailure(bookingsDetails, 1);
}
@PostMapping(value = "/response")
// Fetch OR Generate booking_ref_id
String refId = bookser.getBookingRefIdByBookingId(bookingId);
// encrypt bookingId (coworkspace logic)
String encryptedId = encryptionUtil.encrypt(String.valueOf(bookingId));
model.addAttribute("ref_id", refId);
model.addAttribute("encryptedId", encryptedId);
return "redirect:/communityhall/user/acknowledgement?ref_id=" + refId;
}
// =============================================================
// CASE 2: SUCCESS FLOW
// =============================================================
if (paymentService.generateToken(c).equals(confirmToken) && status.equals(res[0])) {
payment.setPaymentStatus("Success");
bookingsDetails.setPayments(payment);
paymentRepo.save(payment);
try {
bookser.confirmBooking(bookingId);
} catch (Exception e) {
// ignore
}
}
// 🔥 Fetch OR Generate booking_ref_id
String refId = bookser.getBookingRefIdByBookingId(bookingId);
// 🔐 Encrypt bookingId
String encryptedId = encryptionUtil.encrypt(String.valueOf(bookingId));
model.addAttribute("ref_id", refId);
model.addAttribute("encryptedId", encryptedId);
return "redirect:/communityhall/user/acknowledgement?ref_id=" + refId;
}
/* @PostMapping(value = "/response")
public String response(Model model, @RequestParam(required = false) String msg) throws NoSuchAlgorithmException {
String salt = this.paymentConfig.getEncryptionKey();
@ -144,6 +258,8 @@ public class PaymentController {
paymentRepo.save(payment);
bookser.bookingFailure(bookingsDetails, 1);
}
//ak
model.addAttribute("bookingsDetails", bookingsDetails);
@ -182,7 +298,7 @@ public class PaymentController {
//System.out.println(save.toString());
paymentRepo.save(payment);
return "redirect:/communityhall/user/acknowledgement?bookingId=" + bookingsDetails.getBookingId();
}
}*/
/*public void postDataToERP(Payments payment, TransactionResponse res) {
RestTemplate restTemplate = new RestTemplate();
@ -347,7 +463,8 @@ public class PaymentController {
model.addAttribute("bookingsDetails", bookingsDetails);
extraPaymentsRepository.save(payment);
// postEPDataToERP(payment, response); //post extra payments details to ERP
return "redirect:/communityhall/user/collectionpendingacknowledgement?bookingId=" + bookingsDetails.getBookingId();
// return "redirect:/communityhall/user/collectionpendingacknowledgement?bookingId=" + bookingsDetails.getBookingId();
return "redirect:/communityhall/user/collectionpendingacknowledgement?bookingId=" + bookingsDetails.getBookingId();
}
/*public void postEPDataToERP(ExtraPayments payment, TransactionResponse res) {

22
src/main/java/com/gcc/communityHall/repository/BookingDetailsRepository.java

@ -6,6 +6,7 @@ import java.util.Map;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
@ -38,6 +39,27 @@ public interface BookingDetailsRepository extends JpaRepository<BookingDetails,
@Query("SELECT b FROM BookingDetails b JOIN FETCH b.settlement s WHERE s.settlementId = :settlementId")
BookingDetails findBySettlementIdWithBookingDetails(@Param("settlementId") int settlementId);
//ak
@Query("SELECT b.bookingRefId FROM BookingDetails b WHERE b.bookingId = :bookingId")
String getRefIdByBookingId(@Param("bookingId") int bookingId);
@Modifying
@Query("UPDATE BookingDetails b SET b.bookingRefId = :refId WHERE b.bookingId = :bookingId")
void updateRefId(@Param("refId") String refId, @Param("bookingId") int bookingId);
//ak
@Query("SELECT b FROM BookingDetails b WHERE b.bookingRefId = :refId")
BookingDetails findByRefId(@Param("refId") String refId);
//ak for migrate
@Query("SELECT b FROM BookingDetails b WHERE b.bookingRefId IS NULL OR b.bookingRefId = ''")
List<BookingDetails> findAllOldBookingsWithoutRefId();
@Query("SELECT bd FROM BookingDetails bd JOIN bd.hallDetails hd WHERE hd.zone = :zone AND bd.bookingStatus IN ('WAITING_FOR_NOC')")
List<BookingDetails> getWaitinglist(@Param("zone") String zone);

9
src/main/java/com/gcc/communityHall/repository/SettlementHistoryRepository.java

@ -0,0 +1,9 @@
package com.gcc.communityHall.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.gcc.communityHall.entity.SettlementHistory;
@Repository
public interface SettlementHistoryRepository extends JpaRepository<SettlementHistory, Integer> {
}

4
src/main/java/com/gcc/communityHall/service/BookingService.java

@ -19,6 +19,10 @@ import com.gcc.communityHall.entity.GccBlockingDate;
public interface BookingService {
BookingDetails getBookingsById(int BookingId);
//ak
BookingDetails getBookingByRefId(String refId);
//ak
void migrateOldBookingsToRefId();
BookingDetails updateBookingDetails(BookingDetails bd);

63
src/main/java/com/gcc/communityHall/service/Impl/BookingServiceImpl.java

@ -28,6 +28,7 @@ import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import com.gcc.communityHall.configuration.UuidBookingUtil;
import com.gcc.communityHall.entity.ApplicationLogs;
import com.gcc.communityHall.entity.BookingCalendar;
import com.gcc.communityHall.entity.BookingDetails;
@ -180,6 +181,59 @@ public class BookingServiceImpl implements BookingService {
}
return null;
}
//ak
@Override
public BookingDetails getBookingByRefId(String refId) {
return bookingDetailsRepository.findByRefId(refId);
}
//ak
@Transactional
@Override
public void migrateOldBookingsToRefId() {
List<BookingDetails> oldBookings =
bookingDetailsRepository.findAllOldBookingsWithoutRefId();
for (BookingDetails booking : oldBookings) {
int bookingId = booking.getBookingId();
// Generate ref_id
String generatedRefId = UuidBookingUtil.generateRefIdForBooking(bookingId);
// Set into entity
booking.setBookingRefId(generatedRefId);
// Save
bookingDetailsRepository.save(booking);
System.out.println("Migrated booking ID " + bookingId +
" → ref_id = " + generatedRefId);
}
}
//ak
@Transactional
public String getBookingRefIdByBookingId(int bookingId) {
String refId = bookingDetailsRepository.getRefIdByBookingId(bookingId);
// If missing → create new
if (refId == null || refId.trim().isEmpty()) {
// Generate refId using coworkspace logic
refId = UuidBookingUtil.generateRefIdForBooking(bookingId);
// Update using JPA repository
bookingDetailsRepository.updateRefId(refId, bookingId);
}
return refId;
}
@Override
public BookingDetails updateBookingDetails(BookingDetails bd) {
@ -364,7 +418,8 @@ public class BookingServiceImpl implements BookingService {
e.printStackTrace();
bookingFailure(bookingDetails, 2);
// System.out.println(bookingDetails.getBookingStatus()+","+bookingDetails.getRefundStatus()+","+bookingDetails.getComments());
return "redirect:/communityhall/user/acknowledgement?bookingId=" + bookingDetails.getBookingId();
//return "redirect:/communityhall/user/acknowledgement?bookingId=" + bookingDetails.getBookingId();
return "redirect:/communityhall/user/acknowledgement?ref_id=" + bookingDetails.getBookingRefId();
}
}
@ -537,12 +592,14 @@ public class BookingServiceImpl implements BookingService {
String whatsupmsg = "https://media.smsgupshup.com/GatewayAPI/rest?userid=2000233507&password=h2YjFNcJ&send_to=" + bookingDetails.getUsers().getMobileNo() + "&v=1.1&format=json&msg_type=TEXT&method=SENDMESSAGE&msg=Your+booking+with+ID+" + bookingDetails.getBookingId() + "+on+" + bookingDetails.getBookingDate() + "+has+been+successfully+confirmed.+%0AThanks+for+using+GCC+Community+Hall+Booking+System.";
whatsappMsgServiceImpl.sendMsg(whatsupmsg);
whatsappMsgServiceImpl.sendSMS(urlString);
return "redirect:/communityhall/user/acknowledgement?bookingId=" + bookingDetails.getBookingId();
// return "redirect:/communityhall/user/acknowledgement?bookingId=" + bookingDetails.getBookingId();
return "redirect:/communityhall/user/acknowledgement?ref_id=" + bookingDetails.getBookingRefId();
} catch (Exception e) {
bookingFailure(bookingDetails, 2);
// System.out.println(bookingDetails.getBookingStatus()+","+bookingDetails.getRefundStatus()+","+bookingDetails.getComments());
return "redirect:/communityhall/user/acknowledgement?bookingId=" + bookingDetails.getBookingId();
// return "redirect:/communityhall/user/acknowledgement?bookingId=" + bookingDetails.getBookingId();
return "redirect:/communityhall/user/acknowledgement?ref_id=" + bookingDetails.getBookingRefId();
}
}

4
src/main/resources/templates/admin/settlement-list.html

@ -555,7 +555,7 @@
th:onclick="accept()">Approve</button>
<button type="button" class="btn btn-sm btn-alt-secondary"
data-bs-dismiss="modal">Close</button>
<button type="submit" class="btn btn-sm btn-primary">Reject</button>
<button type="submit" class="btn btn-sm btn-primary" id="removebutton">Reject</button>
<a id="downloadLink" style="display: none;"></a>
</div>
</div>
@ -926,8 +926,10 @@
showDamageDetails(x);
if (x.settlement && x.settlement.approvedFlag === 1) {
$("#approvebutton").hide();
$("#removebutton").hide();
} else {
$("#approvebutton").show();
$("#removebutton").show();
}
}
});

4
src/main/resources/templates/headquarters/settlement-list.html

@ -556,7 +556,7 @@
th:onclick="accept()">Approve</button>
<button type="button" class="btn btn-sm btn-alt-secondary"
data-bs-dismiss="modal">Close</button>
<button type="submit" class="btn btn-sm btn-primary">Reject</button>
<button type="submit" class="btn btn-sm btn-primary" id="removebutton">Reject</button>
<a id="downloadLink" style="display: none;"></a>
</div>
</div>
@ -928,8 +928,10 @@
//ak for headquarters
if (x.settlement && x.settlement.approvedFlag === 1) {
$("#approvebutton").hide();
$("#removebutton").hide();
} else {
$("#approvebutton").show();
$("#removebutton").show();
}
}

4
src/main/resources/templates/officer/settlement-list.html

@ -546,7 +546,7 @@
th:onclick="accept()">Approve</button>
<button type="button" class="btn btn-sm btn-alt-secondary"
data-bs-dismiss="modal">Close</button>
<button type="submit" class="btn btn-sm btn-primary">Reject</button>
<button type="submit" class="btn btn-sm btn-primary" id="removebutton">Reject</button>
<a id="downloadLink" style="display: none;"></a>
</div>
</div>
@ -917,8 +917,10 @@
//ak for officer
if (x.settlement && x.settlement.approvedFlag === 1) {
$("#approvebutton").hide();
$("#removebutton").hide();
} else {
$("#approvebutton").show();
$("#removebutton").show();
}
}
});

Loading…
Cancel
Save