Zoho Books: Please ensure that the "description" has less than 100 characters.
I have this code written to convert Quote into an invoice and keep getting an error even while saving the code.
Error: Please ensure that the "description" has less than 100 characters.
- // Replace with your actual organization ID and connection name
- org_id = "7004318259";
- connection_name = "zohobooks";
- // Fetch the quote details using the provided quote_id
- quote_response = zoho.books.getRecordsByID("Estimates", org_id, quote_id, connection_name);
- estimate = quote_response.get("estimate");
- if (estimate.isEmpty())
- {
- info "Quote not found for ID: " + quote_id;
- return;
- }
- // Extract key details from the quote
- customer_id = estimate.get("customer_id");
- zcrm_potential_id = estimate.get("zcrm_potential_id");
- if(zcrm_potential_id != "" && zcrm_potential_id != null)
- {
- deals = zoho.crm.getRecordById("Deals",zcrm_potential_id);
- What_type_of_job_is_this = deals.get("What_type_of_job_is_this");
- }
- estimate_id = estimate.get("estimate_id");
- estimate_number = estimate.get("estimate_number");
- currency_id = estimate.get("currency_id");
- line_items = estimate.get("line_items");
- // Initialize lists to hold Supply and Installation items
- if(What_type_of_job_is_this == "Mixed Scope (Supply + Install)")
- {
- supply_items = List();
- installation_items = List();
- // Filter line items based on Item Category
- for each item in line_items
- {
- // Access the custom field "Item Category"
- custom_fields = item.get("item_custom_fields");
- item_category = "";
- for each cf in custom_fields
- {
- if(cf.get("label") == "Item Category")
- {
- item_category = cf.get("value");
- break;
- }
- }
- // Create an item map for invoice creation, including tax
- item_map = Map();
- item_map.put("item_id",item.get("item_id"));
- item_map.put("quantity",item.get("quantity"));
- item_map.put("rate",item.get("rate"));
- item_map.put("tax_id",item.get("tax_id"));
- // Include tax ID (e.g., GST)
- description = item.get("description");
- if(description.length() > 100)
- {
- description = description.subString(0,100); // Truncate to 100 characters
- }
- item_map.put("description",description);
- // Optional: from quote, limited to 100 characters
- item_map.put("unit",item.get("unit"));
- // Optional: from quote
- if(item_category.equalsIgnoreCase("Supply"))
- {
- supply_items.add(item_map);
- }
- else if(item_category.equalsIgnoreCase("Installation"))
- {
- installation_items.add(item_map);
- }
- }
- // Prepare common invoice details
- current_date = today;
- current_date = current_date.toString("yyyy-MM-dd");
- // Format for API
- due_date = addDay(current_date,30).toString("yyyy-MM-dd");
- // API URL for Zoho Books Invoices endpoint
- base_url = "https://www.zohoapis.com.au/books/v3/invoices?organization_id=" + org_id;
- // Create Supply Invoice if there are Supply items
- if(!supply_items.isEmpty())
- {
- supply_invoice_map = Map();
- supply_invoice_map.put("customer_id",customer_id);
- supply_invoice_map.put("currency_id",currency_id);
- supply_invoice_map.put("date",current_date);
- supply_invoice_map.put("due_date",due_date);
- supply_invoice_map.put("line_items",supply_items);
- supply_invoice_map.put("reference_number","SUP-" + estimate_number);
- supply_invoice_map.put("notes",estimate.get("notes"));
- supply_invoice_map.put("terms",estimate.get("terms"));
- supply_invoice_map.put("invoiced_estimate_id",estimate_id);
- // Link to estimate
- supply_invoice_map.put("zcrm_potential_id",zcrm_potential_id);
- // CRM deal link
- supply_invoice_map.put("ignore_auto_number_generation",false);
- // Auto-generate invoice number
- supply_invoice_map.put("is_inclusive_tax",false);
- // Match your sample
- supply_invoice_map.put("discount",0);
- // From quote
- supply_invoice_map.put("shipping_charge",0);
- // From quote
- supply_invoice_map.put("adjustment",0);
- // From quote
- // Convert map to JSON string for API
- parameters_data = supply_invoice_map.toString();
- // Invoke URL to create Supply Invoice
- response = invokeurl
- [
- url :base_url
- type :POST
- parameters:parameters_data
- connection:"zohobooks"
- ];
- info response;
- }
- // Create Installation Invoice if there are Installation items
- if(!installation_items.isEmpty())
- {
- installation_invoice_map = Map();
- installation_invoice_map.put("customer_id",customer_id);
- installation_invoice_map.put("currency_id",currency_id);
- installation_invoice_map.put("date",current_date);
- installation_invoice_map.put("due_date",due_date);
- installation_invoice_map.put("line_items",installation_items);
- installation_invoice_map.put("reference_number","INST-" + estimate_number);
- installation_invoice_map.put("notes",estimate.get("notes"));
- installation_invoice_map.put("terms",estimate.get("terms"));
- installation_invoice_map.put("invoiced_estimate_id",estimate_id);
- // Link to estimate
- installation_invoice_map.put("zcrm_potential_id",zcrm_potential_id);
- // CRM deal link
- installation_invoice_map.put("ignore_auto_number_generation",false);
- // Auto-generate invoice number
- installation_invoice_map.put("is_inclusive_tax",false);
- // Match your sample
- installation_invoice_map.put("discount",0);
- // From quote
- installation_invoice_map.put("shipping_charge",0);
- // From quote
- installation_invoice_map.put("adjustment",0);
- // From quote
- // Convert map to JSON string for API
- parameters_data = installation_invoice_map.toString();
- // Invoke URL to create Installation Invoice
- response = invokeurl
- [
- url :base_url
- type :POST
- parameters:parameters_data
- connection:"zohobooks"
- ];
- info response;
- }
- }
- else
- {
- supply_items = List();
- // Create an item map for invoice creation, including tax
- for each item in line_items
- {
- // Create an item map for invoice creation, including tax
- item_map = Map();
- item_map.put("item_id",item.get("item_id"));
- item_map.put("quantity",item.get("quantity"));
- item_map.put("rate",item.get("rate"));
- item_map.put("tax_id",item.get("tax_id"));
- // Include tax ID (e.g., GST)
- description = item.get("description");
- if(description.length() > 100)
- {
- description = description.subString(0,100); // Truncate to 100 characters
- }
- item_map.put("description",description);
- // Optional: from quote, limited to 100 characters
- item_map.put("unit",item.get("unit"));
- supply_items.add(item_map);
- }
- // Prepare common invoice details
- current_date = today;
- current_date = current_date.toString("yyyy-MM-dd");
- // Format for API
- due_date = addDay(current_date,30).toString("yyyy-MM-dd");
- // API URL for Zoho Books Invoices endpoint
- base_url = "https://www.zohoapis.com.au/books/v3/invoices?organization_id=" + org_id;
- // Create Supply Invoice if there are Supply items
- supply_invoice_map = Map();
- supply_invoice_map.put("customer_id",customer_id);
- supply_invoice_map.put("currency_id",currency_id);
- supply_invoice_map.put("date",current_date);
- supply_invoice_map.put("due_date",due_date);
- supply_invoice_map.put("line_items",supply_items);
- supply_invoice_map.put("reference_number",estimate_number);
- supply_invoice_map.put("notes",estimate.get("notes"));
- supply_invoice_map.put("terms",estimate.get("terms"));
- supply_invoice_map.put("invoiced_estimate_id",estimate_id);
- // Link to estimate
- supply_invoice_map.put("zcrm_potential_id",zcrm_potential_id);
- // CRM deal link
- supply_invoice_map.put("ignore_auto_number_generation",false);
- // Auto-generate invoice number
- supply_invoice_map.put("is_inclusive_tax",false);
- // Match your sample
- supply_invoice_map.put("discount",0);
- // From quote
- supply_invoice_map.put("shipping_charge",0);
- // From quote
- supply_invoice_map.put("adjustment",0);
- // From quote
- // Convert map to JSON string for API
- parameters_data = supply_invoice_map.toString();
- // Invoke URL to create Supply Invoice
- response = invokeurl
- [
- url :base_url
- type :POST
- parameters:parameters_data
- connection:"zohobooks"
- ];
- info response;
- }