Search in sources :

Example 16 with BusinessServiceException

use of sic.service.BusinessServiceException in project sic by belluccifranco.

the class AfipServiceImpl method transformFacturaVentaToFECAERequest.

@Override
public FECAERequest transformFacturaVentaToFECAERequest(FacturaVenta factura, int siguienteNroComprobante, int nroPuntoDeVentaAfip) {
    FECAERequest fecaeRequest = new FECAERequest();
    FECAECabRequest cabecera = new FECAECabRequest();
    FECAEDetRequest detalle = new FECAEDetRequest();
    // DocTipo = 80: CUIT, 86: CUIL, 96: DNI, 99: Doc.(Otro)
    switch(factura.getTipoComprobante()) {
        case FACTURA_A:
            cabecera.setCbteTipo(1);
            detalle.setDocTipo(80);
            detalle.setDocNro(Long.valueOf(factura.getCliente().getIdFiscal().replace("-", "")));
            break;
        case FACTURA_B:
            cabecera.setCbteTipo(6);
            // menor a $1000, si DocTipo = 99 DocNro debe ser igual a 0 (simula un consumidor final ???)
            if (factura.getTotal() < 1000) {
                detalle.setDocTipo(99);
                detalle.setDocNro(0);
            } else {
                if (factura.getCliente().getIdFiscal().equals("")) {
                    throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_cliente_sin_idFiscal_error"));
                }
                detalle.setDocTipo(80);
                detalle.setDocNro(Long.valueOf(factura.getCliente().getIdFiscal().replace("-", "")));
            }
            break;
        case FACTURA_C:
            cabecera.setCbteTipo(11);
            detalle.setDocTipo(0);
            detalle.setDocNro(0);
            break;
    }
    // Cantidad de registros del detalle del comprobante o lote de comprobantes de ingreso
    cabecera.setCantReg(1);
    // Punto de Venta del comprobante que se está informando. Si se informa más de un comprobante, todos deben corresponder al mismo punto de venta
    cabecera.setPtoVta(nroPuntoDeVentaAfip);
    fecaeRequest.setFeCabReq(cabecera);
    ArrayOfFECAEDetRequest arrayDetalle = new ArrayOfFECAEDetRequest();
    detalle.setCbteDesde(siguienteNroComprobante);
    detalle.setCbteHasta(siguienteNroComprobante);
    // Concepto del Comprobante. Valores permitidos: 1 Productos, 2 Servicios, 3 Productos y Servicios        
    detalle.setConcepto(1);
    // Fecha del comprobante (yyyymmdd)        
    detalle.setCbteFch(formatterFechaHora.format(factura.getFecha()).replace("/", ""));
    ArrayOfAlicIva arrayIVA = new ArrayOfAlicIva();
    if (factura.getIva_21_neto() != 0) {
        AlicIva alicIVA21 = new AlicIva();
        // Valores: 5 (21%), 4 (10.5%)
        alicIVA21.setId(5);
        // Se calcula con: (100 * IVA_neto) / %IVA
        alicIVA21.setBaseImp(Utilidades.round((100 * factura.getIva_21_neto()) / 21, 2));
        alicIVA21.setImporte(Utilidades.round(factura.getIva_21_neto(), 2));
        arrayIVA.getAlicIva().add(alicIVA21);
    }
    if (factura.getIva_105_neto() != 0) {
        AlicIva alicIVA105 = new AlicIva();
        // Valores: 5 (21%), 4 (10.5%)
        alicIVA105.setId(4);
        // Se calcula con: (100 * IVA_neto) / %IVA
        alicIVA105.setBaseImp(Utilidades.round((100 * factura.getIva_105_neto()) / 10.5, 2));
        alicIVA105.setImporte(Utilidades.round(factura.getIva_105_neto(), 2));
        arrayIVA.getAlicIva().add(alicIVA105);
    }
    // Array para informar las alícuotas y sus importes asociados a un comprobante <AlicIva>. Para comprobantes tipo C y Bienes Usados – Emisor Monotributista no debe informar el array.
    detalle.setIva(arrayIVA);
    // Suma de los importes del array de IVA. Para comprobantes tipo C debe ser igual a cero (0).
    detalle.setImpIVA(Utilidades.round(factura.getIva_105_neto() + factura.getIva_21_neto(), 2));
    // Importe neto gravado. Debe ser menor o igual a Importe total y no puede ser menor a cero. Para comprobantes tipo C este campo corresponde al Importe del Sub Total                
    detalle.setImpNeto(Utilidades.round(factura.getSubTotal_bruto(), 2));
    // Importe total del comprobante, Debe ser igual a Importe neto no gravado + Importe exento + Importe neto gravado + todos los campos de IVA al XX% + Importe de tributos                        
    detalle.setImpTotal(Utilidades.round(factura.getTotal(), 2));
    // Código de moneda del comprobante. Consultar método FEParamGetTiposMonedas para valores posibles
    detalle.setMonId("PES");
    // Cotización de la moneda informada. Para PES, pesos argentinos la misma debe ser 1
    detalle.setMonCotiz(1);
    arrayDetalle.getFECAEDetRequest().add(detalle);
    fecaeRequest.setFeDetReq(arrayDetalle);
    return fecaeRequest;
}
Also used : ArrayOfAlicIva(afip.wsfe.wsdl.ArrayOfAlicIva) FECAECabRequest(afip.wsfe.wsdl.FECAECabRequest) BusinessServiceException(sic.service.BusinessServiceException) ArrayOfFECAEDetRequest(afip.wsfe.wsdl.ArrayOfFECAEDetRequest) FECAEDetRequest(afip.wsfe.wsdl.FECAEDetRequest) ArrayOfFECAEDetRequest(afip.wsfe.wsdl.ArrayOfFECAEDetRequest) ArrayOfAlicIva(afip.wsfe.wsdl.ArrayOfAlicIva) AlicIva(afip.wsfe.wsdl.AlicIva) FECAERequest(afip.wsfe.wsdl.FECAERequest)

