UNPKG

@phasesdk/api-client-for-economic

Version:

e-conomic REST API Library for Node.js is a powerful tool designed to simplify integration with the e-conomic platform for developers building Node.js applications. With this library, developers can effortlessly leverage the full functionality of the e-co

551 lines (491 loc) 15.3 kB
import RestApi from "../../modules/RestApi"; import { AuthToken, EconomicResponse, Pagination, } from "../../types/Economic.type"; import { HttpResponse } from "../../types/Http.type"; // Enums for entry types to improve type safety export enum EntryType { FinanceVoucher = 'financeVoucher', SupplierInvoice = 'supplierInvoice', SupplierPayment = 'supplierPayment', CustomerPayment = 'customerPayment', ManualCustomerInvoice = 'manualCustomerInvoice' } // Base type for accounts export type ContraAccountInfo = { accountNumber: number; self: string; }; // Type for voucher numbers export type VoucherNumbers = { maximumVoucherNumber: number; minimumVoucherNumber: number; }; // Settings containing contra accounts and entry type restrictions export type Settings = { contraAccounts: { customerPayments: ContraAccountInfo; financeVouchers: ContraAccountInfo; supplierPayments: ContraAccountInfo; }; entryTypeRestrictedTo: EntryType; voucherNumbers: VoucherNumbers; }; // Templates for various types of documents export type Templates = { financeVoucher: string; manualCustomerInvoice: string; self: string; }; // Journal structure for financial records export type Journal = { entries: Entries; journalNumber: number; metaData: Record<string, unknown>; name: string; pagination: Record<string, unknown>; self: string; settings: Settings; templates: Templates; vouchers: string; }; // Journal number structure export type JournalNumber = { entries: Entries; journalNumber: number; name: string; self: string; settings: Settings; templates: Templates; vouchers: string; }; // Accounting year details export type AccountingYear = { self: string; year: string; }; // Contra account representation export type ContraAccount = { accountNumber: number; self: string; }; // VAT account information export type ContraVatAccount = { self: string; vatCode: string; }; // Currency details export type Currency = { code: string; self: string; }; // Customer information export type Customer = { customerNumber: number; self: string; }; // Departmental distribution details export type DepartmentalDistribution = { departmentalDistributionNumber: number; distributionType: string; self: string; }; // Employee information export type Employee = { employeeNumber: number; self: string; }; // Voucher entry representation export type VoucherEntry = { self: string; voucherNumber: number; }; // Base structure for financial transactions export type BaseTransaction = { amount: number; amountBaseCurrency: number; contraAccount?: ContraAccount; contraVatAccount?: ContraVatAccount; contraVatAmount: number; contraVatAmountInBaseCurrency: number; currency: Currency; departmentalDistribution?: DepartmentalDistribution; employee?: Employee; entryType: EntryType; exchangeRate: number; journal: Journal; remainder: number; remainderInDefaultCurrency: number; text: string; voucher: VoucherEntry; }; // Specific transaction types export type CustomerPayment = BaseTransaction & { customer?: Customer; customerInvoice: number; date: string; entryType: EntryType.CustomerPayment; // Use enum for entry type }; export type FinanceVoucher = BaseTransaction & { account: ContraAccount; date: string; entryType: EntryType.FinanceVoucher; // Use enum for entry type }; export type ManualCustomerInvoice = BaseTransaction & { customer?: Customer; customerInvoice: number; date: string; dueDate: string; entryType: EntryType.ManualCustomerInvoice; // Use enum for entry type }; export type Supplier = { supplierNumber: number; self: string; }; export type SupplierInvoice = BaseTransaction & { date: string; dueDate: string; entryType: EntryType.SupplierInvoice; // Use enum for entry type }; export type SupplierPayment = BaseTransaction & { supplier?: Supplier; supplierInvoiceNumber: string; date: string; entryType: EntryType.SupplierPayment; // Use enum for entry type }; // Consolidated entries structure export type Entries = { customerPayments: CustomerPayment[]; financeVouchers: FinanceVoucher[]; manualCustomerInvoices: ManualCustomerInvoice[]; supplierInvoices: SupplierInvoice[]; supplierPayments: SupplierPayment[]; }; // Voucher representation containing accounting year and entries export type Voucher = { accountingYear: AccountingYear; entries: Entries; journal: Journal; voucherNumber: number; self: string; }; export type VoucherNumber = { accountingYear: AccountingYear; attachment: string; entries: Entries; }; export type CreateVoucher = { accountingYear: AccountingYear; entries: Entries; journal: Journal; voucherNumber: number; }; export type Attachment = { self: string; // Required property createdAt: string; description: string; file: string; pages: number; }; export type Account = { accountNumber?: number; self: string; }; export type PaymentDetails = { paymentType: { paymentTypeNumber?: number; self: string; }; }; export type JournalEntries = { account: Account; contraAccount: ContraAccount; contraVatAccount: ContraVatAccount; currency: Currency; customer: Customer; employee: Employee; journal: Journal; paymentDetails: PaymentDetails; supplier: Supplier; voucher: Voucher; self: string; // Optional fields for filtering/sorting amount?: number; amountDefaultCurrency?: number; contraVatAmount?: number; date?: string; entryType?: EntryType; exchangeRate?: number; journalEntryNumber?: number; text?: string; }; export type EntryNumber = { account: Account; contraAccount: ContraAccount; contraVatAccount: ContraVatAccount; currency: Currency; customer: Customer; employee: Employee; journal: Journal; paymentDetails: PaymentDetails; supplier: Supplier; voucher: Voucher; self: string; // Required // Optional fields for filtering/sorting amount?: number; amountDefaultCurrency?: number; contraVatAmount?: number; date?: string; entryType?: string; // Enum in actual use case exchangeRate?: number; journalEntryNumber?: number; text?: string; }; export type JournalTemplate = { financeVoucher?: string; manualCustomerInvoice?: string; self: string; }; export type FinanceVoucherTemplate = { account?: string; contraAccount?: string; self: string; }; export type ManualCustomerInvoiceTemplate = { customer: Customer; metaData?: object; pagination?: object; self: string; }; export default class Journals extends RestApi { /** * @constructor */ constructor(props: AuthToken) { super(props); } /** * Root for the journal endpoint. * * @see https://restdocs.e-conomic.com/#get-journals * @returns {Promise<HttpResponse>} * */ getJournals( offset: number = 0, limit: number = 100 ): Promise<HttpResponse<EconomicResponse<Journal[], Pagination, any>>> { const requestObj = { method: "get", url: `/journals?skippages=${offset}&pagesize=${limit}`, }; return this._httpRequest<EconomicResponse<Journal[], Pagination, any>>( requestObj ); } /** * Root for the journal endpoint. * * @see https://restdocs.e-conomic.com/#get-journals-journalnumber * */ getJournalNumber(journalNumber: number): Promise<HttpResponse<JournalNumber>> { const requestObj = { method: "get", url: `/journals/${journalNumber}`, }; return this._httpRequest<JournalNumber>(requestObj); } /** * Root for the voucher endpoint. * @see https://restdocs.e-conomic.com/#get-journals-journalnumber-vouchers * @returns {Promise<HttpResponse>} * */ getVouchers( journalNumber: number, skipPages: number = 0, limit: number = 100 ): Promise<HttpResponse<EconomicResponse<Voucher[], Pagination, any>>> { const requestObj = { method: "get", url: `/journals/${journalNumber}/vouchers?skippages=${skipPages}&pagesize=${limit}`, }; return this._httpRequest<EconomicResponse<Voucher[], Pagination, any>>( requestObj ); } /** * Create vouchers * @see https://restdocs.e-conomic.com/#post-journals-journalnumber-vouchers * @returns {Promise<HttpResponse<CreateVoucher>>} */ createVoucher( journalNumber: number, voucher: CreateVoucher ): Promise<HttpResponse<CreateVoucher>> { const requestObj = { method: "post", url: `/journals/${journalNumber}/vouchers`, data: voucher, }; return this._httpRequest<CreateVoucher>(requestObj); } /** * Get voucher number * @see https://restdocs.e-conomic.com/#get-journals-journalnumber-vouchers-accountingyear-vouchernumber * @returns {Promise<HttpResponse<VoucherNumber>>} */ getVoucherNumber( journalNumber: number, voucherNumber: number ): Promise<HttpResponse<VoucherNumber>> { const requestObj = { method: "get", url: `/journals/${journalNumber}/vouchers/${voucherNumber}`, }; return this._httpRequest<VoucherNumber>(requestObj); } /** * Get number of pages available on the document. * @see https://restdocs.e-conomic.com/#get-journals-journalnumber-vouchers-accountingyear-vouchernumber-attachment * @returns {Promise<HttpResponse<Attachment>>} */ getAttachment( journalNumber: number, voucherNumber: number ): Promise<HttpResponse<Attachment>> { const requestObj = { method: "get", url: `/journals/${journalNumber}/vouchers/${voucherNumber}/attachment`, }; return this._httpRequest<Attachment>(requestObj); } /** * Get the file attachment for the given voucher * @see https://restdocs.e-conomic.com/#get-journals-journalnumber-vouchers-accountingyear-vouchernumber-attachment-file * @returns {Promise<HttpResponse<any>>} */ getAttachedFile( journalNumber: number, voucherNumber: number ): Promise<HttpResponse<any>> { const requestObj = { method: "get", url: `/journals/${journalNumber}/vouchers/${voucherNumber}/attachment/file`, }; return this._httpRequest<any>(requestObj); } /** * Attaching a document to the voucher * @see https://restdocs.e-conomic.com/#post-journals-journalnumber-vouchers-accountingyear-vouchernumber-attachment-file * @returns {Promise<HttpResponse<any>>} */ attachFile( journalNumber: number, voucherNumber: number ): Promise<HttpResponse<any>> { const requestObj = { method: "post", url: `/journals/${journalNumber}/vouchers/${voucherNumber}/attachment/file`, }; return this._httpRequest<any>(requestObj); } /** * Attach more pages to the file, that is associated with the voucher. * @see https://restdocs.e-conomic.com/#patch-journals-journalnumber-vouchers-accountingyear-vouchernumber-attachment-file * @returns {Promise<HttpResponse<any>>} */ attachFiles( journalNumber: number, voucherNumber: number ): Promise<HttpResponse<any>> { const requestObj = { method: "patch", url: `/journals/${journalNumber}/vouchers/${voucherNumber}/attachment/file`, }; return this._httpRequest<any>(requestObj); } /** * Returns a collection of all entries in the journal * @see https://restdocs.e-conomic.com/#get-journals-journalnumber-entries * @returns {Promise<HttpResponse>} * */ getEntries( journalNumber: number, skipPages: number = 0, limit: number = 100 ): Promise<HttpResponse<EconomicResponse<JournalEntries[], Pagination, any>>> { const requestObj = { method: "get", url: `/journals/${journalNumber}/entries?skippages=${skipPages}&pagesize=${limit}`, }; return this._httpRequest<EconomicResponse<JournalEntries[], Pagination, any>>( requestObj ); } /** * Get entry number * @see https://restdocs.e-conomic.com/#get-journals-journalnumber-entries-entrynumber * @returns {Promise<HttpResponse<EntryNumber>>} */ getEntryNumber( journalNumber: number, entryNumber: number ): Promise<HttpResponse<EntryNumber>> { const requestObj = { method: "get", url: `/journals/${journalNumber}/entries/${entryNumber}`, }; return this._httpRequest<EntryNumber>(requestObj); } /** * Returns the templates available for journal entries. * @see https://restdocs.e-conomic.com/#get-journals-journalnumber-templates * @returns {Promise<HttpResponse<JournalTemplate>>} */ getJournalTemplate( journalNumber: number, ): Promise<HttpResponse<JournalTemplate>> { const requestObj = { method: "get", url: `/journals/${journalNumber}/templates`, }; return this._httpRequest<JournalTemplate>(requestObj); } /** * Returns a template that sets the boilerplate for a finance voucher entry * @see https://restdocs.e-conomic.com/#get-journals-journalnumber-templates-financevoucher * @returns {Promise<HttpResponse<FinanceVoucherTemplate>>} */ getFinanceVoucherTemplate( journalNumber: number, ): Promise<HttpResponse<FinanceVoucherTemplate>> { const requestObj = { method: "get", url: `/journals/${journalNumber}/templates/financeVoucher`, }; return this._httpRequest<FinanceVoucherTemplate>(requestObj); } /** * Returns a template that sets the boilerplate for a manual customer invoice * @see https://restdocs.e-conomic.com/#get-journals-journalnumber-templates-financevoucher * @returns {Promise<HttpResponse<ManualCustomerInvoiceTemplate[]>>} */ getManualCustomerInvoiceTemplates( journalNumber: number, skipPages: number = 0, limit: number = 100 ): Promise<HttpResponse<EconomicResponse<ManualCustomerInvoiceTemplate[], Pagination, any>>> { const requestObj = { method: "get", url: `/journals/${journalNumber}/templates/manualCustomerInvoice?skippages=${skipPages}&pagesize=${limit}`, }; return this._httpRequest<EconomicResponse<ManualCustomerInvoiceTemplate[], Pagination, any>>( requestObj ); } }