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
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";
|
|
|
|
}
|
|
|
|
}
|