示例#1
0
        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));
            }
        }
示例#2
0
        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));
            }
        }