public SPaquetePuntoControl entregaCliente(SPaquetePuntoControl ppc, string codigo) { try { SPaquete p = _dal.getPaquete(ppc.IdPaquete); if (p.CodigoConfirmacion == codigo) { var _dalPPC = new DALPaquetePuntoControl(); var _dalPC = new DALPuntoControl(); var _dalT = new DALTrayecto(); ppc.FechaLlegada = DateTime.Now; ppc.Borrado = false; var pclist = _dalPC.puntosControlDeUnTrayecto((int)p.IdTrayecto); ppc.IdPuntoControl = pclist.Max(x => (int)x.Id); List <SPaquetePuntoControl> ppcList = _dalPPC.getAllByPaquete((int)p.Id); ppcList.ForEach(x => { if (x.IdPuntoControl == ppc.IdPuntoControl) { throw new ECompartida("El paquete ya fue entregado al cliente anteriormente"); } }); if (ppcList.Count != (pclist.Count - 1)) { throw new ECompartida("Aun falta avanzar pasos antes de poder entregar al cliente"); } int tiempoEstimado = 0; pclist.ForEach(x => { if (x.Orden <= pclist.First(z => z.Id == ppc.IdPuntoControl).Orden) { tiempoEstimado += x.Tiempo; } }); int tiempoViaje = (p.FechaIngreso - ppc.FechaLlegada).Seconds; if ((tiempoViaje <= tiempoEstimado)) { ppc.Retraso -= (tiempoEstimado - tiempoViaje); } else { ppc.Retraso += (tiempoViaje - tiempoEstimado); } return(_dalPPC.addPaquetePuntoControl(ppc)); } throw new ECompartida("El codigo no coincide con el paquete"); } catch (Exception) { throw; } }
public BLPuntoControl() { _dal = new DALPuntoControl(); }
public SPaquetePuntoControl avanzar(SPaquetePuntoControl ppc) { try { var _dalPPC = new DALPaquetePuntoControl(); var _dalPC = new DALPuntoControl(); var _dalT = new DALTrayecto(); SPaquete p = _dal.getPaquete(ppc.IdPaquete); if (p != null && p.Borrado == false) { STrayecto t = _dalT.getTrayecto((int)p.IdTrayecto); List <SPaquetePuntoControl> ppcList = _dalPPC.getAllByPaquete((int)p.Id); ppc.FechaLlegada = DateTime.Now; ppc.Borrado = false; if (ppcList.Count > 0) { if (t.ListaPuntosControl.Max(x => x.Orden) > ppcList.Max(y => t.ListaPuntosControl.First(z => z.Id == y.IdPuntoControl).Orden) + 1) { SPuntoControl pcActual = t.ListaPuntosControl.First(x => x.Orden == ppcList.Max(y => t.ListaPuntosControl.First(z => z.Id == y.IdPuntoControl).Orden) + 1); ppc.IdPuntoControl = (int)t.ListaPuntosControl.First(x => x.Orden == pcActual.Orden).Id; int tiempoEstimado = 0; t.ListaPuntosControl.ForEach(x => { if (x.Orden <= pcActual.Orden) { tiempoEstimado += x.Tiempo; } }); int tiempoViaje = (p.FechaIngreso - ppc.FechaLlegada).Seconds; if ((tiempoViaje <= tiempoEstimado)) { ppc.Retraso -= (tiempoEstimado - tiempoViaje); } else { ppc.Retraso += (tiempoViaje - tiempoEstimado); } BLEmail.actualizacionEstado(new BLPaquete().getPaquete(ppc.IdPaquete)); return(_dalPPC.addPaquetePuntoControl(ppc)); } else if (t.ListaPuntosControl.Max(x => x.Orden) == ppcList.Max(y => t.ListaPuntosControl.First(z => z.Id == y.IdPuntoControl).Orden) + 1) { throw new ECompartida("Solo queda el ultimo paso de entrega, para esto debe realizar la peticion correspondiente enviando el codigo proporcionado por el cliente"); } else { throw new ECompartida("El paquete ya llego a su punto final, no se puede avanzar mas"); } } else { ppc.IdPuntoControl = (int)t.ListaPuntosControl.First(x => x.Orden == 1).Id; return(_dalPPC.addPaquetePuntoControl(ppc)); } } throw new ECompartida("Error"); } catch (Exception) { throw; } }