tally-xml-tdl 1.22.2 → 1.23.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -3
- package/src/index.js +2 -2
- package/src/v20/company/body.xml +25 -0
- package/src/v20/company/index.js +29 -0
- package/src/v20/company/tdl.json +4 -0
- package/src/v20/core/buildXml.js +9 -0
- package/src/v20/core/execute/executeXml.js +16 -0
- package/src/v20/core/execute/index.js +4 -0
- package/src/v20/core/index.js +22 -0
- package/src/v20/core/response/index.js +2 -0
- package/src/v20/core/response/xmlToJson.js +18 -0
- package/src/v20/core/transport/http.js +40 -0
- package/src/v20/core/transport/index.js +1 -0
- package/src/v20/index.js +6 -0
- package/src/v20/masters/body.xml +25 -0
- package/src/v20/masters/index.js +39 -0
- package/src/v20/masters/masters.json +86 -0
- package/src/v20/vouchers/body.xml +25 -0
- package/src/v20/vouchers/createVoucherApi.js +38 -0
- package/src/v20/vouchers/index.js +5 -0
- package/src/v20/vouchers/purchases/index.js +7 -0
- package/src/v20/vouchers/sales/index.js +7 -0
- package/src/v20/vouchers/tdlMessage.json +4 -0
- package/src/v22/body.xml +25 -0
- package/src/v22/bodyAsData.xml +16 -0
- package/src/v22/company/index.js +7 -0
- package/src/v22/core/buildXml.js +9 -0
- package/src/v22/core/execute/executeXml.js +16 -0
- package/src/v22/core/execute/index.js +4 -0
- package/src/v22/core/index.js +22 -0
- package/src/v22/core/response/index.js +2 -0
- package/src/v22/core/response/xmlToJson.js +18 -0
- package/src/v22/core/transport/http.js +40 -0
- package/src/v22/core/transport/index.js +1 -0
- package/src/v22/createApi.js +106 -0
- package/src/v22/index.js +7 -0
- package/src/v22/masters/Godown/index.js +20 -0
- package/src/v22/masters/Ledger/index.js +22 -0
- package/src/v22/masters/StockGroup/index.js +18 -0
- package/src/v22/masters/StockItem/index.js +20 -0
- package/src/v22/masters/Unit/index.js +16 -0
- package/src/v22/masters/index.js +64 -0
- package/src/v22/reports/index.js +11 -0
- package/src/v22/reports/stockSummary/index.js +10 -0
- package/src/v22/reports.json +6 -0
- package/src/v22/tdlMessage.json +37 -0
- package/src/v22/vouchers/index.js +5 -0
- package/src/v22/vouchers/purchases/index.js +7 -0
- package/src/v22/vouchers/sales/index.js +7 -0
- package/src/v23/body.xml +25 -0
- package/src/v23/bodyAsData.xml +16 -0
- package/src/v23/company/index.js +7 -0
- package/src/v23/core/buildXml.js +9 -0
- package/src/v23/core/execute/executeXml.js +16 -0
- package/src/v23/core/execute/index.js +4 -0
- package/src/v23/core/index.js +22 -0
- package/src/v23/core/response/index.js +2 -0
- package/src/v23/core/response/xmlToJson.js +18 -0
- package/src/v23/core/transport/http.js +40 -0
- package/src/v23/core/transport/index.js +1 -0
- package/src/v23/createApi.js +106 -0
- package/src/v23/index.js +7 -0
- package/src/v23/masters/Godown/index.js +20 -0
- package/src/v23/masters/Ledger/index.js +22 -0
- package/src/v23/masters/StockGroup/index.js +18 -0
- package/src/v23/masters/StockItem/index.js +20 -0
- package/src/v23/masters/Unit/index.js +16 -0
- package/src/v23/masters/index.js +64 -0
- package/src/v23/reports/index.js +11 -0
- package/src/v23/reports/stockSummary/index.js +10 -0
- package/src/v23/reports.json +6 -0
- package/src/v23/tdlMessage.json +37 -0
- package/src/v23/vouchers/index.js +5 -0
- package/src/v23/vouchers/purchases/index.js +7 -0
- package/src/v23/vouchers/sales/index.js +7 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tally-xml-tdl",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.23.3",
|
|
4
4
|
"description": "Simple, clean TDL and XML extraction and manipulation tools for Tally",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/index.js",
|
|
@@ -15,8 +15,7 @@
|
|
|
15
15
|
}
|
|
16
16
|
},
|
|
17
17
|
"files": [
|
|
18
|
-
"src
|
|
19
|
-
"src/index.js",
|
|
18
|
+
"src",
|
|
20
19
|
"index.js",
|
|
21
20
|
"index.d.ts",
|
|
22
21
|
"README.md",
|
package/src/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from "./
|
|
2
|
-
export { default } from "./
|
|
1
|
+
export * from "./v23/index.js";
|
|
2
|
+
export { default } from "./v23/index.js";
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<ENVELOPE>
|
|
2
|
+
<HEADER>
|
|
3
|
+
<VERSION>1</VERSION>
|
|
4
|
+
<TALLYREQUEST>Export</TALLYREQUEST>
|
|
5
|
+
<TYPE>Collection</TYPE>
|
|
6
|
+
<ID>TDLID</ID>
|
|
7
|
+
</HEADER>
|
|
8
|
+
|
|
9
|
+
<BODY>
|
|
10
|
+
<DESC>
|
|
11
|
+
<STATICVARIABLES>
|
|
12
|
+
<SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT>
|
|
13
|
+
{{STATICVARIABLES}}
|
|
14
|
+
</STATICVARIABLES>
|
|
15
|
+
|
|
16
|
+
<TDL>
|
|
17
|
+
<TDLMESSAGE>
|
|
18
|
+
<COLLECTION NAME="TDLID">
|
|
19
|
+
{{TDLMESSAGE}}
|
|
20
|
+
</COLLECTION>
|
|
21
|
+
</TDLMESSAGE>
|
|
22
|
+
</TDL>
|
|
23
|
+
</DESC>
|
|
24
|
+
</BODY>
|
|
25
|
+
</ENVELOPE>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { fileURLToPath } from "url";
|
|
4
|
+
|
|
5
|
+
import { executeXml } from "../core/index.js";
|
|
6
|
+
import { buildXml } from "../core/buildXml.js";
|
|
7
|
+
import tdlJson from "./tdl.json" with { type: "json" };
|
|
8
|
+
|
|
9
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
10
|
+
const body = fs.readFileSync(path.join(__dirname, "body.xml"), "utf8");
|
|
11
|
+
|
|
12
|
+
const startFunc = async (showLog = false) => {
|
|
13
|
+
const { tdlMessage } = tdlJson;
|
|
14
|
+
if (showLog) console.log("tdlMessage : ", tdlMessage);
|
|
15
|
+
|
|
16
|
+
const xml = buildXml(body, {
|
|
17
|
+
tdlMessage
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
if (showLog) console.log("xml : ", xml);
|
|
21
|
+
|
|
22
|
+
const jsonToReturn = await executeXml(xml);
|
|
23
|
+
|
|
24
|
+
if (showLog) console.log("jsonToReturn : ", jsonToReturn);
|
|
25
|
+
|
|
26
|
+
return jsonToReturn;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export default startFunc;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// src/v4/core/execute/executeXml.js
|
|
2
|
+
import { sendXml } from "../transport/http.js";
|
|
3
|
+
import { xmlToJson } from "../response/xmlToJson.js";
|
|
4
|
+
|
|
5
|
+
const startFunc = async (
|
|
6
|
+
xml,
|
|
7
|
+
{ url = "http://localhost:9000" } = {}
|
|
8
|
+
) => {
|
|
9
|
+
const rawXml = await sendXml({ xml, url });
|
|
10
|
+
|
|
11
|
+
const json = xmlToJson(rawXml);
|
|
12
|
+
// console.log("json :", json);
|
|
13
|
+
return json;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export default startFunc;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// Sub-modules
|
|
2
|
+
export * as transport from "./transport/index.js";
|
|
3
|
+
export * as response from "./response/index.js";
|
|
4
|
+
export * as execute from "./execute/index.js";
|
|
5
|
+
|
|
6
|
+
// Direct Core Exports
|
|
7
|
+
export {
|
|
8
|
+
sendXml,
|
|
9
|
+
sendToTally
|
|
10
|
+
} from "./transport/index.js";
|
|
11
|
+
|
|
12
|
+
export {
|
|
13
|
+
xmlToJson
|
|
14
|
+
} from "./response/index.js";
|
|
15
|
+
|
|
16
|
+
export {
|
|
17
|
+
executeXml
|
|
18
|
+
} from "./execute/index.js";
|
|
19
|
+
|
|
20
|
+
export {
|
|
21
|
+
buildXml
|
|
22
|
+
} from "./buildXml.js";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { XMLParser } from "fast-xml-parser";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Converts XML string into a JavaScript Object.
|
|
5
|
+
* Preserves XML attributes using the `@_` prefix.
|
|
6
|
+
*
|
|
7
|
+
* @param {string} xml - The XML string to parse.
|
|
8
|
+
* @param {object} [options] - Optional XMLParser configurations.
|
|
9
|
+
* @returns {object} The parsed JavaScript object.
|
|
10
|
+
*/
|
|
11
|
+
export const xmlToJson = (xml, options = {}) => {
|
|
12
|
+
const parser = new XMLParser({
|
|
13
|
+
ignoreAttributes: false,
|
|
14
|
+
...options
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
return parser.parse(xml);
|
|
18
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { xmlToJson } from "../response/xmlToJson.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Sends a raw XML string to Tally via HTTP POST and returns the raw response text.
|
|
5
|
+
*
|
|
6
|
+
* @param {object} params
|
|
7
|
+
* @param {string} params.xml - The XML payload to send.
|
|
8
|
+
* @param {string} [params.url="http://localhost:9000"] - Tally HTTP endpoint URL.
|
|
9
|
+
* @returns {Promise<string>} Raw XML response text from Tally.
|
|
10
|
+
*/
|
|
11
|
+
export const sendXml = async ({
|
|
12
|
+
xml,
|
|
13
|
+
url = "http://localhost:9000"
|
|
14
|
+
} = {}) => {
|
|
15
|
+
const res = await fetch(url, {
|
|
16
|
+
method: "POST",
|
|
17
|
+
headers: {
|
|
18
|
+
"Content-Type": "text/xml"
|
|
19
|
+
},
|
|
20
|
+
body: xml
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
return await res.text();
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Sends an XML payload to Tally via HTTP POST and parses the response to JSON.
|
|
28
|
+
*
|
|
29
|
+
* @param {object} params
|
|
30
|
+
* @param {string} params.xml - The XML string to send.
|
|
31
|
+
* @param {string} [params.url="http://localhost:9000"] - Tally HTTP endpoint URL.
|
|
32
|
+
* @returns {Promise<object>} Parsed JSON response from Tally.
|
|
33
|
+
*/
|
|
34
|
+
export const sendToTally = async ({
|
|
35
|
+
xml,
|
|
36
|
+
url = "http://localhost:9000"
|
|
37
|
+
} = {}) => {
|
|
38
|
+
const text = await sendXml({ xml, url });
|
|
39
|
+
return xmlToJson(text);
|
|
40
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { sendXml, sendToTally } from "./http.js";
|
package/src/v20/index.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<ENVELOPE>
|
|
2
|
+
<HEADER>
|
|
3
|
+
<VERSION>1</VERSION>
|
|
4
|
+
<TALLYREQUEST>Export</TALLYREQUEST>
|
|
5
|
+
<TYPE>Collection</TYPE>
|
|
6
|
+
<ID>TDLID</ID>
|
|
7
|
+
</HEADER>
|
|
8
|
+
|
|
9
|
+
<BODY>
|
|
10
|
+
<DESC>
|
|
11
|
+
<STATICVARIABLES>
|
|
12
|
+
<SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT>
|
|
13
|
+
{{STATICVARIABLES}}
|
|
14
|
+
</STATICVARIABLES>
|
|
15
|
+
|
|
16
|
+
<TDL>
|
|
17
|
+
<TDLMESSAGE>
|
|
18
|
+
<COLLECTION NAME="TDLID">
|
|
19
|
+
{{TDLMESSAGE}}
|
|
20
|
+
</COLLECTION>
|
|
21
|
+
</TDLMESSAGE>
|
|
22
|
+
</TDL>
|
|
23
|
+
</DESC>
|
|
24
|
+
</BODY>
|
|
25
|
+
</ENVELOPE>
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { fileURLToPath } from "url";
|
|
4
|
+
|
|
5
|
+
import { executeXml } from "../core/index.js";
|
|
6
|
+
import { buildXml } from "../core/buildXml.js";
|
|
7
|
+
import bodyJson from "./masters.json" with { type: "json" };
|
|
8
|
+
|
|
9
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
10
|
+
const body = fs.readFileSync(path.join(__dirname, "body.xml"), "utf8");
|
|
11
|
+
|
|
12
|
+
const get = (company, jsonId) => {
|
|
13
|
+
const { tdlMessage } = bodyJson[jsonId];
|
|
14
|
+
|
|
15
|
+
const staticVariables = `<SVCURRENTCOMPANY>${company}</SVCURRENTCOMPANY>`;
|
|
16
|
+
|
|
17
|
+
const xml = buildXml(body, {
|
|
18
|
+
staticVariables,
|
|
19
|
+
tdlMessage
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
return executeXml(xml);
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const clean = (company, jsonId) => {
|
|
26
|
+
const { tdlMessage, staticVariables } = bodyJson[jsonId];
|
|
27
|
+
|
|
28
|
+
const companyFilter = `<SVCURRENTCOMPANY>${company}</SVCURRENTCOMPANY>${staticVariables || ""}`;
|
|
29
|
+
|
|
30
|
+
const xml = buildXml(body, {
|
|
31
|
+
staticVariables: companyFilter,
|
|
32
|
+
tdlMessage
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
return executeXml(xml);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export { get, clean };
|
|
39
|
+
export default { get, clean };
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
{
|
|
2
|
+
"company": {
|
|
3
|
+
"staticVariables": "<SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT>",
|
|
4
|
+
"tdlMessage": "<TYPE>Company</TYPE><FETCH>$$Alias:Name</FETCH>"
|
|
5
|
+
},
|
|
6
|
+
"allPurchases": {
|
|
7
|
+
"staticVariables": "<SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT>",
|
|
8
|
+
"tdlMessage": "<TYPE>Vouchers</TYPE><FETCH>Date</FETCH>"
|
|
9
|
+
},
|
|
10
|
+
"purchasesPeriod": {
|
|
11
|
+
"staticVariables": "<SVFROMDATE TYPE=\"Date\">1-Apr-2026</SVFROMDATE><SVTODATE TYPE=\"Date\">30-Apr-2026</SVTODATE>",
|
|
12
|
+
"tdlMessage": "<TYPE>Vouchers</TYPE><FETCH>Date</FETCH>"
|
|
13
|
+
},
|
|
14
|
+
"uom": {
|
|
15
|
+
"staticVariables": "<SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT>",
|
|
16
|
+
"tdlMessage": "<TYPE>Unit</TYPE><FETCH>$$Alias:Name</FETCH>"
|
|
17
|
+
},
|
|
18
|
+
"stockItems": {
|
|
19
|
+
"staticVariables": "<SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT>",
|
|
20
|
+
"tdlMessage": "<TYPE>StockItem</TYPE><FETCH>$$Alias:Name</FETCH>"
|
|
21
|
+
},
|
|
22
|
+
"stockItemsWithBaseUnits": {
|
|
23
|
+
"staticVariables": "<SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT>",
|
|
24
|
+
"tdlMessage": "<TYPE>StockItem</TYPE><FETCH>$$Alias:Name</FETCH><FETCH>BaseUnits</FETCH>"
|
|
25
|
+
},
|
|
26
|
+
"ledgerNames": {
|
|
27
|
+
"staticVariables": "<SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT>",
|
|
28
|
+
"tdlMessage": "<TYPE>Ledger</TYPE><FETCH>$$Alias:Name</FETCH>"
|
|
29
|
+
},
|
|
30
|
+
"ledgerNamesWithDetails": {
|
|
31
|
+
"staticVariables": "<SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT>",
|
|
32
|
+
"tdlMessage": "<TYPE>Ledger</TYPE><FETCH>$$Alias:Name</FETCH><FETCH>GSTRegistrationType</FETCH><FETCH>GSTIN</FETCH>"
|
|
33
|
+
},
|
|
34
|
+
"ledgerNamesMoreDetails": {
|
|
35
|
+
"staticVariables": "<SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT>",
|
|
36
|
+
"tdlMessage": "<TYPE>Ledger</TYPE><FETCH>$$Alias:Name</FETCH><FETCH>LEDGSTREGDETAILS.LIST</FETCH>"
|
|
37
|
+
},
|
|
38
|
+
"stockGroups": {
|
|
39
|
+
"staticVariables": "<SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT>",
|
|
40
|
+
"tdlMessage": "<TYPE>StockGroup</TYPE><FETCH>$$Alias:Name</FETCH>"
|
|
41
|
+
},
|
|
42
|
+
"stockGroupsAndParent": {
|
|
43
|
+
"staticVariables": "<SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT>",
|
|
44
|
+
"tdlMessage": "<TYPE>StockGroup</TYPE><FETCH>$$Alias:Name</FETCH><FETCH>Parent</FETCH>"
|
|
45
|
+
},
|
|
46
|
+
"purchases1": {
|
|
47
|
+
"staticVariables": "<SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT><SVFROMDATE>1-Apr-2026</SVFROMDATE><SVTODATE>30-Apr-2026</SVTODATE>",
|
|
48
|
+
"tdlMessage": "<TYPE>Voucher</TYPE><FILTER>$$IsPurchase:$VoucherTypeName</FILTER><FETCH>Date</FETCH><FETCH>VoucherNumber</FETCH><FETCH>VoucherTypeName</FETCH><FETCH>PartyLedgerName</FETCH><FETCH>Amount</FETCH>"
|
|
49
|
+
},
|
|
50
|
+
"purchases2": {
|
|
51
|
+
"staticVariables": "<SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT><SVFROMDATE>1-Apr-2026</SVFROMDATE><SVTODATE>30-Apr-2026</SVTODATE>",
|
|
52
|
+
"tdlMessage": "<TYPE>Vouchers:VoucherType</TYPE><CHILDOF>$$VchTypePurchase</CHILDOF><BELONGSTO>Yes</BELONGSTO><FETCH>Date, VoucherNumber, VoucherTypeName, PartyLedgerName, AllInventoryEntries</FETCH>"
|
|
53
|
+
},
|
|
54
|
+
"purchases3": {
|
|
55
|
+
"staticVariables": "<SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT><SVFROMDATE>1-Apr-2026</SVFROMDATE><SVTODATE>1-Apr-2026</SVTODATE>",
|
|
56
|
+
"tdlMessage": "<TYPE>Voucher</TYPE><SYSTEM TYPE=\"Formulae\" NAME=\"DateFilter\">$Date >= ##SVFROMDATE AND $Date <= ##SVTODATE</SYSTEM><FILTER>DateFilter</FILTER><FETCH>Date</FETCH><FETCH>VoucherNumber</FETCH><FETCH>VoucherTypeName</FETCH><FETCH>PartyLedgerName</FETCH><FETCH>AllInventoryEntries</FETCH>"
|
|
57
|
+
},
|
|
58
|
+
"purchases4": {
|
|
59
|
+
"staticVariables": "<SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT><SVFROMDATE>1-Apr-2026</SVFROMDATE><SVTODATE>1-Apr-2026</SVTODATE>",
|
|
60
|
+
"tdlMessage": "<SYSTEM TYPE=\"Formula\" NAME=\"DateFilter\">$Date >= ##SVFROMDATE AND $Date <= ##SVTODATE</SYSTEM><COLLECTION NAME=\"KeshavPurchases\"><TYPE>Voucher</TYPE><FILTER>DateFilter</FILTER><FETCH>Date</FETCH><FETCH>VoucherNumber</FETCH><FETCH>VoucherTypeName</FETCH><FETCH>PartyLedgerName</FETCH><FETCH>AllInventoryEntries</FETCH></COLLECTION>"
|
|
61
|
+
},
|
|
62
|
+
"purchases5": {
|
|
63
|
+
"staticVariables": "<SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT><SVFROMDATE>1-Apr-2026</SVFROMDATE><SVTODATE>1-Apr-2026</SVTODATE>",
|
|
64
|
+
"tdlMessage": "<SYSTEM TYPE=\"Formulae\" NAME=\"DateFilter\">$Date >= ##SVFROMDATE AND $Date <= ##SVTODATE</SYSTEM><COLLECTION NAME=\"KeshavPurchases\"><TYPE>Voucher</TYPE><FILTER>DateFilter</FILTER><FETCH>Date</FETCH><FETCH>VoucherNumber</FETCH><FETCH>VoucherTypeName</FETCH><FETCH>PartyLedgerName</FETCH><FETCH>AllInventoryEntries</FETCH></COLLECTION>"
|
|
65
|
+
},
|
|
66
|
+
"purchases6": {
|
|
67
|
+
"staticVariables": "<SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT><SVFROMDATE>1-Apr-2026</SVFROMDATE><SVTODATE>1-Apr-2026</SVTODATE>",
|
|
68
|
+
"tdlMessage": "<COLLECTION NAME=\"KeshavPurchases\"><TYPE>Voucher</TYPE><FILTERS>DateFilter</FILTERS><FETCH>Date</FETCH><FETCH>VoucherNumber</FETCH><FETCH>VoucherTypeName</FETCH><FETCH>PartyLedgerName</FETCH><FETCH>AllInventoryEntries</FETCH></COLLECTION><SYSTEM TYPE=\"Formulae\" NAME=\"DateFilter\">$Date >= ##SVFROMDATE AND $Date <= ##SVTODATE</SYSTEM>"
|
|
69
|
+
},
|
|
70
|
+
"purchases7": {
|
|
71
|
+
"staticVariables": "<SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT><SVFROMDATE>1-Apr-2026</SVFROMDATE><SVTODATE>1-Apr-2026</SVTODATE>",
|
|
72
|
+
"tdlMessage": "<COLLECTION NAME=\"KeshavPurchases\"><TYPE>Voucher</TYPE><FILTERS>DateFilter</FILTERS><FETCH>Date</FETCH><FETCH>VoucherNumber</FETCH><FETCH>VoucherTypeName</FETCH><FETCH>PartyLedgerName</FETCH><FETCH>AllInventoryEntries</FETCH></COLLECTION><SYSTEM TYPE=\"Formulae\" NAME=\"DateFilter\">$Date >= ##SVFROMDATE AND $Date <= ##SVTODATE</SYSTEM>"
|
|
73
|
+
},
|
|
74
|
+
"purchases8": {
|
|
75
|
+
"staticVariables": "<SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT>",
|
|
76
|
+
"tdlMessage": "<COLLECTION NAME=\"KeshavPurchases\"><TYPE>Voucher</TYPE><FETCH>Date</FETCH><FETCH>VoucherNumber</FETCH><FETCH>VoucherTypeName</FETCH></COLLECTION>"
|
|
77
|
+
},
|
|
78
|
+
"purchases9": {
|
|
79
|
+
"staticVariables": "<SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT>",
|
|
80
|
+
"tdlMessage": "<COLLECTION NAME=\"KeshavPurchaseInventory\"><TYPE>Vouchers:VoucherType</TYPE><CHILDOF>$$VchTypePurchase</CHILDOF><BELONGSTO>Yes</BELONGSTO><FETCH>Date, VoucherNumber, VoucherTypeName, PartyLedgerName, AllInventoryEntries</FETCH></COLLECTION>"
|
|
81
|
+
},
|
|
82
|
+
"purchases10": {
|
|
83
|
+
"staticVariables": "<SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT><SVFROMDATE TYPE=\"Date\">4-Sep-2026</SVFROMDATE><SVTODATE TYPE=\"Date\">4-Sep-2026</SVTODATE>",
|
|
84
|
+
"tdlMessage": "<TYPE>Vouchers:VoucherType</TYPE><CHILDOF>$$VchTypePurchase</CHILDOF><BELONGSTO>Yes</BELONGSTO><FETCH>AllInventoryEntries</FETCH><FETCH>Date</FETCH>"
|
|
85
|
+
}
|
|
86
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<ENVELOPE>
|
|
2
|
+
<HEADER>
|
|
3
|
+
<VERSION>1</VERSION>
|
|
4
|
+
<TALLYREQUEST>Export</TALLYREQUEST>
|
|
5
|
+
<TYPE>Collection</TYPE>
|
|
6
|
+
<ID>TDLID</ID>
|
|
7
|
+
</HEADER>
|
|
8
|
+
|
|
9
|
+
<BODY>
|
|
10
|
+
<DESC>
|
|
11
|
+
<STATICVARIABLES>
|
|
12
|
+
<SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT>
|
|
13
|
+
{{STATICVARIABLES}}
|
|
14
|
+
</STATICVARIABLES>
|
|
15
|
+
|
|
16
|
+
<TDL>
|
|
17
|
+
<TDLMESSAGE>
|
|
18
|
+
<COLLECTION NAME="TDLID">
|
|
19
|
+
{{TDLMESSAGE}}
|
|
20
|
+
</COLLECTION>
|
|
21
|
+
</TDLMESSAGE>
|
|
22
|
+
</TDL>
|
|
23
|
+
</DESC>
|
|
24
|
+
</BODY>
|
|
25
|
+
</ENVELOPE>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { fileURLToPath } from "url";
|
|
4
|
+
import { executeXml } from "../core/index.js";
|
|
5
|
+
import { buildXml } from "../core/buildXml.js";
|
|
6
|
+
|
|
7
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
8
|
+
const body = fs.readFileSync(path.join(__dirname, "body.xml"), "utf8");
|
|
9
|
+
|
|
10
|
+
const createVoucherApi = (tdlMessageString) => {
|
|
11
|
+
const period = async (company, fromDate, toDate) => {
|
|
12
|
+
const staticVariables = `<SVCURRENTCOMPANY>${company}</SVCURRENTCOMPANY>
|
|
13
|
+
<SVFROMDATE TYPE="Date">${fromDate}</SVFROMDATE><SVTODATE TYPE="Date">${toDate}</SVTODATE>`;
|
|
14
|
+
|
|
15
|
+
const xml = buildXml(body, {
|
|
16
|
+
staticVariables,
|
|
17
|
+
tdlMessage: tdlMessageString
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
return await executeXml(xml);
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
const all = async (company) => {
|
|
24
|
+
const staticVariables = `<SVCURRENTCOMPANY>${company}</SVCURRENTCOMPANY>`;
|
|
25
|
+
|
|
26
|
+
const xml = buildXml(body, {
|
|
27
|
+
staticVariables,
|
|
28
|
+
tdlMessage: tdlMessageString
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
return await executeXml(xml);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
return { period, all };
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export { createVoucherApi };
|
|
38
|
+
export default createVoucherApi;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
{
|
|
2
|
+
"purchases": "<TYPE>Vouchers:VoucherType</TYPE><CHILDOF>$$$$VchTypePurchase</CHILDOF><BELONGSTO>Yes</BELONGSTO><FETCH>AllInventoryEntries</FETCH><FETCH>Date</FETCH>",
|
|
3
|
+
"sales": "<TYPE>Vouchers:VoucherType</TYPE><CHILDOF>$$$$VchTypeSales</CHILDOF><BELONGSTO>Yes</BELONGSTO><FETCH>AllInventoryEntries</FETCH><FETCH>Date</FETCH>"
|
|
4
|
+
}
|
package/src/v22/body.xml
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<ENVELOPE>
|
|
2
|
+
<HEADER>
|
|
3
|
+
<VERSION>1</VERSION>
|
|
4
|
+
<TALLYREQUEST>Export</TALLYREQUEST>
|
|
5
|
+
<TYPE>Collection</TYPE>
|
|
6
|
+
<ID>TDLID</ID>
|
|
7
|
+
</HEADER>
|
|
8
|
+
|
|
9
|
+
<BODY>
|
|
10
|
+
<DESC>
|
|
11
|
+
<STATICVARIABLES>
|
|
12
|
+
<SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT>
|
|
13
|
+
{{STATICVARIABLES}}
|
|
14
|
+
</STATICVARIABLES>
|
|
15
|
+
|
|
16
|
+
<TDL>
|
|
17
|
+
<TDLMESSAGE>
|
|
18
|
+
<COLLECTION NAME="TDLID">
|
|
19
|
+
{{TDLMESSAGE}}
|
|
20
|
+
</COLLECTION>
|
|
21
|
+
</TDLMESSAGE>
|
|
22
|
+
</TDL>
|
|
23
|
+
</DESC>
|
|
24
|
+
</BODY>
|
|
25
|
+
</ENVELOPE>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<ENVELOPE>
|
|
2
|
+
<HEADER>
|
|
3
|
+
<VERSION>1</VERSION>
|
|
4
|
+
<TALLYREQUEST>Export</TALLYREQUEST>
|
|
5
|
+
<TYPE>Data</TYPE>
|
|
6
|
+
<ID>{{ID}}</ID>
|
|
7
|
+
</HEADER>
|
|
8
|
+
<BODY>
|
|
9
|
+
<DESC>
|
|
10
|
+
<STATICVARIABLES>
|
|
11
|
+
<SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT>
|
|
12
|
+
{{STATICVARIABLES}}
|
|
13
|
+
</STATICVARIABLES>
|
|
14
|
+
</DESC>
|
|
15
|
+
</BODY>
|
|
16
|
+
</ENVELOPE>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// src/v4/core/execute/executeXml.js
|
|
2
|
+
import { sendXml } from "../transport/http.js";
|
|
3
|
+
import { xmlToJson } from "../response/xmlToJson.js";
|
|
4
|
+
|
|
5
|
+
const startFunc = async (
|
|
6
|
+
xml,
|
|
7
|
+
{ url = "http://localhost:9000" } = {}
|
|
8
|
+
) => {
|
|
9
|
+
const rawXml = await sendXml({ xml, url });
|
|
10
|
+
|
|
11
|
+
const json = xmlToJson(rawXml);
|
|
12
|
+
// console.log("json :", json);
|
|
13
|
+
return json;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export default startFunc;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// Sub-modules
|
|
2
|
+
export * as transport from "./transport/index.js";
|
|
3
|
+
export * as response from "./response/index.js";
|
|
4
|
+
export * as execute from "./execute/index.js";
|
|
5
|
+
|
|
6
|
+
// Direct Core Exports
|
|
7
|
+
export {
|
|
8
|
+
sendXml,
|
|
9
|
+
sendToTally
|
|
10
|
+
} from "./transport/index.js";
|
|
11
|
+
|
|
12
|
+
export {
|
|
13
|
+
xmlToJson
|
|
14
|
+
} from "./response/index.js";
|
|
15
|
+
|
|
16
|
+
export {
|
|
17
|
+
executeXml
|
|
18
|
+
} from "./execute/index.js";
|
|
19
|
+
|
|
20
|
+
export {
|
|
21
|
+
buildXml
|
|
22
|
+
} from "./buildXml.js";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { XMLParser } from "fast-xml-parser";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Converts XML string into a JavaScript Object.
|
|
5
|
+
* Preserves XML attributes using the `@_` prefix.
|
|
6
|
+
*
|
|
7
|
+
* @param {string} xml - The XML string to parse.
|
|
8
|
+
* @param {object} [options] - Optional XMLParser configurations.
|
|
9
|
+
* @returns {object} The parsed JavaScript object.
|
|
10
|
+
*/
|
|
11
|
+
export const xmlToJson = (xml, options = {}) => {
|
|
12
|
+
const parser = new XMLParser({
|
|
13
|
+
ignoreAttributes: false,
|
|
14
|
+
...options
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
return parser.parse(xml);
|
|
18
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { xmlToJson } from "../response/xmlToJson.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Sends a raw XML string to Tally via HTTP POST and returns the raw response text.
|
|
5
|
+
*
|
|
6
|
+
* @param {object} params
|
|
7
|
+
* @param {string} params.xml - The XML payload to send.
|
|
8
|
+
* @param {string} [params.url="http://localhost:9000"] - Tally HTTP endpoint URL.
|
|
9
|
+
* @returns {Promise<string>} Raw XML response text from Tally.
|
|
10
|
+
*/
|
|
11
|
+
export const sendXml = async ({
|
|
12
|
+
xml,
|
|
13
|
+
url = "http://localhost:9000"
|
|
14
|
+
} = {}) => {
|
|
15
|
+
const res = await fetch(url, {
|
|
16
|
+
method: "POST",
|
|
17
|
+
headers: {
|
|
18
|
+
"Content-Type": "text/xml"
|
|
19
|
+
},
|
|
20
|
+
body: xml
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
return await res.text();
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Sends an XML payload to Tally via HTTP POST and parses the response to JSON.
|
|
28
|
+
*
|
|
29
|
+
* @param {object} params
|
|
30
|
+
* @param {string} params.xml - The XML string to send.
|
|
31
|
+
* @param {string} [params.url="http://localhost:9000"] - Tally HTTP endpoint URL.
|
|
32
|
+
* @returns {Promise<object>} Parsed JSON response from Tally.
|
|
33
|
+
*/
|
|
34
|
+
export const sendToTally = async ({
|
|
35
|
+
xml,
|
|
36
|
+
url = "http://localhost:9000"
|
|
37
|
+
} = {}) => {
|
|
38
|
+
const text = await sendXml({ xml, url });
|
|
39
|
+
return xmlToJson(text);
|
|
40
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { sendXml, sendToTally } from "./http.js";
|