Example 17 with BusinessServiceException

use of sic.service.BusinessServiceException in project sic by belluccifranco.

the class AfipWebServiceSOAPClient method crearCMS.

public byte[] crearCMS(byte[] p12file, String p12pass, String signer, String service, long ticketTime) {
    PrivateKey pKey = null;
    X509Certificate pCertificate = null;
    byte[] asn1_cms = null;
    CertStore cstore = null;
    try {
        KeyStore ks = KeyStore.getInstance("pkcs12");
        InputStream is;
        is = Utilidades.convertirByteArrayToInputStream(p12file);
        ks.load(is, p12pass.toCharArray());
        is.close();
        pKey = (PrivateKey) ks.getKey(signer, p12pass.toCharArray());
        pCertificate = (X509Certificate) ks.getCertificate(signer);
        ArrayList<X509Certificate> certList = new ArrayList<>();
        certList.add(pCertificate);
        if (Security.getProvider("BC") == null) {
            Security.addProvider(new BouncyCastleProvider());
        }
        cstore = CertStore.getInstance("Collection", new CollectionCertStoreParameters(certList), "BC");
    } catch (KeyStoreException | IOException | NoSuchAlgorithmException | CertificateException | UnrecoverableKeyException | InvalidAlgorithmParameterException | NoSuchProviderException ex) {
        LOGGER.error(ex.getMessage());
        throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_certificado_error"));
    }
    String loginTicketRequest_xml = this.crearTicketRequerimientoAcceso(service, ticketTime);
    try {
        CMSSignedDataGenerator generator = new CMSSignedDataGenerator();
        generator.addSigner(pKey, pCertificate, CMSSignedDataGenerator.DIGEST_SHA1);
        generator.addCertificatesAndCRLs(cstore);
        CMSProcessable data = new CMSProcessableByteArray(loginTicketRequest_xml.getBytes());
        CMSSignedData signed = generator.generate(data, true, "BC");
        asn1_cms = signed.getEncoded();
    } catch (IllegalArgumentException | CertStoreException | CMSException | NoSuchAlgorithmException | NoSuchProviderException | IOException ex) {
        LOGGER.error(ex.getMessage());
        throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_firmando_certificado_error"));
    }
    return asn1_cms;
}
Also used : CMSSignedDataGenerator(org.bouncycastle.cms.CMSSignedDataGenerator) PrivateKey(java.security.PrivateKey) ArrayList(java.util.ArrayList) CertificateException(java.security.cert.CertificateException) NoSuchAlgorithmException(java.security.NoSuchAlgorithmException) CollectionCertStoreParameters(java.security.cert.CollectionCertStoreParameters) BusinessServiceException(sic.service.BusinessServiceException) UnrecoverableKeyException(java.security.UnrecoverableKeyException) BouncyCastleProvider(org.bouncycastle.jce.provider.BouncyCastleProvider) CMSProcessableByteArray(org.bouncycastle.cms.CMSProcessableByteArray) InvalidAlgorithmParameterException(java.security.InvalidAlgorithmParameterException) InputStream(java.io.InputStream) CertStoreException(java.security.cert.CertStoreException) KeyStoreException(java.security.KeyStoreException) IOException(java.io.IOException) KeyStore(java.security.KeyStore) CMSSignedData(org.bouncycastle.cms.CMSSignedData) X509Certificate(java.security.cert.X509Certificate) CMSProcessable(org.bouncycastle.cms.CMSProcessable) NoSuchProviderException(java.security.NoSuchProviderException) CertStore(java.security.cert.CertStore) CMSException(org.bouncycastle.cms.CMSException)

