/// <summary> /// Cria todas as restrições relativas às horas regulares de trabalho disponíveis /// </summary> /// <param name="entrada">Instância de <see cref="EntradaViewModel"/> contendo os dados informados na planilha de dados</param> private void CriaRestricaoHE(EntradaViewModel entrada) { foreach (var diaSemana in Enum.GetValues(typeof(DiaDaSemana))) { var diaSemanaEnum = (DiaDaSemana)diaSemana; var expressaoLinear = new GRBLinExpr(); var cargaHorariaExtraDisponivelDiaria = entrada.CargaHorariaExtraDisponivel[diaSemanaEnum]; entrada.Produtos.ForEach(produto => { var taxaProducao = produto.GetTaxaUnidadeHora(); var variavelProduto = _varArray[produto.GetNomeVariavel(diaSemanaEnum, true)]; expressaoLinear.AddTerm(taxaProducao, variavelProduto); }); _grbModel.AddConstr( expressaoLinear, GRB.LESS_EQUAL, cargaHorariaExtraDisponivelDiaria, $"HorasExtrasDisponiveis[{diaSemana}]" ); } }
public async Task <IActionResult> CreateGeneric(EntradaViewModel vm, long empresaId) { try { ViewBag.EmpresaId = empresaId; ViewBag.EventoId = vm.EventoId; if (!ModelState.IsValid) { throw new Exception("Error de validacion no controlado"); } var entradaDto = new EntradaDto() { EventoId = vm.EventoId, ClienteId = null, Precio = vm.Precio, TipoEntradaId = vm.TipoEntradaId }; await _entradaServicio.Insertar(entradaDto); return(RedirectToAction("ListGeneric", new { eventoId = entradaDto.EventoId, empresaId })); } catch (Exception) { return(View(vm)); } }
public async Task <IActionResult> Details(long id, long eventoId) { try { var entrada = (EntradaDto)await _entradaServicio.Obtener(id); var model = new EntradaViewModel() { Id = entrada.Id, EstaEliminado = entrada.EliminadoStr, EventoId = entrada.EventoId, ClienteId = entrada.ClienteId.Value, Precio = entrada.Precio, TipoEntradaId = entrada.TipoEntradaId, Evento = await _helperEvento.Obtener(entrada.EventoId), Cliente = await _helperCliente.Obtener(entrada.ClienteId.Value), TipoEntrada = await _helperTipoEntrada.Obtener(entrada.TipoEntradaId) }; return(new ViewAsPdf("PDF", model)); } catch (Exception) { return(RedirectToAction("List", new { eventoId })); } }
/// <summary> /// Cria todas as restrições relativas às demandas mínimas de cada produto por dia /// </summary> /// <param name="entrada">Instância de <see cref="EntradaViewModel"/> contendo os dados informados na planilha de dados</param> private void CriaRestricaoDemandaMinima(EntradaViewModel entrada) { entrada.Produtos.ForEach(item => { foreach (var diaSemana in Enum.GetValues(typeof(DiaDaSemana))) { GRBLinExpr qtdeProdutoExcessoDiaAnterior; var diaSemanaEnum = (DiaDaSemana)diaSemana; var qtdeProdutoHR = _varArray[item.GetNomeVariavel(diaSemanaEnum)]; var qtdeProdutoHE = _varArray[item.GetNomeVariavel(diaSemanaEnum, true)]; var qtdeProdutoExcesso = _varArray[item.GetNomeVariavel(diaSemanaEnum, isExcesso: true)]; var demandaProdutoDia = item.Demanda[diaSemanaEnum]; var diaAnteriorEnum = EnumHelper.DiaAnterior(diaSemanaEnum); if (diaSemanaEnum == DiaDaSemana.Segunda) { qtdeProdutoExcessoDiaAnterior = 0; } else { qtdeProdutoExcessoDiaAnterior = _varArray[item.GetNomeVariavel(diaAnteriorEnum, isExcesso: true)]; } _grbModel.AddConstr( qtdeProdutoExcessoDiaAnterior + qtdeProdutoHE + qtdeProdutoHR - qtdeProdutoExcesso, GRB.GREATER_EQUAL, demandaProdutoDia, $"DemandaMinima[{item.Nome}][{diaSemanaEnum}]" ); } }); }
public async Task <IActionResult> EditGeneric(long id, long eventoId, long empresaId) { var dto = (EntradaDto)await _entradaServicio.Obtener(id); if (dto == null) { return(RedirectToAction("ListGeneric", new { eventoId, empresaId })); } if (dto.ClienteId != null) { return(RedirectToAction("ListGeneric", new { eventoId, empresaId })); } var model = new EntradaViewModel() { Id = dto.Id, EstaEliminado = dto.EliminadoStr, EventoId = dto.EventoId, ClienteId = null, Precio = dto.Precio, TipoEntradaId = dto.TipoEntradaId, TiposEntradas = await _helperTipoEntrada.PoblarSelect(empresaId) }; ViewBag.EmpresaId = empresaId; return(View(model)); }
public EntradasView() { InitializeComponent(); DataContext = new EntradaViewModel(); entradas = evm.context.context.entrada.ToList(); }
/// <summary> /// Gera a saída do problema para escrita na planilha /// </summary> /// <param name="entrada">Instância de <see cref="EntradaViewModel"/> contendo os dados informados na planilha de dados</param> /// <returns>Instancia de <see cref="SaidaViewModel"/> com a quantidade de produção diária para atender a demanda</returns> private SaidaViewModel GeraSaidaViewModel(EntradaViewModel entrada) { var saidaViewModel = new SaidaViewModel { Produtos = entrada.Produtos }; saidaViewModel.Produtos.ForEach(produto => { foreach (var diaSemana in Enum.GetValues(typeof(DiaDaSemana))) { var diaSemanaEnum = (DiaDaSemana)diaSemana; var producaoHR = Convert.ToInt32(_grbModel.GetVarByName(produto.GetNomeVariavel(diaSemanaEnum)).X); var producaoHE = Convert.ToInt32(_grbModel.GetVarByName(produto.GetNomeVariavel(diaSemanaEnum, true)).X); var excesso = Convert.ToInt32(_grbModel.GetVarByName(produto.GetNomeVariavel(diaSemanaEnum, isExcesso: true)).X); if (producaoHE > 0) { saidaViewModel.TeveHoraExtra[diaSemanaEnum] = true; } produto.Producao[diaSemanaEnum] = producaoHR + producaoHE; produto.Excesso[diaSemanaEnum] = excesso; } }); return(saidaViewModel); }
public ActionResult Create(EntradaViewModel entradaViewModel) { try { entradaViewModel = _entradaServicoAplicacao.Adicionar(entradaViewModel); return(RedirectToAction("Details", new { id = entradaViewModel.Id })); } catch { return(View()); } }
public IActionResult Index() { var marcas = marcaRepositorio.Listar(); var modelos = modeloRepositorio.Listar(); EntradaViewModel entrada = new EntradaViewModel(); entrada.Marcas = marcas; entrada.Modelos = modelos; return(View(entrada)); }
public ActionResult Delete(EntradaViewModel entradaViewModel) { try { _entradaServicoAplicacao.Excluir(entradaViewModel.Id); return(RedirectToAction(nameof(Index))); } catch { return(View()); } }
public ActionResult Edit(EntradaViewModel entradaViewModel) { try { _entradaServicoAplicacao.Atualizar(entradaViewModel); return(RedirectToAction("Details", new { id = entradaViewModel.Id })); } catch { return(View()); } }
public EntradaViewModel Adicionar(EntradaViewModel entradaViewModel) { try { //var produto = _mapper.Map<Produto>(produtoViewModel); var entrada = new Entrada(); _mapper.Map(entradaViewModel, entrada); _entradaServicoDominio.Adicionar(entrada); return(_mapper.Map(entrada, entradaViewModel)); } catch (Exception e) { throw e; } }
/// <summary> /// Cria todas as variáveis do problema, que são a quantidade de produto que deve ser feita por dia, tanto em horas /// regulares quanto em horas extra /// </summary> /// <param name="entrada">Instância de <see cref="EntradaViewModel"/> contendo os dados informados na planilha de dados</param> void CriaVariaveis(EntradaViewModel entrada) { entrada.Produtos.ForEach(item => { foreach (var diaSemana in Enum.GetValues(typeof(DiaDaSemana))) { var produtoHR = item.GetNomeVariavel((DiaDaSemana)diaSemana, false); var produtoHE = item.GetNomeVariavel((DiaDaSemana)diaSemana, true); var produtoExcesso = item.GetNomeVariavel((DiaDaSemana)diaSemana, isExcesso: true); _varArray.Add(produtoHR, _grbModel.AddVar(0, double.MaxValue, 1, GRB.CONTINUOUS, produtoHR)); _varArray.Add(produtoHE, _grbModel.AddVar(0, double.MaxValue, 1, GRB.CONTINUOUS, produtoHE)); _varArray.Add(produtoExcesso, _grbModel.AddVar(0, double.MaxValue, 1, GRB.CONTINUOUS, produtoExcesso)); } }); }
public async Task <IActionResult> CreateGeneric(long eventoId, long empresaId) { ViewBag.EventoId = eventoId; ViewBag.EmpresaId = empresaId; var tipos = await _helperTipoEntrada.PoblarSelect(empresaId); // poblar el combo de tipo entrada var model = new EntradaViewModel() { EventoId = eventoId, TiposEntradas = tipos }; return(View(model)); }
//Entradas /// <summary> /// Convertir clase EntradaviewModel a Entrada. /// </summary> /// <param name="entradaViewModel"></param> /// <param name="isNew"></param> /// <returns></returns> public async Task <Entrada> ToEntradaAsync(EntradaViewModel entradaViewModel, bool isNew) { return(new Entrada() { Aplicado = entradaViewModel.Aplicado, EntradaID = isNew ? Guid.NewGuid() : entradaViewModel.EntradaID, Fecha = entradaViewModel.Fecha, FechaActualizacion = DateTime.Now, FechaCreacion = isNew ? DateTime.Now : entradaViewModel.FechaCreacion, Folio = entradaViewModel.Folio.Trim().ToUpper(), Observaciones = entradaViewModel.Observaciones == null ? "" : entradaViewModel.Observaciones.Trim().ToUpper(), ProveedorID = entradaViewModel.ProveedorID, UsuarioID = entradaViewModel.UsuarioID, Proveedores = await _getHelper.GetProveedorByIdAsync((Guid)entradaViewModel.ProveedorID) }); }
/// <summary> /// Executa os passos da criação e resolução do modelo /// </summary> /// <param name="entrada">Instância de <see cref="EntradaViewModel"/> contendo os dados informados na planilha de dados</param> /// <returns>Instancia de <see cref="SaidaViewModel"/> com a quantidade de produção diária para atender a demanda</returns> public SaidaViewModel Run(EntradaViewModel entrada) { CriaVariaveis(entrada); CriaFuncaoObjetivo(entrada); CriaRestricaoHR(entrada); CriaRestricaoHE(entrada); CriaRestricaoDemandaMinima(entrada); OtimizaModelo(); return(GeraSaidaViewModel(entrada)); }
public async Task <EntradaViewModel> ObtenerEntrada(long id) { var e = (EntradaDto)await _entradaServicio.Obtener(id); var model = new EntradaViewModel() { Id = e.Id, TipoEntradaId = e.TipoEntradaId, Precio = e.Precio, EventoId = e.EventoId, Evento = await _helperEvento.Obtener(e.EventoId), TipoEntrada = await _helperTipoEntrada.Obtener(e.TipoEntradaId), ClienteId = e.ClienteId }; return(model); }
/// <summary> /// Carrega informações dos arquivo input.xlsx /// </summary> private static void CarregaInformacoes() { Console.WriteLine("Iniciando leitura dos dados"); _entradaViewModel = new EntradaViewModel(); using (var stream = File.Open(_inputPath, FileMode.Open, FileAccess.Read)) { using (var reader = ExcelReaderFactory.CreateReader(stream)) { var result = reader.AsDataSet(); LeDadosDaEquipe(result.Tables[0]); LeDadosDosProdutos(result.Tables[0]); } } Console.WriteLine("Leitura dos dados encerrada"); }
void AddRestricaoDemandaMinima(EntradaViewModel entrada) { entrada.Produtos.ForEach(produto => { foreach (var diaSemana in Enum.GetValues(typeof(DiaDaSemana))) { var produtoHR = produto.GetNomeVariavel((DiaDaSemana)diaSemana, false); var produtoHE = produto.GetNomeVariavel((DiaDaSemana)diaSemana, true); var demanda = produto.Demanda[(DiaDaSemana)diaSemana]; var equacao = _cplex.Prod( produto.GetTaxaUnidadeHora(), _variaveis[0][_varArray[produtoHR]], _variaveis[0][_varArray[produtoHE]] ); var restricao = _cplex.AddGe(equacao, demanda, $"RestricaoProducaoMinima_{produto.GetNomeLimpo()}_{diaSemana}"); _restricoesList.Add(restricao); } }); }
public SaidaViewModel EncontrarMelhorOpcao(EntradaViewModel entrada) { var dia = ObterDiaSemana(entrada.DataBanho); var diaUtil = _repositorio.ObterDiasUteis().Contains(dia); var valores = CalcularPreco(entrada, diaUtil); var valoresOrdenados = valores.OrderBy(pb => pb.PrecoBanho).ToList(); var saida = new SaidaViewModel(); if (valoresOrdenados[0].PrecoBanho != valoresOrdenados[1].PrecoBanho) { saida.Canil = valoresOrdenados[0].Nome; saida.Preco = valoresOrdenados[0].PrecoBanho; } if (valoresOrdenados[0].PrecoBanho == valoresOrdenados[1].PrecoBanho && valoresOrdenados[0].PrecoBanho != valoresOrdenados[2].PrecoBanho) { var duasMenoresDistancias = new List <double> { valoresOrdenados[0].Distancia, valoresOrdenados[1].Distancia }; var menorDistancia = duasMenoresDistancias.Min(); var petShop = valores.FirstOrDefault(ps => ps.Distancia == menorDistancia); saida.Canil = petShop.Nome; saida.Preco = petShop.PrecoBanho; } if (valoresOrdenados[0].PrecoBanho == valoresOrdenados[1].PrecoBanho && valoresOrdenados[0].PrecoBanho == valoresOrdenados[2].PrecoBanho) { var distancas = new List <double> { valoresOrdenados[0].Distancia, valoresOrdenados[1].Distancia, valoresOrdenados[2].Distancia }; var menorDistancia = distancas.Min(); var petShop = valores.FirstOrDefault(ps => ps.Distancia == menorDistancia); saida.Canil = petShop.Nome; saida.Preco = petShop.PrecoBanho; } return(saida); }
public List <PetShopViewModel> CalcularPreco(EntradaViewModel entrada, bool diaUtil) { var petShops = _repositorio.ObterPetShops(); if (diaUtil) { foreach (var petShop in petShops) { petShop.PrecoBanho = (entrada.QtdCaesGrandes * petShop.PrecoCaoGrandeDiaUtil) + (entrada.QtdCaesPequenos * petShop.PrecoCaoPequenoDiaUtil); } } else { foreach (var petShop in petShops) { petShop.PrecoBanho = (entrada.QtdCaesGrandes * petShop.PrecoCaoGrandeFinalSemana) + (entrada.QtdCaesPequenos * petShop.PrecoCaoPequenoFinalSemana); } } return(petShops.ToList()); }
void CriaVariaveis(EntradaViewModel entrada) { entrada.Produtos.ForEach(item => { foreach (var diaSemana in Enum.GetValues(typeof(DiaDaSemana))) { var produtoHR = item.GetNomeVariavel((DiaDaSemana)diaSemana, false); var produtoHE = item.GetNomeVariavel((DiaDaSemana)diaSemana, true); _varArray.Add(produtoHR, _varArray.Count); _varArray.Add(produtoHE, _varArray.Count); } }); var varArray = _cplex.NumVarArray( _varArray.Count, _varArray.Select(item => 0.0d).ToArray(), _varArray.Select(item => double.MaxValue).ToArray(), _varArray.Keys.ToArray() ); _variaveis[1] = varArray; }
/// <summary> /// Cria função objetivo /// </summary> /// <param name="entrada">Instância de <see cref="EntradaViewModel"/> contendo os dados informados na planilha de dados</param> private void CriaFuncaoObjetivo(EntradaViewModel entrada) { //Cria objeto de expressão linear para podermos gerar uma expressão linear de forma dinâmica var expressaoObjetivo = new GRBLinExpr(); entrada.Produtos.ForEach(produto => { var custoHR = produto.CustoRegular; var custoHE = produto.CustoHoraExtra; foreach (var diaSemana in Enum.GetValues(typeof(DiaDaSemana))) { var diaSemanaEnum = (DiaDaSemana)diaSemana; var qtdeProdutoHR = _varArray[produto.GetNomeVariavel(diaSemanaEnum)]; expressaoObjetivo.AddTerm(custoHR, qtdeProdutoHR); var qtdeProdutoHE = _varArray[produto.GetNomeVariavel(diaSemanaEnum, true)]; expressaoObjetivo.AddTerm(custoHE, qtdeProdutoHE); } }); _grbModel.SetObjective(expressaoObjetivo, GRB.MINIMIZE); }
public void Run(EntradaViewModel entrada) { CriaVariaveis(entrada); AddRestricoes(entrada); //AddFuncaoObjetivo(entrada); }
void AddFuncaoObjetivo(EntradaViewModel entrada) { double[] calculoFuncaoObjetivo = { }; _cplex.AddMinimize(_cplex.ScalProd(_variaveis[1], calculoFuncaoObjetivo)); }
public void Atualizar(EntradaViewModel entradaViewModel) { var entrada = _mapper.Map <Entrada>(entradaViewModel); _entradaServicoDominio.Atualizar(entrada); }
public IActionResult EncontrarMelhorOpcao([FromBody] EntradaViewModel entrada) { var saida = _encontraMelhorOpcaoServico.EncontrarMelhorOpcao(entrada); return(new OkObjectResult(new { message = "200 OK", saida })); }
void AddRestricoes(EntradaViewModel entrada) { AddRestricaoDemandaMinima(entrada); }