/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package mx.edu.um.mateo.contabilidad.facturas.service.impl; import java.io.ByteArrayInputStream; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; import mx.edu.um.mateo.contabilidad.facturas.dao.InformeProveedorDetallesDao; import mx.edu.um.mateo.contabilidad.facturas.model.InformeProveedorDetalle; import mx.edu.um.mateo.contabilidad.facturas.model.ProveedorFacturas; import mx.edu.um.mateo.contabilidad.facturas.service.ContrareciboManager; import mx.edu.um.mateo.contabilidad.facturas.service.InformeProveedorDetalleManager; import mx.edu.um.mateo.general.model.Usuario; import mx.edu.um.mateo.general.service.BaseManager; import mx.edu.um.mateo.general.utils.AutorizacionCCPlInvalidoException; import mx.edu.um.mateo.general.utils.BancoNoCoincideException; import mx.edu.um.mateo.general.utils.ClabeNoCoincideException; import mx.edu.um.mateo.general.utils.Constantes; import mx.edu.um.mateo.general.utils.CuentaChequeNoCoincideException; import mx.edu.um.mateo.general.utils.FacturaRepetidaFFacturaException; import mx.edu.um.mateo.general.utils.FacturaRepetidaFFiscalException; import mx.edu.um.mateo.general.utils.FormaPagoNoCoincideException; import mx.edu.um.mateo.general.utils.ProveedorNoCoincideException; import mx.edu.um.mateo.inscripciones.model.ccobro.utils.Constants; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; /** * * @author develop */ @Transactional @Service public class InformeProveedorDetalleManagerImpl extends BaseManager implements InformeProveedorDetalleManager { @Autowired private InformeProveedorDetallesDao dao; @Autowired private ContrareciboManager contrareciboManager; @Override public Map<String, Object> lista(Map<String, Object> params) { params.put("statusFactura", Constants.STATUS_ACTIVO); return dao.lista(params); } @Override public Map<String, Object> revisar(Map<String, Object> params) { //Agregamos al params el estatus de finalizado params.put("statusInforme", Constants.STATUS_FINALIZADO); params.put("statusFactura", Constants.STATUS_ACTIVO); return dao.lista(params); } @Override public Map<String, Object> listaRevisados(Map<String, Object> params) { //Agregamos al params el estatus de finalizado params.put("statusInforme", Constants.STATUS_FINALIZADO); params.put("statusFactura", Constantes.STATUS_REVISADO); return dao.lista(params); } @Override public Map<String, Object> contrarecibo(Map<String, Object> params) { return dao.lista(params); } @Override public InformeProveedorDetalle obtiene(final Long id) { return dao.obtiene(new Long(id)); } @Override public InformeProveedorDetalle obtiene(final String nombreFactura) { return dao.obtiene(nombreFactura); } @Override public List<InformeProveedorDetalle> obtiene(List<Long> ids) { List<InformeProveedorDetalle> detalles = new ArrayList<>(); for (Long x : ids) { InformeProveedorDetalle detalle = dao.obtiene(x); detalles.add(detalle); } return detalles; } @Override public void graba(InformeProveedorDetalle proveedorDetalle, Usuario usuario) throws Exception { Boolean existeFolioFactura = dao.repetidoFFactura(proveedorDetalle.getFolioFactura(), proveedorDetalle.getRFCProveedor()); if (existeFolioFactura) { log.debug("factura repetida"); throw new FacturaRepetidaFFacturaException(proveedorDetalle.getFolioFactura()); } dao.crea(proveedorDetalle, usuario); } @Override public void actualiza(InformeProveedorDetalle proveedorDetalle, Usuario usuario) { dao.actualiza(proveedorDetalle, usuario); } @Override public String elimina(final Long id) { InformeProveedorDetalle proveedorDetalle = dao.obtiene(id); dao.elimina(new Long(id)); return proveedorDetalle.getNombreProveedor(); } @Override public List<InformeProveedorDetalle> autorizar(List ids, Usuario usuario) throws Exception { String cuentaCheque; String clabe; String banco; String proveedor; String formaPago; List<InformeProveedorDetalle> detalles = new ArrayList<>(); String id = (String) ids.get(ids.size() - 1); InformeProveedorDetalle detalle = dao.obtiene(Long.valueOf(id)); ProveedorFacturas proveedorFacturas = detalle.getInformeProveedor().getProveedorFacturas(); cuentaCheque = detalle.getInformeProveedor().getCuentaCheque(); clabe = detalle.getInformeProveedor().getClabe(); banco = detalle.getInformeProveedor().getBanco(); proveedor = detalle.getInformeProveedor().getNombreProveedor(); formaPago = detalle.getInformeProveedor().getFormaPago(); detalle.setUsuarioAutRech(usuario); detalle.setFechaAutRech(new Date()); for (Object id2 : ids) { String ide = (String) id2; InformeProveedorDetalle detalle2 = dao.obtiene(Long.valueOf(ide)); String cuentaCheque2 = detalle2.getInformeProveedor().getCuentaCheque(); String clabe2 = detalle2.getInformeProveedor().getClabe(); String banco2 = detalle2.getInformeProveedor().getBanco(); String proveedor2 = detalle2.getInformeProveedor().getNombreProveedor(); String formaPago2 = detalle2.getInformeProveedor().getFormaPago(); detalle2.setUsuarioAutRech(usuario); detalle2.setFechaAutRech(new Date()); if (!cuentaCheque.equals(cuentaCheque2)) { log.debug("las cuentas no coinciden"); throw new CuentaChequeNoCoincideException(id.toString()); } if (!clabe.equals(clabe2)) { log.debug("las clabes no coinciden"); throw new ClabeNoCoincideException(id.toString()); } if (!banco.equals(banco2)) { log.debug("los bancos no coinciden"); throw new BancoNoCoincideException(id.toString()); } if (!proveedor.equals(proveedor2)) { log.debug("los proveedores no coinciden"); throw new ProveedorNoCoincideException(id.toString()); } if (!formaPago.equals(formaPago2)) { log.debug("la forma de pago no coinciden"); throw new FormaPagoNoCoincideException(id.toString()); } // detalle2.setStatus(Constantes.STATUS_AUTORIZADO); // detalle2.setContrarecibo(contrarecibo); } for (Object x : ids) { InformeProveedorDetalle detalleAut = dao.obtiene(Long.valueOf(id)); detalle.setStatus(Constantes.STATUS_REVISADO); dao.actualiza(detalle, usuario); detalles.add(detalleAut); } return detalles; } @Override public void rechazar(List ids, Usuario usuario) throws Exception { String proveedor; String id = (String) ids.get(ids.size() - 1); InformeProveedorDetalle detalle = dao.obtiene(Long.valueOf(id)); proveedor = detalle.getInformeProveedor().getNombreProveedor(); detalle.setFechaAutRech(new Date()); detalle.setUsuarioAutRech(usuario); detalle.setStatus(Constantes.STATUS_RECHAZADO); for (Object id2 : ids) { String ide = (String) id2; InformeProveedorDetalle detalle2 = dao.obtiene(Long.valueOf(ide)); String proveedor2 = detalle2.getInformeProveedor().getNombreProveedor(); if (!proveedor.equals(proveedor2) || proveedor2.isEmpty() || proveedor2 == null) { throw new ProveedorNoCoincideException(id.toString()); } detalle2.setStatus(Constantes.STATUS_RECHAZADO); } } @Override public void crea(InformeProveedorDetalle detalle, Usuario usuario) throws AutorizacionCCPlInvalidoException { try { graba(detalle, usuario); } catch (Exception ex) { Logger.getLogger(InformeProveedorDetalleManagerImpl.class.getName()).log(Level.SEVERE, null, ex); } } }