Example 18 with BusinessServiceException

use of sic.service.BusinessServiceException in project sic by belluccifranco.

the class FacturaServiceImpl method buscarFacturaVenta.

@Override
public List<FacturaVenta> buscarFacturaVenta(BusquedaFacturaVentaCriteria criteria) {
    //Empresa
    if (criteria.getEmpresa() == null) {
        throw new EntityNotFoundException(ResourceBundle.getBundle("Mensajes").getString("mensaje_empresa_no_existente"));
    }
    //Fecha de Factura        
    if (criteria.isBuscaPorFecha() == true && (criteria.getFechaDesde() == null || criteria.getFechaHasta() == null)) {
        throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_factura_fechas_busqueda_invalidas"));
    }
    if (criteria.isBuscaPorFecha() == true) {
        Calendar cal = new GregorianCalendar();
        cal.setTime(criteria.getFechaDesde());
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        criteria.setFechaDesde(cal.getTime());
        cal.setTime(criteria.getFechaHasta());
        cal.set(Calendar.HOUR_OF_DAY, 23);
        cal.set(Calendar.MINUTE, 59);
        cal.set(Calendar.SECOND, 59);
        criteria.setFechaHasta(cal.getTime());
    }
    //Cliente
    if (criteria.isBuscaCliente() == true && criteria.getCliente() == null) {
        throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_factura_cliente_vacio"));
    }
    //Usuario
    if (criteria.isBuscaUsuario() == true && criteria.getUsuario() == null) {
        throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_factura_usuario_vacio"));
    }
    if (criteria.isBuscaViajante() == true && criteria.getViajante() == null) {
        throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_factura_viajante_vacio"));
    }
    return facturaRepository.buscarFacturasVenta(criteria);
}
Also used : BusinessServiceException(sic.service.BusinessServiceException) Calendar(java.util.Calendar) GregorianCalendar(java.util.GregorianCalendar) GregorianCalendar(java.util.GregorianCalendar) EntityNotFoundException(javax.persistence.EntityNotFoundException)

Example 19 with BusinessServiceException

use of sic.service.BusinessServiceException in project sic by belluccifranco.

