use of sic.modelo.NotaCredito in project sic by belluccifranco.
the class NotaServiceImpl method validarNota.
private void validarNota(Nota nota, long idEmpresa, long idCliente, long idUsuario, Long idFactura) {
if (idFactura != null) {
Factura f = facturaService.getFacturaPorId(idFactura);
if (f instanceof FacturaVenta) {
nota.setFacturaVenta((FacturaVenta) f);
nota.setCliente(((FacturaVenta) f).getCliente());
} else {
throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_nota_de_credito_factura_no_valida"));
}
}
Empresa empresa = empresaService.getEmpresaPorId(idEmpresa);
if (empresa == null) {
throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_empresa_no_existente"));
}
nota.setEmpresa(empresa);
Cliente cliente = clienteService.getClientePorId(idCliente);
if (cliente == null) {
throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_cliente_no_existente"));
}
nota.setCliente(cliente);
Usuario usuario = usuarioService.getUsuarioPorId(idUsuario);
if (usuario == null) {
throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_usuario_no_existente"));
}
nota.setUsuario(usuario);
if (nota.getEmpresa() == null) {
throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_nota_de_empresa_vacia"));
}
if (nota.getCliente() == null) {
throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_nota_de_cliente_vacia"));
}
if (nota.getFecha() != null) {
if (nota.getFacturaVenta() != null) {
if (nota.getFecha().compareTo(nota.getFacturaVenta().getFecha()) <= 0) {
throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_nota_fecha_incorrecta"));
}
if (!nota.getCliente().equals(nota.getFacturaVenta().getCliente())) {
throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_nota_cliente_incorrecto"));
}
if (!nota.getEmpresa().equals(nota.getFacturaVenta().getEmpresa())) {
throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_nota_empresa_incorrecta"));
}
}
}
if (nota.getMotivo() == null || nota.getMotivo().isEmpty()) {
throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_nota_de_motivo_vacio"));
}
if (nota instanceof NotaCredito) {
if (((NotaCredito) nota).getRenglonesNotaCredito() == null) {
throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_nota_de_renglones_vacio"));
}
} else {
if (((NotaDebito) nota).getRenglonesNotaDebito() == null) {
throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_nota_de_renglones_vacio"));
}
}
}
use of sic.modelo.NotaCredito in project sic by belluccifranco.
the class NotaServiceImpl method getRenglonesFacturaModificadosParaNotaCredito.
@Override
public List<RenglonFactura> getRenglonesFacturaModificadosParaNotaCredito(long idFactura) {
HashMap<Long, Double> listaCantidadesProductosUnificados = new HashMap<>();
this.getNotasPorFactura(idFactura).forEach(n -> {
for (RenglonNotaCredito rnc : ((NotaCredito) n).getRenglonesNotaCredito()) {
if (listaCantidadesProductosUnificados.containsKey(rnc.getIdProductoItem())) {
listaCantidadesProductosUnificados.put(rnc.getIdProductoItem(), listaCantidadesProductosUnificados.get(rnc.getIdProductoItem()) + rnc.getCantidad());
} else {
listaCantidadesProductosUnificados.put(rnc.getIdProductoItem(), rnc.getCantidad());
}
}
});
List<RenglonFactura> renglonesFactura = facturaService.getRenglonesDeLaFactura(idFactura);
if (!listaCantidadesProductosUnificados.isEmpty()) {
renglonesFactura.forEach(rf -> {
rf.setCantidad(rf.getCantidad() - listaCantidadesProductosUnificados.get(rf.getId_ProductoItem()));
});
}
return renglonesFactura;
}
use of sic.modelo.NotaCredito in project sic by belluccifranco.
the class NotaServiceImpl method getReporteNota.
@Override
public byte[] getReporteNota(Nota nota) {
ClassLoader classLoader = NotaServiceImpl.class.getClassLoader();
InputStream isFileReport;
JRBeanCollectionDataSource ds;
Map params = new HashMap();
if (nota instanceof NotaCredito) {
isFileReport = classLoader.getResourceAsStream("sic/vista/reportes/NotaCredito.jasper");
List<RenglonNotaCredito> renglones = this.getRenglonesDeNotaCredito(nota.getIdNota());
ds = new JRBeanCollectionDataSource(renglones);
params.put("notaCredito", (NotaCredito) nota);
} else {
isFileReport = classLoader.getResourceAsStream("sic/vista/reportes/NotaDebito.jasper");
List<RenglonNotaDebito> renglones = this.getRenglonesDeNotaDebito(nota.getIdNota());
ds = new JRBeanCollectionDataSource(renglones);
params.put("notaDebito", (NotaDebito) nota);
}
ConfiguracionDelSistema cds = configuracionDelSistemaService.getConfiguracionDelSistemaPorEmpresa(nota.getEmpresa());
params.put("preImpresa", cds.isUsarFacturaVentaPreImpresa());
if (nota.getTipoComprobante().equals(TipoDeComprobante.NOTA_CREDITO_B) || nota.getTipoComprobante().equals(TipoDeComprobante.NOTA_CREDITO_X) || nota.getTipoComprobante().equals(TipoDeComprobante.NOTA_DEBITO_B) || nota.getTipoComprobante().equals(TipoDeComprobante.NOTA_DEBITO_X)) {
nota.setSubTotalBruto(nota.getTotal());
nota.setIva105Neto(0);
nota.setIva21Neto(0);
}
if (nota.getTipoComprobante().equals(TipoDeComprobante.NOTA_CREDITO_A) || nota.getTipoComprobante().equals(TipoDeComprobante.NOTA_CREDITO_B) || nota.getTipoComprobante().equals(TipoDeComprobante.NOTA_DEBITO_A) || nota.getTipoComprobante().equals(TipoDeComprobante.NOTA_DEBITO_B)) {
if (nota.getNumSerieAfip() != 0 && nota.getNumNotaAfip() != 0) {
params.put("serie", nota.getNumSerieAfip());
params.put("nroNota", nota.getNumNotaAfip());
} else {
params.put("serie", null);
params.put("nroNota", null);
}
} else {
params.put("serie", nota.getSerie());
params.put("nroNota", nota.getNroNota());
}
if (!nota.getEmpresa().getLogo().isEmpty()) {
try {
params.put("logo", new ImageIcon(ImageIO.read(new URL(nota.getEmpresa().getLogo()))).getImage());
} catch (IOException ex) {
LOGGER.error(ex.getMessage());
throw new ServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_empresa_404_logo"), ex);
}
}
try {
return JasperExportManager.exportReportToPdf(JasperFillManager.fillReport(isFileReport, params, ds));
} catch (JRException ex) {
LOGGER.error(ex.getMessage());
throw new ServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_error_reporte"), ex);
}
}
use of sic.modelo.NotaCredito in project sic by belluccifranco.
the class NotaServiceImpl method guardarNota.
@Override
@Transactional
public Nota guardarNota(Nota nota, long idEmpresa, long idCliente, long idUsuario, Long idFactura, Long idPago, boolean modificarStock) {
// Validacion temporal
if (nota instanceof NotaCredito) {
NotaCredito nc = (NotaCredito) nota;
if ((nc).getTipoComprobante() == TipoDeComprobante.FACTURA_Y || (nc).getTipoComprobante() == TipoDeComprobante.PRESUPUESTO) {
throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_operacion_no_disponible"));
}
} else if (nota instanceof NotaDebito) {
Pago pago = pagoService.getPagoPorId(idPago);
if (pago.getFactura() != null) {
if (pago.getFactura().getTipoComprobante() == TipoDeComprobante.FACTURA_Y || pago.getFactura().getTipoComprobante() == TipoDeComprobante.PRESUPUESTO) {
throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes").getString("mensaje_operacion_no_disponible"));
}
}
}
// Fin validacion temporal
this.validarNota(nota, idEmpresa, idCliente, idUsuario, idFactura);
nota.setSerie(configuracionDelSistemaService.getConfiguracionDelSistemaPorEmpresa(nota.getEmpresa()).getNroPuntoDeVentaAfip());
if (nota instanceof NotaCredito) {
NotaCredito notaCredito = (NotaCredito) nota;
notaCredito.setTipoComprobante(this.getTipoDeNotaCreditoSegunFactura(notaCredito.getFacturaVenta()));
notaCredito.setNroNota(this.getSiguienteNumeroNotaCredito(idCliente, idEmpresa));
if (modificarStock) {
this.actualizarStock(notaCredito.getRenglonesNotaCredito());
}
this.validarCalculosCredito(notaCredito);
notaCredito = notaCreditoRepository.save(notaCredito);
this.cuentaCorrienteService.asentarEnCuentaCorriente(notaCredito, TipoDeOperacion.ALTA);
LOGGER.warn("La Nota " + notaCredito + " se guardó correctamente.");
return notaCredito;
} else {
NotaDebito notaDebito = (NotaDebito) nota;
Pago pago = pagoService.getPagoPorId(idPago);
// if (notaDebitoRepository.findByPagoIdAndEliminada(idPago, false) != null) {
// throw new BusinessServiceException(ResourceBundle.getBundle("Mensajes")
// .getString("mensaje_nota_ya_existe"));
// }
notaDebito.setTipoComprobante(this.getTipoDeNotaDebitoSegunPago(pago));
notaDebito.setNroNota(this.getSiguienteNumeroNotaDebito(idCliente, idEmpresa));
notaDebito.setPagoId(pago.getId_Pago());
this.validarCalculosDebito(notaDebito);
notaDebito = notaDebitoRepository.save(notaDebito);
this.cuentaCorrienteService.asentarEnCuentaCorriente(notaDebito, TipoDeOperacion.ALTA);
LOGGER.warn("La Nota " + notaDebito + " se guardó correctamente.");
return notaDebito;
}
}
use of sic.modelo.NotaCredito in project sic by belluccifranco.
the class CuentaCorrienteServiceImpl method asentarEnCuentaCorriente.
@Override
@Transactional
public void asentarEnCuentaCorriente(Nota n, TipoDeOperacion operacion) {
if (operacion == TipoDeOperacion.ALTA) {
RenglonCuentaCorriente rcc = new RenglonCuentaCorriente();
if (n instanceof NotaCredito) {
rcc.setComprobante("NOTA CREDITO " + (n.getTipoComprobante().equals(TipoDeComprobante.NOTA_CREDITO_A) ? "\"A\"" : n.getTipoComprobante().equals(TipoDeComprobante.NOTA_CREDITO_B) ? "\"B\"" : n.getTipoComprobante().equals(TipoDeComprobante.NOTA_CREDITO_X) ? "\"X\"" : "") + " " + n.getSerie() + " - " + n.getNroNota());
rcc.setMonto(n.getTotal());
// Descripción de los productos
rcc.setDescripcion(n.getMotivo());
}
if (n instanceof NotaDebito) {
rcc.setComprobante("NOTA DEBITO " + (n.getTipoComprobante().equals(TipoDeComprobante.NOTA_DEBITO_A) ? "\"A\"" : n.getTipoComprobante().equals(TipoDeComprobante.NOTA_DEBITO_B) ? "\"B\"" : n.getTipoComprobante().equals(TipoDeComprobante.NOTA_DEBITO_X) ? "\"X\"" : "") + " " + n.getSerie() + " - " + n.getNroNota());
rcc.setMonto(-n.getTotal());
Pago p = pagoService.getPagoPorId(((NotaDebito) n).getPagoId());
String descripcion = "Fecha Pago: " + (new FormatterFechaHora(FormatterFechaHora.FORMATO_FECHA_HISPANO)).format(p.getFecha()) + " Nº " + p.getNroPago();
if (p.getNota() != null && p.getNota().length() > 0) {
descripcion += " Nota:" + p.getNota();
}
rcc.setDescripcion(descripcion);
}
rcc.setNota(n);
rcc.setFecha(n.getFecha());
rcc.setIdMovimiento(n.getIdNota());
rcc.setTipoMovimiento(this.getTipoMovimiento(n));
this.getCuentaCorrientePorCliente(n.getCliente().getId_Cliente()).getRenglones().add(rcc);
this.renglonCuentaCorrienteService.asentarRenglonCuentaCorriente(rcc);
LOGGER.warn("El renglon " + rcc + " se guardó correctamente.");
}
if (operacion == TipoDeOperacion.ELIMINACION) {
RenglonCuentaCorriente rcc = this.renglonCuentaCorrienteService.getRenglonCuentaCorrienteDeNota(n, false);
rcc.setEliminado(true);
LOGGER.warn("El renglon " + rcc + " se eliminó correctamente.");
}
}
Aggregations