more flex and filters

This commit is contained in:
JiriUhlir
2026-07-14 06:21:37 +02:00
parent 1a898b95f9
commit d9e3c59d69
15 changed files with 488 additions and 32 deletions
+2 -2
View File
@@ -11,8 +11,8 @@ public sealed class ContactsService
public ContactsService(IdokladApiAccessor accessor) => _accessor = accessor;
public async Task<Page<ContactListGetModel>> ListAsync(int page, int pageSize, CancellationToken ct)
=> (await _accessor.Api.ContactClient.List().Page(page).PageSize(pageSize).GetAsync(ct)).Unwrap();
public Task<Page<ContactListGetModel>> ListAsync(int page, int pageSize, string? filter, string? filterType, string? sort, CancellationToken ct)
=> _accessor.Api.ContactClient.List().GetPageAsync(page, pageSize, filter, filterType, sort, ct);
public async Task<ContactGetModel> DetailAsync(int id, CancellationToken ct)
=> (await _accessor.Api.ContactClient.Detail(id).GetAsync(ct)).Unwrap();
+2 -2
View File
@@ -11,8 +11,8 @@ public sealed class IssuedInvoicesService
public IssuedInvoicesService(IdokladApiAccessor accessor) => _accessor = accessor;
public async Task<Page<IssuedInvoiceListGetModel>> ListAsync(int page, int pageSize, CancellationToken ct)
=> (await _accessor.Api.IssuedInvoiceClient.List().Page(page).PageSize(pageSize).GetAsync(ct)).Unwrap();
public Task<Page<IssuedInvoiceListGetModel>> ListAsync(int page, int pageSize, string? filter, string? filterType, string? sort, CancellationToken ct)
=> _accessor.Api.IssuedInvoiceClient.List().GetPageAsync(page, pageSize, filter, filterType, sort, ct);
public async Task<IssuedInvoiceGetModel> DetailAsync(int id, CancellationToken ct)
=> (await _accessor.Api.IssuedInvoiceClient.Detail(id).GetAsync(ct)).Unwrap();
+30
View File
@@ -0,0 +1,30 @@
using IdokladSdk.Models.Email;
using Idoklad.Client;
namespace Idoklad.Services;
/// <summary>
/// Sends document e-mails (invoice, proforma, credit note, received invoice, reminders) through
/// the iDoklad MailClient. The settings carry the document id, recipients and options.
/// </summary>
public sealed class MailService
{
private readonly IdokladApiAccessor _accessor;
public MailService(IdokladApiAccessor accessor) => _accessor = accessor;
public async Task<EmailSendResult> SendIssuedInvoiceAsync(IssuedInvoiceEmailSettings settings, CancellationToken ct)
=> (await _accessor.Api.MailClient.IssuedInvoiceEmail.SendAsync(settings, ct)).Unwrap();
public async Task<EmailSendResult> SendProformaInvoiceAsync(ProformaInvoiceEmailSettings settings, CancellationToken ct)
=> (await _accessor.Api.MailClient.ProformaInvoiceEmail.SendAsync(settings, ct)).Unwrap();
public async Task<EmailSendResult> SendCreditNoteAsync(CreditNoteEmailSettings settings, CancellationToken ct)
=> (await _accessor.Api.MailClient.CreditNoteEmail.SendAsync(settings, ct)).Unwrap();
public async Task<EmailSendResult> SendReceivedInvoiceAsync(ReceivedInvoiceEmailSettings settings, CancellationToken ct)
=> (await _accessor.Api.MailClient.ReceivedInvoiceEmail.SendAsync(settings, ct)).Unwrap();
public async Task<EmailSendResult> SendRemindersAsync(RemindersEmailSettings settings, CancellationToken ct)
=> (await _accessor.Api.MailClient.RemindersEmail.SendAsync(settings, ct)).Unwrap();
}
+2 -2
View File
@@ -11,8 +11,8 @@ public sealed class ReceivedInvoicesService
public ReceivedInvoicesService(IdokladApiAccessor accessor) => _accessor = accessor;
public async Task<Page<ReceivedInvoiceListGetModel>> ListAsync(int page, int pageSize, CancellationToken ct)
=> (await _accessor.Api.ReceivedInvoiceClient.List().Page(page).PageSize(pageSize).GetAsync(ct)).Unwrap();
public Task<Page<ReceivedInvoiceListGetModel>> ListAsync(int page, int pageSize, string? filter, string? filterType, string? sort, CancellationToken ct)
=> _accessor.Api.ReceivedInvoiceClient.List().GetPageAsync(page, pageSize, filter, filterType, sort, ct);
public async Task<ReceivedInvoiceGetModel> DetailAsync(int id, CancellationToken ct)
=> (await _accessor.Api.ReceivedInvoiceClient.Detail(id).GetAsync(ct)).Unwrap();
+6 -6
View File
@@ -16,8 +16,8 @@ public sealed class RegistersService
public RegistersService(IdokladApiAccessor accessor) => _accessor = accessor;
// Bank accounts
public async Task<Page<BankAccountListGetModel>> ListBankAccountsAsync(int page, int pageSize, CancellationToken ct)
=> (await _accessor.Api.BankAccountClient.List().Page(page).PageSize(pageSize).GetAsync(ct)).Unwrap();
public Task<Page<BankAccountListGetModel>> ListBankAccountsAsync(int page, int pageSize, string? filter, string? filterType, string? sort, CancellationToken ct)
=> _accessor.Api.BankAccountClient.List().GetPageAsync(page, pageSize, filter, filterType, sort, ct);
public async Task<BankAccountGetModel> BankAccountDetailAsync(int id, CancellationToken ct)
=> (await _accessor.Api.BankAccountClient.Detail(id).GetAsync(ct)).Unwrap();
@@ -32,13 +32,13 @@ public sealed class RegistersService
=> (await _accessor.Api.BankAccountClient.DeleteAsync(id, ct)).Unwrap();
// VAT rates (read-only)
public async Task<Page<VatRateListGetModel>> ListVatRatesAsync(int page, int pageSize, CancellationToken ct)
=> (await _accessor.Api.VatRateClient.List().Page(page).PageSize(pageSize).GetAsync(ct)).Unwrap();
public Task<Page<VatRateListGetModel>> ListVatRatesAsync(int page, int pageSize, string? filter, string? filterType, string? sort, CancellationToken ct)
=> _accessor.Api.VatRateClient.List().GetPageAsync(page, pageSize, filter, filterType, sort, ct);
public async Task<VatRateGetModel> VatRateDetailAsync(int id, CancellationToken ct)
=> (await _accessor.Api.VatRateClient.Detail(id).GetAsync(ct)).Unwrap();
// Numeric sequences (read-only list)
public async Task<Page<NumericSequenceGetModel>> ListNumericSequencesAsync(int page, int pageSize, CancellationToken ct)
=> (await _accessor.Api.NumericSequenceClient.List().Page(page).PageSize(pageSize).GetAsync(ct)).Unwrap();
public Task<Page<NumericSequenceGetModel>> ListNumericSequencesAsync(int page, int pageSize, string? filter, string? filterType, string? sort, CancellationToken ct)
=> _accessor.Api.NumericSequenceClient.List().GetPageAsync(page, pageSize, filter, filterType, sort, ct);
}
+31
View File
@@ -0,0 +1,31 @@
using IdokladSdk.Enums;
using IdokladSdk.Models.Report;
using Idoklad.Client;
namespace Idoklad.Services;
/// <summary>
/// Document PDF exports (iDoklad Reports). Each method returns the report as a Base64-encoded
/// string — the iDoklad API's native representation; decode it to obtain the raw PDF bytes.
/// </summary>
public sealed class ReportsService
{
private readonly IdokladApiAccessor _accessor;
public ReportsService(IdokladApiAccessor accessor) => _accessor = accessor;
/// <summary>Export an issued invoice as a Base64-encoded PDF.</summary>
public async Task<string> IssuedInvoicePdfAsync(int id, Language? language, bool compressed, CancellationToken ct)
=> (await _accessor.Api.ReportClient.IssuedInvoice.Detail(id).GetAsync(Option(language, compressed), ct)).Unwrap();
/// <summary>Export a proforma (advance) invoice as a Base64-encoded PDF.</summary>
public async Task<string> ProformaInvoicePdfAsync(int id, Language? language, bool compressed, CancellationToken ct)
=> (await _accessor.Api.ReportClient.ProformaInvoice.Detail(id).GetAsync(Option(language, compressed), ct)).Unwrap();
/// <summary>Export a credit note as a Base64-encoded PDF.</summary>
public async Task<string> CreditNotePdfAsync(int id, Language? language, bool compressed, CancellationToken ct)
=> (await _accessor.Api.ReportClient.CreditNote.Detail(id).GetAsync(Option(language, compressed), ct)).Unwrap();
private static ExtendedReportOption Option(Language? language, bool compressed)
=> new() { Language = language, Compressed = compressed };
}