Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package airbizz.gandariacity.web.controller.report;
- import airbizz.gandariacity.domain.entity.CompanyData;
- import airbizz.gandariacity.domain.repository.CompanyDataRepository;
- import airbizz.gandariacity.dto.CompanyDataDto;
- import airbizz.gandariacity.dto.PurchaseOrderDetailDto;
- import airbizz.gandariacity.dto.PurchaseOrderDto;
- import airbizz.gandariacity.model.Util;
- import airbizz.gandariacity.service.purchaseorder.PurchaseOrderService;
- import com.fasterxml.jackson.databind.ObjectMapper;
- import com.google.common.io.Files;
- import iconpln.common.auth.client.HeaderConstant;
- import iconpln.common.model.http.HttpResponseModel;
- import iconpln.common.util.Check;
- import iconpln.sinergi.pandu.customer.shared.CustomerDto;
- import io.swagger.annotations.Api;
- import io.swagger.annotations.ApiImplicitParam;
- import io.swagger.annotations.ApiImplicitParams;
- import io.swagger.annotations.ApiOperation;
- import lombok.extern.slf4j.Slf4j;
- import net.sf.jasperreports.engine.*;
- import net.sf.jasperreports.engine.JRException;
- import net.sf.jasperreports.engine.JasperExportManager;
- import net.sf.jasperreports.engine.JasperFillManager;
- import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
- import net.sf.jasperreports.engine.data.JsonDataSource;
- import net.sf.jasperreports.engine.util.JRLoader;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.core.io.Resource;
- 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.*;
- import javax.servlet.http.HttpServletRequest;
- import java.io.ByteArrayInputStream;
- import java.io.File;
- import java.io.IOException;
- import java.text.SimpleDateFormat;
- import java.util.*;
- /**
- * @author ghi
- */
- @RestController
- @CrossOrigin
- @Api(tags = {"Report"})
- @Slf4j
- public class PdfReportPurchaseOrderController {
- @Autowired
- private PurchaseOrderService service;
- @Autowired
- private CompanyDataRepository companyDataRepository;
- @Value("classpath:/reports/reportPO.jasper")
- private Resource resource;
- @GetMapping(value = "/report", produces = MediaType.APPLICATION_PDF_VALUE)
- @ApiOperation(value = "Report Purchase Order", response = HttpResponseModel.class)
- @ApiImplicitParams({
- @ApiImplicitParam(name = HeaderConstant.AUTHORIZATION, paramType = "header", dataType = "string"),
- @ApiImplicitParam(name = HeaderConstant.APPSOURCE, paramType = "header", dataType = "string")
- })
- public ResponseEntity reportPO(HttpServletRequest req, @RequestParam("nopo") String nopo) {
- try {
- final CustomerDto userDto = (CustomerDto) req.getAttribute(HeaderConstant.CUSTOMER_OBJECT_SESSION);
- Check.nonNull(userDto, "Invalid Authorization Header!");
- SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
- Optional<PurchaseOrderDto> po = service.getReportById(nopo);
- if (!po.isPresent()) {
- return ResponseEntity.notFound().build();
- } else {
- PurchaseOrderDto pdto = po.get();
- Map parameters = new HashMap();
- parameters.put("nopo", pdto.getNopo());
- parameters.put("poDate", Util.formatDateToString(new Date(pdto.getCreatedDate())));
- parameters.put("createdDate", simpleDateFormat.format(new Date()));
- parameters.put("subTotal", Util.formatToIdr(pdto.getSubTotal()));
- parameters.put("discount", Util.formatToIdr(pdto.getDiscount()));
- parameters.put("ppn", Util.formatToIdr(pdto.getPpn()));
- parameters.put("biayaKirim", Util.formatToIdr(pdto.getBiayaKirim()));
- parameters.put("total", Util.formatToIdr(pdto.getTotal()));
- parameters.put("supplierName", pdto.getSupplierName());
- parameters.put("supplierPhone", pdto.getSupplierPhone());
- parameters.put("buyerName", pdto.getBuyerName());
- parameters.put("userLogin", userDto.getFullName());
- // find data company buyer
- Optional<CompanyData> optionalCompanyData = companyDataRepository.findById(pdto.getBuyerId());
- Check.isTrue(optionalCompanyData.isPresent(), "Data company : [" + pdto.getBuyerName() + " not found!");
- CompanyData compBuyer = optionalCompanyData.get();
- parameters.put("buyerAddress", compBuyer.getAddress());
- // find data company supplier
- Optional<CompanyData> optionalCompanyDataSupplier = companyDataRepository.findById(pdto.getSupplierId());
- Check.isTrue(optionalCompanyDataSupplier.isPresent(), "Data company : [" + pdto.getSupplierName() + " not found!");
- CompanyData compSupplier = optionalCompanyDataSupplier.get();
- parameters.put("supplierAddress", compSupplier.getAddress());
- parameters.put("unitName", pdto.getUnitName());
- String buyerAddress = buildAddress(compBuyer.getKelurahanName(), compBuyer.getKecamatanName(), compBuyer.getCityName(), compBuyer.getProvinceName(), compBuyer.getPostalCode());
- parameters.put("unitAddress", buyerAddress);
- ObjectMapper objectMapper = new ObjectMapper();
- List<Map> listData = new ArrayList<>();
- for(PurchaseOrderDetailDto d : pdto.getDetail()) {
- Map m = new HashMap();
- m.put("sku", d.getSku());
- m.put("noPOSAP", d.getNoPOSAP() == null || StringUtils.isEmpty(d.getNoPOSAP()) ? "-" : d.getNoPOSAP());
- m.put("productName", d.getProductName());
- m.put("qty", d.getQty());
- m.put("hargaSatuan", Util.formatToIdr(d.getHargaSatuan()));
- m.put("totalHarga", Util.formatToIdr(d.getTotalHarga()));
- listData.add(m);
- }
- String jsonInString = objectMapper.writeValueAsString(listData);
- JasperReport jasperReport = (JasperReport) JRLoader.loadObject(resource.getInputStream());
- JsonDataSource jsonDataSource = new JsonDataSource(new ByteArrayInputStream(jsonInString.getBytes()));
- // JRBeanCollectionDataSource listCollection = new JRBeanCollectionDataSource(listData);
- // parameters.put("listData", listCollection);
- JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, jsonDataSource);
- //Start
- String filePdfName = pdto.getNopo() + "_.pdf";
- JasperExportManager.exportReportToPdfFile(jasperPrint, filePdfName);
- File document = new File(filePdfName);
- byte[] buffer = Files.toByteArray(document);
- //Finish
- document.delete();
- return ResponseEntity.ok()
- .contentType(MediaType.parseMediaType(MediaType.APPLICATION_PDF_VALUE))
- .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + pdto.getNopo() + ".pdf\"")
- .body(buffer);
- }
- } catch (IOException | JRException e) {
- e.printStackTrace();
- return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
- }
- }
- private String buildAddress(String kelurahan, String kecamatan, String kota, String provinsi, String kodePos) {
- StringBuilder builder = new StringBuilder();
- if (!StringUtils.isEmpty(kelurahan)) {
- builder.append(kelurahan);
- }
- if (!StringUtils.isEmpty(kecamatan)) {
- if (!StringUtils.isEmpty(kelurahan)) {
- builder.append(",");
- }
- builder.append(kecamatan);
- }
- if (!StringUtils.isEmpty(kota)) {
- if (!StringUtils.isEmpty(kelurahan) || !StringUtils.isEmpty(kecamatan)) {
- builder.append(",");
- }
- builder.append(kota);
- }
- if (!StringUtils.isEmpty(provinsi)) {
- if (!StringUtils.isEmpty(kelurahan) || !StringUtils.isEmpty(kecamatan) || !StringUtils.isEmpty(kota)) {
- builder.append(",");
- }
- builder.append(provinsi);
- }
- if (!StringUtils.isEmpty(kodePos)) {
- if (!StringUtils.isEmpty(kelurahan) || !StringUtils.isEmpty(kecamatan) || !StringUtils.isEmpty(kota) || !StringUtils.isEmpty(provinsi)) {
- builder.append(",");
- }
- builder.append(kodePos);
- }
- return builder.toString();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement