mirror of
https://github.com/bitwarden/server.git
synced 2025-04-15 18:18:12 -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;
|
PaymentSource = billing.PaymentSource != null ? new BillingSource(billing.PaymentSource) : null;
|
||||||
Subscription = billing.Subscription != null ? new BillingSubscription(billing.Subscription) : null;
|
Subscription = billing.Subscription != null ? new BillingSubscription(billing.Subscription) : null;
|
||||||
Charges = billing.Charges.Select(c => new BillingCharge(c));
|
Charges = billing.Charges.Select(c => new BillingCharge(c));
|
||||||
|
UpcomingInvoice = billing.UpcomingInvoice != null ? new BillingInvoice(billing.UpcomingInvoice) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public BillingSource PaymentSource { get; set; }
|
public BillingSource PaymentSource { get; set; }
|
||||||
public BillingSubscription Subscription { get; set; }
|
public BillingSubscription Subscription { get; set; }
|
||||||
|
public BillingInvoice UpcomingInvoice { get; set; }
|
||||||
public IEnumerable<BillingCharge> Charges { get; set; }
|
public IEnumerable<BillingCharge> Charges { get; set; }
|
||||||
|
|
||||||
public class BillingSource
|
public class BillingSource
|
||||||
@ -86,9 +88,9 @@ namespace Bit.Core.Models.Api
|
|||||||
Status = sub.Status;
|
Status = sub.Status;
|
||||||
TrialStartDate = sub.TrialStart;
|
TrialStartDate = sub.TrialStart;
|
||||||
TrialEndDate = sub.TrialEnd;
|
TrialEndDate = sub.TrialEnd;
|
||||||
NextBillDate = sub.CurrentPeriodEnd;
|
EndDate = sub.CurrentPeriodEnd;
|
||||||
CancelledDate = sub.CanceledAt;
|
CancelledDate = sub.CanceledAt;
|
||||||
CancelAtNextBillDate = sub.CancelAtPeriodEnd;
|
CancelAtEndDate = sub.CancelAtPeriodEnd;
|
||||||
if(sub.Items?.Data != null)
|
if(sub.Items?.Data != null)
|
||||||
{
|
{
|
||||||
Items = sub.Items.Data.Select(i => new BillingSubscriptionItem(i));
|
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? TrialStartDate { get; set; }
|
||||||
public DateTime? TrialEndDate { get; set; }
|
public DateTime? TrialEndDate { get; set; }
|
||||||
public DateTime? NextBillDate { get; set; }
|
public DateTime? EndDate { get; set; }
|
||||||
public DateTime? CancelledDate { get; set; }
|
public DateTime? CancelledDate { get; set; }
|
||||||
public bool CancelAtNextBillDate { get; set; }
|
public bool CancelAtEndDate { get; set; }
|
||||||
public string Status { get; set; }
|
public string Status { get; set; }
|
||||||
public IEnumerable<BillingSubscriptionItem> Items { get; set; } = new List<BillingSubscriptionItem>();
|
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 class BillingCharge
|
||||||
{
|
{
|
||||||
public BillingCharge(StripeCharge charge)
|
public BillingCharge(StripeCharge charge)
|
||||||
|
@ -7,6 +7,7 @@ namespace Bit.Core.Models.Business
|
|||||||
{
|
{
|
||||||
public Source PaymentSource { get; set; }
|
public Source PaymentSource { get; set; }
|
||||||
public StripeSubscription Subscription { get; set; }
|
public StripeSubscription Subscription { get; set; }
|
||||||
|
public StripeInvoice UpcomingInvoice { get; set; }
|
||||||
public IEnumerable<StripeCharge> Charges { get; set; } = new List<StripeCharge>();
|
public IEnumerable<StripeCharge> Charges { get; set; } = new List<StripeCharge>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -46,6 +46,7 @@ namespace Bit.Core.Services
|
|||||||
var customerService = new StripeCustomerService();
|
var customerService = new StripeCustomerService();
|
||||||
var subscriptionService = new StripeSubscriptionService();
|
var subscriptionService = new StripeSubscriptionService();
|
||||||
var chargeService = new StripeChargeService();
|
var chargeService = new StripeChargeService();
|
||||||
|
var invoiceService = new StripeInvoiceService();
|
||||||
|
|
||||||
if(!string.IsNullOrWhiteSpace(organization.StripeCustomerId))
|
if(!string.IsNullOrWhiteSpace(organization.StripeCustomerId))
|
||||||
{
|
{
|
||||||
@ -72,6 +73,19 @@ namespace Bit.Core.Services
|
|||||||
Limit = 20
|
Limit = 20
|
||||||
});
|
});
|
||||||
orgBilling.Charges = charges.OrderByDescending(c => c.Created);
|
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