diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationApi.java index 1869655c..bfefce4f 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationApi.java @@ -130,7 +130,23 @@ public interface ApplicationApi { ResponseEntity> updateApplicationStatus(HttpServletRequest request, @Parameter(description = "The application id", required = true) @PathVariable("applicationId") Long applicationId, @Parameter(description = "status", required = true)@RequestParam(value = "status", required = true) ApplicationStatusTypeEnum status); - + + @Operation(summary = "API to generate PDF for an application", + responses = { + @ApiResponse(responseCode = "200", description = "OK", content = @Content(mediaType = "application/pdf")), + @ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { + @ExampleObject(value = ErrorConstants.NOTFOUND_ERROR_EXAMPLE) })), + @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { + @ExampleObject(value = ErrorConstants.UNAUTHORIZED_ERROR_EXAMPLE) })), + @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { + @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) + }) + @PostMapping(value = "/{applicationId}/download-pdf", + produces = { "application/pdf" }) + public ResponseEntity generateApplicationPdf( + HttpServletRequest request, + @Parameter(description = "The application id", required = true) + @PathVariable(value = "applicationId", required = true) Long applicationId); } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationApiController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationApiController.java index bcbf8e80..4de81e0b 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationApiController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationApiController.java @@ -13,11 +13,14 @@ import net.gepafin.tendermanagement.model.response.ApplicationResponseBean; import net.gepafin.tendermanagement.model.response.NextOrPreviousFormResponse; import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.service.ApplicationService; +import net.gepafin.tendermanagement.service.PdfService; import net.gepafin.tendermanagement.web.rest.api.ApplicationApi; import net.gepafin.tendermanagement.web.rest.api.errors.Status; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -35,17 +38,21 @@ public class ApplicationApiController implements ApplicationApi { @Autowired private ApplicationService applicationService; + @Autowired + private PdfService pdfService; + @Override - public ResponseEntity> createApplication(HttpServletRequest request, ApplicationRequestBean applicationRequestBean,Long applicationId, Long formId) { - ApplicationResponseBean applicationResponseBean= applicationService.createApplication(request,applicationRequestBean,applicationId,formId); + public ResponseEntity> createApplication(HttpServletRequest request, ApplicationRequestBean applicationRequestBean, Long applicationId, Long formId) { + ApplicationResponseBean applicationResponseBean = applicationService.createApplication(request, applicationRequestBean, applicationId, formId); return ResponseEntity.status(HttpStatus.CREATED) - .body(new Response<>(applicationResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.APPLICATION_CREATED_SUCCESS_MSG))); } + .body(new Response<>(applicationResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.APPLICATION_CREATED_SUCCESS_MSG))); + } @Override public ResponseEntity> getApplicationByFormId(HttpServletRequest request - , Long applicationId,Long formId) { + , Long applicationId, Long formId) { log.info("Get Application by ID - Application ID: {}", applicationId); - ApplicationGetResponseBean application = applicationService.getApplicationByFormId(request,applicationId,formId); + ApplicationGetResponseBean application = applicationService.getApplicationByFormId(request, applicationId, formId); return ResponseEntity.status(HttpStatus.OK) .body(new Response<>(application, Status.SUCCESS, Translator.toLocale(GepafinConstant.GET_APPLICATION_SUCCESS_MSG))); } @@ -54,39 +61,55 @@ public class ApplicationApiController implements ApplicationApi { public ResponseEntity> deleteApplication(HttpServletRequest request, Long applicationId) { log.info("Delete Application - Application ID: {}", applicationId); - applicationService.deleteApplication(request,applicationId); + applicationService.deleteApplication(request, applicationId); return ResponseEntity.status(HttpStatus.OK) .body(new Response<>(null, Status.SUCCESS, Translator.toLocale(GepafinConstant.DELETE_APPLICATION_SUCCESS_MSG))); } @Override public ResponseEntity> createApplicationByCallId(HttpServletRequest request, Long companyId, ApplicationRequest applicationRequest, Long callId) { - ApplicationResponse applicationResponseBean=applicationService.createApplication(request, companyId, applicationRequest, callId); + ApplicationResponse applicationResponseBean = applicationService.createApplication(request, companyId, applicationRequest, callId); return ResponseEntity.status(HttpStatus.CREATED) .body(new Response<>(applicationResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.APPLICATION_CREATED_SUCCESS_MSG))); } + @Override - public ResponseEntity>> getAllApplications(HttpServletRequest request,Long callId,Long companyId) { - List applications = applicationService.getAllApplications(request,callId,companyId); + public ResponseEntity>> getAllApplications(HttpServletRequest request, Long callId, Long companyId) { + List applications = applicationService.getAllApplications(request, callId, companyId); log.info("Get All Applications"); return ResponseEntity.status(HttpStatus.OK) .body(new Response<>(applications, Status.SUCCESS, Translator.toLocale(GepafinConstant.GET_APPLICATION_SUCCESS_MSG))); } - + @Override - public ResponseEntity> getNextOrPreviousForm(HttpServletRequest request,Long applicationId, - Long formId, FormActionEnum action) { - NextOrPreviousFormResponse data = applicationService.getNextOrPreviousForm(request, applicationId, formId, action); - log.info("Get Next Or Previous Form "); + public ResponseEntity> getNextOrPreviousForm(HttpServletRequest request, Long applicationId, + Long formId, FormActionEnum action) { + NextOrPreviousFormResponse data = applicationService.getNextOrPreviousForm(request, applicationId, formId, action); + log.info("Get Next Or Previous Form "); return ResponseEntity.status(HttpStatus.OK) .body(new Response<>(data, Status.SUCCESS, Translator.toLocale(GepafinConstant.GET_APPLICATION_SUCCESS_MSG))); } - + @Override public ResponseEntity> updateApplicationStatus(HttpServletRequest request, Long applicationId, - ApplicationStatusTypeEnum status) { + ApplicationStatusTypeEnum status) { ApplicationResponse applicationResponse = applicationService.updateApplicationStatus(request, applicationId, status); - return ResponseEntity.status(HttpStatus.OK) - .body(new Response<>(applicationResponse, Status.SUCCESS, Translator.toLocale(GepafinConstant.APPLICATION_STATUS_UPDATED_SUCCESSFULLY))); + return ResponseEntity.status(HttpStatus.OK) + .body(new Response<>(applicationResponse, Status.SUCCESS, Translator.toLocale(GepafinConstant.APPLICATION_STATUS_UPDATED_SUCCESSFULLY))); } -} + + @Override + public ResponseEntity generateApplicationPdf(HttpServletRequest request, Long applicationId) { + byte[] pdfBytes = pdfService.generatePdf(request, applicationId); + + // Prepare headers for downloading the PDF + HttpHeaders headers = new HttpHeaders(); + headers.add("Content-Disposition", "attachment; filename=bando-preview.pdf"); + + // Return the PDF as a response + return ResponseEntity.ok() + .headers(headers) + .contentType(MediaType.APPLICATION_PDF) + .body(pdfBytes); + } +} \ No newline at end of file