Exemplo n.º 1
0
        private async Task <Models.CreditoMetricas> GetCredito(string UserId, Repository.MongoRep repMongo = null)
        {
            if (repMongo == null)
            {
                repMongo = new Repository.MongoRep("", _settings);
            }
            var list = await repMongo.ListarCreditos(UserId);

            if (list == null || (list.Count == 0))
            {
                return(null);
            }

            list = list.Where(w =>  //TODO: debitos na conta...
                              (w.Obj.DataValidade >= DateTime.Now)).ToList();

            if (list == null || (list.Count == 0))
            {
                return(null);
            }

            var cred = new Models.CreditoMetricas()
            {
                DataCredito  = list.Max(m => m.Obj.DataCredito),
                DataCriacao  = DateTime.Now,
                DataValidade = list.Max(m => m.Obj.DataValidade),
                Qtd          = list.Sum(m => m.Obj.Qtd),
                Debito       = list.Sum(m => m.Obj.Debito),
                UserId       = UserId
            };

            return(cred);
        }
Exemplo n.º 2
0
        public static async Task <bool> SetPaymentInvoices()
        {
            setSetting();
            Wirecard.WirecardClient WC = null;
            WC = SetAmbiente(WC);

            try
            {
                var repMongo = new MongoRep("", _settings, "");
                var lstPays  = await repMongo.ListarPendingPayInvoice();

                var lstInvoices = lstPays.Select(s => s._id.ToString()).ToList();

                foreach (var pagamentoId in lstInvoices)
                {
                    var _id = new ObjectId(pagamentoId);

                    var lstPagamentos = await repMongo.ListarById <webMetrics.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 <webMetrics.Models.DTO.PagamentoPage>()
                                {
                                    _id = _id,
                                    Obj = _pagamentoAtual
                                });

                                if (_pagamentoAtual.StatusPagamento == "Pago")
                                {
                                    //Inserir credito se for authorizado o pagamento
                                    var credito = new webMetrics.Models.CreditoMetricas()
                                    {
                                        UserId       = userId,
                                        Qtd          = _pagamentoAtual.Quantidade,
                                        DataCredito  = DateTime.Now,
                                        Debito       = 0,
                                        DataValidade = DateTime.Now.AddMonths(1),
                                        DataCriacao  = DateTime.Now
                                    };
                                    await repMongo.GravarOne <webMetrics.Models.CreditoMetricas>(credito);
                                }
                            }
                            if (result.Status == "CANCELLED" && _pagamentoAtual.StatusPagamento == "Pendente")
                            {
                                _pagamentoAtual.StatusPagamento = "Cancelado";
                                //Mudar Status
                                await repMongo.AlterarStatusPagamento(new ContractClass <webMetrics.Models.DTO.PagamentoPage>()
                                {
                                    _id = _id,
                                    Obj = _pagamentoAtual
                                });
                            }
                            if (result.Status == "REFUNDED" && _pagamentoAtual.StatusPagamento == "Pendente")
                            {
                                _pagamentoAtual.StatusPagamento = "Cancelado";
                                //Mudar Status
                                await repMongo.AlterarStatusPagamento(new ContractClass <webMetrics.Models.DTO.PagamentoPage>()
                                {
                                    _id = _id,
                                    Obj = _pagamentoAtual
                                });
                            }
                            if (result.Status == "REFUNDED" && _pagamentoAtual.StatusPagamento == "Pago")
                            {
                                _pagamentoAtual.StatusPagamento = "Cancelado";
                                //Mudar Status
                                await repMongo.AlterarStatusPagamento(new ContractClass <webMetrics.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();

                                    var novo = false;
                                    if (_invoice == null)
                                    {
                                        novo = true;
                                        _pagamentoAtual.Invoices.Add(result);
                                        _invoice = result;
                                    }

                                    if (result.Status.Code == 3 &&
                                        (
                                            (_invoice.Status.Code != 3 && !novo) ||
                                            (novo)
                                        )
                                        )//Pago
                                    {
                                        _pagamentoAtual.NextInvoice = _pagamentoAtual.NextInvoice.AddMonths(1);

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

                                        //Email de pagamento
                                        var usuarioId = await repMongo.FindFilter <webMetrics.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 <webMetrics.Models.DTO.PagamentoPage>()
                                            {
                                                _id = _id,
                                                Obj = _pagamentoAtual
                                            });
                                        }
                                    }

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

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

                                #endregion
                            }
                        }
                    }
                }

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