the class FacturaServiceImpl method validarFactura.

private void validarFactura(Factura factura) {
    //Entrada de Datos
    if (factura.getFechaVencimiento() != null) {
        //quitamos la parte de hora de la Fecha de Vencimiento
        Calendar calFechaVencimiento = new GregorianCalendar();
        calFechaVencimiento.setTime(factura.getFechaVencimiento());
        calFechaVencimiento.set(Calendar.HOUR, 0);
        calFechaVencimiento.set(Calendar.MINUTE, 0);
        calFechaVencimiento.set(Calendar.SECOND, 0);
        calFechaVencimiento.set(Calendar.MILLISECOND, 0);
        factura.setFechaVencimiento(calFechaVencimiento.getTime());
        //quitamos la parte de hora de la Fecha Actual para poder comparar correctamente
        Calendar calFechaDeFactura = new GregorianCalendar();
        calFechaDeFactura.setTime(factura.getFecha());
        calFechaDeFactura.set(Calendar.HOUR, 0);
        calFechaDeFactura.set(Calendar.MINUTE, 0);
        calFechaDeFactura.set(Calendar.SECOND, 0);
        calFechaDeFactura.set(Calendar.MILLISECOND, 0);
        if (Validator.compararFechas(factura.getFechaVencimiento(), calFechaDeFactura.getTime()) > 0) {
            throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_factura_fecha_invalida"));
        }
    }
    //Requeridos
    if (factura.getFecha() == null) {
        throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_factura_fecha_vacia"));
    }
    if (factura.getTipoComprobante() == null) {
        throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_factura_tipo_factura_vacia"));
    }
    if (factura.getTransportista() == null) {
        throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_factura_transportista_vacio"));
    }
    if (factura.getRenglones() == null || factura.getRenglones().isEmpty()) {
        throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_factura_renglones_vacio"));
    }
    if (factura.getEmpresa() == null) {
        throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_factura_empresa_vacia"));
    }
    if (factura instanceof FacturaCompra) {
        FacturaCompra facturaCompra = (FacturaCompra) factura;
        if (facturaCompra.getProveedor() == null) {
            throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_factura_proveedor_vacio"));
        }
    }
    if (factura instanceof FacturaVenta) {
        FacturaVenta facturaVenta = (FacturaVenta) factura;
        if (facturaVenta.getCliente() == null) {
            throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_factura_cliente_vacio"));
        }
        if (facturaVenta.getUsuario() == null) {
            throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_factura_usuario_vacio"));
        }
    }
    //Calculos
    //SubTotal
    double[] importes = new double[factura.getRenglones().size()];
    int i = 0;
    for (RenglonFactura renglon : factura.getRenglones()) {
        importes[i] = renglon.getImporte();
        i++;
    }
    if (factura.getSubTotal() != this.calcularSubTotal(importes)) {
        throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_factura_sub_total_no_valido"));
    }
    //SubTotalBruto
    double subTotalBruto = this.calcularSubTotalBruto(factura.getTipoComprobante(), factura.getSubTotal(), factura.getRecargo_neto(), factura.getDescuento_neto(), factura.getIva_105_neto(), factura.getIva_21_neto());
    if (factura.getSubTotal_bruto() != subTotalBruto) {
        throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_factura_sub_total_bruto_no_valido"));
    }
    //IVA
    i = 0;
    if (factura.getTipoComprobante().equals(TipoDeComprobante.FACTURA_A) || factura.getTipoComprobante().equals(TipoDeComprobante.FACTURA_B) || factura.getTipoComprobante().equals(TipoDeComprobante.PRESUPUESTO)) {
        double[] ivaPorcentajes = new double[factura.getRenglones().size()];
        double[] ivaNetos = new double[factura.getRenglones().size()];
        double[] cantidades = new double[factura.getRenglones().size()];
        for (RenglonFactura renglon : factura.getRenglones()) {
            ivaPorcentajes[i] = renglon.getIva_porcentaje();
            ivaNetos[i] = renglon.getIva_neto();
            cantidades[i] = renglon.getCantidad();
            i++;
        }
        double ivaNeto21 = this.calcularIvaNetoFactura(factura.getTipoComprobante(), cantidades, ivaPorcentajes, ivaNetos, 21, factura.getDescuento_porcentaje(), factura.getRecargo_porcentaje());
        double ivaNeto105 = this.calcularIvaNetoFactura(factura.getTipoComprobante(), cantidades, ivaPorcentajes, ivaNetos, 10.5, factura.getDescuento_porcentaje(), factura.getRecargo_porcentaje());
        if (factura.getIva_21_neto() != ivaNeto21) {
            throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_factura_iva21_no_valido"));
        }
        if (factura.getIva_105_neto() != ivaNeto105) {
            throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_factura_iva105_no_valido"));
        }
    }
    //Total
    double total = this.calcularTotal(factura.getSubTotal_bruto(), factura.getIva_105_neto(), factura.getIva_21_neto());
    if (factura.getTotal() != total) {
        throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_factura_total_no_valido"));
    }
}
Also used : FacturaVenta(sic.modelo.FacturaVenta) BusinessServiceException(sic.service.BusinessServiceException) Calendar(java.util.Calendar) GregorianCalendar(java.util.GregorianCalendar) GregorianCalendar(java.util.GregorianCalendar) RenglonFactura(sic.modelo.RenglonFactura) FacturaCompra(sic.modelo.FacturaCompra)

