private void ConfigurarCabecalho(CardapioReportParamsViewModel param, CardapioReportResultViewModel result, string nomeCardapio, string nomeIntervaloSemanas, string nomeIntervaloItens, string listaReceitasSemCardapio)
 {
     if (listaReceitasSemCardapio != string.Empty)
     {
         result.CabecalhoDoRelatorio.Add(new CardapioReportResultValorCabecalhoViewModel
         {
             NomeCampo  = _localizer["Lista de receitas"].Value,
             ValorCampo = listaReceitasSemCardapio
         });
         result.CabecalhoDoRelatorio.Add(new CardapioReportResultValorCabecalhoViewModel
         {
             NomeCampo  = _localizer["Porções"].Value,
             ValorCampo = param.Porcoes.ToString()
         });;
     }
     else
     {
         result.CabecalhoDoRelatorio.Add(new CardapioReportResultValorCabecalhoViewModel
         {
             NomeCampo  = _localizer["Cardápio"].Value,
             ValorCampo = nomeCardapio
         });
         result.CabecalhoDoRelatorio.Add(new CardapioReportResultValorCabecalhoViewModel
         {
             NomeCampo  = _localizer["Intervalo de semanas"].Value,
             ValorCampo = nomeIntervaloSemanas
         });
         result.CabecalhoDoRelatorio.Add(new CardapioReportResultValorCabecalhoViewModel
         {
             NomeCampo  = _localizer["Intervalo de itens"].Value,
             ValorCampo = nomeIntervaloItens
         });
     }
 }
예제 #2
0
        private static void Assert_SemIntervalosDefinidos(CardapioReportResultViewModel result)
        {
            Assert.Equal("Intervalo de semanas", result.CabecalhoDoRelatorio[1].NomeCampo);
            Assert.Equal("Nenhum intervalo selecionado", result.CabecalhoDoRelatorio[1].ValorCampo);

            Assert.Equal("Intervalo de itens", result.CabecalhoDoRelatorio[2].NomeCampo);
            Assert.Equal("Nenhum intervalo selecionado", result.CabecalhoDoRelatorio[2].ValorCampo);
        }
예제 #3
0
        public void TestExecute_Somando_1_Ing_n_Semanas_Proporcao_Quantidade(int porcoes, int semanas, int diasdaSemana, double qtdEsperada)
        {
            Guid id = Guid.NewGuid();

            var unidadeMedida = new UnidadeMedida
            {
                Id   = Guid.NewGuid(),
                Nome = "Kilograma"
            };

            var c = AdicionarCardapio(id, $"Cardapio teste 1 ing {semanas} semana(s), {diasdaSemana} dias (por semana)");

            var catIng = AdicionarCategoria("Ingredientes", AdicionarCategoria("Cat pai", null));

            Ingrediente i = AdicionarIngrediente(Guid.NewGuid(), "ing. único", catIng);

            var receitaId = Guid.NewGuid();

            ItemListaIngredientes ili = AdicionarItemListaIngredientes(unidadeMedida, i, receitaId,
                                                                       "20 kilograma de ing. único", Guid.NewGuid(), 20.0);

            var r = AdicionarReceita(receitaId, "receita única", 2, new List <ItemListaIngredientes>()
            {
                ili
            });

            ili.Receita = r;

            for (int semana = 1; semana <= semanas; semana++)
            {
                for (int diaDaSemana = 0; diaDaSemana < diasdaSemana; diaDaSemana++)
                {
                    ItemCardapio ic = AdicionarItemCardapio(porcoes, cardapioId: id, semana, diaDaSemana);
                    AdicionarItemCardapioReceita(r, ic);
                    c.Itens.Add(ic);
                }
            }

            CardapioReportResultViewModel result = Execute(id);

            Assert.Equal("Cardápio", result.CabecalhoDoRelatorio[0].NomeCampo);
            Assert.Equal(c.Nome, result.CabecalhoDoRelatorio[0].ValorCampo);

            Assert_SemIntervalosDefinidos(result);

            Assert.Equal(1, result.Dados.Count);

            Assert.Equal(1, result.Dados[0].CabecalhoDoGrupo.Count);

            Assert_CabDados(result, 0, 0, "", "Cat pai -> Ingredientes");
            Assert_RodapeDados(result, 0, 0, "Contador", "1");

            Assert.Equal(1, result.Dados[0].Registros.CommaTextRegisters.Count);

            Asssert_RegistrosDados(result, indiceDados: 0, indiceRegistro: 0, numeroItem: 1,
                                   "ing. único", quantidade: qtdEsperada, "Kilograma");
        }
