private void GerarFaturamento(int ano, int mes, Contrato contrato, IEnumerable <ItemDeContrato> itensDoContrato,
                                      IEnumerable <Movimento> movimentoDoContrato)
        {
            int    TODO_SERIE                 = 1;
            int    TODO_NUMERO_FATURA         = contrato.Numero;
            int    numeroItemDeFatura         = 0;
            double valorTotal                 = 0;
            var    repositorioDeFaturas       = new RepositorioDeFaturas();
            var    repositorioDeItensDeFatura = new RepositorioDeItensDeFatura();


            // incluir itens de contrato
            foreach (ItemDeContrato itemDeContrato in itensDoContrato)
            {
                numeroItemDeFatura++;
                var itemDeFatura = new ItemDeFatura
                {
                    PartitionKey = ItemDeFatura.ObterPartitionKey(ano, mes),
                    RowKey       =
                        ItemDeFatura.ObterRowKey(TODO_SERIE, TODO_NUMERO_FATURA,
                                                 numeroItemDeFatura),
                    Produto       = itemDeContrato.Produto,
                    Quantidade    = 1,
                    ValorUnitario = itemDeContrato.Valor,
                    ValorTotal    = itemDeContrato.Valor
                };
                valorTotal += itemDeFatura.ValorTotal;
                repositorioDeItensDeFatura.AdicionarObjeto(itemDeFatura);
            }

            // incluir itens de movimento
            foreach (Movimento movimento in movimentoDoContrato)
            {
                numeroItemDeFatura++;
                var itemDeFatura = new ItemDeFatura
                {
                    PartitionKey = ItemDeFatura.ObterPartitionKey(ano, mes),
                    RowKey       =
                        ItemDeFatura.ObterRowKey(TODO_SERIE, TODO_NUMERO_FATURA,
                                                 numeroItemDeFatura),
                    Produto       = movimento.Produto,
                    Quantidade    = movimento.Quantidade,
                    ValorUnitario = movimento.ValorUnitario,
                    ValorTotal    = movimento.ValorTotal
                };
                valorTotal += itemDeFatura.ValorTotal;
                repositorioDeItensDeFatura.AdicionarObjeto(itemDeFatura);
            }

            // incluir registro mestre da fatura
            var fatura = new Fatura
            {
                PartitionKey         = Fatura.ObterPartitionKey(ano, mes),
                RowKey               = Fatura.ObterRowKey(TODO_SERIE, TODO_NUMERO_FATURA),
                DataDeEmissao        = DateTime.UtcNow,
                NumeroDoContrato     = contrato.Numero,
                CnpjDoCliente        = contrato.CnpjDoCliente,
                RazaoSocialDoCliente = contrato.RazaoSocialDoCliente,
                MunicipioDoCliente   = contrato.MunicipioDoCliente,
                UfDoCliente          = contrato.UfDoCliente,
                ValorTotal           = valorTotal
            };

            repositorioDeFaturas.AdicionarObjeto(fatura);

            // salvar
            repositorioDeItensDeFatura.SalvarLote();
            repositorioDeFaturas.SalvarLote();
        }
        private void GerarFaturamento(int ano, int mes, Contrato contrato, IEnumerable<ItemDeContrato> itensDoContrato,
                                      IEnumerable<Movimento> movimentoDoContrato)
        {
            int TODO_SERIE = 1;
            int TODO_NUMERO_FATURA = contrato.Numero;
            int numeroItemDeFatura = 0;
            double valorTotal = 0;
            var repositorioDeFaturas = new RepositorioDeFaturas();
            var repositorioDeItensDeFatura = new RepositorioDeItensDeFatura();

            // incluir itens de contrato
            foreach (ItemDeContrato itemDeContrato in itensDoContrato)
            {
                numeroItemDeFatura++;
                var itemDeFatura = new ItemDeFatura
                                       {
                                           PartitionKey = ItemDeFatura.ObterPartitionKey(ano, mes),
                                           RowKey =
                                               ItemDeFatura.ObterRowKey(TODO_SERIE, TODO_NUMERO_FATURA,
                                                                        numeroItemDeFatura),
                                           Produto = itemDeContrato.Produto,
                                           Quantidade = 1,
                                           ValorUnitario = itemDeContrato.Valor,
                                           ValorTotal = itemDeContrato.Valor
                                       };
                valorTotal += itemDeFatura.ValorTotal;
                repositorioDeItensDeFatura.AdicionarObjeto(itemDeFatura);
            }

            // incluir itens de movimento
            foreach (Movimento movimento in movimentoDoContrato)
            {
                numeroItemDeFatura++;
                var itemDeFatura = new ItemDeFatura
                                       {
                                           PartitionKey = ItemDeFatura.ObterPartitionKey(ano, mes),
                                           RowKey =
                                               ItemDeFatura.ObterRowKey(TODO_SERIE, TODO_NUMERO_FATURA,
                                                                        numeroItemDeFatura),
                                           Produto = movimento.Produto,
                                           Quantidade = movimento.Quantidade,
                                           ValorUnitario = movimento.ValorUnitario,
                                           ValorTotal = movimento.ValorTotal
                                       };
                valorTotal += itemDeFatura.ValorTotal;
                repositorioDeItensDeFatura.AdicionarObjeto(itemDeFatura);
            }

            // incluir registro mestre da fatura
            var fatura = new Fatura
                             {
                                 PartitionKey = Fatura.ObterPartitionKey(ano, mes),
                                 RowKey = Fatura.ObterRowKey(TODO_SERIE, TODO_NUMERO_FATURA),
                                 DataDeEmissao = DateTime.UtcNow,
                                 NumeroDoContrato = contrato.Numero,
                                 CnpjDoCliente = contrato.CnpjDoCliente,
                                 RazaoSocialDoCliente = contrato.RazaoSocialDoCliente,
                                 MunicipioDoCliente = contrato.MunicipioDoCliente,
                                 UfDoCliente = contrato.UfDoCliente,
                                 ValorTotal = valorTotal
                             };
            repositorioDeFaturas.AdicionarObjeto(fatura);

            // salvar
            repositorioDeItensDeFatura.SalvarLote();
            repositorioDeFaturas.SalvarLote();
        }