private void Validar(Guid siteId, int diaVencimento, FaturaDto faturaDto)
        {
            if (faturaDto.Mes < 1 || faturaDto.Mes > 12)
                throw new FormatoInvalido("O mês da fatura não é válido.");

            if (faturaDto.Ano < 2016)
                throw new FormatoInvalido("O ano da fatura não é válido.");

            if (faturaDto.QuantidadeEquipamentos < 0)
                throw new FormatoInvalido("A quantidade de equipamentos não é válida.");

            if (faturaDto.QuantidadeUsuarios < 0)
                throw new FormatoInvalido("A quantidade de usuários não é válida.");

            if (faturaDto.Descontos < 0 || faturaDto.Descontos > faturaDto.Total)
                throw new FormatoInvalido("O desconto não é válido.");

            if (faturaDto.Total < 0)
                throw new FormatoInvalido("O total não é válido.");

            if (_repositorioFaturas.BuscarPorMesAno(siteId, faturaDto.Mes, faturaDto.Ano) != null)
                throw new FormatoInvalido("Esta fatura já consta em nosso sistema.");

            var dataAtual = DateTime.Now;
            if (faturaDto.Mes == dataAtual.Month && 
                faturaDto.Ano == dataAtual.Year &&
                dataAtual.Day < diaVencimento-10)
                throw new FormatoInvalido("Esta fatura só pode ser paga com no máximo 10 dias de antecedência.");
        }
 public void Adicionar(Guid siteId, string token, FaturaDto faturaDto)
 {
     HttpRuntime.Cache.Add(PegaNomeChaveCache(siteId, token), faturaDto, null, 
         DateTime.Now.AddMinutes(40),
         Cache.NoSlidingExpiration,
         CacheItemPriority.High,
         null);
 }
        public Fatura Criar(Guid siteId, FaturaDto faturaDto)
        {
            var site = _repositorioSites.BuscarPorId(siteId);

            Validar(siteId, site.DiaVencimento, faturaDto);

            var fatura = _fabricaFatura.Criar(siteId, faturaDto);
            _repositorioFaturas.Inserir(fatura);
            return fatura;
        }
        public ResultadoPagamentoPayPal CriarPagamento(Guid siteId, FaturaDto faturaDto)
        {
            var apiContext = _configuradorPayPal.GetApiContext();

            var pagamentoCriado = _fabricaPagamentoPayPal.Criar(_configuradorPayPal.UrlCancelamentoPagamento,
                _configuradorPayPal.UrlConfirmacaoPagamento, faturaDto).Create(apiContext);

            _cachePayPal.Adicionar(siteId, pagamentoCriado.token, faturaDto);

            return new ResultadoPagamentoPayPal(pagamentoCriado.token, pagamentoCriado.GetApprovalUrl());
        }
 public virtual Fatura Criar(Guid siteId, FaturaDto faturaDto)
 {
     return Criar(Guid.NewGuid(), 
         siteId, 
         new DateTime(faturaDto.Ano, faturaDto.Mes, 1),
         faturaDto.ValorPorEquipamento,
         faturaDto.ValorPorUsuario,
         faturaDto.QuantidadeEquipamentos,
         faturaDto.QuantidadeUsuarios,
         faturaDto.Descontos,
         faturaDto.Total);
 }
 public virtual Payment Criar(string urlCancelamentoPagamento, string urlConfirmacaoPagamento, FaturaDto faturaDto)
 {
     return new Payment
     {
         intent = "sale",
         payer = new Payer { payment_method = "paypal" },
         transactions = PegarListaTransacoes(faturaDto),
         redirect_urls = new RedirectUrls
         {
             cancel_url = urlCancelamentoPagamento,
             return_url = urlConfirmacaoPagamento
         }
     };
 }
        private static List<Transaction> PegarListaTransacoes(FaturaDto faturaDto)
        {
            var transactionList = new List<Transaction>
            {
                new Transaction
                {
                    description = "Pagamento fatura SCEI: " + faturaDto.MesAnoComoString,
                    invoice_number = PegarNumeroRandomicoParaPagamento(),
                    amount = new Amount
                    {
                        currency = "BRL",
                        total = faturaDto.Total.ToString(CultureInfo.InvariantCulture),
                        details = new Details
                        {
                            tax = "0",
                            shipping = "0",
                            subtotal = faturaDto.Total.ToString(CultureInfo.InvariantCulture)
                        }
                    },
                    item_list = new ItemList
                    {
                        items = new List<Item>
                        {
                            new Item
                            {
                                name = "Usuários mantidos pelo SCEI",
                                currency = "BRL",
                                price = faturaDto.ValorPorUsuario.ToString(CultureInfo.InvariantCulture),
                                quantity = faturaDto.QuantidadeUsuarios.ToString(CultureInfo.InvariantCulture),
                                sku = "#1-usuários"
                            },
                            new Item
                            {
                                name = "Equipamentos mantidos pelo SCEI",
                                currency = "BRL",
                                price = faturaDto.ValorPorEquipamento.ToString(CultureInfo.InvariantCulture),
                                quantity = faturaDto.QuantidadeEquipamentos.ToString(CultureInfo.InvariantCulture),
                                sku = "#2-equipamentos"
                            }
                        }
                    }
                }
            };

            return transactionList;
        }
        public void Validar(Guid siteId, FaturaDto faturaDto)
        {
            var site = _repositorioSites.BuscarPorId(siteId);

            Validar(siteId, site.DiaVencimento, faturaDto);
        }