Advertisement
pperez_awto

XML Signature Component

Mar 31st, 2020
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.08 KB | None | 0 0
  1. package cl.awto.microservice.poinvoice.components.invoice.signature;
  2.  
  3. import cl.awto.microservice.msmodel.domain.model.AwInvoiceEntity;
  4. import cl.awto.microservice.msmodel.domain.model.AwPurchaseOrderEntity;
  5. import cl.awto.microservice.msmodel.domain.model.AwUserEntity;
  6. import cl.awto.microservice.poinvoice.domain.enums.invoice.signature.UserResidence;
  7. import cl.awto.microservice.poinvoice.service.message.MessageService;
  8. import cl.awto.microservice.poinvoice.domain.enums.purchaseorder.PurchaseOrderType;
  9. import cl.awto.microservice.poinvoice.domain.common.AwtoUtils;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.stereotype.Component;
  12.  
  13. import java.text.SimpleDateFormat;
  14. import java.util.Date;
  15.  
  16. @Component
  17. public class XMLSignatureComponent {
  18.  
  19.     @Autowired
  20.     private MessageService messageService;
  21.  
  22.     /**
  23.      * Creates the invoice xml.
  24.      *
  25.      * @param user    the user info
  26.      * @param invoice the invoice info
  27.      * @return the string
  28.      */
  29.     public String createInvoiceXml(AwUserEntity user, AwInvoiceEntity invoice, AwPurchaseOrderEntity purchaseOrder) {
  30.         StringBuilder xmlBuilder = new StringBuilder();
  31.         if (user != null && invoice != null) {
  32.             xmlBuilder.append(buildHeaderElement());
  33.             String invoiceDate = convertInvoiceDateFormat(new Date());
  34.             xmlBuilder.append(buildInvoiceInfo(invoiceDate, user, invoice));
  35.             xmlBuilder.append(buildItemInfo(invoice, purchaseOrder));
  36.  
  37.             xmlBuilder.append(buildFooterElement());
  38.         }
  39.         return xmlBuilder.toString();
  40.  
  41.     }
  42.  
  43.     private static String convertInvoiceDateFormat(Date pDate) {
  44.         SimpleDateFormat lSdf = new SimpleDateFormat("yyyy-MM-dd");
  45.         String lStrDate = null;
  46.         if (pDate != null) {
  47.             lStrDate = lSdf.format(pDate);
  48.         }
  49.         return lStrDate;
  50.  
  51.     }
  52.  
  53.     /**
  54.      * Builds the header element.
  55.      *
  56.      * @return the string
  57.      */
  58.     private String buildHeaderElement() {
  59.         StringBuilder lXmlBuilder = new StringBuilder("<?xml version=\"1.0\" encoding=\"ISO-8859-1\" standalone=\"yes\"?>");
  60.         lXmlBuilder.append("<SigantureInvoice xmlns=\"http://www.sii.cl/SiiDte\">");
  61.         lXmlBuilder.append("<DTE>");
  62.         return lXmlBuilder.toString();
  63.     }
  64.  
  65.     /**
  66.      * Builds the footer element.
  67.      *
  68.      * @return the string
  69.      */
  70.     private String buildFooterElement() {
  71.         StringBuilder lXmlBuilder = new StringBuilder("</DTE>");
  72.         lXmlBuilder.append("</SigantureInvoice>");
  73.         return lXmlBuilder.toString();
  74.     }
  75.  
  76.     /**
  77.      * Builds the invoice info.
  78.      *
  79.      * @param invoiceDate the invoice date
  80.      * @param user        the user info
  81.      * @param invoice     the invoice info
  82.      * @return the string
  83.      */
  84.     private String buildInvoiceInfo(String invoiceDate,
  85.                                     AwUserEntity user, AwInvoiceEntity invoice) {
  86.         StringBuilder xmlBuilder = new StringBuilder("<Encabezado>");
  87.         xmlBuilder.append(buildInvoiceDetail(invoiceDate));
  88.         xmlBuilder.append(buildInvoiceUserDetail(user));
  89.         xmlBuilder.append(buildInvoiceAmount(invoice.getAmount()));
  90.         xmlBuilder.append("</Encabezado>");
  91.         return xmlBuilder.toString();
  92.     }
  93.  
  94.     private String buildItemInfo(AwInvoiceEntity invoice, AwPurchaseOrderEntity purchaseOrder) {
  95.  
  96.         String tpoCodigo = purchaseOrder.getOrderType();
  97.         String vlrCodigo = "";
  98.         String descripcion = purchaseOrder.getDescription();
  99.  
  100.         if (PurchaseOrderType.TRIP.toString().equals(purchaseOrder.getOrderType())) {
  101.             String messageTpo = messageService.getMessage("invoice.tpo.trip");
  102.             tpoCodigo = messageTpo;
  103.             if (purchaseOrder.getAwTrip() != null) {
  104.                 vlrCodigo = purchaseOrder.getAwTrip().getAwVehicleByVehicleId().getPatent();
  105.             } else {
  106.                 vlrCodigo = "Reserva";
  107.             }
  108.             String[] args = new String[2];
  109.             args[0] = "$" + invoice.getAmount();
  110.             args[1] = vlrCodigo;
  111.             String messageDesc = messageService.getMessage("invoice.description.trip", args);
  112.             descripcion = messageDesc;
  113.         } else if (PurchaseOrderType.MEMBERSHIP.toString().equals(purchaseOrder.getOrderType())) {
  114.             String messageTpo = messageService.getMessage("invoice.tpo.membership");
  115.             tpoCodigo = messageTpo;
  116.             vlrCodigo = purchaseOrder.getAwMemberShip().getMembershipName(); //TODO: falta null check
  117.             String[] args = new String[2];
  118.             args[0] = "$" + invoice.getAmount();
  119.             args[1] = vlrCodigo;
  120.             String messageDesc = messageService.getMessage("invoice.description.membership", args);
  121.             descripcion = messageDesc;
  122.         } else if (PurchaseOrderType.OTHER.toString().equals(purchaseOrder.getOrderType())) {
  123.             vlrCodigo = purchaseOrder.getOrderType();
  124.             String messageDesc = messageService.getMessage("invoice.description.other");
  125.             descripcion = messageDesc;
  126.         } else if (PurchaseOrderType.AWTO_CREDIT.toString().equals(purchaseOrder.getOrderType())) {
  127.             String messageTpo = messageService.getMessage("invoice.tpo.awtocredit");
  128.             tpoCodigo = messageTpo;
  129.             vlrCodigo = tpoCodigo;//TODO: Metodo de recarga pendiente
  130.             String messageDesc = messageService.getMessage("invoice.description.awtocredit");
  131.             descripcion = messageDesc;
  132.         } else if (PurchaseOrderType.EXTENDED_BOOKING.toString().equals(purchaseOrder.getOrderType())) {
  133.             String messageTpo = messageService.getMessage("invoice.tpo.eb");
  134.             tpoCodigo = messageTpo;
  135.             vlrCodigo = purchaseOrder.getOrderType();
  136.             descripcion = purchaseOrder.getDescription();
  137.         } else if (PurchaseOrderType.DAMAGE.toString().equals(purchaseOrder.getOrderType())) {
  138.             vlrCodigo = purchaseOrder.getAwTrip() != null ?
  139.                     purchaseOrder.getAwTrip().getAwVehicleByVehicleId().getPatent()
  140.                     : "Daño";
  141.         }
  142.  
  143.         StringBuilder xmlBuilder = new StringBuilder("<Detalle>");
  144.         xmlBuilder.append("<NroLinDet>");
  145.         xmlBuilder.append(1);
  146.         xmlBuilder.append("</NroLinDet>");
  147.         xmlBuilder.append("<CdgItem>");
  148.         xmlBuilder.append("<TpoCodigo>");
  149.         xmlBuilder.append(tpoCodigo);
  150.         xmlBuilder.append("</TpoCodigo>");
  151.         xmlBuilder.append("<VlrCodigo>");
  152.         xmlBuilder.append(vlrCodigo);
  153.         xmlBuilder.append("</VlrCodigo>");
  154.         xmlBuilder.append("</CdgItem>");
  155.         xmlBuilder.append("<DscItem>");
  156.         xmlBuilder.append((descripcion.replaceAll("\n", "")).replaceAll("\t", ""));
  157.         xmlBuilder.append("</DscItem>");
  158.         xmlBuilder.append("<MontoItem>");
  159.         xmlBuilder.append(invoice.getAmount());
  160.         xmlBuilder.append("</MontoItem>");
  161.         xmlBuilder.append("</Detalle>");
  162.         return xmlBuilder.toString();
  163.     }
  164.  
  165.     /**
  166.      * Builds the invoice detail.
  167.      *
  168.      * @param invoiceDate the invoice date
  169.      * @return the string
  170.      */
  171.     private String buildInvoiceDetail(String invoiceDate) {
  172.         StringBuilder xmlBuilder = new StringBuilder("<IdDoc>");
  173.         xmlBuilder.append("<Folio>");
  174.         xmlBuilder.append("");
  175.         xmlBuilder.append("</Folio>");
  176.         xmlBuilder.append("<FchEmis>");
  177.         xmlBuilder.append(invoiceDate);
  178.         xmlBuilder.append("</FchEmis>");
  179.         xmlBuilder.append("<FchVenc>");
  180.         xmlBuilder.append(invoiceDate);
  181.         xmlBuilder.append("</FchVenc>");
  182.         xmlBuilder.append("</IdDoc>");
  183.         return xmlBuilder.toString();
  184.     }
  185.  
  186.     /**
  187.      * Builds the invoice user detail.
  188.      *
  189.      * @param user the user info
  190.      * @return the string
  191.      */
  192.     private String buildInvoiceUserDetail(AwUserEntity user) {
  193.         StringBuilder xmlBuilder = new StringBuilder();
  194.         xmlBuilder.append("<Receptor>");
  195.         xmlBuilder.append("<RUTRecep>");
  196.         String rut = "";
  197.         if (user.getResidence() != null && user.getResidence().equalsIgnoreCase(UserResidence.Foreign.name())) {
  198.             rut = "11111111-1";
  199.         } else {
  200.             if (user.getRutNo() != null && !user.getRutNo().isEmpty()) {
  201.                 rut = user.getRutNo().replaceAll("\\s", "");
  202.                 rut = AwtoUtils.formatRut(rut);
  203.                 rut = rut.replace(".", "");
  204.             }
  205.         }
  206.         xmlBuilder.append(rut);
  207.         xmlBuilder.append("</RUTRecep>");
  208.         xmlBuilder.append("<Nombre>");
  209.         String fullName = user.getFname();
  210.         if (!AwtoUtils.isEmpty(user.getLname())){
  211.             fullName += " " + user.getLname();
  212.         }
  213.         xmlBuilder.append(fullName);
  214.         xmlBuilder.append("</Nombre>");
  215.         xmlBuilder.append("<Contacto>");
  216.         xmlBuilder.append(user.getEmailId());
  217.         xmlBuilder.append("</Contacto>");
  218.         xmlBuilder.append("<DirRecep>");
  219.         if (user.getContactAddress() != null && user.getContactAddress().getFormattedAddress() != null) {
  220.             xmlBuilder.append(user.getContactAddress().getFormattedAddress());
  221.         } else {
  222.             xmlBuilder.append("Santiago, Chile");
  223.         }
  224.         xmlBuilder.append("</DirRecep>");
  225.         xmlBuilder.append("<CiudadRecep>");
  226.         if (user.getContactAddress().getCity() != null) {
  227.             xmlBuilder.append(user.getContactAddress().getCity());
  228.         } else {
  229.             xmlBuilder.append("");
  230.         }
  231.         xmlBuilder.append("</CiudadRecep>");
  232.         xmlBuilder.append("</Receptor>");
  233.         return xmlBuilder.toString();
  234.     }
  235.  
  236.     /**
  237.      * Builds the invoice amount.
  238.      *
  239.      * @param pAmount the amount
  240.      * @return the string
  241.      */
  242.     private String buildInvoiceAmount(double pAmount) {
  243.         StringBuilder xmlBuilder = new StringBuilder("<Totales>");
  244.         xmlBuilder.append("<MntTotal>");
  245.         xmlBuilder.append(pAmount);
  246.         xmlBuilder.append("</MntTotal>");
  247.         xmlBuilder.append("</Totales>");
  248.         return xmlBuilder.toString();
  249.     }
  250. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement