Search in sources :

Example 31 with BusinessServiceException

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

the class ProductoServiceImpl method buscarProductos.

@Override
public Page<Producto> buscarProductos(BusquedaProductoCriteria criteria) {
    // Empresa
    if (criteria.getEmpresa() == null) {
        throw new EntityNotFoundException(ResourceBundle.getBundle("Mensajes").getString("mensaje_empresa_no_existente"));
    }
    // Rubro
    if (criteria.isBuscarPorRubro() == true && criteria.getRubro() == null) {
        throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_producto_vacio_rubro"));
    }
    // Proveedor
    if (criteria.isBuscarPorProveedor() == true && criteria.getProveedor() == null) {
        throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_producto_vacio_proveedor"));
    }
    QProducto qproducto = QProducto.producto;
    BooleanBuilder builder = new BooleanBuilder();
    builder.and(qproducto.empresa.eq(criteria.getEmpresa()).and(qproducto.eliminado.eq(false)));
    if (criteria.isBuscarPorCodigo() == true && criteria.isBuscarPorDescripcion() == true) {
        builder.and(qproducto.codigo.containsIgnoreCase(criteria.getCodigo()).or(this.buildPredicadoDescripcion(criteria.getDescripcion(), qproducto)));
    } else {
        if (criteria.isBuscarPorCodigo() == true) {
            builder.and(qproducto.codigo.containsIgnoreCase(criteria.getCodigo()));
        }
        if (criteria.isBuscarPorDescripcion() == true) {
            builder.and(this.buildPredicadoDescripcion(criteria.getDescripcion(), qproducto));
        }
    }
    if (criteria.isBuscarPorRubro() == true) {
        builder.and(qproducto.rubro.eq(criteria.getRubro()));
    }
    if (criteria.isBuscarPorProveedor()) {
        builder.and(qproducto.proveedor.eq(criteria.getProveedor()));
    }
    if (criteria.isListarSoloFaltantes() == true) {
        builder.and(qproducto.cantidad.loe(qproducto.cantMinima)).and(qproducto.ilimitado.eq(false));
    }
    int pageNumber = 0;
    int pageSize = Integer.MAX_VALUE;
    if (criteria.getPageable() != null) {
        pageNumber = criteria.getPageable().getPageNumber();
        pageSize = criteria.getPageable().getPageSize();
    }
    Pageable pageable = new PageRequest(pageNumber, pageSize, new Sort(Sort.Direction.ASC, "descripcion"));
    return productoRepository.findAll(builder, pageable);
}
Also used : PageRequest(org.springframework.data.domain.PageRequest) BusinessServiceException(sic.service.BusinessServiceException) Pageable(org.springframework.data.domain.Pageable) BooleanBuilder(com.querydsl.core.BooleanBuilder) Sort(org.springframework.data.domain.Sort) EntityNotFoundException(javax.persistence.EntityNotFoundException) QProducto(sic.modelo.QProducto)

Example 32 with BusinessServiceException

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

the class AfipServiceImpl method autorizar.

