You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

498 lines
22 KiB

package com.gcc.communityHall.controller;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Collections;
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;
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;
import com.gcc.communityHall.entity.HallDetails;
import com.gcc.communityHall.entity.Notification;
import com.gcc.communityHall.entity.Users;
import com.gcc.communityHall.entity.Users.userType;
import com.gcc.communityHall.others.UserSession;
import com.gcc.communityHall.repository.HallDetailsRepository;
import com.gcc.communityHall.repository.NotificationRepository;
import com.gcc.communityHall.service.BookingService;
import com.gcc.communityHall.service.CalendarService;
import com.gcc.communityHall.service.HallDetailService;
import com.gcc.communityHall.service.UserService;
import com.gcc.communityHall.service.Impl.WhatsappMsgServiceImpl;
@Controller
@RequestMapping(value = { "/communityhall/user", "/communityhall", "", "/" })
public class UserController {
@Autowired
UserSession userSession;
@Autowired
private BookingService bookingService;
@Autowired
private HallDetailsRepository hallDetailsRepository;
@Autowired
private HallDetailService hallDetailsService;
@Autowired
private UserService userService;
@Autowired
CalendarService calendarService;
@Autowired
private WhatsappMsgServiceImpl whatsappMsgServiceImpl;
@Autowired
private HallDetailService hallDetailService;
@Autowired
private NotificationRepository notificationRepository;
@GetMapping(value = { "", "/", "/dashboard", "/index" })
public String viewDashboard(Model model) {
System.out.println("User in dashboard / index Page");
List<HallDetails> halls = hallDetailsRepository.findActiveHalls();
List<HallDetails> hallnames = hallDetailsService.getHallNames();
for (HallDetails hall : halls) {
if (hall.getHallImagesList() != null && !hall.getHallImagesList().isEmpty()) {
model.addAttribute("hasImages", true);
break;
}
}
List<Notification> newnotification = notificationRepository.findActivenotifications();
// Create a string to concatenate all notifications descriptions
StringBuilder notificationText = new StringBuilder();
for (Notification notification : newnotification) {
notificationText.append(notification.getNotification_description());
}
// System.out.println("user controller \nCounter Id:
// "+userSession.getCounter()+"\nCounter Name: "+userSession.getCounterName());
// Pass the concatenated string to the model
model.addAttribute("newnotification", notificationText.toString());
model.addAttribute("userName", userSession.getDispayName());
model.addAttribute("halls", halls);
model.addAttribute("hallnames", hallnames);
model.addAttribute("serverDate", LocalDate.now().toString()); // for server date
model.addAttribute("counter", userSession.getCounter());
model.addAttribute("counterName", userSession.getCounterName());
return "user/dashboard";
}
// Checkavilability Api
@GetMapping("/checkAvail")
public String checkAvail(@RequestParam("fromDate") String fromDate,
@RequestParam("toDate") String toDate,
@RequestParam("starting") String starting,
@RequestParam("ending") String ending,
@RequestParam(name = "hallId", required = false) String hallId,
@RequestParam(name = "zone", required = false) String zone,
Model model) {
System.out.println("User Checking availability for hall Id:" + hallId);
List<Notification> newnotification = notificationRepository.findActivenotifications();
// Create a string to concatenate all notifications descriptions
StringBuilder notificationText = new StringBuilder();
for (Notification notification : newnotification) {
notificationText.append(notification.getNotification_description());
}
// Pass the concatenated string to the model
model.addAttribute("newnotification", notificationText.toString());
List<HallDetails> hallnames = hallDetailService.getHallNames();
List<HallDetails> hallsByZone;
int hallIdd = 0;
// Parse hallId if provided
if (hallId != null && !hallId.isEmpty()) {
try {
hallIdd = Integer.parseInt(hallId);
} catch (NumberFormatException e) {
System.err.println("Invalid hallId: " + hallId);
}
}
// Fetch halls by zone if zone is provided
if (zone != null && !zone.isEmpty()) {
hallsByZone = hallDetailsRepository.findByZone(zone);
} else {
hallsByZone = hallDetailsRepository.findActiveHalls();
}
// Fetch calendar data based on provided parameters
List<BookingCalendar> data = calendarService.getCalendarByDateAndHallIdAndSlot(fromDate, toDate, starting,
ending, hallIdd);
HashSet<Integer> removeHallId = new HashSet<>();
// Collect hall IDs to be removed
for (BookingCalendar calendar : data) {
boolean isSameDay = fromDate.equals(toDate) && fromDate.equals(calendar.getBdate().toString());
boolean isMorningStart = starting.equals("1");
boolean isMorningEnd = ending.equals("1");
boolean isEveningStart = starting.equals("2");
boolean isEveningEnd = ending.equals("2");
if (isSameDay) {
// Same day booking cases
if (isMorningStart && isMorningEnd
&& (calendar.getBdate().toString().equals(fromDate) && calendar.isMorningSlot())) {
// System.out.println("Same day morning-morning match found: hallId=" +
// calendar.getHallId());
removeHallId.add(calendar.getHallId());
} else if (isEveningStart && isEveningEnd
&& (calendar.getBdate().toString().equals(fromDate) && calendar.isEveningSlot())) {
// System.out.println("Same day evening-evening match found: hallId=" +
// calendar.getHallId());
removeHallId.add(calendar.getHallId());
} else if (isMorningStart && isEveningEnd &&
((calendar.getBdate().toString().equals(fromDate) && calendar.isMorningSlot()) ||
(calendar.getBdate().toString().equals(toDate) && calendar.isEveningSlot()))) {
// System.out.println("Same day morning-evening match found: hallId=" +
// calendar.getHallId());
removeHallId.add(calendar.getHallId());
}
} else {
// Multi-day booking cases
if ((isMorningStart && isMorningEnd) &&
((calendar.getBdate().toString().equals(fromDate) && calendar.isMorningSlot()) ||
(calendar.getBdate().toString().equals(toDate) && calendar.isMorningSlot()))) {
// System.out.println("Multi-day morning-morning match found: hallId=" +
// calendar.getHallId());
removeHallId.add(calendar.getHallId());
} else if ((isEveningStart && isEveningEnd) &&
((calendar.getBdate().toString().equals(fromDate) && calendar.isEveningSlot()) ||
(calendar.getBdate().toString().equals(toDate) && calendar.isEveningSlot()))) {
// System.out.println("Multi-day evening-evening match found: hallId=" +
// calendar.getHallId());
removeHallId.add(calendar.getHallId());
} else if (isMorningStart && isEveningEnd &&
((calendar.getBdate().toString().equals(fromDate) && calendar.isMorningSlot()) ||
(calendar.getBdate().toString().equals(toDate) && calendar.isEveningSlot()))) {
// System.out.println("Multi-day morning-evening match found: hallId=" +
// calendar.getHallId());
removeHallId.add(calendar.getHallId());
} else if (isEveningStart && isMorningEnd &&
((calendar.getBdate().toString().equals(fromDate) && calendar.isEveningSlot()) ||
(calendar.getBdate().toString().equals(toDate) && calendar.isMorningSlot()))) {
// System.out.println("Multi-day evening-morning match found: hallId=" +
// calendar.getHallId());
removeHallId.add(calendar.getHallId());
}
}
}
// Remove unavailable halls from the list
hallsByZone.removeIf(hall -> removeHallId.contains(hall.getHallId()));
List<HallDetails> removeHallById = new ArrayList<>();
if (hallIdd != 0) {
HallDetails hallDetails = hallDetailService.getHallById(hallIdd);
// Ensure the hall is available before adding it to the list
if (!removeHallId.contains(hallIdd)) {
removeHallById.add(hallDetails);
}
} else {
removeHallById = hallDetailService.removeHallById(removeHallId);
}
// Populate the model attributes
model.addAttribute("userName", userSession.getDispayName());
model.addAttribute("hallnames", hallnames);
model.addAttribute("fromDate", fromDate);
model.addAttribute("toDate", toDate);
model.addAttribute("startingSlot", starting.equals("1") ? "Morning" : "Evening");
model.addAttribute("endingSlot", ending.equals("1") ? "Morning" : "Evening");
model.addAttribute("halls", (hallId != null && !hallId.isEmpty()) ? removeHallById : hallsByZone);
model.addAttribute("counter", userSession.getCounter());
model.addAttribute("counterName", userSession.getCounterName());
return "user/dashboard";
}
@PostMapping("/newregistrationform")
public String showRegistrationForm(@ModelAttribute("newform") Users newform, Model model) {
System.out.println("New User Registration Page");
Users user = userService.user(newform);
userSession.setMobileno(user.getMobileNo());
userSession.setDispayName(user.getName());
userSession.setUserId(user.getUserId());
userSession.setUserType(user.getUsertype().toString());
System.out.println("usetrtype==" + user.getUsertype().toString());
// System.out.println("employee id"+user.getGovernmentId());
// System.out.println("employee id"+user.getDepartment());
String apikey = "5c995535-6244-11f0-98fc-02c8a5e042bd";
String from = "919445061913";
String placeholders = "";
String mobileNo = String.valueOf(user.getMobileNo());
System.out.println("mobileNo>>>>>>>>>>>" + mobileNo);
if (user.getUsertype() == userType.PUBLIC) {
String registersms = "Welcome to GCC, Your User Registration for booking Community Centre is successful.";
String registerurlString = "https://tmegov.onex-aura.com/api/sms?key=pfTEYN6H&to=" + user.getMobileNo()
+ "&from=GCCCRP&body=" + registersms
+ "&entityid=1401572690000011081&templateid=1407172346621223019";
placeholders = URLEncoder.encode(mobileNo, StandardCharsets.UTF_8);
String registerwhatsupmsg = "https://sendapiv1.pinbot.ai/pinwa/sendMessage?apikey=" + apikey + "&from="
+ from + "&to=91" + user.getMobileNo() + ""
+ "&type=template&templateid=3315165 ";
// String registerwhatsupmsg =
// "https://media.smsgupshup.com/GatewayAPI/rest?userid=2000233507&password=h2YjFNcJ&send_to="
// + user.getMobileNo()
// +
// "&v=1.1&format=json&msg_type=TEXT&method=SENDMESSAGE&msg=Welcome+to+GCC%2C+%0A%0AYour+User+Registration+for+booking+Community+Centre+is+successful.";
whatsappMsgServiceImpl.sendMsg(registerwhatsupmsg);
whatsappMsgServiceImpl.sendSMS(registerurlString);
} else {
String registerpendingsms = "Welcome to GCC, Your User Registration request for booking Community Centre is submitted successfully.";
String registerpendingurlString = "https://tmegov.onex-aura.com/api/sms?key=pfTEYN6H&to="
+ user.getMobileNo() + "&from=GCCCRP&body=" + registerpendingsms
+ "&entityid=1401572690000011081&templateid=1407172346629919381";
placeholders = URLEncoder.encode(mobileNo, StandardCharsets.UTF_8);
String registerpendingwhatsupmsg = "https://sendapiv1.pinbot.ai/pinwa/sendMessage?apikey=" + apikey
+ "&from="
+ from + "&to=91" + user.getMobileNo() + ""
+ "&type=template&templateid=3315168 ";
// String registerpendingwhatsupmsg =
// "https://media.smsgupshup.com/GatewayAPI/rest?userid=2000233507&password=h2YjFNcJ&send_to="
// + user.getMobileNo()
// +
// "&v=1.1&format=json&msg_type=TEXT&method=SENDMESSAGE&msg=Welcome+to+GCC%2C+%0A%0AYour+User+Registration+request+for+booking+Community+Centre+submitted+successfully.";
whatsappMsgServiceImpl.sendMsg(registerpendingwhatsupmsg);
whatsappMsgServiceImpl.sendSMS(registerpendingurlString);
}
return "redirect:/communityhall/dashboard";
}
@GetMapping("/hallbookingform")
public String viewform(Model model) {
String username = userSession.getDispayName();
System.out.println("User in Hall Booking Form Page");
model.addAttribute("serverDate", LocalDate.now().toString()); // for server date
model.addAttribute("userName", username);
model.addAttribute("counter", userSession.getCounter());
model.addAttribute("counterName", userSession.getCounterName());
return "user/hallbookingform";
}
// ak
@GetMapping("/acknowledgementwithoutrefid")
public String viewakowledgement(Model model, int bookingId) {
System.out.println("User in Acknowledgement without Ref ID Page");
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) {
System.out.println("User in Acknowledgement with Ref ID Page");
// 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)
userSession.setUserId(null);
userSession.setMobileno(null);
userSession.setUserType(null);
userSession.setDispayName(null);
return "redirect:/communityhall/user/dashboard";
}
/*
* @GetMapping("/viewhistory")
* public String viewBookingDetails(Model model, @RequestParam(name =
* "bookingStatus", required = false) String bookingStatus) {
* // Retrieve userId from session
* Integer userId = userSession.getUserId();
* model.addAttribute("userName", userSession.getDispayName());
*
* //List<String> test = new ArrayList<>();
* model.addAttribute("userName", userSession.getDispayName());
* model.addAttribute("counter", userSession.getCounter());
* model.addAttribute("counterName", userSession.getCounterName());
*
* List<Map<String, Object>> bookingPast =
* bookingService.getAllBookingEventsByUserId(userId);
*
* model.addAttribute("userBookingspast", bookingPast);
* 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) {
System.out.println("User in View History Page");
Integer userId = userSession.getUserId();
// Extract booking_ref_id per booking
Map<Integer, String> refIdMap = new HashMap<>();
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);
// if (!bookingPast.isEmpty() || bookingPast.size() == 0) {
// 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());
List<Map<String, Object>> bookingPast = bookingService.getAllBookingEventsByUserId(userId);
if (bookingPast != null && !bookingPast.isEmpty()) {
for (Map<String, Object> row : bookingPast) {
Integer bookingId = row.get("booking_id") != null
? ((Number) row.get("booking_id")).intValue()
: null;
String refId = row.get("booking_ref_id") != null
? row.get("booking_ref_id").toString()
: null;
if (bookingId != null && refId != null) {
refIdMap.put(bookingId, refId);
}
}
} else {
System.out.println("No past bookings found for userId: " + userId);
}
model.addAttribute("userBookingspast", bookingPast != null ? bookingPast : Collections.emptyList());
model.addAttribute("bookingRefIds", refIdMap);
model.addAttribute("serverDate", LocalDate.now().toString());
return "user/viewhistory";
}
@GetMapping("/CommunityHallList")
public String viewhalllist(Model model) {
System.out.println("User in View Hall List Page");
model.addAttribute("userName", userSession.getDispayName());
model.addAttribute("counter", userSession.getCounter());
model.addAttribute("counterName", userSession.getCounterName());
return "user/communityHallList";
}
@GetMapping("/hallAmountCalculation")
public String viewCalculate(Model model) {
System.out.println("User in Calculate Hall Amount Page");
model.addAttribute("userName", userSession.getDispayName());
model.addAttribute("counter", userSession.getCounter());
model.addAttribute("counterName", userSession.getCounterName());
return "user/calculatehallamount";
}
@GetMapping("/collectionpending")
public String viewCollectionpending(Model model, int bookingId) {
System.out.println("User in Collection Pending Page");
BookingDetails bookingsDetails = bookingService.getBookingsById(bookingId);
model.addAttribute("bookingsDetails", bookingsDetails); // Add single BookingDetails object
model.addAttribute("userName", userSession.getDispayName());
return "user/collectionpending";
}
@GetMapping("/collectionpendingacknowledgement")
public String viewCollectionpendingAck(Model model, int bookingId) {
System.out.println("User in Collection Pending Acknowledgement Page");
BookingDetails bookingsDetails = bookingService.getBookingsById(bookingId);
model.addAttribute("bookingsDetails", bookingsDetails); // Add single BookingDetails object
model.addAttribute("userName", userSession.getDispayName());
return "user/extraebdamageamountack";
}
@GetMapping("/viewhallform")
public String viewhallform(Model model) {
System.out.println("User in View Hall Form Page");
String username = userSession.getDispayName();
model.addAttribute("userName", username);
model.addAttribute("serverDate", LocalDate.now().toString()); // for server date
return "user/viewhallform";
}
}