diff --git a/src/main/java/com/divudi/bean/inward/InwardReservationController.java b/src/main/java/com/divudi/bean/inward/InwardReservationController.java new file mode 100644 index 0000000000..611937de47 --- /dev/null +++ b/src/main/java/com/divudi/bean/inward/InwardReservationController.java @@ -0,0 +1,232 @@ +package com.divudi.bean.inward; + +import com.divudi.bean.common.ConfigOptionApplicationController; +import com.divudi.bean.common.SessionController; +import com.divudi.data.inward.InwardReservationEvent; + +import com.divudi.entity.PatientEncounter; +import com.divudi.entity.channel.SessionInstance; +import com.divudi.entity.inward.Reservation; +import com.divudi.facade.PatientEncounterFacade; +import com.divudi.facade.ReservationFacade; +import com.divudi.java.CommonFunctions; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import javax.ejb.EJB; +import javax.enterprise.context.SessionScoped; +import javax.faces.application.FacesMessage; +import javax.faces.context.FacesContext; +import javax.inject.Inject; +import javax.inject.Named; +import org.primefaces.event.SelectEvent; +import org.primefaces.event.schedule.ScheduleEntryMoveEvent; +import org.primefaces.event.schedule.ScheduleEntryResizeEvent; +import org.primefaces.model.DefaultScheduleEvent; +import org.primefaces.model.DefaultScheduleModel; +import org.primefaces.model.ScheduleEvent; +import org.primefaces.model.ScheduleModel; + +/** + * + * @author L C J Samarasekara + * + */ +@Named +@SessionScoped +public class InwardReservationController implements Serializable { + + private static final long serialVersionUID = 1L; + + @EJB + private PatientEncounterFacade patientEncounterFacade; + @EJB + ReservationFacade ReservationFacade; + //////////////////////////// + @Inject + private SessionController sessionController; + @Inject + ConfigOptionApplicationController configOptionApplicationController; + + //////////////////////// + private PatientEncounter patientEncounter; + + Date fromDate; + Date toDate; + private ScheduleModel reservationModel; + private String serverTimeZone = ZoneId.systemDefault().toString(); + private List selectedReservations; + private ScheduleEvent sEvent = new DefaultScheduleEvent<>(); + private InwardReservationEvent event = new InwardReservationEvent(); + + public String navigateToReservationCalendarFromMenu() { + fromDate = new Date(); + Long noOfMonths = configOptionApplicationController.getLongValueByKey("Number of Months to Load During Reservation Calendar", 6L); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(fromDate); + calendar.add(Calendar.MONTH, noOfMonths.intValue()); + toDate = calendar.getTime(); + findReservations(); + return "/inward/inward_reservations_schedule_calendar?faces-redirect=true"; + } + + /** + * + * @param selectEvent + */ + public void onEventSelectCal(SelectEvent> selectEvent) { + sEvent = selectEvent.getObject(); + } + + public void onDateSelect(SelectEvent selectEvent) { + event = (InwardReservationEvent) DefaultScheduleEvent.builder() + .startDate(selectEvent.getObject()) + .endDate(selectEvent.getObject().plusHours(1)) + .build(); + } + + public void onEventMove(ScheduleEntryMoveEvent event) { + FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Event moved", + "Delta:" + event.getDeltaAsDuration()); + + addMessage(message); + } + + public void onEventResize(ScheduleEntryResizeEvent event) { + FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Event resized", + "Start-Delta:" + event.getDeltaStartAsDuration() + ", End-Delta: " + event.getDeltaEndAsDuration()); + + addMessage(message); + } + + private void addMessage(FacesMessage message) { + FacesContext.getCurrentInstance().addMessage(null, message); + } + + public void findReservations() { + String jpql; + Map m = new HashMap(); + + jpql = "Select r from Reservation r " + + " where r.retired=:ret"; + m.put("ret", false); + + if (fromDate != null) { + jpql += " and r.reservedFrom between :fd and :td "; + m.put("fd", fromDate); + m.put("td", toDate); + } + + selectedReservations = ReservationFacade.findByJpql(jpql, m); + System.out.println("selectedReservations = " + selectedReservations); + generateReservationsEvents(selectedReservations); + } + + public void generateReservationsEvents(List lsi) { + reservationModel = new DefaultScheduleModel(); + for (Reservation si : lsi) { + System.out.println("Name = " + si.getRoom().getName()); + + // Dates + Date startDate = si.getReservedFrom(); + Date endDate = si.getReservedTo(); + + // Generate unique colors for each event + String uniqueBorderColor = generateColor(si.getRoom().getName()); + String uniqueBackgroundColor = generateColor(si.getPatient().getPerson().getName()); + + DefaultScheduleEvent event; + event = new DefaultScheduleEvent().builder() + .title(si.getRoom().getName() + " - " + si.getPatient().getPerson().getName()) + .borderColor(uniqueBorderColor) + .backgroundColor(uniqueBackgroundColor) + .startDate(CommonFunctions.convertDateToLocalDateTime(startDate)) + .endDate(CommonFunctions.convertDateToLocalDateTime(endDate)) + .data(si) + .build(); + + reservationModel.addEvent(event); + } + } + + private String generateColor(String seed) { + int hash = seed.hashCode(); // Create a hash from the seed (e.g., room name) + int hue = Math.abs(hash) % 360; // Map hash to a hue value (0-359) + int saturation = 70 + (Math.abs(hash) % 30); // Ensure high saturation (70-100) + int lightness = 50; // Set a fixed lightness for vibrancy + + // Return HSL color in CSS format + return "hsl(" + hue + ", " + saturation + "%, " + lightness + "%)"; + } + + public Date getFromDate() { + if (fromDate == null) { + fromDate = CommonFunctions.getStartOfDay(new Date()); + } + return fromDate; + } + + public void setFromDate(Date fromDate) { + this.fromDate = fromDate; + } + + public Date getToDate() { + if (toDate == null) { + toDate = CommonFunctions.getEndOfDay(new Date()); + } + return toDate; + } + + public void setToDate(Date toDate) { + this.toDate = toDate; + } + + public ScheduleModel getReservationModel() { + if (reservationModel == null) { + reservationModel = new DefaultScheduleModel(); + } + return reservationModel; + } + + public void setReservationModel(ScheduleModel reservationModel) { + this.reservationModel = reservationModel; + } + + public String getServerTimeZone() { + return serverTimeZone; + } + + public void setServerTimeZone(String serverTimeZone) { + this.serverTimeZone = serverTimeZone; + } + + public List getSelectedReservations() { + return selectedReservations; + } + + public void setSelectedReservations(List selectedReservations) { + this.selectedReservations = selectedReservations; + } + + public ScheduleEvent getsEvent() { + return sEvent; + } + + public void setsEvent(ScheduleEvent sEvent) { + this.sEvent = sEvent; + } + + public InwardReservationEvent getEvent() { + return event; + } + + public void setEvent(InwardReservationEvent event) { + this.event = event; + } +} diff --git a/src/main/java/com/divudi/data/inward/InwardReservationEvent.java b/src/main/java/com/divudi/data/inward/InwardReservationEvent.java new file mode 100644 index 0000000000..8ace13b011 --- /dev/null +++ b/src/main/java/com/divudi/data/inward/InwardReservationEvent.java @@ -0,0 +1,32 @@ +/* + * Open Hospital Management Information System + * Dr M H B Ariyaratne + * buddhika.ari@gmail.com + */ +package com.divudi.data.inward; + +import com.divudi.entity.ServiceSession; +import com.divudi.entity.channel.SessionInstance; +import com.divudi.entity.inward.Reservation; +import org.primefaces.model.DefaultScheduleEvent; +/** + * + * @author buddhika + */ +public class InwardReservationEvent extends DefaultScheduleEvent{ + private Reservation reservation; + + public Reservation getReservation() { + return reservation; + } + + public void setReservation(Reservation reservation) { + this.reservation = reservation; + } + + + + + + +} diff --git a/src/main/webapp/inward/inward_reservations_schedule_calendar.xhtml b/src/main/webapp/inward/inward_reservations_schedule_calendar.xhtml new file mode 100644 index 0000000000..ca0a911412 --- /dev/null +++ b/src/main/webapp/inward/inward_reservations_schedule_calendar.xhtml @@ -0,0 +1,160 @@ + + + + + + + + +
+

Reservation Calendar

+
+
+ +
+ + + + + + + + + + +
+ + #{inwardReservationController.reservationModel.events.size()} + +
+ + +
+ +
+ +
+ +
+ + + + + +
+ + + + + + + + + +
+ +
+
+ + +
+ +
+
+
\ No newline at end of file diff --git a/src/main/webapp/pharmacy/pharmacy_report_transfer_issue_bill_1.xhtml b/src/main/webapp/pharmacy/pharmacy_report_transfer_issue_bill_1.xhtml index d023d9220e..b9c3a1bdac 100644 --- a/src/main/webapp/pharmacy/pharmacy_report_transfer_issue_bill_1.xhtml +++ b/src/main/webapp/pharmacy/pharmacy_report_transfer_issue_bill_1.xhtml @@ -47,7 +47,7 @@ value="Excel" icon="fas fa-file-excel" class="ui-button-success mx-2"> - + - - - + + - + + diff --git a/src/main/webapp/pharmacy/pharmacy_report_transfer_issue_bill_item_1.xhtml b/src/main/webapp/pharmacy/pharmacy_report_transfer_issue_bill_item_1.xhtml index 0b07bc5a30..da9fccfb02 100644 --- a/src/main/webapp/pharmacy/pharmacy_report_transfer_issue_bill_item_1.xhtml +++ b/src/main/webapp/pharmacy/pharmacy_report_transfer_issue_bill_item_1.xhtml @@ -47,7 +47,7 @@ value="Excel" icon="fas fa-file-excel" class="ui-button-success mx-2"> - + - + @@ -152,7 +152,7 @@ - + @@ -181,7 +181,7 @@ - + diff --git a/src/main/webapp/pharmacy/pharmacy_report_transfer_receive_bill.xhtml b/src/main/webapp/pharmacy/pharmacy_report_transfer_receive_bill.xhtml index 01050e5539..b15890a8a2 100644 --- a/src/main/webapp/pharmacy/pharmacy_report_transfer_receive_bill.xhtml +++ b/src/main/webapp/pharmacy/pharmacy_report_transfer_receive_bill.xhtml @@ -48,7 +48,7 @@ value="Excel" icon="fas fa-file-excel" class="ui-button-success mx-2"> - + - - + - + diff --git a/src/main/webapp/pharmacy/pharmacy_report_transfer_receive_bill_item_1.xhtml b/src/main/webapp/pharmacy/pharmacy_report_transfer_receive_bill_item_1.xhtml index 6b28995ded..6161cee1b2 100644 --- a/src/main/webapp/pharmacy/pharmacy_report_transfer_receive_bill_item_1.xhtml +++ b/src/main/webapp/pharmacy/pharmacy_report_transfer_receive_bill_item_1.xhtml @@ -48,7 +48,7 @@ value="Excel" icon="fas fa-file-excel" class="ui-button-success mx-2"> - + +