@Override
public void autorizar(ComprobanteAFIP comprobante) {
    if (configuracionDelSistemaService.getConfiguracionDelSistemaPorEmpresa(comprobante.getEmpresa()).isFacturaElectronicaHabilitada() == false) {
        throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_cds_fe_habilitada"));
    }
    if (comprobante.getTipoComprobante() != TipoDeComprobante.FACTURA_A && comprobante.getTipoComprobante() != TipoDeComprobante.FACTURA_B && comprobante.getTipoComprobante() != TipoDeComprobante.FACTURA_C && comprobante.getTipoComprobante() != TipoDeComprobante.NOTA_CREDITO_A && comprobante.getTipoComprobante() != TipoDeComprobante.NOTA_DEBITO_A && comprobante.getTipoComprobante() != TipoDeComprobante.NOTA_CREDITO_B && comprobante.getTipoComprobante() != TipoDeComprobante.NOTA_DEBITO_B) {
        throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_comprobanteAFIP_invalido"));
    }
    if (comprobante.getCAE() != 0) {
        throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_comprobanteAFIP_autorizado"));
    }
    FECAESolicitar fecaeSolicitud = new FECAESolicitar();
    FEAuthRequest feAuthRequest = this.getFEAuth(WEBSERVICE_FACTURA_ELECTRONICA, comprobante.getEmpresa());
    fecaeSolicitud.setAuth(feAuthRequest);
    int nroPuntoDeVentaAfip = configuracionDelSistemaService.getConfiguracionDelSistemaPorEmpresa(comprobante.getEmpresa()).getNroPuntoDeVentaAfip();
    int siguienteNroComprobante = this.getSiguienteNroComprobante(feAuthRequest, comprobante.getTipoComprobante(), nroPuntoDeVentaAfip);
    fecaeSolicitud.setFeCAEReq(this.transformComprobanteToFECAERequest(comprobante, siguienteNroComprobante, nroPuntoDeVentaAfip));
    try {
        FECAEResponse response = afipWebServiceSOAPClient.FECAESolicitar(fecaeSolicitud);
        String msjError = "";
        // errores generales de la request
        if (response.getErrors() != null) {
            msjError = response.getErrors().getErr().get(0).getCode() + "-" + response.getErrors().getErr().get(0).getMsg();
            LOGGER.error(msjError);
            if (!msjError.isEmpty()) {
                throw new BusinessServiceException(msjError);
            }
        }
        // errores particulares de cada comprobante
        if (response.getFeDetResp().getFECAEDetResponse().get(0).getResultado().equals("R")) {
            msjError += response.getFeDetResp().getFECAEDetResponse().get(0).getObservaciones().getObs().get(0).getMsg();
            LOGGER.error(msjError);
            throw new BusinessServiceException(msjError);
        }
        long cae = Long.valueOf(response.getFeDetResp().getFECAEDetResponse().get(0).getCAE());
        SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");
        comprobante.setCAE(cae);
        comprobante.setVencimientoCAE(formatter.parse(response.getFeDetResp().getFECAEDetResponse().get(0).getCAEFchVto()));
        comprobante.setNumSerieAfip(nroPuntoDeVentaAfip);
        comprobante.setNumFacturaAfip(siguienteNroComprobante);
    } catch (WebServiceClientException ex) {
        LOGGER.error(ex.getMessage());
        throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_autorizacion_error"));
    } catch (ParseException ex) {
        LOGGER.error(ex.getMessage());
        throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_error_procesando_fecha"));
    }
}
Also used : FECAEResponse(afip.wsfe.wsdl.FECAEResponse) BusinessServiceException(sic.service.BusinessServiceException) FEAuthRequest(afip.wsfe.wsdl.FEAuthRequest) WebServiceClientException(org.springframework.ws.client.WebServiceClientException) FECAESolicitar(afip.wsfe.wsdl.FECAESolicitar) ParseException(java.text.ParseException) SimpleDateFormat(java.text.SimpleDateFormat)

Example 33 with BusinessServiceException

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

the class AfipServiceImpl method transformComprobanteToFECAERequest.