Example 20 with BusinessServiceException

use of sic.service.BusinessServiceException in project sic by belluccifranco.

the class FacturaServiceImpl method eliminar.

@Override
@Transactional
public void eliminar(long[] idsFactura) {
    for (long idFactura : idsFactura) {
        Factura factura = this.getFacturaPorId(idFactura);
        if (factura.getCAE() == 0L) {
            this.eliminarPagosDeFactura(factura);
            factura.setEliminada(true);
            productoService.actualizarStock(factura, TipoDeOperacion.ELIMINACION);
            if (factura.getPedido() != null) {
                List<Factura> facturas = new ArrayList<>();
                facturas.add(factura);
                pedidoService.actualizarEstadoPedido(factura.getPedido(), facturas);
            }
        } else {
            throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_eliminar_factura_aprobada"));
        }
    }
}
Also used : BusinessServiceException(sic.service.BusinessServiceException) ArrayList(java.util.ArrayList) RenglonFactura(sic.modelo.RenglonFactura) Factura(sic.modelo.Factura) Transactional(org.springframework.transaction.annotation.Transactional)

Aggregations

BusinessServiceException (sic.service.BusinessServiceException)23 GregorianCalendar (java.util.GregorianCalendar)12 Calendar (java.util.Calendar)11 EntityNotFoundException (javax.persistence.EntityNotFoundException)11 ArrayList (java.util.ArrayList)6 Date (java.util.Date)5 Transactional (org.springframework.transaction.annotation.Transactional)5 BooleanBuilder (com.querydsl.core.BooleanBuilder)3 WebServiceClientException (org.springframework.ws.client.WebServiceClientException)3 QProducto (sic.modelo.QProducto)3 Sort (org.springframework.data.domain.Sort)2 AfipWSAACredencial (sic.modelo.AfipWSAACredencial)2 Factura (sic.modelo.Factura)2 Producto (sic.modelo.Producto)2 RenglonFactura (sic.modelo.RenglonFactura)2 FormatterFechaHora (sic.util.FormatterFechaHora)2 LoginCms (afip.wsaa.wsdl.LoginCms)1 AlicIva (afip.wsfe.wsdl.AlicIva)1 ArrayOfAlicIva (afip.wsfe.wsdl.ArrayOfAlicIva)1 ArrayOfFECAEDetRequest (afip.wsfe.wsdl.ArrayOfFECAEDetRequest)1