private IPaqueteCostoMenor ObtenerCostoMenor(IPaqueteEnviado _paquete) { IPaqueteCostoMenor PaqueteCostoMenor = null; decimal dCosto = 0; List <ITransportistas> lstTransportistas = EnlistadorPaqueteriaDisponibles.obtenerListadoTransportistas(); IMediosTransportes MediosTransportes = null; if (lstTransportistas.Any()) { foreach (ITransportistas item in lstTransportistas.Where(x => x.cPaqueteria.ToUpper() != _paquete.cPaqueteria.ToUpper())) { MediosTransportes = item.lstMediosTransporte.Where(x => x.cMedioTransporte.ToUpper() == _paquete.cMedioTransporte.ToUpper()).FirstOrDefault(); if (MediosTransportes != null) { dCosto = decimal.MaxValue; dCosto = MediosTransportes.ObtenerCostoEnvio(Convert.ToDecimal(_paquete.cDistancia), item.dMargenUtilidad); if (dCosto < _paquete.dCostoEnvio) { dCosto = _paquete.dCostoEnvio - dCosto; PaqueteCostoMenor = CrearPaqueteCostoMenor(item.cPaqueteria, dCosto); } } } } return(PaqueteCostoMenor); }
private IMediosTransportes ObtenerTransportista(string _cMedioTransporte) { IMediosTransportes mediosTransportes = null; if (lstMediosTransporte != null && lstMediosTransporte.Any()) { mediosTransportes = lstMediosTransporte.Where(x => x.cMedioTransporte.ToUpper() == _cMedioTransporte.ToUpper()).FirstOrDefault(); } return(mediosTransportes); }
public bool ProcesarDTOPaqueteEnviado(IPaqueteEnviado _dtoPaqueteEnviado) { bool lReturn = true; if (_dtoPaqueteEnviado == null) { throw new ArgumentNullException(nameof(_dtoPaqueteEnviado)); } IMediosTransportes mediosTransportes = ObtenerTransportista(_dtoPaqueteEnviado.cMedioTransporte); if (mediosTransportes == null) { GeneradorMensajes.GenerarMensajeMedioInexistente(_dtoPaqueteEnviado.cPaqueteria, _dtoPaqueteEnviado.cMedioTransporte); lReturn = false; } else { AsignarFechaEntrega(_dtoPaqueteEnviado, mediosTransportes); _dtoPaqueteEnviado.dCostoEnvio = mediosTransportes.ObtenerCostoEnvio(Convert.ToDecimal(_dtoPaqueteEnviado.cDistancia), dMargenUtilidad); } return(lReturn); }
private void AsignarFechaEntrega(IPaqueteEnviado _dtoPaqueteEnviado, IMediosTransportes _mediosTransportes) { double dTiempoTraslado = Convert.ToDouble(_dtoPaqueteEnviado.cDistancia) / _mediosTransportes.dVelocidadEntrega; _dtoPaqueteEnviado.dtFechaEntrega = _dtoPaqueteEnviado.dtFechaPedido.AddHours(dTiempoTraslado); }