1
0
mirror of https://github.com/bitwarden/server.git synced 2025-04-13 00:58:13 -05:00

upcoming invoice info

This commit is contained in:
Kyle Spearrin 2017-04-10 11:30:36 -04:00
parent 265b3285a6
commit f8baf3abb3
3 changed files with 33 additions and 4 deletions

View File

@ -43,10 +43,12 @@ namespace Bit.Core.Models.Api
PaymentSource = billing.PaymentSource != null ? new BillingSource(billing.PaymentSource) : null;
Subscription = billing.Subscription != null ? new BillingSubscription(billing.Subscription) : null;
Charges = billing.Charges.Select(c => new BillingCharge(c));
UpcomingInvoice = billing.UpcomingInvoice != null ? new BillingInvoice(billing.UpcomingInvoice) : null;
}
public BillingSource PaymentSource { get; set; }
public BillingSubscription Subscription { get; set; }
public BillingInvoice UpcomingInvoice { get; set; }
public IEnumerable<BillingCharge> Charges { get; set; }
public class BillingSource
@ -86,9 +88,9 @@ namespace Bit.Core.Models.Api
Status = sub.Status;
TrialStartDate = sub.TrialStart;
TrialEndDate = sub.TrialEnd;
NextBillDate = sub.CurrentPeriodEnd;
EndDate = sub.CurrentPeriodEnd;
CancelledDate = sub.CanceledAt;
CancelAtNextBillDate = sub.CancelAtPeriodEnd;
CancelAtEndDate = sub.CancelAtPeriodEnd;
if(sub.Items?.Data != null)
{
Items = sub.Items.Data.Select(i => new BillingSubscriptionItem(i));
@ -97,9 +99,9 @@ namespace Bit.Core.Models.Api
public DateTime? TrialStartDate { get; set; }
public DateTime? TrialEndDate { get; set; }
public DateTime? NextBillDate { get; set; }
public DateTime? EndDate { get; set; }
public DateTime? CancelledDate { get; set; }
public bool CancelAtNextBillDate { get; set; }
public bool CancelAtEndDate { get; set; }
public string Status { get; set; }
public IEnumerable<BillingSubscriptionItem> Items { get; set; } = new List<BillingSubscriptionItem>();
@ -124,6 +126,18 @@ namespace Bit.Core.Models.Api
}
}
public class BillingInvoice
{
public BillingInvoice(StripeInvoice inv)
{
Amount = inv.AmountDue / 100;
Date = inv.Date.Value;
}
public decimal Amount { get; set; }
public DateTime? Date { get; set; }
}
public class BillingCharge
{
public BillingCharge(StripeCharge charge)

View File

@ -7,6 +7,7 @@ namespace Bit.Core.Models.Business
{
public Source PaymentSource { get; set; }
public StripeSubscription Subscription { get; set; }
public StripeInvoice UpcomingInvoice { get; set; }
public IEnumerable<StripeCharge> Charges { get; set; } = new List<StripeCharge>();
}
}

View File

@ -46,6 +46,7 @@ namespace Bit.Core.Services
var customerService = new StripeCustomerService();
var subscriptionService = new StripeSubscriptionService();
var chargeService = new StripeChargeService();
var invoiceService = new StripeInvoiceService();
if(!string.IsNullOrWhiteSpace(organization.StripeCustomerId))
{
@ -72,6 +73,19 @@ namespace Bit.Core.Services
Limit = 20
});
orgBilling.Charges = charges.OrderByDescending(c => c.Created);
if(!string.IsNullOrWhiteSpace(organization.StripeSubscriptionId))
{
try
{
var upcomingInvoice = await invoiceService.UpcomingAsync(organization.StripeCustomerId);
if(upcomingInvoice != null)
{
orgBilling.UpcomingInvoice = upcomingInvoice;
}
}
catch(StripeException) { }
}
}
}