Advertisement
Guest User

PdfReportPurchaseOrderController

a guest
Nov 11th, 2019
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.89 KB | None | 0 0
  1. package airbizz.gandariacity.web.controller.report;
  2.  
  3. import airbizz.gandariacity.domain.entity.CompanyData;
  4. import airbizz.gandariacity.domain.repository.CompanyDataRepository;
  5. import airbizz.gandariacity.dto.CompanyDataDto;
  6. import airbizz.gandariacity.dto.PurchaseOrderDetailDto;
  7. import airbizz.gandariacity.dto.PurchaseOrderDto;
  8. import airbizz.gandariacity.model.Util;
  9. import airbizz.gandariacity.service.purchaseorder.PurchaseOrderService;
  10. import com.fasterxml.jackson.databind.ObjectMapper;
  11. import com.google.common.io.Files;
  12. import iconpln.common.auth.client.HeaderConstant;
  13. import iconpln.common.model.http.HttpResponseModel;
  14. import iconpln.common.util.Check;
  15. import iconpln.sinergi.pandu.customer.shared.CustomerDto;
  16. import io.swagger.annotations.Api;
  17. import io.swagger.annotations.ApiImplicitParam;
  18. import io.swagger.annotations.ApiImplicitParams;
  19. import io.swagger.annotations.ApiOperation;
  20. import lombok.extern.slf4j.Slf4j;
  21. import net.sf.jasperreports.engine.*;
  22. import net.sf.jasperreports.engine.JRException;
  23. import net.sf.jasperreports.engine.JasperExportManager;
  24. import net.sf.jasperreports.engine.JasperFillManager;
  25. import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
  26. import net.sf.jasperreports.engine.data.JsonDataSource;
  27. import net.sf.jasperreports.engine.util.JRLoader;
  28. import org.apache.commons.lang3.StringUtils;
  29. import org.springframework.beans.factory.annotation.Autowired;
  30. import org.springframework.beans.factory.annotation.Value;
  31. import org.springframework.core.io.Resource;
  32. import org.springframework.http.HttpHeaders;
  33. import org.springframework.http.HttpStatus;
  34. import org.springframework.http.MediaType;
  35. import org.springframework.http.ResponseEntity;
  36. import org.springframework.web.bind.annotation.*;
  37.  
  38. import javax.servlet.http.HttpServletRequest;
  39. import java.io.ByteArrayInputStream;
  40. import java.io.File;
  41. import java.io.IOException;
  42. import java.text.SimpleDateFormat;
  43. import java.util.*;
  44.  
  45. /**
  46. * @author ghi
  47. */
  48. @RestController
  49. @CrossOrigin
  50. @Api(tags = {"Report"})
  51. @Slf4j
  52. public class PdfReportPurchaseOrderController {
  53.  
  54. @Autowired
  55. private PurchaseOrderService service;
  56.  
  57. @Autowired
  58. private CompanyDataRepository companyDataRepository;
  59.  
  60. @Value("classpath:/reports/reportPO.jasper")
  61. private Resource resource;
  62.  
  63. @GetMapping(value = "/report", produces = MediaType.APPLICATION_PDF_VALUE)
  64. @ApiOperation(value = "Report Purchase Order", response = HttpResponseModel.class)
  65. @ApiImplicitParams({
  66. @ApiImplicitParam(name = HeaderConstant.AUTHORIZATION, paramType = "header", dataType = "string"),
  67. @ApiImplicitParam(name = HeaderConstant.APPSOURCE, paramType = "header", dataType = "string")
  68. })
  69. public ResponseEntity reportPO(HttpServletRequest req, @RequestParam("nopo") String nopo) {
  70. try {
  71. final CustomerDto userDto = (CustomerDto) req.getAttribute(HeaderConstant.CUSTOMER_OBJECT_SESSION);
  72. Check.nonNull(userDto, "Invalid Authorization Header!");
  73.  
  74. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
  75.  
  76. Optional<PurchaseOrderDto> po = service.getReportById(nopo);
  77. if (!po.isPresent()) {
  78. return ResponseEntity.notFound().build();
  79. } else {
  80. PurchaseOrderDto pdto = po.get();
  81. Map parameters = new HashMap();
  82. parameters.put("nopo", pdto.getNopo());
  83. parameters.put("poDate", Util.formatDateToString(new Date(pdto.getCreatedDate())));
  84. parameters.put("createdDate", simpleDateFormat.format(new Date()));
  85. parameters.put("subTotal", Util.formatToIdr(pdto.getSubTotal()));
  86. parameters.put("discount", Util.formatToIdr(pdto.getDiscount()));
  87. parameters.put("ppn", Util.formatToIdr(pdto.getPpn()));
  88. parameters.put("biayaKirim", Util.formatToIdr(pdto.getBiayaKirim()));
  89. parameters.put("total", Util.formatToIdr(pdto.getTotal()));
  90. parameters.put("supplierName", pdto.getSupplierName());
  91. parameters.put("supplierPhone", pdto.getSupplierPhone());
  92. parameters.put("buyerName", pdto.getBuyerName());
  93. parameters.put("userLogin", userDto.getFullName());
  94.  
  95. // find data company buyer
  96. Optional<CompanyData> optionalCompanyData = companyDataRepository.findById(pdto.getBuyerId());
  97. Check.isTrue(optionalCompanyData.isPresent(), "Data company : [" + pdto.getBuyerName() + " not found!");
  98. CompanyData compBuyer = optionalCompanyData.get();
  99. parameters.put("buyerAddress", compBuyer.getAddress());
  100.  
  101. // find data company supplier
  102. Optional<CompanyData> optionalCompanyDataSupplier = companyDataRepository.findById(pdto.getSupplierId());
  103. Check.isTrue(optionalCompanyDataSupplier.isPresent(), "Data company : [" + pdto.getSupplierName() + " not found!");
  104. CompanyData compSupplier = optionalCompanyDataSupplier.get();
  105. parameters.put("supplierAddress", compSupplier.getAddress());
  106.  
  107. parameters.put("unitName", pdto.getUnitName());
  108. String buyerAddress = buildAddress(compBuyer.getKelurahanName(), compBuyer.getKecamatanName(), compBuyer.getCityName(), compBuyer.getProvinceName(), compBuyer.getPostalCode());
  109. parameters.put("unitAddress", buyerAddress);
  110.  
  111. ObjectMapper objectMapper = new ObjectMapper();
  112. List<Map> listData = new ArrayList<>();
  113.  
  114. for(PurchaseOrderDetailDto d : pdto.getDetail()) {
  115. Map m = new HashMap();
  116. m.put("sku", d.getSku());
  117. m.put("noPOSAP", d.getNoPOSAP() == null || StringUtils.isEmpty(d.getNoPOSAP()) ? "-" : d.getNoPOSAP());
  118. m.put("productName", d.getProductName());
  119. m.put("qty", d.getQty());
  120. m.put("hargaSatuan", Util.formatToIdr(d.getHargaSatuan()));
  121. m.put("totalHarga", Util.formatToIdr(d.getTotalHarga()));
  122. listData.add(m);
  123. }
  124.  
  125. String jsonInString = objectMapper.writeValueAsString(listData);
  126. JasperReport jasperReport = (JasperReport) JRLoader.loadObject(resource.getInputStream());
  127. JsonDataSource jsonDataSource = new JsonDataSource(new ByteArrayInputStream(jsonInString.getBytes()));
  128.  
  129. // JRBeanCollectionDataSource listCollection = new JRBeanCollectionDataSource(listData);
  130. // parameters.put("listData", listCollection);
  131.  
  132. JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, jsonDataSource);
  133.  
  134. //Start
  135. String filePdfName = pdto.getNopo() + "_.pdf";
  136. JasperExportManager.exportReportToPdfFile(jasperPrint, filePdfName);
  137. File document = new File(filePdfName);
  138. byte[] buffer = Files.toByteArray(document);
  139. //Finish
  140.  
  141. document.delete();
  142.  
  143. return ResponseEntity.ok()
  144. .contentType(MediaType.parseMediaType(MediaType.APPLICATION_PDF_VALUE))
  145. .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + pdto.getNopo() + ".pdf\"")
  146. .body(buffer);
  147. }
  148.  
  149. } catch (IOException | JRException e) {
  150. e.printStackTrace();
  151. return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
  152. }
  153. }
  154.  
  155. private String buildAddress(String kelurahan, String kecamatan, String kota, String provinsi, String kodePos) {
  156. StringBuilder builder = new StringBuilder();
  157. if (!StringUtils.isEmpty(kelurahan)) {
  158. builder.append(kelurahan);
  159. }
  160. if (!StringUtils.isEmpty(kecamatan)) {
  161. if (!StringUtils.isEmpty(kelurahan)) {
  162. builder.append(",");
  163. }
  164. builder.append(kecamatan);
  165. }
  166. if (!StringUtils.isEmpty(kota)) {
  167. if (!StringUtils.isEmpty(kelurahan) || !StringUtils.isEmpty(kecamatan)) {
  168. builder.append(",");
  169. }
  170. builder.append(kota);
  171. }
  172. if (!StringUtils.isEmpty(provinsi)) {
  173. if (!StringUtils.isEmpty(kelurahan) || !StringUtils.isEmpty(kecamatan) || !StringUtils.isEmpty(kota)) {
  174. builder.append(",");
  175. }
  176. builder.append(provinsi);
  177. }
  178. if (!StringUtils.isEmpty(kodePos)) {
  179. if (!StringUtils.isEmpty(kelurahan) || !StringUtils.isEmpty(kecamatan) || !StringUtils.isEmpty(kota) || !StringUtils.isEmpty(provinsi)) {
  180. builder.append(",");
  181. }
  182. builder.append(kodePos);
  183. }
  184. return builder.toString();
  185. }
  186. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement