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);
}
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"));
}
}
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;
}
Aggregations