public async Task <ActionResult> Creditar(string id, int qtd)
        {
            var repMongo = new Repository.MongoRep("", _settings, "");
            var credito  = new Models.CreditoMetricas()
            {
                UserId       = id,
                Qtd          = qtd,
                DataCredito  = DateTime.Now,
                Debito       = 0,
                DataValidade = DateTime.Now.AddMonths(1),
                DataCriacao  = DateTime.Now
            };
            await repMongo.GravarOne <Models.CreditoMetricas>(credito);

            return(RedirectToAction("Agencias"));
        }
Exemple #2
0
        public async Task <bool> GetPayment(string pagamentoId)
        {
            try
            {
                Wirecard.WirecardClient WC = null;
                WC = await SetAmbiente(WC);

                var _id      = new ObjectId(pagamentoId);
                var repMongo = new Repository.MongoRep("", _settings, "");

                var lstPagamentos = await repMongo.ListarById <Models.DTO.PagamentoPage>(_id);

                if (lstPagamentos != null)
                {
                    var userId                     = lstPagamentos.FirstOrDefault().UsuarioId;
                    var _pagamentoAtual            = lstPagamentos.FirstOrDefault().Obj;
                    var _pagamentoAtualContractual = lstPagamentos.FirstOrDefault();
                    if (_pagamentoAtual.paymentResponse != null)
                    {
                        #region Pagamentos Comuns
                        var result = await WC.Payment.Consult(_pagamentoAtual.paymentResponse.Id);

                        if (result.Status != _pagamentoAtual.paymentResponse.Status)
                        {
                            _pagamentoAtual.paymentResponse.Status = result.Status;
                            if (_pagamentoAtual.StatusPagamento == "Pendente" && result.Status == "AUTHORIZED")//Pago
                            {
                                _pagamentoAtual.StatusPagamento = "Pago";
                            }

                            //Mudar Status
                            await repMongo.AlterarStatusPagamento(new ContractClass <Models.DTO.PagamentoPage>()
                            {
                                _id = _id,
                                Obj = _pagamentoAtual
                            });

                            if (_pagamentoAtual.StatusPagamento == "Pago")
                            {
                                //Inserir credito se for authorizado o pagamento
                                var credito = new Models.CreditoMetricas()
                                {
                                    UserId       = userId,
                                    Qtd          = _pagamentoAtual.Quantidade,
                                    DataCredito  = DateTime.Now,
                                    Debito       = 0,
                                    DataValidade = DateTime.Now.AddMonths(1),
                                    DataCriacao  = DateTime.Now
                                };
                                await repMongo.GravarOne <Models.CreditoMetricas>(credito);
                            }
                        }
                        if (result.Status == "CANCELLED" && _pagamentoAtual.StatusPagamento == "Pendente")
                        {
                            _pagamentoAtual.StatusPagamento = "Cancelado";
                            //Mudar Status
                            await repMongo.AlterarStatusPagamento(new ContractClass <Models.DTO.PagamentoPage>()
                            {
                                _id = _id,
                                Obj = _pagamentoAtual
                            });
                        }
                        if (result.Status == "REFUNDED" && _pagamentoAtual.StatusPagamento == "Pendente")
                        {
                            _pagamentoAtual.StatusPagamento = "Cancelado";
                            //Mudar Status
                            await repMongo.AlterarStatusPagamento(new ContractClass <Models.DTO.PagamentoPage>()
                            {
                                _id = _id,
                                Obj = _pagamentoAtual
                            });
                        }
                        if (result.Status == "REFUNDED" && _pagamentoAtual.StatusPagamento == "Pago")
                        {
                            _pagamentoAtual.StatusPagamento = "Cancelado";
                            //Mudar Status
                            await repMongo.AlterarStatusPagamento(new ContractClass <Models.DTO.PagamentoPage>()
                            {
                                _id = _id,
                                Obj = _pagamentoAtual
                            });
                        }
                        #endregion
                    }
                    else
                    {
                        if (_pagamentoAtual.subscriptionResponse != null)
                        {
                            #region Invoices
                            var lstResult = await WC.Signature.ListSignatureInvoices(_pagamentoAtual.subscriptionResponse.Code);

                            foreach (var result in lstResult.Invoices)
                            {
                                if (_pagamentoAtual.Invoices == null)
                                {
                                    _pagamentoAtual.Invoices = new List <Invoice>();
                                }
                                var _invoice = _pagamentoAtual.Invoices.Where(w => w.Id == result.Id).FirstOrDefault();

                                if (_invoice == null)
                                {
                                    _pagamentoAtual.Invoices.Add(result);
                                    _invoice = result;
                                }

                                if (result.Status.Code == 3)//Pago
                                {
                                    _pagamentoAtual.StatusPagamento = "Pago";
                                    _pagamentoAtual.NextInvoice     = DateTime.Now.AddMonths(1);

                                    //Mudar Status
                                    await repMongo.AlterarStatusPagamento(new ContractClass <Models.DTO.PagamentoPage>()
                                    {
                                        _id = _id,
                                        Obj = _pagamentoAtual
                                    });

                                    //Inserir credito se for authorizado o pagamento
                                    var credito = new Models.CreditoMetricas()
                                    {
                                        UserId       = userId,
                                        Qtd          = _pagamentoAtual.Quantidade,
                                        DataCredito  = DateTime.Now,
                                        Debito       = 0,
                                        DataValidade =
                                            _pagamentoAtual.codPlan.Contains("year")?
                                            DateTime.Now.AddMonths(12) :DateTime.Now.AddMonths(1),
                                        DataCriacao = DateTime.Now
                                    };
                                    await repMongo.GravarOne <Models.CreditoMetricas>(credito);

                                    //Email de pagamento
                                    var usuarioId = await repMongo.FindFilter <Models.Usuario>("Obj.UserId", _pagamentoAtual.Usuario.UserId);

                                    var envio = SenderEmail.Pagamento(_pagamentoAtual.Usuario.Email, usuarioId._id.ToString());
                                }

                                if (_invoice.Status != result.Status)
                                {
                                    if (result.Status.Code == 4)//Problemas no pagto
                                    {
                                        _pagamentoAtual.StatusPagamento = "Problemas";

                                        //Mudar Status
                                        await repMongo.AlterarStatusPagamento(new ContractClass <Models.DTO.PagamentoPage>()
                                        {
                                            _id = _id,
                                            Obj = _pagamentoAtual
                                        });
                                    }
                                }
                            }

                            _pagamentoAtualContractual.Obj = _pagamentoAtual;
                            await repMongo.AlterarInvoices(_pagamentoAtualContractual);

                            #endregion
                        }
                    }
                }

                return(true);
            }
            catch (Exception ex)
            {
                return(false);
            }
        }