public FacturaAlmacen agregaEntrada(Long facturaId, Long entradaId) { FacturaAlmacen factura = (FacturaAlmacen) currentSession().get(FacturaAlmacen.class, facturaId); Entrada entrada = (Entrada) currentSession().load(Entrada.class, entradaId); factura.getEntradas().add(entrada); factura.setFechaModificacion(new Date()); currentSession().save(factura); currentSession().flush(); return factura; }
public FacturaAlmacen eliminaEntrada(Long facturaId, Long entradaId) { log.debug("Eliminando entrada {} de factura {}", entradaId, facturaId); FacturaAlmacen factura = (FacturaAlmacen) currentSession().get(FacturaAlmacen.class, facturaId); Entrada entrada = (Entrada) currentSession().load(Entrada.class, entradaId); factura.getEntradas().remove(entrada); factura.setFechaModificacion(new Date()); currentSession().save(factura); currentSession().flush(); return factura; }
public FacturaAlmacen cierra(FacturaAlmacen factura, Usuario usuario) throws NoSePuedeCerrarException, NoSePuedeCerrarEnCeroException, NoEstaAbiertaException { if (factura != null) { if (factura.getEstatus().getNombre().equals(Constantes.ABIERTA)) { if (usuario != null) { factura.setAlmacen(usuario.getAlmacen()); } Date fecha = new Date(); factura.setIva(BigDecimal.ZERO); factura.setTotal(BigDecimal.ZERO); Query query = currentSession().createQuery("select e from Estatus e where e.nombre = :nombre"); query.setString("nombre", Constantes.FACTURADA); Estatus facturada = (Estatus) query.uniqueResult(); for (Salida salida : factura.getSalidas()) { salida.setEstatus(facturada); salida.setFechaModificacion(fecha); currentSession().update(salida); audita(salida, usuario, Constantes.FACTURADA, fecha); factura.setIva(factura.getIva().add(salida.getIva())); factura.setTotal(factura.getTotal().add(salida.getTotal())); } for (Entrada entrada : factura.getEntradas()) { entrada.setEstatus(facturada); entrada.setFechaModificacion(fecha); currentSession().update(entrada); audita(entrada, usuario, Constantes.FACTURADA, fecha); factura.setIva(factura.getIva().subtract(entrada.getIva())); factura.setTotal(factura.getTotal().subtract(entrada.getTotal())); } query.setString("nombre", Constantes.CERRADA); Estatus estatus = (Estatus) query.uniqueResult(); factura.setEstatus(estatus); factura.setFolio(getFolio(factura.getAlmacen())); factura.setFechaModificacion(fecha); currentSession().update(factura); audita(factura, usuario, Constantes.ACTUALIZAR, fecha); currentSession().flush(); return factura; } else { throw new NoEstaAbiertaException("No se puede actualizar una factura que no este abierta"); } } else { throw new NoSePuedeCerrarException("No se puede cerrar la factura pues no existe"); } }
public FacturaAlmacen cancelar(Long id, Usuario usuario) throws NoEstaCerradaException, NoSePuedeCancelarException { FacturaAlmacen factura = (FacturaAlmacen) currentSession().get(FacturaAlmacen.class, id); if (factura != null) { if (factura.getEstatus().getNombre().equals(Constantes.CERRADA)) { Query query = currentSession().createQuery("select e from Estatus e where e.nombre = :nombre"); query.setString("nombre", Constantes.CERRADA); Estatus cerrada = (Estatus) query.uniqueResult(); Date fecha = new Date(); for (Entrada entrada : factura.getEntradas()) { entrada.setEstatus(cerrada); entrada.setFechaModificacion(fecha); currentSession().update(entrada); audita(entrada, usuario, Constantes.ACTUALIZAR, fecha); } for (Salida salida : factura.getSalidas()) { salida.setEstatus(cerrada); salida.setFechaModificacion(fecha); currentSession().update(salida); audita(salida, usuario, Constantes.ACTUALIZAR, fecha); } query.setString("nombre", Constantes.CANCELADA); Estatus cancelada = (Estatus) query.uniqueResult(); factura.setFechaModificacion(new Date()); factura.setEstatus(cancelada); currentSession().update(factura); currentSession().flush(); return factura; } else { throw new NoEstaCerradaException( "No se puede actualizar una factura que no este cerrada", factura); } } else { throw new NoSePuedeCancelarException( "No se puede cancelar la factura porque no existe", factura); } }