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:
parent
265b3285a6
commit
f8baf3abb3
@ -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)
|
||||
|
@ -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>();
|
||||
}
|
||||
}
|
||||
|
@ -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) { }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user