public void CrearMensajePaqueteria(IPedido pedido, IPaqueteria paqueteria) { IMedioTransporte medioTransporte = paqueteria.MediosTransportes.FirstOrDefault(x => x.Nombre.ToLowerInvariant() == pedido.MedioTransporte.ToLowerInvariant()); if (medioTransporte == null) { throw new ArgumentException($"{paqueteria.NombreEmpresa} no ofrece el servicio de transporte por {pedido.MedioTransporte}, te recomendamos cotizar en otra empresa."); } IDetallesPedido detallesPedido = _creardorDetallesPedido.CrearDetallesPedido(pedido, medioTransporte, paqueteria.MargenUtilidad); string rangoTiempo = _manejadorRangoTiempo.ObtenerRangoTiempo(detallesPedido.FechaEntrega, DateTime.Now); bool fechaEntregaMenorActual = _validadorFecha.ValidarFechaActual(detallesPedido.FechaEntrega); _constructorRespuestaPedido.Reset(); _constructorRespuestaPedido.ConstruirExpresion1(fechaEntregaMenorActual); _constructorRespuestaPedido.ConstruirOrigen(pedido.Origen); _constructorRespuestaPedido.ConstruirExpresion2(fechaEntregaMenorActual); _constructorRespuestaPedido.ConstruirExpresion3(fechaEntregaMenorActual); _constructorRespuestaPedido.AsignarRangoTiempo(rangoTiempo); _constructorRespuestaPedido.ConstruirExpresion4(fechaEntregaMenorActual); _constructorRespuestaPedido.ConstuirCostoEnvio(detallesPedido.CostoEnvio.ToString()); _constructorRespuestaPedido.AsignarColorMensaje(fechaEntregaMenorActual); _constructorRespuestaPedido.ConstuirDestino(pedido.Destino); _constructorRespuestaPedido.AgregarOpcionEconomica(detallesPedido.Cotizacion); _constructorRespuestaPedido.ConstruirFinal(pedido.Paqueteria); }
public IMedioTransporte ClientCodeMedioTransporte(Pedido pedido) { IFabricaMedioTransporte fabrica; IMedioTransporte medio = null; switch (pedido.Medio) { case "Barco": fabrica = new FabricaBarco(); break; case "Tren": fabrica = new FabricaTren(); break; case "Avion": fabrica = new FabricaAvion(); break; default: fabrica = null; break; } if (fabrica != null) { medio = fabrica.CrearMedioTransporte(); } return(medio); }
/// <summary> /// Método que permite asignar nuevos datos al paquete /// </summary> /// <param name="_dtoPaqueteria">DTO con los datos del paquete.</param> /// <returns>DTO con los datos del paquete actualizado.</returns> public PaqueteriaDTO AsignarNuevosDatos(ref PaqueteriaDTO _dtoPaqueteria) { PaqueteriaDTO dtoPaqueteria = _dtoPaqueteria; this.IMedioTransporte = lstMediosTransportes.Where(e => e.cNombreMedioTransporte == dtoPaqueteria.cNombreMedioTransporte).FirstOrDefault(); dtoPaqueteria.dCostoEnvio = ObtenerCostoEnvio(dtoPaqueteria.dDistancia); dtoPaqueteria.tsTiempoTraslado = ObtenerTiempoTraslado(dtoPaqueteria.dDistancia); dtoPaqueteria.dtEntrega = ObtenerFechaEntrega(dtoPaqueteria.dtPedido, dtoPaqueteria.tsTiempoTraslado); return(dtoPaqueteria); }
public void CrearMedioTransporte_EnviarTipoDeTransporteValido_CreaInstanciaTipoBarco() { // Arrange IFabricaMedioTransporte DOC = new FabricaBarco(); // Act IMedioTransporte act = DOC.CrearMedioTransporte(); // Assert Assert.IsInstanceOfType(act, typeof(Barco)); }
public IDetallesPedido CrearDetallesPedido(IPedido pedido, IMedioTransporte medioTransporte, double margenUtilidad) { DetallesPedido detallesPedido = new DetallesPedido(); detallesPedido.TiempoTraslado = _manejadorPaqueteria.CalcularTiempoTraslado(pedido.Distancia, medioTransporte.VelocidadEntrega); detallesPedido.FechaEntrega = _manejadorPaqueteria.CalcularFechaEntrega(pedido.FechaPedido, detallesPedido.TiempoTraslado); detallesPedido.CostoEnvio = _manejadorPaqueteria.CalcularCostoEnvio(medioTransporte.CostoKilometro, pedido.Distancia, margenUtilidad); detallesPedido.Cotizacion = _verificadorPrecios.CotizadorPrecios(detallesPedido.CostoEnvio, pedido); return(detallesPedido); }
public void CrearMedioTransporte_EnviarTipoDeTransporteValido_CreaInstanciaTipoAvion() { // Arrange IFabricaMedioTransporte DOC = new FabricaAvion(); var expected = typeof(Avion); // Act IMedioTransporte act = DOC.CrearMedioTransporte(); // Assert Assert.IsInstanceOfType(act, expected); }
public IEmpresa CrearEmpresa(List <IFabricaMedioTransporte> fabricas, IMedioTransporte medio) { IEmpresa empresa = new Fedex(); foreach (var item in fabricas) { medio = item.CrearMedioTransporte(); empresa.MediosTransporte.Add(medio); } return(empresa); }
public IMedioTransporte ObtenerMedioDeTransporte(string tipoTransporte) { IMedioTransporte transporte = MediosTransporte.FirstOrDefault(x => x.Tipo == tipoTransporte); if (transporte == null) { string mensajeError = string.Format("{0} no ofrece el servicio de transporte {1}, te recomendamos cotizar en otra empresa.", Nombre, tipoTransporte); throw new ArgumentException(mensajeError); } return(transporte); }
public void CrearMedioTransporte_ValidarCostoXKilometroAvion_CostoPorKilometroIgualADiez() { // Arrange IFabricaMedioTransporte DOC = new FabricaAvion(); var expected = 10; // Act IMedioTransporte SUT = DOC.CrearMedioTransporte(); var act = SUT.CostroPorKilometro; // Assert Assert.AreEqual(expected, act); }
public void CrearMedioTransporte_ValidarNombreMedioTransporteAvion_NombreMedioTransporteDebeSerAvion() { // Arrange IFabricaMedioTransporte DOC = new FabricaAvion(); var expected = "Avión"; // Act IMedioTransporte SUT = DOC.CrearMedioTransporte(); var act = SUT.Nombre; // Assert Assert.AreEqual(expected, act); }
public void CrearMedioTransporte_ValidarVelocidadEntregaAvion_VelocidadEntregaIgualA600() { // Arrange IFabricaMedioTransporte DOC = new FabricaAvion(); var expected = 600; // Act IMedioTransporte SUT = DOC.CrearMedioTransporte(); var act = SUT.VelocidadEntrega; // Assert Assert.AreEqual(expected, act); }
public IEmpresa EjecutarEstrategia(List <IFabricaMedioTransporte> fabricas, IMedioTransporte medio) { if (fabricas == null) { throw new ArgumentNullException(nameof(fabricas)); } if (medio == null) { throw new ArgumentNullException(nameof(medio)); } return(_estrategy.CrearEmpresa(fabricas, medio)); }
private decimal obtenerTiempoTraslado(Pedido pedido) { foreach (IPaqueteria paqueteria in this.paqueterias) { if (paqueteria.getNombre().Equals(pedido.paqueteria)) { IMedioTransporte medio = paqueteria.getMedioTransporte(pedido.medioTransporte); if (medio != null) { return(medio.getTiempoTraslado(pedido.distancia)); } else { break; } } } return(0.0M); }
public string CrearMensajeEntregado(PeticionPedido peticionPedido, bool paqueteEntregado) { StringBuilder mensajeResultante = new StringBuilder(); IMedioTransporte medioTransporte = empresaPaqueteria.ObtenerMedioDeTransporte(peticionPedido.TransporteCadena.ToLower()); ICostoDistancia costoDistancia = medioTransporte.CostoDistancia; ReclamacionPaqueteria reclamacionPaqueteria = new ReclamacionPaqueteria(mensajeResultante, peticionPedido.PaqueteriaCadena); CostoDeEntrega costoDeEntrega = new CostoDeEntrega(mensajeResultante, paqueteEntregado, costoDistancia, reclamacionPaqueteria); NexoY nexoY2 = new NexoY(mensajeResultante, costoDeEntrega); TiempoDeEntrega tiempoDeEntrega = new TiempoDeEntrega(mensajeResultante, paqueteEntregado, formatoTiempo, nexoY2); EstadoDeEntrega estadoDeEntrega = new EstadoDeEntrega(mensajeResultante, paqueteEntregado, peticionPedido.Destino, tiempoDeEntrega); NexoY nexoY = new NexoY(mensajeResultante, estadoDeEntrega); EstadoDeSalida estadoDeSalida = new EstadoDeSalida(mensajeResultante, paqueteEntregado, peticionPedido.Origen, nexoY); InicioMensaje inicioMensaje = new InicioMensaje(mensajeResultante, estadoDeSalida); inicioMensaje.AgregarMensaje(); return(mensajeResultante.ToString()); }
public string CotizadorPrecios(double costoOriginal, IPedido pedido) { string mensaje = string.Empty; List <IPaqueteria> paqueterias = _paqueteriaService.ObtenerPaqueterias(); foreach (IPaqueteria paqueteria in paqueterias.Where(x => x.NombreEmpresa.ToLowerInvariant() != pedido.Paqueteria.ToLowerInvariant())) { IMedioTransporte transporte = paqueteria.MediosTransportes .FirstOrDefault(x => x.Nombre.ToLowerInvariant() == pedido.MedioTransporte.ToLowerInvariant()); if (transporte != null) { double cotizacion = _manejadorPaqueteria.CalcularCostoEnvio(transporte.CostoKilometro, pedido.Distancia, paqueteria.MargenUtilidad); if (costoOriginal > cotizacion) { mensaje = $"Si hubieras pedido en {paqueteria.NombreEmpresa} te hubiera costado (${cotizacion})."; } } } return(mensaje); }
/*(Costo por km del [Medio de Transporte] * [Distancia]) * (1 + Margen de utilidad de la [Paquetería]/100)*/ public decimal getCostoEnvio(Pedido pedido) { foreach (IPaqueteria paqueteria in this.paqueterias) { if (paqueteria.getNombre().Equals(pedido.paqueteria)) { IMedioTransporte medio = paqueteria.getMedioTransporte(pedido.medioTransporte); if (medio != null) { return((medio.getCostoPorKilometro() * pedido.distancia) * (1 + (paqueteria.getUtilidad() / 100))); } else { throw new Exception(paqueteria.getNombre() + " no ofrece el servicio de transporte " + pedido.medioTransporte + ", te recomendamos cotizar en otra empresa."); } } } throw new Exception("La Paquetería: " + pedido.paqueteria + " no se encuentra registrada en nuestra red de distribución."); return(0); }
private string investigarMejorPrecio(Pedido pedido) { string mensaje = ""; foreach (IPaqueteria paqueteria in this.paqueterias) { if (!paqueteria.getNombre().Equals(pedido.paqueteria)) { IMedioTransporte medio = paqueteria.getMedioTransporte(pedido.medioTransporte); if (medio != null) { decimal precio = (medio.getCostoPorKilometro() * pedido.distancia) * (1 + (paqueteria.getUtilidad() / 100)); if (pedido.costoEnvio > precio) { mensaje = "\n" + "Si hubieras pedido en " + paqueteria.getNombre() + " te hubiera costado $" + (pedido.costoEnvio - precio) + " más barato."; } } } } return(mensaje); }
public void AgregarTransporte(IMedioTransporte medioTransporte) { _mediosTransportes.Add(medioTransporte); }
public void ValidarOtrasPaqueterias(double costoInicial, string mejorPaqueteria, double distancia, IImpresorMensajes impresor, IMedioTransporte trasporte) { iManejadorCadenaResponsabilidad manejador1 = new CalculadorCosto(new Fedex()); iManejadorCadenaResponsabilidad manejador2 = new CalculadorCosto(new Estafeta()); iManejadorCadenaResponsabilidad manejador3 = new CalculadorCosto(new DHL()); manejador1.setNext(manejador2); manejador2.setNext(manejador3); manejador1.hacer(costoInicial, costoInicial, mejorPaqueteria, distancia, impresor, trasporte); }
private static void AddUnsupportedMedio(List <Package> packages, string origen, string destino, double distancia, DateTime fechaPedido, IMedioTransporte unsupportedMedio, IEnvioFactory envioFactory) { packages.Add(new Package() { Origen = origen, Destino = destino, Distancia = distancia, Empresa = envioFactory.DeliveryCompany, MedioTransporte = unsupportedMedio, IsSupported = false, FechaRecepcion = fechaPedido }); }
public bool ValidaContieneTrasporte(IMedioTransporte trasporte) { return(lstMediosTrasporte.Exists(x => x.cNombre == trasporte.cNombre)); }
public Trasportador(IMedioTransporte _trasporte, IPaqueterias _paqueteria) { trasporte = _trasporte; paqueteria = _paqueteria; }
public void hacer(double costoInicial, double mejorCosto, string mejorPaqueteria, double distancia, IImpresorMensajes impresor, IMedioTransporte trasporte) { double costoNuevo = 0; ITrasportador trasportador = null; if (paqueteria.ValidaContieneTrasporte(trasporte)) { trasportador = new Trasportador(trasporte, paqueteria); costoNuevo = trasportador.CalcularCostoTrasporte(distancia); if (costoNuevo < mejorCosto) { mejorCosto = costoNuevo; mejorPaqueteria = paqueteria.cNombre; } } if (siguiente != null) { siguiente.hacer(costoInicial, mejorCosto, mejorPaqueteria, distancia, impresor, trasporte); } else { if (costoInicial != mejorCosto) { impresor.mostrarMensaje(string.Format("Si hubieras pedido en {0} te hubiera costado ${1} más barato.", mejorPaqueteria, costoInicial - mejorCosto)); } } }