예제 #4
0
        public void TestExecute_Sem_Dados()
        {
            Guid id = Guid.NewGuid();

            CardapioReportResultViewModel result = Execute(id);

            Assert.Equal("Cardápio", result.CabecalhoDoRelatorio[0].NomeCampo);
            Assert.Equal("Nenhum cardápio definido", result.CabecalhoDoRelatorio[0].ValorCampo);

            Assert_SemIntervalosDefinidos(result);

            Assert.Equal(0, result.Dados.Count);
        }
예제 #5
0
        public void TestExecute_Apenas_Receita()
        {
            Guid id = Guid.NewGuid();

            AdicionarCardapio(id, "Cardapio teste sem ingredientes");

            CardapioReportResultViewModel result = Execute(id);

            Assert.Equal("Cardápio", result.CabecalhoDoRelatorio[0].NomeCampo);
            Assert.Equal("Cardapio teste sem ingredientes", result.CabecalhoDoRelatorio[0].ValorCampo);

            Assert_SemIntervalosDefinidos(result);

            Assert.Equal(0, result.Dados.Count);
        }
        public CardapioReportResultViewModel Execute(CardapioReportParamsViewModel param)
        {
            _param = param;
            var result = new CardapioReportResultViewModel();

            result.Parametros = param;
            result.Titulo     = param.Titulo;
            result.Subtitulo  = param.Subtitulo;

            Guid id = param.CardapioId ?? Guid.Empty;

            var nomeCardapio         = _localizer["Nenhum cardápio definido"].Value;
            var nomeIntervaloSemanas = _localizer["Nenhum intervalo selecionado"].Value;
            var nomeIntervaloItens   = nomeIntervaloSemanas;

            var             listaReceitasSemCardapio = string.Empty;
            IList <Receita> listaReceitas            = new List <Receita>();

            List <ItemParaComputarIngrediente> lista = null;

            Cardapio c = null;

            if (id != Guid.Empty)
            {
                c = _service.GetById(id);
            }

            if (param.ListaReceitas != null && param.ListaReceitas.Count > 0)
            {
                foreach (var sid in param.ListaReceitas)
                {
                    Guid idrec;
                    if (Guid.TryParse(sid, out idrec))
                    {
                        var rec = _receitaService.GetById(idrec);
                        if (listaReceitasSemCardapio != string.Empty)
                        {
                            listaReceitasSemCardapio += ", ";
                        }
                        listaReceitasSemCardapio += rec.Nome;

                        listaReceitas.Add(rec);
                    }
                }

                lista = ObterDadosAgrupadosListaReceitas(listaReceitas, param.Porcoes);
            }
            else if (c != null)
            {
                nomeCardapio = c.Nome;
                lista        = ObterDadosAgrupados(id);
            }

            ConfigurarCabecalho(param, result, nomeCardapio, nomeIntervaloSemanas,
                                nomeIntervaloItens, listaReceitasSemCardapio);

            if (lista == null)
            {
                return(result);
            }

            //percorre somando
            foreach (var ocor in lista)
            {
                if (param.MostrarDetalhesDoCalculo)
                {
                    foreach (var o in ocor.Ocorrencias)
                    {
                        //aqui
                        //o.gerarTextoDetalhe
                    }
                }


                //var SomaReceitaQuantidades = ocor.Ocorrencias.Select(p => p.ReceitaQuantidade).ToList().Sum();
                var SomaItensCardapioQuantidades = ocor.Ocorrencias.Select(p => p.ItemCardapioQuantidade).ToList().Sum();

                ocor.QuantidadeTotal = SomaItensCardapioQuantidades;
            }

            // Ordena por categoria para agrupar
            var ordenada = lista.OrderBy(p => p.NomeCategoria).ToList();

            //Novo cabeçalho para cada mudança de categoria
            string cat = "indefinida";             // deixar em branco dá problema se vir assim também dos dados
            int    qtd = 0;
            CardapioReportResultGruposDeRegistrosViewModel grupo = null;

            foreach (var ocor in ordenada)
            {
                if (grupo == null || cat != ocor.NomeCategoria)
                {
                    if (grupo != null)
                    {
                        grupo.RodapeDoGrupo.Add(new CardapioReportResultValorCabecalhoViewModel
                        {
                            NomeCampo = _localizer["Contador"].Value, ValorCampo = qtd.ToString()
                        });
                    }

                    grupo = new CardapioReportResultGruposDeRegistrosViewModel();
                    result.Dados.Add(grupo);

                    grupo.CabecalhoDoGrupo.Add(new CardapioReportResultValorCabecalhoViewModel
                    {
                        NomeCampo = "", ValorCampo = ocor.NomeCategoria
                    });

                    grupo.Registros.TitulosColunas.Add(_localizer["Item"].Value);
                    grupo.Registros.TitulosColunas.Add(_localizer["Ingrediente"].Value);
                    grupo.Registros.TitulosColunas.Add(_localizer["Quantidade"].Value);
                    grupo.Registros.TitulosColunas.Add(_localizer["Unidade"].Value);

                    grupo.Registros.NomesColunas.Add("item");
                    grupo.Registros.NomesColunas.Add("ing");
                    grupo.Registros.NomesColunas.Add("count");
                    grupo.Registros.NomesColunas.Add("unit");

                    if (_param.MostrarDetalhesDoCalculo)
                    {
                        grupo.Registros.TitulosColunas.Add(_localizer["Informação Adicional"].Value);
                        grupo.Registros.NomesColunas.Add("infoadic");
                    }

                    qtd = 0;
                    cat = ocor.NomeCategoria;
                }

                if (grupo != null)
                {
                    qtd++;
                    var qtdTotal = Math.Round(ocor.QuantidadeTotal, 1, MidpointRounding.ToEven);

                    var sreg = $"\"item={qtd}\",\"ing={ocor.NomeIngrediente}\",\"count={qtdTotal}\",\"unit={ocor.NomeUnidadeMedida}\"";
                    if (_param.MostrarDetalhesDoCalculo)
                    {
                        var texto = string.Join("|||", ocor.ItensDemostrativo);
                        sreg = $"{sreg},\"infoadic={texto}\"";
                    }
                    grupo.Registros.CommaTextRegisters.Add(sreg);
                }
            }

            if (grupo != null)
            {
                grupo.RodapeDoGrupo.Add(new CardapioReportResultValorCabecalhoViewModel
                {
                    NomeCampo = _localizer["Contador"].Value, ValorCampo = qtd.ToString()
                });
            }


            return(result);
        }
예제 #7
0
 private static void Assert_CabDados(CardapioReportResultViewModel result, int indiceDados, int indiceCab, string nomeEsperado, string valorEsperado)
 {
     Assert.Equal(nomeEsperado, result.Dados[indiceDados].CabecalhoDoGrupo[indiceCab].NomeCampo);
     Assert.Equal(valorEsperado, result.Dados[indiceDados].CabecalhoDoGrupo[indiceCab].ValorCampo);
 }
예제 #8
0
        private static void Asssert_RegistrosDados(CardapioReportResultViewModel result, int indiceDados, int indiceRegistro, int numeroItem, string nomeIng, double quantidade, string nomeUnidade)
        {
            var valorEsperado = $"\"item={numeroItem}\",\"ing={nomeIng}\",\"count={quantidade}\",\"unit={nomeUnidade}\"";

            Assert.Equal(valorEsperado, result.Dados[indiceDados].Registros.CommaTextRegisters[indiceRegistro]);
        }