diff --git a/src/main/java/com/health/config/SecurityConfig.java b/src/main/java/com/health/config/SecurityConfig.java index 3ee25ff..3adaf10 100644 --- a/src/main/java/com/health/config/SecurityConfig.java +++ b/src/main/java/com/health/config/SecurityConfig.java @@ -46,20 +46,22 @@ public static BCryptPasswordEncoder passwordEncoder() { "/tutorial_view/**", "/getConsultantDetails/**", "/reset/**", "/resetPassword/**", "/getCatAndLan/**", "/getTopicOnCatAndLan/**", "/getRolesOnCatLanUser/**", "/getTutorial/**", "/statistics", "/statistics/**", "/tutCountOnCat/**", "/tutCountOnLan/**", "/cdContentInfo/**", "/getContributorByTutLanUser/**", - "/showConsultant/**", "/showLanguages/**", "/unpublishTutorial/**", "/loadTopicByCategory/**", - "/loadLanguageByCategoryTopic/**", "/loadTopicAndLanguageByCategory/**", - "/loadCategoryAndLanguageByTopic/**", "/loadCategoryAndTopicByLanguage/**", "/tutorialsSearch/**", - "/tutorialsSearch1/**", "/checkTutorial/**", "/Slide/**", "/TimeScript/**", "/OriginalScript/**", - "/Brochure-English/**", "/Brochure/**", "/ResearchPaper/**", "/downloads", - "/loadLanguageByCategoryResource", "/autosuggest/**", "/loadLanguageAndTopicByCategoryResource", - "/loadTutorialCountByTopicAndLanguage", "/loadTutorialCountByTopics", "/downloadResources", "/citations", - "/api/scriptPublished/**", "/loadLanguageByPackage/**", "/promoVideoView/**", "/trainingModules/**", - "/downloadTrainingModules", "/loadMessageByPackageAndLan/**", "/loadLanguageByWeek/**", - "/loadWeekByLanguage/**", "/trainingTutorials/**", "/hstTrainingModuleView/**", "/downloadManager/**", - "/downloadManagerforhst/**", "/downloadHealthTutorials/**", "/Training-Resource/**", - "/Training-Resources/**", "/loadLanAndFileTypeByTopic/**", "/loadTopicAndFileTypeByLan/**", - "/loadTopicAndLanByFileType/**", "/downloadTrainingResource/**", "/shared-Training-Resource/**", - "/shared-training-resource-file/**", "/check-deployment", "/training-resources/view-share/**" }; + + "/showConsultant/**", "/showLanguages/**", "/loadTopicByCategory/**", "/loadLanguageByCategoryTopic/**", + "/loadTopicAndLanguageByCategory/**", "/loadCategoryAndLanguageByTopic/**", + "/loadCategoryAndTopicByLanguage/**", "/tutorialsSearch/**", "/tutorialsSearch1/**", "/checkTutorial/**", + "/Slide/**", "/TimeScript/**", "/OriginalScript/**", "/Brochure-English/**", "/Brochure/**", + "/ResearchPaper/**", "/downloads", "/loadLanguageByCategoryResource", "/autosuggest/**", + "/loadLanguageAndTopicByCategoryResource", "/loadTutorialCountByTopicAndLanguage", + "/loadTutorialCountByTopics", "/downloadResources", "/citations", "/api/scriptPublished/**", + "/loadLanguageByPackage/**", "/promoVideoView/**", "/trainingModules/**", "/downloadTrainingModules", + "/loadMessageByPackageAndLan/**", "/loadLanguageByWeek/**", "/loadWeekByLanguage/**", + "/trainingTutorials/**", "/hstTrainingModuleView/**", "/downloadManager/**", "/downloadManagerforhst/**", + "/downloadHealthTutorials/**", "/Training-Resource/**", "/Training-Resources/**", + "/loadLanAndFileTypeByTopic/**", "/loadTopicAndFileTypeByLan/**", "/loadTopicAndLanByFileType/**", + "/downloadTrainingResource/**", "/shared-Training-Resource/**", "/shared-training-resource-file/**", + "/check-deployment", "/training-resources/view-share/**", "/loadDistrictAndFileTypeByState/**", + "/loadStateAndFileTypeByDistrict/**", "/loadStateAndDistrictByFileType/**", "/Project-Reports/**" }; /** * url matcher for SUPERADMIN @@ -67,14 +69,10 @@ public static BCryptPasswordEncoder passwordEncoder() { public static final String[] SUPERUSER_URL = { "/addCategory/**", "/updateCategory/**", "/category/edit/**", "/addOrganizationRole/**", "/organization_role/edit/**", "/update_organization_role/**", "/addLanguage/**", "/language/edit/**", "/updateLanguage/**", "/addRole/**", "/addTopic/**", "/topic/edit/**", - "/updateTopic/**", "/uploadQuestion/**", "/question/edit/**", "/updateQuestion/**", "/addBrochure/**", - "/addCarousel/**", "/approveRole/**", "/assignTutorialToContributor/**", "/assignContributor/edit/**", - "/enableRoleById/**", "/deleteMasterRole/**", "/viewTrainee/**", "/details/**", "/tutorialStatus/**", - "/users/**", "/unpublishTopic/**", "/clearAllCaches/**", "/addConsultant/**", - "/enableDisableCourseCatTopic", "/delete-category-topic-from-course", "/createCourse", - "/courseName/edit/**", "/updateCourseName", - -// "/unpublishTutorial/**" + "/updateTopic/**", "/uploadQuestion/**", "/question/edit/**", "/updateQuestion/**", "/approveRole/**", + "/assignTutorialToContributor/**", "/assignContributor/edit/**", "/enableRoleById/**", + "/deleteMasterRole/**", "/viewTrainee/**", "/details/**", "/tutorialStatus/**", "/users/**", + "/unpublishTopic/**", "/clearAllCaches/**", }; @@ -95,13 +93,6 @@ public static BCryptPasswordEncoder passwordEncoder() { public static final String[] CONTRIBUTOR_URL = { "/uploadTutorial/**", "/addOutline/**", "/addKeyword**", "/addPreRequisticWhenNotRequired/**", "/addPreRequistic/**", "/addVideo/**", "/addSlide/**", "/addScript/**", "/listTutorialForContributorReview/**", "/Contributor/review/**", "/uploadTimescript/**", - "/addLiveTutorial", "/updateLiveTutorial", "/addSpokenVideo", "/spokenVideo/edit/**", "/addVideoResource", - "/createPackage", "/packageName/edit/**", "/updatePackageName", "/weekTitleVideo/editTitle/**", - - "/updateTitle", "/weekTitleVideo/editWeek/**", "/updateWeek", "/enableDisableCourseCatTopic", - "/delete-category-topic-from-course", "/createCourse", "/courseName/edit/**", "/updateCourseName", - "/addTrainingResource", "/trainingReource/view/**", "/trainingReourceAdminView/**", - "/trainingReource/edit/**", "/enableDisableTrainingResource", "/delete-trainingResource", }; @@ -160,13 +151,25 @@ protected void configure(HttpSecurity http) throws Exception { .antMatchers("/addBrochure/**", "/addCarousel/**", "/addConsultant/**", "/addEvent/**", "/addTestimonial/**", "/addPromoVideo/**", "/addResearchPaper/**", "/brochure/edit/**", "/promoVideo/edit/**", "/carousel/edit/**", "/event/edit/**", "/testimonial/edit/**", - "/createPackage", "/packageName/edit/**", "/updatePackageName", "/weekTitleVideo/editTitle/**", + "/createPackage/**", "/packageName/edit/**", "/updatePackageName/**", + "/weekTitleVideo/editTitle/**", - "/updateTitle", "/weekTitleVideo/editWeek/**", "/updateWeek", "/researchPaper/edit/**", + "/updateTitle/**", "/weekTitleVideo/editWeek/**", "/updateWeek/**", "/researchPaper/edit/**", "/enableDisableBrouchure/**", "/enableDisableConsultant/**", "/enableDisableTestimonial/**", - "/addCitation/**", "/citation/edit/**", "/enableDisableCourseCatTopic", - "/delete-category-topic-from-course", "/createCourse", "/courseName/edit/**", - "/updateCourseName", "/addTrainingResource") + "/addCitation/**", "/citation/edit/**", "/enableDisableCourseCatTopic/**", + "/delete-category-topic-from-course/**", "/createCourse/**", "/courseName/edit/**", + "/enableDisablePromoVideo/**", "/enableDisablePacakgeLanguage/**", + "/enableDisableResearchPaper/**", "/enableDisableEvent/**", "/enableDisableCarousel/**", + "/updateCourseName/**", "/addTrainingResource/**", "/updateCitation/**", "/updateConsultant/**", + "/updateSpokenVideo/**", "/updateTrainingResource/**", "/updateEvent/**", + "/updatePromoVideo/**", "/updateBrochure/**", "/updateResearchPaper/**", "/updateCarousel/**", + "/updateTestimonial/**", "/addLiveTutorial/**", "/updateLiveTutorial/**", "/addSpokenVideo/**", + "/spokenVideo/edit/**", "/addVideoResource/**", "/trainingReource/view/**", + "/trainingReourceAdminView/**", "/trainingReource/edit/**", "/enableDisableTrainingResource/**", + "/delete-trainingResource/**", "/addProjectReport/**", "/projectReportAdminView/**", + "/projectReport/edit/**", "/enableDisableProjectReport/**", "/delete-projectReport/**" + + ) .hasAnyAuthority("SUPER_USER", "CONTRIBUTOR").antMatchers(PUBLIC_MATCHERS).permitAll().anyRequest() .authenticated().and().exceptionHandling().accessDeniedPage("/access-denied"); diff --git a/src/main/java/com/health/controller/AjaxController.java b/src/main/java/com/health/controller/AjaxController.java index 5f03aa6..7bb6a9e 100644 --- a/src/main/java/com/health/controller/AjaxController.java +++ b/src/main/java/com/health/controller/AjaxController.java @@ -74,9 +74,11 @@ import com.health.model.PackageContainer; import com.health.model.PackageLanguage; import com.health.model.PathofPromoVideo; +import com.health.model.ProjectReport; 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; @@ -112,9 +114,11 @@ import com.health.service.PackageContainerService; import com.health.service.PackageLanguageService; import com.health.service.PathofPromoVideoService; +import com.health.service.ProjectReportService; 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; @@ -295,6 +299,12 @@ public class AjaxController { @Autowired private EventService eventService; + @Autowired + private ProjectReportService projectReportService; + + @Autowired + private StateDistrictMappingService stateDistrictMappingService; + @Value("${downloadLimit}") private int downloadLimit; @@ -2336,6 +2346,332 @@ 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; + } + + @GetMapping("/enableDisableProjectReport") + public @ResponseBody boolean enableDisableProjectReport(int projectReportId) { + ProjectReport pr = projectReportService.findByProjectReportId(projectReportId); + + try { + if (pr.isStatus()) { + pr.setStatus(false); + projectReportService.save(pr); + return true; + + } else { + pr.setStatus(true); + projectReportService.save(pr); + return true; + + } + + } catch (Exception e) { + + logger.error("Error in Enable Disbale Project Report: {}", pr, e); + return false; + } + + } + + @RequestMapping("/delete-projectReport") + public ResponseEntity deleteProjectReport(@RequestParam("projectReportId") int projectReportId, + @RequestParam("fileType") String fileType) { + + try { + ProjectReport pr = projectReportService.findByProjectReportId(projectReportId); + String filePath = ""; + if (pr != null) { + switch (fileType.toLowerCase()) { + case "image": + filePath = pr.getImgPath(); + pr.setImgPath(""); + break; + case "pdf": + filePath = pr.getPdfPath(); + pr.setPdfPath(""); + break; + case "doc": + filePath = pr.getDocPath(); + pr.setDocPath(""); + break; + case "excel": + filePath = pr.getExcelPath(); + pr.setExcelPath(""); + break; + default: + return ResponseEntity.badRequest().body("Unsupported file type: " + fileType); + } + + if (!filePath.isEmpty() && filePath.endsWith(".zip")) { + String extractDir = filePath.replace(".zip", ""); + + Path extractDirPath = Paths.get(env.getProperty("spring.applicationexternalPath.name"), extractDir); + FileUtils.deleteDirectory(extractDirPath.toFile()); + } + + projectReportService.save(pr); + return ResponseEntity.ok("Deleted successfully"); + } else { + return ResponseEntity.status(HttpStatus.SC_NOT_FOUND).body("Project Report not found"); + } + + } catch (Exception e) { + logger.error("Error in deleting project report", e); + return ResponseEntity.status(HttpStatus.SC_INTERNAL_SERVER_ERROR).body("Error in deleting!"); + } + } + + /* + * 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") 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 c13cc87..069fd4e 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; @@ -759,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(); @@ -769,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); @@ -779,6 +792,7 @@ private void navigationLinkCheck(Model model) { model.addAttribute("traininngModuleFlag", traininngModuleFlag); model.addAttribute("citationFlag", citationFlag); model.addAttribute("trainingResourceFlag", trainingResourceFlag); + model.addAttribute("projectReportFlag", projectReportFlag); } @@ -910,6 +924,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) { @@ -951,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(); @@ -961,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); @@ -971,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 ********/ @@ -6648,6 +6690,1112 @@ public String viewAndDownloadTrainingResource(HttpServletRequest req, return "trainingResources"; } + /************************ Project Report Start ******************************/ + + private String generateUniqueTokenForProjectReport() { + + final int MAX_ATTEMPTS = 10; + + for (int attempt = 0; attempt < MAX_ATTEMPTS; attempt++) { + + String token = ServiceUtility.generateToken(); + + if (!projectReportService.existsByPdfTokenOrDocTokenOrExcelTokenOrImgToken(token, token, token, token)) { + return token; + } + } + + throw new IllegalStateException("Token not generated after " + MAX_ATTEMPTS + " attempts"); + } + + @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); + + Optional allDis = districtService.findByDistrictNameIgnoreCase(CommonData.ALL_DISTRICTS); + + int allDisId = allDis.map(District::getId).orElse(0); + + model.addAttribute("allDisId", allDisId); + + 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(); + String state_dir = stateName.replace(" ", "_"); + + Timestamp dateAdded = ServiceUtility.getCurrentTime(); + + Set addedDistrict = new HashSet<>(); + Map> ErrorsforExistingFiles = new LinkedHashMap<>(); + boolean savedFlag = false; + + try { + + for (int i = 0; i < districtIds.size(); i++) { + if (i < files.size()) + logger.info("File: {}", files.get(i).getOriginalFilename()); + if (districtIds.get(i) != 0 && !files.get(i).isEmpty()) { + + District district = districtService.findById(districtIds.get(i)); + + 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); + + 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(); + + String district_dir = districtName.replace(" ", "_"); + + Path rootPath = Paths.get(CommonData.uploadProjectReport, String.valueOf(prId), state_dir, + district_dir); + + String token = generateUniqueTokenForProjectReport(); + + String pdfFolder = Paths.get(rootPath.toString(), "pdf", token).toString(); + String docFolder = Paths.get(rootPath.toString(), "docx_or_odt", token).toString(); + String excelFolder = Paths.get(rootPath.toString(), "excel_or_csv", token).toString(); + String imageFolder = Paths.get(rootPath.toString(), "image", token).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(); + if (oldPath != null && !oldPath.trim().isEmpty()) { + existingFiles.add(CommonData.PDF_EXTENSION); + continue; + } + } + document = ServiceUtility.uploadMediaFile(file, env, pdfFolder); + pr.setPdfPath(document); + pr.setPdfToken(token); + } + + 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); + pr.setDocToken(token); + } + + 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); + pr.setExcelToken(token); + } + + 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); + pr.setImgToken(token); + } + + 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(); + if (oldPath != null && !oldPath.trim().isEmpty()) { + existingFiles.add(CommonData.PDF_EXTENSION); + continue; + } + } + document = ServiceUtility.uploadMediaFile(file, env, pdfFolder); + pr.setPdfPath(document); + pr.setPdfToken(token); + } + + 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); + pr.setDocToken(token); + } + + 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); + pr.setExcelToken(token); + } + + 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); + pr.setImgToken(token); + } + + 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.trim().isEmpty()) { + + continue; + } + + pr.setUser(usr); + projectReportService.save(pr); + savedFlag = true; + + } + + } + + } + + } 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); + 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); + } + + @GetMapping("/projectReport/edit/{fileType}/{id}") + public String projectReportEditGet(@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); + + if (pr == null) { + + return "redirect:/addProjectReport"; + } + State state = pr.getStateDistrictMapping().getState(); + District district = pr.getStateDistrictMapping().getDistrict(); + + List districts = districtService.findAllByState(state); + + districtService.findByDistrictNameIgnoreCase(CommonData.ALL_DISTRICTS).ifPresent(districts::add); + + districts = districts.stream().distinct() + .sorted(Comparator.comparing(District::getDistrictName, String.CASE_INSENSITIVE_ORDER)) + .collect(Collectors.toList()); + + model.addAttribute("districts", districts); + + List projectReportList = new ArrayList<>(); + List tempProjectReportList = projectReportService.findAll(); + for (ProjectReport temp : tempProjectReportList) { + if (ServiceUtility.hasAnyProjectReportFile(temp)) { + projectReportList.add(temp); + } + } + + model.addAttribute("projectReportList", projectReportList); + model.addAttribute("ProjectReport", pr); + model.addAttribute("state", state); + model.addAttribute("district", district); + + model.addAttribute("id", id); + 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")) { + model.addAttribute("zipFile", filePath); + } + + else { + model.addAttribute("nonZipFile", filePath); + + } + + return "updateProjectReport"; + } + + @PostMapping("/updateProjectReport") + public String updateProjectReportPost(HttpServletRequest req, Model model, Principal principal, + @RequestParam("file") MultipartFile file) { + + User usr = getUser(principal); + logger.info("{} {} {}", usr.getUsername(), req.getMethod(), req.getRequestURI()); + + model.addAttribute("userInfo", usr); + + String prId = req.getParameter("prId"); + String stateId = req.getParameter("stateId"); + String districtId = req.getParameter("districtId"); + String fileType = req.getParameter("fileType"); + int prIdInt = Integer.parseInt(prId); + int stateIdInt = Integer.parseInt(stateId); + int districtIdInt = Integer.parseInt(districtId); + int oldprId = prIdInt; + + ProjectReport oldProjectReport = projectReportService.findByProjectReportId(prIdInt); + String originalFileType = ""; + String oldPath = ""; + + boolean fileMatch = false; + String token = ""; + + if (oldProjectReport == null) { + model.addAttribute("error_msg", "Project Report doesn't exist"); + return projectReportEditGet(originalFileType, oldprId, req, model, principal); + } + + if (fileType.equals("Doc")) { + originalFileType = CommonData.Doc_OR_ZIP_OF_DOCS; + if (oldProjectReport != null) { + oldPath = oldProjectReport.getDocPath(); + token = oldProjectReport.getDocToken(); + } + } + + else if (fileType.equals("Pdf")) { + originalFileType = CommonData.PDF_OR_ZIP_OF_PDFS; + if (oldProjectReport != null) { + oldPath = oldProjectReport.getPdfPath(); + token = oldProjectReport.getPdfToken(); + } + } + + else if (fileType.equals("Image")) { + originalFileType = CommonData.image_OR_ZIP_OF_IMAGES; + if (oldProjectReport != null) { + oldPath = oldProjectReport.getImgPath(); + token = oldProjectReport.getImgToken(); + } + + } else if (fileType.equals("Excel")) { + originalFileType = CommonData.Excel_OR_ZIP_OF_EXCELS; + if (oldProjectReport != null) { + oldPath = oldProjectReport.getExcelPath(); + token = oldProjectReport.getExcelToken(); + } + } + + State state = stateService.findById(stateIdInt); + District district = districtService.findById(districtIdInt); + if (state == null || district == null) { + model.addAttribute("error_msg", "state or distrct missing"); + return projectReportEditGet(fileType, oldprId, req, model, principal); + } + String districtName = district.getDistrictName(); + if (!CommonData.ALL_DISTRICTS.equalsIgnoreCase(districtName)) { + int tempStateId = district.getState().getId(); + if (stateIdInt != tempStateId) { + model.addAttribute("error_msg", "District doesn't belong to selected state"); + return projectReportEditGet(originalFileType, oldprId, req, model, principal); + } + } + + StateDistrictMapping stateDistrict = stateDistrictMappingService.findByStateAndDistrict(state, district); + Timestamp dateAdded = ServiceUtility.getCurrentTime(); + + if (oldPath == null || oldPath.isEmpty()) { + model.addAttribute("error_msg", + "The data has already moved to another Project Report. Please check the View section to edit."); + return projectReportEditGet(originalFileType, oldprId, req, model, principal); + } + + ProjectReport newProjectReport; + boolean newProjectData = true; + + if (stateDistrict != null) { + List prList = projectReportService.findByStateDistrictMapping(stateDistrict); + + if (prList.isEmpty()) { + newProjectReport = new ProjectReport(); + logger.info("new Project Report Data"); + + } else if (!prList.contains(oldProjectReport)) { + newProjectReport = prList.get(0); + logger.info("new Project Report Data from prList"); + } else { + newProjectData = false; + newProjectReport = oldProjectReport; + logger.info("old Project Report data"); + } + } else { + + stateDistrict = new StateDistrictMapping(dateAdded, state, district); + + stateDistrictMappingService.save(stateDistrict); + newProjectReport = new ProjectReport(); + + } + + newProjectReport.setStateDistrictMapping(stateDistrict); + newProjectReport.setUser(usr); + + // To get exact Id of new project Report Data + if (newProjectData) { + newProjectReport.setDateAdded(dateAdded); + projectReportService.save(newProjectReport); + prIdInt = newProjectReport.getProjectReportId(); + token = generateUniqueTokenForProjectReport(); + + } + + try { + + String district_dir = districtName.replace(" ", "_"); + String stateName = state.getStateName(); + String state_dir = stateName.replace(" ", "_"); + + Path rootPath = Paths.get(CommonData.uploadProjectReport, String.valueOf(prId), state_dir, district_dir); + + String pdfFolder = Paths.get(rootPath.toString(), "pdf", token).toString(); + String docFolder = Paths.get(rootPath.toString(), "docx_or_odt", token).toString(); + String excelFolder = Paths.get(rootPath.toString(), "excel_or_csv", token).toString(); + String imageFolder = Paths.get(rootPath.toString(), "image", token).toString(); + boolean fileFlag = false; + + if (!file.isEmpty()) { + fileFlag = true; + + Set extentions = new HashSet<>(); + String document = ""; + + String fileExtention = ServiceUtility.checkFileExtensions(file); + + if (fileExtention.equals(CommonData.UNSUPPORTED_EXTENSION)) { + model.addAttribute("error_msg", "Unsupported file"); + + return projectReportEditGet(originalFileType, oldprId, req, model, principal); + } + + else if (fileExtention.equals(CommonData.PDF_EXTENSION) + && originalFileType.equals(CommonData.PDF_OR_ZIP_OF_PDFS)) { + document = ServiceUtility.uploadMediaFile(file, env, pdfFolder); + newProjectReport.setPdfPath(document); + newProjectReport.setPdfToken(token); + if (newProjectData) + oldProjectReport.setPdfPath(""); + fileMatch = true; + } + + else if (fileExtention.equals(CommonData.DOC_EXTENSION) + && originalFileType.equals(CommonData.Doc_OR_ZIP_OF_DOCS)) { + document = ServiceUtility.uploadMediaFile(file, env, docFolder); + newProjectReport.setDocPath(document); + newProjectReport.setDocToken(token); + if (newProjectData) + oldProjectReport.setDocPath(""); + fileMatch = true; + } + + else if (fileExtention.equals(CommonData.EXCEL_EXTENSION) + && originalFileType.equals(CommonData.Excel_OR_ZIP_OF_EXCELS)) { + document = ServiceUtility.uploadMediaFile(file, env, excelFolder); + newProjectReport.setExcelPath(document); + newProjectReport.setExcelToken(token); + if (newProjectData) + oldProjectReport.setExcelPath(""); + fileMatch = true; + } + + else if (fileExtention.equals(CommonData.IMAGE_EXTENSION) + && originalFileType.equals(CommonData.image_OR_ZIP_OF_IMAGES)) { + document = ServiceUtility.uploadMediaFile(file, env, imageFolder); + newProjectReport.setImgPath(document); + newProjectReport.setImgToken(token); + if (newProjectData) + oldProjectReport.setImgPath(""); + fileMatch = true; + } + + if (fileExtention.equals(CommonData.ZIP_EXTENSION)) { + + extentions = ServiceUtility.checkFileExtentionsInZip(file); + if (extentions.size() == 1) { + for (String ext : extentions) { + if (ext.equals(CommonData.PDF_EXTENSION) + && originalFileType.equals(CommonData.PDF_OR_ZIP_OF_PDFS)) { + document = ServiceUtility.uploadMediaFile(file, env, pdfFolder); + newProjectReport.setPdfPath(document); + newProjectReport.setPdfToken(token); + if (newProjectData) { + oldProjectReport.setPdfPath(""); + } + + fileMatch = true; + + } + + else if (ext.equals(CommonData.DOC_EXTENSION) + && originalFileType.equals(CommonData.Doc_OR_ZIP_OF_DOCS)) { + document = ServiceUtility.uploadMediaFile(file, env, docFolder); + newProjectReport.setDocPath(document); + newProjectReport.setDocToken(token); + if (newProjectData) { + oldProjectReport.setDocPath(""); + } + + fileMatch = true; + } + + else if (ext.equals(CommonData.EXCEL_EXTENSION) + && originalFileType.equals(CommonData.Excel_OR_ZIP_OF_EXCELS)) { + document = ServiceUtility.uploadMediaFile(file, env, excelFolder); + newProjectReport.setExcelPath(document); + newProjectReport.setExcelToken(token); + if (newProjectData) { + oldProjectReport.setExcelPath(""); + } + + fileMatch = true; + } + + else if (ext.equals(CommonData.IMAGE_EXTENSION) + && originalFileType.equals(CommonData.image_OR_ZIP_OF_IMAGES)) { + document = ServiceUtility.uploadMediaFile(file, env, imageFolder); + newProjectReport.setImgPath(document); + newProjectReport.setImgToken(token); + if (newProjectData) { + oldProjectReport.setImgPath(""); + } + + fileMatch = true; + + } + + else if (ext.equals(CommonData.UNSUPPORTED_EXTENSION)) { + + model.addAttribute("error_msg", "Unsupported file Error "); + + return projectReportEditGet(originalFileType, oldprId, req, model, principal); + } + + } + } + + else { + model.addAttribute("error_msg", "Zip contains different types of files Error"); + + return projectReportEditGet(originalFileType, oldprId, req, model, principal); + } + + } + + 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 (newProjectData) { + newProjectReport.setDateAdded(dateAdded); + } + + newProjectReport.setStateDistrictMapping(stateDistrict); + newProjectReport.setUser(usr); + + if (fileMatch) { + if (newProjectData) { + newProjectReport.setDateAdded(dateAdded); + } + newProjectReport.setStateDistrictMapping(stateDistrict); + projectReportService.save(newProjectReport); + if (newProjectData) { + logger.info("1st old data save is called"); + oldProjectReport.setUser(usr); + projectReportService.save(oldProjectReport); + } + } else { + model.addAttribute("error_msg", "Please upload a file of the same type. E.g., DOC for DOC type."); + return projectReportEditGet(originalFileType, oldprId, req, model, principal); + } + } + + // File Empty + else { + if (newProjectData && !fileFlag && oldPath != null && !oldPath.isEmpty()) { + + Path sourcePath = Paths.get(env.getProperty("spring.applicationexternalPath.name"), oldPath); + File sourceFile = sourcePath.toFile(); + String fileName = sourcePath.getFileName().toString(); + + String document = ""; + + if (sourceFile.exists()) { + if (originalFileType.equals(CommonData.Doc_OR_ZIP_OF_DOCS)) { + + document = ServiceUtility.copyFileAndGetRelativePath(sourceFile, docFolder, fileName, env); + + newProjectReport.setDocPath(document); + newProjectReport.setDocToken(token); + oldProjectReport.setDocPath(""); + + } else if (originalFileType.equals(CommonData.Excel_OR_ZIP_OF_EXCELS)) { + + document = ServiceUtility.copyFileAndGetRelativePath(sourceFile, excelFolder, fileName, + env); + + newProjectReport.setExcelPath(document); + newProjectReport.setExcelToken(token); + oldProjectReport.setExcelPath(""); + + } else if (originalFileType.equals(CommonData.PDF_OR_ZIP_OF_PDFS)) { + + document = ServiceUtility.copyFileAndGetRelativePath(sourceFile, pdfFolder, fileName, env); + + newProjectReport.setPdfPath(document); + newProjectReport.setPdfToken(token); + oldProjectReport.setPdfPath(""); + + } else if (originalFileType.equals(CommonData.image_OR_ZIP_OF_IMAGES)) { + + document = ServiceUtility.copyFileAndGetRelativePath(sourceFile, imageFolder, fileName, + env); + newProjectReport.setImgPath(document); + newProjectReport.setImgToken(token); + oldProjectReport.setImgPath(""); + + } + + newProjectReport.setDateAdded(dateAdded); + newProjectReport.setUser(usr); + + projectReportService.save(newProjectReport); + logger.info("2nd old data save is called"); + projectReportService.save(oldProjectReport); + } + + } + } + + } catch (Exception e) { + logger.error("Exception while updating Project Report: {} {} {}", state, district, file, e); + model.addAttribute("error_msg", CommonData.RECORD_ERROR); + + return projectReportEditGet(originalFileType, oldprId, req, model, principal); + } + + model.addAttribute("success_msg", CommonData.RECORD_UPDATE_SUCCESS_MSG); + + 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"; + } + + @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) { + getModelProjectReport(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) { + getModelProjectReport(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()) { + getModelProjectReport(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("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; + + getModelProjectReport(model, stateId, districtId, 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 "projectReports"; + } + + /************************ 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/model/City.java b/src/main/java/com/health/model/City.java index 9a697fe..f3efbd5 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 2d66ad3..a9a03bb 100644 --- a/src/main/java/com/health/model/District.java +++ b/src/main/java/com/health/model/District.java @@ -50,12 +50,23 @@ 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) + 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/ProjectReport.java b/src/main/java/com/health/model/ProjectReport.java new file mode 100644 index 0000000..07f0f5d --- /dev/null +++ b/src/main/java/com/health/model/ProjectReport.java @@ -0,0 +1,234 @@ + +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; + + @Column(unique = true, length = 1000) + private String pdfToken; + + @Column(unique = true, length = 1000) + private String docToken; + + @Column(unique = true, length = 1000) + private String imgToken; + + @Column(unique = true, length = 1000) + private String excelToken; + + @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 String getPdfToken() { + return pdfToken; + } + + public void setPdfToken(String pdfToken) { + this.pdfToken = pdfToken; + } + + public String getDocToken() { + return docToken; + } + + public void setDocToken(String docToken) { + this.docToken = docToken; + } + + public String getImgToken() { + return imgToken; + } + + public void setImgToken(String imgToken) { + this.imgToken = imgToken; + } + + public String getExcelToken() { + return excelToken; + } + + public void setExcelToken(String excelToken) { + this.excelToken = excelToken; + } + + 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, String pdfPath, String docPath, String excelPath, String imgPath, + String pdfToken, String docToken, String imgToken, String excelToken, + StateDistrictMapping stateDistrictMapping, User user) { + super(); + this.dateAdded = dateAdded; + this.pdfPath = pdfPath; + this.docPath = docPath; + this.excelPath = excelPath; + this.imgPath = imgPath; + this.pdfToken = pdfToken; + this.docToken = docToken; + this.imgToken = imgToken; + this.excelToken = excelToken; + this.stateDistrictMapping = stateDistrictMapping; + this.user = user; + } + + 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/State.java b/src/main/java/com/health/model/State.java index 9f5ac40..83eedac 100644 --- a/src/main/java/com/health/model/State.java +++ b/src/main/java/com/health/model/State.java @@ -41,12 +41,23 @@ 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) + private Set stateDistrictMappings = new HashSet(); + + public Set getStateDistrictMappings() { + return stateDistrictMappings; + } + + public void setStateDistrictMappings(Set stateDistrictMappings) { + this.stateDistrictMappings = stateDistrictMappings; + } + public int getId() { return id; } @@ -72,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/model/StateDistrictMapping.java b/src/main/java/com/health/model/StateDistrictMapping.java new file mode 100644 index 0000000..9d8d28e --- /dev/null +++ b/src/main/java/com/health/model/StateDistrictMapping.java @@ -0,0 +1,119 @@ + +package com.health.model; + +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; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; +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 = "stateDistrictMapping", cascade = CascadeType.ALL) + private Set projectReports = 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 Set getProjectReports() { + return projectReports; + } + + public void setProjectReports(Set projectReports) { + this.projectReports = projectReports; + } + + 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 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 + public int compare(StateDistrictMapping sd1, StateDistrictMapping sd2) { + + return sd1.getState().getStateName().compareTo(sd2.getState().getStateName()); + + } + }; + +} diff --git a/src/main/java/com/health/model/User.java b/src/main/java/com/health/model/User.java index 64f261c..e8868e7 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/DistrictRepository.java b/src/main/java/com/health/repository/DistrictRepository.java index d804173..509e11c 100644 --- a/src/main/java/com/health/repository/DistrictRepository.java +++ b/src/main/java/com/health/repository/DistrictRepository.java @@ -1,7 +1,9 @@ package com.health.repository; 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; @@ -39,6 +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/ProjectReportRepository.java b/src/main/java/com/health/repository/ProjectReportRepository.java new file mode 100644 index 0000000..bb13c8c --- /dev/null +++ b/src/main/java/com/health/repository/ProjectReportRepository.java @@ -0,0 +1,32 @@ + +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(); + + ProjectReport findByPdfToken(String pdfToken); + + ProjectReport findByDocToken(String docToken); + + ProjectReport findByExcelToken(String excelToken); + + ProjectReport findByImgToken(String docToken); + + boolean existsByPdfTokenOrDocTokenOrExcelTokenOrImgToken(String pdfToken, String docToken, String excelToken, + String imgToken); + +} 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 0000000..4813039 --- /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 stateDisId); + + List findByDistrict(District district); + + List findByState(State state); + + StateDistrictMapping findByStateAndDistrict(State state, District district); + +} diff --git a/src/main/java/com/health/repository/StateRepository.java b/src/main/java/com/health/repository/StateRepository.java index 8cc3d62..3daef70 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/DistrictService.java b/src/main/java/com/health/service/DistrictService.java index 911b696..9e46cb9 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/ProjectReportService.java b/src/main/java/com/health/service/ProjectReportService.java new file mode 100644 index 0000000..ca4acd8 --- /dev/null +++ b/src/main/java/com/health/service/ProjectReportService.java @@ -0,0 +1,36 @@ + +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); + + ProjectReport findByPdfToken(String pdfToken); + + ProjectReport findByDocToken(String docToken); + + ProjectReport findByExcelToken(String excelToken); + + ProjectReport findByImgToken(String imgToken); + + boolean existsByPdfTokenOrDocTokenOrExcelTokenOrImgToken(String pdfToken, String docToken, String excelToken, + String imgToken); + +} 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 0000000..dd18ee5 --- /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/DistrictServiceImpl.java b/src/main/java/com/health/service/impl/DistrictServiceImpl.java index 7e45986..0195b30 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,14 @@ 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 + public Optional findByDistrictNameIgnoreCase(String districtName) { + + return distRepo.findByDistrictNameIgnoreCase(districtName); } } 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 0000000..6ace714 --- /dev/null +++ b/src/main/java/com/health/service/impl/ProjectReportServiceImpl.java @@ -0,0 +1,98 @@ + +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); + + } + + @Override + public ProjectReport findByPdfToken(String pdfToken) { + + return repo.findByPdfToken(pdfToken); + } + + @Override + public ProjectReport findByDocToken(String docToken) { + + return repo.findByDocToken(docToken); + } + + @Override + public ProjectReport findByExcelToken(String excelToken) { + + return repo.findByExcelToken(excelToken); + } + + @Override + public ProjectReport findByImgToken(String imgToken) { + + return repo.findByImgToken(imgToken); + } + + @Override + public boolean existsByPdfTokenOrDocTokenOrExcelTokenOrImgToken(String pdfToken, String docToken, String excelToken, + String imgToken) { + + return repo.existsByPdfTokenOrDocTokenOrExcelTokenOrImgToken(pdfToken, docToken, excelToken, imgToken); + } + +} 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 0000000..41a079d --- /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); + + } + +} diff --git a/src/main/java/com/health/service/impl/StateServiceImpl.java b/src/main/java/com/health/service/impl/StateServiceImpl.java index ad6523c..fed25c2 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/java/com/health/utility/CommonData.java b/src/main/java/com/health/utility/CommonData.java index 7424114..9927e65 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/"; @@ -314,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"; diff --git a/src/main/java/com/health/utility/ServiceUtility.java b/src/main/java/com/health/utility/ServiceUtility.java index 6010121..70d9853 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()) @@ -1354,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; @@ -1373,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 ""; @@ -1399,6 +1456,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(); } diff --git a/src/main/resources/static/js/ajaxSupport.js b/src/main/resources/static/js/ajaxSupport.js index 6679e6e..c78a94f 100644 --- a/src/main/resources/static/js/ajaxSupport.js +++ b/src/main/resources/static/js/ajaxSupport.js @@ -3356,6 +3356,522 @@ $(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)); + + } + + }); + + }); + +$('.enableProjetcReport').click(function() { + + var test_id=$(this).attr('value'); + + + $('#Success').css({"display": "none"}); + $('#Failure').css({"display": "none"}); + + $.ajax({ + type : "GET", + url : projectPath+"enableDisableProjectReport", + data : { + "projectReportId" : test_id + }, + contentType : "application/json", + success : function(data) { + if(data){ + $('#'+test_id).addClass('fas fa-times-circle'); + $('#'+test_id).removeClass('fas fa-check-circle'); + $('#'+test_id).css({"color": "red"}); + $('#Success').css({"display": "block"}); + + }else{ + $('#Failure').css({"display": "block"}); + } + }, + + error : function(err) { + console.log("not working. ERROR: "+ JSON.stringify(err)); + } + + }); + + }); + + + $('.disableProjetcReport').click(function() { + + var test_id=$(this).attr('value'); + + $('#Success').css({"display": "none"}); + $('#Failure').css({"display": "none"}); + + $.ajax({ + type : "GET", + url : projectPath+"enableDisableProjectReport", + data : { + "projectReportId" : test_id + }, + contentType : "application/json", + success : function(data) { + if(data){ + + $('#'+test_id).addClass('fas fa-check-circle'); + $('#'+test_id).removeClass('fas fa-times-circle'); + $('#'+test_id).css({"color": "green"}); + $('#Success').css({"display": "block"}); + + + }else{ + $('#Failure').css({"display": "block"}); + } + }, + + error : function(err) { + console.log("not working. ERROR: "+ JSON.stringify(err)); + } + + }); + + }); + + + + $(".deleteProjectReport-btn").click(function(){ + var row = $(this).closest("tr"); + var projectReportId = $(this).data("projectreportid"); + var stateName = $(this).data("statename"); + var districtName = $(this).data("districtname"); + var fileName = $(this).data("filename"); + var fileType = $(this).data("filetype"); + + + Swal.fire({ + title: "Are you sure?", + html: "Do you want to delete this Project Report?

" + + "State: " + stateName + "
" + + "District: " + districtName + "
" + + "file Type: " + fileType + "
" + + "file Name: " + fileName, + + icon: "warning", + showCancelButton: true, + confirmButtonText: "Yes", + cancelButtonText: "No", + dangerMode: true + }).then((result) => { + if (result.isConfirmed) { + $.ajax({ + url: "/delete-projectReport/", + data: { + + + "projectReportId": projectReportId, + "fileType": fileType + }, + type: "DELETE", + success: function(result) { + Swal.fire("Deleted!", "Deleted successfully!", "success"); + $("#" + fileType + projectReportId).text("Deleted"); + }, + error: function(err) { + Swal.fire("Error!", "Error in deleting!", "error"); + } + }); + } + }); +}); + + +/** + function to load district and fileType by state + author: Alok Kumar + + */ + + function loadDistrictAndFileTypeByState(stateId, districtId, fileTypeId) { + $.ajax({ + type : "GET", + url : projectPath+"loadDistrictAndFileTypeByState", + 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 = (districtId == key) ? "selected" : ""; + html += ``; + }); + + $("#districtNamePR").prop('disabled', false); + $('#districtNamePR').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 districtId = $("#districtNamePR").val(); + var fileTypeId=$("#inputFileTypePR").val(); + loadDistrictAndFileTypeByState(stateId, districtId, fileTypeId); + + }); + + $( "#stateResetPR" ).click(function() { + + var stateId = 0; + + $("#stateNamePR").val("0"); + var districtId = $("#districtNamePR").val(); + var fileTypeId=$("#inputFileTypePR").val(); + + loadDistrictAndFileTypeByState(stateId, districtId, 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, districtId, 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 *******************************/ /***************** changes made by om prakash *********************************************/ diff --git a/src/main/resources/templates/addProjectReport.html b/src/main/resources/templates/addProjectReport.html new file mode 100644 index 0000000..8fbfd47 --- /dev/null +++ b/src/main/resources/templates/addProjectReport.html @@ -0,0 +1,424 @@ + + + + + + +
+
+
+
+
+
+
+
+ + +
+ +
+
+
+
+

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 +
+
+ + +
+
+ + + + + +
+ + + +
+ +
+ + +
+ + +
+ + + + + + + diff --git a/src/main/resources/templates/common/commonItemsProjectReport.html b/src/main/resources/templates/common/commonItemsProjectReport.html new file mode 100644 index 0000000..c632a4c --- /dev/null +++ b/src/main/resources/templates/common/commonItemsProjectReport.html @@ -0,0 +1,193 @@ + + + + +
+

+
+ +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + Only authorized users can access Doc or Excel files. + + + + Login + + + + +
+ + + + + diff --git a/src/main/resources/templates/common/sidebar.html b/src/main/resources/templates/common/sidebar.html index c3afe39..d97788a 100644 --- a/src/main/resources/templates/common/sidebar.html +++ b/src/main/resources/templates/common/sidebar.html @@ -307,7 +307,15 @@ + + @@ -440,12 +448,13 @@ - - +