Esempio n. 1
0
        /// <summary>
        /// Os itens do Carrinho vem sempre Desagrupados, independente se tem Cota ou Não, nesta extension, o carrinho será Reagrupado
        /// Somando os valores e adicionando os cotaitem se existirem
        /// </summary>
        /// <param name="lstCarrinho"></param>
        /// <returns></returns>
        public static string ToJson(this List <Carrinho> lstCarrinho)
        {
            try
            {
                StringBuilder stb = new StringBuilder();
                if (!string.IsNullOrEmpty(lstCarrinho.FirstOrDefault().PacoteGrupo))
                {
                    foreach (string grupo in lstCarrinho.Select(c => c.PacoteGrupo).Distinct().OrderBy(c => c))
                    {
                        List <Carrinho> listaFiltrada = lstCarrinho.Where(c => c.PacoteGrupo == grupo).ToList();
                        foreach (Carrinho oCarrinho in listaFiltrada)
                        {
                            //Mantem desagrupado
                            oCarrinho.TipoLugar = (oCarrinho.TipoLugar == ((char)Setor.LugarTipo.Cadeira).ToString() ?
                                                   ((char)Pacote.TipoPacote.Assinatura).ToString() : ((char)Pacote.TipoPacote.Pista).ToString());

                            oCarrinho.PrecoValor       = listaFiltrada.Sum(c => c.PrecoValor);
                            oCarrinho.TaxaConveniencia = listaFiltrada.Sum(c => c.TaxaConveniencia);
                            oCarrinho.Total            = listaFiltrada.Sum(c => c.PrecoValor) + listaFiltrada.Sum(c => c.TaxaConveniencia);
                            (oCarrinho.ListaCotaItem = new List <CotaItem>()).AddRange(listaFiltrada.Where(c => c.CotaItem != null).Select(c => c.CotaItem));
                            oCarrinho.Estado            = listaFiltrada.FirstOrDefault().Estado;
                            oCarrinho.TaxaProcessamento = CarrinhoLista.CalcularTaxaProcessamento(listaFiltrada);
                            stb.Append(oCarrinho.ToJson() + ", ");
                            break;
                        }
                    }
                }
                //É necessáriamente uma mesa fechada
                else
                {
                    foreach (int lugarID in lstCarrinho.Select(c => c.LugarID).Distinct().OrderBy(c => c))
                    {
                        IEnumerable <Carrinho> listaFiltrada = lstCarrinho.Where(c => c.LugarID == lugarID);
                        foreach (Carrinho oCarrinho in listaFiltrada)
                        {
                            oCarrinho.PrecoValor       = listaFiltrada.Sum(c => c.PrecoValor);
                            oCarrinho.TaxaConveniencia = listaFiltrada.Sum(c => c.TaxaConveniencia);
                            oCarrinho.Total            = listaFiltrada.Sum(c => c.PrecoValor) + listaFiltrada.Sum(c => c.TaxaConveniencia);
                            oCarrinho.ListaCotaItem    = new List <CotaItem>();
                            oCarrinho.ListaCotaItem.AddRange(listaFiltrada.Where(c => c.isCota.Length > 0).Select(c => c.CotaItem));
                            stb.Append(oCarrinho.ToJson() + ", ");
                            break;
                        }
                    }
                }
                return(stb.Remove(stb.Length - 2, 2).ToString());
            }
            catch (Exception ex)
            {
                throw new Exception("Não foi possível converter o carrinho para o formato de exibição. Erro: " + ex.Message);
            }
        }