Tradon GL API Add-in loaded.
""") + + +@app.get("/addin/functions.json") +def addin_functions_json(): + functions = [ + ("GET_ACCOUNT_BASE_AMOUNT", "get_account_base_amount", "Balance converted to base currency"), + ("GET_ACCOUNT_REAL_BASE_AMOUNT", "get_account_real_base_amount", "Posted balance in base currency"), + ("GET_ACCOUNT_AMOUNT", "get_account_amount", "Balance in transaction currency"), + ("GET_ACCOUNT_ABBR", "get_account_abbr", "Account abbreviation/code"), + ("GET_ACCOUNT_NAME", "get_account_name", "Account name"), + ("GET_ACCOUNT_CONTACT", "get_account_contact", "Contact (code or name)"), + ("GET_ACCOUNT_CONTACT_CODE", "get_account_contact_code", "Contact party codes"), + ("GET_ACCOUNT_CONTACT_NAME", "get_account_contact_name", "Contact party names"), + ] + params = [ + {"name": "company", "dimensionality": "scalar", "type": "string"}, + {"name": "account", "dimensionality": "scalar", "type": "string"}, + {"name": "currency", "dimensionality": "scalar", "type": "string"}, + {"name": "date", "dimensionality": "scalar", "type": "string"}, + ] + return { + "functions": [ + {"id": fn_id, "name": fn_id, "description": desc, + "parameters": params, "result": {"dimensionality": "scalar", "type": "string"}} + for fn_id, _, desc in functions + ] + } + + +@app.get("/addin/functions.js", response_class=PlainTextResponse) +def addin_functions_js(request: Request): + base = str(request.base_url).rstrip("/") + js = f"""/* Tradon GL Custom Functions — auto-generated, base={base} */ +const _API = "{base}"; +const _HDR = {{"ngrok-skip-browser-warning": "true"}}; + +async function _gl(fn, company, account, currency, date) {{ + const url = _API + "/gl/all?company=" + encodeURIComponent(company) + + "&account=" + encodeURIComponent(account) + + "¤cy=" + encodeURIComponent(currency) + + "&date=" + encodeURIComponent(date); + const r = await fetch(url, {{headers: _HDR}}); + if (!r.ok) throw new Error("HTTP " + r.status); + const d = await r.json(); + const v = d.results[fn]; + return v !== null && v !== undefined ? v : ""; +}} + +CustomFunctions.associate("GET_ACCOUNT_BASE_AMOUNT", + (c,a,u,d) => _gl("get_account_base_amount", c,a,u,d)); +CustomFunctions.associate("GET_ACCOUNT_REAL_BASE_AMOUNT", + (c,a,u,d) => _gl("get_account_real_base_amount", c,a,u,d)); +CustomFunctions.associate("GET_ACCOUNT_AMOUNT", + (c,a,u,d) => _gl("get_account_amount", c,a,u,d)); +CustomFunctions.associate("GET_ACCOUNT_ABBR", + (c,a,u,d) => _gl("get_account_abbr", c,a,u,d)); +CustomFunctions.associate("GET_ACCOUNT_NAME", + (c,a,u,d) => _gl("get_account_name", c,a,u,d)); +CustomFunctions.associate("GET_ACCOUNT_CONTACT", + (c,a,u,d) => _gl("get_account_contact", c,a,u,d)); +CustomFunctions.associate("GET_ACCOUNT_CONTACT_CODE", + (c,a,u,d) => _gl("get_account_contact_code", c,a,u,d)); +CustomFunctions.associate("GET_ACCOUNT_CONTACT_NAME", + (c,a,u,d) => _gl("get_account_contact_name", c,a,u,d)); +""" + return PlainTextResponse(content=js, media_type="application/javascript") diff --git a/notes/accounting/excel_web_api/manifest.xml b/notes/accounting/excel_web_api/manifest.xml new file mode 100644 index 0000000..f733dec --- /dev/null +++ b/notes/accounting/excel_web_api/manifest.xml @@ -0,0 +1,48 @@ + +