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); }
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); } }