using IdokladSdk.Models.CreditNote; using IdokladSdk.Models.IssuedDocumentTemplate.Patch; using IdokladSdk.Models.IssuedDocumentTemplate.Post; using IdokladSdk.Models.IssuedTaxDocument.Patch; using IdokladSdk.Models.IssuedTaxDocument.Post; using IdokladSdk.Models.ProformaInvoice; using IdokladSdk.Models.RecurringInvoice; using IdokladSdk.Models.SalesOrder; using IdokladSdk.Models.SalesReceipt; using Idoklad.Client; namespace Idoklad.Services; /// /// Sales-side documents: proforma invoices, credit notes, sales receipts, sales orders, /// recurring invoices, issued tax documents and issued document templates. /// public sealed class SalesDocumentsService { private readonly IdokladApiAccessor _accessor; public SalesDocumentsService(IdokladApiAccessor accessor) => _accessor = accessor; // ---- Proforma invoices ---- public Task ListProformaAsync(int page, int pageSize, CancellationToken ct) => _accessor.Api.ProformaInvoiceClient.List().ToPageAsync(page, pageSize, ct); public Task ProformaDetailAsync(int id, CancellationToken ct) => _accessor.Api.ProformaInvoiceClient.Detail(id).ToDetailAsync(ct); public async Task ProformaDefaultAsync(CancellationToken ct) => (await _accessor.Api.ProformaInvoiceClient.DefaultAsync(ct)).Unwrap(); public async Task ProformaCopyAsync(int id, CancellationToken ct) => (await _accessor.Api.ProformaInvoiceClient.CopyAsync(id, ct)).Unwrap(); public async Task CreateProformaAsync(ProformaInvoicePostModel model, CancellationToken ct) => (await _accessor.Api.ProformaInvoiceClient.PostAsync(model, ct)).Unwrap(); public async Task UpdateProformaAsync(ProformaInvoicePatchModel model, CancellationToken ct) => (await _accessor.Api.ProformaInvoiceClient.UpdateAsync(model, ct)).Unwrap(); public async Task DeleteProformaAsync(int id, CancellationToken ct) => (await _accessor.Api.ProformaInvoiceClient.DeleteAsync(id, ct)).Unwrap(); // ---- Credit notes ---- public Task ListCreditNotesAsync(int page, int pageSize, CancellationToken ct) => _accessor.Api.CreditNoteClient.List().ToPageAsync(page, pageSize, ct); public Task CreditNoteDetailAsync(int id, CancellationToken ct) => _accessor.Api.CreditNoteClient.Detail(id).ToDetailAsync(ct); public async Task CreditNoteDefaultAsync(int invoiceId, CancellationToken ct) => (await _accessor.Api.CreditNoteClient.DefaultAsync(invoiceId, ct)).Unwrap(); public async Task CreateCreditNoteAsync(CreditNotePostModel model, CancellationToken ct) => (await _accessor.Api.CreditNoteClient.PostAsync(model, ct)).Unwrap(); public async Task UpdateCreditNoteAsync(CreditNotePatchModel model, CancellationToken ct) => (await _accessor.Api.CreditNoteClient.UpdateAsync(model, ct)).Unwrap(); public async Task DeleteCreditNoteAsync(int id, CancellationToken ct) => (await _accessor.Api.CreditNoteClient.DeleteAsync(id, ct)).Unwrap(); // ---- Sales receipts ---- public Task ListSalesReceiptsAsync(int page, int pageSize, CancellationToken ct) => _accessor.Api.SalesReceiptClient.List().ToPageAsync(page, pageSize, ct); public Task SalesReceiptDetailAsync(int id, CancellationToken ct) => _accessor.Api.SalesReceiptClient.Detail(id).ToDetailAsync(ct); public async Task SalesReceiptDefaultAsync(CancellationToken ct) => (await _accessor.Api.SalesReceiptClient.DefaultAsync(ct)).Unwrap(); public async Task SalesReceiptCopyAsync(int id, CancellationToken ct) => (await _accessor.Api.SalesReceiptClient.CopyAsync(id, ct)).Unwrap(); public async Task CreateSalesReceiptAsync(SalesReceiptPostModel model, CancellationToken ct) => (await _accessor.Api.SalesReceiptClient.PostAsync(model, ct)).Unwrap(); public async Task UpdateSalesReceiptAsync(SalesReceiptPatchModel model, CancellationToken ct) => (await _accessor.Api.SalesReceiptClient.UpdateAsync(model, ct)).Unwrap(); public async Task DeleteSalesReceiptAsync(int id, CancellationToken ct) => (await _accessor.Api.SalesReceiptClient.DeleteAsync(id, ct)).Unwrap(); // ---- Sales orders ---- public Task ListSalesOrdersAsync(int page, int pageSize, CancellationToken ct) => _accessor.Api.SalesOrderClient.List().ToPageAsync(page, pageSize, ct); public Task SalesOrderDetailAsync(int id, CancellationToken ct) => _accessor.Api.SalesOrderClient.Detail(id).ToDetailAsync(ct); public async Task SalesOrderDefaultAsync(CancellationToken ct) => (await _accessor.Api.SalesOrderClient.DefaultAsync(ct)).Unwrap(); public async Task SalesOrderCopyAsync(int id, CancellationToken ct) => (await _accessor.Api.SalesOrderClient.CopyAsync(id, ct)).Unwrap(); public async Task CreateSalesOrderAsync(SalesOrderPostModel model, CancellationToken ct) => (await _accessor.Api.SalesOrderClient.PostAsync(model, ct)).Unwrap(); public async Task UpdateSalesOrderAsync(SalesOrderPatchModel model, CancellationToken ct) => (await _accessor.Api.SalesOrderClient.UpdateAsync(model, ct)).Unwrap(); public async Task DeleteSalesOrderAsync(int id, CancellationToken ct) => (await _accessor.Api.SalesOrderClient.DeleteAsync(id, ct)).Unwrap(); // ---- Recurring invoices ---- public Task ListRecurringAsync(int page, int pageSize, CancellationToken ct) => _accessor.Api.RecurringInvoiceClient.List().ToPageAsync(page, pageSize, ct); public Task RecurringDetailAsync(int id, CancellationToken ct) => _accessor.Api.RecurringInvoiceClient.Detail(id).ToDetailAsync(ct); public async Task RecurringDefaultAsync(CancellationToken ct) => (await _accessor.Api.RecurringInvoiceClient.DefaultAsync(ct)).Unwrap(); public async Task RecurringCopyAsync(int id, CancellationToken ct) => (await _accessor.Api.RecurringInvoiceClient.CopyAsync(id, ct)).Unwrap(); public async Task CreateRecurringAsync(RecurringInvoicePostModel model, CancellationToken ct) => (await _accessor.Api.RecurringInvoiceClient.PostAsync(model, ct)).Unwrap(); public async Task UpdateRecurringAsync(RecurringInvoicePatchModel model, CancellationToken ct) => (await _accessor.Api.RecurringInvoiceClient.UpdateAsync(model, ct)).Unwrap(); public async Task DeleteRecurringAsync(int id, CancellationToken ct) => (await _accessor.Api.RecurringInvoiceClient.DeleteAsync(id, ct)).Unwrap(); // ---- Issued tax documents ---- public Task ListTaxDocumentsAsync(int page, int pageSize, CancellationToken ct) => _accessor.Api.IssuedTaxDocumentClient.List().ToPageAsync(page, pageSize, ct); public Task TaxDocumentDetailAsync(int id, CancellationToken ct) => _accessor.Api.IssuedTaxDocumentClient.Detail(id).ToDetailAsync(ct); public async Task TaxDocumentDefaultAsync(int advanceInvoiceId, CancellationToken ct) => (await _accessor.Api.IssuedTaxDocumentClient.DefaultAsync(advanceInvoiceId, ct)).Unwrap(); public async Task CreateTaxDocumentAsync(IssuedTaxDocumentPostModel model, CancellationToken ct) => (await _accessor.Api.IssuedTaxDocumentClient.PostAsync(model, ct)).Unwrap(); public async Task UpdateTaxDocumentAsync(IssuedTaxDocumentPatchModel model, CancellationToken ct) => (await _accessor.Api.IssuedTaxDocumentClient.UpdateAsync(model, ct)).Unwrap(); public async Task DeleteTaxDocumentAsync(int id, CancellationToken ct) => (await _accessor.Api.IssuedTaxDocumentClient.DeleteAsync(id, ct)).Unwrap(); // ---- Issued document templates ---- public Task ListTemplatesAsync(int page, int pageSize, CancellationToken ct) => _accessor.Api.IssuedDocumentTemplateClient.List().ToPageAsync(page, pageSize, ct); public Task TemplateDetailAsync(int id, CancellationToken ct) => _accessor.Api.IssuedDocumentTemplateClient.Detail(id).ToDetailAsync(ct); public async Task TemplateDefaultAsync(CancellationToken ct) => (await _accessor.Api.IssuedDocumentTemplateClient.DefaultAsync(ct)).Unwrap(); public async Task CreateTemplateAsync(IssuedDocumentTemplatePostModel model, CancellationToken ct) => (await _accessor.Api.IssuedDocumentTemplateClient.PostAsync(model, ct)).Unwrap(); public async Task UpdateTemplateAsync(IssuedDocumentTemplatePatchModel model, CancellationToken ct) => (await _accessor.Api.IssuedDocumentTemplateClient.UpdateAsync(model, ct)).Unwrap(); public async Task DeleteTemplateAsync(int id, CancellationToken ct) => (await _accessor.Api.IssuedDocumentTemplateClient.DeleteAsync(id, ct)).Unwrap(); }