use of afip.wsfe.wsdl.FECAERequest 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;
}
Aggregations