zbyle sluzby podle CC

This commit is contained in:
JiriUhlir
2026-06-12 14:18:21 +02:00
parent 1801d02e5c
commit 0805748567
34 changed files with 2543 additions and 52 deletions
+32
View File
@@ -0,0 +1,32 @@
using IdokladSdk.Clients;
using IdokladSdk.Requests.Core;
namespace Idoklad.Client;
/// <summary>
/// Generic helpers over the SDK's list/detail request builders so the read endpoints of the many
/// agendas can be expressed in a single line. The concrete payload type is inferred by the SDK and
/// returned boxed (full data is preserved at runtime; only the Swagger schema is generic).
/// </summary>
public static class SdkRequestExtensions
{
public static async Task<object?> ToPageAsync<TList, TClient, TGetModel, TFilter, TSort>(
this BaseList<TList, TClient, TGetModel, TFilter, TSort> list,
int page,
int pageSize,
CancellationToken ct)
where TList : BaseList<TList, TClient, TGetModel, TFilter, TSort>
where TClient : BaseClient
where TFilter : new()
where TSort : new()
where TGetModel : new()
=> (await list.Page(page).PageSize(pageSize).GetAsync(ct)).Unwrap();
public static async Task<object?> ToDetailAsync<TDetail, TClient, TGetModel>(
this BaseDetail<TDetail, TClient, TGetModel> detail,
CancellationToken ct)
where TDetail : BaseDetail<TDetail, TClient, TGetModel>
where TClient : BaseClient
where TGetModel : new()
=> (await detail.GetAsync(ct)).Unwrap();
}
+101
View File
@@ -0,0 +1,101 @@
using IdokladSdk.Models.PriceListItem;
using IdokladSdk.Models.StockMovement;
using IdokladSdk.Models.Tag;
using Microsoft.AspNetCore.Mvc;
using Idoklad.Services;
namespace Idoklad.Controllers;
/// <summary>
/// Price list items, stock movements and tags. Requires iDoklad credentials (headers or environment defaults).
/// </summary>
[ApiController]
[Produces("application/json")]
[Tags("Catalog")]
public sealed class CatalogController : ControllerBase
{
private readonly CatalogService _service;
public CatalogController(CatalogService service) => _service = service;
// ---- Price list items ----
/// <summary>List price list items (paged).</summary>
[HttpGet("price-list-items")]
public async Task<IActionResult> ListPriceListItems(int page = 1, int pageSize = 20, CancellationToken ct = default)
=> Ok(await _service.ListPriceListItemsAsync(page, pageSize, ct));
/// <summary>Get a pre-filled default model for creating a new price list item.</summary>
[HttpGet("price-list-items/default")]
public async Task<IActionResult> PriceListItemDefault(CancellationToken ct)
=> Ok(await _service.PriceListItemDefaultAsync(ct));
/// <summary>Get a price list item detail by id.</summary>
[HttpGet("price-list-items/{id:int}")]
public async Task<IActionResult> PriceListItemDetail(int id, CancellationToken ct)
=> Ok(await _service.PriceListItemDetailAsync(id, ct));
/// <summary>Create a new price list item.</summary>
[HttpPost("price-list-items")]
public async Task<IActionResult> CreatePriceListItem([FromBody] PriceListItemPostModel model, CancellationToken ct)
=> Ok(await _service.CreatePriceListItemAsync(model, ct));
/// <summary>Update an existing price list item (the model id identifies the item).</summary>
[HttpPatch("price-list-items")]
public async Task<IActionResult> UpdatePriceListItem([FromBody] PriceListItemPatchModel model, CancellationToken ct)
=> Ok(await _service.UpdatePriceListItemAsync(model, ct));
// ---- Stock movements ----
/// <summary>List stock movements (paged).</summary>
[HttpGet("stock-movements")]
public async Task<IActionResult> ListStockMovements(int page = 1, int pageSize = 20, CancellationToken ct = default)
=> Ok(await _service.ListStockMovementsAsync(page, pageSize, ct));
/// <summary>Get a pre-filled default stock movement model for the given price list item id.</summary>
[HttpGet("stock-movements/default/{priceListItemId:int}")]
public async Task<IActionResult> StockMovementDefault(int priceListItemId, CancellationToken ct)
=> Ok(await _service.StockMovementDefaultAsync(priceListItemId, ct));
/// <summary>Get a stock movement detail by id.</summary>
[HttpGet("stock-movements/{id:int}")]
public async Task<IActionResult> StockMovementDetail(int id, CancellationToken ct)
=> Ok(await _service.StockMovementDetailAsync(id, ct));
/// <summary>Create a new stock movement.</summary>
[HttpPost("stock-movements")]
public async Task<IActionResult> CreateStockMovement([FromBody] StockMovementPostModel model, CancellationToken ct)
=> Ok(await _service.CreateStockMovementAsync(model, ct));
/// <summary>Update an existing stock movement (the model id identifies the movement).</summary>
[HttpPatch("stock-movements")]
public async Task<IActionResult> UpdateStockMovement([FromBody] StockMovementPatchModel model, CancellationToken ct)
=> Ok(await _service.UpdateStockMovementAsync(model, ct));
/// <summary>Delete a stock movement by id.</summary>
[HttpDelete("stock-movements/{id:int}")]
public async Task<IActionResult> DeleteStockMovement(int id, CancellationToken ct)
=> Ok(await _service.DeleteStockMovementAsync(id, ct));
// ---- Tags ----
/// <summary>List tags (paged).</summary>
[HttpGet("tags")]
public async Task<IActionResult> ListTags(int page = 1, int pageSize = 20, CancellationToken ct = default)
=> Ok(await _service.ListTagsAsync(page, pageSize, ct));
/// <summary>Create a new tag.</summary>
[HttpPost("tags")]
public async Task<IActionResult> CreateTag([FromBody] TagPostModel model, CancellationToken ct)
=> Ok(await _service.CreateTagAsync(model, ct));
/// <summary>Update an existing tag (the model id identifies the tag).</summary>
[HttpPatch("tags")]
public async Task<IActionResult> UpdateTag([FromBody] TagPatchModel model, CancellationToken ct)
=> Ok(await _service.UpdateTagAsync(model, ct));
/// <summary>Delete a tag by id.</summary>
[HttpDelete("tags/{id:int}")]
public async Task<IActionResult> DeleteTag(int id, CancellationToken ct)
=> Ok(await _service.DeleteTagAsync(id, ct));
}
+118
View File
@@ -0,0 +1,118 @@
using Microsoft.AspNetCore.Mvc;
using Idoklad.Services;
namespace Idoklad.Controllers;
/// <summary>
/// Read-only iDoklad code lists / registers. Requires iDoklad credentials (headers or environment
/// defaults).
/// </summary>
[ApiController]
[Produces("application/json")]
[Tags("CodeLists")]
public sealed class CodeListsController : ControllerBase
{
private readonly CodeListsService _service;
public CodeListsController(CodeListsService service) => _service = service;
/// <summary>List banks (paged).</summary>
[HttpGet("code-lists/banks")]
public async Task<IActionResult> Banks(int page = 1, int pageSize = 20, CancellationToken ct = default)
=> Ok(await _service.ListBanksAsync(page, pageSize, ct));
/// <summary>Get a bank detail by id.</summary>
[HttpGet("code-lists/banks/{id:int}")]
public async Task<IActionResult> BankDetail(int id, CancellationToken ct)
=> Ok(await _service.BankDetailAsync(id, ct));
/// <summary>List countries (paged).</summary>
[HttpGet("code-lists/countries")]
public async Task<IActionResult> Countries(int page = 1, int pageSize = 20, CancellationToken ct = default)
=> Ok(await _service.ListCountriesAsync(page, pageSize, ct));
/// <summary>Get a country detail by id.</summary>
[HttpGet("code-lists/countries/{id:int}")]
public async Task<IActionResult> CountryDetail(int id, CancellationToken ct)
=> Ok(await _service.CountryDetailAsync(id, ct));
/// <summary>List currencies (paged).</summary>
[HttpGet("code-lists/currencies")]
public async Task<IActionResult> Currencies(int page = 1, int pageSize = 20, CancellationToken ct = default)
=> Ok(await _service.ListCurrenciesAsync(page, pageSize, ct));
/// <summary>Get a currency detail by id.</summary>
[HttpGet("code-lists/currencies/{id:int}")]
public async Task<IActionResult> CurrencyDetail(int id, CancellationToken ct)
=> Ok(await _service.CurrencyDetailAsync(id, ct));
/// <summary>List constant symbols (paged).</summary>
[HttpGet("code-lists/constant-symbols")]
public async Task<IActionResult> ConstantSymbols(int page = 1, int pageSize = 20, CancellationToken ct = default)
=> Ok(await _service.ListConstantSymbolsAsync(page, pageSize, ct));
/// <summary>Get a constant symbol detail by id.</summary>
[HttpGet("code-lists/constant-symbols/{id:int}")]
public async Task<IActionResult> ConstantSymbolDetail(int id, CancellationToken ct)
=> Ok(await _service.ConstantSymbolDetailAsync(id, ct));
/// <summary>List exchange rates (paged).</summary>
[HttpGet("code-lists/exchange-rates")]
public async Task<IActionResult> ExchangeRates(int page = 1, int pageSize = 20, CancellationToken ct = default)
=> Ok(await _service.ListExchangeRatesAsync(page, pageSize, ct));
/// <summary>Get an exchange rate detail by id.</summary>
[HttpGet("code-lists/exchange-rates/{id:int}")]
public async Task<IActionResult> ExchangeRateDetail(int id, CancellationToken ct)
=> Ok(await _service.ExchangeRateDetailAsync(id, ct));
/// <summary>List payment options (paged).</summary>
[HttpGet("code-lists/payment-options")]
public async Task<IActionResult> PaymentOptions(int page = 1, int pageSize = 20, CancellationToken ct = default)
=> Ok(await _service.ListPaymentOptionsAsync(page, pageSize, ct));
/// <summary>Get a payment option detail by id.</summary>
[HttpGet("code-lists/payment-options/{id:int}")]
public async Task<IActionResult> PaymentOptionDetail(int id, CancellationToken ct)
=> Ok(await _service.PaymentOptionDetailAsync(id, ct));
/// <summary>List VAT codes (paged).</summary>
[HttpGet("code-lists/vat-codes")]
public async Task<IActionResult> VatCodes(int page = 1, int pageSize = 20, CancellationToken ct = default)
=> Ok(await _service.ListVatCodesAsync(page, pageSize, ct));
/// <summary>Get a VAT code detail by id.</summary>
[HttpGet("code-lists/vat-codes/{id:int}")]
public async Task<IActionResult> VatCodeDetail(int id, CancellationToken ct)
=> Ok(await _service.VatCodeDetailAsync(id, ct));
/// <summary>List VAT reverse-charge codes (paged).</summary>
[HttpGet("code-lists/vat-reverse-charge-codes")]
public async Task<IActionResult> VatReverseChargeCodes(int page = 1, int pageSize = 20, CancellationToken ct = default)
=> Ok(await _service.ListVatReverseChargeCodesAsync(page, pageSize, ct));
/// <summary>Get a VAT reverse-charge code detail by id.</summary>
[HttpGet("code-lists/vat-reverse-charge-codes/{id:int}")]
public async Task<IActionResult> VatReverseChargeCodeDetail(int id, CancellationToken ct)
=> Ok(await _service.VatReverseChargeCodeDetailAsync(id, ct));
/// <summary>List sales offices (paged).</summary>
[HttpGet("code-lists/sales-offices")]
public async Task<IActionResult> SalesOffices(int page = 1, int pageSize = 20, CancellationToken ct = default)
=> Ok(await _service.ListSalesOfficesAsync(page, pageSize, ct));
/// <summary>Get a sales office detail by id.</summary>
[HttpGet("code-lists/sales-offices/{id:int}")]
public async Task<IActionResult> SalesOfficeDetail(int id, CancellationToken ct)
=> Ok(await _service.SalesOfficeDetailAsync(id, ct));
/// <summary>List sales POS equipment (paged).</summary>
[HttpGet("code-lists/sales-pos-equipment")]
public async Task<IActionResult> SalesPosEquipment(int page = 1, int pageSize = 20, CancellationToken ct = default)
=> Ok(await _service.ListSalesPosEquipmentAsync(page, pageSize, ct));
/// <summary>Get a sales POS equipment detail by id.</summary>
[HttpGet("code-lists/sales-pos-equipment/{id:int}")]
public async Task<IActionResult> SalesPosEquipmentDetail(int id, CancellationToken ct)
=> Ok(await _service.SalesPosEquipmentDetailAsync(id, ct));
}
+122
View File
@@ -0,0 +1,122 @@
using IdokladSdk.Enums;
using IdokladSdk.Models.Attachment;
using IdokladSdk.Models.Webhook;
using Microsoft.AspNetCore.Mvc;
using Idoklad.Services;
namespace Idoklad.Controllers;
/// <summary>
/// Integration / utility agendas: webhooks, notifications, change log, registered sales,
/// unpaired documents, attachments and system code books. Requires iDoklad credentials.
/// </summary>
[ApiController]
[Produces("application/json")]
[Tags("Integration")]
public sealed class IntegrationController : ControllerBase
{
private readonly IntegrationService _service;
public IntegrationController(IntegrationService service) => _service = service;
// ---- Webhooks ----
/// <summary>List configured webhooks (paged).</summary>
[HttpGet("webhooks")]
public async Task<IActionResult> ListWebhooks(int page = 1, int pageSize = 20, CancellationToken ct = default)
=> Ok(await _service.ListWebhooksAsync(page, pageSize, ct));
/// <summary>Get a webhook detail by id.</summary>
[HttpGet("webhooks/{id:int}")]
public async Task<IActionResult> WebhookDetail(int id, CancellationToken ct)
=> Ok(await _service.WebhookDetailAsync(id, ct));
/// <summary>Create (register) a new webhook subscription.</summary>
[HttpPost("webhooks")]
public async Task<IActionResult> CreateWebhook([FromBody] AgendaWebhookSettingsPostModel model, CancellationToken ct)
=> Ok(await _service.CreateWebhookAsync(model, ct));
/// <summary>Delete a webhook by id.</summary>
[HttpDelete("webhooks/{id:int}")]
public async Task<IActionResult> DeleteWebhook(int id, CancellationToken ct)
=> Ok(await _service.DeleteWebhookAsync(id, ct));
// ---- Notifications ----
/// <summary>List notifications (paged).</summary>
[HttpGet("notifications")]
public async Task<IActionResult> ListNotifications(int page = 1, int pageSize = 20, CancellationToken ct = default)
=> Ok(await _service.ListNotificationsAsync(page, pageSize, ct));
/// <summary>Delete (dismiss) a notification by id.</summary>
[HttpDelete("notifications/{id:int}")]
public async Task<IActionResult> DeleteNotification(int id, CancellationToken ct)
=> Ok(await _service.DeleteNotificationAsync(id, ct));
// ---- Change log ----
/// <summary>List the agenda change log (paged).</summary>
[HttpGet("logs")]
public async Task<IActionResult> ListLog(int page = 1, int pageSize = 20, CancellationToken ct = default)
=> Ok(await _service.ListLogAsync(page, pageSize, ct));
// ---- Registered sales (EET) ----
/// <summary>List registered sales / EET records (paged).</summary>
[HttpGet("registered-sales")]
public async Task<IActionResult> ListRegisteredSales(int page = 1, int pageSize = 20, CancellationToken ct = default)
=> Ok(await _service.ListRegisteredSalesAsync(page, pageSize, ct));
/// <summary>Get a pre-filled default model for creating a new registered sale.</summary>
[HttpGet("registered-sales/default")]
public async Task<IActionResult> RegisteredSaleDefault(CancellationToken ct)
=> Ok(await _service.RegisteredSaleDefaultAsync(ct));
// ---- Unpaired documents ----
/// <summary>List unpaired documents for a movement type and pairing document type.</summary>
[HttpGet("unpaired-documents/{movementType}/{pairingDocumentType}")]
public async Task<IActionResult> ListUnpairedDocuments(
MovementType movementType, PairingDocumentType pairingDocumentType, int page = 1, int pageSize = 20, CancellationToken ct = default)
=> Ok(await _service.ListUnpairedDocumentsAsync(movementType, pairingDocumentType, page, pageSize, ct));
// ---- Attachments ----
/// <summary>Get a single attachment by its id.</summary>
[HttpGet("attachments/{attachmentId:int}")]
public async Task<IActionResult> GetAttachment(int attachmentId, bool compressed = false, CancellationToken ct = default)
=> Ok(await _service.GetAttachmentAsync(attachmentId, compressed, ct));
/// <summary>Get all attachments of a document.</summary>
[HttpGet("attachments/document/{documentId:int}/{documentType}")]
public async Task<IActionResult> GetDocumentAttachments(
int documentId, AttachmentDocumentType documentType, bool compressed = false, CancellationToken ct = default)
=> Ok(await _service.GetDocumentAttachmentsAsync(documentId, documentType, compressed, ct));
/// <summary>Upload an attachment for a document.</summary>
[HttpPost("attachments")]
public async Task<IActionResult> UploadAttachment([FromBody] AttachmentUploadModel model, CancellationToken ct)
=> Ok(await _service.UploadAttachmentAsync(model, ct));
/// <summary>Delete a single attachment by its id.</summary>
[HttpDelete("attachments/{attachmentId:int}")]
public async Task<IActionResult> DeleteAttachment(int attachmentId, CancellationToken ct)
=> Ok(await _service.DeleteAttachmentAsync(attachmentId, ct));
/// <summary>Delete all attachments of a document.</summary>
[HttpDelete("attachments/document/{documentId:int}/{documentType}")]
public async Task<IActionResult> DeleteDocumentAttachments(int documentId, AttachmentDocumentType documentType, CancellationToken ct)
=> Ok(await _service.DeleteDocumentAttachmentsAsync(documentId, documentType, ct));
// ---- System code books ----
/// <summary>Get the iDoklad system code books.</summary>
[HttpGet("system/code-books")]
public async Task<IActionResult> CodeBooks(CancellationToken ct)
=> Ok(await _service.CodeBooksAsync(ct));
/// <summary>Get changes to the code books since the given timestamp.</summary>
[HttpGet("system/code-books/changes")]
public async Task<IActionResult> CodeBooksChanges([FromQuery] DateTime lastCheck, CancellationToken ct = default)
=> Ok(await _service.CodeBooksChangesAsync(lastCheck, ct));
}
+112
View File
@@ -0,0 +1,112 @@
using IdokladSdk.Models.BankStatement.Patch;
using IdokladSdk.Models.BankStatement.Post;
using IdokladSdk.Models.IssuedDocumentPayment;
using IdokladSdk.Models.ReceivedDocumentPayments;
using Microsoft.AspNetCore.Mvc;
using Idoklad.Services;
namespace Idoklad.Controllers;
/// <summary>
/// Bank statements and document payments. Requires iDoklad credentials (headers or environment defaults).
/// </summary>
[ApiController]
[Produces("application/json")]
[Tags("Payments")]
public sealed class PaymentsController : ControllerBase
{
private readonly PaymentsService _service;
public PaymentsController(PaymentsService service) => _service = service;
// ---- Bank statements ----
/// <summary>List bank statements (paged).</summary>
[HttpGet("bank-statements")]
public async Task<IActionResult> ListBankStatements(int page = 1, int pageSize = 20, CancellationToken ct = default)
=> Ok(await _service.ListBankStatementsAsync(page, pageSize, ct));
/// <summary>Get a bank statement detail by id.</summary>
[HttpGet("bank-statements/{id:int}")]
public async Task<IActionResult> BankStatementDetail(int id, CancellationToken ct)
=> Ok(await _service.BankStatementDetailAsync(id, ct));
/// <summary>Create a new bank statement.</summary>
[HttpPost("bank-statements")]
public async Task<IActionResult> CreateBankStatement([FromBody] BankStatementPostModel model, CancellationToken ct)
=> Ok(await _service.CreateBankStatementAsync(model, ct));
/// <summary>Update an existing bank statement (the model id identifies the statement).</summary>
[HttpPatch("bank-statements")]
public async Task<IActionResult> UpdateBankStatement([FromBody] BankStatementPatchModel model, CancellationToken ct)
=> Ok(await _service.UpdateBankStatementAsync(model, ct));
/// <summary>Delete a bank statement by id.</summary>
[HttpDelete("bank-statements/{id:int}")]
public async Task<IActionResult> DeleteBankStatement(int id, CancellationToken ct)
=> Ok(await _service.DeleteBankStatementAsync(id, ct));
// ---- Issued document payments ----
/// <summary>List issued document payments (paged).</summary>
[HttpGet("issued-payments")]
public async Task<IActionResult> ListIssuedPayments(int page = 1, int pageSize = 20, CancellationToken ct = default)
=> Ok(await _service.ListIssuedPaymentsAsync(page, pageSize, ct));
/// <summary>Get a pre-filled default issued payment model for the given issued invoice id.</summary>
[HttpGet("issued-payments/default/{invoiceId:int}")]
public async Task<IActionResult> IssuedPaymentDefault(int invoiceId, CancellationToken ct)
=> Ok(await _service.IssuedPaymentDefaultAsync(invoiceId, ct));
/// <summary>Get an issued document payment detail by id.</summary>
[HttpGet("issued-payments/{id:int}")]
public async Task<IActionResult> IssuedPaymentDetail(int id, CancellationToken ct)
=> Ok(await _service.IssuedPaymentDetailAsync(id, ct));
/// <summary>Create (register) a new payment for an issued document.</summary>
[HttpPost("issued-payments")]
public async Task<IActionResult> CreateIssuedPayment([FromBody] IssuedDocumentPaymentPostModel model, CancellationToken ct)
=> Ok(await _service.CreateIssuedPaymentAsync(model, ct));
/// <summary>Delete an issued document payment by id.</summary>
[HttpDelete("issued-payments/{id:int}")]
public async Task<IActionResult> DeleteIssuedPayment(int id, CancellationToken ct)
=> Ok(await _service.DeleteIssuedPaymentAsync(id, ct));
/// <summary>Fully unpay an issued invoice (removes all its payments).</summary>
[HttpPost("issued-payments/fully-unpay/{invoiceId:int}")]
public async Task<IActionResult> FullyUnpayIssued(int invoiceId, CancellationToken ct)
=> Ok(await _service.FullyUnpayIssuedAsync(invoiceId, ct));
// ---- Received document payments ----
/// <summary>List received document payments (paged).</summary>
[HttpGet("received-payments")]
public async Task<IActionResult> ListReceivedPayments(int page = 1, int pageSize = 20, CancellationToken ct = default)
=> Ok(await _service.ListReceivedPaymentsAsync(page, pageSize, ct));
/// <summary>Get a pre-filled default received payment model for the given received invoice id.</summary>
[HttpGet("received-payments/default/{invoiceId:int}")]
public async Task<IActionResult> ReceivedPaymentDefault(int invoiceId, CancellationToken ct)
=> Ok(await _service.ReceivedPaymentDefaultAsync(invoiceId, ct));
/// <summary>Get a received document payment detail by id.</summary>
[HttpGet("received-payments/{id:int}")]
public async Task<IActionResult> ReceivedPaymentDetail(int id, CancellationToken ct)
=> Ok(await _service.ReceivedPaymentDetailAsync(id, ct));
/// <summary>Create (register) a new payment for a received document.</summary>
[HttpPost("received-payments")]
public async Task<IActionResult> CreateReceivedPayment([FromBody] ReceivedDocumentPaymentPostModel model, CancellationToken ct)
=> Ok(await _service.CreateReceivedPaymentAsync(model, ct));
/// <summary>Delete a received document payment by id.</summary>
[HttpDelete("received-payments/{id:int}")]
public async Task<IActionResult> DeleteReceivedPayment(int id, CancellationToken ct)
=> Ok(await _service.DeleteReceivedPaymentAsync(id, ct));
/// <summary>Fully unpay a received invoice (removes all its payments).</summary>
[HttpPost("received-payments/fully-unpay/{invoiceId:int}")]
public async Task<IActionResult> FullyUnpayReceived(int invoiceId, CancellationToken ct)
=> Ok(await _service.FullyUnpayReceivedAsync(invoiceId, ct));
}
+107
View File
@@ -0,0 +1,107 @@
using IdokladSdk.Models.CashRegister;
using IdokladSdk.Models.CashVoucher;
using IdokladSdk.Models.ReceivedReceipt.Patch;
using IdokladSdk.Models.ReceivedReceipt.Post;
using Microsoft.AspNetCore.Mvc;
using Idoklad.Services;
namespace Idoklad.Controllers;
/// <summary>
/// Received receipts and cash agendas. Requires iDoklad credentials (headers or environment defaults).
/// </summary>
[ApiController]
[Produces("application/json")]
[Tags("PurchaseAndCash")]
public sealed class PurchaseCashController : ControllerBase
{
private readonly PurchaseCashService _service;
public PurchaseCashController(PurchaseCashService service) => _service = service;
// ---- Received receipts ----
/// <summary>List received receipts (paged).</summary>
[HttpGet("received-receipts")]
public async Task<IActionResult> ListReceivedReceipts(int page = 1, int pageSize = 20, CancellationToken ct = default)
=> Ok(await _service.ListReceivedReceiptsAsync(page, pageSize, ct));
/// <summary>Get a pre-filled default model for creating a new received receipt.</summary>
[HttpGet("received-receipts/default")]
public async Task<IActionResult> ReceivedReceiptDefault(CancellationToken ct)
=> Ok(await _service.ReceivedReceiptDefaultAsync(ct));
/// <summary>Get a received receipt detail by id.</summary>
[HttpGet("received-receipts/{id:int}")]
public async Task<IActionResult> ReceivedReceiptDetail(int id, CancellationToken ct)
=> Ok(await _service.ReceivedReceiptDetailAsync(id, ct));
/// <summary>Create a new received receipt.</summary>
[HttpPost("received-receipts")]
public async Task<IActionResult> CreateReceivedReceipt([FromBody] ReceivedReceiptPostModel model, CancellationToken ct)
=> Ok(await _service.CreateReceivedReceiptAsync(model, ct));
/// <summary>Update an existing received receipt (the model id identifies the document).</summary>
[HttpPatch("received-receipts")]
public async Task<IActionResult> UpdateReceivedReceipt([FromBody] ReceivedReceiptPatchModel model, CancellationToken ct)
=> Ok(await _service.UpdateReceivedReceiptAsync(model, ct));
/// <summary>Delete a received receipt by id.</summary>
[HttpDelete("received-receipts/{id:int}")]
public async Task<IActionResult> DeleteReceivedReceipt(int id, CancellationToken ct)
=> Ok(await _service.DeleteReceivedReceiptAsync(id, ct));
// ---- Cash vouchers ----
/// <summary>List cash vouchers (paged).</summary>
[HttpGet("cash-vouchers")]
public async Task<IActionResult> ListCashVouchers(int page = 1, int pageSize = 20, CancellationToken ct = default)
=> Ok(await _service.ListCashVouchersAsync(page, pageSize, ct));
/// <summary>Get a cash voucher detail by id.</summary>
[HttpGet("cash-vouchers/{id:int}")]
public async Task<IActionResult> CashVoucherDetail(int id, CancellationToken ct)
=> Ok(await _service.CashVoucherDetailAsync(id, ct));
/// <summary>Create a new cash voucher.</summary>
[HttpPost("cash-vouchers")]
public async Task<IActionResult> CreateCashVoucher([FromBody] CashVoucherPostModel model, CancellationToken ct)
=> Ok(await _service.CreateCashVoucherAsync(model, ct));
/// <summary>Update an existing cash voucher (the model id identifies the document).</summary>
[HttpPatch("cash-vouchers")]
public async Task<IActionResult> UpdateCashVoucher([FromBody] CashVoucherPatchModel model, CancellationToken ct)
=> Ok(await _service.UpdateCashVoucherAsync(model, ct));
/// <summary>Delete a cash voucher by id.</summary>
[HttpDelete("cash-vouchers/{id:int}")]
public async Task<IActionResult> DeleteCashVoucher(int id, CancellationToken ct)
=> Ok(await _service.DeleteCashVoucherAsync(id, ct));
// ---- Cash registers ----
/// <summary>List cash registers (paged).</summary>
[HttpGet("cash-registers")]
public async Task<IActionResult> ListCashRegisters(int page = 1, int pageSize = 20, CancellationToken ct = default)
=> Ok(await _service.ListCashRegistersAsync(page, pageSize, ct));
/// <summary>Get a cash register detail by id.</summary>
[HttpGet("cash-registers/{id:int}")]
public async Task<IActionResult> CashRegisterDetail(int id, CancellationToken ct)
=> Ok(await _service.CashRegisterDetailAsync(id, ct));
/// <summary>Create a new cash register.</summary>
[HttpPost("cash-registers")]
public async Task<IActionResult> CreateCashRegister([FromBody] CashRegisterPostModel model, CancellationToken ct)
=> Ok(await _service.CreateCashRegisterAsync(model, ct));
/// <summary>Update an existing cash register (the model id identifies the register).</summary>
[HttpPatch("cash-registers")]
public async Task<IActionResult> UpdateCashRegister([FromBody] CashRegisterPatchModel model, CancellationToken ct)
=> Ok(await _service.UpdateCashRegisterAsync(model, ct));
/// <summary>Delete a cash register by id.</summary>
[HttpDelete("cash-registers/{id:int}")]
public async Task<IActionResult> DeleteCashRegister(int id, CancellationToken ct)
=> Ok(await _service.DeleteCashRegisterAsync(id, ct));
}
+270
View File
@@ -0,0 +1,270 @@
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 Microsoft.AspNetCore.Mvc;
using Idoklad.Services;
namespace Idoklad.Controllers;
/// <summary>
/// Sales-side documents. Requires iDoklad credentials (headers or environment defaults).
/// </summary>
[ApiController]
[Produces("application/json")]
[Tags("SalesDocuments")]
public sealed class SalesDocumentsController : ControllerBase
{
private readonly SalesDocumentsService _service;
public SalesDocumentsController(SalesDocumentsService service) => _service = service;
// ---- Proforma invoices ----
/// <summary>List proforma invoices (paged).</summary>
[HttpGet("proforma-invoices")]
public async Task<IActionResult> ListProforma(int page = 1, int pageSize = 20, CancellationToken ct = default)
=> Ok(await _service.ListProformaAsync(page, pageSize, ct));
/// <summary>Get a pre-filled default model for creating a new proforma invoice.</summary>
[HttpGet("proforma-invoices/default")]
public async Task<IActionResult> ProformaDefault(CancellationToken ct)
=> Ok(await _service.ProformaDefaultAsync(ct));
/// <summary>Get a proforma invoice detail by id.</summary>
[HttpGet("proforma-invoices/{id:int}")]
public async Task<IActionResult> ProformaDetail(int id, CancellationToken ct)
=> Ok(await _service.ProformaDetailAsync(id, ct));
/// <summary>Create a new proforma invoice.</summary>
[HttpPost("proforma-invoices")]
public async Task<IActionResult> CreateProforma([FromBody] ProformaInvoicePostModel model, CancellationToken ct)
=> Ok(await _service.CreateProformaAsync(model, ct));
/// <summary>Update an existing proforma invoice (the model id identifies the document).</summary>
[HttpPatch("proforma-invoices")]
public async Task<IActionResult> UpdateProforma([FromBody] ProformaInvoicePatchModel model, CancellationToken ct)
=> Ok(await _service.UpdateProformaAsync(model, ct));
/// <summary>Create a copy (draft) of an existing proforma invoice.</summary>
[HttpPost("proforma-invoices/{id:int}/copy")]
public async Task<IActionResult> CopyProforma(int id, CancellationToken ct)
=> Ok(await _service.ProformaCopyAsync(id, ct));
/// <summary>Delete a proforma invoice by id.</summary>
[HttpDelete("proforma-invoices/{id:int}")]
public async Task<IActionResult> DeleteProforma(int id, CancellationToken ct)
=> Ok(await _service.DeleteProformaAsync(id, ct));
// ---- Credit notes ----
/// <summary>List credit notes (paged).</summary>
[HttpGet("credit-notes")]
public async Task<IActionResult> ListCreditNotes(int page = 1, int pageSize = 20, CancellationToken ct = default)
=> Ok(await _service.ListCreditNotesAsync(page, pageSize, ct));
/// <summary>Get a pre-filled default credit note model for the given (issued) invoice id.</summary>
[HttpGet("credit-notes/default/{invoiceId:int}")]
public async Task<IActionResult> CreditNoteDefault(int invoiceId, CancellationToken ct)
=> Ok(await _service.CreditNoteDefaultAsync(invoiceId, ct));
/// <summary>Get a credit note detail by id.</summary>
[HttpGet("credit-notes/{id:int}")]
public async Task<IActionResult> CreditNoteDetail(int id, CancellationToken ct)
=> Ok(await _service.CreditNoteDetailAsync(id, ct));
/// <summary>Create a new credit note.</summary>
[HttpPost("credit-notes")]
public async Task<IActionResult> CreateCreditNote([FromBody] CreditNotePostModel model, CancellationToken ct)
=> Ok(await _service.CreateCreditNoteAsync(model, ct));
/// <summary>Update an existing credit note (the model id identifies the document).</summary>
[HttpPatch("credit-notes")]
public async Task<IActionResult> UpdateCreditNote([FromBody] CreditNotePatchModel model, CancellationToken ct)
=> Ok(await _service.UpdateCreditNoteAsync(model, ct));
/// <summary>Delete a credit note by id.</summary>
[HttpDelete("credit-notes/{id:int}")]
public async Task<IActionResult> DeleteCreditNote(int id, CancellationToken ct)
=> Ok(await _service.DeleteCreditNoteAsync(id, ct));
// ---- Sales receipts ----
/// <summary>List sales receipts (paged).</summary>
[HttpGet("sales-receipts")]
public async Task<IActionResult> ListSalesReceipts(int page = 1, int pageSize = 20, CancellationToken ct = default)
=> Ok(await _service.ListSalesReceiptsAsync(page, pageSize, ct));
/// <summary>Get a pre-filled default model for creating a new sales receipt.</summary>
[HttpGet("sales-receipts/default")]
public async Task<IActionResult> SalesReceiptDefault(CancellationToken ct)
=> Ok(await _service.SalesReceiptDefaultAsync(ct));
/// <summary>Get a sales receipt detail by id.</summary>
[HttpGet("sales-receipts/{id:int}")]
public async Task<IActionResult> SalesReceiptDetail(int id, CancellationToken ct)
=> Ok(await _service.SalesReceiptDetailAsync(id, ct));
/// <summary>Create a new sales receipt.</summary>
[HttpPost("sales-receipts")]
public async Task<IActionResult> CreateSalesReceipt([FromBody] SalesReceiptPostModel model, CancellationToken ct)
=> Ok(await _service.CreateSalesReceiptAsync(model, ct));
/// <summary>Update an existing sales receipt (the model id identifies the document).</summary>
[HttpPatch("sales-receipts")]
public async Task<IActionResult> UpdateSalesReceipt([FromBody] SalesReceiptPatchModel model, CancellationToken ct)
=> Ok(await _service.UpdateSalesReceiptAsync(model, ct));
/// <summary>Create a copy (draft) of an existing sales receipt.</summary>
[HttpPost("sales-receipts/{id:int}/copy")]
public async Task<IActionResult> CopySalesReceipt(int id, CancellationToken ct)
=> Ok(await _service.SalesReceiptCopyAsync(id, ct));
/// <summary>Delete a sales receipt by id.</summary>
[HttpDelete("sales-receipts/{id:int}")]
public async Task<IActionResult> DeleteSalesReceipt(int id, CancellationToken ct)
=> Ok(await _service.DeleteSalesReceiptAsync(id, ct));
// ---- Sales orders ----
/// <summary>List sales orders (paged).</summary>
[HttpGet("sales-orders")]
public async Task<IActionResult> ListSalesOrders(int page = 1, int pageSize = 20, CancellationToken ct = default)
=> Ok(await _service.ListSalesOrdersAsync(page, pageSize, ct));
/// <summary>Get a pre-filled default model for creating a new sales order.</summary>
[HttpGet("sales-orders/default")]
public async Task<IActionResult> SalesOrderDefault(CancellationToken ct)
=> Ok(await _service.SalesOrderDefaultAsync(ct));
/// <summary>Get a sales order detail by id.</summary>
[HttpGet("sales-orders/{id:int}")]
public async Task<IActionResult> SalesOrderDetail(int id, CancellationToken ct)
=> Ok(await _service.SalesOrderDetailAsync(id, ct));
/// <summary>Create a new sales order.</summary>
[HttpPost("sales-orders")]
public async Task<IActionResult> CreateSalesOrder([FromBody] SalesOrderPostModel model, CancellationToken ct)
=> Ok(await _service.CreateSalesOrderAsync(model, ct));
/// <summary>Update an existing sales order (the model id identifies the document).</summary>
[HttpPatch("sales-orders")]
public async Task<IActionResult> UpdateSalesOrder([FromBody] SalesOrderPatchModel model, CancellationToken ct)
=> Ok(await _service.UpdateSalesOrderAsync(model, ct));
/// <summary>Create a copy (draft) of an existing sales order.</summary>
[HttpPost("sales-orders/{id:int}/copy")]
public async Task<IActionResult> CopySalesOrder(int id, CancellationToken ct)
=> Ok(await _service.SalesOrderCopyAsync(id, ct));
/// <summary>Delete a sales order by id.</summary>
[HttpDelete("sales-orders/{id:int}")]
public async Task<IActionResult> DeleteSalesOrder(int id, CancellationToken ct)
=> Ok(await _service.DeleteSalesOrderAsync(id, ct));
// ---- Recurring invoices ----
/// <summary>List recurring invoices (paged).</summary>
[HttpGet("recurring-invoices")]
public async Task<IActionResult> ListRecurring(int page = 1, int pageSize = 20, CancellationToken ct = default)
=> Ok(await _service.ListRecurringAsync(page, pageSize, ct));
/// <summary>Get a pre-filled default model for creating a new recurring invoice.</summary>
[HttpGet("recurring-invoices/default")]
public async Task<IActionResult> RecurringDefault(CancellationToken ct)
=> Ok(await _service.RecurringDefaultAsync(ct));
/// <summary>Get a recurring invoice detail by id.</summary>
[HttpGet("recurring-invoices/{id:int}")]
public async Task<IActionResult> RecurringDetail(int id, CancellationToken ct)
=> Ok(await _service.RecurringDetailAsync(id, ct));
/// <summary>Create a new recurring invoice template.</summary>
[HttpPost("recurring-invoices")]
public async Task<IActionResult> CreateRecurring([FromBody] RecurringInvoicePostModel model, CancellationToken ct)
=> Ok(await _service.CreateRecurringAsync(model, ct));
/// <summary>Update an existing recurring invoice (the model id identifies the template).</summary>
[HttpPatch("recurring-invoices")]
public async Task<IActionResult> UpdateRecurring([FromBody] RecurringInvoicePatchModel model, CancellationToken ct)
=> Ok(await _service.UpdateRecurringAsync(model, ct));
/// <summary>Create a copy (draft) of an existing recurring invoice.</summary>
[HttpPost("recurring-invoices/{id:int}/copy")]
public async Task<IActionResult> CopyRecurring(int id, CancellationToken ct)
=> Ok(await _service.RecurringCopyAsync(id, ct));
/// <summary>Delete a recurring invoice by id.</summary>
[HttpDelete("recurring-invoices/{id:int}")]
public async Task<IActionResult> DeleteRecurring(int id, CancellationToken ct)
=> Ok(await _service.DeleteRecurringAsync(id, ct));
// ---- Issued tax documents ----
/// <summary>List issued tax documents (paged).</summary>
[HttpGet("issued-tax-documents")]
public async Task<IActionResult> ListTaxDocuments(int page = 1, int pageSize = 20, CancellationToken ct = default)
=> Ok(await _service.ListTaxDocumentsAsync(page, pageSize, ct));
/// <summary>Get a pre-filled default tax document model for the given advance (proforma) invoice id.</summary>
[HttpGet("issued-tax-documents/default/{advanceInvoiceId:int}")]
public async Task<IActionResult> TaxDocumentDefault(int advanceInvoiceId, CancellationToken ct)
=> Ok(await _service.TaxDocumentDefaultAsync(advanceInvoiceId, ct));
/// <summary>Get an issued tax document detail by id.</summary>
[HttpGet("issued-tax-documents/{id:int}")]
public async Task<IActionResult> TaxDocumentDetail(int id, CancellationToken ct)
=> Ok(await _service.TaxDocumentDetailAsync(id, ct));
/// <summary>Create a new issued tax document.</summary>
[HttpPost("issued-tax-documents")]
public async Task<IActionResult> CreateTaxDocument([FromBody] IssuedTaxDocumentPostModel model, CancellationToken ct)
=> Ok(await _service.CreateTaxDocumentAsync(model, ct));
/// <summary>Update an existing issued tax document (the model id identifies the document).</summary>
[HttpPatch("issued-tax-documents")]
public async Task<IActionResult> UpdateTaxDocument([FromBody] IssuedTaxDocumentPatchModel model, CancellationToken ct)
=> Ok(await _service.UpdateTaxDocumentAsync(model, ct));
/// <summary>Delete an issued tax document by id.</summary>
[HttpDelete("issued-tax-documents/{id:int}")]
public async Task<IActionResult> DeleteTaxDocument(int id, CancellationToken ct)
=> Ok(await _service.DeleteTaxDocumentAsync(id, ct));
// ---- Issued document templates ----
/// <summary>List issued document templates (paged).</summary>
[HttpGet("issued-document-templates")]
public async Task<IActionResult> ListTemplates(int page = 1, int pageSize = 20, CancellationToken ct = default)
=> Ok(await _service.ListTemplatesAsync(page, pageSize, ct));
/// <summary>Get a pre-filled default model for creating a new issued document template.</summary>
[HttpGet("issued-document-templates/default")]
public async Task<IActionResult> TemplateDefault(CancellationToken ct)
=> Ok(await _service.TemplateDefaultAsync(ct));
/// <summary>Get an issued document template detail by id.</summary>
[HttpGet("issued-document-templates/{id:int}")]
public async Task<IActionResult> TemplateDetail(int id, CancellationToken ct)
=> Ok(await _service.TemplateDetailAsync(id, ct));
/// <summary>Create a new issued document template.</summary>
[HttpPost("issued-document-templates")]
public async Task<IActionResult> CreateTemplate([FromBody] IssuedDocumentTemplatePostModel model, CancellationToken ct)
=> Ok(await _service.CreateTemplateAsync(model, ct));
/// <summary>Update an existing issued document template (the model id identifies the template).</summary>
[HttpPatch("issued-document-templates")]
public async Task<IActionResult> UpdateTemplate([FromBody] IssuedDocumentTemplatePatchModel model, CancellationToken ct)
=> Ok(await _service.UpdateTemplateAsync(model, ct));
/// <summary>Delete an issued document template by id.</summary>
[HttpDelete("issued-document-templates/{id:int}")]
public async Task<IActionResult> DeleteTemplate(int id, CancellationToken ct)
=> Ok(await _service.DeleteTemplateAsync(id, ct));
}
+62
View File
@@ -0,0 +1,62 @@
using IdokladSdk.Enums;
using Microsoft.AspNetCore.Mvc;
using Idoklad.Services;
namespace Idoklad.Controllers;
/// <summary>Agenda statistics and summaries. Requires iDoklad credentials.</summary>
[ApiController]
[Route("statistics")]
[Produces("application/json")]
[Tags("Statistics")]
public sealed class StatisticsController : ControllerBase
{
private readonly StatisticsService _service;
public StatisticsController(StatisticsService service) => _service = service;
/// <summary>Invoicing totals for a relative period (e.g. LastSevenDays, ThisMonth).</summary>
[HttpGet("invoicing-for-period/{periodType}")]
public async Task<IActionResult> InvoicingForPeriod(PeriodType periodType, CancellationToken ct)
=> Ok(await _service.InvoicingForPeriodAsync(periodType, ct));
/// <summary>Invoicing totals for a relative year (e.g. ThisYear, LastYear).</summary>
[HttpGet("invoicing-for-year/{yearType}")]
public async Task<IActionResult> InvoicingForYear(YearType yearType, CancellationToken ct)
=> Ok(await _service.InvoicingForYearAsync(yearType, ct));
/// <summary>Invoicing summary broken down by quarter.</summary>
[HttpGet("quarter-summary")]
public async Task<IActionResult> QuarterSummary(CancellationToken ct)
=> Ok(await _service.QuarterSummaryAsync(ct));
/// <summary>Top partners by turnover (optionally limited by count).</summary>
[HttpGet("top-partners")]
public async Task<IActionResult> TopPartners([FromQuery] int? count, CancellationToken ct)
=> Ok(await _service.TopPartnersAsync(count, ct));
/// <summary>Overall agenda summary (totals and key figures).</summary>
[HttpGet("agenda-summary")]
public async Task<IActionResult> AgendaSummary(CancellationToken ct)
=> Ok(await _service.AgendaSummaryAsync(ct));
/// <summary>Statistics for a single contact by id.</summary>
[HttpGet("contact/{id:int}")]
public async Task<IActionResult> StatisticForContact(int id, CancellationToken ct)
=> Ok(await _service.StatisticForContactAsync(id, ct));
/// <summary>Receivables broken down by debt age intervals.</summary>
[HttpGet("debt-intervals")]
public async Task<IActionResult> DebtIntervals(CancellationToken ct)
=> Ok(await _service.DebtIntervalsAsync(ct));
/// <summary>Top debtors by outstanding amount (optionally limited by count).</summary>
[HttpGet("top-debtors")]
public async Task<IActionResult> TopDebtors([FromQuery] int? count, CancellationToken ct)
=> Ok(await _service.TopDebtorsAsync(count, ct));
/// <summary>Progress of the agenda towards the VAT-payer registration threshold.</summary>
[HttpGet("vat-payer-progress")]
public async Task<IActionResult> VatPayerProgress(CancellationToken ct)
=> Ok(await _service.VatPayerProgressAsync(ct));
}
+11 -1
View File
@@ -31,6 +31,13 @@ builder.Services.AddScoped<IssuedInvoicesService>();
builder.Services.AddScoped<ReceivedInvoicesService>(); builder.Services.AddScoped<ReceivedInvoicesService>();
builder.Services.AddScoped<RegistersService>(); builder.Services.AddScoped<RegistersService>();
builder.Services.AddScoped<AccountService>(); builder.Services.AddScoped<AccountService>();
builder.Services.AddScoped<CodeListsService>();
builder.Services.AddScoped<SalesDocumentsService>();
builder.Services.AddScoped<PurchaseCashService>();
builder.Services.AddScoped<PaymentsService>();
builder.Services.AddScoped<CatalogService>();
builder.Services.AddScoped<IntegrationService>();
builder.Services.AddScoped<StatisticsService>();
// Use Newtonsoft.Json so request/response binding matches the iDoklad SDK model attributes. // Use Newtonsoft.Json so request/response binding matches the iDoklad SDK model attributes.
builder.Services builder.Services
@@ -81,7 +88,10 @@ app.UseMiddleware<ExceptionHandlingMiddleware>();
app.UseSwagger(); app.UseSwagger();
app.UseSwaggerUI(options => app.UseSwaggerUI(options =>
{ {
options.SwaggerEndpoint("v1/swagger.json", $"{settings.AppName} v1"); // Serve the interactive docs at /docs (matching the sibling microsoft-365-service).
options.RoutePrefix = "docs";
options.SwaggerEndpoint("/swagger/v1/swagger.json", $"{settings.AppName} v1");
options.DocumentTitle = $"{settings.AppName} API docs";
}); });
app.MapControllers(); app.MapControllers();
+36 -44
View File
@@ -9,7 +9,7 @@ controllery a samostatná dokumentace ve Swaggeru.
## Konfigurace (proměnné prostředí) ## Konfigurace (proměnné prostředí)
Aplikace, ClientId, ClientSecret a ApplicationId získáte ve vývojářském portálu iDoklad. Tyto Aplikaci, ClientId, ClientSecret a ApplicationId získáte ve vývojářském portálu iDoklad. Tyto
hodnoty lze nastavit jako výchozí přes proměnné prostředí, nebo je předávat per-request v hlavičkách hodnoty lze nastavit jako výchozí přes proměnné prostředí, nebo je předávat per-request v hlavičkách
(viz níže). (viz níže).
@@ -38,7 +38,7 @@ ROOT_PATH= # base path při běhu za reverzní proxy
Citlivé proměnné (zejména **secret**) se **nepředávají v query stringu ani v těle** požadavku Citlivé proměnné (zejména **secret**) se **nepředávají v query stringu ani v těle** požadavku
**vyžadují se v HTTP hlavičkách**. To je zohledněno i ve Swaggeru: u každého agendového endpointu **vyžadují se v HTTP hlavičkách**. To je zohledněno i ve Swaggeru: u každého agendového endpointu
jsou hlavičky vtypu `X-...` zdokumentované jako parametry. jsou tyto hlavičky zdokumentované jako parametry.
| Hlavička | Význam | Fallback (env) | | Hlavička | Význam | Fallback (env) |
| --- | --- | --- | | --- | --- | --- |
@@ -60,64 +60,56 @@ X-ClientSecret: <client secret>
X-ApplicationId: <application id> X-ApplicationId: <application id>
``` ```
## API ## Swagger / OpenAPI
```http Interaktivní dokumentace běží na **`/docs`**, surový OpenAPI dokument na `/swagger/v1/swagger.json`.
GET /health Každý agendový endpoint má ve Swaggeru zdokumentované credential hlavičky i popisky operací.
GET /version
GET /status
# Account ## Pokryté agendy
GET /account/agenda
GET /account/user
# Contacts Propojeno je **41 ze 45 clientů** SDK 5.3.0. Standardní agendy podporují stránkovaný `list`,
GET /contacts?page=1&pageSize=20 `detail`, `default` (kde to SDK umožňuje) a `create`/`update`/`delete`; číselníky jsou read-only.
GET /contacts/default
GET /contacts/{id}
POST /contacts
PATCH /contacts
DELETE /contacts/{id}
# Issued invoices (vydané faktury) Meta (bez credentials): `GET /health`, `GET /version`, `GET /status`.
GET /issued-invoices?page=1&pageSize=20
GET /issued-invoices/default
GET /issued-invoices/{id}
POST /issued-invoices
PATCH /issued-invoices
POST /issued-invoices/{id}/copy
DELETE /issued-invoices/{id}
# Received invoices (přijaté faktury) | Tag | Agendy (cesty) |
GET /received-invoices?page=1&pageSize=20 | --- | --- |
GET /received-invoices/default | Account | `/account/agenda`, `/account/user` |
GET /received-invoices/{id} | Contacts | `/contacts` |
POST /received-invoices | IssuedInvoices | `/issued-invoices` (+ `/default`, `/{id}/copy`) |
PATCH /received-invoices | ReceivedInvoices | `/received-invoices` (+ `/default`) |
DELETE /received-invoices/{id} | SalesDocuments | `/proforma-invoices`, `/credit-notes`, `/sales-receipts`, `/sales-orders`, `/recurring-invoices`, `/issued-tax-documents`, `/issued-document-templates` |
| PurchaseAndCash | `/received-receipts`, `/cash-vouchers`, `/cash-registers` |
# Registry | Payments | `/bank-statements`, `/issued-payments`, `/received-payments` (+ `/fully-unpay/{invoiceId}`) |
GET /registers/bank-accounts?page=1&pageSize=20 | Catalog | `/price-list-items`, `/stock-movements`, `/tags` |
GET /registers/bank-accounts/{id} | Registers | `/registers/bank-accounts`, `/registers/vat-rates`, `/registers/numeric-sequences` |
POST /registers/bank-accounts | CodeLists | `/code-lists/banks`, `/countries`, `/currencies`, `/constant-symbols`, `/exchange-rates`, `/payment-options`, `/vat-codes`, `/vat-reverse-charge-codes`, `/sales-offices`, `/sales-pos-equipment` |
PATCH /registers/bank-accounts | Integration | `/webhooks`, `/notifications`, `/logs`, `/registered-sales`, `/unpaired-documents`, `/attachments`, `/system/code-books` |
DELETE /registers/bank-accounts/{id} | Statistics | `/statistics/*` (invoicing-for-period/year, quarter-summary, top-partners, agenda-summary, contact/{id}, debt-intervals, top-debtors, vat-payer-progress) |
GET /registers/vat-rates?page=1&pageSize=20
GET /registers/vat-rates/{id}
GET /registers/numeric-sequences?page=1&pageSize=20
```
Request/response těla odpovídají modelům iDoklad SDK (`*PostModel`, `*PatchModel`, `*GetModel`). Request/response těla odpovídají modelům iDoklad SDK (`*PostModel`, `*PatchModel`, `*GetModel`).
Serializace používá Newtonsoft.Json, aby se chování shodovalo s atributy modelů v SDK. Chyby z Serializace používá Newtonsoft.Json, aby se chování shodovalo s atributy modelů v SDK. Chyby z
iDoklad API se propagují jako `application/problem+json` s odpovídajícím HTTP statusem. iDoklad API se propagují jako `application/problem+json` s odpovídajícím HTTP statusem.
### Zatím nezapojené (na vyžádání)
Tyto klienty mají nestandardní/binární/facade charakter a nejsou zatím napojené:
- **MailClient** odesílání dokladů e-mailem (facade nad typy dokladů).
- **ReportClient** generování PDF reportů (binární výstup).
- **DocumentPaymentClient** facade nad platbami (překrývá se s `issued-payments` / `received-payments`).
- **BatchClient** dávkové operace.
Mimo to nejsou napojené pokročilé operace `Recount`, `*Batch` a `RecurringInvoice/NextIssueDates`.
`InboxClient` a `ReceivedDocumentsClient` v SDK 5.3.0 ještě nejsou (přibyly až po vydání).
## Lokální spuštění ## Lokální spuštění
```bash ```bash
dotnet run dotnet run
``` ```
Swagger UI je na `/swagger`, OpenAPI dokument na `/swagger/v1/swagger.json`. Swagger UI otevřete na `http://localhost:<port>/docs`.
## Architektura ## Architektura
+64
View File
@@ -0,0 +1,64 @@
using IdokladSdk.Models.PriceListItem;
using IdokladSdk.Models.StockMovement;
using IdokladSdk.Models.Tag;
using Idoklad.Client;
namespace Idoklad.Services;
/// <summary>
/// Catalog and stock agendas: price list items, stock movements and tags.
/// </summary>
public sealed class CatalogService
{
private readonly IdokladApiAccessor _accessor;
public CatalogService(IdokladApiAccessor accessor) => _accessor = accessor;
// ---- Price list items ----
public Task<object?> ListPriceListItemsAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.PriceListItemClient.List().ToPageAsync(page, pageSize, ct);
public Task<object?> PriceListItemDetailAsync(int id, CancellationToken ct)
=> _accessor.Api.PriceListItemClient.Detail(id).ToDetailAsync(ct);
public async Task<object?> PriceListItemDefaultAsync(CancellationToken ct)
=> (await _accessor.Api.PriceListItemClient.DefaultAsync(ct)).Unwrap();
public async Task<object?> CreatePriceListItemAsync(PriceListItemPostModel model, CancellationToken ct)
=> (await _accessor.Api.PriceListItemClient.PostAsync(model, ct)).Unwrap();
public async Task<object?> UpdatePriceListItemAsync(PriceListItemPatchModel model, CancellationToken ct)
=> (await _accessor.Api.PriceListItemClient.UpdateAsync(model, ct)).Unwrap();
// ---- Stock movements ----
public Task<object?> ListStockMovementsAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.StockMovementClient.List().ToPageAsync(page, pageSize, ct);
public Task<object?> StockMovementDetailAsync(int id, CancellationToken ct)
=> _accessor.Api.StockMovementClient.Detail(id).ToDetailAsync(ct);
public async Task<object?> StockMovementDefaultAsync(int priceListItemId, CancellationToken ct)
=> (await _accessor.Api.StockMovementClient.DefaultAsync(priceListItemId, ct)).Unwrap();
public async Task<object?> CreateStockMovementAsync(StockMovementPostModel model, CancellationToken ct)
=> (await _accessor.Api.StockMovementClient.PostAsync(model, ct)).Unwrap();
public async Task<object?> UpdateStockMovementAsync(StockMovementPatchModel model, CancellationToken ct)
=> (await _accessor.Api.StockMovementClient.UpdateAsync(model, ct)).Unwrap();
public async Task<bool> DeleteStockMovementAsync(int id, CancellationToken ct)
=> (await _accessor.Api.StockMovementClient.DeleteAsync(id, ct)).Unwrap();
// ---- Tags ----
public Task<object?> ListTagsAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.TagClient.List().ToPageAsync(page, pageSize, ct);
public async Task<object?> CreateTagAsync(TagPostModel model, CancellationToken ct)
=> (await _accessor.Api.TagClient.PostAsync(model, ct)).Unwrap();
public async Task<object?> UpdateTagAsync(TagPatchModel model, CancellationToken ct)
=> (await _accessor.Api.TagClient.UpdateAsync(model, ct)).Unwrap();
public async Task<bool> DeleteTagAsync(int id, CancellationToken ct)
=> (await _accessor.Api.TagClient.DeleteAsync(id, ct)).Unwrap();
}
+75
View File
@@ -0,0 +1,75 @@
using Idoklad.Client;
namespace Idoklad.Services;
/// <summary>
/// Read-only iDoklad code lists (registers): banks, countries, currencies, constant symbols,
/// exchange rates, payment options, VAT codes, VAT reverse-charge codes, sales offices and
/// sales POS equipment. Every agenda supports list + detail.
/// </summary>
public sealed class CodeListsService
{
private readonly IdokladApiAccessor _accessor;
public CodeListsService(IdokladApiAccessor accessor) => _accessor = accessor;
public Task<object?> ListBanksAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.BankClient.List().ToPageAsync(page, pageSize, ct);
public Task<object?> BankDetailAsync(int id, CancellationToken ct)
=> _accessor.Api.BankClient.Detail(id).ToDetailAsync(ct);
public Task<object?> ListCountriesAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.CountryClient.List().ToPageAsync(page, pageSize, ct);
public Task<object?> CountryDetailAsync(int id, CancellationToken ct)
=> _accessor.Api.CountryClient.Detail(id).ToDetailAsync(ct);
public Task<object?> ListCurrenciesAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.CurrencyClient.List().ToPageAsync(page, pageSize, ct);
public Task<object?> CurrencyDetailAsync(int id, CancellationToken ct)
=> _accessor.Api.CurrencyClient.Detail(id).ToDetailAsync(ct);
public Task<object?> ListConstantSymbolsAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.ConstantSymbolClient.List().ToPageAsync(page, pageSize, ct);
public Task<object?> ConstantSymbolDetailAsync(int id, CancellationToken ct)
=> _accessor.Api.ConstantSymbolClient.Detail(id).ToDetailAsync(ct);
public Task<object?> ListExchangeRatesAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.ExchangeRateClient.List().ToPageAsync(page, pageSize, ct);
public Task<object?> ExchangeRateDetailAsync(int id, CancellationToken ct)
=> _accessor.Api.ExchangeRateClient.Detail(id).ToDetailAsync(ct);
public Task<object?> ListPaymentOptionsAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.PaymentOptionClient.List().ToPageAsync(page, pageSize, ct);
public Task<object?> PaymentOptionDetailAsync(int id, CancellationToken ct)
=> _accessor.Api.PaymentOptionClient.Detail(id).ToDetailAsync(ct);
public Task<object?> ListVatCodesAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.VatCodeClient.List().ToPageAsync(page, pageSize, ct);
public Task<object?> VatCodeDetailAsync(int id, CancellationToken ct)
=> _accessor.Api.VatCodeClient.Detail(id).ToDetailAsync(ct);
public Task<object?> ListVatReverseChargeCodesAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.VatReverseChargeCodeClient.List().ToPageAsync(page, pageSize, ct);
public Task<object?> VatReverseChargeCodeDetailAsync(int id, CancellationToken ct)
=> _accessor.Api.VatReverseChargeCodeClient.Detail(id).ToDetailAsync(ct);
public Task<object?> ListSalesOfficesAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.SalesOfficeClient.List().ToPageAsync(page, pageSize, ct);
public Task<object?> SalesOfficeDetailAsync(int id, CancellationToken ct)
=> _accessor.Api.SalesOfficeClient.Detail(id).ToDetailAsync(ct);
public Task<object?> ListSalesPosEquipmentAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.SalesPosEquipmentClient.List().ToPageAsync(page, pageSize, ct);
public Task<object?> SalesPosEquipmentDetailAsync(int id, CancellationToken ct)
=> _accessor.Api.SalesPosEquipmentClient.Detail(id).ToDetailAsync(ct);
}
+76
View File
@@ -0,0 +1,76 @@
using IdokladSdk.Enums;
using IdokladSdk.Models.Attachment;
using IdokladSdk.Models.Webhook;
using Idoklad.Client;
namespace Idoklad.Services;
/// <summary>
/// Integration / utility agendas: webhooks, notifications, change log, registered sales (EET),
/// unpaired documents, attachments and the system code books.
/// </summary>
public sealed class IntegrationService
{
private readonly IdokladApiAccessor _accessor;
public IntegrationService(IdokladApiAccessor accessor) => _accessor = accessor;
// ---- Webhooks ----
public Task<object?> ListWebhooksAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.WebhookClient.List().ToPageAsync(page, pageSize, ct);
public Task<object?> WebhookDetailAsync(int id, CancellationToken ct)
=> _accessor.Api.WebhookClient.Detail(id).ToDetailAsync(ct);
public async Task<object?> CreateWebhookAsync(AgendaWebhookSettingsPostModel model, CancellationToken ct)
=> (await _accessor.Api.WebhookClient.PostAsync(model, ct)).Unwrap();
public async Task<bool> DeleteWebhookAsync(int id, CancellationToken ct)
=> (await _accessor.Api.WebhookClient.DeleteAsync(id, ct)).Unwrap();
// ---- Notifications ----
public Task<object?> ListNotificationsAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.NotificationClient.List().ToPageAsync(page, pageSize, ct);
public async Task<bool> DeleteNotificationAsync(int id, CancellationToken ct)
=> (await _accessor.Api.NotificationClient.DeleteAsync(id, ct)).Unwrap();
// ---- Change log ----
public Task<object?> ListLogAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.LogClient.List().ToPageAsync(page, pageSize, ct);
// ---- Registered sales (EET) ----
public Task<object?> ListRegisteredSalesAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.RegisteredSaleClient.List().ToPageAsync(page, pageSize, ct);
public async Task<object?> RegisteredSaleDefaultAsync(CancellationToken ct)
=> (await _accessor.Api.RegisteredSaleClient.DefaultAsync(ct)).Unwrap();
// ---- Unpaired documents ----
public Task<object?> ListUnpairedDocumentsAsync(
MovementType movementType, PairingDocumentType pairingDocumentType, int page, int pageSize, CancellationToken ct)
=> _accessor.Api.UnpairedDocumentClient.List(movementType, pairingDocumentType).ToPageAsync(page, pageSize, ct);
// ---- Attachments ----
public async Task<object?> GetAttachmentAsync(int attachmentId, bool compressed, CancellationToken ct)
=> (await _accessor.Api.AttachmentClient.GetAsync(attachmentId, compressed, ct)).Unwrap();
public async Task<object?> GetDocumentAttachmentsAsync(int documentId, AttachmentDocumentType documentType, bool compressed, CancellationToken ct)
=> (await _accessor.Api.AttachmentClient.GetAsync(documentId, documentType, compressed, ct)).Unwrap();
public async Task<bool> UploadAttachmentAsync(AttachmentUploadModel model, CancellationToken ct)
=> (await _accessor.Api.AttachmentClient.UploadAsync(model, ct)).Unwrap();
public async Task<bool> DeleteAttachmentAsync(int attachmentId, CancellationToken ct)
=> (await _accessor.Api.AttachmentClient.DeleteAsync(attachmentId, ct)).Unwrap();
public async Task<bool> DeleteDocumentAttachmentsAsync(int documentId, AttachmentDocumentType documentType, CancellationToken ct)
=> (await _accessor.Api.AttachmentClient.DeleteAsync(documentId, documentType, ct)).Unwrap();
// ---- System code books ----
public Task<object?> CodeBooksAsync(CancellationToken ct)
=> _accessor.Api.SystemClient.CodeBooks().ToDetailAsync(ct);
public Task<object?> CodeBooksChangesAsync(DateTime lastCheck, CancellationToken ct)
=> _accessor.Api.SystemClient.CodeBooksChanges(lastCheck).ToDetailAsync(ct);
}
+72
View File
@@ -0,0 +1,72 @@
using IdokladSdk.Models.BankStatement.Patch;
using IdokladSdk.Models.BankStatement.Post;
using IdokladSdk.Models.IssuedDocumentPayment;
using IdokladSdk.Models.ReceivedDocumentPayments;
using Idoklad.Client;
namespace Idoklad.Services;
/// <summary>
/// Payments and bank statements: bank statements, issued document payments and received document
/// payments.
/// </summary>
public sealed class PaymentsService
{
private readonly IdokladApiAccessor _accessor;
public PaymentsService(IdokladApiAccessor accessor) => _accessor = accessor;
// ---- Bank statements ----
public Task<object?> ListBankStatementsAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.BankStatementClient.List().ToPageAsync(page, pageSize, ct);
public Task<object?> BankStatementDetailAsync(int id, CancellationToken ct)
=> _accessor.Api.BankStatementClient.Detail(id).ToDetailAsync(ct);
public async Task<object?> CreateBankStatementAsync(BankStatementPostModel model, CancellationToken ct)
=> (await _accessor.Api.BankStatementClient.PostAsync(model, ct)).Unwrap();
public async Task<object?> UpdateBankStatementAsync(BankStatementPatchModel model, CancellationToken ct)
=> (await _accessor.Api.BankStatementClient.UpdateAsync(model, ct)).Unwrap();
public async Task<bool> DeleteBankStatementAsync(int id, CancellationToken ct)
=> (await _accessor.Api.BankStatementClient.DeleteAsync(id, ct)).Unwrap();
// ---- Issued document payments ----
public Task<object?> ListIssuedPaymentsAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.IssuedDocumentPaymentClient.List().ToPageAsync(page, pageSize, ct);
public Task<object?> IssuedPaymentDetailAsync(int id, CancellationToken ct)
=> _accessor.Api.IssuedDocumentPaymentClient.Detail(id).ToDetailAsync(ct);
public async Task<object?> IssuedPaymentDefaultAsync(int invoiceId, CancellationToken ct)
=> (await _accessor.Api.IssuedDocumentPaymentClient.DefaultAsync(invoiceId, ct)).Unwrap();
public async Task<object?> CreateIssuedPaymentAsync(IssuedDocumentPaymentPostModel model, CancellationToken ct)
=> (await _accessor.Api.IssuedDocumentPaymentClient.PostAsync(model, ct)).Unwrap();
public async Task<bool> DeleteIssuedPaymentAsync(int id, CancellationToken ct)
=> (await _accessor.Api.IssuedDocumentPaymentClient.DeleteAsync(id, ct)).Unwrap();
public async Task<bool> FullyUnpayIssuedAsync(int invoiceId, CancellationToken ct)
=> (await _accessor.Api.IssuedDocumentPaymentClient.FullyUnpayAsync(invoiceId, ct)).Unwrap();
// ---- Received document payments ----
public Task<object?> ListReceivedPaymentsAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.ReceivedDocumentPaymentsClient.List().ToPageAsync(page, pageSize, ct);
public Task<object?> ReceivedPaymentDetailAsync(int id, CancellationToken ct)
=> _accessor.Api.ReceivedDocumentPaymentsClient.Detail(id).ToDetailAsync(ct);
public async Task<object?> ReceivedPaymentDefaultAsync(int invoiceId, CancellationToken ct)
=> (await _accessor.Api.ReceivedDocumentPaymentsClient.DefaultAsync(invoiceId, ct)).Unwrap();
public async Task<object?> CreateReceivedPaymentAsync(ReceivedDocumentPaymentPostModel model, CancellationToken ct)
=> (await _accessor.Api.ReceivedDocumentPaymentsClient.PostAsync(model, ct)).Unwrap();
public async Task<bool> DeleteReceivedPaymentAsync(int id, CancellationToken ct)
=> (await _accessor.Api.ReceivedDocumentPaymentsClient.DeleteAsync(id, ct)).Unwrap();
public async Task<bool> FullyUnpayReceivedAsync(int invoiceId, CancellationToken ct)
=> (await _accessor.Api.ReceivedDocumentPaymentsClient.FullyUnpayAsync(invoiceId, ct)).Unwrap();
}
+69
View File
@@ -0,0 +1,69 @@
using IdokladSdk.Models.CashRegister;
using IdokladSdk.Models.CashVoucher;
using IdokladSdk.Models.ReceivedReceipt.Patch;
using IdokladSdk.Models.ReceivedReceipt.Post;
using Idoklad.Client;
namespace Idoklad.Services;
/// <summary>
/// Purchase-side receipts and cash agendas: received receipts, received documents (read-only),
/// cash vouchers and cash registers.
/// </summary>
public sealed class PurchaseCashService
{
private readonly IdokladApiAccessor _accessor;
public PurchaseCashService(IdokladApiAccessor accessor) => _accessor = accessor;
// ---- Received receipts ----
public Task<object?> ListReceivedReceiptsAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.ReceivedReceiptClient.List().ToPageAsync(page, pageSize, ct);
public Task<object?> ReceivedReceiptDetailAsync(int id, CancellationToken ct)
=> _accessor.Api.ReceivedReceiptClient.Detail(id).ToDetailAsync(ct);
public async Task<object?> ReceivedReceiptDefaultAsync(CancellationToken ct)
=> (await _accessor.Api.ReceivedReceiptClient.DefaultAsync(ct)).Unwrap();
public async Task<object?> CreateReceivedReceiptAsync(ReceivedReceiptPostModel model, CancellationToken ct)
=> (await _accessor.Api.ReceivedReceiptClient.PostAsync(model, ct)).Unwrap();
public async Task<object?> UpdateReceivedReceiptAsync(ReceivedReceiptPatchModel model, CancellationToken ct)
=> (await _accessor.Api.ReceivedReceiptClient.UpdateAsync(model, ct)).Unwrap();
public async Task<bool> DeleteReceivedReceiptAsync(int id, CancellationToken ct)
=> (await _accessor.Api.ReceivedReceiptClient.DeleteAsync(id, ct)).Unwrap();
// ---- Cash vouchers ----
public Task<object?> ListCashVouchersAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.CashVoucherClient.List().ToPageAsync(page, pageSize, ct);
public Task<object?> CashVoucherDetailAsync(int id, CancellationToken ct)
=> _accessor.Api.CashVoucherClient.Detail(id).ToDetailAsync(ct);
public async Task<object?> CreateCashVoucherAsync(CashVoucherPostModel model, CancellationToken ct)
=> (await _accessor.Api.CashVoucherClient.PostAsync(model, ct)).Unwrap();
public async Task<object?> UpdateCashVoucherAsync(CashVoucherPatchModel model, CancellationToken ct)
=> (await _accessor.Api.CashVoucherClient.UpdateAsync(model, ct)).Unwrap();
public async Task<bool> DeleteCashVoucherAsync(int id, CancellationToken ct)
=> (await _accessor.Api.CashVoucherClient.DeleteAsync(id, ct)).Unwrap();
// ---- Cash registers ----
public Task<object?> ListCashRegistersAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.CashRegisterClient.List().ToPageAsync(page, pageSize, ct);
public Task<object?> CashRegisterDetailAsync(int id, CancellationToken ct)
=> _accessor.Api.CashRegisterClient.Detail(id).ToDetailAsync(ct);
public async Task<object?> CreateCashRegisterAsync(CashRegisterPostModel model, CancellationToken ct)
=> (await _accessor.Api.CashRegisterClient.PostAsync(model, ct)).Unwrap();
public async Task<object?> UpdateCashRegisterAsync(CashRegisterPatchModel model, CancellationToken ct)
=> (await _accessor.Api.CashRegisterClient.UpdateAsync(model, ct)).Unwrap();
public async Task<bool> DeleteCashRegisterAsync(int id, CancellationToken ct)
=> (await _accessor.Api.CashRegisterClient.DeleteAsync(id, ct)).Unwrap();
}
+168
View File
@@ -0,0 +1,168 @@
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;
/// <summary>
/// Sales-side documents: proforma invoices, credit notes, sales receipts, sales orders,
/// recurring invoices, issued tax documents and issued document templates.
/// </summary>
public sealed class SalesDocumentsService
{
private readonly IdokladApiAccessor _accessor;
public SalesDocumentsService(IdokladApiAccessor accessor) => _accessor = accessor;
// ---- Proforma invoices ----
public Task<object?> ListProformaAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.ProformaInvoiceClient.List().ToPageAsync(page, pageSize, ct);
public Task<object?> ProformaDetailAsync(int id, CancellationToken ct)
=> _accessor.Api.ProformaInvoiceClient.Detail(id).ToDetailAsync(ct);
public async Task<object?> ProformaDefaultAsync(CancellationToken ct)
=> (await _accessor.Api.ProformaInvoiceClient.DefaultAsync(ct)).Unwrap();
public async Task<object?> ProformaCopyAsync(int id, CancellationToken ct)
=> (await _accessor.Api.ProformaInvoiceClient.CopyAsync(id, ct)).Unwrap();
public async Task<object?> CreateProformaAsync(ProformaInvoicePostModel model, CancellationToken ct)
=> (await _accessor.Api.ProformaInvoiceClient.PostAsync(model, ct)).Unwrap();
public async Task<object?> UpdateProformaAsync(ProformaInvoicePatchModel model, CancellationToken ct)
=> (await _accessor.Api.ProformaInvoiceClient.UpdateAsync(model, ct)).Unwrap();
public async Task<bool> DeleteProformaAsync(int id, CancellationToken ct)
=> (await _accessor.Api.ProformaInvoiceClient.DeleteAsync(id, ct)).Unwrap();
// ---- Credit notes ----
public Task<object?> ListCreditNotesAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.CreditNoteClient.List().ToPageAsync(page, pageSize, ct);
public Task<object?> CreditNoteDetailAsync(int id, CancellationToken ct)
=> _accessor.Api.CreditNoteClient.Detail(id).ToDetailAsync(ct);
public async Task<object?> CreditNoteDefaultAsync(int invoiceId, CancellationToken ct)
=> (await _accessor.Api.CreditNoteClient.DefaultAsync(invoiceId, ct)).Unwrap();
public async Task<object?> CreateCreditNoteAsync(CreditNotePostModel model, CancellationToken ct)
=> (await _accessor.Api.CreditNoteClient.PostAsync(model, ct)).Unwrap();
public async Task<object?> UpdateCreditNoteAsync(CreditNotePatchModel model, CancellationToken ct)
=> (await _accessor.Api.CreditNoteClient.UpdateAsync(model, ct)).Unwrap();
public async Task<bool> DeleteCreditNoteAsync(int id, CancellationToken ct)
=> (await _accessor.Api.CreditNoteClient.DeleteAsync(id, ct)).Unwrap();
// ---- Sales receipts ----
public Task<object?> ListSalesReceiptsAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.SalesReceiptClient.List().ToPageAsync(page, pageSize, ct);
public Task<object?> SalesReceiptDetailAsync(int id, CancellationToken ct)
=> _accessor.Api.SalesReceiptClient.Detail(id).ToDetailAsync(ct);
public async Task<object?> SalesReceiptDefaultAsync(CancellationToken ct)
=> (await _accessor.Api.SalesReceiptClient.DefaultAsync(ct)).Unwrap();
public async Task<object?> SalesReceiptCopyAsync(int id, CancellationToken ct)
=> (await _accessor.Api.SalesReceiptClient.CopyAsync(id, ct)).Unwrap();
public async Task<object?> CreateSalesReceiptAsync(SalesReceiptPostModel model, CancellationToken ct)
=> (await _accessor.Api.SalesReceiptClient.PostAsync(model, ct)).Unwrap();
public async Task<object?> UpdateSalesReceiptAsync(SalesReceiptPatchModel model, CancellationToken ct)
=> (await _accessor.Api.SalesReceiptClient.UpdateAsync(model, ct)).Unwrap();
public async Task<bool> DeleteSalesReceiptAsync(int id, CancellationToken ct)
=> (await _accessor.Api.SalesReceiptClient.DeleteAsync(id, ct)).Unwrap();
// ---- Sales orders ----
public Task<object?> ListSalesOrdersAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.SalesOrderClient.List().ToPageAsync(page, pageSize, ct);
public Task<object?> SalesOrderDetailAsync(int id, CancellationToken ct)
=> _accessor.Api.SalesOrderClient.Detail(id).ToDetailAsync(ct);
public async Task<object?> SalesOrderDefaultAsync(CancellationToken ct)
=> (await _accessor.Api.SalesOrderClient.DefaultAsync(ct)).Unwrap();
public async Task<object?> SalesOrderCopyAsync(int id, CancellationToken ct)
=> (await _accessor.Api.SalesOrderClient.CopyAsync(id, ct)).Unwrap();
public async Task<object?> CreateSalesOrderAsync(SalesOrderPostModel model, CancellationToken ct)
=> (await _accessor.Api.SalesOrderClient.PostAsync(model, ct)).Unwrap();
public async Task<object?> UpdateSalesOrderAsync(SalesOrderPatchModel model, CancellationToken ct)
=> (await _accessor.Api.SalesOrderClient.UpdateAsync(model, ct)).Unwrap();
public async Task<bool> DeleteSalesOrderAsync(int id, CancellationToken ct)
=> (await _accessor.Api.SalesOrderClient.DeleteAsync(id, ct)).Unwrap();
// ---- Recurring invoices ----
public Task<object?> ListRecurringAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.RecurringInvoiceClient.List().ToPageAsync(page, pageSize, ct);
public Task<object?> RecurringDetailAsync(int id, CancellationToken ct)
=> _accessor.Api.RecurringInvoiceClient.Detail(id).ToDetailAsync(ct);
public async Task<object?> RecurringDefaultAsync(CancellationToken ct)
=> (await _accessor.Api.RecurringInvoiceClient.DefaultAsync(ct)).Unwrap();
public async Task<object?> RecurringCopyAsync(int id, CancellationToken ct)
=> (await _accessor.Api.RecurringInvoiceClient.CopyAsync(id, ct)).Unwrap();
public async Task<object?> CreateRecurringAsync(RecurringInvoicePostModel model, CancellationToken ct)
=> (await _accessor.Api.RecurringInvoiceClient.PostAsync(model, ct)).Unwrap();
public async Task<object?> UpdateRecurringAsync(RecurringInvoicePatchModel model, CancellationToken ct)
=> (await _accessor.Api.RecurringInvoiceClient.UpdateAsync(model, ct)).Unwrap();
public async Task<bool> DeleteRecurringAsync(int id, CancellationToken ct)
=> (await _accessor.Api.RecurringInvoiceClient.DeleteAsync(id, ct)).Unwrap();
// ---- Issued tax documents ----
public Task<object?> ListTaxDocumentsAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.IssuedTaxDocumentClient.List().ToPageAsync(page, pageSize, ct);
public Task<object?> TaxDocumentDetailAsync(int id, CancellationToken ct)
=> _accessor.Api.IssuedTaxDocumentClient.Detail(id).ToDetailAsync(ct);
public async Task<object?> TaxDocumentDefaultAsync(int advanceInvoiceId, CancellationToken ct)
=> (await _accessor.Api.IssuedTaxDocumentClient.DefaultAsync(advanceInvoiceId, ct)).Unwrap();
public async Task<object?> CreateTaxDocumentAsync(IssuedTaxDocumentPostModel model, CancellationToken ct)
=> (await _accessor.Api.IssuedTaxDocumentClient.PostAsync(model, ct)).Unwrap();
public async Task<object?> UpdateTaxDocumentAsync(IssuedTaxDocumentPatchModel model, CancellationToken ct)
=> (await _accessor.Api.IssuedTaxDocumentClient.UpdateAsync(model, ct)).Unwrap();
public async Task<bool> DeleteTaxDocumentAsync(int id, CancellationToken ct)
=> (await _accessor.Api.IssuedTaxDocumentClient.DeleteAsync(id, ct)).Unwrap();
// ---- Issued document templates ----
public Task<object?> ListTemplatesAsync(int page, int pageSize, CancellationToken ct)
=> _accessor.Api.IssuedDocumentTemplateClient.List().ToPageAsync(page, pageSize, ct);
public Task<object?> TemplateDetailAsync(int id, CancellationToken ct)
=> _accessor.Api.IssuedDocumentTemplateClient.Detail(id).ToDetailAsync(ct);
public async Task<object?> TemplateDefaultAsync(CancellationToken ct)
=> (await _accessor.Api.IssuedDocumentTemplateClient.DefaultAsync(ct)).Unwrap();
public async Task<object?> CreateTemplateAsync(IssuedDocumentTemplatePostModel model, CancellationToken ct)
=> (await _accessor.Api.IssuedDocumentTemplateClient.PostAsync(model, ct)).Unwrap();
public async Task<object?> UpdateTemplateAsync(IssuedDocumentTemplatePatchModel model, CancellationToken ct)
=> (await _accessor.Api.IssuedDocumentTemplateClient.UpdateAsync(model, ct)).Unwrap();
public async Task<bool> DeleteTemplateAsync(int id, CancellationToken ct)
=> (await _accessor.Api.IssuedDocumentTemplateClient.DeleteAsync(id, ct)).Unwrap();
}
+39
View File
@@ -0,0 +1,39 @@
using IdokladSdk.Enums;
using Idoklad.Client;
namespace Idoklad.Services;
/// <summary>Agenda statistics and summaries.</summary>
public sealed class StatisticsService
{
private readonly IdokladApiAccessor _accessor;
public StatisticsService(IdokladApiAccessor accessor) => _accessor = accessor;
public async Task<object?> InvoicingForPeriodAsync(PeriodType periodType, CancellationToken ct)
=> (await _accessor.Api.StatisticsClient.InvoicingForPeriodAsync(periodType, null, ct)).Unwrap();
public async Task<object?> InvoicingForYearAsync(YearType yearType, CancellationToken ct)
=> (await _accessor.Api.StatisticsClient.InvoicingForYearAsync(yearType, ct)).Unwrap();
public async Task<object?> QuarterSummaryAsync(CancellationToken ct)
=> (await _accessor.Api.StatisticsClient.QuarterSummaryAsync(ct)).Unwrap();
public async Task<object?> TopPartnersAsync(int? count, CancellationToken ct)
=> (await _accessor.Api.StatisticsClient.TopPartnersAsync(count, ct)).Unwrap();
public async Task<object?> AgendaSummaryAsync(CancellationToken ct)
=> (await _accessor.Api.StatisticsClient.AgendaSummaryAsync(ct)).Unwrap();
public async Task<object?> StatisticForContactAsync(int id, CancellationToken ct)
=> (await _accessor.Api.StatisticsClient.StatisticForContactAsync(id, ct)).Unwrap();
public async Task<object?> DebtIntervalsAsync(CancellationToken ct)
=> (await _accessor.Api.StatisticsClient.DebtIntervals(ct)).Unwrap();
public async Task<object?> TopDebtorsAsync(int? count, CancellationToken ct)
=> (await _accessor.Api.StatisticsClient.TopDebtors(count, ct)).Unwrap();
public async Task<object?> VatPayerProgressAsync(CancellationToken ct)
=> (await _accessor.Api.StatisticsClient.VatPayerProgress(ct)).Unwrap();
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
+501
View File
@@ -29,6 +29,13 @@
code, message and iDoklad error code so the failure can be surfaced to the caller. code, message and iDoklad error code so the failure can be surfaced to the caller.
</summary> </summary>
</member> </member>
<member name="T:Idoklad.Client.SdkRequestExtensions">
<summary>
Generic helpers over the SDK's list/detail request builders so the read endpoints of the many
agendas can be expressed in a single line. The concrete payload type is inferred by the SDK and
returned boxed (full data is preserved at runtime; only the Swagger schema is generic).
</summary>
</member>
<member name="T:Idoklad.Configuration.IdokladSettings"> <member name="T:Idoklad.Configuration.IdokladSettings">
<summary> <summary>
Service configuration resolved from environment variables. Service configuration resolved from environment variables.
@@ -75,6 +82,122 @@
<member name="M:Idoklad.Controllers.AccountController.CurrentUser(System.Threading.CancellationToken)"> <member name="M:Idoklad.Controllers.AccountController.CurrentUser(System.Threading.CancellationToken)">
<summary>Get information about the current user.</summary> <summary>Get information about the current user.</summary>
</member> </member>
<member name="T:Idoklad.Controllers.CatalogController">
<summary>
Price list items, stock movements and tags. Requires iDoklad credentials (headers or environment defaults).
</summary>
</member>
<member name="M:Idoklad.Controllers.CatalogController.ListPriceListItems(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List price list items (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.CatalogController.PriceListItemDefault(System.Threading.CancellationToken)">
<summary>Get a pre-filled default model for creating a new price list item.</summary>
</member>
<member name="M:Idoklad.Controllers.CatalogController.PriceListItemDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a price list item detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.CatalogController.CreatePriceListItem(IdokladSdk.Models.PriceListItem.PriceListItemPostModel,System.Threading.CancellationToken)">
<summary>Create a new price list item.</summary>
</member>
<member name="M:Idoklad.Controllers.CatalogController.UpdatePriceListItem(IdokladSdk.Models.PriceListItem.PriceListItemPatchModel,System.Threading.CancellationToken)">
<summary>Update an existing price list item (the model id identifies the item).</summary>
</member>
<member name="M:Idoklad.Controllers.CatalogController.ListStockMovements(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List stock movements (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.CatalogController.StockMovementDefault(System.Int32,System.Threading.CancellationToken)">
<summary>Get a pre-filled default stock movement model for the given price list item id.</summary>
</member>
<member name="M:Idoklad.Controllers.CatalogController.StockMovementDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a stock movement detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.CatalogController.CreateStockMovement(IdokladSdk.Models.StockMovement.StockMovementPostModel,System.Threading.CancellationToken)">
<summary>Create a new stock movement.</summary>
</member>
<member name="M:Idoklad.Controllers.CatalogController.UpdateStockMovement(IdokladSdk.Models.StockMovement.StockMovementPatchModel,System.Threading.CancellationToken)">
<summary>Update an existing stock movement (the model id identifies the movement).</summary>
</member>
<member name="M:Idoklad.Controllers.CatalogController.DeleteStockMovement(System.Int32,System.Threading.CancellationToken)">
<summary>Delete a stock movement by id.</summary>
</member>
<member name="M:Idoklad.Controllers.CatalogController.ListTags(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List tags (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.CatalogController.CreateTag(IdokladSdk.Models.Tag.TagPostModel,System.Threading.CancellationToken)">
<summary>Create a new tag.</summary>
</member>
<member name="M:Idoklad.Controllers.CatalogController.UpdateTag(IdokladSdk.Models.Tag.TagPatchModel,System.Threading.CancellationToken)">
<summary>Update an existing tag (the model id identifies the tag).</summary>
</member>
<member name="M:Idoklad.Controllers.CatalogController.DeleteTag(System.Int32,System.Threading.CancellationToken)">
<summary>Delete a tag by id.</summary>
</member>
<member name="T:Idoklad.Controllers.CodeListsController">
<summary>
Read-only iDoklad code lists / registers. Requires iDoklad credentials (headers or environment
defaults).
</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.Banks(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List banks (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.BankDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a bank detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.Countries(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List countries (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.CountryDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a country detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.Currencies(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List currencies (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.CurrencyDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a currency detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.ConstantSymbols(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List constant symbols (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.ConstantSymbolDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a constant symbol detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.ExchangeRates(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List exchange rates (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.ExchangeRateDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get an exchange rate detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.PaymentOptions(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List payment options (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.PaymentOptionDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a payment option detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.VatCodes(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List VAT codes (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.VatCodeDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a VAT code detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.VatReverseChargeCodes(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List VAT reverse-charge codes (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.VatReverseChargeCodeDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a VAT reverse-charge code detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.SalesOffices(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List sales offices (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.SalesOfficeDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a sales office detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.SalesPosEquipment(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List sales POS equipment (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.SalesPosEquipmentDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a sales POS equipment detail by id.</summary>
</member>
<member name="T:Idoklad.Controllers.ContactsController"> <member name="T:Idoklad.Controllers.ContactsController">
<summary> <summary>
Contacts (customers/suppliers) agenda. Contacts (customers/suppliers) agenda.
@@ -102,6 +225,63 @@
<member name="M:Idoklad.Controllers.ContactsController.Delete(System.Int32,System.Threading.CancellationToken)"> <member name="M:Idoklad.Controllers.ContactsController.Delete(System.Int32,System.Threading.CancellationToken)">
<summary>Delete a contact by id.</summary> <summary>Delete a contact by id.</summary>
</member> </member>
<member name="T:Idoklad.Controllers.IntegrationController">
<summary>
Integration / utility agendas: webhooks, notifications, change log, registered sales,
unpaired documents, attachments and system code books. Requires iDoklad credentials.
</summary>
</member>
<member name="M:Idoklad.Controllers.IntegrationController.ListWebhooks(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List configured webhooks (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.IntegrationController.WebhookDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a webhook detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.IntegrationController.CreateWebhook(IdokladSdk.Models.Webhook.AgendaWebhookSettingsPostModel,System.Threading.CancellationToken)">
<summary>Create (register) a new webhook subscription.</summary>
</member>
<member name="M:Idoklad.Controllers.IntegrationController.DeleteWebhook(System.Int32,System.Threading.CancellationToken)">
<summary>Delete a webhook by id.</summary>
</member>
<member name="M:Idoklad.Controllers.IntegrationController.ListNotifications(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List notifications (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.IntegrationController.DeleteNotification(System.Int32,System.Threading.CancellationToken)">
<summary>Delete (dismiss) a notification by id.</summary>
</member>
<member name="M:Idoklad.Controllers.IntegrationController.ListLog(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List the agenda change log (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.IntegrationController.ListRegisteredSales(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List registered sales / EET records (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.IntegrationController.RegisteredSaleDefault(System.Threading.CancellationToken)">
<summary>Get a pre-filled default model for creating a new registered sale.</summary>
</member>
<member name="M:Idoklad.Controllers.IntegrationController.ListUnpairedDocuments(IdokladSdk.Enums.MovementType,IdokladSdk.Enums.PairingDocumentType,System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List unpaired documents for a movement type and pairing document type.</summary>
</member>
<member name="M:Idoklad.Controllers.IntegrationController.GetAttachment(System.Int32,System.Boolean,System.Threading.CancellationToken)">
<summary>Get a single attachment by its id.</summary>
</member>
<member name="M:Idoklad.Controllers.IntegrationController.GetDocumentAttachments(System.Int32,IdokladSdk.Enums.AttachmentDocumentType,System.Boolean,System.Threading.CancellationToken)">
<summary>Get all attachments of a document.</summary>
</member>
<member name="M:Idoklad.Controllers.IntegrationController.UploadAttachment(IdokladSdk.Models.Attachment.AttachmentUploadModel,System.Threading.CancellationToken)">
<summary>Upload an attachment for a document.</summary>
</member>
<member name="M:Idoklad.Controllers.IntegrationController.DeleteAttachment(System.Int32,System.Threading.CancellationToken)">
<summary>Delete a single attachment by its id.</summary>
</member>
<member name="M:Idoklad.Controllers.IntegrationController.DeleteDocumentAttachments(System.Int32,IdokladSdk.Enums.AttachmentDocumentType,System.Threading.CancellationToken)">
<summary>Delete all attachments of a document.</summary>
</member>
<member name="M:Idoklad.Controllers.IntegrationController.CodeBooks(System.Threading.CancellationToken)">
<summary>Get the iDoklad system code books.</summary>
</member>
<member name="M:Idoklad.Controllers.IntegrationController.CodeBooksChanges(System.DateTime,System.Threading.CancellationToken)">
<summary>Get changes to the code books since the given timestamp.</summary>
</member>
<member name="T:Idoklad.Controllers.IssuedInvoicesController"> <member name="T:Idoklad.Controllers.IssuedInvoicesController">
<summary> <summary>
Issued (outgoing) invoices agenda. Requires iDoklad credentials (headers or environment Issued (outgoing) invoices agenda. Requires iDoklad credentials (headers or environment
@@ -144,6 +324,115 @@
environment variables. Per-request callers can always override them with headers. environment variables. Per-request callers can always override them with headers.
</summary> </summary>
</member> </member>
<member name="T:Idoklad.Controllers.PaymentsController">
<summary>
Bank statements and document payments. Requires iDoklad credentials (headers or environment defaults).
</summary>
</member>
<member name="M:Idoklad.Controllers.PaymentsController.ListBankStatements(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List bank statements (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.PaymentsController.BankStatementDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a bank statement detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.PaymentsController.CreateBankStatement(IdokladSdk.Models.BankStatement.Post.BankStatementPostModel,System.Threading.CancellationToken)">
<summary>Create a new bank statement.</summary>
</member>
<member name="M:Idoklad.Controllers.PaymentsController.UpdateBankStatement(IdokladSdk.Models.BankStatement.Patch.BankStatementPatchModel,System.Threading.CancellationToken)">
<summary>Update an existing bank statement (the model id identifies the statement).</summary>
</member>
<member name="M:Idoklad.Controllers.PaymentsController.DeleteBankStatement(System.Int32,System.Threading.CancellationToken)">
<summary>Delete a bank statement by id.</summary>
</member>
<member name="M:Idoklad.Controllers.PaymentsController.ListIssuedPayments(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List issued document payments (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.PaymentsController.IssuedPaymentDefault(System.Int32,System.Threading.CancellationToken)">
<summary>Get a pre-filled default issued payment model for the given issued invoice id.</summary>
</member>
<member name="M:Idoklad.Controllers.PaymentsController.IssuedPaymentDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get an issued document payment detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.PaymentsController.CreateIssuedPayment(IdokladSdk.Models.IssuedDocumentPayment.IssuedDocumentPaymentPostModel,System.Threading.CancellationToken)">
<summary>Create (register) a new payment for an issued document.</summary>
</member>
<member name="M:Idoklad.Controllers.PaymentsController.DeleteIssuedPayment(System.Int32,System.Threading.CancellationToken)">
<summary>Delete an issued document payment by id.</summary>
</member>
<member name="M:Idoklad.Controllers.PaymentsController.FullyUnpayIssued(System.Int32,System.Threading.CancellationToken)">
<summary>Fully unpay an issued invoice (removes all its payments).</summary>
</member>
<member name="M:Idoklad.Controllers.PaymentsController.ListReceivedPayments(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List received document payments (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.PaymentsController.ReceivedPaymentDefault(System.Int32,System.Threading.CancellationToken)">
<summary>Get a pre-filled default received payment model for the given received invoice id.</summary>
</member>
<member name="M:Idoklad.Controllers.PaymentsController.ReceivedPaymentDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a received document payment detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.PaymentsController.CreateReceivedPayment(IdokladSdk.Models.ReceivedDocumentPayments.ReceivedDocumentPaymentPostModel,System.Threading.CancellationToken)">
<summary>Create (register) a new payment for a received document.</summary>
</member>
<member name="M:Idoklad.Controllers.PaymentsController.DeleteReceivedPayment(System.Int32,System.Threading.CancellationToken)">
<summary>Delete a received document payment by id.</summary>
</member>
<member name="M:Idoklad.Controllers.PaymentsController.FullyUnpayReceived(System.Int32,System.Threading.CancellationToken)">
<summary>Fully unpay a received invoice (removes all its payments).</summary>
</member>
<member name="T:Idoklad.Controllers.PurchaseCashController">
<summary>
Received receipts and cash agendas. Requires iDoklad credentials (headers or environment defaults).
</summary>
</member>
<member name="M:Idoklad.Controllers.PurchaseCashController.ListReceivedReceipts(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List received receipts (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.PurchaseCashController.ReceivedReceiptDefault(System.Threading.CancellationToken)">
<summary>Get a pre-filled default model for creating a new received receipt.</summary>
</member>
<member name="M:Idoklad.Controllers.PurchaseCashController.ReceivedReceiptDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a received receipt detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.PurchaseCashController.CreateReceivedReceipt(IdokladSdk.Models.ReceivedReceipt.Post.ReceivedReceiptPostModel,System.Threading.CancellationToken)">
<summary>Create a new received receipt.</summary>
</member>
<member name="M:Idoklad.Controllers.PurchaseCashController.UpdateReceivedReceipt(IdokladSdk.Models.ReceivedReceipt.Patch.ReceivedReceiptPatchModel,System.Threading.CancellationToken)">
<summary>Update an existing received receipt (the model id identifies the document).</summary>
</member>
<member name="M:Idoklad.Controllers.PurchaseCashController.DeleteReceivedReceipt(System.Int32,System.Threading.CancellationToken)">
<summary>Delete a received receipt by id.</summary>
</member>
<member name="M:Idoklad.Controllers.PurchaseCashController.ListCashVouchers(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List cash vouchers (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.PurchaseCashController.CashVoucherDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a cash voucher detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.PurchaseCashController.CreateCashVoucher(IdokladSdk.Models.CashVoucher.CashVoucherPostModel,System.Threading.CancellationToken)">
<summary>Create a new cash voucher.</summary>
</member>
<member name="M:Idoklad.Controllers.PurchaseCashController.UpdateCashVoucher(IdokladSdk.Models.CashVoucher.CashVoucherPatchModel,System.Threading.CancellationToken)">
<summary>Update an existing cash voucher (the model id identifies the document).</summary>
</member>
<member name="M:Idoklad.Controllers.PurchaseCashController.DeleteCashVoucher(System.Int32,System.Threading.CancellationToken)">
<summary>Delete a cash voucher by id.</summary>
</member>
<member name="M:Idoklad.Controllers.PurchaseCashController.ListCashRegisters(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List cash registers (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.PurchaseCashController.CashRegisterDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a cash register detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.PurchaseCashController.CreateCashRegister(IdokladSdk.Models.CashRegister.CashRegisterPostModel,System.Threading.CancellationToken)">
<summary>Create a new cash register.</summary>
</member>
<member name="M:Idoklad.Controllers.PurchaseCashController.UpdateCashRegister(IdokladSdk.Models.CashRegister.CashRegisterPatchModel,System.Threading.CancellationToken)">
<summary>Update an existing cash register (the model id identifies the register).</summary>
</member>
<member name="M:Idoklad.Controllers.PurchaseCashController.DeleteCashRegister(System.Int32,System.Threading.CancellationToken)">
<summary>Delete a cash register by id.</summary>
</member>
<member name="T:Idoklad.Controllers.ReceivedInvoicesController"> <member name="T:Idoklad.Controllers.ReceivedInvoicesController">
<summary> <summary>
Received (incoming) invoices agenda. Requires iDoklad credentials (headers or environment Received (incoming) invoices agenda. Requires iDoklad credentials (headers or environment
@@ -198,6 +487,179 @@
<member name="M:Idoklad.Controllers.RegistersController.ListNumericSequences(System.Int32,System.Int32,System.Threading.CancellationToken)"> <member name="M:Idoklad.Controllers.RegistersController.ListNumericSequences(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List numeric (document) sequences (paged).</summary> <summary>List numeric (document) sequences (paged).</summary>
</member> </member>
<member name="T:Idoklad.Controllers.SalesDocumentsController">
<summary>
Sales-side documents. Requires iDoklad credentials (headers or environment defaults).
</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.ListProforma(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List proforma invoices (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.ProformaDefault(System.Threading.CancellationToken)">
<summary>Get a pre-filled default model for creating a new proforma invoice.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.ProformaDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a proforma invoice detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.CreateProforma(IdokladSdk.Models.ProformaInvoice.ProformaInvoicePostModel,System.Threading.CancellationToken)">
<summary>Create a new proforma invoice.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.UpdateProforma(IdokladSdk.Models.ProformaInvoice.ProformaInvoicePatchModel,System.Threading.CancellationToken)">
<summary>Update an existing proforma invoice (the model id identifies the document).</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.CopyProforma(System.Int32,System.Threading.CancellationToken)">
<summary>Create a copy (draft) of an existing proforma invoice.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.DeleteProforma(System.Int32,System.Threading.CancellationToken)">
<summary>Delete a proforma invoice by id.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.ListCreditNotes(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List credit notes (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.CreditNoteDefault(System.Int32,System.Threading.CancellationToken)">
<summary>Get a pre-filled default credit note model for the given (issued) invoice id.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.CreditNoteDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a credit note detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.CreateCreditNote(IdokladSdk.Models.CreditNote.CreditNotePostModel,System.Threading.CancellationToken)">
<summary>Create a new credit note.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.UpdateCreditNote(IdokladSdk.Models.CreditNote.CreditNotePatchModel,System.Threading.CancellationToken)">
<summary>Update an existing credit note (the model id identifies the document).</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.DeleteCreditNote(System.Int32,System.Threading.CancellationToken)">
<summary>Delete a credit note by id.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.ListSalesReceipts(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List sales receipts (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.SalesReceiptDefault(System.Threading.CancellationToken)">
<summary>Get a pre-filled default model for creating a new sales receipt.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.SalesReceiptDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a sales receipt detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.CreateSalesReceipt(IdokladSdk.Models.SalesReceipt.SalesReceiptPostModel,System.Threading.CancellationToken)">
<summary>Create a new sales receipt.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.UpdateSalesReceipt(IdokladSdk.Models.SalesReceipt.SalesReceiptPatchModel,System.Threading.CancellationToken)">
<summary>Update an existing sales receipt (the model id identifies the document).</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.CopySalesReceipt(System.Int32,System.Threading.CancellationToken)">
<summary>Create a copy (draft) of an existing sales receipt.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.DeleteSalesReceipt(System.Int32,System.Threading.CancellationToken)">
<summary>Delete a sales receipt by id.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.ListSalesOrders(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List sales orders (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.SalesOrderDefault(System.Threading.CancellationToken)">
<summary>Get a pre-filled default model for creating a new sales order.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.SalesOrderDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a sales order detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.CreateSalesOrder(IdokladSdk.Models.SalesOrder.SalesOrderPostModel,System.Threading.CancellationToken)">
<summary>Create a new sales order.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.UpdateSalesOrder(IdokladSdk.Models.SalesOrder.SalesOrderPatchModel,System.Threading.CancellationToken)">
<summary>Update an existing sales order (the model id identifies the document).</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.CopySalesOrder(System.Int32,System.Threading.CancellationToken)">
<summary>Create a copy (draft) of an existing sales order.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.DeleteSalesOrder(System.Int32,System.Threading.CancellationToken)">
<summary>Delete a sales order by id.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.ListRecurring(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List recurring invoices (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.RecurringDefault(System.Threading.CancellationToken)">
<summary>Get a pre-filled default model for creating a new recurring invoice.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.RecurringDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a recurring invoice detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.CreateRecurring(IdokladSdk.Models.RecurringInvoice.RecurringInvoicePostModel,System.Threading.CancellationToken)">
<summary>Create a new recurring invoice template.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.UpdateRecurring(IdokladSdk.Models.RecurringInvoice.RecurringInvoicePatchModel,System.Threading.CancellationToken)">
<summary>Update an existing recurring invoice (the model id identifies the template).</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.CopyRecurring(System.Int32,System.Threading.CancellationToken)">
<summary>Create a copy (draft) of an existing recurring invoice.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.DeleteRecurring(System.Int32,System.Threading.CancellationToken)">
<summary>Delete a recurring invoice by id.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.ListTaxDocuments(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List issued tax documents (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.TaxDocumentDefault(System.Int32,System.Threading.CancellationToken)">
<summary>Get a pre-filled default tax document model for the given advance (proforma) invoice id.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.TaxDocumentDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get an issued tax document detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.CreateTaxDocument(IdokladSdk.Models.IssuedTaxDocument.Post.IssuedTaxDocumentPostModel,System.Threading.CancellationToken)">
<summary>Create a new issued tax document.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.UpdateTaxDocument(IdokladSdk.Models.IssuedTaxDocument.Patch.IssuedTaxDocumentPatchModel,System.Threading.CancellationToken)">
<summary>Update an existing issued tax document (the model id identifies the document).</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.DeleteTaxDocument(System.Int32,System.Threading.CancellationToken)">
<summary>Delete an issued tax document by id.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.ListTemplates(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List issued document templates (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.TemplateDefault(System.Threading.CancellationToken)">
<summary>Get a pre-filled default model for creating a new issued document template.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.TemplateDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get an issued document template detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.CreateTemplate(IdokladSdk.Models.IssuedDocumentTemplate.Post.IssuedDocumentTemplatePostModel,System.Threading.CancellationToken)">
<summary>Create a new issued document template.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.UpdateTemplate(IdokladSdk.Models.IssuedDocumentTemplate.Patch.IssuedDocumentTemplatePatchModel,System.Threading.CancellationToken)">
<summary>Update an existing issued document template (the model id identifies the template).</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.DeleteTemplate(System.Int32,System.Threading.CancellationToken)">
<summary>Delete an issued document template by id.</summary>
</member>
<member name="T:Idoklad.Controllers.StatisticsController">
<summary>Agenda statistics and summaries. Requires iDoklad credentials.</summary>
</member>
<member name="M:Idoklad.Controllers.StatisticsController.InvoicingForPeriod(IdokladSdk.Enums.PeriodType,System.Threading.CancellationToken)">
<summary>Invoicing totals for a relative period (e.g. LastSevenDays, ThisMonth).</summary>
</member>
<member name="M:Idoklad.Controllers.StatisticsController.InvoicingForYear(IdokladSdk.Enums.YearType,System.Threading.CancellationToken)">
<summary>Invoicing totals for a relative year (e.g. ThisYear, LastYear).</summary>
</member>
<member name="M:Idoklad.Controllers.StatisticsController.QuarterSummary(System.Threading.CancellationToken)">
<summary>Invoicing summary broken down by quarter.</summary>
</member>
<member name="M:Idoklad.Controllers.StatisticsController.TopPartners(System.Nullable{System.Int32},System.Threading.CancellationToken)">
<summary>Top partners by turnover (optionally limited by count).</summary>
</member>
<member name="M:Idoklad.Controllers.StatisticsController.AgendaSummary(System.Threading.CancellationToken)">
<summary>Overall agenda summary (totals and key figures).</summary>
</member>
<member name="M:Idoklad.Controllers.StatisticsController.StatisticForContact(System.Int32,System.Threading.CancellationToken)">
<summary>Statistics for a single contact by id.</summary>
</member>
<member name="M:Idoklad.Controllers.StatisticsController.DebtIntervals(System.Threading.CancellationToken)">
<summary>Receivables broken down by debt age intervals.</summary>
</member>
<member name="M:Idoklad.Controllers.StatisticsController.TopDebtors(System.Nullable{System.Int32},System.Threading.CancellationToken)">
<summary>Top debtors by outstanding amount (optionally limited by count).</summary>
</member>
<member name="M:Idoklad.Controllers.StatisticsController.VatPayerProgress(System.Threading.CancellationToken)">
<summary>Progress of the agenda towards the VAT-payer registration threshold.</summary>
</member>
<member name="T:Idoklad.Credentials.CredentialConstants"> <member name="T:Idoklad.Credentials.CredentialConstants">
<summary> <summary>
Names of the HTTP headers that carry per-request iDoklad credentials. Names of the HTTP headers that carry per-request iDoklad credentials.
@@ -248,12 +710,42 @@
<member name="T:Idoklad.Services.AccountService"> <member name="T:Idoklad.Services.AccountService">
<summary>Account agenda: information about the current agenda and the current user.</summary> <summary>Account agenda: information about the current agenda and the current user.</summary>
</member> </member>
<member name="T:Idoklad.Services.CatalogService">
<summary>
Catalog and stock agendas: price list items, stock movements and tags.
</summary>
</member>
<member name="T:Idoklad.Services.CodeListsService">
<summary>
Read-only iDoklad code lists (registers): banks, countries, currencies, constant symbols,
exchange rates, payment options, VAT codes, VAT reverse-charge codes, sales offices and
sales POS equipment. Every agenda supports list + detail.
</summary>
</member>
<member name="T:Idoklad.Services.ContactsService"> <member name="T:Idoklad.Services.ContactsService">
<summary>Contacts (customers/suppliers) agenda.</summary> <summary>Contacts (customers/suppliers) agenda.</summary>
</member> </member>
<member name="T:Idoklad.Services.IntegrationService">
<summary>
Integration / utility agendas: webhooks, notifications, change log, registered sales (EET),
unpaired documents, attachments and the system code books.
</summary>
</member>
<member name="T:Idoklad.Services.IssuedInvoicesService"> <member name="T:Idoklad.Services.IssuedInvoicesService">
<summary>Issued (outgoing) invoices agenda.</summary> <summary>Issued (outgoing) invoices agenda.</summary>
</member> </member>
<member name="T:Idoklad.Services.PaymentsService">
<summary>
Payments and bank statements: bank statements, issued document payments and received document
payments.
</summary>
</member>
<member name="T:Idoklad.Services.PurchaseCashService">
<summary>
Purchase-side receipts and cash agendas: received receipts, received documents (read-only),
cash vouchers and cash registers.
</summary>
</member>
<member name="T:Idoklad.Services.ReceivedInvoicesService"> <member name="T:Idoklad.Services.ReceivedInvoicesService">
<summary>Received (incoming) invoices agenda.</summary> <summary>Received (incoming) invoices agenda.</summary>
</member> </member>
@@ -262,5 +754,14 @@
Supporting registers: bank accounts, VAT rates and numeric (document) sequences. Supporting registers: bank accounts, VAT rates and numeric (document) sequences.
</summary> </summary>
</member> </member>
<member name="T:Idoklad.Services.SalesDocumentsService">
<summary>
Sales-side documents: proforma invoices, credit notes, sales receipts, sales orders,
recurring invoices, issued tax documents and issued document templates.
</summary>
</member>
<member name="T:Idoklad.Services.StatisticsService">
<summary>Agenda statistics and summaries.</summary>
</member>
</members> </members>
</doc> </doc>
+1 -1
View File
@@ -13,7 +13,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Idoklad")] [assembly: System.Reflection.AssemblyCompanyAttribute("Idoklad")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+bbec747bb707894338c78c901bf8175f40773f12")] [assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+1801d02e5c0482cd820491bce08b14a912d95ab4")]
[assembly: System.Reflection.AssemblyProductAttribute("Idoklad")] [assembly: System.Reflection.AssemblyProductAttribute("Idoklad")]
[assembly: System.Reflection.AssemblyTitleAttribute("Idoklad")] [assembly: System.Reflection.AssemblyTitleAttribute("Idoklad")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
@@ -1 +1 @@
4d956995fcb6242da55b1ce331ee5915e0498e0501326f960a23ce2e1059f1e7 735a164fa1828accabc432712c336fdc612a6180fde6a25df7cafa729751ebdc
+1 -1
View File
@@ -13,7 +13,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Idoklad")] [assembly: System.Reflection.AssemblyCompanyAttribute("Idoklad")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+bbec747bb707894338c78c901bf8175f40773f12")] [assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+1801d02e5c0482cd820491bce08b14a912d95ab4")]
[assembly: System.Reflection.AssemblyProductAttribute("Idoklad")] [assembly: System.Reflection.AssemblyProductAttribute("Idoklad")]
[assembly: System.Reflection.AssemblyTitleAttribute("Idoklad")] [assembly: System.Reflection.AssemblyTitleAttribute("Idoklad")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
@@ -1 +1 @@
9330b1b41c96efd56de1c2646a1495cef68227a0fe6aa8897950cb2005c1774e c138318d9dc766fbc6536be68fa013af49fccd3cbba8bbf3d796211a236d31a7
@@ -1 +1 @@
8c52ccc98fa666734950d1f217e2bf36db84e91ef7b161912359e9d71820c6b4 bdee49910858b6be5d5fdf360ef80f7269429c372c496a47829c966fe92a5ead
Binary file not shown.
Binary file not shown.
+501
View File
@@ -29,6 +29,13 @@
code, message and iDoklad error code so the failure can be surfaced to the caller. code, message and iDoklad error code so the failure can be surfaced to the caller.
</summary> </summary>
</member> </member>
<member name="T:Idoklad.Client.SdkRequestExtensions">
<summary>
Generic helpers over the SDK's list/detail request builders so the read endpoints of the many
agendas can be expressed in a single line. The concrete payload type is inferred by the SDK and
returned boxed (full data is preserved at runtime; only the Swagger schema is generic).
</summary>
</member>
<member name="T:Idoklad.Configuration.IdokladSettings"> <member name="T:Idoklad.Configuration.IdokladSettings">
<summary> <summary>
Service configuration resolved from environment variables. Service configuration resolved from environment variables.
@@ -75,6 +82,122 @@
<member name="M:Idoklad.Controllers.AccountController.CurrentUser(System.Threading.CancellationToken)"> <member name="M:Idoklad.Controllers.AccountController.CurrentUser(System.Threading.CancellationToken)">
<summary>Get information about the current user.</summary> <summary>Get information about the current user.</summary>
</member> </member>
<member name="T:Idoklad.Controllers.CatalogController">
<summary>
Price list items, stock movements and tags. Requires iDoklad credentials (headers or environment defaults).
</summary>
</member>
<member name="M:Idoklad.Controllers.CatalogController.ListPriceListItems(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List price list items (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.CatalogController.PriceListItemDefault(System.Threading.CancellationToken)">
<summary>Get a pre-filled default model for creating a new price list item.</summary>
</member>
<member name="M:Idoklad.Controllers.CatalogController.PriceListItemDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a price list item detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.CatalogController.CreatePriceListItem(IdokladSdk.Models.PriceListItem.PriceListItemPostModel,System.Threading.CancellationToken)">
<summary>Create a new price list item.</summary>
</member>
<member name="M:Idoklad.Controllers.CatalogController.UpdatePriceListItem(IdokladSdk.Models.PriceListItem.PriceListItemPatchModel,System.Threading.CancellationToken)">
<summary>Update an existing price list item (the model id identifies the item).</summary>
</member>
<member name="M:Idoklad.Controllers.CatalogController.ListStockMovements(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List stock movements (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.CatalogController.StockMovementDefault(System.Int32,System.Threading.CancellationToken)">
<summary>Get a pre-filled default stock movement model for the given price list item id.</summary>
</member>
<member name="M:Idoklad.Controllers.CatalogController.StockMovementDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a stock movement detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.CatalogController.CreateStockMovement(IdokladSdk.Models.StockMovement.StockMovementPostModel,System.Threading.CancellationToken)">
<summary>Create a new stock movement.</summary>
</member>
<member name="M:Idoklad.Controllers.CatalogController.UpdateStockMovement(IdokladSdk.Models.StockMovement.StockMovementPatchModel,System.Threading.CancellationToken)">
<summary>Update an existing stock movement (the model id identifies the movement).</summary>
</member>
<member name="M:Idoklad.Controllers.CatalogController.DeleteStockMovement(System.Int32,System.Threading.CancellationToken)">
<summary>Delete a stock movement by id.</summary>
</member>
<member name="M:Idoklad.Controllers.CatalogController.ListTags(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List tags (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.CatalogController.CreateTag(IdokladSdk.Models.Tag.TagPostModel,System.Threading.CancellationToken)">
<summary>Create a new tag.</summary>
</member>
<member name="M:Idoklad.Controllers.CatalogController.UpdateTag(IdokladSdk.Models.Tag.TagPatchModel,System.Threading.CancellationToken)">
<summary>Update an existing tag (the model id identifies the tag).</summary>
</member>
<member name="M:Idoklad.Controllers.CatalogController.DeleteTag(System.Int32,System.Threading.CancellationToken)">
<summary>Delete a tag by id.</summary>
</member>
<member name="T:Idoklad.Controllers.CodeListsController">
<summary>
Read-only iDoklad code lists / registers. Requires iDoklad credentials (headers or environment
defaults).
</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.Banks(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List banks (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.BankDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a bank detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.Countries(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List countries (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.CountryDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a country detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.Currencies(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List currencies (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.CurrencyDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a currency detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.ConstantSymbols(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List constant symbols (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.ConstantSymbolDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a constant symbol detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.ExchangeRates(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List exchange rates (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.ExchangeRateDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get an exchange rate detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.PaymentOptions(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List payment options (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.PaymentOptionDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a payment option detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.VatCodes(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List VAT codes (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.VatCodeDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a VAT code detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.VatReverseChargeCodes(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List VAT reverse-charge codes (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.VatReverseChargeCodeDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a VAT reverse-charge code detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.SalesOffices(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List sales offices (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.SalesOfficeDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a sales office detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.SalesPosEquipment(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List sales POS equipment (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.CodeListsController.SalesPosEquipmentDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a sales POS equipment detail by id.</summary>
</member>
<member name="T:Idoklad.Controllers.ContactsController"> <member name="T:Idoklad.Controllers.ContactsController">
<summary> <summary>
Contacts (customers/suppliers) agenda. Contacts (customers/suppliers) agenda.
@@ -102,6 +225,63 @@
<member name="M:Idoklad.Controllers.ContactsController.Delete(System.Int32,System.Threading.CancellationToken)"> <member name="M:Idoklad.Controllers.ContactsController.Delete(System.Int32,System.Threading.CancellationToken)">
<summary>Delete a contact by id.</summary> <summary>Delete a contact by id.</summary>
</member> </member>
<member name="T:Idoklad.Controllers.IntegrationController">
<summary>
Integration / utility agendas: webhooks, notifications, change log, registered sales,
unpaired documents, attachments and system code books. Requires iDoklad credentials.
</summary>
</member>
<member name="M:Idoklad.Controllers.IntegrationController.ListWebhooks(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List configured webhooks (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.IntegrationController.WebhookDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a webhook detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.IntegrationController.CreateWebhook(IdokladSdk.Models.Webhook.AgendaWebhookSettingsPostModel,System.Threading.CancellationToken)">
<summary>Create (register) a new webhook subscription.</summary>
</member>
<member name="M:Idoklad.Controllers.IntegrationController.DeleteWebhook(System.Int32,System.Threading.CancellationToken)">
<summary>Delete a webhook by id.</summary>
</member>
<member name="M:Idoklad.Controllers.IntegrationController.ListNotifications(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List notifications (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.IntegrationController.DeleteNotification(System.Int32,System.Threading.CancellationToken)">
<summary>Delete (dismiss) a notification by id.</summary>
</member>
<member name="M:Idoklad.Controllers.IntegrationController.ListLog(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List the agenda change log (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.IntegrationController.ListRegisteredSales(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List registered sales / EET records (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.IntegrationController.RegisteredSaleDefault(System.Threading.CancellationToken)">
<summary>Get a pre-filled default model for creating a new registered sale.</summary>
</member>
<member name="M:Idoklad.Controllers.IntegrationController.ListUnpairedDocuments(IdokladSdk.Enums.MovementType,IdokladSdk.Enums.PairingDocumentType,System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List unpaired documents for a movement type and pairing document type.</summary>
</member>
<member name="M:Idoklad.Controllers.IntegrationController.GetAttachment(System.Int32,System.Boolean,System.Threading.CancellationToken)">
<summary>Get a single attachment by its id.</summary>
</member>
<member name="M:Idoklad.Controllers.IntegrationController.GetDocumentAttachments(System.Int32,IdokladSdk.Enums.AttachmentDocumentType,System.Boolean,System.Threading.CancellationToken)">
<summary>Get all attachments of a document.</summary>
</member>
<member name="M:Idoklad.Controllers.IntegrationController.UploadAttachment(IdokladSdk.Models.Attachment.AttachmentUploadModel,System.Threading.CancellationToken)">
<summary>Upload an attachment for a document.</summary>
</member>
<member name="M:Idoklad.Controllers.IntegrationController.DeleteAttachment(System.Int32,System.Threading.CancellationToken)">
<summary>Delete a single attachment by its id.</summary>
</member>
<member name="M:Idoklad.Controllers.IntegrationController.DeleteDocumentAttachments(System.Int32,IdokladSdk.Enums.AttachmentDocumentType,System.Threading.CancellationToken)">
<summary>Delete all attachments of a document.</summary>
</member>
<member name="M:Idoklad.Controllers.IntegrationController.CodeBooks(System.Threading.CancellationToken)">
<summary>Get the iDoklad system code books.</summary>
</member>
<member name="M:Idoklad.Controllers.IntegrationController.CodeBooksChanges(System.DateTime,System.Threading.CancellationToken)">
<summary>Get changes to the code books since the given timestamp.</summary>
</member>
<member name="T:Idoklad.Controllers.IssuedInvoicesController"> <member name="T:Idoklad.Controllers.IssuedInvoicesController">
<summary> <summary>
Issued (outgoing) invoices agenda. Requires iDoklad credentials (headers or environment Issued (outgoing) invoices agenda. Requires iDoklad credentials (headers or environment
@@ -144,6 +324,115 @@
environment variables. Per-request callers can always override them with headers. environment variables. Per-request callers can always override them with headers.
</summary> </summary>
</member> </member>
<member name="T:Idoklad.Controllers.PaymentsController">
<summary>
Bank statements and document payments. Requires iDoklad credentials (headers or environment defaults).
</summary>
</member>
<member name="M:Idoklad.Controllers.PaymentsController.ListBankStatements(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List bank statements (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.PaymentsController.BankStatementDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a bank statement detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.PaymentsController.CreateBankStatement(IdokladSdk.Models.BankStatement.Post.BankStatementPostModel,System.Threading.CancellationToken)">
<summary>Create a new bank statement.</summary>
</member>
<member name="M:Idoklad.Controllers.PaymentsController.UpdateBankStatement(IdokladSdk.Models.BankStatement.Patch.BankStatementPatchModel,System.Threading.CancellationToken)">
<summary>Update an existing bank statement (the model id identifies the statement).</summary>
</member>
<member name="M:Idoklad.Controllers.PaymentsController.DeleteBankStatement(System.Int32,System.Threading.CancellationToken)">
<summary>Delete a bank statement by id.</summary>
</member>
<member name="M:Idoklad.Controllers.PaymentsController.ListIssuedPayments(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List issued document payments (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.PaymentsController.IssuedPaymentDefault(System.Int32,System.Threading.CancellationToken)">
<summary>Get a pre-filled default issued payment model for the given issued invoice id.</summary>
</member>
<member name="M:Idoklad.Controllers.PaymentsController.IssuedPaymentDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get an issued document payment detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.PaymentsController.CreateIssuedPayment(IdokladSdk.Models.IssuedDocumentPayment.IssuedDocumentPaymentPostModel,System.Threading.CancellationToken)">
<summary>Create (register) a new payment for an issued document.</summary>
</member>
<member name="M:Idoklad.Controllers.PaymentsController.DeleteIssuedPayment(System.Int32,System.Threading.CancellationToken)">
<summary>Delete an issued document payment by id.</summary>
</member>
<member name="M:Idoklad.Controllers.PaymentsController.FullyUnpayIssued(System.Int32,System.Threading.CancellationToken)">
<summary>Fully unpay an issued invoice (removes all its payments).</summary>
</member>
<member name="M:Idoklad.Controllers.PaymentsController.ListReceivedPayments(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List received document payments (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.PaymentsController.ReceivedPaymentDefault(System.Int32,System.Threading.CancellationToken)">
<summary>Get a pre-filled default received payment model for the given received invoice id.</summary>
</member>
<member name="M:Idoklad.Controllers.PaymentsController.ReceivedPaymentDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a received document payment detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.PaymentsController.CreateReceivedPayment(IdokladSdk.Models.ReceivedDocumentPayments.ReceivedDocumentPaymentPostModel,System.Threading.CancellationToken)">
<summary>Create (register) a new payment for a received document.</summary>
</member>
<member name="M:Idoklad.Controllers.PaymentsController.DeleteReceivedPayment(System.Int32,System.Threading.CancellationToken)">
<summary>Delete a received document payment by id.</summary>
</member>
<member name="M:Idoklad.Controllers.PaymentsController.FullyUnpayReceived(System.Int32,System.Threading.CancellationToken)">
<summary>Fully unpay a received invoice (removes all its payments).</summary>
</member>
<member name="T:Idoklad.Controllers.PurchaseCashController">
<summary>
Received receipts and cash agendas. Requires iDoklad credentials (headers or environment defaults).
</summary>
</member>
<member name="M:Idoklad.Controllers.PurchaseCashController.ListReceivedReceipts(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List received receipts (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.PurchaseCashController.ReceivedReceiptDefault(System.Threading.CancellationToken)">
<summary>Get a pre-filled default model for creating a new received receipt.</summary>
</member>
<member name="M:Idoklad.Controllers.PurchaseCashController.ReceivedReceiptDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a received receipt detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.PurchaseCashController.CreateReceivedReceipt(IdokladSdk.Models.ReceivedReceipt.Post.ReceivedReceiptPostModel,System.Threading.CancellationToken)">
<summary>Create a new received receipt.</summary>
</member>
<member name="M:Idoklad.Controllers.PurchaseCashController.UpdateReceivedReceipt(IdokladSdk.Models.ReceivedReceipt.Patch.ReceivedReceiptPatchModel,System.Threading.CancellationToken)">
<summary>Update an existing received receipt (the model id identifies the document).</summary>
</member>
<member name="M:Idoklad.Controllers.PurchaseCashController.DeleteReceivedReceipt(System.Int32,System.Threading.CancellationToken)">
<summary>Delete a received receipt by id.</summary>
</member>
<member name="M:Idoklad.Controllers.PurchaseCashController.ListCashVouchers(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List cash vouchers (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.PurchaseCashController.CashVoucherDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a cash voucher detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.PurchaseCashController.CreateCashVoucher(IdokladSdk.Models.CashVoucher.CashVoucherPostModel,System.Threading.CancellationToken)">
<summary>Create a new cash voucher.</summary>
</member>
<member name="M:Idoklad.Controllers.PurchaseCashController.UpdateCashVoucher(IdokladSdk.Models.CashVoucher.CashVoucherPatchModel,System.Threading.CancellationToken)">
<summary>Update an existing cash voucher (the model id identifies the document).</summary>
</member>
<member name="M:Idoklad.Controllers.PurchaseCashController.DeleteCashVoucher(System.Int32,System.Threading.CancellationToken)">
<summary>Delete a cash voucher by id.</summary>
</member>
<member name="M:Idoklad.Controllers.PurchaseCashController.ListCashRegisters(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List cash registers (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.PurchaseCashController.CashRegisterDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a cash register detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.PurchaseCashController.CreateCashRegister(IdokladSdk.Models.CashRegister.CashRegisterPostModel,System.Threading.CancellationToken)">
<summary>Create a new cash register.</summary>
</member>
<member name="M:Idoklad.Controllers.PurchaseCashController.UpdateCashRegister(IdokladSdk.Models.CashRegister.CashRegisterPatchModel,System.Threading.CancellationToken)">
<summary>Update an existing cash register (the model id identifies the register).</summary>
</member>
<member name="M:Idoklad.Controllers.PurchaseCashController.DeleteCashRegister(System.Int32,System.Threading.CancellationToken)">
<summary>Delete a cash register by id.</summary>
</member>
<member name="T:Idoklad.Controllers.ReceivedInvoicesController"> <member name="T:Idoklad.Controllers.ReceivedInvoicesController">
<summary> <summary>
Received (incoming) invoices agenda. Requires iDoklad credentials (headers or environment Received (incoming) invoices agenda. Requires iDoklad credentials (headers or environment
@@ -198,6 +487,179 @@
<member name="M:Idoklad.Controllers.RegistersController.ListNumericSequences(System.Int32,System.Int32,System.Threading.CancellationToken)"> <member name="M:Idoklad.Controllers.RegistersController.ListNumericSequences(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List numeric (document) sequences (paged).</summary> <summary>List numeric (document) sequences (paged).</summary>
</member> </member>
<member name="T:Idoklad.Controllers.SalesDocumentsController">
<summary>
Sales-side documents. Requires iDoklad credentials (headers or environment defaults).
</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.ListProforma(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List proforma invoices (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.ProformaDefault(System.Threading.CancellationToken)">
<summary>Get a pre-filled default model for creating a new proforma invoice.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.ProformaDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a proforma invoice detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.CreateProforma(IdokladSdk.Models.ProformaInvoice.ProformaInvoicePostModel,System.Threading.CancellationToken)">
<summary>Create a new proforma invoice.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.UpdateProforma(IdokladSdk.Models.ProformaInvoice.ProformaInvoicePatchModel,System.Threading.CancellationToken)">
<summary>Update an existing proforma invoice (the model id identifies the document).</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.CopyProforma(System.Int32,System.Threading.CancellationToken)">
<summary>Create a copy (draft) of an existing proforma invoice.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.DeleteProforma(System.Int32,System.Threading.CancellationToken)">
<summary>Delete a proforma invoice by id.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.ListCreditNotes(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List credit notes (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.CreditNoteDefault(System.Int32,System.Threading.CancellationToken)">
<summary>Get a pre-filled default credit note model for the given (issued) invoice id.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.CreditNoteDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a credit note detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.CreateCreditNote(IdokladSdk.Models.CreditNote.CreditNotePostModel,System.Threading.CancellationToken)">
<summary>Create a new credit note.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.UpdateCreditNote(IdokladSdk.Models.CreditNote.CreditNotePatchModel,System.Threading.CancellationToken)">
<summary>Update an existing credit note (the model id identifies the document).</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.DeleteCreditNote(System.Int32,System.Threading.CancellationToken)">
<summary>Delete a credit note by id.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.ListSalesReceipts(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List sales receipts (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.SalesReceiptDefault(System.Threading.CancellationToken)">
<summary>Get a pre-filled default model for creating a new sales receipt.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.SalesReceiptDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a sales receipt detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.CreateSalesReceipt(IdokladSdk.Models.SalesReceipt.SalesReceiptPostModel,System.Threading.CancellationToken)">
<summary>Create a new sales receipt.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.UpdateSalesReceipt(IdokladSdk.Models.SalesReceipt.SalesReceiptPatchModel,System.Threading.CancellationToken)">
<summary>Update an existing sales receipt (the model id identifies the document).</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.CopySalesReceipt(System.Int32,System.Threading.CancellationToken)">
<summary>Create a copy (draft) of an existing sales receipt.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.DeleteSalesReceipt(System.Int32,System.Threading.CancellationToken)">
<summary>Delete a sales receipt by id.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.ListSalesOrders(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List sales orders (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.SalesOrderDefault(System.Threading.CancellationToken)">
<summary>Get a pre-filled default model for creating a new sales order.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.SalesOrderDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a sales order detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.CreateSalesOrder(IdokladSdk.Models.SalesOrder.SalesOrderPostModel,System.Threading.CancellationToken)">
<summary>Create a new sales order.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.UpdateSalesOrder(IdokladSdk.Models.SalesOrder.SalesOrderPatchModel,System.Threading.CancellationToken)">
<summary>Update an existing sales order (the model id identifies the document).</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.CopySalesOrder(System.Int32,System.Threading.CancellationToken)">
<summary>Create a copy (draft) of an existing sales order.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.DeleteSalesOrder(System.Int32,System.Threading.CancellationToken)">
<summary>Delete a sales order by id.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.ListRecurring(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List recurring invoices (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.RecurringDefault(System.Threading.CancellationToken)">
<summary>Get a pre-filled default model for creating a new recurring invoice.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.RecurringDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get a recurring invoice detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.CreateRecurring(IdokladSdk.Models.RecurringInvoice.RecurringInvoicePostModel,System.Threading.CancellationToken)">
<summary>Create a new recurring invoice template.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.UpdateRecurring(IdokladSdk.Models.RecurringInvoice.RecurringInvoicePatchModel,System.Threading.CancellationToken)">
<summary>Update an existing recurring invoice (the model id identifies the template).</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.CopyRecurring(System.Int32,System.Threading.CancellationToken)">
<summary>Create a copy (draft) of an existing recurring invoice.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.DeleteRecurring(System.Int32,System.Threading.CancellationToken)">
<summary>Delete a recurring invoice by id.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.ListTaxDocuments(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List issued tax documents (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.TaxDocumentDefault(System.Int32,System.Threading.CancellationToken)">
<summary>Get a pre-filled default tax document model for the given advance (proforma) invoice id.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.TaxDocumentDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get an issued tax document detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.CreateTaxDocument(IdokladSdk.Models.IssuedTaxDocument.Post.IssuedTaxDocumentPostModel,System.Threading.CancellationToken)">
<summary>Create a new issued tax document.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.UpdateTaxDocument(IdokladSdk.Models.IssuedTaxDocument.Patch.IssuedTaxDocumentPatchModel,System.Threading.CancellationToken)">
<summary>Update an existing issued tax document (the model id identifies the document).</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.DeleteTaxDocument(System.Int32,System.Threading.CancellationToken)">
<summary>Delete an issued tax document by id.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.ListTemplates(System.Int32,System.Int32,System.Threading.CancellationToken)">
<summary>List issued document templates (paged).</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.TemplateDefault(System.Threading.CancellationToken)">
<summary>Get a pre-filled default model for creating a new issued document template.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.TemplateDetail(System.Int32,System.Threading.CancellationToken)">
<summary>Get an issued document template detail by id.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.CreateTemplate(IdokladSdk.Models.IssuedDocumentTemplate.Post.IssuedDocumentTemplatePostModel,System.Threading.CancellationToken)">
<summary>Create a new issued document template.</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.UpdateTemplate(IdokladSdk.Models.IssuedDocumentTemplate.Patch.IssuedDocumentTemplatePatchModel,System.Threading.CancellationToken)">
<summary>Update an existing issued document template (the model id identifies the template).</summary>
</member>
<member name="M:Idoklad.Controllers.SalesDocumentsController.DeleteTemplate(System.Int32,System.Threading.CancellationToken)">
<summary>Delete an issued document template by id.</summary>
</member>
<member name="T:Idoklad.Controllers.StatisticsController">
<summary>Agenda statistics and summaries. Requires iDoklad credentials.</summary>
</member>
<member name="M:Idoklad.Controllers.StatisticsController.InvoicingForPeriod(IdokladSdk.Enums.PeriodType,System.Threading.CancellationToken)">
<summary>Invoicing totals for a relative period (e.g. LastSevenDays, ThisMonth).</summary>
</member>
<member name="M:Idoklad.Controllers.StatisticsController.InvoicingForYear(IdokladSdk.Enums.YearType,System.Threading.CancellationToken)">
<summary>Invoicing totals for a relative year (e.g. ThisYear, LastYear).</summary>
</member>
<member name="M:Idoklad.Controllers.StatisticsController.QuarterSummary(System.Threading.CancellationToken)">
<summary>Invoicing summary broken down by quarter.</summary>
</member>
<member name="M:Idoklad.Controllers.StatisticsController.TopPartners(System.Nullable{System.Int32},System.Threading.CancellationToken)">
<summary>Top partners by turnover (optionally limited by count).</summary>
</member>
<member name="M:Idoklad.Controllers.StatisticsController.AgendaSummary(System.Threading.CancellationToken)">
<summary>Overall agenda summary (totals and key figures).</summary>
</member>
<member name="M:Idoklad.Controllers.StatisticsController.StatisticForContact(System.Int32,System.Threading.CancellationToken)">
<summary>Statistics for a single contact by id.</summary>
</member>
<member name="M:Idoklad.Controllers.StatisticsController.DebtIntervals(System.Threading.CancellationToken)">
<summary>Receivables broken down by debt age intervals.</summary>
</member>
<member name="M:Idoklad.Controllers.StatisticsController.TopDebtors(System.Nullable{System.Int32},System.Threading.CancellationToken)">
<summary>Top debtors by outstanding amount (optionally limited by count).</summary>
</member>
<member name="M:Idoklad.Controllers.StatisticsController.VatPayerProgress(System.Threading.CancellationToken)">
<summary>Progress of the agenda towards the VAT-payer registration threshold.</summary>
</member>
<member name="T:Idoklad.Credentials.CredentialConstants"> <member name="T:Idoklad.Credentials.CredentialConstants">
<summary> <summary>
Names of the HTTP headers that carry per-request iDoklad credentials. Names of the HTTP headers that carry per-request iDoklad credentials.
@@ -248,12 +710,42 @@
<member name="T:Idoklad.Services.AccountService"> <member name="T:Idoklad.Services.AccountService">
<summary>Account agenda: information about the current agenda and the current user.</summary> <summary>Account agenda: information about the current agenda and the current user.</summary>
</member> </member>
<member name="T:Idoklad.Services.CatalogService">
<summary>
Catalog and stock agendas: price list items, stock movements and tags.
</summary>
</member>
<member name="T:Idoklad.Services.CodeListsService">
<summary>
Read-only iDoklad code lists (registers): banks, countries, currencies, constant symbols,
exchange rates, payment options, VAT codes, VAT reverse-charge codes, sales offices and
sales POS equipment. Every agenda supports list + detail.
</summary>
</member>
<member name="T:Idoklad.Services.ContactsService"> <member name="T:Idoklad.Services.ContactsService">
<summary>Contacts (customers/suppliers) agenda.</summary> <summary>Contacts (customers/suppliers) agenda.</summary>
</member> </member>
<member name="T:Idoklad.Services.IntegrationService">
<summary>
Integration / utility agendas: webhooks, notifications, change log, registered sales (EET),
unpaired documents, attachments and the system code books.
</summary>
</member>
<member name="T:Idoklad.Services.IssuedInvoicesService"> <member name="T:Idoklad.Services.IssuedInvoicesService">
<summary>Issued (outgoing) invoices agenda.</summary> <summary>Issued (outgoing) invoices agenda.</summary>
</member> </member>
<member name="T:Idoklad.Services.PaymentsService">
<summary>
Payments and bank statements: bank statements, issued document payments and received document
payments.
</summary>
</member>
<member name="T:Idoklad.Services.PurchaseCashService">
<summary>
Purchase-side receipts and cash agendas: received receipts, received documents (read-only),
cash vouchers and cash registers.
</summary>
</member>
<member name="T:Idoklad.Services.ReceivedInvoicesService"> <member name="T:Idoklad.Services.ReceivedInvoicesService">
<summary>Received (incoming) invoices agenda.</summary> <summary>Received (incoming) invoices agenda.</summary>
</member> </member>
@@ -262,5 +754,14 @@
Supporting registers: bank accounts, VAT rates and numeric (document) sequences. Supporting registers: bank accounts, VAT rates and numeric (document) sequences.
</summary> </summary>
</member> </member>
<member name="T:Idoklad.Services.SalesDocumentsService">
<summary>
Sales-side documents: proforma invoices, credit notes, sales receipts, sales orders,
recurring invoices, issued tax documents and issued document templates.
</summary>
</member>
<member name="T:Idoklad.Services.StatisticsService">
<summary>Agenda statistics and summaries.</summary>
</member>
</members> </members>
</doc> </doc>
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
{"GlobalPropertiesHash":"B9kWZPkqs9jh4om+wEa7vtkXe98jy4Uk00TDvCFOMAg=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["Xoy6Z/ZliL2FaV/OPQYzcdsWaKV5xBoURVM2EiwsMe0=","UnIQ74hcK4OEyD1OXQb8l/Ai5e5GkT1C8ZVGznd7EHM=","vIllxnm6hE/qU5OIVUPxE4SuD2ijmi27OPg5VyWR6ZM=","QqmhCK1Ak7uSaGTG1n4MvYJ\u002BFpdANJykxNBeraLdr/c=","et\u002BonTqXghtchEvOcFNSnpptMGH2zS\u002Bmy59QN1yTclY="],"CachedAssets":{},"CachedCopyCandidates":{}} {"GlobalPropertiesHash":"B9kWZPkqs9jh4om+wEa7vtkXe98jy4Uk00TDvCFOMAg=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["Xoy6Z/ZliL2FaV/OPQYzcdsWaKV5xBoURVM2EiwsMe0=","UnIQ74hcK4OEyD1OXQb8l/Ai5e5GkT1C8ZVGznd7EHM=","vIllxnm6hE/qU5OIVUPxE4SuD2ijmi27OPg5VyWR6ZM=","MUXRGW4/fHK8GHUoDLoFwoTh7HBZS3BhPZdp1GGzNvQ=","4\u002BR\u002B6nWtyavKnNL/kes5GvB2nISojVdnYf3VWVk2bWA="],"CachedAssets":{},"CachedCopyCandidates":{}}
+1 -1
View File
@@ -1 +1 @@
{"GlobalPropertiesHash":"ITni+o74UkYnIxQUhjgt1e5B31FSFcyvxyxM3WTkkB8=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["Xoy6Z/ZliL2FaV/OPQYzcdsWaKV5xBoURVM2EiwsMe0=","UnIQ74hcK4OEyD1OXQb8l/Ai5e5GkT1C8ZVGznd7EHM=","vIllxnm6hE/qU5OIVUPxE4SuD2ijmi27OPg5VyWR6ZM=","QqmhCK1Ak7uSaGTG1n4MvYJ\u002BFpdANJykxNBeraLdr/c=","et\u002BonTqXghtchEvOcFNSnpptMGH2zS\u002Bmy59QN1yTclY="],"CachedAssets":{},"CachedCopyCandidates":{}} {"GlobalPropertiesHash":"ITni+o74UkYnIxQUhjgt1e5B31FSFcyvxyxM3WTkkB8=","FingerprintPatternsHash":"gq3WsqcKBUGTSNle7RKKyXRIwh7M8ccEqOqYvIzoM04=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["Xoy6Z/ZliL2FaV/OPQYzcdsWaKV5xBoURVM2EiwsMe0=","UnIQ74hcK4OEyD1OXQb8l/Ai5e5GkT1C8ZVGznd7EHM=","vIllxnm6hE/qU5OIVUPxE4SuD2ijmi27OPg5VyWR6ZM=","MUXRGW4/fHK8GHUoDLoFwoTh7HBZS3BhPZdp1GGzNvQ=","4\u002BR\u002B6nWtyavKnNL/kes5GvB2nISojVdnYf3VWVk2bWA="],"CachedAssets":{},"CachedCopyCandidates":{}}