@Override
public FECAERequest transformComprobanteToFECAERequest(ComprobanteAFIP comprobante, 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(comprobante.getTipoComprobante()) {
        case FACTURA_A:
            cabecera.setCbteTipo(1);
            detalle.setDocTipo(80);
            detalle.setDocNro(Long.valueOf(comprobante.getCliente().getIdFiscal().replace("-", "")));
            break;
        case NOTA_DEBITO_A:
            cabecera.setCbteTipo(2);
            detalle.setDocTipo(80);
            detalle.setDocNro(Long.valueOf(comprobante.getCliente().getIdFiscal().replace("-", "")));
            break;
        case NOTA_CREDITO_A:
            cabecera.setCbteTipo(3);
            detalle.setDocTipo(80);
            detalle.setDocNro(Long.valueOf(comprobante.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 (comprobante.getTotal() < 1000) {
                detalle.setDocTipo(99);
                detalle.setDocNro(0);
            } else {
                if (comprobante.getCliente().getIdFiscal().equals("")) {
                    throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_cliente_sin_idFiscal_error"));
                }
                detalle.setDocTipo(80);
                detalle.setDocNro(Long.valueOf(comprobante.getCliente().getIdFiscal().replace("-", "")));
            }
            break;
        case NOTA_DEBITO_B:
            cabecera.setCbteTipo(7);
            // menor a $1000, si DocTipo = 99 DocNro debe ser igual a 0 (simula un consumidor final ???)
            if (comprobante.getTotal() < 1000) {
                detalle.setDocTipo(99);
                detalle.setDocNro(0);
            } else {
                if (comprobante.getCliente().getIdFiscal().equals("")) {
                    throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_cliente_sin_idFiscal_error"));
                }
                detalle.setDocTipo(80);
                detalle.setDocNro(Long.valueOf(comprobante.getCliente().getIdFiscal().replace("-", "")));
            }
            break;
        case NOTA_CREDITO_B:
            cabecera.setCbteTipo(8);
            // menor a $1000, si DocTipo = 99 DocNro debe ser igual a 0 (simula un consumidor final ???)
            if (comprobante.getTotal() < 1000) {
                detalle.setDocTipo(99);
                detalle.setDocNro(0);
            } else {
                if (comprobante.getCliente().getIdFiscal().equals("")) {
                    throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_cliente_sin_idFiscal_error"));
                }
                detalle.setDocTipo(80);
                detalle.setDocNro(Long.valueOf(comprobante.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(comprobante.getFecha()).replace("/", ""));
    ArrayOfAlicIva arrayIVA = new ArrayOfAlicIva();
    if (comprobante.getIva21neto() != 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 * comprobante.getIva21neto()) / 21, 2));
        alicIVA21.setImporte(Utilidades.round(comprobante.getIva21neto(), 2));
        arrayIVA.getAlicIva().add(alicIVA21);
    }
    if (comprobante.getIva105neto() != 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 * comprobante.getIva105neto()) / 10.5, 2));
        alicIVA105.setImporte(Utilidades.round(comprobante.getIva105neto(), 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(comprobante.getIva105neto() + comprobante.getIva21neto(), 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(comprobante.getSubtotalBruto(), 2));
    // El campo “Importe neto no gravado” <ImpTotConc>. No puede ser menor a cero(0). Para comprobantes tipo C debe ser igual a cero (0).
    detalle.setImpTotConc(comprobante.getMontoNoGravado());
    // 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(comprobante.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)

Aggregations

BusinessServiceException (sic.service.BusinessServiceException)33 GregorianCalendar (java.util.GregorianCalendar)12 Calendar (java.util.Calendar)11 EntityNotFoundException (javax.persistence.EntityNotFoundException)11 Transactional (org.springframework.transaction.annotation.Transactional)8 ArrayList (java.util.ArrayList)5 Date (java.util.Date)5 WebServiceClientException (org.springframework.ws.client.WebServiceClientException)4 FEAuthRequest (afip.wsfe.wsdl.FEAuthRequest)3 BooleanBuilder (com.querydsl.core.BooleanBuilder)3 RenglonFactura (sic.modelo.RenglonFactura)3 RenglonNotaCredito (sic.modelo.RenglonNotaCredito)3 LoginCms (afip.wsaa.wsdl.LoginCms)2 AlicIva (afip.wsfe.wsdl.AlicIva)2 ArrayOfAlicIva (afip.wsfe.wsdl.ArrayOfAlicIva)2 ArrayOfFECAEDetRequest (afip.wsfe.wsdl.ArrayOfFECAEDetRequest)2 FECAECabRequest (afip.wsfe.wsdl.FECAECabRequest)2 FECAEDetRequest (afip.wsfe.wsdl.FECAEDetRequest)2 FECAERequest (afip.wsfe.wsdl.FECAERequest)2 FECAEResponse (afip.wsfe.wsdl.FECAEResponse)2