Esempio n. 1
0
 /// <summary>
 /// Construtor padrão.
 /// </summary>
 /// <param name="notaFiscal"></param>
 /// <param name="cliente"></param>
 /// <param name="loja"></param>
 /// <param name="fornecedor"></param>
 /// <param name="itens"></param>
 public NotaFiscalImpostoContainer(
     Data.Model.NotaFiscal notaFiscal,
     Global.Negocios.Entidades.Cliente cliente,
     Global.Negocios.Entidades.Loja loja,
     Global.Negocios.Entidades.Fornecedor fornecedor,
     IEnumerable <IItemImposto> itens)
 {
     NotaFiscal = notaFiscal;
     Cliente    = cliente;
     Loja       = loja;
     Fornecedor = fornecedor;
     Itens      = itens;
 }
Esempio n. 2
0
        /// <summary>
        /// Recupera o container dos itens de impostos da nota fiscal.
        /// </summary>
        /// <param name="notaFiscal"></param>
        /// <param name="itens"></param>
        /// <returns></returns>
        private IItemImpostoContainer ObterContainer(Data.Model.NotaFiscal notaFiscal, IEnumerable <Data.Model.ProdutosNf> produtosNf)
        {
            Global.Negocios.Entidades.Cliente               cliente    = null;
            Global.Negocios.Entidades.Loja                  loja       = null;
            Global.Negocios.Entidades.Fornecedor            fornecedor = null;
            IEnumerable <Global.Negocios.Entidades.Produto> produtos   = null;
            IEnumerable <IItemImposto> itens = null;

            var consultas = SourceContext.Instance.CreateMultiQuery()
                            .Add(SourceContext.Instance.CreateQuery()
                                 .From <Data.Model.Cliente>()
                                 .Where("IdCli=?id")
                                 .Add("?id", notaFiscal.IdCliente),
                                 (sender, query, result) =>
                                 cliente = EntityManager.Instance
                                           .ProcessLazyResult <Global.Negocios.Entidades.Cliente>(result, SourceContext.Instance)
                                           .FirstOrDefault())

                            .Add(SourceContext.Instance.CreateQuery()
                                 .From <Data.Model.Loja>()
                                 .Where("IdLoja=?id")
                                 .Add("?id", notaFiscal.IdLoja),
                                 (sender, query, result) =>
                                 loja = EntityManager.Instance
                                        .ProcessLazyResult <Global.Negocios.Entidades.Loja>(result, SourceContext.Instance)
                                        .FirstOrDefault())

                            .Add(SourceContext.Instance.CreateQuery()
                                 .From <Data.Model.Fornecedor>()
                                 .Where("IdFornec=?id")
                                 .Add("?id", notaFiscal.IdFornec),
                                 (sender, query, result) =>
                                 fornecedor = EntityManager.Instance
                                              .ProcessLazyResult <Global.Negocios.Entidades.Fornecedor>(result, SourceContext.Instance)
                                              .FirstOrDefault());

            if (produtosNf == null)
            {
                // Consulta os produtos da nota
                consultas
                // Consulta os produtos dos produtos da nota
                .Add(SourceContext.Instance.CreateQuery()
                     .From <Data.Model.Produto>()
                     .Where("IdProd IN ?subProdutos")
                     .Add("?subProdutos", SourceContext.Instance.CreateQuery()
                          .From <Data.Model.ProdutosNf>()
                          .Where("IdNf=?idNf")
                          .Add("?idNf", notaFiscal.IdNf)
                          .SelectDistinct("IdProd")),
                     (sender, query, result) =>
                     produtos = EntityManager.Instance
                                .ProcessLazyResult <Global.Negocios.Entidades.Produto>(result, SourceContext.Instance)
                                .ToList())

                .Add <Data.Model.ProdutosNf>(SourceContext.Instance.CreateQuery()
                                             .From <Data.Model.ProdutosNf>()
                                             .Where("IdNf=?id")
                                             .Add("?id", notaFiscal.IdNf),
                                             (sender, query, result) =>
                                             itens = ObterItensImposto(notaFiscal, result.ToList(), produtos).ToList())

                .Execute();
            }
            else
            {
                var idsProd = string.Join(",", produtosNf.Select(f => f.IdProd).Distinct());

                if (!string.IsNullOrEmpty(idsProd))
                {
                    consultas
                    .Add(SourceContext.Instance.CreateQuery()
                         .From <Data.Model.Produto>()
                         .Where($"IdProd IN  ({idsProd})"),
                         (sender, query, result) =>
                         produtos = EntityManager.Instance
                                    .ProcessLazyResult <Global.Negocios.Entidades.Produto>(result, SourceContext.Instance)
                                    .ToList());
                }

                consultas.Execute();
                itens = ObterItensImposto(notaFiscal, produtosNf, produtos).ToList();
            }

            var pedidoImposto = new NotaFiscalImpostoContainer(notaFiscal, cliente, loja, fornecedor, itens);

            return(pedidoImposto);
        }