From b97d27568b9516ac850ee17a267accb017b6db50 Mon Sep 17 00:00:00 2001 From: Alok Kumar <59380269+AlokSP@users.noreply.github.com> Date: Tue, 20 Jan 2026 13:09:13 +0530 Subject: [PATCH 01/25] state district mapping --- src/main/java/com/health/model/District.java | 11 +++ src/main/java/com/health/model/State.java | 11 +++ .../health/model/StateDistrictMapping.java | 96 +++++++++++++++++++ .../StateDistrictMappingRepository.java | 22 +++++ .../service/StateDistrictMappingService.java | 26 +++++ .../impl/StateDistrictMappingServiceImpl.java | 67 +++++++++++++ 6 files changed, 233 insertions(+) create mode 100644 src/main/java/com/health/model/StateDistrictMapping.java create mode 100644 src/main/java/com/health/repository/StateDistrictMappingRepository.java create mode 100644 src/main/java/com/health/service/StateDistrictMappingService.java create mode 100644 src/main/java/com/health/service/impl/StateDistrictMappingServiceImpl.java diff --git a/src/main/java/com/health/model/District.java b/src/main/java/com/health/model/District.java index 2d66ad38..c244cdba 100644 --- a/src/main/java/com/health/model/District.java +++ b/src/main/java/com/health/model/District.java @@ -56,6 +56,17 @@ public class District implements Comparable, Serializable { @OneToMany(mappedBy = "district", cascade = CascadeType.ALL, fetch = FetchType.EAGER) Set events = new HashSet(); + @OneToMany(mappedBy = "district", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + private Set stateDistrictMappings = new HashSet(); + + public Set getStateDistrictMappings() { + return stateDistrictMappings; + } + + public void setStateDistrictMappings(Set stateDistrictMappings) { + this.stateDistrictMappings = stateDistrictMappings; + } + public int getId() { return id; } diff --git a/src/main/java/com/health/model/State.java b/src/main/java/com/health/model/State.java index 9f5ac404..4417be5d 100644 --- a/src/main/java/com/health/model/State.java +++ b/src/main/java/com/health/model/State.java @@ -47,6 +47,17 @@ public class State implements Comparable, Serializable { @OneToMany(mappedBy = "state", cascade = CascadeType.ALL, fetch = FetchType.EAGER) private Set events = new HashSet(); + @OneToMany(mappedBy = "state", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + private Set stateDistrictMappings = new HashSet(); + + public Set getStateDistrictMappings() { + return stateDistrictMappings; + } + + public void setStateDistrictMappings(Set stateDistrictMappings) { + this.stateDistrictMappings = stateDistrictMappings; + } + public int getId() { return id; } diff --git a/src/main/java/com/health/model/StateDistrictMapping.java b/src/main/java/com/health/model/StateDistrictMapping.java new file mode 100644 index 00000000..53236c62 --- /dev/null +++ b/src/main/java/com/health/model/StateDistrictMapping.java @@ -0,0 +1,96 @@ + +package com.health.model; + +import java.io.Serializable; +import java.sql.Timestamp; +import java.util.Comparator; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +@Entity +@Table(name = "state_district_mapping") +public class StateDistrictMapping implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "state_dis_id", nullable = false, updatable = false) + private int stateDisId; + + @Column(name = "status", nullable = false) + private boolean status = true; + + @Column(name = "date_added", nullable = false) + private Timestamp dateAdded; + + @ManyToOne + @JoinColumn(name = "state_id") + private State state; + + @ManyToOne + @JoinColumn(name = "district_id") + private District district; + + // @OneToMany(mappedBy = "topicLanMapping", cascade = CascadeType.ALL) + // private Set trainingResources = new + // HashSet(); + + public boolean isStatus() { + return status; + } + + public void setStatus(boolean status) { + this.status = status; + } + + public int getStateDisId() { + return stateDisId; + } + + public void setStateDisId(int stateDisId) { + this.stateDisId = stateDisId; + } + + public State getState() { + return state; + } + + public void setState(State state) { + this.state = state; + } + + public District getDistrict() { + return district; + } + + public void setDistrict(District district) { + this.district = district; + } + + public Timestamp getDateAdded() { + return dateAdded; + } + + public void setDateAdded(Timestamp dateAdded) { + this.dateAdded = dateAdded; + } + + public static Comparator SortByStateName = new Comparator() { + + @Override + public int compare(StateDistrictMapping sd1, StateDistrictMapping sd2) { + + return sd1.getState().getStateName().compareTo(sd2.getState().getStateName()); + + } + }; + +} diff --git a/src/main/java/com/health/repository/StateDistrictMappingRepository.java b/src/main/java/com/health/repository/StateDistrictMappingRepository.java new file mode 100644 index 00000000..9c333b35 --- /dev/null +++ b/src/main/java/com/health/repository/StateDistrictMappingRepository.java @@ -0,0 +1,22 @@ + +package com.health.repository; + +import java.util.List; + +import org.springframework.data.jpa.repository.JpaRepository; + +import com.health.model.District; +import com.health.model.State; +import com.health.model.StateDistrictMapping; + +public interface StateDistrictMappingRepository extends JpaRepository { + + StateDistrictMapping findByStateDisId(int topicLanId); + + List findByDistrict(District district); + + List findByState(State state); + + StateDistrictMapping findByStateAndDistrict(State state, District district); + +} diff --git a/src/main/java/com/health/service/StateDistrictMappingService.java b/src/main/java/com/health/service/StateDistrictMappingService.java new file mode 100644 index 00000000..dd18ee5f --- /dev/null +++ b/src/main/java/com/health/service/StateDistrictMappingService.java @@ -0,0 +1,26 @@ + +package com.health.service; + +import java.util.List; + +import com.health.model.District; +import com.health.model.State; +import com.health.model.StateDistrictMapping; + +public interface StateDistrictMappingService { + + StateDistrictMapping findByStateDistrictId(int stateDisId); + + List findByDistrict(District district); + + List findByState(State state); + + StateDistrictMapping findByStateAndDistrict(State state, District district); + + List findAll(); + + void save(StateDistrictMapping stateDistrictMapping); + + void saveAll(List stateDistrictMappingList); + +} diff --git a/src/main/java/com/health/service/impl/StateDistrictMappingServiceImpl.java b/src/main/java/com/health/service/impl/StateDistrictMappingServiceImpl.java new file mode 100644 index 00000000..41a079dc --- /dev/null +++ b/src/main/java/com/health/service/impl/StateDistrictMappingServiceImpl.java @@ -0,0 +1,67 @@ + +package com.health.service.impl; + +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.health.model.District; +import com.health.model.State; +import com.health.model.StateDistrictMapping; +import com.health.repository.StateDistrictMappingRepository; +import com.health.service.StateDistrictMappingService; + +@Service +public class StateDistrictMappingServiceImpl implements StateDistrictMappingService { + + private static final Logger logger = LoggerFactory.getLogger(StateDistrictMappingServiceImpl.class); + + @Autowired + private StateDistrictMappingRepository repo; + + @Override + public StateDistrictMapping findByStateDistrictId(int stateDisId) { + + return repo.findByStateDisId(stateDisId); + } + + @Override + public List findByDistrict(District district) { + + return repo.findByDistrict(district); + } + + @Override + public List findByState(State state) { + + return repo.findByState(state); + } + + @Override + public StateDistrictMapping findByStateAndDistrict(State state, District district) { + + return repo.findByStateAndDistrict(state, district); + } + + @Override + public List findAll() { + + return repo.findAll(); + } + + @Override + public void save(StateDistrictMapping stateDistrictMapping) { + repo.save(stateDistrictMapping); + + } + + @Override + public void saveAll(List stateDistrictMappingList) { + repo.saveAll(stateDistrictMappingList); + + } + +} From 181f17e92cf8c840af52cc8251d0318bd69ee0f6 Mon Sep 17 00:00:00 2001 From: Alok Kumar <59380269+AlokSP@users.noreply.github.com> Date: Thu, 22 Jan 2026 11:51:54 +0530 Subject: [PATCH 02/25] Project Report --- .../java/com/health/model/ProjectReport.java | 173 ++++++++++++++++++ .../health/model/StateDistrictMapping.java | 29 ++- src/main/java/com/health/model/User.java | 12 ++ .../repository/ProjectReportRepository.java | 21 +++ .../health/service/ProjectReportService.java | 25 +++ .../impl/ProjectReportServiceImpl.java | 67 +++++++ 6 files changed, 324 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/health/model/ProjectReport.java create mode 100644 src/main/java/com/health/repository/ProjectReportRepository.java create mode 100644 src/main/java/com/health/service/ProjectReportService.java create mode 100644 src/main/java/com/health/service/impl/ProjectReportServiceImpl.java diff --git a/src/main/java/com/health/model/ProjectReport.java b/src/main/java/com/health/model/ProjectReport.java new file mode 100644 index 00000000..b0f527ac --- /dev/null +++ b/src/main/java/com/health/model/ProjectReport.java @@ -0,0 +1,173 @@ + +package com.health.model; + +import java.io.Serializable; +import java.nio.file.Paths; +import java.sql.Timestamp; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +@Entity +@Table(name = "project_report") +public class ProjectReport implements Serializable { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "project_rep_id", nullable = false, updatable = false) + private int projectReportId; + + @Column(name = "date_added", nullable = false) + private Timestamp dateAdded; + + @Column(name = "status", nullable = false) + private boolean status = true; + + @Column(name = "pdf_path", length = 1000) + private String pdfPath; + + @Column(name = "doc_path", length = 1000) + private String docPath; + + @Column(name = "excel_path", length = 1000) + private String excelPath; + + @Column(name = "img_path", length = 1000) + private String imgPath; + + @ManyToOne + @JoinColumn(name = "state_district_id") + private StateDistrictMapping stateDistrictMapping; + + @ManyToOne + @JoinColumn(name = "user_id", nullable = false) + private User user; + + public int getProjectReportId() { + return projectReportId; + } + + public void setProjectReportId(int projectReportId) { + this.projectReportId = projectReportId; + } + + public StateDistrictMapping getStateDistrictMapping() { + return stateDistrictMapping; + } + + public void setStateDistrictMapping(StateDistrictMapping stateDistrictMapping) { + this.stateDistrictMapping = stateDistrictMapping; + } + + public boolean isStatus() { + return status; + } + + public void setStatus(boolean status) { + this.status = status; + } + + public String getPdfPath() { + return pdfPath; + } + + public void setPdfPath(String pdfPath) { + this.pdfPath = pdfPath; + } + + public String getDocPath() { + return docPath; + } + + public void setDocPath(String docPath) { + this.docPath = docPath; + } + + public String getExcelPath() { + return excelPath; + } + + public void setExcelPath(String excelPath) { + this.excelPath = excelPath; + } + + public String getImgPath() { + return imgPath; + } + + public void setImgPath(String imgPath) { + this.imgPath = imgPath; + } + + public User getUser() { + return user; + } + + public void setUser(User user) { + this.user = user; + } + + public String getPdfFileNameWithorWitoutZip() { + if (pdfPath == null || pdfPath.trim().isEmpty()) { + return "NA"; + } + String fileName = Paths.get(pdfPath).getFileName().toString(); + return fileName; + } + + public String getDocFileNameWithorWitoutZip() { + if (docPath == null || docPath.trim().isEmpty()) { + return "NA"; + } + String fileName = Paths.get(docPath).getFileName().toString(); + return fileName; + } + + public String getExcelFileNameWithorWitoutZip() { + if (excelPath == null || excelPath.trim().isEmpty()) { + return "NA"; + } + String fileName = Paths.get(excelPath).getFileName().toString(); + return fileName; + } + + public String getImageFileNameWithorWitoutZip() { + if (imgPath == null || imgPath.trim().isEmpty()) { + return "NA"; + } + String fileName = Paths.get(imgPath).getFileName().toString(); + return fileName; + } + + public Timestamp getDateAdded() { + return dateAdded; + } + + public void setDateAdded(Timestamp dateAdded) { + this.dateAdded = dateAdded; + } + + public ProjectReport(Timestamp dateAdded, StateDistrictMapping stateDistrictMapping, String pdfPath, String docPath, + String excelPath, String imgPath) { + + this.dateAdded = dateAdded; + this.stateDistrictMapping = stateDistrictMapping; + this.pdfPath = pdfPath; + this.docPath = docPath; + this.excelPath = excelPath; + this.imgPath = imgPath; + } + + public ProjectReport() { + + } + +} diff --git a/src/main/java/com/health/model/StateDistrictMapping.java b/src/main/java/com/health/model/StateDistrictMapping.java index 53236c62..9d8d28e0 100644 --- a/src/main/java/com/health/model/StateDistrictMapping.java +++ b/src/main/java/com/health/model/StateDistrictMapping.java @@ -4,7 +4,10 @@ import java.io.Serializable; import java.sql.Timestamp; import java.util.Comparator; +import java.util.HashSet; +import java.util.Set; +import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; @@ -12,6 +15,7 @@ import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; import javax.persistence.Table; @Entity @@ -39,9 +43,8 @@ public class StateDistrictMapping implements Serializable { @JoinColumn(name = "district_id") private District district; - // @OneToMany(mappedBy = "topicLanMapping", cascade = CascadeType.ALL) - // private Set trainingResources = new - // HashSet(); + @OneToMany(mappedBy = "stateDistrictMapping", cascade = CascadeType.ALL) + private Set projectReports = new HashSet(); public boolean isStatus() { return status; @@ -59,6 +62,14 @@ public void setStateDisId(int stateDisId) { this.stateDisId = stateDisId; } + public Set getProjectReports() { + return projectReports; + } + + public void setProjectReports(Set projectReports) { + this.projectReports = projectReports; + } + public State getState() { return state; } @@ -83,6 +94,18 @@ public void setDateAdded(Timestamp dateAdded) { this.dateAdded = dateAdded; } + public StateDistrictMapping(Timestamp dateAdded, State state, District district) { + + this.dateAdded = dateAdded; + this.state = state; + this.district = district; + + } + + public StateDistrictMapping() { + + } + public static Comparator SortByStateName = new Comparator() { @Override diff --git a/src/main/java/com/health/model/User.java b/src/main/java/com/health/model/User.java index 64f261c5..e8868e76 100644 --- a/src/main/java/com/health/model/User.java +++ b/src/main/java/com/health/model/User.java @@ -183,6 +183,10 @@ public void setOrgRolev(OrganizationRole orgRolev) { @JsonIgnore private Set trainingResources = new HashSet(); + @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + @JsonIgnore + private Set projectReports = new HashSet(); + @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JsonIgnore private Set topics = new HashSet(); @@ -287,6 +291,14 @@ public void setCourseCatTopicMappings(Set courseCatTopicM this.courseCatTopicMappings = courseCatTopicMappings; } + public Set getProjectReports() { + return projectReports; + } + + public void setProjectReports(Set projectReports) { + this.projectReports = projectReports; + } + @Override public String getPassword() { return password; diff --git a/src/main/java/com/health/repository/ProjectReportRepository.java b/src/main/java/com/health/repository/ProjectReportRepository.java new file mode 100644 index 00000000..66da9462 --- /dev/null +++ b/src/main/java/com/health/repository/ProjectReportRepository.java @@ -0,0 +1,21 @@ + +package com.health.repository; + +import java.util.List; + +import org.springframework.data.jpa.repository.JpaRepository; + +import com.health.model.ProjectReport; +import com.health.model.StateDistrictMapping; + +public interface ProjectReportRepository extends JpaRepository { + + ProjectReport findByProjectReportId(int projectReportId); + + List findByStateDistrictMapping(StateDistrictMapping stateDistrictMapping); + + List findByStateDistrictMappingInAndStatusTrue(List stateDistrictMappingList); + + List findAllByStatusTrue(); + +} diff --git a/src/main/java/com/health/service/ProjectReportService.java b/src/main/java/com/health/service/ProjectReportService.java new file mode 100644 index 00000000..ce4a5ef9 --- /dev/null +++ b/src/main/java/com/health/service/ProjectReportService.java @@ -0,0 +1,25 @@ + +package com.health.service; + +import java.util.List; + +import com.health.model.ProjectReport; +import com.health.model.StateDistrictMapping; + +public interface ProjectReportService { + + ProjectReport findByProjectReportId(int projectReportId); + + List findByStateDistrictMapping(StateDistrictMapping stateDistrictMapping); + + List findByStateDistrictMappingInAndStatusTrue(List stateDistrictMappingList); + + List findAll(); + + List findAllByStatusTrue(); + + void save(ProjectReport projectReport); + + void saveAll(List projectReportList); + +} diff --git a/src/main/java/com/health/service/impl/ProjectReportServiceImpl.java b/src/main/java/com/health/service/impl/ProjectReportServiceImpl.java new file mode 100644 index 00000000..2a55c275 --- /dev/null +++ b/src/main/java/com/health/service/impl/ProjectReportServiceImpl.java @@ -0,0 +1,67 @@ + +package com.health.service.impl; + +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.health.model.ProjectReport; +import com.health.model.StateDistrictMapping; +import com.health.repository.ProjectReportRepository; +import com.health.service.ProjectReportService; + +@Service +public class ProjectReportServiceImpl implements ProjectReportService { + + private static final Logger logger = LoggerFactory.getLogger(ProjectReportServiceImpl.class); + + @Autowired + private ProjectReportRepository repo; + + @Override + public ProjectReport findByProjectReportId(int projectReportId) { + + return repo.findByProjectReportId(projectReportId); + } + + @Override + public List findByStateDistrictMapping(StateDistrictMapping stateDistrictMapping) { + + return repo.findByStateDistrictMapping(stateDistrictMapping); + } + + @Override + public List findByStateDistrictMappingInAndStatusTrue( + List stateDistrictMappingList) { + + return repo.findByStateDistrictMappingInAndStatusTrue(stateDistrictMappingList); + } + + @Override + public List findAll() { + + return repo.findAll(); + } + + @Override + public List findAllByStatusTrue() { + + return repo.findAllByStatusTrue(); + } + + @Override + public void save(ProjectReport projectReport) { + repo.save(projectReport); + + } + + @Override + public void saveAll(List projectReportList) { + repo.saveAll(projectReportList); + + } + +} From a96a73c310bb78ce280d183427fb378fb47ed184 Mon Sep 17 00:00:00 2001 From: Alok Kumar <59380269+AlokSP@users.noreply.github.com> Date: Tue, 3 Feb 2026 14:20:09 +0530 Subject: [PATCH 03/25] :add Project Report Get and Post resolved merge conflict --- .../com/health/controller/HomeController.java | 258 ++++++++++++++++++ .../java/com/health/utility/CommonData.java | 2 + .../com/health/utility/ServiceUtility.java | 15 + 3 files changed, 275 insertions(+) diff --git a/src/main/java/com/health/controller/HomeController.java b/src/main/java/com/health/controller/HomeController.java index c13cc87f..ea3dcf8f 100644 --- a/src/main/java/com/health/controller/HomeController.java +++ b/src/main/java/com/health/controller/HomeController.java @@ -97,6 +97,7 @@ import com.health.model.ContributorAssignedTutorial; import com.health.model.Course; import com.health.model.CourseCatTopicMapping; +import com.health.model.District; import com.health.model.DocumentSearch; import com.health.model.Event; import com.health.model.FeedbackMasterTrainer; @@ -111,11 +112,13 @@ import com.health.model.PackageLanguage; import com.health.model.PathofPromoVideo; import com.health.model.PostQuestionaire; +import com.health.model.ProjectReport; import com.health.model.PromoVideo; import com.health.model.Question; import com.health.model.ResearchPaper; import com.health.model.SpokenVideo; import com.health.model.State; +import com.health.model.StateDistrictMapping; import com.health.model.Testimonial; import com.health.model.Topic; import com.health.model.TopicCategoryMapping; @@ -158,11 +161,13 @@ import com.health.service.PackageLanguageService; import com.health.service.PathofPromoVideoService; import com.health.service.PostQuestionaireService; +import com.health.service.ProjectReportService; import com.health.service.PromoVideoService; import com.health.service.QuestionService; import com.health.service.ResearchPaperService; import com.health.service.RoleService; import com.health.service.SpokenVideoService; +import com.health.service.StateDistrictMappingService; import com.health.service.StateService; import com.health.service.TestimonialService; import com.health.service.TopicCategoryMappingService; @@ -265,6 +270,12 @@ public class HomeController { @Autowired private LanguageService lanService; + @Autowired + private ProjectReportService projectReportService; + + @Autowired + private StateDistrictMappingService stateDistrictMappingService; + @Autowired private CategoryService catService; @@ -6648,6 +6659,253 @@ public String viewAndDownloadTrainingResource(HttpServletRequest req, return "trainingResources"; } + /************************ Project Report Start ******************************/ + + @GetMapping("/addProjectReport") + public String addProjectReportGet(HttpServletRequest req, Principal principal, Model model) { + User usr = getUser(principal); + logger.info("{} {} {}", usr.getUsername(), req.getMethod(), req.getRequestURI()); + model.addAttribute("userInfo", usr); + + List states = stateService.findAll(); + states.sort(Comparator.comparing(State::getStateName)); + model.addAttribute("states", states); + + List projectReportList = new ArrayList<>(); + List tempProjectReportList = projectReportService.findAll(); + for (ProjectReport temp : tempProjectReportList) { + if (ServiceUtility.hasAnyProjectReportFile(temp)) { + projectReportList.add(temp); + } + } + + model.addAttribute("projectReportList", projectReportList); + + return "addProjectReport"; + } + + @PostMapping("/addProjectReport") + public String addProjectReportPost(HttpServletRequest req, Model model, Principal principal, + @RequestParam(name = "stateIdPR") int stateId, + @RequestParam(name = "districtIdPR") List districtIds, + @RequestParam(name = "filePR") List files) { + + User usr = getUser(principal); + logger.info("{} {} {}", usr.getUsername(), req.getMethod(), req.getRequestURI()); + model.addAttribute("userInfo", usr); + + boolean viewSection = false; + + if (stateId == 0) { + model.addAttribute("error_msg", "State should not be null"); + viewSection = true; + model.addAttribute("viewSection", viewSection); + return addProjectReportGet(req, principal, model); + } + + if (districtIds.isEmpty() || files.isEmpty()) { + viewSection = true; + model.addAttribute("viewSection", viewSection); + model.addAttribute("error_msg", "District and Files should not be null"); + return addProjectReportGet(req, principal, model); + } + + State state = stateService.findById(stateId); + String stateName = state.getStateName(); + + Timestamp dateAdded = ServiceUtility.getCurrentTime(); + + Set addedDistrict = new HashSet<>(); + + try { + + for (int i = 0; i < districtIds.size(); i++) { + if (i < files.size()) + logger.info("File: {}", files.get(i)); + if (districtIds.get(i) != 0 && !files.get(i).isEmpty()) { + + District district = districtService.findById(districtIds.get(i)); + + if (district != null) { + String districtName = district.getDistrictName(); + StateDistrictMapping stateDistrictMapping = stateDistrictMappingService + .findByStateAndDistrict(state, district); + + boolean addedDistrictFlag = addedDistrict.add(district); + + if (stateDistrictMapping == null && addedDistrictFlag) { + stateDistrictMapping = new StateDistrictMapping(dateAdded, state, district); + + stateDistrictMappingService.save(stateDistrictMapping); + logger.info(" iter:{} stateDistrictMapping :{}", i, stateDistrictMapping); + } + + List prList = projectReportService + .findByStateDistrictMapping(stateDistrictMapping); + ProjectReport pr = null; + boolean oldPRFlag = false; + String oldPath = ""; + + if (prList.isEmpty()) { + pr = new ProjectReport(); + logger.info("iter:{} ProjectReport :{}", i, pr); + + } else { + pr = prList.get(0); + oldPRFlag = true; + } + + pr.setDateAdded(dateAdded); + pr.setStateDistrictMapping(stateDistrictMapping); + pr.setUser(usr); + + projectReportService.save(pr); // Saved first to get exact Id + int prId = pr.getProjectReportId(); + + Path rootPath = Paths.get(CommonData.uploadProjectReport, String.valueOf(prId), stateName, + districtName); + + String pdfFolder = Paths.get(rootPath.toString(), "pdf").toString(); + String docFolder = Paths.get(rootPath.toString(), "docx_or_odt").toString(); + String excelFolder = Paths.get(rootPath.toString(), "excel_or_csv").toString(); + String imageFolder = Paths.get(rootPath.toString(), "image").toString(); + + Set extentions = new HashSet<>(); + String document = ""; + + MultipartFile file = files.get(i); + + String fileExtention = ServiceUtility.checkFileExtensions(file); + + if (fileExtention.equals(CommonData.UNSUPPORTED_EXTENSION)) { + model.addAttribute("error_msg", "Unsupported file Error at District:" + districtName); + viewSection = true; + model.addAttribute("viewSection", viewSection); + return addProjectReportGet(req, principal, model); + } + + else if (fileExtention.equals(CommonData.PDF_EXTENSION)) { + if (oldPRFlag) { + oldPath = pr.getPdfPath(); + } + document = ServiceUtility.uploadMediaFile(file, env, pdfFolder); + pr.setPdfPath(document); + } + + else if (fileExtention.equals(CommonData.DOC_EXTENSION)) { + if (oldPRFlag) { + oldPath = pr.getDocPath(); + } + document = ServiceUtility.uploadMediaFile(file, env, docFolder); + pr.setDocPath(document); + } + + else if (fileExtention.equals(CommonData.EXCEL_EXTENSION)) { + if (oldPRFlag) { + oldPath = pr.getExcelPath(); + } + document = ServiceUtility.uploadMediaFile(file, env, excelFolder); + pr.setExcelPath(document); + } + + else if (fileExtention.equals(CommonData.IMAGE_EXTENSION)) { + if (oldPRFlag) { + oldPath = pr.getImgPath(); + } + document = ServiceUtility.uploadMediaFile(file, env, imageFolder); + pr.setImgPath(document); + } + + if (fileExtention.equals(CommonData.ZIP_EXTENSION)) { + + extentions = ServiceUtility.checkFileExtentionsInZip(file); + if (extentions.size() == 1) { + for (String ext : extentions) { + if (ext.equals(CommonData.PDF_EXTENSION)) { + if (oldPRFlag) { + oldPath = pr.getPdfPath(); + } + document = ServiceUtility.uploadMediaFile(file, env, pdfFolder); + pr.setPdfPath(document); + } + + else if (ext.equals(CommonData.DOC_EXTENSION)) { + if (oldPRFlag) { + oldPath = pr.getDocPath(); + } + document = ServiceUtility.uploadMediaFile(file, env, docFolder); + pr.setDocPath(document); + } + + else if (ext.equals(CommonData.EXCEL_EXTENSION)) { + if (oldPRFlag) { + oldPath = pr.getExcelPath(); + } + document = ServiceUtility.uploadMediaFile(file, env, excelFolder); + pr.setExcelPath(document); + } + + else if (ext.equals(CommonData.IMAGE_EXTENSION)) { + if (oldPRFlag) { + oldPath = pr.getImgPath(); + } + document = ServiceUtility.uploadMediaFile(file, env, imageFolder); + pr.setImgPath(document); + } + + else if (ext.equals(CommonData.UNSUPPORTED_EXTENSION)) { + viewSection = true; + model.addAttribute("viewSection", viewSection); + model.addAttribute("error_msg", + "Unsupported file Error at District:" + districtName); + + return addProjectReportGet(req, principal, model); + } + + } + } + + else { + model.addAttribute("error_msg", + "Zip contains different types of files Error at language:" + districtName); + viewSection = true; + model.addAttribute("viewSection", viewSection); + return addProjectReportGet(req, principal, model); + } + + } + + if (oldPath != null && oldPath.endsWith(".zip")) { + + String extractDir = oldPath.replace(".zip", ""); + + Path extractDirPath = Paths.get(env.getProperty("spring.applicationexternalPath.name"), + extractDir); + FileUtils.deleteDirectory(extractDirPath.toFile()); + + } + pr.setUser(usr); + projectReportService.save(pr); + + } + + } + + } + + } catch (Exception e) { + model.addAttribute("error_msg", "Some errors occurred, please contact the Admin"); + logger.error("Error:", e); + return addProjectReportGet(req, principal, model); + } + + model.addAttribute("viewSection", viewSection); + model.addAttribute("success_msg", CommonData.RECORD_SAVE_SUCCESS_MSG); + return addProjectReportGet(req, principal, model); + } + + /************************ Project Report End ********************************/ + @GetMapping("/trainingModules") public String hstTrainingModules(@RequestParam(name = "week", required = false, defaultValue = "") String weekName, @RequestParam(name = "lan", required = false, defaultValue = "") String langName, HttpServletRequest req, diff --git a/src/main/java/com/health/utility/CommonData.java b/src/main/java/com/health/utility/CommonData.java index 7424114a..396b9001 100644 --- a/src/main/java/com/health/utility/CommonData.java +++ b/src/main/java/com/health/utility/CommonData.java @@ -167,6 +167,8 @@ public class CommonData { public static String uploadTrainingResource = "Media/Content/TrainingResource/"; + public static String uploadProjectReport = "Media/Content/ProjectReport/"; + public static String uploadPromoVideo = "Media/Content/PromoVideo/"; public static String uploadVersion = "Media/Content/Version/"; diff --git a/src/main/java/com/health/utility/ServiceUtility.java b/src/main/java/com/health/utility/ServiceUtility.java index 60101215..5a0b4866 100644 --- a/src/main/java/com/health/utility/ServiceUtility.java +++ b/src/main/java/com/health/utility/ServiceUtility.java @@ -76,6 +76,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import com.health.model.ProjectReport; import com.health.model.TrainingResource; import com.health.model.User; import com.health.repository.UserRepository; @@ -1274,6 +1275,20 @@ public static String generateToken() { return Base64.getUrlEncoder().withoutPadding().encodeToString(bytes).substring(0, 10); } + public static boolean hasAnyProjectReportFile(ProjectReport pr) { + boolean hasData = true; + if ((pr.getPdfPath() == null || pr.getPdfPath().isEmpty()) + && (pr.getDocPath() == null || pr.getDocPath().isEmpty()) + && (pr.getExcelPath() == null || pr.getExcelPath().isEmpty()) + && (pr.getImgPath() == null || pr.getImgPath().isEmpty())) { + + hasData = false; + } + + return hasData; + + } + public static boolean hasAnyResourceFile(TrainingResource tr) { boolean hasData = true; if ((tr.getPdfPath() == null || tr.getPdfPath().isEmpty()) From 1afb41ade50c2f7744c09dfcefc0546a6f477401 Mon Sep 17 00:00:00 2001 From: Alok Kumar <59380269+AlokSP@users.noreply.github.com> Date: Mon, 9 Mar 2026 12:36:29 +0530 Subject: [PATCH 04/25] resolved conflict --- .../com/health/controller/HomeController.java | 76 +++++++++++++++++-- .../java/com/health/utility/CommonData.java | 3 + 2 files changed, 71 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/health/controller/HomeController.java b/src/main/java/com/health/controller/HomeController.java index ea3dcf8f..162ec67f 100644 --- a/src/main/java/com/health/controller/HomeController.java +++ b/src/main/java/com/health/controller/HomeController.java @@ -6716,6 +6716,8 @@ public String addProjectReportPost(HttpServletRequest req, Model model, Principa Timestamp dateAdded = ServiceUtility.getCurrentTime(); Set addedDistrict = new HashSet<>(); + Map> ErrorsforExistingFiles = new LinkedHashMap<>(); + boolean savedFlag = false; try { @@ -6728,6 +6730,18 @@ public String addProjectReportPost(HttpServletRequest req, Model model, Principa if (district != null) { String districtName = district.getDistrictName(); + if (!CommonData.ALL_DISTRICTS.equalsIgnoreCase(districtName)) { + int tempStateId = district.getState().getId(); + if (stateId != tempStateId) { + viewSection = true; + model.addAttribute("viewSection", viewSection); + model.addAttribute("error_msg", "District does not belong to the selected state"); + return addProjectReportGet(req, principal, model); + } + } + + Set existingFiles = ErrorsforExistingFiles.computeIfAbsent(districtName, + k -> new LinkedHashSet<>()); StateDistrictMapping stateDistrictMapping = stateDistrictMappingService .findByStateAndDistrict(state, district); @@ -6787,6 +6801,10 @@ public String addProjectReportPost(HttpServletRequest req, Model model, Principa else if (fileExtention.equals(CommonData.PDF_EXTENSION)) { if (oldPRFlag) { oldPath = pr.getPdfPath(); + if (oldPath != null && !oldPath.trim().isEmpty()) { + existingFiles.add(CommonData.PDF_EXTENSION); + continue; + } } document = ServiceUtility.uploadMediaFile(file, env, pdfFolder); pr.setPdfPath(document); @@ -6795,6 +6813,10 @@ else if (fileExtention.equals(CommonData.PDF_EXTENSION)) { else if (fileExtention.equals(CommonData.DOC_EXTENSION)) { if (oldPRFlag) { oldPath = pr.getDocPath(); + if (oldPath != null && !oldPath.trim().isEmpty()) { + existingFiles.add(CommonData.DOC_EXTENSION); + continue; + } } document = ServiceUtility.uploadMediaFile(file, env, docFolder); pr.setDocPath(document); @@ -6803,6 +6825,10 @@ else if (fileExtention.equals(CommonData.DOC_EXTENSION)) { else if (fileExtention.equals(CommonData.EXCEL_EXTENSION)) { if (oldPRFlag) { oldPath = pr.getExcelPath(); + if (oldPath != null && !oldPath.trim().isEmpty()) { + existingFiles.add(CommonData.EXCEL_EXTENSION); + continue; + } } document = ServiceUtility.uploadMediaFile(file, env, excelFolder); pr.setExcelPath(document); @@ -6811,6 +6837,10 @@ else if (fileExtention.equals(CommonData.EXCEL_EXTENSION)) { else if (fileExtention.equals(CommonData.IMAGE_EXTENSION)) { if (oldPRFlag) { oldPath = pr.getImgPath(); + if (oldPath != null && !oldPath.trim().isEmpty()) { + existingFiles.add(CommonData.IMAGE_EXTENSION); + continue; + } } document = ServiceUtility.uploadMediaFile(file, env, imageFolder); pr.setImgPath(document); @@ -6824,6 +6854,10 @@ else if (fileExtention.equals(CommonData.IMAGE_EXTENSION)) { if (ext.equals(CommonData.PDF_EXTENSION)) { if (oldPRFlag) { oldPath = pr.getPdfPath(); + if (oldPath != null && !oldPath.trim().isEmpty()) { + existingFiles.add(CommonData.PDF_EXTENSION); + continue; + } } document = ServiceUtility.uploadMediaFile(file, env, pdfFolder); pr.setPdfPath(document); @@ -6832,6 +6866,10 @@ else if (fileExtention.equals(CommonData.IMAGE_EXTENSION)) { else if (ext.equals(CommonData.DOC_EXTENSION)) { if (oldPRFlag) { oldPath = pr.getDocPath(); + if (oldPath != null && !oldPath.trim().isEmpty()) { + existingFiles.add(CommonData.DOC_EXTENSION); + continue; + } } document = ServiceUtility.uploadMediaFile(file, env, docFolder); pr.setDocPath(document); @@ -6840,6 +6878,10 @@ else if (ext.equals(CommonData.DOC_EXTENSION)) { else if (ext.equals(CommonData.EXCEL_EXTENSION)) { if (oldPRFlag) { oldPath = pr.getExcelPath(); + if (oldPath != null && !oldPath.trim().isEmpty()) { + existingFiles.add(CommonData.EXCEL_EXTENSION); + continue; + } } document = ServiceUtility.uploadMediaFile(file, env, excelFolder); pr.setExcelPath(document); @@ -6848,6 +6890,10 @@ else if (ext.equals(CommonData.EXCEL_EXTENSION)) { else if (ext.equals(CommonData.IMAGE_EXTENSION)) { if (oldPRFlag) { oldPath = pr.getImgPath(); + if (oldPath != null && !oldPath.trim().isEmpty()) { + existingFiles.add(CommonData.IMAGE_EXTENSION); + continue; + } } document = ServiceUtility.uploadMediaFile(file, env, imageFolder); pr.setImgPath(document); @@ -6875,17 +6921,14 @@ else if (ext.equals(CommonData.UNSUPPORTED_EXTENSION)) { } - if (oldPath != null && oldPath.endsWith(".zip")) { - - String extractDir = oldPath.replace(".zip", ""); - - Path extractDirPath = Paths.get(env.getProperty("spring.applicationexternalPath.name"), - extractDir); - FileUtils.deleteDirectory(extractDirPath.toFile()); + if (oldPath != null && !oldPath.trim().isEmpty()) { + continue; } + pr.setUser(usr); projectReportService.save(pr); + savedFlag = true; } @@ -6900,7 +6943,24 @@ else if (ext.equals(CommonData.UNSUPPORTED_EXTENSION)) { } model.addAttribute("viewSection", viewSection); - model.addAttribute("success_msg", CommonData.RECORD_SAVE_SUCCESS_MSG); + StringBuilder errorMsg = new StringBuilder(); + + for (Map.Entry> entry : ErrorsforExistingFiles.entrySet()) { + if (!entry.getValue().isEmpty()) { + errorMsg.append(entry.getKey()).append(": ").append(String.join(", ", entry.getValue())).append("
"); + } + } + + if (errorMsg.length() > 0) { + + String finalErrorMessage = "The following files types already exist. To update them, please go to the Edit section.”:
" + + errorMsg.toString(); + model.addAttribute("error_msg", finalErrorMessage); + } + + if (savedFlag) { + model.addAttribute("success_msg", CommonData.RECORD_SAVE_SUCCESS_MSG); + } return addProjectReportGet(req, principal, model); } diff --git a/src/main/java/com/health/utility/CommonData.java b/src/main/java/com/health/utility/CommonData.java index 396b9001..9927e659 100644 --- a/src/main/java/com/health/utility/CommonData.java +++ b/src/main/java/com/health/utility/CommonData.java @@ -316,8 +316,11 @@ public class CommonData { public static final String image_OR_ZIP_OF_IMAGES = "imageOrZipOfImages"; public static final String PDF_OR_ZIP_OF_PDFS = "pdfOrZipOfPdfs"; public static final String Excel_OR_ZIP_OF_EXCELS = "excelOrZipOfexcels"; + public static final LocalDate IMPL_DATE_TRAINING_RESOURCE = LocalDate.of(2026, 3, 5); + public static final String ALL_DISTRICTS = "All Districts"; + public static final String DOCUMENT_ID_TUTORIAL_TIMESCRIPT = "Tts"; public static final String DOCUMENT_ID_TUTORIAL_ORIGINAL_SCRIPT = "Tos"; public static final String DOCUMENT_ID_BROCHURE = "Bro"; From 154d91b46d29c8ad7db47736e3697be954a1278f Mon Sep 17 00:00:00 2001 From: Alok Kumar <59380269+AlokSP@users.noreply.github.com> Date: Tue, 24 Feb 2026 13:03:12 +0530 Subject: [PATCH 05/25] add Project Report template --- .../resources/templates/addProjectReport.html | 433 ++++++++++++++++++ 1 file changed, 433 insertions(+) create mode 100644 src/main/resources/templates/addProjectReport.html diff --git a/src/main/resources/templates/addProjectReport.html b/src/main/resources/templates/addProjectReport.html new file mode 100644 index 00000000..4d33ae18 --- /dev/null +++ b/src/main/resources/templates/addProjectReport.html @@ -0,0 +1,433 @@ + + + + + + +
+
+
+
+
+
+
+
+ + +
+ +
+
+
+
+

Add Project Report

+
+
+
+
+ +
+
+ +
+ +
+ + +
+ + + + + + + + + +
+ +
+ +
+
+ +
+ + +
+ +
+ + + +
+ +
+ + + + (.jpg or .png or .pdf or .docx or .odt or .xlsx or .csv or .zip Only) + Max file size : 700 MB + +
+ +
+
+
+ + + + + + +
+
+
+ + + + +
+ + +
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Date AddedStateDistrictEnable/DisablePdf FileDoc FileExcel FileImage File
+ +
+ +
+
+ +
+ +
+
+
+ + +
+ + View + +   + + Edit + +   + +
+ + +
+ No Pdf available +
+
+
+ +
+
+ + +
+ + View + +   + + Edit + +   + +
+ + +
+ No Doc available +
+
+ +
+ +
+
+ + +
+ + View + +   + + Edit + +   + +
+ + +
+ No Excel available +
+
+ + +
+
+
+ + + +
+ + View + +   + + Edit + +   + +
+ + +
+ No Image available +
+
+ + +
+
+ + + + + +
+ + + +
+ +
+ + +
+ + +
+ + + + + + + From 100a0773547e2c4af967be4f02733f5856356419 Mon Sep 17 00:00:00 2001 From: Alok Kumar <59380269+AlokSP@users.noreply.github.com> Date: Wed, 25 Feb 2026 09:49:24 +0530 Subject: [PATCH 06/25] state district maping repo method --- .../com/health/repository/StateDistrictMappingRepository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/health/repository/StateDistrictMappingRepository.java b/src/main/java/com/health/repository/StateDistrictMappingRepository.java index 9c333b35..4813039a 100644 --- a/src/main/java/com/health/repository/StateDistrictMappingRepository.java +++ b/src/main/java/com/health/repository/StateDistrictMappingRepository.java @@ -11,7 +11,7 @@ public interface StateDistrictMappingRepository extends JpaRepository { - StateDistrictMapping findByStateDisId(int topicLanId); + StateDistrictMapping findByStateDisId(int stateDisId); List findByDistrict(District district); From b7586679ebe8513b71829e4748432017ba26903b Mon Sep 17 00:00:00 2001 From: Alok Kumar <59380269+AlokSP@users.noreply.github.com> Date: Wed, 25 Feb 2026 10:14:39 +0530 Subject: [PATCH 07/25] all districts --- src/main/java/com/health/controller/HomeController.java | 4 ++++ src/main/java/com/health/repository/DistrictRepository.java | 3 +++ src/main/java/com/health/service/DistrictService.java | 3 +++ .../java/com/health/service/impl/DistrictServiceImpl.java | 6 ++++++ src/main/resources/templates/addProjectReport.html | 2 +- 5 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/health/controller/HomeController.java b/src/main/java/com/health/controller/HomeController.java index 162ec67f..9d62f715 100644 --- a/src/main/java/com/health/controller/HomeController.java +++ b/src/main/java/com/health/controller/HomeController.java @@ -6671,6 +6671,10 @@ public String addProjectReportGet(HttpServletRequest req, Principal principal, M states.sort(Comparator.comparing(State::getStateName)); model.addAttribute("states", states); + Optional allDis = districtService.findByDistrictNameIgnoreCase(CommonData.ALL_DISTRICTS); + + allDis.ifPresent(dis -> model.addAttribute("allDisId", dis.getId())); + List projectReportList = new ArrayList<>(); List tempProjectReportList = projectReportService.findAll(); for (ProjectReport temp : tempProjectReportList) { diff --git a/src/main/java/com/health/repository/DistrictRepository.java b/src/main/java/com/health/repository/DistrictRepository.java index d804173c..554e0139 100644 --- a/src/main/java/com/health/repository/DistrictRepository.java +++ b/src/main/java/com/health/repository/DistrictRepository.java @@ -1,6 +1,7 @@ package com.health.repository; import java.util.List; +import java.util.Optional; import org.springframework.data.repository.CrudRepository; @@ -41,4 +42,6 @@ public interface DistrictRepository extends CrudRepository { */ List findAllBystate(State state); + Optional findByDistrictNameIgnoreCase(String districtName); + } diff --git a/src/main/java/com/health/service/DistrictService.java b/src/main/java/com/health/service/DistrictService.java index 911b696c..9e46cb9c 100644 --- a/src/main/java/com/health/service/DistrictService.java +++ b/src/main/java/com/health/service/DistrictService.java @@ -1,6 +1,7 @@ package com.health.service; import java.util.List; +import java.util.Optional; import com.health.model.District; import com.health.model.State; @@ -45,4 +46,6 @@ public interface DistrictService { */ List findAllByState(State state); + Optional findByDistrictNameIgnoreCase(String districtName); + } diff --git a/src/main/java/com/health/service/impl/DistrictServiceImpl.java b/src/main/java/com/health/service/impl/DistrictServiceImpl.java index 7e45986f..5a7777fd 100644 --- a/src/main/java/com/health/service/impl/DistrictServiceImpl.java +++ b/src/main/java/com/health/service/impl/DistrictServiceImpl.java @@ -77,4 +77,10 @@ public List findAllByState(State state) { return local; } + @Override + public Optional findByDistrictNameIgnoreCase(String districtName) { + + return distRepo.findByDistrictNameIgnoreCase(districtName); + } + } diff --git a/src/main/resources/templates/addProjectReport.html b/src/main/resources/templates/addProjectReport.html index 4d33ae18..314fb9c3 100644 --- a/src/main/resources/templates/addProjectReport.html +++ b/src/main/resources/templates/addProjectReport.html @@ -99,7 +99,7 @@

Add Project Report

- +
From ae55251e38419b0bf8d1b8624b0d5b5ed65579e0 Mon Sep 17 00:00:00 2001 From: Alok Kumar <59380269+AlokSP@users.noreply.github.com> Date: Wed, 25 Feb 2026 14:29:22 +0530 Subject: [PATCH 08/25] addProject ajax controller, state and district --- .../com/health/config/SecurityConfig.java | 5 ++ .../com/health/controller/AjaxController.java | 32 +++++++++++++ .../com/health/controller/HomeController.java | 6 ++- src/main/java/com/health/model/City.java | 2 +- src/main/java/com/health/model/District.java | 4 +- src/main/java/com/health/model/State.java | 10 ++-- .../health/repository/DistrictRepository.java | 8 +++- .../health/repository/StateRepository.java | 6 +++ .../service/impl/DistrictServiceImpl.java | 13 ++--- .../health/service/impl/StateServiceImpl.java | 8 ++-- src/main/resources/static/js/ajaxSupport.js | 48 +++++++++++++++++++ .../resources/templates/addProjectReport.html | 23 +++------ .../resources/templates/common/sidebar.html | 15 ++++++ 13 files changed, 139 insertions(+), 41 deletions(-) diff --git a/src/main/java/com/health/config/SecurityConfig.java b/src/main/java/com/health/config/SecurityConfig.java index 3ee25ff3..c724d703 100644 --- a/src/main/java/com/health/config/SecurityConfig.java +++ b/src/main/java/com/health/config/SecurityConfig.java @@ -74,6 +74,9 @@ public static BCryptPasswordEncoder passwordEncoder() { "/enableDisableCourseCatTopic", "/delete-category-topic-from-course", "/createCourse", "/courseName/edit/**", "/updateCourseName", + "/addProjectReport", "/projectReportAdminView/**", "/projectReport/edit/**", "/enableDisableProjectReport", + "/delete-projectReport", + // "/unpublishTutorial/**" }; @@ -102,6 +105,8 @@ public static BCryptPasswordEncoder passwordEncoder() { "/delete-category-topic-from-course", "/createCourse", "/courseName/edit/**", "/updateCourseName", "/addTrainingResource", "/trainingReource/view/**", "/trainingReourceAdminView/**", "/trainingReource/edit/**", "/enableDisableTrainingResource", "/delete-trainingResource", + "/addProjectReport", "/projectReportAdminView/**", "/projectReport/edit/**", "/enableDisableProjectReport", + "/delete-projectReport", }; diff --git a/src/main/java/com/health/controller/AjaxController.java b/src/main/java/com/health/controller/AjaxController.java index 5f03aa6f..dffdefb6 100644 --- a/src/main/java/com/health/controller/AjaxController.java +++ b/src/main/java/com/health/controller/AjaxController.java @@ -2336,6 +2336,38 @@ public ResponseEntity viewOrSharePdfOrImage(@PathVariable String topic * Training Resource End *************************************************************/ + /********************************** + * Projet Report Start + *************************/ + + @RequestMapping("/loadDistrictByStateforPR") + public @ResponseBody TreeMap loadDistrictByStateforPR(@RequestParam(value = "stateId") int stateId, + @RequestParam(value = "allDisId") int allDisId) { + TreeMap districtMaps = new TreeMap<>(); + + if (allDisId != 0) { + District allDistrict = disService.findById(allDisId); + if (allDistrict != null) + districtMaps.put(allDistrict.getDistrictName(), allDistrict.getId()); + + } + + State state = stateService.findById(stateId); + if (state != null) { + List disList = disService.findAllByState(state); + for (District temp : disList) { + + districtMaps.put(temp.getDistrictName(), temp.getId()); + + } + + } + + return districtMaps; + } + + /********************************** Projet Report End *************************/ + @RequestMapping("/loadTopicByCategoryInAssignContri") public @ResponseBody HashMap getTopicByCategoryAssignContri(@RequestParam(value = "id") int id) { diff --git a/src/main/java/com/health/controller/HomeController.java b/src/main/java/com/health/controller/HomeController.java index 9d62f715..fc6bca7e 100644 --- a/src/main/java/com/health/controller/HomeController.java +++ b/src/main/java/com/health/controller/HomeController.java @@ -6673,7 +6673,9 @@ public String addProjectReportGet(HttpServletRequest req, Principal principal, M Optional allDis = districtService.findByDistrictNameIgnoreCase(CommonData.ALL_DISTRICTS); - allDis.ifPresent(dis -> model.addAttribute("allDisId", dis.getId())); + int allDisId = allDis.map(District::getId).orElse(0); + + model.addAttribute("allDisId", allDisId); List projectReportList = new ArrayList<>(); List tempProjectReportList = projectReportService.findAll(); @@ -6727,7 +6729,7 @@ public String addProjectReportPost(HttpServletRequest req, Model model, Principa for (int i = 0; i < districtIds.size(); i++) { if (i < files.size()) - logger.info("File: {}", files.get(i)); + logger.info("File: {}", files.get(i).getOriginalFilename()); if (districtIds.get(i) != 0 && !files.get(i).isEmpty()) { District district = districtService.findById(districtIds.get(i)); diff --git a/src/main/java/com/health/model/City.java b/src/main/java/com/health/model/City.java index 9a697fe3..f3efbd5f 100644 --- a/src/main/java/com/health/model/City.java +++ b/src/main/java/com/health/model/City.java @@ -46,7 +46,7 @@ public class City implements Comparable, Serializable { @JoinColumn(name = "district_id") private District district; - @OneToMany(mappedBy = "city", cascade = CascadeType.ALL, fetch = FetchType.EAGER) + @OneToMany(mappedBy = "city", cascade = CascadeType.ALL, fetch = FetchType.LAZY) private Set events = new HashSet(); public int getId() { diff --git a/src/main/java/com/health/model/District.java b/src/main/java/com/health/model/District.java index c244cdba..a9a03bbb 100644 --- a/src/main/java/com/health/model/District.java +++ b/src/main/java/com/health/model/District.java @@ -50,10 +50,10 @@ public class District implements Comparable, Serializable { @JoinColumn(name = "state_id") private State state; - @OneToMany(mappedBy = "district", cascade = CascadeType.ALL, fetch = FetchType.EAGER) + @OneToMany(mappedBy = "district", cascade = CascadeType.ALL, fetch = FetchType.LAZY) Set cities = new HashSet(); - @OneToMany(mappedBy = "district", cascade = CascadeType.ALL, fetch = FetchType.EAGER) + @OneToMany(mappedBy = "district", cascade = CascadeType.ALL, fetch = FetchType.LAZY) Set events = new HashSet(); @OneToMany(mappedBy = "district", cascade = CascadeType.ALL, fetch = FetchType.LAZY) diff --git a/src/main/java/com/health/model/State.java b/src/main/java/com/health/model/State.java index 4417be5d..83eedac2 100644 --- a/src/main/java/com/health/model/State.java +++ b/src/main/java/com/health/model/State.java @@ -41,10 +41,10 @@ public class State implements Comparable, Serializable { */ private Timestamp dateAdded; - @OneToMany(mappedBy = "state", cascade = CascadeType.ALL, fetch = FetchType.EAGER) - private Set Districts = new HashSet(); + @OneToMany(mappedBy = "state", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + private Set districts = new HashSet(); - @OneToMany(mappedBy = "state", cascade = CascadeType.ALL, fetch = FetchType.EAGER) + @OneToMany(mappedBy = "state", cascade = CascadeType.ALL, fetch = FetchType.LAZY) private Set events = new HashSet(); @OneToMany(mappedBy = "state", cascade = CascadeType.ALL, fetch = FetchType.LAZY) @@ -83,11 +83,11 @@ public void setDateAdded(Timestamp dateAdded) { } public Set getDistricts() { - return Districts; + return districts; } public void setDistricts(Set districts) { - Districts = districts; + this.districts = districts; } @Override diff --git a/src/main/java/com/health/repository/DistrictRepository.java b/src/main/java/com/health/repository/DistrictRepository.java index 554e0139..509e11c6 100644 --- a/src/main/java/com/health/repository/DistrictRepository.java +++ b/src/main/java/com/health/repository/DistrictRepository.java @@ -3,6 +3,7 @@ import java.util.List; import java.util.Optional; +import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import com.health.model.District; @@ -40,8 +41,13 @@ public interface DistrictRepository extends CrudRepository { * @param state state object * @return list of District object */ - List findAllBystate(State state); + List findAllByState(State state); Optional findByDistrictNameIgnoreCase(String districtName); + @Query("SELECT d FROM District d ORDER BY d.districtName") + List findAllOrderByName(); + + List findAllByStateOrderByDistrictNameAsc(State state); + } diff --git a/src/main/java/com/health/repository/StateRepository.java b/src/main/java/com/health/repository/StateRepository.java index 8cc3d62a..3daef706 100644 --- a/src/main/java/com/health/repository/StateRepository.java +++ b/src/main/java/com/health/repository/StateRepository.java @@ -1,5 +1,8 @@ package com.health.repository; +import java.util.List; + +import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import com.health.model.State; @@ -22,4 +25,7 @@ public interface StateRepository extends CrudRepository { */ State findBystateName(String name); + @Query("SELECT s FROM State s ORDER BY s.stateName") + List findAllOrderByName(); + } diff --git a/src/main/java/com/health/service/impl/DistrictServiceImpl.java b/src/main/java/com/health/service/impl/DistrictServiceImpl.java index 5a7777fd..0195b302 100644 --- a/src/main/java/com/health/service/impl/DistrictServiceImpl.java +++ b/src/main/java/com/health/service/impl/DistrictServiceImpl.java @@ -1,6 +1,5 @@ package com.health.service.impl; -import java.util.Collections; import java.util.List; import java.util.Optional; @@ -60,10 +59,8 @@ public District findById(int id) { */ @Override public List findAll() { - // TODO Auto-generated method stub - List local = (List) distRepo.findAll(); - Collections.sort(local); - return local; + + return distRepo.findAllOrderByName(); } /** @@ -71,10 +68,8 @@ public List findAll() { */ @Override public List findAllByState(State state) { - // TODO Auto-generated method stub - List local = distRepo.findAllBystate(state); - Collections.sort(local); - return local; + + return distRepo.findAllByStateOrderByDistrictNameAsc(state); } @Override diff --git a/src/main/java/com/health/service/impl/StateServiceImpl.java b/src/main/java/com/health/service/impl/StateServiceImpl.java index ad6523cd..fed25c24 100644 --- a/src/main/java/com/health/service/impl/StateServiceImpl.java +++ b/src/main/java/com/health/service/impl/StateServiceImpl.java @@ -1,6 +1,5 @@ package com.health.service.impl; -import java.util.Collections; import java.util.List; import java.util.Optional; import java.util.Set; @@ -60,10 +59,9 @@ public State findById(int id) { */ @Override public List findAll() { - // TODO Auto-generated method stub - List local = (List) stateRepo.findAll(); - Collections.sort(local); - return local; + + return stateRepo.findAllOrderByName(); + } /** diff --git a/src/main/resources/static/js/ajaxSupport.js b/src/main/resources/static/js/ajaxSupport.js index 6679e6e0..cc79d734 100644 --- a/src/main/resources/static/js/ajaxSupport.js +++ b/src/main/resources/static/js/ajaxSupport.js @@ -3356,6 +3356,54 @@ $(document).ready(function () { /******************************** Training Resource End ****************************************/ + + +/******************************** Project Report Start *****************************/ + + $("#stateIdPR").change(function() { + + var stateId = $(this).find(":selected").val(); + var allDisId = $("#allDistrict").val(); + + + $.ajax({ + type : "GET", + url : projectPath+"loadDistrictByStateforPR", + data : { + "stateId" : stateId, + "allDisId" : allDisId, + + + }, + contentType : "application/json", + success : function(result) { + + var html = ''; + html += ''; + var len = result.length; + $.each(result , function( key, value ) { + html += ''; + }) + + $(".district-select-pr").prop('disabled',false); + $('.district-select-pr').html(html); + + }, + + error : function(err) { + console.log("not working. ERROR: "+ JSON.stringify(err)); + + } + + }); + + }); + + + +/******************************** Project Report End *******************************/ /***************** changes made by om prakash *********************************************/ diff --git a/src/main/resources/templates/addProjectReport.html b/src/main/resources/templates/addProjectReport.html index 314fb9c3..8fbfd476 100644 --- a/src/main/resources/templates/addProjectReport.html +++ b/src/main/resources/templates/addProjectReport.html @@ -48,7 +48,7 @@ aria-selected="true">Add + aria-selected="false">Project Report View @@ -73,7 +73,7 @@

Add Project Report

- @@ -86,23 +86,14 @@

Add Project Report

- + - + -
+
@@ -111,9 +102,9 @@

Add Project Report

- - +
diff --git a/src/main/resources/templates/common/sidebar.html b/src/main/resources/templates/common/sidebar.html index c3afe394..8c562d4d 100644 --- a/src/main/resources/templates/common/sidebar.html +++ b/src/main/resources/templates/common/sidebar.html @@ -312,6 +312,14 @@ + + +
+ + + + +
+ + + + + + + \ No newline at end of file From b773860b6d25b812936a470dd76fa8703ba8df5f Mon Sep 17 00:00:00 2001 From: Alok Kumar <59380269+AlokSP@users.noreply.github.com> Date: Wed, 18 Mar 2026 16:30:09 +0530 Subject: [PATCH 19/25] project report admin view get --- .../com/health/controller/HomeController.java | 117 ++++++++++++++++++ .../templates/projectReportViewAdmin.html | 8 +- 2 files changed, 121 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/health/controller/HomeController.java b/src/main/java/com/health/controller/HomeController.java index d337e124..adb01038 100644 --- a/src/main/java/com/health/controller/HomeController.java +++ b/src/main/java/com/health/controller/HomeController.java @@ -7440,6 +7440,123 @@ else if (ext.equals(CommonData.UNSUPPORTED_EXTENSION)) { return projectReportEditGet(originalFileType, oldprId, req, model, principal); } + + + + + @GetMapping("/projectReportAdminView/{fileType}/{id}") + public String projectReportViewforAdmin(@PathVariable String fileType, @PathVariable int id, + HttpServletRequest req, Model model, Principal principal) { + + User usr = getUser(principal); + logger.info("{} {} {}", usr.getUsername(), req.getMethod(), req.getRequestURI()); + model.addAttribute("userInfo", usr); + + ProjectReport pr = projectReportService.findByProjectReportId(id); + List filePaths = new ArrayList<>(); + List tempFilepPaths = new ArrayList<>(); + + if (pr == null) { + + return "redirect:/addProjectReport"; + } + String filePath = ""; + + if (fileType.equals(CommonData.Doc_OR_ZIP_OF_DOCS)) { + filePath = pr.getDocPath(); + model.addAttribute("fileType", "Doc"); + + } + + else if (fileType.equals(CommonData.PDF_OR_ZIP_OF_PDFS)) { + filePath = pr.getPdfPath(); + model.addAttribute("fileType", "Pdf"); + } + + else if (fileType.equals(CommonData.image_OR_ZIP_OF_IMAGES)) { + filePath = pr.getImgPath(); + model.addAttribute("fileType", "Image"); + } + + else if (fileType.equals(CommonData.Excel_OR_ZIP_OF_EXCELS)) { + filePath = pr.getExcelPath(); + model.addAttribute("fileType", "Excel"); + } + + if (filePath.toLowerCase().endsWith(".zip")) { + try { + + tempFilepPaths = ServiceUtility.extractZipIfNeeded(filePath, env); + filePaths = ServiceUtility.sortFilePathsNumericOtherwiseLexical(tempFilepPaths); + } catch (IOException e) { + logger.error("Zip Extraction or zip error", e); + + return "redirect:/addProjectReport"; + + } + } + + else { + filePaths.add(ServiceUtility.convertFilePathToUrl(filePath)); + + } + + // Conversion of doc/excel to pdf and pdf to thumbnails. + List finalFilePath = new ArrayList<>(); + + if (!fileType.equals(CommonData.image_OR_ZIP_OF_IMAGES)) { + if (fileType.equals(CommonData.PDF_OR_ZIP_OF_PDFS)) { + for (String str : filePaths) { + + /* + * Here we check png beacuse parent folder may have alreday created thumnails + * and their paths have been added in filePaths from extractZipIfNeeded function + * if zip is alreday extracted then that folder is used for pdf and thumnails + * too. + * + */ + if (!str.endsWith(".png")) { + finalFilePath.add(str); + fileConversionUtility.generateThumbnailFromPdfAndSave(str); + } + + } + } + + else { + // Intially we convert both doc and excel using same libreoffice cmd + for (String str : filePaths) { + /* + * Here we check png and pdf beacuse parent folder may have alreday created + * thumnails and pdfs and their respective paths have been added in filePaths + * from extractZipIfNeeded function if zip is alreday extracted then that folder + * is used for pdf and thumnails too. + * + */ + if (!str.endsWith(".png") && !str.endsWith(".pdf")) { + finalFilePath.add(str); + String pdfPath = fileConversionUtility.convertDoctoPdf(str, doctoPdfCommand); + fileConversionUtility.generateThumbnailFromPdfAndSave(pdfPath); + } + + } + } + } else { + finalFilePath.addAll(filePaths); + } + + model.addAttribute("projectReport", pr); + model.addAttribute("filePaths", finalFilePath); + + for (String str : filePaths) { + logger.info("file Path :{}", str); + } + + return "projectReportViewAdmin"; + } + + + /************************ Project Report End ********************************/ diff --git a/src/main/resources/templates/projectReportViewAdmin.html b/src/main/resources/templates/projectReportViewAdmin.html index 8781b26c..4e95760d 100644 --- a/src/main/resources/templates/projectReportViewAdmin.html +++ b/src/main/resources/templates/projectReportViewAdmin.html @@ -47,7 +47,7 @@
-
+
@@ -76,7 +76,7 @@
- +
@@ -97,7 +97,7 @@
- +
- +
Date: Fri, 20 Mar 2026 15:38:03 +0530 Subject: [PATCH 20/25] Common Elements of Project Reports --- .../common/commonItemsProjectReport.html | 193 ++++++++++++++++++ 1 file changed, 193 insertions(+) create mode 100644 src/main/resources/templates/common/commonItemsProjectReport.html diff --git a/src/main/resources/templates/common/commonItemsProjectReport.html b/src/main/resources/templates/common/commonItemsProjectReport.html new file mode 100644 index 00000000..5d04fb3f --- /dev/null +++ b/src/main/resources/templates/common/commonItemsProjectReport.html @@ -0,0 +1,193 @@ + + + + +
+

+
+ +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + Only authorized users can access Doc or Excel files. + + + + Login + + + + +
+ + + + + From 2319f9064640e35b5ca7eb2c4da17d3f71c22dd7 Mon Sep 17 00:00:00 2001 From: Alok Kumar <59380269+AlokSP@users.noreply.github.com> Date: Mon, 23 Mar 2026 12:23:12 +0530 Subject: [PATCH 21/25] State and district icons --- .../templates/common/commonItemsProjectReport.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/resources/templates/common/commonItemsProjectReport.html b/src/main/resources/templates/common/commonItemsProjectReport.html index 5d04fb3f..02b1c8d2 100644 --- a/src/main/resources/templates/common/commonItemsProjectReport.html +++ b/src/main/resources/templates/common/commonItemsProjectReport.html @@ -135,17 +135,17 @@

Project-Report + th:text="'🏛️ '+ ${#strings.capitalizeWords(#strings.replace(stateName,'_',' '))}"> + th:text="' : 📍 ' + ${#strings.capitalizeWords(#strings.replace(districtName,'_',' '))}"> + th:text="'📍 ' + ${#strings.capitalizeWords(#strings.replace(districtName,'_',' '))}"> From bc862e76c7ab6b38b455110027ad2ff6f8940337 Mon Sep 17 00:00:00 2001 From: Alok Kumar <59380269+AlokSP@users.noreply.github.com> Date: Wed, 25 Mar 2026 12:29:50 +0530 Subject: [PATCH 22/25] Project-Reports --- .../com/health/controller/HomeController.java | 221 +++++++++++++++++- .../com/health/utility/ServiceUtility.java | 26 +++ 2 files changed, 239 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/health/controller/HomeController.java b/src/main/java/com/health/controller/HomeController.java index adb01038..f0ea7403 100644 --- a/src/main/java/com/health/controller/HomeController.java +++ b/src/main/java/com/health/controller/HomeController.java @@ -7440,13 +7440,10 @@ else if (ext.equals(CommonData.UNSUPPORTED_EXTENSION)) { return projectReportEditGet(originalFileType, oldprId, req, model, principal); } - - - - + @GetMapping("/projectReportAdminView/{fileType}/{id}") - public String projectReportViewforAdmin(@PathVariable String fileType, @PathVariable int id, - HttpServletRequest req, Model model, Principal principal) { + public String projectReportViewforAdmin(@PathVariable String fileType, @PathVariable int id, HttpServletRequest req, + Model model, Principal principal) { User usr = getUser(principal); logger.info("{} {} {}", usr.getUsername(), req.getMethod(), req.getRequestURI()); @@ -7555,8 +7552,216 @@ else if (fileType.equals(CommonData.Excel_OR_ZIP_OF_EXCELS)) { return "projectReportViewAdmin"; } - - + @GetMapping("/Project-Reports") + public String viewAndDownloadProjectReport(HttpServletRequest req, + @RequestParam(name = "stateNamePR", required = false, defaultValue = "0") int stateId, + @RequestParam(name = "districtNamePR", required = false, defaultValue = "0") int districtId, + @RequestParam(name = "inputFileTypePR", required = false, defaultValue = "0") int inputFileType, + + @RequestParam(name = "action", required = false, defaultValue = "") String action, + + Principal principal, Model model) { + + User usr = getUser(principal); + logger.info("{} {} {}", usr.getUsername(), req.getMethod(), req.getRequestURI()); + model.addAttribute("usr", usr.getUsername()); + boolean authorizedUsr = false; + if (usr.getUsername() != null) { + Role role = roleService.findByname(CommonData.contributorRole); + int roleId = role.getRoleId(); + Set usrRoles = usr.getUserRoles(); + + for (UserRole ur : usrRoles) { + if (ur.getRole().getRoleId() == roleId) { + authorizedUsr = true; + break; + } + } + + } + model.addAttribute("authorizedUsr", authorizedUsr); + + model.addAttribute("stateId", stateId); + model.addAttribute("districtId", districtId); + model.addAttribute("inputFileType", inputFileType); + model.addAttribute("baseUrl", baseUrl); + + navigationLinkCheck(model); + + State state = stateId != 0 ? stateService.findById(stateId) : null; + District district = districtId != 0 ? districtService.findById(districtId) : null; + if (state == null || district == null || inputFileType == 0) { + // getModelTrainingResource(model); + + model.addAttribute("error_msg", "Please select all fields"); + return "projectReports"; + + } + State tempstate = stateService.findById(stateId); + String stateName = tempstate.getStateName().replace(" ", "_").replaceAll("_+", "_"); + District tempDistrict = districtService.findById(districtId); + String districtName = tempDistrict.getDistrictName().replace(" ", "_").replaceAll("_+", "_"); + model.addAttribute("stateName", stateName); + model.addAttribute("districtName", districtName); + + Map fileTypeAndValue = ServiceUtility.getFileTypeIdAndValue(inputFileType); + String fileTypeString = fileTypeAndValue.get(inputFileType); + model.addAttribute("fileTypeString", fileTypeString); + + StateDistrictMapping sdm = stateDistrictMappingService.findByStateAndDistrict(state, district); + List prList = projectReportService.findByStateDistrictMapping(sdm); + if (prList.isEmpty() || prList.size() > 1) { + // getModelTrainingResource(model); + model.addAttribute("error_msg", "Invalid Data"); + return "projectReports"; + } + + ProjectReport pr = prList.get(0); + int prId = pr.getProjectReportId(); + model.addAttribute("prId", prId); + + String token = ""; + if (fileTypeString.equals("Doc")) { + token = pr.getDocToken(); + } else if (fileTypeString.equals("Excel")) { + token = pr.getExcelToken(); + } else if (fileTypeString.equals("Pdf")) { + token = pr.getPdfToken(); + } else if (fileTypeString.equals("Image")) { + token = pr.getImgToken(); + } + + String filePath = ServiceUtility.getProjectReportFilePath(pr, inputFileType); + if (filePath.isEmpty()) { + // getModelTrainingResource(model); + model.addAttribute("error_msg", "No File Found"); + return "projectReports"; + } + + String finalUrl = ServiceUtility.convertFilePathToUrl(filePath); + boolean allowed = true; + + if ((fileTypeString.equals("Doc") || fileTypeString.equals("Excel")) && (usr == null || !authorizedUsr)) { + + allowed = false; + + } + + if (allowed) { + model.addAttribute("token", token); + } else { + model.addAttribute("token", ""); + } + + if (action != null && !action.isEmpty() && action.equals("download")) { + model.addAttribute("action", action); + if (!allowed) { + + model.addAttribute("error_msg", "Authentication Error"); + + } else { + try { + + String normalizedBaseUrl = baseUrl.endsWith("/") ? baseUrl.substring(0, baseUrl.length() - 1) + : baseUrl; + + return "redirect:" + normalizedBaseUrl + "/downloadProjectReport?fileType=" + fileTypeString + + "&token=" + token; + + } catch (Exception e) { + logger.error("Error in Download Project Report", e); + } + } + + } + + if (action != null && !action.isEmpty() && action.equals("view")) { + List filePaths = new ArrayList<>(); + List tempFilepPaths = new ArrayList<>(); + List sortedFilePaths = new ArrayList<>(); + if (filePath.toLowerCase().endsWith(".zip")) { + try { + tempFilepPaths = ServiceUtility.extractZipIfNeeded(filePath, env); + sortedFilePaths = ServiceUtility.sortFilePathsNumericOtherwiseLexical(tempFilepPaths); + + if (fileTypeString.equals("Doc") || fileTypeString.equals("Excel")) { + for (String str : sortedFilePaths) { + if (!str.endsWith(".png") && !str.endsWith(".pdf")) { + filePaths.add(str); + } + } + } else if (fileTypeString.equals("Pdf")) { + for (String str : sortedFilePaths) { + if (!str.endsWith(".png")) { + filePaths.add(str); + } + } + } else { + filePaths.addAll(sortedFilePaths); + } + + } catch (IOException e) { + logger.error("Zip Extraction or zip error", e); + + model.addAttribute("error_msg", "ZIP extraction failed. Please try again later."); + return "projectReports"; + + } + } + + else { + filePaths.add(ServiceUtility.convertFilePathToUrl(filePath)); + + } + List fileNames = new ArrayList<>(); + for (String str : filePaths) { + + Path path = Paths.get(env.getProperty("spring.applicationexternalPath.name"), str); + String fileName = path.getFileName().toString(); + + fileNames.add(fileName); + + } + List pageIndexes = IntStream.range(0, filePaths.size()).boxed().collect(Collectors.toList()); + + if (allowed) { + model.addAttribute("pageIndexes", pageIndexes); + // model.addAttribute("filePaths", filePaths); + model.addAttribute("fileNames", fileNames); + } + + model.addAttribute("action", action); + } + + if (action != null && !action.isEmpty() && action.equals("share")) { + + model.addAttribute("action", action); + if (allowed) + model.addAttribute("shareUrl", finalUrl); + + } + + State localState = null; + District localDistrict = null; + String localFile = null; + + // getModelTrainingResource(model, topicId, lanId, inputFileType); + + if (stateId != 0) { + localState = stateService.findById(stateId); + model.addAttribute("stateforQuery", localState); + } + if (districtId != 0) { + localDistrict = districtService.findById(districtId); + model.addAttribute("districtforQuery", localDistrict); + } + if (inputFileType != 0) { + + model.addAttribute("fileTypeQuery", localFile); + } + + return "trainingResources"; + } /************************ Project Report End ********************************/ diff --git a/src/main/java/com/health/utility/ServiceUtility.java b/src/main/java/com/health/utility/ServiceUtility.java index 5a0b4866..f363990b 100644 --- a/src/main/java/com/health/utility/ServiceUtility.java +++ b/src/main/java/com/health/utility/ServiceUtility.java @@ -1414,6 +1414,32 @@ public static String getTrainingResourceFilePath(TrainingResource tr, int fileId return isNotBlank(path) ? path : ""; } + public static String getProjectReportFilePath(ProjectReport pr, int fileId) { + if (pr == null) { + return ""; + } + + String path; + switch (fileId) { + case CommonData.DOC: + path = pr.getDocPath(); + break; + case CommonData.EXCEL: + path = pr.getExcelPath(); + break; + case CommonData.IMAGE: + path = pr.getImgPath(); + break; + case CommonData.PDF: + path = pr.getPdfPath(); + break; + default: + return ""; + } + + return isNotBlank(path) ? path : ""; + } + public static boolean isNotBlank(String s) { return s != null && !s.isEmpty(); } From 03755ae5a27a29481fc3b7b83c005f2cbb14a371 Mon Sep 17 00:00:00 2001 From: Alok Kumar <59380269+AlokSP@users.noreply.github.com> Date: Thu, 26 Mar 2026 11:11:10 +0530 Subject: [PATCH 23/25] state , district and filetype AjaxController --- .../com/health/config/SecurityConfig.java | 3 +- .../com/health/controller/AjaxController.java | 226 ++++++++++++++++++ .../com/health/controller/HomeController.java | 37 ++- .../com/health/utility/ServiceUtility.java | 42 ++++ 4 files changed, 301 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/health/config/SecurityConfig.java b/src/main/java/com/health/config/SecurityConfig.java index 7322c8d4..3adaf108 100644 --- a/src/main/java/com/health/config/SecurityConfig.java +++ b/src/main/java/com/health/config/SecurityConfig.java @@ -60,7 +60,8 @@ public static BCryptPasswordEncoder passwordEncoder() { "/downloadHealthTutorials/**", "/Training-Resource/**", "/Training-Resources/**", "/loadLanAndFileTypeByTopic/**", "/loadTopicAndFileTypeByLan/**", "/loadTopicAndLanByFileType/**", "/downloadTrainingResource/**", "/shared-Training-Resource/**", "/shared-training-resource-file/**", - "/check-deployment", "/training-resources/view-share/**" }; + "/check-deployment", "/training-resources/view-share/**", "/loadDistrictAndFileTypeByState/**", + "/loadStateAndFileTypeByDistrict/**", "/loadStateAndDistrictByFileType/**", "/Project-Reports/**" }; /** * url matcher for SUPERADMIN diff --git a/src/main/java/com/health/controller/AjaxController.java b/src/main/java/com/health/controller/AjaxController.java index 6ea4db11..7bb6a9e5 100644 --- a/src/main/java/com/health/controller/AjaxController.java +++ b/src/main/java/com/health/controller/AjaxController.java @@ -78,6 +78,7 @@ import com.health.model.PromoVideo; import com.health.model.ResearchPaper; import com.health.model.State; +import com.health.model.StateDistrictMapping; import com.health.model.Testimonial; import com.health.model.Topic; import com.health.model.TopicCategoryMapping; @@ -117,6 +118,7 @@ import com.health.service.PromoVideoService; import com.health.service.ResearchPaperService; import com.health.service.RoleService; +import com.health.service.StateDistrictMappingService; import com.health.service.StateService; import com.health.service.TestimonialService; import com.health.service.TopicCategoryMappingService; @@ -300,6 +302,9 @@ public class AjaxController { @Autowired private ProjectReportService projectReportService; + @Autowired + private StateDistrictMappingService stateDistrictMappingService; + @Value("${downloadLimit}") private int downloadLimit; @@ -2444,6 +2449,227 @@ public ResponseEntity deleteProjectReport(@RequestParam("projectReportId } } + /* + * Function to load District and FileType by State Author: Alok Kumar + */ + + @RequestMapping("/loadDistrictAndFileTypeByState") + public @ResponseBody ArrayList> getDistrictAndFileTypeByState( + @RequestParam(value = "stateId") int stateId, @RequestParam(value = "districtId") int districtId, + @RequestParam(value = "fileTypeId") int fileTypeId) { + + ArrayList> arlist = new ArrayList<>(); + + Map fileTypes = new TreeMap<>(); + + Map districts = new TreeMap<>(); + + State state = stateId != 0 ? stateService.findById(stateId) : null; + District district = districtId != 0 ? disService.findById(districtId) : null; + Map fileTypeIdAndValue = fileTypeId != 0 ? ServiceUtility.getFileTypeIdAndValue(fileTypeId) + : null; + + List localStateDistrictList = new ArrayList<>(); + + // To find FileTypes + if (state != null && district != null) { + StateDistrictMapping sdm = stateDistrictMappingService.findByStateAndDistrict(state, district); + if (sdm != null) + localStateDistrictList.add(sdm); + } else if (state != null) { + localStateDistrictList = stateDistrictMappingService.findByState(state); + } else { + localStateDistrictList = stateDistrictMappingService.findAll(); + } + + List prList = projectReportService + .findByStateDistrictMappingInAndStatusTrue(localStateDistrictList); + + if (!prList.isEmpty()) { + + for (ProjectReport temp : prList) { + + ServiceUtility.getFileTypeIdAndValueforProjectReport(temp) + .forEach((id, type) -> fileTypes.put(type, id)); + + } + } + + // to find districts + if (state != null) { + localStateDistrictList = stateDistrictMappingService.findByState(state); + } else { + localStateDistrictList = stateDistrictMappingService.findAll(); + } + + prList = projectReportService.findByStateDistrictMappingInAndStatusTrue(localStateDistrictList); + List newprList1 = new ArrayList<>(); + if (fileTypeIdAndValue != null && !fileTypeIdAndValue.isEmpty()) { + Map.Entry entry = fileTypeIdAndValue.entrySet().iterator().next(); + int id = entry.getKey(); + for (ProjectReport temp : prList) { + if (ServiceUtility.isProjectReportFilePresent(temp, id)) { + newprList1.add(temp); + } + } + } + if (!newprList1.isEmpty()) + prList = newprList1; + + for (ProjectReport pr : prList) { + + District dis = pr.getStateDistrictMapping().getDistrict(); + districts.put(dis.getDistrictName(), dis.getId()); + + } + + arlist.add(districts); + arlist.add(fileTypes); + + return arlist; + + } + + /* + * Function to load State and FileType by District Author: Alok Kumar + */ + + @RequestMapping("/loadStateAndFileTypeByDistrict") + public @ResponseBody ArrayList> getStateAndFileTypeByDistrict( + @RequestParam(value = "stateId") int stateId, @RequestParam(value = "districtId") int districtId, + @RequestParam(value = "fileTypeId") int fileTypeId) { + ArrayList> arlist = new ArrayList<>(); + + Map states = new TreeMap<>(); + Map fileTypes = new TreeMap<>(); + + State state = stateId != 0 ? stateService.findById(stateId) : null; + District district = districtId != 0 ? disService.findById(districtId) : null; + Map fileTypeIdAndValue = fileTypeId != 0 ? ServiceUtility.getFileTypeIdAndValue(fileTypeId) + : null; + + List sdm = district != null ? stateDistrictMappingService.findByDistrict(district) + : stateDistrictMappingService.findAll(); + List prList = projectReportService.findByStateDistrictMappingInAndStatusTrue(sdm); + List newprList = new ArrayList<>(); + if (fileTypeIdAndValue != null && !fileTypeIdAndValue.isEmpty()) { + Map.Entry entry = fileTypeIdAndValue.entrySet().iterator().next(); + int id = entry.getKey(); + for (ProjectReport temp : prList) { + if (ServiceUtility.isProjectReportFilePresent(temp, id)) { + newprList.add(temp); + } + } + } + + if (!newprList.isEmpty()) + prList = newprList; + + for (ProjectReport pr : prList) { + // To find State + State stateTemp = pr.getStateDistrictMapping().getState(); + int prStateId = stateTemp.getId(); + states.put(stateTemp.getStateName(), stateTemp.getId()); + + // To find FileType + if (stateId == 0 || prStateId == stateId) { + ServiceUtility.getFileTypeIdAndValueforProjectReport(pr).forEach((id, type) -> fileTypes.put(type, id)); + } + + } + + arlist.add(states); + arlist.add(fileTypes); + + return arlist; + + } + + /* + * Function to load State and District by FileType Author: Alok Kumar + */ + + @RequestMapping("/loadStateAndDistrictByFileType") + public @ResponseBody ArrayList> getStateAndDistrictByFileType( + @RequestParam(value = "stateId") int stateId, @RequestParam(value = "districtId") int districtId, + @RequestParam(value = "fileTypeId") int fileTypeId) { + + ArrayList> arlist = new ArrayList<>(); + Map states = new TreeMap<>(); + Map districts = new TreeMap<>(); + + State state = stateId != 0 ? stateService.findById(stateId) : null; + District district = districtId != 0 ? disService.findById(districtId) : null; + + Map fileTypeIdAndValue = fileTypeId != 0 ? ServiceUtility.getFileTypeIdAndValue(fileTypeId) + : null; + + List localstateDistrictList = new ArrayList<>(); + if (district != null) { + localstateDistrictList = stateDistrictMappingService.findByDistrict(district); + } else { + localstateDistrictList = stateDistrictMappingService.findAll(); + } + + List prList = projectReportService + .findByStateDistrictMappingInAndStatusTrue(localstateDistrictList); + List newprList = new ArrayList<>(); + if (fileTypeIdAndValue != null && !fileTypeIdAndValue.isEmpty()) { + Map.Entry entry = fileTypeIdAndValue.entrySet().iterator().next(); + int id = entry.getKey(); + for (ProjectReport temp : prList) { + if (ServiceUtility.isProjectReportFilePresent(temp, id)) { + newprList.add(temp); + } + } + } + + if (!newprList.isEmpty()) + prList = newprList; + + for (ProjectReport pr : prList) { + // To find State + State stateTemp = pr.getStateDistrictMapping().getState(); + states.put(stateTemp.getStateName(), stateTemp.getId()); + + } + + // to find districts + + if (state != null) { + localstateDistrictList = stateDistrictMappingService.findByState(state); + } else { + localstateDistrictList = stateDistrictMappingService.findAll(); + } + + prList = projectReportService.findByStateDistrictMappingInAndStatusTrue(localstateDistrictList); + List newprList1 = new ArrayList<>(); + if (fileTypeIdAndValue != null && !fileTypeIdAndValue.isEmpty()) { + Map.Entry entry = fileTypeIdAndValue.entrySet().iterator().next(); + int id = entry.getKey(); + for (ProjectReport temp : prList) { + if (ServiceUtility.isProjectReportFilePresent(temp, id)) { + newprList1.add(temp); + } + } + } + if (!newprList1.isEmpty()) + prList = newprList1; + + for (ProjectReport pr : prList) { + + District dis = pr.getStateDistrictMapping().getDistrict(); + districts.put(dis.getDistrictName(), dis.getId()); + + } + + arlist.add(states); + arlist.add(districts); + + return arlist; + + } + /********************************** Projet Report End *************************/ @RequestMapping("/loadTopicByCategoryInAssignContri") diff --git a/src/main/java/com/health/controller/HomeController.java b/src/main/java/com/health/controller/HomeController.java index f0ea7403..2c3e10de 100644 --- a/src/main/java/com/health/controller/HomeController.java +++ b/src/main/java/com/health/controller/HomeController.java @@ -921,6 +921,31 @@ private void getModelTrainingResource(Model model) { getModelTrainingResource(model, 0, 0, 0); } + private void getModelProjectReport(Model model, int stateId, int districtId, int fileTypeId) { + + ArrayList> arlist = ajaxController.getDistrictAndFileTypeByState(stateId, districtId, + fileTypeId); + ArrayList> arlist1 = ajaxController.getStateAndFileTypeByDistrict(stateId, districtId, + fileTypeId); + Map states = arlist1.get(0); + Map fileType = arlist1.get(1); + Map districts = arlist.get(0); + + model.addAttribute("states", states); + model.addAttribute("districts", districts); + model.addAttribute("fileTypes", fileType); + + model.addAttribute("localState", stateId); + model.addAttribute("localDistrict", districtId); + model.addAttribute("localFile", fileTypeId); + model.addAttribute("districtCount", districts.size()); + + } + + private void getModelProjectReport(Model model) { + getModelProjectReport(model, 0, 0, 0); + } + @RequestMapping("/") public String index(Model model) { @@ -7591,7 +7616,7 @@ public String viewAndDownloadProjectReport(HttpServletRequest req, State state = stateId != 0 ? stateService.findById(stateId) : null; District district = districtId != 0 ? districtService.findById(districtId) : null; if (state == null || district == null || inputFileType == 0) { - // getModelTrainingResource(model); + getModelProjectReport(model); model.addAttribute("error_msg", "Please select all fields"); return "projectReports"; @@ -7611,7 +7636,7 @@ public String viewAndDownloadProjectReport(HttpServletRequest req, StateDistrictMapping sdm = stateDistrictMappingService.findByStateAndDistrict(state, district); List prList = projectReportService.findByStateDistrictMapping(sdm); if (prList.isEmpty() || prList.size() > 1) { - // getModelTrainingResource(model); + getModelProjectReport(model); model.addAttribute("error_msg", "Invalid Data"); return "projectReports"; } @@ -7633,7 +7658,7 @@ public String viewAndDownloadProjectReport(HttpServletRequest req, String filePath = ServiceUtility.getProjectReportFilePath(pr, inputFileType); if (filePath.isEmpty()) { - // getModelTrainingResource(model); + getModelProjectReport(model); model.addAttribute("error_msg", "No File Found"); return "projectReports"; } @@ -7726,7 +7751,7 @@ public String viewAndDownloadProjectReport(HttpServletRequest req, if (allowed) { model.addAttribute("pageIndexes", pageIndexes); - // model.addAttribute("filePaths", filePaths); + model.addAttribute("fileNames", fileNames); } @@ -7745,7 +7770,7 @@ public String viewAndDownloadProjectReport(HttpServletRequest req, District localDistrict = null; String localFile = null; - // getModelTrainingResource(model, topicId, lanId, inputFileType); + getModelProjectReport(model, stateId, districtId, inputFileType); if (stateId != 0) { localState = stateService.findById(stateId); @@ -7760,7 +7785,7 @@ public String viewAndDownloadProjectReport(HttpServletRequest req, model.addAttribute("fileTypeQuery", localFile); } - return "trainingResources"; + return "projectReports"; } /************************ Project Report End ********************************/ diff --git a/src/main/java/com/health/utility/ServiceUtility.java b/src/main/java/com/health/utility/ServiceUtility.java index f363990b..70d98532 100644 --- a/src/main/java/com/health/utility/ServiceUtility.java +++ b/src/main/java/com/health/utility/ServiceUtility.java @@ -1369,6 +1369,29 @@ public static Map getFileTypeIdAndValue(TrainingResource tr) { return result; } + public static Map getFileTypeIdAndValueforProjectReport(ProjectReport pr) { + Map result = new HashMap<>(); + + if (isNotBlank(pr.getDocPath())) { + result.put(CommonData.DOC, "Doc"); + + } + if (isNotBlank(pr.getExcelPath())) { + result.put(CommonData.EXCEL, "Excel"); + + } + if (isNotBlank(pr.getImgPath())) { + result.put(CommonData.IMAGE, "Image"); + + } + if (isNotBlank(pr.getPdfPath())) { + result.put(CommonData.PDF, "Pdf"); + + } + + return result; + } + public static boolean isTrainingResourceFilePresent(TrainingResource tr, int fileId) { if (tr == null) { return false; @@ -1388,6 +1411,25 @@ public static boolean isTrainingResourceFilePresent(TrainingResource tr, int fil } } + public static boolean isProjectReportFilePresent(ProjectReport pr, int fileId) { + if (pr == null) { + return false; + } + + switch (fileId) { + case CommonData.DOC: + return isNotBlank(pr.getDocPath()); + case CommonData.EXCEL: + return isNotBlank(pr.getExcelPath()); + case CommonData.IMAGE: + return isNotBlank(pr.getImgPath()); + case CommonData.PDF: + return isNotBlank(pr.getPdfPath()); + default: + return false; + } + } + public static String getTrainingResourceFilePath(TrainingResource tr, int fileId) { if (tr == null) { return ""; From 6dd25bb0e860cb8ec18971b4852af686e977c40a Mon Sep 17 00:00:00 2001 From: Alok Kumar <59380269+AlokSP@users.noreply.github.com> Date: Fri, 27 Mar 2026 17:50:08 +0530 Subject: [PATCH 24/25] dynamic dropdowns for state, district, and file type in jquery --- src/main/resources/static/js/ajaxSupport.js | 348 ++++++++++++++++++++ 1 file changed, 348 insertions(+) diff --git a/src/main/resources/static/js/ajaxSupport.js b/src/main/resources/static/js/ajaxSupport.js index 16e9cf51..fdce4840 100644 --- a/src/main/resources/static/js/ajaxSupport.js +++ b/src/main/resources/static/js/ajaxSupport.js @@ -3521,6 +3521,354 @@ $('.enableProjetcReport').click(function() { }); +/** + function to load district and fileType by state + author: Alok Kumar + + */ + + function loadDistrictAndFileTypeByState(stateId, districId, fileTypeId) { + $.ajax({ + type : "GET", + url : projectPath+"loadDistrictAndFileTypeByState", + data : { + "stateId" : stateId, + "districId":districId, + "fileTypeId":fileTypeId + }, + contentType : "application/json", + success : function(resultarlist) { + var result= resultarlist[0]; + + console.log(result); + var html = ''; + html += ''; + + $.each(result, function (value, key) { + var selected = (districId == key) ? "selected" : ""; + html += ``; + }); + + $("#districNamePR").prop('disabled', false); + $('#districNamePR').html(html); + + result= resultarlist[1]; + + console.log(result); + var html = ''; + html += ''; + $.each(result, function( value ,key ) { + var selected=(fileTypeId==key)?"selected":""; + html += ``; + }) + $("#inputFileTypePR").prop('disabled',false); + $('#inputFileTypePR').html(html); + if (stateId != 0) { + $("#stateResetDivPR").show(); + } else { + $("#stateResetDivPR").hide(); + } + + + }, + error : function(err) { + console.log("not working. ERROR: "+ JSON.stringify(err)); + } + }); + } + + $( "#stateNamePR" ).change(function() { + + var stateId = $(this).val(); + var districId = $("#districtNamePR").val(); + var fileTypeId=$("#inputFileTypePR").val(); + loadDistrictAndFileTypeByState(stateId, districId, fileTypeId); + + }); + + $( "#stateResetPR" ).click(function() { + + var stateId = 0; + + $("#stateNamePR").val("0"); + var districId = $("#districtNamePR").val(); + var fileTypeId=$("#inputFileTypePR").val(); + + loadDistrictAndFileTypeByState(stateId, districId, fileTypeId); + return false; + + }); + + + + + + /* + Function to load state and fileType by district + author:Alok Kumar + + */ + + function loadStateAndFileTypeByDistrict(stateId, districtId, fileTypeId){ + $.ajax({ + type : "GET", + url : projectPath+"loadStateAndFileTypeByDistrict", + data : { + "stateId" : stateId, + "districtId":districtId, + "fileTypeId":fileTypeId + }, + contentType : "application/json", + success : function(resultarlist) { + var result= resultarlist[0]; + + console.log(result); + var html = ''; + html += ''; + $.each(result , function( value ,key) { + var selected=(stateId==key)?"selected":""; + html += ``; + }) + $("#stateNamePR").prop('disabled',false); + $('#stateNamePR').html(html); + + result= resultarlist[1]; + + console.log(result); + var html = ''; + html += ''; + $.each(result, function( value,key ) { + var selected=(fileTypeId==key)?"selected":""; + html += ``; + }) + $("#inputFileTypePR").prop('disabled',false); + $('#inputFileTypePR').html(html); + if (districtId != 0) { + $("#districtResetDivPR").show(); + } else { + $("#districtResetDivPR").hide(); + } + + }, + error : function(err) { + console.log("not working. ERROR: "+ JSON.stringify(err)); + } + }); + + } + + $( "#districtNamePR" ).change(function() { + var districtId = $(this).val(); + var stateId = $("#stateNamePR").val(); + var fileTypeId=$("#inputFileTypePR").val(); + loadStateAndFileTypeByDistrict(stateId, districtId, fileTypeId); + + }); + + $( "#districtResetPR" ).click(function() { + var districtId = 0; + $("#districtNamePR").val("0"); + var fileTypeId = $("#inputFileTypePR").val(); + var stateId=$("#stateNamePR").val(); + loadStateAndFileTypeByDistrict(stateId, districtId, fileTypeId); + return false; + + }); + + + + /* + Function to load State and District by FileType + author:Alok Kumar + + */ + + function loadStateAndDistrictByFileType(stateId, districtId, fileTypeId){ + + $.ajax({ + type : "GET", + url : projectPath+"loadStateAndDistrictByFileType", + data : { + "stateId" : stateId, + "districtId":districtId, + "fileTypeId":fileTypeId + + }, + contentType : "application/json", + success : function(resultarlist) { + var result= resultarlist[0]; + + console.log(result); + var html = ''; + html += ''; + $.each(result , function( value ,key ) { + var selected=(stateId==key)?"selected":""; + html += ``; + }) + $("#stateNamePR").prop('disabled',false); + $('#stateNamePR').html(html); + + result= resultarlist[1]; + + console.log(result); + var html = ''; + html += ''; + $.each(result, function( value ,key ) { + var selected=(districtId==key)?"selected":""; + html += ``; + }) + $("#districtNamePR").prop('disabled',false); + $('#districtNamePR').html(html); + + if (fileTypeId != 0) { + $("#fileResetDivPR").show(); + } else { + $("#fileResetDivPR").hide(); + } + + }, + error : function(err) { + console.log("not working. ERROR: "+ JSON.stringify(err)); + } + }); + + } + + $('#inputFileTypePR').change(function() { + var fileTypeId = $(this).val(); + var stateId = $("#stateNamePR").val(); + var districtId=$("#districtNamePR").val(); + loadStateAndDistrictByFileType(stateId, districtId, fileTypeId) + + + }); + + $( "#fileResetPR" ).click(function() { + + var fileTypeId = 0; + $("#inputFileTypePR").val("0"); + var districtId = $("#districtNamePR").val(); + var stateId=$("#stateNamePR").val(); + + loadStateAndDistrictByFileType(stateId, districtId, fileTypeId) + + return false; + + }); + + $( "#btnClearProjectReport" ).click(function() { + + + $("input[name='action']").prop("checked", false); + + var fileTypeId = 0; + $("#inputFileTypePR").val("0"); + var districtId =0; + $("#districtNamePR").val("0"); + var stateId=0; + $("#stateNamePR").val("0"); + + + + loadStateAndDistrictByFileType(stateId, districtId, fileTypeId); + loadDistrictAndFileTypeByState(stateId, districId, fileTypeId); + loadStateAndFileTypeByDistrict(stateId, districtId, fileTypeId); + + return false; + + }); + + + + + +$(document).ready(function () { + + $("#formProjectReport").on("submit", function (e) { + + + var stateId = $("#stateNamePR").val(); + var districtId = $("#districtNamePR").val(); + var fileType = $("#inputFileTypePR").val(); + var action = $("input[name='action']:checked").val(); + const usrLoggedIn =$("#usrValuePR").val() == "true"; + const authorizedUsr =$("#authorizedUsrValuePR").val() == "true"; + var fileTypeString=$("#fileTypeStringPR").val(); + + $("#formErrorPR").addClass("d-none").text(""); + + if (!stateId || stateId == 0) { + e.preventDefault(); + showError("Please select State"); + return; + } + if (!districtId || districtId == 0) { + e.preventDefault(); + showError("Please select District"); + return; + } + if (!fileType || fileType == 0) { + e.preventDefault(); + showError("Please select File Type"); + return; + } + if (!action) { + e.preventDefault(); + showError("Please select an action (View / Download / Share)"); + return; + } + + var baseUrl = "/Project-Reports" + + "?stateNamePR=" + encodeURIComponent(stateId) + + "&districtNamePR=" + encodeURIComponent(districtId) + + "&inputFileTypePR=" + encodeURIComponent(fileType); + + + if (action === "download") { + if (fileTypeString === "Pdf" || fileTypeString === "Image") { + e.preventDefault(); + window.location.href = baseUrl + "&action=download"; + } + + if (fileTypeString === "Doc" || fileTypeString === "Excel") { + if (usrLoggedIn && authorizedUsr) { + e.preventDefault(); + window.location.href = baseUrl + "&action=download"; + } + + } + } + }); + + function showError(msg) { + $("#formErrorPR").removeClass("d-none").text(msg); + } + + + $("#copyShareLinkPR").click(function () { + var text = $(".shareLink").val(); + + if (navigator.clipboard) { + + navigator.clipboard.writeText(text).then(function () { + alert("Link copied to clipboard"); + }).catch(function (err) { + console.error("Failed to copy: ", err); + alert("Unable to copy link"); + }); + } else { + + var copyText = document.querySelector(".shareLink"); + copyText.select(); + copyText.setSelectionRange(0, 99999); + document.execCommand("copy"); + alert("Link copied to clipboard"); + } +}); + + +}); + /******************************** Project Report End *******************************/ From bd0e55c5639d8d1a6a059c00dc3967a521143e50 Mon Sep 17 00:00:00 2001 From: Alok Kumar <59380269+AlokSP@users.noreply.github.com> Date: Mon, 30 Mar 2026 17:05:07 +0530 Subject: [PATCH 25/25] Project Reports Template --- .../com/health/controller/HomeController.java | 6 + src/main/resources/static/js/ajaxSupport.js | 22 +- .../common/commonItemsProjectReport.html | 4 +- src/main/resources/templates/index.html | 1 + .../resources/templates/projectReports.html | 464 ++++++++++++++++++ .../resources/templates/tutorialList.html | 1 + 6 files changed, 485 insertions(+), 13 deletions(-) create mode 100644 src/main/resources/templates/projectReports.html diff --git a/src/main/java/com/health/controller/HomeController.java b/src/main/java/com/health/controller/HomeController.java index 2c3e10de..069fd4e3 100644 --- a/src/main/java/com/health/controller/HomeController.java +++ b/src/main/java/com/health/controller/HomeController.java @@ -770,6 +770,7 @@ private void navigationLinkCheck(Model model) { List trainingModuleTutorialList = tutorialWithWeekAndPackageService.findAll(); List citationTuorials = tutService.findAllEnabledEnglishTuorialsWithCitationNotNull(); List trainingResourceList = trainingResourceService.findAllByStatusTrue(); + List projectReportList = projectReportService.findAllByStatusTrue(); boolean eventFlag = !eventList.isEmpty(); boolean testimonialFlag = !testimonialList.isEmpty(); @@ -780,6 +781,7 @@ private void navigationLinkCheck(Model model) { boolean traininngModuleFlag = !trainingModuleTutorialList.isEmpty(); boolean citationFlag = !citationTuorials.isEmpty(); boolean trainingResourceFlag = !trainingResourceList.isEmpty(); + boolean projectReportFlag = !projectReportList.isEmpty(); model.addAttribute("testimonialFlag", testimonialFlag); model.addAttribute("eventFlag", eventFlag); @@ -790,6 +792,7 @@ private void navigationLinkCheck(Model model) { model.addAttribute("traininngModuleFlag", traininngModuleFlag); model.addAttribute("citationFlag", citationFlag); model.addAttribute("trainingResourceFlag", trainingResourceFlag); + model.addAttribute("projectReportFlag", projectReportFlag); } @@ -987,6 +990,7 @@ public String index(Model model) { List trainingModuleTutorialList = tutorialWithWeekAndPackageService.findAll(); List citationTuorials = tutService.findAllEnabledEnglishTuorialsWithCitationNotNull(); List trainingResourceList = trainingResourceService.findAllByStatusTrue(); + List projectReportList = projectReportService.findAllByStatusTrue(); boolean eventFlag = !events.isEmpty(); boolean testimonialFlag = !testi.isEmpty(); @@ -997,6 +1001,7 @@ public String index(Model model) { boolean traininngModuleFlag = !trainingModuleTutorialList.isEmpty(); boolean citationFlag = !citationTuorials.isEmpty(); boolean trainingResourceFlag = !trainingResourceList.isEmpty(); + boolean projectReportFlag = !projectReportList.isEmpty(); model.addAttribute("testimonialFlag", testimonialFlag); model.addAttribute("eventFlag", eventFlag); @@ -1007,6 +1012,7 @@ public String index(Model model) { model.addAttribute("traininngModuleFlag", traininngModuleFlag); model.addAttribute("citationFlag", citationFlag); model.addAttribute("trainingResourceFlag", trainingResourceFlag); + model.addAttribute("projectReportFlag", projectReportFlag); /************ Navigation Link Check Separate Code End ********/ diff --git a/src/main/resources/static/js/ajaxSupport.js b/src/main/resources/static/js/ajaxSupport.js index fdce4840..c78a94fe 100644 --- a/src/main/resources/static/js/ajaxSupport.js +++ b/src/main/resources/static/js/ajaxSupport.js @@ -3527,13 +3527,13 @@ $('.enableProjetcReport').click(function() { */ - function loadDistrictAndFileTypeByState(stateId, districId, fileTypeId) { + function loadDistrictAndFileTypeByState(stateId, districtId, fileTypeId) { $.ajax({ type : "GET", url : projectPath+"loadDistrictAndFileTypeByState", data : { "stateId" : stateId, - "districId":districId, + "districtId":districtId, "fileTypeId":fileTypeId }, contentType : "application/json", @@ -3542,15 +3542,15 @@ $('.enableProjetcReport').click(function() { console.log(result); var html = ''; - html += ''; + html += ''; $.each(result, function (value, key) { - var selected = (districId == key) ? "selected" : ""; + var selected = (districtId == key) ? "selected" : ""; html += ``; }); - $("#districNamePR").prop('disabled', false); - $('#districNamePR').html(html); + $("#districtNamePR").prop('disabled', false); + $('#districtNamePR').html(html); result= resultarlist[1]; @@ -3580,9 +3580,9 @@ $('.enableProjetcReport').click(function() { $( "#stateNamePR" ).change(function() { var stateId = $(this).val(); - var districId = $("#districtNamePR").val(); + var districtId = $("#districtNamePR").val(); var fileTypeId=$("#inputFileTypePR").val(); - loadDistrictAndFileTypeByState(stateId, districId, fileTypeId); + loadDistrictAndFileTypeByState(stateId, districtId, fileTypeId); }); @@ -3591,10 +3591,10 @@ $('.enableProjetcReport').click(function() { var stateId = 0; $("#stateNamePR").val("0"); - var districId = $("#districtNamePR").val(); + var districtId = $("#districtNamePR").val(); var fileTypeId=$("#inputFileTypePR").val(); - loadDistrictAndFileTypeByState(stateId, districId, fileTypeId); + loadDistrictAndFileTypeByState(stateId, districtId, fileTypeId); return false; }); @@ -3771,7 +3771,7 @@ $('.enableProjetcReport').click(function() { loadStateAndDistrictByFileType(stateId, districtId, fileTypeId); - loadDistrictAndFileTypeByState(stateId, districId, fileTypeId); + loadDistrictAndFileTypeByState(stateId, districtId, fileTypeId); loadStateAndFileTypeByDistrict(stateId, districtId, fileTypeId); return false; diff --git a/src/main/resources/templates/common/commonItemsProjectReport.html b/src/main/resources/templates/common/commonItemsProjectReport.html index 02b1c8d2..c632a4c7 100644 --- a/src/main/resources/templates/common/commonItemsProjectReport.html +++ b/src/main/resources/templates/common/commonItemsProjectReport.html @@ -9,7 +9,7 @@
-
+
Only authorized users can access Doc or Excel files. diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index 45841933..55fa3342 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -146,6 +146,7 @@ Citations HST Training Modules Training Resources + Project Reports Dr. Rupal's Hindi Video diff --git a/src/main/resources/templates/projectReports.html b/src/main/resources/templates/projectReports.html new file mode 100644 index 00000000..b4ab15c5 --- /dev/null +++ b/src/main/resources/templates/projectReports.html @@ -0,0 +1,464 @@ + + + + + + + Project-Reports - Health And Nutrition + + + + + + +
+
+
+
+ +
+ +
+
+
+ +
+
+ +
+
+
+ + +
+
+ + +
+ +
+ +
+ +
+

+

+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/tutorialList.html b/src/main/resources/templates/tutorialList.html index be4374fe..8585b1fe 100644 --- a/src/main/resources/templates/tutorialList.html +++ b/src/main/resources/templates/tutorialList.html @@ -30,6 +30,7 @@ Citations HST Training Modules Training Resources + Project Reports Dr. Rupal's Hindi Video