tallyprime-sdk 0.2.0

Rust SDK for TallyPrime XML/HTTP integration with typed APIs for masters, vouchers, and financial reports.
use crate::errors::Result;
use serde_json::Value;

use super::XmlBuilder;

impl XmlBuilder {
    /// Build an All Masters import request that creates a stock item.
    pub fn create_stock_item_request(item_map: &serde_json::Map<String, Value>) -> Result<String> {
        let name = item_map.get("NAME").and_then(|v| v.as_str()).unwrap_or("");
        XmlBuilder::create_all_masters_import_request(|writer| {
            XmlBuilder::write_start_tag_with_attrs(
                writer,
                "STOCKITEM",
                &[("NAME", name), ("RESERVEDNAME", "")],
            )?;
            XmlBuilder::write_parent_tag(
                writer,
                item_map.get("PARENT").and_then(|v| v.as_str()),
                true,
            )?;
            for key in [
                "BASEUNITS",
                "ADDITIONALUNITS",
                "GSTAPPLICABLE",
                "GSTTYPEOFSUPPLY",
                "BASICRATEOFEXCISE",
                "OPENINGBALANCE",
            ] {
                XmlBuilder::write_simple_if(writer, item_map, key)?;
            }
            XmlBuilder::write_hsn_details_block(
                writer,
                item_map.get("HSNDETAILS.LIST").and_then(|v| v.as_object()),
                &[
                    "APPLICABLEFROM",
                    "HSNCODE",
                    "HSN",
                    "SRCOFHSNDETAILS",
                    "HSNCLASSIFICATIONNAME",
                ],
            )?;
            XmlBuilder::write_gst_details_block(
                writer,
                item_map.get("GSTDETAILS.LIST").and_then(|v| v.as_object()),
                &[
                    "APPLICABLEFROM",
                    "TAXABILITY",
                    "SRCOFGSTDETAILS",
                    "HSNMASTERNAME",
                ],
                true,
                false,
            )?;
            XmlBuilder::write_language_name_list(writer, name, item_map.get("ALIAS"), true, true)?;
            XmlBuilder::write_end_tag(writer, "STOCKITEM")
        })
    }
}