using IdokladSdk.Models.BankStatement.Patch; using IdokladSdk.Models.BankStatement.Post; using IdokladSdk.Models.IssuedDocumentPayment; using IdokladSdk.Models.ReceivedDocumentPayments; using Idoklad.Client; namespace Idoklad.Services; /// /// Payments and bank statements: bank statements, issued document payments and received document /// payments. /// public sealed class PaymentsService { private readonly IdokladApiAccessor _accessor; public PaymentsService(IdokladApiAccessor accessor) => _accessor = accessor; // ---- Bank statements ---- public Task ListBankStatementsAsync(int page, int pageSize, CancellationToken ct) => _accessor.Api.BankStatementClient.List().ToPageAsync(page, pageSize, ct); public Task BankStatementDetailAsync(int id, CancellationToken ct) => _accessor.Api.BankStatementClient.Detail(id).ToDetailAsync(ct); public async Task CreateBankStatementAsync(BankStatementPostModel model, CancellationToken ct) => (await _accessor.Api.BankStatementClient.PostAsync(model, ct)).Unwrap(); public async Task UpdateBankStatementAsync(BankStatementPatchModel model, CancellationToken ct) => (await _accessor.Api.BankStatementClient.UpdateAsync(model, ct)).Unwrap(); public async Task DeleteBankStatementAsync(int id, CancellationToken ct) => (await _accessor.Api.BankStatementClient.DeleteAsync(id, ct)).Unwrap(); // ---- Issued document payments ---- public Task ListIssuedPaymentsAsync(int page, int pageSize, CancellationToken ct) => _accessor.Api.IssuedDocumentPaymentClient.List().ToPageAsync(page, pageSize, ct); public Task IssuedPaymentDetailAsync(int id, CancellationToken ct) => _accessor.Api.IssuedDocumentPaymentClient.Detail(id).ToDetailAsync(ct); public async Task IssuedPaymentDefaultAsync(int invoiceId, CancellationToken ct) => (await _accessor.Api.IssuedDocumentPaymentClient.DefaultAsync(invoiceId, ct)).Unwrap(); public async Task CreateIssuedPaymentAsync(IssuedDocumentPaymentPostModel model, CancellationToken ct) => (await _accessor.Api.IssuedDocumentPaymentClient.PostAsync(model, ct)).Unwrap(); public async Task DeleteIssuedPaymentAsync(int id, CancellationToken ct) => (await _accessor.Api.IssuedDocumentPaymentClient.DeleteAsync(id, ct)).Unwrap(); public async Task FullyUnpayIssuedAsync(int invoiceId, CancellationToken ct) => (await _accessor.Api.IssuedDocumentPaymentClient.FullyUnpayAsync(invoiceId, ct)).Unwrap(); // ---- Received document payments ---- public Task ListReceivedPaymentsAsync(int page, int pageSize, CancellationToken ct) => _accessor.Api.ReceivedDocumentPaymentsClient.List().ToPageAsync(page, pageSize, ct); public Task ReceivedPaymentDetailAsync(int id, CancellationToken ct) => _accessor.Api.ReceivedDocumentPaymentsClient.Detail(id).ToDetailAsync(ct); public async Task ReceivedPaymentDefaultAsync(int invoiceId, CancellationToken ct) => (await _accessor.Api.ReceivedDocumentPaymentsClient.DefaultAsync(invoiceId, ct)).Unwrap(); public async Task CreateReceivedPaymentAsync(ReceivedDocumentPaymentPostModel model, CancellationToken ct) => (await _accessor.Api.ReceivedDocumentPaymentsClient.PostAsync(model, ct)).Unwrap(); public async Task DeleteReceivedPaymentAsync(int id, CancellationToken ct) => (await _accessor.Api.ReceivedDocumentPaymentsClient.DeleteAsync(id, ct)).Unwrap(); public async Task FullyUnpayReceivedAsync(int invoiceId, CancellationToken ct) => (await _accessor.Api.ReceivedDocumentPaymentsClient.FullyUnpayAsync(invoiceId, ct)).Unwrap(); }