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"); } }
private String getFolio(Almacen almacen) { Query query = currentSession() .createQuery( "select f from Folio f where f.nombre = :nombre and f.almacen.id = :almacenId"); query.setString("nombre", "FACTURA"); query.setLong("almacenId", almacen.getId()); query.setLockOptions(LockOptions.UPGRADE); Folio folio = (Folio) query.uniqueResult(); if (folio == null) { folio = new Folio("FACTURA"); folio.setAlmacen(almacen); currentSession().save(folio); return getFolio(almacen); } folio.setValor(folio.getValor() + 1); java.text.NumberFormat nf = java.text.DecimalFormat.getInstance(); nf.setGroupingUsed(false); nf.setMinimumIntegerDigits(9); nf.setMaximumIntegerDigits(9); nf.setMaximumFractionDigits(0); StringBuilder sb = new StringBuilder(); sb.append("FA-"); sb.append(almacen.getEmpresa().getOrganizacion().getCodigo()); sb.append(almacen.getEmpresa().getCodigo()); sb.append(almacen.getCodigo()); sb.append(nf.format(folio.getValor())); return sb.toString(); }
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); } }
public FacturaAlmacen crea(FacturaAlmacen factura, Usuario usuario) { Session session = currentSession(); if (usuario != null) { factura.setAlmacen(usuario.getAlmacen()); } Query query = currentSession().createQuery("select e from Estatus e where e.nombre = :nombre"); query.setString("nombre", Constantes.ABIERTA); Estatus estatus = (Estatus) query.uniqueResult(); factura.setEstatus(estatus); factura.setFolio(getFolioTemporal(factura.getAlmacen())); Date fecha = new Date(); factura.setFechaCreacion(fecha); factura.setFechaModificacion(fecha); session.save(factura); audita(factura, usuario, Constantes.CREAR, fecha); session.flush(); return factura; }