using System; using System.Linq; using System.Collections.Generic; using Bit.Core.Models.Business; using Bit.Core.Enums; namespace Bit.Core.Models.Api { public class BillingResponseModel : ResponseModel { public BillingResponseModel(BillingInfo billing) : base("billing") { Balance = billing.Balance; PaymentSource = billing.PaymentSource != null ? new BillingSource(billing.PaymentSource) : null; Transactions = billing.Transactions?.Select(t => new BillingTransaction(t)); Invoices = billing.Invoices?.Select(i => new BillingInvoice(i)); } public decimal Balance { get; set; } public BillingSource PaymentSource { get; set; } public IEnumerable Invoices { get; set; } public IEnumerable Transactions { get; set; } } public class BillingSource { public BillingSource(BillingInfo.BillingSource source) { Type = source.Type; CardBrand = source.CardBrand; Description = source.Description; NeedsVerification = source.NeedsVerification; } public PaymentMethodType Type { get; set; } public string CardBrand { get; set; } public string Description { get; set; } public bool NeedsVerification { get; set; } } public class BillingInvoice { public BillingInvoice(BillingInfo.BillingInvoice inv) { Amount = inv.Amount; Date = inv.Date; Url = inv.Url; PdfUrl = inv.PdfUrl; Number = inv.Number; Paid = inv.Paid; } public decimal Amount { get; set; } public DateTime? Date { get; set; } public string Url { get; set; } public string PdfUrl { get; set; } public string Number { get; set; } public bool Paid { get; set; } } public class BillingTransaction { public BillingTransaction(BillingInfo.BillingTransaction transaction) { CreatedDate = transaction.CreatedDate; Amount = transaction.Amount; Refunded = transaction.Refunded; RefundedAmount = transaction.RefundedAmount; PartiallyRefunded = transaction.PartiallyRefunded; Type = transaction.Type; PaymentMethodType = transaction.PaymentMethodType; Details = transaction.Details; } public DateTime CreatedDate { get; set; } public decimal Amount { get; set; } public bool? Refunded { get; set; } public bool? PartiallyRefunded { get; set; } public decimal? RefundedAmount { get; set; } public TransactionType Type { get; set; } public PaymentMethodType? PaymentMethodType { get; set; } public string Details { get; set; } } }