public Retorno SalvarPedidoProduto(Pedido pedido) { try { var retorno = new BusinessProduto().ConsultarDoPedido(pedido.Codigo); if (retorno.IsValido) { var produtosExistentes = retorno.Entity as List <Produto>; foreach (var produto in pedido.Produtos) { if (produto.CodigoPedidoProduto == 0) { retorno = new DataPedido().IncluirPedidoProduto(produto, pedido); } else { retorno = new DataPedido().AlterarPedidoProduto(produto, pedido); } if (!retorno.IsValido) { return(retorno); } } foreach (var produtoExistente in produtosExistentes) { if (!pedido.Produtos.Any(p => p.CodigoPedidoProduto == produtoExistente.CodigoPedidoProduto)) { retorno = new DataPedido().ExcluirPedidoProduto(produtoExistente.CodigoPedidoProduto); if (!retorno.IsValido) { return(retorno); } } } } return(retorno); } catch (Exception ex) { return(Retorno.CriarRetornoExcecao(ex)); } }
public Retorno MontarLinhaProducaoPedido(Pedido pedido, bool adicionarLinhaProducao, List <LinhaProducao> linhaProducaoTerceirizados) { try { var retorno = ListarFuncionariosComDataDisponivel(); if (retorno.IsValido) { var funcionarios = retorno.Entity as List <Funcionario>; var dataInicioPedido = VerificarDataInicioPedido(funcionarios); var dataUltimaProducao = dataInicioPedido; if (linhaProducaoTerceirizados != null) { pedido.Produtos = pedido.Produtos.Where(p => !linhaProducaoTerceirizados.Any(pt => pt.Produto.CodigoPedidoProduto == p.CodigoPedidoProduto)).ToList(); } foreach (var produto in pedido.Produtos) { retorno = new BusinessProduto().ConsultarTempoProducaoHoraFuncionario(produto); if (retorno.IsValido) { produto.QuantidadeProducaoHoraFuncionario = retorno.Entity.ConverteValor(0M); var totalHorasProduto = Math.Round((produto.Quantidade / produto.QuantidadeProducaoHoraFuncionario).ConverteValor(0D), 1); while (Math.Round(totalHorasProduto, 1) > 0) { var funcionariosLivresNoDia = funcionarios.Where(f => f.LinhasProducao.Any(l => l.DataPrevisaoFim.Date <= dataUltimaProducao.Date)).ToList(); var horasRestanteDiaPorFuncionario = DefinirHorasRestanteDiaPorFuncionario(totalHorasProduto, funcionariosLivresNoDia.Count()); var horasDoDia = 0D; foreach (var funcionarioLivreNoDia in funcionariosLivresNoDia) { horasDoDia = DefinirHorasDoDia(horasRestanteDiaPorFuncionario, dataUltimaProducao, ref totalHorasProduto); funcionarioLivreNoDia.HorasProducao += horasDoDia; } dataUltimaProducao = DefinirDataFinalProducao(dataUltimaProducao, horasDoDia); } DefinirLinhaProducaoFuncionarios(funcionarios, produto, dataInicioPedido); } } pedido.Funcionarios = funcionarios; var linhasProducao = linhaProducaoTerceirizados; funcionarios.ForEach(f => { linhasProducao.AddRange(f.LinhasProducao.Where(l => l.Produto.Codigo > 0).ToList()); }); if (adicionarLinhaProducao) { return(new BusinessLinhaProducao().Salvar(linhasProducao)); } else { pedido.LinhaProducaoExibicao = CriarExibicaoLinhaProducao(linhasProducao); retorno.Entity = pedido; } } return(retorno); } catch (Exception ex) { return(Retorno.CriarRetornoExcecao(ex)); } }