Search in sources :

Example 1 with NotaCredito

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"));
        }
    }
}
Also used : FacturaVenta(sic.modelo.FacturaVenta) BusinessServiceException(sic.service.BusinessServiceException) Usuario(sic.modelo.Usuario) Empresa(sic.modelo.Empresa) Factura(sic.modelo.Factura) RenglonFactura(sic.modelo.RenglonFactura) NotaCredito(sic.modelo.NotaCredito) RenglonNotaCredito(sic.modelo.RenglonNotaCredito) Cliente(sic.modelo.Cliente)

Example 2 with NotaCredito

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;
}
Also used : RenglonNotaCredito(sic.modelo.RenglonNotaCredito) HashMap(java.util.HashMap) NotaCredito(sic.modelo.NotaCredito) RenglonNotaCredito(sic.modelo.RenglonNotaCredito) RenglonFactura(sic.modelo.RenglonFactura)

Example 3 with NotaCredito

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);
    }
}
Also used : ImageIcon(javax.swing.ImageIcon) RenglonNotaCredito(sic.modelo.RenglonNotaCredito) JRException(net.sf.jasperreports.engine.JRException) HashMap(java.util.HashMap) InputStream(java.io.InputStream) JRBeanCollectionDataSource(net.sf.jasperreports.engine.data.JRBeanCollectionDataSource) NotaCredito(sic.modelo.NotaCredito) RenglonNotaCredito(sic.modelo.RenglonNotaCredito) IOException(java.io.IOException) URL(java.net.URL) RenglonNotaDebito(sic.modelo.RenglonNotaDebito) BusinessServiceException(sic.service.BusinessServiceException) ServiceException(sic.service.ServiceException) ConfiguracionDelSistema(sic.modelo.ConfiguracionDelSistema) Map(java.util.Map) HashMap(java.util.HashMap)

Example 4 with NotaCredito

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;
    }
}
Also used : BusinessServiceException(sic.service.BusinessServiceException) NotaDebito(sic.modelo.NotaDebito) RenglonNotaDebito(sic.modelo.RenglonNotaDebito) NotaCredito(sic.modelo.NotaCredito) RenglonNotaCredito(sic.modelo.RenglonNotaCredito) Pago(sic.modelo.Pago) Transactional(org.springframework.transaction.annotation.Transactional)

Example 5 with NotaCredito

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.");
    }
}
Also used : FormatterFechaHora(sic.util.FormatterFechaHora) NotaDebito(sic.modelo.NotaDebito) NotaCredito(sic.modelo.NotaCredito) Pago(sic.modelo.Pago) RenglonCuentaCorriente(sic.modelo.RenglonCuentaCorriente) Transactional(org.springframework.transaction.annotation.Transactional)

Aggregations

NotaCredito (sic.modelo.NotaCredito)8 RenglonNotaCredito (sic.modelo.RenglonNotaCredito)7 NotaDebito (sic.modelo.NotaDebito)4 IOException (java.io.IOException)3 HashMap (java.util.HashMap)3 Transactional (org.springframework.transaction.annotation.Transactional)3 Pago (sic.modelo.Pago)3 RenglonFactura (sic.modelo.RenglonFactura)3 RenglonNotaDebito (sic.modelo.RenglonNotaDebito)3 BusinessServiceException (sic.service.BusinessServiceException)3 InputStream (java.io.InputStream)2 URL (java.net.URL)2 Date (java.util.Date)2 Map (java.util.Map)2 ImageIcon (javax.swing.ImageIcon)2 JRException (net.sf.jasperreports.engine.JRException)2 JRBeanCollectionDataSource (net.sf.jasperreports.engine.data.JRBeanCollectionDataSource)2 Cliente (sic.modelo.Cliente)2 ConfiguracionDelSistema (sic.modelo.ConfiguracionDelSistema)2 Empresa (sic.modelo.Empresa)2