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