Home OneHash CRM Customize

OneHash CRM Customize

CRM customization helps tailor your CRM with custom fields, automation, and integrations to boost sales, improve customer experience, and streamline business workflows.
By Frappe Content licensed CC-BY-SA 3.0
104 articles

Fetch child table values using Jinja tags

Fetch child table values using Jinja tags Jinja templating can be used to reference any field on any DocType in OneHash. This can simply be done by calling {{doc.field_name}} on a print format, where 'doc.name' is the variable name for a certain field. However this approach does not work for Child Tables inside a DocType. This article will help you traverse and display all rows pertaining to a child table inside any DocType. Pre Requisites We would require the variable name of the child table on the corresponding DocType. This can be viewed from the 'Customize Form' section for the required DocType. The same is illustrated below We will also require the variable names of all the fields inside the child table which need to be referenced. This can be obtained from the 'Customize Form' section of the corresponding child table as shown below Method 1. Displaying rows of a Child Table on an unordered list {% for row in doc.items %} Item Code: {{ row.get_formatted("item_code", doc) }} Quantity: {{ row.get_formatted("qty", doc) }} Rate: {{ row.get_formatted("rate", doc) }} Amount: {{ row.get_formatted("amount", doc) }} {% endfor %} The output on a print format would be as follows Method 2. Displaying rows of a Child Table as a table The output on a print format would be as follows This template can be used for reference. Any additional fields on the child table field can be fetched in a similar manner, by amending the Jinja template.

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

Authorization Rule

| Authorization Rule Authorization Rule allows configuring a custom authorization / approval on a documents, based on conditions defined. Example: If a Sales Order's Grand Total exceeds $1,000, then it should be verified/Submitted by the Sales Manager only, even if Sales User has submit permission. On the same lines, you can define authorization rule based on the fields like Net Total, Grand Total, Discount % and specify who would be document approver if authorization condition is matched. Creating Authorization Rule To access Authorization Rule, go to: ++Search Authorization Rule in the Awesome Search Bar++ Let's consider an detailed example of an Authorization Rule to learn better. Assume that the Sales Manager needs to authorize Sales Orders, only if it's Grand Total value exceeds 10,000. If the Sales Order value is less than 10,000, then even Sales User will be able to submit it. It means Submit permission of Sales User will be restricted only up to Sales Order of Grand Total less than 10,000. 1. Go to the Authorization Rule list, click on New. 2. Select the transaction on which Authorization Rule will be applicable. This functionality is available for limited transactions only. 3. Enter the Authorized Value etc. This depends on the field you selected in Based On. 4. Select Based On. Authorization Rule will be applied based on the value selected in this field. 5. Select Applicable Role. This is the role on which this Authorization Rule will be applicable. As per the example, it'll be Sales User. 6. To be more specific you can also select Applicable To User if you wish to apply the rule to a specific Sales User, and not all Sales Users. 7. Select Approving Role. This is the role that can approve forms over the Authorized value. It will be Sales Manager as per the example. 8. You can also select a specific Sales Manager. 9. Save. If Sales User tries submitting Sales Order of value higher than 10,000, then he will get an error message. ||| If you wish to restrict Sales User from submitting Sales Orders, then instead of creating Authorization Rule, you should remove submit privilege for Sales User from Role Permission Manager. Documents on which Authorization Rule can be applied - Sales Order - Purchase Order - Quotation - Delivery Receipt - Sales Invoice - Purchase Invoice - Purchase Receipt - Appraisal Fields on which Authorization Condition can be defined - Grand Total - Average Discount - Customer-wise Discount - Item-wise Discount

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

Documents and Reports : Print Format

| Customize Print Format Print Formats are the layouts that are generated when you want to Print or Email a transaction. This feature comes handy for all the transactions in OneHash like all the sales and purchase transactions, HR documents and lot more. In OneHash , there are three types of Print Formats, namely, Standard Print Format, Custom Print Format and HTML Print Format. Standard Print Format Every Printable Document Type in OneHash will have it's own Standard Print Format which gets generated by the Frappe Framework. The field placement in the Standard Print Formats will be dependent on the position of the respective fields in the document. Any changes made to the Standard Print Format will have to be done using a Customize Form. You can also checkout adding fields in Print Formats. Custom Print Format You can also create your own custom Print Formats by using a tool called Print Format Builder. This tool will help you in making a simple Customized Print Format by dragging and dropping fields in a format as per your preference. Once a Print Format is created using a Print Format Builder, then it will be available for selection in the Print Format List, after Standard. For creating Custom Print Formats, OneHash comes with several pre-defined templates in three styles, namely, Modern, Monochrome and Classic. To create your versions, open an existing template from: ++Setup > Printing > Print Formats++ HTML Print Format For creating an HTML Print Format, you would require some knowledge of HTML, CSS, and Python. Here is an example of how a Print Format can be design which has very specific format. Print Formats are provided on the server-side using the Jinja Templating Language. All forms have access to the doc object which contains information about the document that is being formatted. You can also access common utilities via the frappe module. To avail support when creating an HTML based print format, you can refer to OneHash Community forum, or start a new post for your query. For styling, the Bootstrap CSS Framework is provided and you can enjoy the full range of classes. References Jinja Templating Language: Reference Bootstrap CSS Framework Print Settings To edit/update your print and PDF settings, go to: ++Setup > Printing and Branding > Print Settings++ Example ||| Notes - To get date and currency formatted values use, doc.get_formatted("fieldname") - For translatable strings, use {{ _("This string is translated") }}

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

Custom Translations

| Custom Translations With Custom Translations, user can print the customer's and supplier's document in their local language. For example, if you have customers from Germany and France who want quotations in German and French, it's possible using Custom Translations. | 1. Set the Language In the Customer master, select the default Language. Say, the default language for the Customer is Spanish. Same way, you can also set default language in the Supplier master. | 1.1 Print Preview in the Party's Language In the Print Preview of a transaction, values will be translated into the party's language. Customer Quotation print preview in customer's default language. Supplier Quotation print preview in supplier's default language. | 1.2 Changing the print language in the preview User has the option to select an alternate language on print view. | 2. Custom Translation Users can set their custom translations using Custom Translations form. For example, if a user wants to set a description of a product in the customer's language (Spanish). For that, create a new translation with language as Spanish, enter source data and translated information. ++Home > Customization > Other > Custom Translations > New++ The translation is applied when the user selects the language as Spanish on supplier Quotation's print preview. Note that no translation is applied for the second item's description since it wasn't created in the Translation list.

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

Server Script

Server Script A Server Script lets you dynamically define a Python Script that is executed on the server on a document event or API | 1. How to create a Server Script To create a Server Script 1. You must set server_script_enabled as true in site_config.json of your site. 2. To add/edit Server Script, ensure your role is System Manager. 3. Create a new server script via "New Server Script" in the toolbar. 4. Set the type of server script (Document Event / API). 5. Set the document type and event name, or method name, script and save. | 2. Features 2.1 Enabling Server Script Server script must be enabled via site_config.json bench --site site1.local set-config server_script_enabled true 2.2 Document Events For scripts that are to be called via document events, you must set the Reference Document Type and Event Name to define the trigger - Before Insert - Before Save - After Save - Before Submit - After Submit - Before Cancel - After Cancel - Before Delete - After Delete - Before Save (Submitted Document) - After Save (Submitted Document) 2.3 API Scripts You can create a new API that can be accessed via api/method/[methodname] by the script type "API" If you want the guest user to access the API, you must check on "Allow Guest" The response can be set via frappe.response["message"] object 2.3 Security Frappe Framework uses the Restricted Python library to restrict access to methods available for server scripts. Only the safe methods, listed below are available in server scripts json # json module dict # internal dict _ # translator method _dict # frappe._dict internal method frappe.flags # global flags FORMATTING ****frappe.format # frappe.format_value(value, dict(fieldtype='Currency')) frappe.format_value # frappe.format_value(value, dict(fieldtype='Currency')) frappe.date_format # default date format frappe.format_date # returns date as "1st September 2019" SESSION frappe.form_dict # form / request parameters frappe.request # request object frappe.response # response object frappe.session.user # current user frappe.session.csrf_token # CSRF token of the current session frappe.user # current user frappe.get_fullname # fullname of the current user frappe.get_gravatar # frappe.utils.get_gravatar_url frappe.full_name = # fullname of the current user ORM ****frappe.get_meta # get metadata object frappe.get_doc frappe.get_cached_doc frappe.get_list frappe.get_all frappe.get_system_settings DB ****frappe.db.get_list frappe.db.get_all frappe.db.get_value frappe.db.get_single_value frappe.db.get_default frappe.db.escape UTILITIES frappe.msgprint # msgprint frappe.get_hooks # app hooks frappe.utils # methods in frappe.utils frappe.render_template # frappe.render_template, frappe.get_url # frappe.utils.get_url socketio_port # port for socketio style.border_color # '#d1d8dd' guess_mimetype = mimetypes.guess_type, html2text = html2text, dev_server # True if in developer mode | 3. Examples 3.1 Change the value of a property before change Script Type: Before Save 3.2 Custom validation Script Type: "Before Save" 3.3. Auto Create To Do Script Type: "After Save" 3.4 API - Script Type: API - Method Name: test_method Request: /api/method/test_method

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

Custom Scripts

Custom Scripts If you wish to change any OneHash form formats, you can do so by using Custom Scripts. For example, if you wish to add a submit button after saving, to a Lead form, you can do so by creating your own script. Custom Scripts are small code snippets that are executed in the browser to extend or customize the standard functionality of OneHash. ++Home > Customization > Form Customization > Custom Script++ | 1. How to Create a Custom Script Create a Custom Script (you must have System Manager role for this): 1. Go to Custom Script List and click on New. 2. You will be redirected to a page wherein you will be asked to enter the DocType for which you wish to create a Custom Script. 3. Type your Custom Script. 4. Save. | 2. Notes 1. Server Custom Scripts are only available for the Administrator. 2. Client Custom Scripts are in JavaScript and Server Custom Scripts are in Python. 3. For testing, make sure to go to Tools > Clear Cache and refresh after updating a Custom Script. Custom Script Examples Here are some custom script examples: - Fetch Values From Master - Date Validation - Generate Item Code Based On Custom Logic - Make Read Only After Saving - Restrict Cancel Rights - Restrict Purpose Of Stock Entry - Restrict User Based On Child Record - Sales Invoice Id Based On Sales Order Id - Update Date Field Based On Value In Other Date Field - Custom Button - Filter Options In Select Field - Fetch Value In Child Table Field - Hide Buttons In Form View - Rename Buttons In Form View - Lock Timesheets Based On Date

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

Customization : DocType

DocType A DocType is the core building block of any application based on the Frappe Framework. It describes the Model and the View of your data. It contains what fields are stored for your data, and how they behave with each other. It contains information about how your data is named. The forms like Sales Order, Sales Invoices, Work Order are added as DocTypes in the backend. DocType allows you to insert custom forms in OneHash as per your requirement. For more understanding on DocTypes, click here To create a new DocType, go to: ++Setup > Customize > Doctype > New++ | How to create a New DocType: 1. Name: Enter the name of the new DocType. 2. Module: Enter which module would you like the new DocType to be added to. 3. Save. Additional Details 1. Fields You can choose to add as many fields as you want. The Label, Field Type, Mandatory Fields and other associated Options can also be added here. Learn more about Field Types here. 2. Naming Here you can choose if you would want each of your forms within this DocType to be named automatically. A given in the description, you can select the pattern for naming of the forms. The same can be a Field within the DocType, Naming Series, Prompt, A defined Naming Series, or a Format based Name. For Naming, you can also add a Description and the Name Case (as a Title Case or UPPER CASE)for your convenience. 3. Form Settings Additional Settings for the Form, Image Fields, Attachments, Timeline etc. can be configured here. To know more about Form, visit Customize Form. 4. View Settings Here, you can define the View settings for the DocType, like, Search Fields, Default Sort Field, Default Sort Order etc. 5. Permission Rules You can define the Permission Rules for the DocType here, and configure which users would be able to use or make changes to this DocType. Learn more about Users and Permissions here. 6. Web View You can select whether you would want a Web View of this DocType or no. Having a Web View for a DocType will allow your website users to have access to the Forms. More Properties - Is Submittable: You can select if you want this DocType to only be 'Saved' or to also be 'Submitted' by checking and un-checking this box. - Is Child Table: You can define if you want the New DocType to be a Child Table within another DocType. Checkout Child Table for more infortmation. - Is Single: If checked, this Doctype will become a single form, like Sales Order, which user will not be able to re-produce. For e.g., Selling Settings in Sales Module is a Single DocType. - Is Tree: A few DocTypes in ERPNext are structured as Trees, wherein there are some Parent DocTypes and some Children DocTypes. E.g., Doctype Company is structured as Tree, there are Parent Companies as well as Child Companies, which we call subsidiaries. If you want your DocTypes to be structured similarly, you can enable this option. - Quick Entry: You can select if you want a Quick Entry to be made for this DocType. This will allow you to enter only a few mandatory details and save the DocType, so that a Quick Entry is made. For example, check Quick Entry in Journal Entry. - Track Changes: You can select this option if you want to maintain a log of the changes made to each Form. Check Out Document Versioning for more understanding on this. - Track Seen: You can select this option if you want to maintain a log of all the Users who have seen this Form. - Track Views: You can select this option if you want to maintain a log of all the times each User has Viewed this Form. - Custom: This field will be checked by default when adding Custom Doctype. Similarly, if you are customizing a DocType which already exists in the system, this field by default would be unchecked.

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

Customize Form

Customize Form Customize Form is a tool which enables you to make changes to a Form Type or a Document Type (DocType) on the front-end. It allows you to insert Custom Fields as per your requirement or customize the properties of standard fields. Before we venture to learn the Form Customization tool, click here to understand the architecture of forms in OneHash. It will help you in using the Customize Form tool more efficiently. To access Customize Form, go to: ++Home > Customization > Form Customization > Customize Form++ You can also go to the list view of any DocType and select Customize from the Menu options. | How to Customize a Form 1. Click on Customize Form. 2. You will be redirected to a page wherein you will be asked to Enter Form Type. 3. Once you enter the Form Type in this field, the page further expands and you will be able to see multiple features. Options While Customizing a Form 1. Change Label: This field gets fetched via Custom Translation. You can change the name of the field to suit your industry/language. E.g., if you are a services business and you want to change the Label from 'Customer' to 'Consumer', the same can be done via Custom Translations and the same shall be reflected here. 2. Title Field: This field can be used to generate the title while viewing the lists. Any "Data" type field can be set as the Title Field while viewing the forms in the list view. E.g., if you wish to view the list of all your employees with the Title field as the 'Employee Code' instead of Employee Name, the same can be configured here. Check out Document Title for more information. 3. Default Print Format: For a single DocType, there could be multiple Print Formats. Here you can select the default Print Format for the seleted DocType. For e.g., a company may have different Letter Heads for different purposes which can be configured through Print Formats. However, you can select two different Default Print Formats for a Sales Order and a Appointment Letter. Check Custom Print Formats for more information. 4. Image Field: You can select an "Attach Image" Field for your Image Field. This becomes the Image representing that particular DocType. E.g., the 'Image Field' for an Employee could be their photograph or a snapshot of their ID cards; the same can be configured here. 5. Max Attachments: You can enter the maximum number of attachments that could be added to this DocType. Check out Increase Max Attachments for more information. 6. Search Fields: While creating any DocType, you may want to link a particular field to another DocType. For ease in selection, you can also ensure that you are able to see the value of another field of the latter DocType in the search result. For more information click here 7. Sort Field: Records in any DocType List are generated based on the Field that you set at the Sort Field over here. For E.g., For Items, if you want your list to be generated as per Item Name, you can configure the same here. 8. Sort Order: You can select whether you want the Sorting to be done in Ascending Order or Descending Order. To get more understanding on Sort Field and Sort Order, checkout Customizing Sorting Order in the List View. More Properties - Hide Copy: This box, when checked, restricts a User to create a 'Copy' of a particular Form. - Is Table: This option is available only while customizing the Forms which are present in table forms in the system. For e.g., if you are creating an Item Table to be added into a Custom Form, you can enable this option. Check out child table for more information. - Quick Entry: Checking this box will allow you to create a 'Quick Entry' using a particular form. This means that whenever a user is creating this Form from another existing Form, a box will Pop Up which will allow the user to create the DocType by entering only the basic details. For example, check Quick Entry in Journal Entry. - Track Changes: Checking this box will ensure that any changes made by any of the users to this DocType will be tracked and displayed. - Track Views: This option will give you a trail of all the views towards this particular DocType. - Allow Auto-Repeat: This option, if checked, will allow you to enable Auto Repetition of a DocType periodically. E.g., if there is a Sales Order which has to be made multiple number of times, you can enable this option and then Set Up Auto Repeat for any particular Sales Order. - Allow Import: This option will allow the user to Import data from any files. Checkout Data Import Tool for more information. - Show preview popup: This option was introduced in Version 12. If checked, a small popup will appear on hover of links of this document type (in list view and other link fields). This popup will contain the mandatory fields of the document and the fields for which ++in_preview++ is checked. Link Preview Hovering on links in the list view and other link fields will show a small popup with information about the document. You can view information about items, quotations, and other doctypes without opening the form. Once you click Update, your Customizations will be updated to the Form. Customizing the Fields Every form in OneHash has a standard set of fields. If you need to capture some information, but there is no standard field available for it, you can insert Custom Field in a form as per your requirement. Adding, editing or deleting of Fields can also be done here. You can also place the fields as per your requirement in the form by adding it below or above any other already present fields. How to Customize Form

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

Custom Field

Custom Field Every form in OneHash has a standard set of fields. If you need to capture some information, but there is no standard Field available for it, you can insert Custom Field in a form as per your requirement. You can go to Customize Form and add the Field in a particular Form or a Document type (hereafter referred to as DocType) . To access Custom Field, go to: ++Home > Customization > Form Customization > Custom Field++ You can also go to the list view of any DocType and select Customize from the Menu options. | 1. How to create a Custom Field 1. Go to the Custom Field list and click on New. 2. Document: Select the Document in which you need to add the Custom Field. 3. Label: Enter what Label would you like to give to your Custom Field. 4. Field Type: OneHash already has a set of Field Types defined which can be fetched from this drop-down menu. You can select the Type of your Custom Field from within this menu. You can also go to Customize Form and add, edit or remove a Field in a particular Form. Additional Details 1. Options: This Field comes into picture when you would want your data to be specific or specify the data. E.g., when you have selected the Field to be a 'Select Field', you would be required to enter the selection options here. 2. Fetch From: When you want your Custom Field to be 'Link Field', you would be required to specify the Form to which this Field is to be linked. E.g., you want to create a Custom Field 'Project' in the DocType 'Item'. You would be required to enter to specify your Field Type as 'Link' and enter 'Project' in the Fetch From Field to ensure that the Field is updated with the list of all the required DocTypes. 3. Fetch If Empty: This check-box will ensure that this Field will be not overwritten based on Fetch From if a value already exists. 4. Default Value: Enter the default value of the Field which you would want to be fetched for this Field. 5. Depends On: You can define a condition here for the Field to be displayed. E.g., in the DocType Item, two fields 'Asset Category' and 'Asset Naming Series' will only appear if the Field 'Is Fixed Asset' is checked. The dependency condition here would be is_fixed_asset. 6. Field Description: You can add the description of the Field here which can be displayed below this Field. 7. Permission Level: This will allow you to specify which roles within your organization will be able to edit this Field. You can go through Role Based Permissions for more understanding on this. 8. Width: This will define the width allocated to this Field while viewing the Form in a Grid View. 9. Columns: You can define the number of Columns in the grid view of the DocType. 10. In Preview: If Show Prview Popup for the document type is checked, the Field will be included in the popup that appears on hovering over links of the document type (in list view and other link fields). More Properties - Is Mandatory Field: This box can be checked if you want to make this Field mandatory while submitting a DocType. - Unique: Check this box when you want the value of this Field to be unique. This can be done in cases where the Custom Field is for a code or an Identification Number. E.g., Item Code in case of Item, GST Number in case of Customer. - Read Only: When you want this Field to be a read only or a non-editable Field. In this case, the value of the Field shall be auto-fetched from other fields. - Hidden: Check this Field when you want this Field to be hidden, or to hide an existing Field. - Print Hide: In cases that you want the print button to be hidden from the Print Format. Checkout Fields in Print Format for more information. - No Copy: Checking this box will restrict copying of this Field in the DocType. - Allow on Submit: This will allow you to make changes to the Field even after you have submitted the Form. Checkout Editing Value in Submitted Document for more information. - In List View: This will make the field visible in the List View of the DocType. - In Standard Filter: The field will become a standard filter in the List view of the Document. - In Global Search: When this box is checked this Field can be searched form the Global Search. - Bold: This will make this Field type bold, this adds more value to the Field. - Report Hide: This field will not be visible in the reports when you check this box. - Ignore XSS Filter: This will allow you to view this Field without the HTML tags. - Translatable: When this box is checked, it becomes translatable while applying Custom Translations to this.

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

Users and Permissions

User Permissions User permissions are a way of restricting user access to particular documents. - Role-based permissions allow setting complete (by default) access to a document type (doctype) like Sales Invoice, Orders, Quotation, Etc. This means that when you assign a Sales User role to a user, they can access all the Sales Orders and Quotations. - User Permissions can be used to restrict access to selected documents based on the link fields. For example, consider that you do business with multiple territories, and you want to restrict access of certain Sales Users to Quotations/Sales Order belonging to a particular territory. This can be done via User Permissions. The restrictions can be set on Customer, Supplier, Customer Group, Supplier Group, Etc. - Setting User Permissions are particularly useful when you want to restrict based on: 1. Allowing the user to access data belonging to one Company 2. Allowing the user to access data related to a specific Customer or Territory To access User Permissions, go to: ++Home > User and Permissions > User Permissions++ | 1. How to create User Permissions 1. Go to the User Permissions list, click on New. 2. Select the user for which the rule has to be applied. 3. Select the type of document to be allowed (for example, "Company"). 4. Under For Value, select the specific item you want to allow (the name of the "Company). 5. If you check 'Is Default', the value selected in 'For Value' will be used as a default for any future transactions by this user. If company DAV High School is selected as 'For Value', this Company will default for all future transactions by this user. || Note: Only single user permission can be set as default for a particular document type for a specific user. | 2. More User Permission actions 2.1 Advanced control In Advanced Control, you can have better command over where the User Permission is applied. 2.1.1 Applicable For - You can optionally apply for user permissions only for specific document types by setting the Document Type after unticking the Apply To All Document Types checkbox. Setting Applicable For option will make the current user permission applicable only under the selected Document Type master. - In the above User Permission, the user will access only Sales Orders of the selected Company. || Note: If Applicable For is not set, User Permission will apply across all related Document Types. 2.1.2 Hide Descendants The value of Allow could be a Doctype with a Tree View, which will have records with a parent-child or ancestor-descendant relationship. Let's assume For value, 'DAV High School.', has a child company 'BEML'. When a User Permission is created for 'DAV High School', permissions for its descendants are granted as well. Hide Descendants is visible only on selecting a Tree View Doctype. By enabling this checkbox, permissions for descendants of For value will not be granted. A user who can view records of 'DAV High School' will not view those of 'BEML'. 2.2 Ignoring User Permissions on Certain Fields Another way of allowing documents to be seen by everyone that User Permissions have restricted is to tick "Ignore User Permissions" on a particular field by going to Customize Form . For example, you don't want Assets to be restricted for any user, then select Asset in form type. Under the fields table, expand the Company field and tick on "Ignore User Permissions". 2.3 Strict Permissions This restricts user access to documents in a stricter way. To know more, go to the System Settings page. 2.4 Checking How User Permissions are Applied Finally, once you have created your air-tight permission model, and you want to check how it applies to various users. You can see it via the Permitted Documents for User report. Using this report, you can select the User and document type and view which documents a particular user can access. Ticking on the Show Permissions checkbox will show the read/write/submit and other access levels. || Note: If you cannot access Sales Order or any other document type in this list, make sure you've set the roles correctly.

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

Fetch child table values using Jinja tags

Fetch child table values using Jinja tags Jinja templating can be used to reference any field on any DocType in OneHash. This can simply be done by calling {{doc.field_name}} on a print format, where 'doc.field_name' is the variable name for a certain field. However this approach does not work for Child Tables inside a DocType. This article will help you traverse and display all rows pertaining to a child table inside any DocType. Pre Requisites We would require the variable name of the child table on the corresponding DocType. This can be viewed from the 'Customize Form' section for the required DocType. The same is illustrated below We will also require the variable names of all the fields inside the child table which need to be referenced. This can be obtained from the 'Customize Form' section of the corresponding child table as shown below Method 1. Displaying rows of a Child Table on an unordered list {% for row in doc.items %} Item Code: {{ row.get_formatted("item_code", doc) }} Quantity: {{ row.get_formatted("qty", doc) }} Rate: {{ row.get_formatted("rate", doc) }} Amount: {{ row.get_formatted("amount", doc) }} {% endfor %} The output on a print format would be as follows Method 2. Displaying rows of a Child Table as a table The output on a print format would be as follows This template can be used for reference. Any additional fields on the child table field can be fetched in a similar manner, by amending the Jinja template.

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

Renaming Documents

Renaming Documents - Using the Renaming feature, you can change the name of a master document. - Using this feature you can also merge two master documents into a single one. - Check List of Renamable Documents given below for the list of all the documents that can be renamed in the system. | Steps to rename a Document 1. Go to the document that you wish to rename. 2. From the drop-down menu, select the option 'Rename'. - Alternatively, you can also click on the Title of the document, which will result in a pop-up, wherein you will be able to change the name of the document that you wish to rename. | Effect of Renaming Renaming a document will affect all the existing transactions linked to this document. E.g., If you are changing the Item Code for an Item, the same will be updated in all the existing transactions wherein this Item is linked. | List of Renamable Documents Following is the list of all the documents that can be renamed. 1. Contact 2. Address 3. Warehouse 4. Supplier 5. Customer 6. User 7. Sales Partner 8. Project 9. Cost Center 10. Item Group 11. Item 12. Company 13. Role 14. Earning Type 15. Note 16. Serial No 17. Account 18. Territory 19. Terms and Conditions 20. Supplier Group 21. Workstation 22. Employee 23. Sales Taxes and Charges Master 24. Purchase Taxes and Charges Master 25. Price List 26. Party Type 27. Mode of Payment 28. Designation 29. Department 30. Deduction Type 31. Customer Group 32. Brand 33. Branch 34. Sales Person

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

Get a descriptive layout of your data using the Kanban Board

Kanban Board Kanban Board is a tool that provides a descriptive layout of your data in OneHash based on status and a virtual board. This board shall consist of cards that represent various Documents listed in a particular Document Type aligned as per the stage of operation of the transactions represented by Status Columns. The card status can be changed easily by dragging and dropping the cards across the board. A Kanban Board helps to visualize, control and optimize workflow while collaborating with the entire team on a real-time basis. | Creating a new Kanban Board - To create a Kanban board in OneHash click the Kanban dropdown on the sidebar, and select New Kanban Board. | Adding new Card/Document - To add Cards on Kanban Board click Add Tasks. You can Edit card details by clicking on the card and it will take you to the Task Doctype where you can further add and edit card details. | Update Cards/Document Status - Based on the Task status you can drag and drop the cards in the respective column. - For example, if the task is a work in progress you can move the card for the task from the status ‘Open to Working’. | Manage Columns - To add more columns in the Kanban board click on Add columns. - You can move the columns as per your priority. - You can also assign colors to columns. - You can also Archive and Restore the columns added in a Kanban board. - To do so click Archive in the drop-down menu on the card. Once archived you can restore the column from the list of the archived columns in the Kanban board. | Filters - You can create multiple Kanban Boards based on different filters. To save filters for a Kanban Board, click on Menu and then "Save filters".

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

Dashboard: Get a quick view of the key performance indicators

Dashboard The dashboard provides an at-a-glance view of key performance indicators relevant to the business process. Each Dashboard consists of one or more than one Dashboard Chart each of which is configured with a data source known as Dashboard Chart Source. To access Dashboard, go to, ++Home > Customization > Dashboards > Dashboard++ | 1. How to Create a New Dashboard 1. Go to Dashboards List and click on New. 2. Enter the Module Name for which you would want to see the Dashboard. 3. Enter the Dashboard Charts that you would want to be parameterized for this Dashboard. 4. Click Save. When you click on Show Dashboard, you will be able to see the Dashboard giving the graphic representation of your transactions. | 2. Adding Charts to Dashboard - Add charts to this dashboard by either selecting existing Dashboard Chart or creating new ones. - Save changes and click on the Show Dashboard button to see the dashboard. | 3. Creating a New Dashboard Chart To create a new Dashboard Chart, go to ++Home > Customizations > Dashboards > Dashboard Chart > New++ - Provide a name for the chart, this will show up in the dashboard as the chart label, and select a Dashboard Chart Source as the data source for this chart. ${color}[#ff0004](Note: New Dashboard Chart Source can only be created by the Administrator User in Developer Mode.) - After setting the Chart Source field, the filters table will be shown - Click the table to edit filters. - A modal will be shown to set filters. Click Set to set filters. - After setting the Chart Source field, the Filters table will be updated with selected filter values. | 4. Using Dashboards Every chart will be shown according to the fields set in the corresponding Dashboard Chart. The result from the dashboard chart source is cached to avoid redundant queries. Since the chart data can be stale, each chart will also show the last synced time. - The filters used to generate the chart data can also be changed by clicking Set Filters. The chart will be refreshed automatically according to the recently set filters. - To get the most recent data each chart has to be refreshed forcefully by clicking the Force Refresh button from the dropdown menu.

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

How to set up Auto Repeat?

Auto Repeat feature helps you create certain documents automatically in a given time period. For Example: Assuming that you follow deferred expense system for some items. It requires you to create same Journal Entry every month to credit Deferred Expense account and debit Expense Account. You can create first Journal Entry manually for it, and then create auto-repeat transaction for it. To access Auto Repeat, go to: Search Auto Repeat in the awesome bar Select Auto Repeat list | How to set up Auto Repeat 1. Customize the Form - Go to: Home > Customization > Form Customization > Customize Form. - Select the form in which you want to allow creation of repeatable documents. - Check 'Allow Auto Repeat' to allow the creation of repeatable documents for that Form. This is necessary for the document type to show up in the Reference Document field under the Auto Repeat doctype. 2. Set up Auto Repeat - Go to Home > Settings > Automation > Auto Repeat > New. - Select the Reference Document Type, like Journal Entry or Sales Invoice, etc. - Select the Reference Document. This is the individual document that you want to repeat. - Set the Start Date and End Date (optional). If End Date is not specified, recurring documents will be created, unless the Auto Repeat is disabled. - Set the Frequency for creating repeatable documents (Daily, Weekly, Monthly, Quarterly, Half-yearly, Yearly). - Save. 3. Set up Auto Repeat directly from the document You can also set a document on Auto Repeat by clicking the Repeat option from the Menu in the Toolbar. ||| Note: If a document is already on Auto Repeat, the Repeat option is not available. Once you click on Repeat, a prompt for Auto Repeat will show up. Fill in the details and click on Save. | Features 1. Submit on Creation If the reference document type is submittable, you get an option called Submit on Creation. If this is checked, your document will be submitted on creation. 2. Notify by Email If you want to notify certain contacts whenever the recurring documents are created, you can check 'Notify by Email' in the Notification section of Auto Repeat. This will send the auto-generated recurring documents to the specified Email Addresses. Fields for the same are explained below: - Recipients: Defines the Email IDs of the recipients for recurring document creation emails. - Get Contacts: This button will fetch the contacts linked to the document that is set on Auto Repeat and fill up the Recipients field with the same. - Template: You can choose an Email Template for the email. This will fill up the Subject and Message fields as well. - Subject: Subject for your Email (example: Recurring ToDo created successfully). - Message: Message to be sent in the Email. - Preview Message: This button will show a preview of the message. - Print Format: Select a print format to define document view which should be emailed to customer. ||| Note: If the document you are setting up Auto Repeat for, is submittable, ensure that "Allow Print for Draft" is enabled in Print Settings to receive the new recurring document in Auto Repeat Notification Email. If this is not enabled, you will be notified about the recurring document creation without the document. 3. Repeat on a particular day If the frequency is set as Monthly, Quarterly, Half-yearly or Yearly, then it will create recurring documents in the respective months on the same day as the 'Start Date' of Auto Repeat. If you want to create recurring documents on some other day then you can set one of the following: - Repeat on Day: Day of the month on which recurring document will be created. For example, if frequency is Monthly and you enter 7 then it will generate recurring document on 7th of the respective month. - Repeat on Last Day of the Month: This option is available as the last day of every month is different. For example, in a leap year last day of Feb is 29th, and it is 28th otherwise. If you check this option, it will create recurring documents on the last day of the respective months. 4.Ability to select weekdays for Auto Repeat Auto Repeat with Weekly frequency allows you to select the days on which you want the recurring documents to be created. 5. Auto Repeat Frequency on the sidebar When a document is set on Auto Repeat you can see the Auto Repeat frequency on the sidebar. You can click on the status to see the linked Auto Repeat document. 6. Disable Auto Repeat If you check this field it will stop creating recurring documents and unlink the Auto Repeat document from the Reference Document.

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

How to create a Milestone Tracker in OneHash?

Milestone Tracking ||| Introduced in Version 12 You can automatically track milestones based on the lifecycle of a document if it undergoes multiple stages. The configuration for Milestone setting can be set in Milestone Tracking and each milestone is updated in ** Milestone** . To access Milestone Tracker, go to: ++Home > Settings > Milestone Tracker++ | Creating a Milestone Tracker 1. Click on New. 2. Set the Document Type to track (example: "Issue"). 3. Set the field that represents stages (example: "Status"). || Note: A milestone stage can be defined by Link or Select properties. Once this is set, a new Milestone record is created every time the status of any issue is changed. The Milestone can be viewed in the timeline of the view: ||| Note: Milestones work independently of Versions. | Features Milestones can be a great source for reporting and notifying. For example, if Lead Qualification is a milestone on "Lead", milestones can help generate reports on the number of leads being qualified in a period. 1. Using Milestones with Dashboards Used along with Dashboards, Milestones can help track the trends in milestones. For example, if "Qualification" is tracked as a "Lead Stage", a Dashboard on Milestone filtered by Qualification will show the trends of leads qualified. 2. Using Milestones with Energy Points Energy Point Rules can be defined to automatically give Energy Points to users who achieve a milestone. This can be used to incentivize action on transactions at various levels. | 3. Related Topics 1. Tracking Versions 2. Dashboards 3. Energy Point System

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

How to create session defaults?

Session Defaults Session Defaults are configurable default values set during user sessions. Consider a scenario where you have 8 companies set up in your account and you have to set the 'Company' field every time while creating a new Sales Order. This is a very time-consuming process when you have to deal with multiple Sales Orders daily. | How to Create Session Defaults 1. Set up the Session Default Settings - Go to Session Default Settings. - Select the DocType for which you want to set Session Defaults. - Save. 2. A 'Session Defaults' prompt will appear. Set the default values for the respective fields and Save. After saving, the default values will be set everywhere. You can open a new Sales Order and check. The company field is set to the default Company. Open a new Task. The 'Project' field is set to the default Project. Open a report, for example, General Ledger. Company filter is set to the default Company. | Features Defaults cleared on logout The default values are set for that particular user for the ongoing session. Once logged out, these default values are cleared. 'Settings' button visibility The Settings button is only visible to the System Manager or to a person having permission to access 'Session Default Settings'. This button navigates you to Session Default Settings where you can add or remove the document types for which you want to set Session Defaults.

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

Setting Up Naming Series for documents

Masters and transactions can be given prefixes in the form of naming series. OneHash allows you to make prefixes to your documents, with each prefix forming its own series. For example, a series with prefix INV12#### will have numbers INV120001, INV120002, and so on. You can have multiple series for all your transactions. For example, Sales Invoice IDs like these can be generated: - ACC-SINV-.YYYY.- - SINV12#### - SALESINV-00#### You can define or select the Naming Series pattern from: ++Home > Settings > Naming Series++ | Setting up Naming Series for Documents 1. Select the transaction for which you want to make the series. The system will update the current series in the text box. 2. Edit the series as required with unique prefixes for each series. The first prefix will be the default prefix. Each new prefix Naming Series must be added on a new line. The newly added naming series will be available in the document. 1. If you want the user to explicitly select a series instead of the default one, check the “User must always select” checkbox. There will be no default naming series if this is ticked. 2. You can also update the starting point of a series by entering the series name and the starting point in the “Update Series” section. 3. Click on the Update button to update the set of Naming Series for the selected document. || Note: To see the newly added Naming Series, click on Settings > Reload. | Financial Year in Naming Series You can also show the financial year in the Naming Series. By default, if you enter 'YYYY' in the naming series, it'll pick up the current year. To set naming series based on the fiscal year, enter something like 'ACC-SINV-.19-20.-' where 19-20 is the current Fiscal Year. It is common to have a separate series for each financial year. As you can see, in the following screenshot of a Sales Invoice, the year 2019 is listed: | Updating the current value for existing Naming Series You can change the starting/current sequence number of an existing series. - Under the Update Series section, select the prefix whose sequence is to be changed. - The current value will be fetched and displayed. - Change starting/existing sequence number if needed. - Click on Update Series Number. For example, if the current Sales Order series number is at 16, and you want to restart or set it as 50, enter 0 or 50 depending on your case. Any new Sales Order created will start from the new sequence number. To know more, visit this article. || Tip: You could have a separate series for each type of Customer or for each of your retail outlets. | Using Field Values in Naming Series Some companies prefer to make use of "short-codes" for suppliers, i.e. WN for company "Web Notes" that later can be used in naming series for quick identification. For example:

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

Notification Configurations

You can configure various notifications in your system to remind you of important activities. 1. The completion date of a Task. 2. Expected Delivery Date of a Sales Order. 3. Expected Payment Date. 4. A reminder of follow up. 5. If an Order greater than a particular value is received or sent. 6. Expiry notification for a Contract. 7. Completion/Status change of a Task. To access notification setup, go to: ++Home > Settings > Notification++ | Setting Up an Alert To set up a Notification: 1. Select the Document Type you want to watch changes on. 2. Define what events you want to watch under Send Alert On. Events are: - New: When a new document of the selected type is made. - Save/Submit/Cancel: When a document of the selected type is saved, submitted, or canceled. - Days Before/Days After: Trigger this alert a few days before or after the Reference Date. To set the days, set Days Before or After. This can be useful in reminding you of upcoming due dates or reminding you to follow up on certain leads of quotations. - Value Change: When a particular value in the selected type changes. - Method: Sends notification when a specific method is triggered. Eg: before_insert. - Custom: Send a notification to an Email Account selected 1. Set additional Conditions if required. 2. Set the recipients of this alert. The recipient could either be a field of the document or a list of fixed Email Addresses. 3. Compose the message. 4. Save. Setting a Subject You can retrieve the data for a particular field by using ++doc.[field_name]++. To use it in your subject/message, you have to surround it with ++{{ }}++. These are called Jinja tags. For example, to get the name of a document, you use ++{{ doc.name }}++. The following example sends an email on saving a Task with the Subject, "TASK#### has been created" Setting Conditions Notifications allow you to set conditions according to the field data in your documents. For example, if you want to receive an Email if a Lead has been saved as "Interested" as it's status, you put ++doc.status == "Interested"++ in the conditions textbox. You can also set more complex conditions by combining them. The above example will send a Notification when a Task is saved with the status "Open" and the "Expected End Date" for the Task is the date on or before the date on which it was saved on. Setting a Message You can use both Jinja Tags ++({{ doc.[field_name] }})++ and HTML tags in the message textbox. Setting a Value after the Alert is Set Sometimes to make sure that the Notification is not sent multiple times, you can define a custom property (via Customize Form) like "Notification Sent" and then set this property after the alert is sent by setting the Set Property After Alert field. Then you can use that as a condition in the Condition rules to ensure emails are not sent multiple times Example 1. Defining the Criteria 1. Setting the Recipients and Message | Slack Notifications If you prefer to have your notifications sent to a dedicated Slack channel, you can also choose the option "Slack" in the channel options and select the appropriate Slack Webhook URL. Slack Webhook URL A Slack webhook URL is a URL pointing directly to a Slack channel. To generate webhook URLs, you need to create a new Slack App: 1. Go to https://api.slack.com/slack-apps. 2. Click on "Create a Slack App". 1. Give your App a name and choose the right workspace. Once your app is created, go to the "Incoming Webhooks" section and add a new Webhook to Workspace. 1. Copy the created link, go back to OneHash and use it to create a new Slack Webhook URL in Integrations > Slack Webhook URL. 2. Select Slack and your Slack channel in the channel and Slack channel fields within your notification. Message Format Unlike Email messages, Slack doesn't allow HTML formatting. Instead, you can use markdown formatting: Slack Documentation Example: Order Overdue | System Notifications System notifications are introduced for Assignments, mentions, documents shared, and Energy Points. These notifications show up in the notifications dropdown on the the navigation bar's top right corner. We have also introduced an additional channel to send alerts - System Notifications: Choosing this channel will send a system notification when a notification is triggered, instead of an Email or a Slack notification. Clicking on the notification routes to the Notification Log document which contains the configured subject, message as well as the attached file, if Attach Print is set: If Email/Slack alerts and System Notifications both are required, the main channel can be set as Email or Slack and this option can be checked: 4. WhatsApp In Version 13 we have introduced an additional channel to send alerts - WhatsApp: Notifications WhatsApp Channel If you prefer to have your notifications sent to a WhatsApp number, you can also choose the option "WhatsApp" in the channel options and select the appropriate Twilio Number. Twilio Numbers can be added to Twilio settings in Frappe. WhatsApp messages can only be sent to numbers which have country codes in them. | Twilio Settings 1. Twilio Settings In order to configure Twilio settings, you need to first obtain Twilio credentials from your Twilio Account's account settings. You can only add those phone numbers that have been activated in your Twilio Account with WhatsApp access. Twilio Credentials 2. Message Format WhatsApp allows their users to only send those message templates that are pre-approved by them to your customers. Failure to do so might result in restrictions on your Twilio account. | SMS In order to use this channel, you would need to complete the configuration of SMS Settings.

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

How to link emails to document?

An email can be linked to multiple documents in OneHash. This can be done in the following two ways: - Email Aggregation in Contact, Customer, Supplier. - Automatic Email Linking. 1. Email Aggregation for Customer and Supplier Email Aggregation takes place in Contact, Customer, and Supplier. All the Emails sent or received from a Contact can be viewed in that Contact's Timeline and as well as linked Customer's or Supplier's Timeline. To enable Email Aggregation, do the following: - In a Contact, add Links for the Customer or Supplier respectively. - Now when an Email is sent to or received from the Contact associated with Customer or Supplier, that email is linked to the Customer or Supplier mentioned in the Links section of the Contact. 2. Automatic Email Linking to a Document Automatic Email Linking links an Email to the Document specified in the unique Email Address generated by the system for a document. If an Email is sent or received using the unique Email Address, the system will link that Email to the Document. - Enable Automatic Email Linking in Email Account. This feature can be used only with one Email Account at a time. - Once this feature has been enabled, you will see a unique Email ID generated using the Email ID mentioned in the Email Account. - Now you can copy the Email ID by clicking on it and you can send or receive Emails using the unique Email ID. If an Email contains this unique Email ID either in the Recipients, Cc or Bcc, section, the system will link that Email to the specified Document.

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

How to create and configure the Email Account?

Email Account You can sync your email account with OneHash to send and receive emails from OneHash . You can manage multiple incoming and outgoing Email Accounts in OneHash . There has to be at least one default outgoing account and one default incoming account. If you are on the OneHash cloud, the default outgoing email is set by us. To access Email Accounts, go to: ++Home > Settings > Email Account++ | Prerequisites Before creating an Email Account, you need an Email Domain. However, you can skip creating an Email Domain if you're using one of the following services. - Gmail - Yahoo - Sparkpost - SendGrid - Outlook.com - Yandex.mail | How to create an Email Account 1. Go to the Email Account list, click on New. 2. Enter the email address with the domain. Domains need to be created in order to create an email account. You don't need to create a domain if you're syncing an email from certain providers as listed here. - Gmail - Yahoo - Sparkpost - SendGrid - Outlook.com - Yandex.mail 1. Enter the email account password. 2. Save. If the credentials are correct, the email account will be synced. ||| Note: For some services like Gmail, you may need to turn on the settings to allow less secure apps. Additional options when creating an Email Account 1. Use Different Email Login ID: To use an alternative email login and password to access this account. For example, if you have notifications@example.com and you want users to access this email with an alternate email ID, they should tick this checkbox. The recipients will see notifications@example.com as the sender. 2. Awaiting password: If you're creating this account on behalf of someone and the password is unknown, tick this checkbox. When the other user logs in, they'll be prompted to enter the password. 3. Use ASCII encoding for password: Ticking this will use ASCII encoding for the password. | Configuration of the Email Account 1. Default Email Accounts OneHash will create templates for a bunch of email accounts by default. Not all of them are enabled. To enable them, you must set valid email account details. There are two types of email accounts, outgoing and incoming. Outgoing email accounts use an SMTP service to send emails and emails are retrieved from your inbox using an IMAP or POP. Most email providers such as Gmail, Outlook, or Yahoo provide these services. 2. Incoming Email Accounts To set up an incoming Email Account, check on Enable Incoming and set your POP3 settings, if you are using a popular email service, these will be preset for you. The following options are available for incoming emails: - Use IMAP - Use SSL - Attachment Limit - Default Incoming: If ticked, all replies to your company (eg: replies@yourcomany.com) will come to this account. - Email Sync Option: Whether to sync all or only unseen emails. - Initial Sync Count: Number of emails to sync the first time. Appending Emails To Documents This feature creates documents when an email is sent to a particular email account. For example, you can append support@example.com to the Issue DocType. On doing this, whenever an email is sent to support@example.com, the system will create an Issue for it. Similarly if you link jobs@example.com, when emails are sent to jobs@example.com, a Job Applicant document is created. ${color}[#1400f0](Enable Automatic Linking in Documents will link emails to documents), to know more click here. 3. Notification for unreplied messages If you would like OneHash to notify you if an email is unreplied for a certain amount of time, then you can set Notify if Unreplied. Here you can set the number of minutes to wait before notifications are sent and whom the notifications must go to. Setting Import Conditions for Email Import Email Accounts allows you to set conditions according to the data of the incoming emails. The email will be imported to OneHash only if all conditions are true. For example, if you want to import an email if the subject is "Some important email", you put doc.subject == "Some important email" in the conditions textbox. You can also set more complex conditions by combining them, as shown on the following screenshot. 4. Outgoing Email Accounts All emails sent from the system, either by the user to a contact or via notifications or via transaction emails, will be sent from an Outgoing Email Account. To set up an outgoing Email Account, check on Enable Outgoing and set your SMTP server settings, if you are using a popular email service, these will be preset for you. The following options are available for outgoing emails: - Use TLS - Port - Disable SMTP server authentication - Add Signature: The default signature appended to the end of each email. - Default Outgoing: Notifications and bulk emails will be sent from this outgoing server. - Always use Account's Email Address as Sender: The email address of this account will be mentioned as the sender for outgoing emails. - Send unsubscribe message in email: Send a link to unsubscribe from emails sent from this account. - Track Email Status: Track if your email has been opened by the recipient. Note that, if you're sending to multiple recipients, even if one recipient reads the email, it'll be considered "Opened". - Enable Auto Reply: If enabled, enter an auto reply message. - Append Outgoing Email to Sent Folder: If using custom email servers like Zimbra or CPanel, SMTP will not automatically append emails to Sent folder. Enabling this option will ensure all emails are explicitly appended to the email account's Sent folder. - Use SSL for Outgoing Emails: Use SSL as a standard for outgoing emails. Defaults to port 465. | How OneHash handles replies In OneHash when you send an email to a contact like a customer, the sender will be the user who sent the email. In the Reply-To property, the Email Address will be of the default incoming account (like ++replies@yourcompany.com++). OneHash will automatically extract these emails from the incoming account and tag it to the relevant communication. ||| Note for self implementers: For outgoing emails, you should set up your own SMTP server or sign up with an SMTP relay service like mandrill.com or sendgrid.com that allows a larger number of transactional emails to be sent. Regular email services like Gmail will restrict you to a limited number of emails per day. If you encounter errors when configuring and email account, refer this page.

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

The what and how of Email domain

Email Domain An email domain is the name of the network/service you're using for your email account. You can skip to Email Account creation if you are using one of the services listed below: - Gmail - Yahoo - Sparkpost - SendGrid - Outlook.com - Yandex.mail You can configure your Email Domain in OneHash for easy setup of all Email Accounts. To find Email Domain settings go to: ++Home > Settings > Email / Notifications > Email Domain++ What is my Email Domain?: You might have purchased an Email service from your internet service provider or your IT services provider. For example, if you access your business mailbox with URL like http://mail.yourcompany.com, then yourcompany.com is your email domain. If you want to send and receive emails on your OneHash account, you need to correctly setup an email domain. You may be using free mail services like Gmail or Yahoo. In this case, you don't need to create a domain, instead select a service provider from the list. However, you might have to allow access to OneHash for your Gmail account. OneHash creates a template email domain using example.com for your reference. You should add your new domain if you want to use it in your OneHash account. | How to create an Email Domain 1. Go to the Email Domain list, click on New. 2. Enter the Example Email Address. This is where you enter your business email address. For example, if your email ID is yourname@yourcompanyname.com you should enter this. 3. Email Server. This is the URL of your mail server or the email service that you have purchased. For example, it may be mail.yourcompany.com or imap.yourcompany.com. 4. Use IMAP. IMAP and POP are two services used by most mail servers for incoming emails. If your Email server allows IMAP service for the incoming emails keep this checked. Otherwise, leave this unchecked. 5. Use SSL. If your mail server uses SSL (Secure Socket Layer) communication keep this checked. Do I have SSL?: You may have purchased SSL certificate from your IT service provider for SSL and they may have set up SSL for your mail server. If you're using 'https' while accessing mail server over browser then you might have SSL setup. 1. Use SSL for Outgoing. If your mailserver uses SSL for outgoing, enable this to explicitly use SSL for outgoing emails. Defaults to port 465. 2. Append Outgoing Email to Sent Folder. If you are not using standard mailservers provided by GMail and similar services, you might need to enable this option to append all outgoing emails to the email account's inbox. (Recommended for email servers like Zimbra and CPanel). 3. Attachment Limit (MB). You can limit the size of file attachments in emails sent from OneHash. 4. SMTP Server is the outgoing email service address of your email server. 5. Tick Use TLS if your SMTP service supports TLS for security. 6. Default port. SMTP service is usually set on port 25. If your email server is set up on a separate port number you can set that up here. | After saving the domain Once you click on save, these settings are validated by OneHash and the Email Domain gets saved. Sometimes this could take a few seconds and you might have to wait. This email domain is then available in a dropdown called Domain in the Email Accounts screen. Entered everything but still unable to setup Email Domain? If you've entered and verified the above settings and are still unable to setup Email Domain, you can contact OneHash support for help. OneHash Support: | How to create an Issue - Click on 'New' to create a new Support Issue. - Enter the subject of the Issue. - Enter Issue Type. Refer to this list to know more about Issue Types. - Enter the description of the Issue. - Click on the 'Add Attachment' button to add any screenshots for the Issue. - Submit. ||| Note: We request you to keep the description of the issue as detailed as possible. This would help us understand the issue better and in turn, would significantly reduce the Turn Around Time for solving the issue. Adding the screenshots is a plus. | Track status Whenever the Team receives an issue, we classify the issue into one of the Priority categories. The classification is based on the kind of support required. You will be able to see it whenever your issue is classified. Additionally, as per the SLA, you will be able to see the stipulated time till which your issue would be resolved. Domain based Email configuration

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

Assignment rule: Do you want an automatic assignment of documents to users?

An Assignment Rule lets you set up automatic assignment of documents to Users. Assignment Rule will be useful in a scenario like—you have a support team and incoming support tickets. To assign the support tickets automatically amongst the employees who work on support, an Assignment Rule can be used. To access Assignment Rule, go to: ++Home > Settings > Assignment Rule++ | How to create an Assignment Rule To set up an automatic assignment: 1. Go to the Assignment Rule list, click on New. 2. Select the Document Type you want to assign automatically (for example Issue). 3. Write the "Description" that will be added to the To Do. 4. Select the condition for the assignment. You can write simple Python expressions for automatic assignment in the ++Assign Rule++, ++Close Rule++ and ++Unassign Rule++. You will have access to all the properties of the document and can use operators like >, <, ==, etc and also multiple conditions like ++and++ and ++or++ . Examples: - ${color}[#ff0004](status == "Open") - ${color}[#fa0004](issue_type == "Technical" and priority=="High" and status == "Open") 1. Select the assignment rule (Round Robin or Load Balancing). Round Robin: Assign each document to a User in sequence. Load Balancing: Assign new documents to the User who has the least number of assignments. 1. Select the list of Users to whom this Assignment Rule will apply. - Based on Field: Introduced in v13, this rule can be used to assign a document to the User that is set in the configured field. Select the User link field which will determine to whom this Assignment Rule will apply: 1. Save You can use properties of the document in the Description field that will be part of the assignment. Higher 'Priority' Assignment Rules will be applied first. Example: High Priority Issue File Upload not working has been assigned to you. | Multiple Assignment Rules You can also set up multiple auto assignments for each Document Type, the one with the highest Priority will be applied first: Here is an example of an Assignment Rule. Set Document Type, Descriptions and Conditions. | Setting Due Date for assignment You can auto set due dates for assignments based on the date field in the reference document. Example: If you want to set a due date on Issue assignment based on the "Resolution By" date of the Issue, you can do so by selecting "Resolution By" field in ++Due Date Based On++ option in Assignment Rule. Note: - "Due Date Based On" option will not be available if "Document Type" is not yet selected or if the selected Document Type does not have any "Date" or "Datetime" field. - Due Date in the assignment/ToDo will be updated whenever the "Due Date Based On" field value is updated in the reference document. | Related Topics 1. How to create a workflow? 2. What are Workflow Actions?

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

How to create a workflow?

Workflows With workflows you can rewrite how a particular process/workflow is approved in OneHash. You can set multiple levels of approval for an OneHash Workflow. To allow multiple people to submit multiple requests, for approvals by multiple users, OneHash requires you to fill the Workflow conditions. OneHash tracks the multiple permissions before submission. Example of a leave application Workflow is given below: This is an example of a two level approval with cancellation. If a user applies for leave, then his request will be sent to the HR department. The HR department (HR User) will either reject or approve this request. Once this process is completed, the user's Manager (leave approver) will get an indication that the HR department has Accepted or Rejected. The Manager, who is the approving authority, will either Approve or Reject this request. Accordingly, the user will get his Approved or Rejected status. To make a Workflow and transition rules go to: ++Home > Settings > Workflow++ Once a Workflow is created, you can take actions on it via Workflow Actions | Prerequisites Before creating a Workflow, it is advised to create these first: - Workflow Actions - Workflow States like Approved, Canceled, etc. | How to Create a Workflow 1. Go to the Workflow list, click on New. 2. Enter a name for the Workflow and select the DocType on which to be applied. 3. Enter the different states of the Workflow. Enter Doc Status for them, select which field to update from the Update Field column, enter what the value will be updated to under Update Value. The Workflow States can have different colors according to the state. Eg: Green for success. Document statuses: Saved = 0, Submitted = 1, Cancelled = 2. The field you select under Update Field will be updated for the document type when the State changes. Update Value is the text that appears on the field selected in Update Field. So here the status field is updated to Applied, Approved, etc. 4. Enter the Transition Rules. Action indicates the actions an approver can take on the leave application. Next State is the State the document type will be at when the Action is applied. So here, the State changes from Applied to Approved by HR when the Approve action is performed on it. 5. Under Workflow State Field, enter a name for the Custom Field that'll be added to the DocType, Leave Application in this case. 6. On saving, the Custom Field will be created in the DocType. || Things to note when creating a Workflow - Creating a Workflow in OneHash essentially overrides the regular Save and Submit workflow. Thus the document will function based on your Workflow and not based on the pre-set code workflow. Hence there might be no Submit button/option if you have not specified it in the Workflow you create. If you don't apply a Workflow to a document, and that document is submittable, then it has the default workflow with states: Draft - Submitted - Cancelled. If you are applying a Workflow to a submittable document, then those default states should be handled by the user. - A document cannot be canceled unless it is submitted. - If you wish to give the option to cancel, you will have to write a workflow transition step that says from submitted you can cancel. - If fields under Update Field column are not updated, a new custom field will be created with the name you set in the 'Workflow State Field' field. || Other options for a Workflow 1. Is Active: On ticking this, all other Workflows for the selected DocType become inactive. 2. Don't Override Status: This Workflow's status will not override the status of the document (Leave Application) in the list view. 3. Send Email Alerts: Emails will be sent to the user with next possible workflow actions. | Features Enable/Disable Optional Workflow State || Introduced in Version 12 In States, optional Workflow state means that the state may not be a part of final approval. E.g. states like Canceled or Rejected can be optional. ++Note: Workflow Actions are not created for optional states.++ || Conditions You can also add a condition for the Transition to be applicable. - For example, in this case, if sales executive creates a quotation with grand total of $100,000 or more, a particular role must approve. For this to happen in the particular transition, you can set a property for Condition: Here, ${color}#ab33cc is the field name of the field 'Grand Total' of Quotation. - For example, in this case, if someone applies for a leave of more than 5 days, a particular role must approve. For this to happen in the particular transition, you can set a property for Condition under Approved by HR as: Then if someone applied for leave for less than 5 days, only that particular transition will apply. Here, ++total_leave_days++ is the field name of the field 'Total Leave Days' of Leave Application. To see the field name of a field go to Menu > Customize. This can be extended to any property of the document. || Introduced in Version 13 In Version 13, you can use date/time, session, getvalue and getlist functions in your condition expressions. Allowed functions: - frappe.db.get_value - frappe.db.get_list - frappe.session - frappe.utils.now_datetime - frappe.utils.get_datetime - frappe.utils.addtodate - frappe.utils.now Examples: doc.creation > frappe.utils.add_to_date(frappe.utils.now_datetime(), days=-5, as_string=True, as_datetime=True) | Example of a Quotation Approval Process When a quotation is saved by sales user, the status of the document changes to "Draft" and when clicked on submit the status changes to 'Approval Pending By Sales Manager': When the Sales Manager logs in, he can either Approve or Reject. If approved the status of the document changes to "Approval Pending By Regional Manager". When the Regional Manager opens the quotation, he can finally "Approve" or "Reject" it. | Example of a Leave Application Process When a Leave Application is saved by Employee, the status of the document changes to "Applied": When the HR User logs in, he can either Approve or Reject. If approved the status of the document changes to "Approved by HR". However, it is yet to be approved by Leave Approver. When the Leave Approver opens the Leave Application page, he can finally "Approve" or "Reject" the Leave Application. | Related Topics 1. Workflow Actions 2. Assignment Rule

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

How to Translate your documents to your preferred language using Custom Translations?

Custom Translations With Custom Translations, user can print the customer's and supplier's document in their local language. For example, if you have customers from Germany and France who want quotations in German and French, it's possible using Custom Translations. 1. Set the Language In the Customer master, select the default Language. Say, the default language for the Customer is Spanish. Same way, you can also set default language in the Supplier master. - Print Preview in the Party's Language In the Print Preview of a transaction, values will be translated into the party's language. Customer Quotation print preview in customer's default language. Supplier Quotation print preview in supplier's default language. - Changing the print language in the preview User has the option to select an alternate language on print view. 2. Custom Translation Users can set their custom translations using Custom Translations form. For example, if a user wants to set a description of a product in the customer's language (Spanish). For that, create a new translation with language as Spanish, enter source data and translated information. ++Home > Customization > Other > Custom Translations > New++ The translation is applied when the user selects the language as Spanish on supplier Quotation's print preview. Note that no translation is applied for the second item's description since it wasn't created in the Translation list. ||| 3. **Related Topics ** 1. Address Template 2. Quotation 3. Sales Order

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

The Terms and Conditions Template: Get to know more about the T&C of a service/product offered

Terms And Conditions Terms and conditions contain the terms and conditions of a service/product offered by a seller to a buyer. Each Quotation/Sales Order must ideally contain a set of terms of your contract. Terms and conditions are usually included to define terms of service, conditions for using any service or to even limit responsibilities of the seller in case any harm is caused to the buyer due to using the provided goods or services. It is usually a good idea to make template(s) of your Terms and Conditions so that you have a standard set of terms. To access Terms and Conditions template go to: ++Home > Selling > Terms and Conditions Template++ How to create Terms and Conditions Template - Go to the Terms and Conditions Template list, click on New. - Add the Terms and Conditions. | 1. Select in Transaction In transactions, you will find a section of Terms and Conditions where you will be able to search and fetch the required Terms and Condition master. | 2. Terms and Conditions when printing Once the Terms and Conditions are set in a Sales/Purchase transaction, it will appear when printing: | 3. What should Terms and Conditions contain? Here are some common topics that Terms and Conditions should contain: - Validity of the offer. - Payment Terms (In Advance, On Credit, part advance, etc). - What is extra (or payable by the Customer). - Safety/usage warning. - Warranty if any. - Return Policy. - Terms of shipping, if applicable. - Ways of addressing disputes, indemnity, liability, etc. - Address and Contact of your Company. Terms and conditions are the general and special arrangements, provisions, requirements, rules, specifications, and standards that a company follows. These specifications are an integral part of an agreement or contract that the company gets into with its customers, suppliers or partners.

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

Create an Address Template

Address Template Address template can store different formats of addresses based on the region. Each region has its way of defining addresses. To manage multiple address formats for your Documents (like Quotations, Purchase Invoices, etc.), you can create country-wise Address Templates. To access address template, search Address template in the awesome bar. A default Address Template is created when you set up the system. You can either edit it or create a new template. This default template will apply to all countries not having a specific template. Consider a customer from the United States where 'County' is a part of the address. If you set county in the address template for United States, then it'll show up in the address field and hence in the print preview. Fields like PIN code can be changed to be displayed as ZIP code and fields like county can be added by using Address Templates. || The Address Template checks the 'Country' field in the Address master to apply different address templates to transactions. | How to create an Address Template 1. Go to the Address Template list, click on New. 2. Select a country. 3. Change the CSS and Jinja if required. 4. Save Jinja Templating A Jinja template is simply a text file. Jinja can generate any text-based format (HTML, XML, CSV, LaTeX, etc.). A Jinja template doesn’t need to have a specific extension: .html, .xml, or any other extension is just fine. The templating engine is based on HTML and the Jinja Templating system. All the fields (including Custom Fields) will be available for creating the template. Here is the default Jinja template: Example:

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

The Print Format Builder

Print Format Builder The Print Format builder helps you quickly make a simple customized Print Format by dragging and dropping data fields and adding custom text or HTML. The 'Standard' Print Format is created by default, it cannot be edited. To access the Print Format Builder, go to: ++Home > Settings > Printing > Print Format Builder++ Or via a document. | Using the Print Format Builder 1. Via the menu navigation - Go to the Print Format Builder. - Here you can edit an existing print format or create a new Print Format for a document type like Item, Quotation, etc. - Let's see how to edit an existing Print Format in this section. To know about creating a new Print Format, see the next section. - Select the Print Format to edit. - Click on the Edit button, you will be taken to the Print Format Builder UI. - Here you can drag and drop fields from the sidebar to the page and vice versa. - After making the changes, click on Save. 1. Via a document - Open the document for which you want to make a Print Format. Click the Printer icon, or go to Menu > Print and click on the Customize... button. Note: You must have System Manager permission to do this. - To add a field, just drag it from the left sidebar and add it in your layout. You can edit the layouts in sections or individual fields by clicking on the settings icon. - To remove a field, just drag it back into the fields sidebar. - Save. You can add customized text, HTML in your print format, just drag and drop the Custom HTML field (in dark color) and add it to the place where you want to add the Custom HTML content. Then click on Edit HTML to edit your content.

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

Everything you should know about Raw Printing

Raw Printing Sending a string of commands to a printer directly in its native language is called Raw Printing. Many thermal printers need these raw commands sent to them in order to perform functions like barcode printing, receipt printing, label printing, etc. Raw Printing bypasses the printer's drivers in most cases, making them very fast and reliable. Raw Printing is also capable of doing some advanced features such as cutting receipt paper, kicking out cash drawers, etc. | Setting up Raw Printing in OneHash * Installing QZ Tray application on the client computer Download and install the QZ Tray application on the computer to which your thermal printer is connected. This application can be found at its official site. Currently, Windows, macOS, and Linux are supported by QZ Tray. During the installation you will be prompted to install Java if not already installed, please install Java to complete the installation. Further instructions on installing the QZ Tray Application click here. - Create Raw Commands Print Format To be able to send raw commands to a printer you need to first create a print format in raw commands. Jinja Templating Language is used in raw commands just like in the HTML custom print format. To create a new print format for Raw Printing: - Go to print format list: Home > Settings > Printing > Print Format - Click on New. - Select the relevant DocType. - Check the Custom format and Raw Printing options. - Fill in the Raw Commands field with the required raw commands to be sent to the printer. - Click Save. Currently, any string-based printer languages can be used in the ++Raw Commands++ field in the print format. Writing raw commands requires knowledge of the printer's native language provided by the printer manufacturer. Please refer to the developer manual provided by the printer manufacturer on how to write their native commands. - Enable Raw Printing in the Print Setting To enable Raw Printing: - Go to: Home > Settings > Printing > Print Settings > Raw Printing. - Check the Enable Raw Printing option. - Save. | Methods to utilize raw printing in OneHash There are two ways to send Raw Printing commands to your printer. 1. Clicking print on the print view page To print a raw command print format from the Document print view: a. Select appropriate print format. For print format in Raw Commands, "No Preview available" message is shown in place of the print preview. b. Click on the print button. c. Please allow the connection prompt from the QZ Tray for the actions that you initiated (Keyboard Shortcut: Alt + A). d. You may be asked to select the "print format - printer mapping". - This mapping is used to send the print commands to the appropriate printer. - The printer needs to be installed on your computer to be able to map it to a print format. - This mapping is stored locally on the same computer and will have to be set on each client machine. - You can also edit this by clicking on the Printer Settings button. 2. Calling Raw Print functions from a custom script It is often a requirement that a print command has to be issued on a certain event (like submit, save, amend, etc.). It is possible to write a custom script to do this for you. Following are the relevant Raw Print functions: 1. function: ${color}#fa0004 - A connection wrapper to establish a connection with the QZ Tray application. - Returns a promise which resolves on successful establishment of a connection. - Allows active and inactive connections to resolve regardless. Hence it can be called every time before sending a command. - Usage example: Here, qz is a global object provided by the qz-tray.js library. 1. function: ${color}#f50004 - Gives you the list of printers available to the QZ Tray application - Returns a promise which resolves to a list of printers - Usage example: 1. function: ${color}#f00004 - Displays a "Print Sent to the printer!" alert to the user. Can be called after the print command is successful. 1. function: ${color}#eb0004 - Displays the error message to the user. Should be called on failure of QZ Tray connection.

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

How do you want the document type to look like? Learn more about Print Formats

Print Format With Print Format, you can set how document types look when printing. Every transaction has a default Print Format called 'Standard'. You can change Print Formats by: - Using the Print Format form - Using Jinja/JS scripting under Print Format - Using the Print Format Builder to create print formats with UI - Using Customize Form to hide/unhide fields To access Print Format, go to: ++Home > Settings > Print Format++ | How to create a Print Format? - Go to the Print Format List, click on New. - Enter a name and select a DocType for which the Print Format is to be used. - The module for which it should apply will be selected automatically. - Save Under Style Settings, there are options to change the styling options. With those options, you can change the font, align the labels together on the left or right, add headings for sections, etc. To style the Print Format using custom Jinja/JS, click on Custom Format. If you select this option, there'll be a checkbox for raw printing. Get to know more about Raw Printing If developer mode is enabled, you can select Standard as yes to contribute a print format as a standard (preset) print format in the system. Using Customize form to change the Print Format items Fields in the transactions and their child tables can be hidden/shown using Customize Form. For example, if you want to hide the 'Item Code' when printing a Quotation, click on the print icon to enter the print screen. ++Go to Menu > Customize, select Quotation Item in the 'Enter Form Type' field++ In the fields table, expand the 'Item Code' row, scroll down and tick the 'Print Hide' checkbox.

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

Print Settings

Print Settings In Print Settings you can set your printing preferences like Paper Size, default text size, whether you want to output as PDF or HTML, etc. Since OneHash is a browser-based application, the actual print command is executed by the browser you're using. To edit Print Settings, go to: ++Home > Settings > Print Settings++ Various Configurations available in the Print Settings | 1. PDF Settings - PDF or HTML: When you email any document (like Sales Order/Invoice) from OneHash, it is sent in the PDF or HTML format. The file is sent in PDF by default. If you wish to send a document in the HTML format, just untick the field "Send Print as PDF". - Repeat Header and Footer in PDF: The letterhead is a master where you can define the standard Header and Footer which is appended to the document's Print Format. If this property is enabled, then Header and Footer are added to each page. If you don't want header and footer repeat on each page, just disable this setting. - PDF Page Size: The default size for printing PDF pages is A4, you can change it to letterhead size. | 2. Page Settings - Print With Letterhead Enabling this property will automatically tick the Letter Head option when printing a document. Note that you need to either set Letter Head as default or select one in the transaction for it to appear in the print view. - Compact Item Print Transactions like sales orders/invoices have a table detailing items bought or sold. It has multiple columns like Item Name, Description, UoM, Rate Amount, etc. If there are many columns in the Item table, then Print Format looks bit cluttered. You can improve the view of the table by enabling Compact Item Print. As per this setting, there will be only four columns in the Print Format, namely: Description, Qty, Rate, and Amount. The values of other columns (like name, description, image, serial nos. etc.) are concatenated in the Description column. When the checkbox is unticked, the print format looks like this: This is what the Compact Print Format looks like: - Allow Print for Draft The documents (mostly transactions) have two stages of authentication, Save and Submit. The saved documents are the first draft and not submitted to the system. Hence printing is restricted for the documents at this stage. However, if you wish to permit users to print documents at the Draft stage as well, enable this checkbox. - Send document web view link in the email OneHash has a portal view available from where parties like Customers and Suppliers can sign up and view their order history. When you email a transaction to your party, you can also send a web link to view the same document on the portal of your OneHash account. - Always add "Draft" Heading for printing draft documents Enabling this setting also print "Draft" in the Print Format, thus indicating that document shared is not completely authenticated yet. - Allow Page Break Inside Table If an item's description captures more than usual space of a page, then enabling this setting will split the item's details to the next page. Hence, a page break will be inserted between the Item Description, and the rest of the details will be pushed to the next page. - Allow Print for Canceled Canceled transactions are the ones which don't have any impact on the reports. If you wish to allow printing for the canceled transactions, then enable this setting. A transaction can be canceled only once it is submitted. - Print Taxes with Zero Amount In the sales and purchase transactions, you can add apply multiple taxes on the item. By default, in the print format, only taxes which have some amount calculated are visible. If you wish to also print the tax which was not applied and has zero tax amount, enable this setting. | 3. Network Printer / Print Server You can enable print server by filling the print server IP and port. Then chose the default printer. Before enabling this feature you have to install the ${color}#de5ed3 library. You may need first to install ${color}#d95ec3 library if is not already on your system - For Debian OS Family: ${color}[#cf070b](sudo apt-get install libcups2-dev) - For Red Hat OS Family: ${color}[#cf070b](sudo yum install cups-libs) After that, install pycups in the env using the command: ${color}[#d5070a](./env/bin/pip install pycups) This is executed from the ${color}#d762df directory. | 4. Raw Printing You can enable raw printing and print to many supported thermal printers. Learn more about Raw Printing | 5. Related Topics 1. Print Format 2. Print Style 3. Print Headings 4. Custom Translations

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

How to set Role Based Permissions?

Role Based Permission Permission to different documents can be controlled using Role-Based Permissions. - OneHash CRM has a role-based permission system. It means that you can assign Roles to Users, and Permissions can be set on Roles. - The Role Permissions Manager allows you to set which roles can access which documents and with what permissions (read, write, submit, Etc.). - Once roles are assigned to a user, their access can be limited to specific documents. The permission structure allows you to define different permission rules for different fields using a concept called Permission Level of a field. | How to use the ROLE PERMISSIONS MANAGER? To start using the Role Permission Manager, go to: ++Home > Users and Permissions > Role Permissions Manager++ Permissions are applied on a combination of: - Roles: Users are assigned Roles, and it is on these Roles, permission rules are applied. For example, a sales user may be given the roles of an Employee and a Sales User. - Examples of Roles include Accounts Manager, Employee, HR User, Etc. - Document Types: Each type of document, master or transaction, has a separate list of role-based permissions as shown. - Examples of Document Types are Sales Invoices, Leave Applications, Stock Entry, Etc. - Permission Levels: In each document, you can group fields by "levels". Each group of fields is denoted by a unique number (0 to 9). A separate set of permission rules can be applied to each field group. By default, all fields are of level 0. - Permission "Level" connects fields with level X to a permission rule with level X. To know more, click here. - Document Stages: Permissions are applied on each stage of the document like Creation, Saving, Submission, Cancellation, and Amendment. A role can be permitted to Print, Email, Import or Export data, access Reports, or define User Permissions. - User Permissions: Using User Permissions in OneHash CRM, a user can be restricted to access only specific Documents for that Document Type. E.g., Only one Territory from all Territories. User Permissions defined for other Document Types also get applied if they are related to the current Document Type through Link Fields. - For example, a Customer is a link field in a Sales Order or Quotation. In the Role Permissions Manager, User Permissions can be set using the 'Set User Permissions button. To set User Permissions based on documents/fields go to: ++Home > Users and Permissions > Permissions > User Permissions++ - Add a New Rule: In the Role Permissions Manager, add a new rule, click on the Add a New Rule button, and a pop-up box will ask you to select a Role and a Permission Level. Once you select this and click on 'Add', add a new row to your rules table. | How Role-Based Permissions Work? Leave Application is a good example that encompasses all areas of a Permission System. - It should be created by an Employee. For this, Employee Roles should be given Read, Write, Create permissions. - An Employee should only be able to access their Leave Application. Hence, a User Permissions record should be created for each User-Employee combination. - If you want an Employee to only select a document in another document and not have read access to that document as a whole, then grant only Select perm to the role, Employee. - HR Manager should be able to see all Leave Applications. Create a Permission Rule for HR Manager at Level 0, with Reading permissions. Apply User Permissions should be disabled. - Leave Approver should be able to see and update Leave Applications of employees under them. Leave Approver is given Read and Write access at Level 0. Relevant Employee Documents should be enlisted in the User Permissions of Leave Approvers. (This effort is reduced for Leave Approvers mentioned in Employee Documents by programmatically creating User Permission records). - It should be Approved/Rejected only by HR User or Leave Approver. The Status field of a Leave Application is set at Level 1. HR User and Leave Approver are given Read and Write permissions for Level 0, while everyone else (All) are given Read permission for Level 1. - HR Users should be able to delegate Leave Applications to their subordinates. HR User is given the right to Set User Permissions. A User with HR User role would define User Permissions on Leave Application for other users. If you have correctly assigned the roles, but still, you're getting errors when accessing documents, refer to this page. ${youtube}How to set User permission

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

Using Data Import

Data Import lets you import records from a CSV/Excel file. To begin importing data, go to: ++Home > Settings > Data > Import Data++ Or go to the Transaction you want to import and click on Menu > Import ${color}[#e01518](Before using Data Import ensure that you have all of your data ready.) 1. Inserting New Records Let's say you want to import the list of Customers from your old system into OneHash. The first step is to download a template in which you can enter your data. 1.1 Downloading the Template 1. Go to Customer List, click on Menu > Import. Click on New. 2. Select Import Type as Insert New Records. 3. Click on Save. 4. Now, click on Download Template. 5. While inserting new records, the template should be blank. If you have a few Customers in your system, you can select Export Type as "5 Records" to see the format in which you have to enter the data in the template. 6. Select the File Type of the export template. 7. Select the fields that you want to fill in as the Customer details. 8. Click on Export. 1.2. Entering Data in the Template - Your downloaded template will look something like this: - Open the downloaded template in a spreadsheet application (like Excel, Numbers, or LibreOffice) and enter the data below the column headings shown as follows: - Now, save your template as an Excel or Comma Separated Values (CSV) file. ||| You can leave the ID column blank while inserting new records. - When you import this template, each row will make a Customer record in the system. 1.3. Importing the Template - After making the necessary changes, go back to the data import form and attach the file by clicking on the Attach button. - Click on Upload. - Once the upload is successful click on Import. - If there are any errors in your template, they will be shown in the Warning’s section. The warnings will be categorized by Row or Column with their number so that you can easily track them down in the template and resolve them. You must resolve all the warnings before you can import the data. - After you have resolved the warnings, click on Start Import again to import the data. On successful import of the data, you'll see a log of each record that was created in the Import Log section. 2. Updating Existing Records Let's say you want to update Customer data in bulk in your system. The first step is to download the template with the data. **2.1 Download the Template ** 1. Go to Customer List, click on Menu > Import. Click on New. 2. Select Import Type as Update Existing Records 3. Click on Save. 4. Now, click on Download Template. 5. While updating existing records, you must export the records from the system with the ID field and the fields that you want to update. You can choose All Records or Filtered Records depending on your case. 6. Select the fields that you want to update for the Customer records. 7. Click on Export. **2.2 Updating Data in the Template ** - Your downloaded template will look something like this: - Now, change the values in your template and save the file like Excel or CSV. ||| While exporting records for updating them, ensure that the ID column is exported and is untouched. The values in the ID column are used to identify the records in the system. You can update the values in other columns but not in the ID column. **2.3 Importing the Template ** Follow the above-stated steps in Importing the template. 3. Importing Child Records - Data in OneHash is stored in tables like a spreadsheet with columns and rows of data. Each document like Sales Order has multiple fields like Customer, Company, etc. It also has tables like the item table, tax table, etc. - In Data Import, the set of fields in the Sales Order are treated as the main table and the rows inside the child table (item table) are treated as the child table for data import. - Each form in OneHash can have multiple child tables associated with it. The child tables are linked to the parent tables and are implemented where there are multiple values for any property. For example, an Item can have multiple prices, a Sales Invoice has multiple Items, Taxes, and so on. When you export a document with child tables, each child row will appear on a separate row but it is associated with a single parent row. The subsequent values in the parent columns will remain blank. You must ensure that this order is not broken when you are importing them via Data Import. 4. Import Options **4.1 Import from Google Sheets ** You can also import data from Google Sheets. Import your template in Google Sheets and enter the data. Make sure the Google Sheet is public. You can test this by opening the Google Sheets URL in an incognito browser window. **4.2 Submit After Import ** In OneHash document types are mainly of two types - masters and transactions. The masters are records like Customer and Task which can only be saved not submitted. Transactions like Sales Orders, Purchase Invoices are submittable documents and can be submitted. When you select a submittable document type for Import, you can tick Submit After Import to submit the document after it is imported. **4.3 Don't Send Emails ** Let's say you have created a Notification in your system and whenever a Lead is created an email is sent. Now, if you are bulk importing Leads then a lot of emails will be sent, which may not be desired. You can disable this option to avoid sending emails. 5. Additional Notes **5.1 Upload Limit ** There is no hard limit on the number of records that can be imported. But you must try and upload only a few thousand records at a time. Importing a large number of records (let's say 50,000) might slow down the system considerably for the users that are using the system. **5.2 CSV Files ** A CSV (Comma Separated Value) file is a data file that you can upload into OneHash to update various data. Any spreadsheet file from popular spreadsheet applications like MS Excel or Open Office Spreadsheet can be saved as a CSV file. If you are using Microsoft Excel and using non-English characters, make sure to save your file encoded as UTF-8. For older versions of Excel, there is no clear way of saving as UTF-8. So save your file as CSV, then open it in Notepad, then save as “UTF-8”. (Or update your Excel!) ${youtube}How to Import Data

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

How to create a Letter Head?

Letter Head The Letter Head contains your organization's name, logo, address, etc which appears at the top of the documents. Every company has a default Letter Head. These Letter Head values are generally set as Header and Footer in the documents. In OneHash CRM, you can capture these details in the Letter Headmaster. These details will appear in the Print Format of transactions like Sales Order, Sales Invoice, Salary Slip, Purchase Order, etc. In OneHash CRM, the Letter Head is only for setting up the top part of the document, other content is pre-formatted and can be configured via Print Format and Print Headings. To access Letter Head, go to: ++Home > Settings > Letter Head++ | How to create a Letter Head? 1. Go to the Letter Head list and click on New. 2. Enter a name for the Letter Head. You can create a separate Letter Head for different office locations. 3. Choose whether it is based on image or HTML. 4. You can enter details in a Letter Head by using: - Logo Image: Click on the Attach button to attach an image. Once the image is inserted, HTML for it will be automatically generated. - Other information (like Address, tax ID, etc.) that you want to put on your Letter Head. - If you want to make this the default Letter Head, click on "Default Letter Head". 1. After entering values in the Header and Footer section, save the Letter Head. You can set the Letter Head based on HTML to make changes in the future. You can use HTML width and height attributes to adjust the image size. Example tags - This is how the Letter Head looks in a document's print. || Note: Footer will be visible only when the document's print is seen in the PDF. Footer will not be visible in the HTML-based print preview. ||| 3. **Related Topics ** 1. Address Template 2. Terms and Conditions 3. Cheque Print Template 4. Print Headings

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

Security and Administration Settings

This section would deal with the system-wide configuration of the account. You can localize OneHash to use in a particular timezone, date, number, or currency format, and also set global session expiry via System Settings. To open System Settings, go to: ++Home > Settings > System Settings++ | 1. General Settings: - Country: You can set the default country here, this will be fetched when creating new addresses. - Time Zone: Sets time automatically based on the time zone. - Language: Sets the global language for the OneHash CRM account. | **2. Date and number format: ** - Date- dd/mm/yyyy or mm/dd/yyy - Time- hhh:mm:ss or hh:mm - Number- format in which numbers will be formatted - Float precision- The number of zeros displayed after the decimal point for quantities etc. By default it is 3. - Currency precision- Number of zeros displayed after the decimal point for currency values. | **3. Backups: ** In OneHash CRM you can keep a backup of your database and your files. Database backups are created automatically while file backups need to be downloaded explicitly. This field shows the number of backups after which older ones will be deleted. By default, 3 backups are saved over 24 hours. New backups are automatically created every few hours and the newest backup will overwrite the oldest one. For a backup of files, click on the Download Files Backup button in the Download Backups form. Keeping regular backups of your system is a good practice in case of any mishap and you want to roll back or just for your records. | **4. Permissions: ** Using permissions, you can limit user access to document types. The limitation can be based on fields like Company, Territory, Branch, etc. If the ‘Apply Strict User Permissions' checkbox is ticked and User Permission is defined for a Doctype, then all the documents where the value of the link is blank, will not be shown to that User. This is done from: ++Home > Users and Permissions > Permissions > User Permissions++ For example, You have set the User Permissions for Territory and the value as India. If the checkbox is unticked, all transactions (sales orders, quotations) with India and blank will be shown to the users. If the Apply Strict User Permissions checkbox is ticked, documents, where Territory is blank, will not be shown to the users. | **5. Security: ** - Session Expiry: Number of idle hours after which you'll be logged out of a session. This helps in better security. For example, if there is no activity for 6 hours, your account will be logged out. - Session Expiry Mobile: Session expiry when logged in from a mobile phone. - Allow only one session per user: If you want to use a single set of credentials for multiple users, tick this checkbox. The number of simultaneous sessions can be changed under User master. Mobile phone sessions are not counted here. - Allow Login using Mobile Number: By checking the 'Allow Login using Mobile Number' checkbox, you can log in to OneHash CRM using a valid mobile number set in your User account. - Allow Login using Username: Allow user login via their username set in the User Master. - Show Full Error and Allow Reporting of Issues to the Developer: This will display the whole error on the screen and allow reporting issues. If you have technical knowledge in this area, you can get a better idea of the error by reading the whole message. | 6. Password: - Force User to Reset Password: Number of days after which a password reset is mandatory. 0 means no limit. - Enable Password Policy: Enables a password strength checker so that users have to use strong passwords for their login. - Minimum Password Score: Score for the password strength checker - 2 is medium - 3 is strong - 4 is very strong The complexity is based on the number of characters, capitalization, special characters, etc. | **7. Brute Force Security: ** - Allow Consecutive Login Attempts: Consecutive logins after which you'll be locked out of the account for a specific period. This helps if an intruder tries to log in to your account. - Allow Login After Fail: Seconds after which a login attempt will be allowed after consecutive unsuccessful attempts. | 8. Two Factor Authentication: On ticking 'Enable Two Factor Auth', the following two options will be seen. - Bypass Two Factor Auth for users who log in from restricted IP Address: Users who log in from restricted IP addresses will not be asked for Two Factor Authentication. You can restrict IPs from the User master under the Restrict IP field. - Bypass restricted IP Address check If Two Factor Auth Enabled: If checked, all users can log in with Two Factor Authentication regardless if their IP is restricted or not. - Two Factor Authentication method: Select the authentication method to be used - OTP App, SMS, or email. - Expiry time of QR Code Image Page: Expiry time for QRCode image if "OTP App" is selected in the method. - OTP Issuer Name of the One Time Password. | 9. Email: - Email Footer Address: Organization name, address, and other details can be added here. This will be set as default in all outgoing mails. - Disable Standard Email Footer: If ticked, the standard email footer will be disabled for outgoing emails. - Hide footer in auto-email reports: If ticked, footers will be hidden in Auto Email Reports. - Send document web view link in the email: OneHash has a portal view available from where parties like Customers and Suppliers can sign up and view their order history. When you email a transaction to your party, you can also send a web link to view the same document on the portal of your OneHash account. This option will enable this functionality. ${color}[#f61804](How to create an Auto Email Report?) 1. Go to the Auto Email Report list, click on New. 2. Select the Report for which you want to generate emails. 3. Select the user for which you want to create this report (permissions will apply for this user). 4. Set the Email Addresses to which you want this report to be emailed and the frequency of the report. Emails will be sent at midnight. The date will be repeated in case of weekly/monthly/yearly frequency. For example, if the selected date is 7 and the frequency is monthly, the email will be sent on the 7th of each month. 5. Click Save | 10. Chat: Enable Chat: This option will enable the in-app chat which can be used to communicate with other employees.

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

Event Streaming

Event Streaming Event Streaming enables inter site communications between two or more sites. You can subscribe to Document Types and stream Documents between different sites. For Example: Consider you have more than one Company hosted on different sites, one among them is the main site where you want to do ledger posting and on other sites, the Sales Invoices are generated. You can use Event Streaming in this case. For this, your child company sites can subscribe to the main company site for Item, Customer, and Supplier Document Types. The main Company in turn can subscribe to the child companies for Sales Invoices. To access Event Streaming, go to: ++Home > Automation > Event Streaming++ | 1. Prerequisites Before creating an Event Producer, a common user needs to be created on both the sites which will be used to access the site and will act as an Event Subscriber. Make sure the user has the necessary permissions for creation, updation, and deletion of the subscribed DocTypes. | 2. How to set up Event Streaming 2.1 Create an Event Producer 1. The site which you want to subscribe to, is called as the Event Producer. Create an Event Producer document for the site you wish to get the updates from. 2. Go to: ++Home > Automation > Event Streaming > Event Producer++ 3. Enter the site URL of the site you want to subscribe to, in the Producer URL field. 4. Add all the Document Types you want to subscribe to, in the Event Configuration child table. 5. If you want to have the created documents with the same name as it is on the remote Event Producer site, check the 'Use Same Name' checkbox in the child table against the required Document Type. 6. Set the Event Subscriber field to a user that will be used to create the documents fetched from the Event Producer. You need to create the same user both ways, i.e on the Event Consumer as well as the Event Producer site before creating the Event Producer. 7. Save. 8. The API key and API secret are then set in the Event Producer document for Authentication. 2.2 Approve Event Consumer on the Event Producer site 1. After the Event Producer has been created, an Event Consumer automatically gets created on the other site. By default all the Subscribed Document Types have the status as 'Pending'. In order to enable the Event Consumer to consume the documents of these Document Types, their Status needs to be updated to 'Approved'. 2. Go to: ++Home > Automation > Event Streaming > Event Consumer++ 3. Once you open the Event Consumer document you will see all the Document Types that the consumer has subscribed to. Change the status from 'Pending' to 'Approved' for all the Document Types that you want to approve to be consumed. You can change the status to 'Rejected' if you do not want the documents of that Document Type to be consumed. 4. Save. ||| Note: Document updates for Subscribed Document Types won't be synced unless they are Approved. 2.3 Offline access with single site If you have some places where internet connectivity is low, for example, a store in a remote area where sales invoices are generated and you want to sync these invoices from the store to the hosted account, you could setup offline syncing using the following steps: 1. Set up an OneHash local instance. 2. You need to have hosted account with your company set up. 3. Now create an Event Producer on the hosted account and set the producer URL to the URL of your local account. 4. Add whatever doctypes you want to sync in the Event Producer Document Types child table. 5. Approve the doctypes. | 3. Features 3.1 Event Update Log Event Update Log logs every create, update, and delete for documents that have consumers on the Event Producer site. In order to view the Event Update Log: Go to: ++Home > Automation > Event Streaming > Event Update Log++ - For 'Create' type the Update Type, Document Type, Document Name and the entire document (as JSON) is logged. - For 'Update' type the Update Type, Document Type, Document Name and the updated data (difference between the previous state and current state of the document) is logged. - For 'Delete' type only the Update Type, Document Type, and Document Name is logged. 3.2 Event Sync Log Like the Update Log, Event Sync Log logs every document synced from the Event Producer on the Event Consumer site. In order to view the Event Sync Log: Go to: ++Home > Automation > Event Streaming > Event Sync Log++ A successfully synced event generates a log document with: - Update Type: Create, Update or Delete - Status: Sync Status - DocType - Event Producer: The site URL from where the document was created - Document Name - Remote Document Name: If 'Use Same Name' is unchecked - Use Same Name - Data: The document data as JSON A failed event generates a log doc with the above fields along with: - Error: The error because of which the document was not synced. - Resync Button: It also provides a 'Resync' button in order to resync the failed event. 3.3 Dependency Syncing Certain Document Types have dependencies. For example, before syncing a Sales Invoice, the Item and Customer need to be present in the current site. So, Item and Customer are dependencies for Sales Invoice. Event Streaming handles this by on-demand dependency syncing. Whenever any document is to be synced, it first checks whether the document has any dependencies (Link fields, Dynamic Link fields, Child Table fields, etc.). If that dependency is not fullfilled i.e. the dependent document (eg: Item) is not present on your consumer site, it will be synced first and then the Sales Invoice will be synced. For example: Sales Invoice syncing with Item dependency: 3.4 Naming Configuration Check the 'Use Same Name' checkbox to let the documents have same name on both Event Producer and Event Consumer sites. If this is not checked, then the document will be created using the naming conventions of the current site. ||| Note: For Document Types that have naming series, it is advised to keep the 'Use Same Name' checkbox unchecked, to prevent naming conflicts. If this is unchecked, the Documents are created by following the naming conventions on the current site and the 'Remote Site Name' and 'Remote Document Name' custom fields are set in the synced document to store the Event Producer site URL and the document name on the remote site respectively. 3.5 Mapping Configuration If you want to stream documents between a OneHash instance and another Frappe app for a particular Document Type with same or different structures, or if field names are different in both the sites, you can use Event Streaming with Mapping Configuration. For this you need to first set up a Document Type Mapping. To access Document Type Mapping, go to: ++Home > Automation > Event Streaming > Document Type Mapping++ 3.5.1 Mapping for DocTypes with similar structure - Mapping Name: Give a unique name to the mapping - Local Document Type: The Document Type in your current site - Remote Document Type: The Document Type on the Event Producer site which you want to sync In the Field Mapping child table: - Local Fieldname: The fieldname in the Local Document type of your current site. - Remote Fieldname: The fieldname in the Remote Document type of the Event Producer site which you want to map to the Local Fieldname. During the sync, the value of the remote fieldname gets copied to the local fieldname. 3.5.2 Default value for some field If your field is not mapped to any other remote fieldname and you always want the field to have the same value, set the set the same in the default value field. Event if you have set the remote fieldname, in case during the sync, remote field's value is not found and if the "Default Value" has been specified, it will be set. 3.5.3 Mapping for DocTypes having child tables If the field you are trying to map is a child table, you need to create another Document Type Mapping for the child table fields. - Mapping Type: Select the Mapping Type as Child Table. - Mapping: Select the Document Type Mapping document you created for the child table. 3.5.4 Mapping for DocTypes having dependencies (Link, Dynamic Link fields) If the DocTypes you are trying to map have any kind of dependencies like Link or Dynamic Link fields, you need to set up another Document Type Mapping for syncing the dependencies. For example, let's assume that the local doctype is Opportunity and the remote doctype is OneHash Opportunity. The field party_name (Link field for DocType Lead) in Opportunity is mapped to full_name (Data field) in OneHash Opportunity. During the sync, this Lead has to be created for the main Opportunity to sync. So you need to set up a mapping for this Link Field too. - Mapping Type: In this case, the Mapping Type is Document. - Mapping: Select the mapping you just created. - Remote Value Filters: You need to specify the filters that will fetch the exact remote document to be mapped. Like in this case, the remote DocType is OneHash Opportunity which can be uniquely fetched using name, phone number and country. The format is: { "remote fieldname": "field or expression from where we will get the value for that fieldname"} If you want to fetch the value from somewhere, start the expression with eval: Like in this case it is: eval:frappe.db.get_value('Global Defaults', None, 'country') Lastly, enable the 'Has Mapping' option in the Event Configuration child table in Event Producer against the required Document Type and select the Document Type Mapping you just created.

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

Translations

Translations OneHash is available in more than 80 languages most of which has been contributed by OneHash community. | 1. How to contribute translations? 1. Open Translations Tool from the awesome bar 2. Select the language of your choice 3. Click any source message from left sidebar for which you want to add translation. 4. In the Translated Text field enter your suggested translation and click on Suggest. 5. You can click on another source text from left sidebar and add another translation. 6. Once you are done with all the translations you can click on Contribute Translations button. 7. You can view the status of your contribution by clicking on the source text under Contributed Translations section. | 2. Status of the Contributed Translation After you submit your translation, it will be queued for verification. A member of the Frappe team/community will validate the contributed translation and set the status as Verified if the translation is correct. If the contributed translation is incorrect, the member of the Frappe team/community will reject that contributed translation. Every week the translation server will create a Pull Request containing all the verified translations that were contributed. | 3. Become a Verifier for Translations If you want to verify the translations contributed by other members of the community, sign-up on translatev2.onehash.com. Verifiers can verify or reject the contributions.

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

How to create a new Video?

Video Videos can be added from both Vimeo and YouTube, using the Video DocType. You can add Videos with their URLs, descriptions, thumbnails, etc. Some of its uses are to maintain educational course material and to track personal YouTube video engagement. To access Videos, go to: Go to the awesome bar and search ' Video' | 1. How to create a new Video 1. Go to the Video list and click on New. 2. Enter the title for the Video. 3. Select the Provider. The default video provider is YouTube. 4. Enter the URL to access the Video. 5. You can optionally add a publishing date and duration of the video in days-hours-minutes-seconds. 6. You can also add some description for it. 7. Click Save. After Saving, you will get a provision to add an image/thumbnail for the Video. You can also watch the Video in the Document itself after saving it. | 2. Features ||| 2.1 Tracking Video Analytics via YouTube YouTube Video statistics can be tracked and analysed. This is useful to track the view count and engagement of a Video you published. For this you must first enable YouTube Tracking in Video Settings: ++Video Settings > Enable YouTube Tracking++ Once you enable this, the API Key and Frequency fields will be visible. API Key : You can generate an API Key in your Google Developers Console. You can refer to the YouTube Data API Documentation for steps to generate the same. Frequency: You can choose how often the system must automatically update your statistics. The available options are every 30 minutes, 1 hour, 6 hours and Daily (once everyday). Apart from automatic updation, the statistics are updated on Save. So, all the Videos created/updated after enabling YouTube tracking, will have statistics updated on Save. ||| 2.2 YouTube Interactions Report The YouTube Interactions Report provides a consolidated view of all the videos' engagements. The bar chart provides visual analysis of Likes vs Views. You can filter the report data by the Published Date range. || Note : The quota for the number of non-billable requests to the YouTube Data API is 10,000 requests as of September 2020. ERPNext automatically updates upto 50 videos in 1 request. Similarly, for 100 videos it would take 2 requests. Assuming 100 videos are updated every hour (frequency = 1 hour): || * 2 requests will be sent per hour || * 48 requests will be sent per a day || Please set the frequency accordingly.

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

Setting the Current Value for Naming Series

Setting the Current Value for Naming Series Naming Series feature allows you to define prefix for naming of a documents. For example, if a Sales Order has prefix "SO", then the series will be generated as SO-00001, SO-00002... and so on. Click here to learn how you can customize Number Series for a transaction/master in OneHash. | 1. Setting the Current Value Naming Series feature also offers a tool where you can set Current Value for specific prefix. This is generally required if you have recently started using OneHash, and have old transactions in the previous system, and you want the numbering series to start in from where it ended in the old system. Let's consider a scenario to learn this better. For example, you have 322 Sales Orders created in your old system with SO00322 as highest Sales Order Id. In OneHash, you need the first Sales Order to pick up #323 when it is saved. To enable this, you should set Current Value for SO series in following steps. Go to Naming Series Tool ++Home > Naming Series++ (You can search the Naming Series in the awesome bar) Update Series Section Select Prefix Considering our scenario, prefix for Sales Order will be "SO". Current Value If you have currently 12 Sales Orders created in your account, then current value updated will be 12. You can edit Current Value to 322, and then click on Update Series Number. With this setting, you will have numbering for the New Sales Orders starting with #323. | 2. Error Due Series Number If you receive a Duplicate Name error while saving a transaction, for example, while saving Item Price, you receive an error saying: ++Duplicate name Item Price RFD/00016++ This error message indicates that when you are saving Item Price, system is trying to allocate "RFD/00016" to that Item Price record. But it is finding that Item Price with this ID is already existing in your system. This error could arise because Current Value for Series/Prefix of Item Price is disturbed and not in sync with actual Current Value. While actual Current Value for Item Price could be 20 (or any number more than 16), someone has set Current Value for this series as 15. To confirm actual Current Value for particular Series, you should check report for document in question (Item Price in this case), and check for the Item Price ID with highest value. Let's assume we find that actual Current Value for Item price is 22, then you go Naming Series, and set Current Value for the Prefix/Series of Item Price to 22, and Update Series Number. These instructions is applicable for all the documents in OneHash for which user can customize Series and its Current Value. Let's consider another scenario to learn this better. On assigning a document to another user, error message says: ++Duplicate name ToDo TDI00014286++ This indicate the Current Value for Series/Prefix of ToDo (TDI) has been disturbed. You should follow these steps to correct value for Current Value for TDI prefix. 1. Check ToDo report for the highest ToDo id value. 2. Setup >> Settings >> Naming Series 3. Check section B of Update Series 4. Select Prefix for ToDo "TDI" 5. Ensure that highest number for ToDo is updated as Current Value in Naming Series. If not, correct Current Value, and click on "Update Series Numbering".

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

Understanding DocTypes

Understanding DocTypes 1. DocType 2. DocField 3. Naming 4. Document 5. Controllers - Controller Methods - Controller Hooks 1. Child DocType 2. Single DocType 3. Actions and Links | DocType A DocType is the core building block of any application based on the Frappe Framework. It describes the Model and the View of your data. It contains what fields are stored for your data, and how they behave with respect to each other. It contains information about how your data is named. It also enables rich Object Relational Mapper (ORM) pattern which we will discuss later in this guide. When you create a DocType, a JSON object is created which in turn creates a database table. ||| ORM is just an easy way to read, write and update data in a database without writing explicit SQL statements. Conventions To enable rapid application development, Frappe Framework follows some standard conventions. 1. DocType is always singular. If you want to store a list of articles in the database, you should name the doctype Article. 2. Table names are prefixed with tab. So the table name for Article doctype is tabArticle. The standard way to create a DocType is by typing new doctype in the search bar in the Desk. A DocType not only stores fields, but also other information about how your data behaves in the system. We call this Meta. Since this meta-data is also stored in a database table, it makes it easy to change meta-data on the fly without writing much code. Learn more about Meta. ||| A DocType is also a DocType. This means that we store meta-data as the part of the data. After creating a DocType, Frappe can provide many features out-of-the-box. If you go to /desk#List/ToDo you will be routed to the List View in the desk. Similarly, you get a Form View at the route ++/desk#Form/ToDo/000001++. The Form is used to create new docs and view them. Module A DocType will always belong to a module, to enable easier grouping of related models. Frappe comes with a lot of built-in modules. For e.g 1. **Core **- contains doctypes like DocType, DocField, Report, System Settings, etc 2. **Desk **- contains doctypes like ToDo, Event, Note, Kanban Board, etc 3. **Email **- contains doctypes like Email Account, Newsletter, Email Group, etc Modules also helps in grouping of code files in directories. The controller files generated by a DocType will live in it's respective Module directory. | DocField A DocField is a list of fields which describes what properties a DocType will have. For instance, a ToDo doctype has fields ++description++, ++status++ and ++priority++. These ultimately become columns in the database table ++tabToDo++. The DocField stores meta-data about the field. Some of them are described below. Similar to the ++depends_on++ property which determines whether a field will be displayed or not, in Version 12 we have introduced two new properties: - ++mandatory_depends_on++: If this condition is satisfied, the field will be mandatory. - ++read_only_depends_on++: If this condition is satisfied, the field will be read only. Frappe comes with more than 30 different fieldtypes out-of-the-box. These fieldtypes serve a variety of use-cases. Learn more about Field Types. | Naming All docs in Frappe have a primary key called name. This is the unique id by which you will be finding records and manipulating them using the ORM. You can configure how docs should be named when a new document is created. The following are the ways you can setup naming in a DocType. Doctype Autoname You can set the name by the autoname property of the DocType. **1. field:[fieldname] ** The doc name is fetched from the value of the field provided. **2. [series] ** You can provide a naming pattern which will be incremented automatically. For e.g, if you set it as PRE.#####, the first document created will have the name as PRE00001, and second one will be PRE00002 and so on. **3. naming_series: ** The naming pattern is derived from a field in the document. For e.g, you have a field naming_series in your document and it's value is set as PRE.#####, then that will be the pattern used for generating the name. This value can change per document. So the next document can have a different pattern. || This works only if you have a field called ++naming_series++ in your DocType. **4. Prompt ** If you set it as Prompt, the name is required to be filled in manually. **5. Format ** This is the most flexible one when it comes to configuring your naming schemes. Let's say we have ++EXAMPLE-{MM}-test-{fieldname1}-{fieldname2}-{#####}++ Everything outside the curly braces are plain text. Keywords inside the curly braces will be evaluated based on what they represent. In this case: - MM: will be replaced by the current month - fieldname1: will be replaced by the value of ++fieldname1++ in the document - #####: will generate a series, which starts with ++00001++ So the final name may look like, ++EXAMPLE-02-test-value1-value2-00001++ By Controller Method You can also define a name programatically by declaring an autoname method in the controller class. Example By Document Naming Rule You can also create rules for naming DocTypes by creating Document Naming Rule You can create multiple Document Naming Rules for a particular doctype that can be applied selectively based on filters. To define a Document Naming Rule you have to specify - Document Type it is being applied on - Priority of the rule (rules with higher priority will be applied first) - Conditions to apply the rule - Naming Rules Numbering You can define various numbering prefixes for the rule based on the conditions defined. This is done by setting a prefix and the number of digits for that rule. For example if you are creating a separate numbering for high priority todos: - Prefix: todo-high- - Digits: 3 Will lead to numbering like todo-high-001, todo-high-002 and so on. Priority of Naming Naming priority is as follows - Document Naming Rule - autoname controller method. - autoname DocType property Special Rules - Child DocTypes do not follow naming rules - Amended documents have a suffix (-1, -2 etc) to the original document | Document A Document is an instance of a DocType. It usually maps to a single row in the database table. We refer to it as ++doc++ in code. Example Let's say we have a DocType ToDo with the following fields: - ++description++ - ++status++ - ++priority++ Now, if we want to query a document from the database, we can use the ORM. You get the values of ++description++, ++status++ and ++priority++, but you also get fields like ++creation++, ++owner++ and ++modified_by++ which are fields added by default by the framework on all++docs++. | Controllers A Controller is a normal python class which extends from ++frappe.model.Document++ base class. This base class is the core logic of a DocType. It handles how values are loaded from the database, how they are parsed and saved back to the database. When you create a DocType named ++Person++, a python file is created by the name ++person.py++ and the contents look like: All the fields are available to the class as attributes. Controller Methods You can add custom methods to your Controller and it will be callable using the doc object. For example, You can also override the pre-defined document methods to add your own behaviour. For e.g to override the ++save()++ method, Controller Hooks To add custom behaviour during the lifecycle of a document, we have controller hooks. To use a controller hook, just define a class method with that name. For e.g **1. Create a document ** To create a new document and save it to the database, **2. Load a document ** To get an existing document from the database, | Child DocType Up until now we have only seen DocTypes that can have a single value for each field. However, there might be a need for storing multiple records against one record, also known as many-to-one relationships. A Child DocType is doctype which can only be linked to a parent DocType. To make a Child DocType make sure to check Is Child Table while creating the doctype. Child DocType records are directly attached to the parent doc. | Single DocType A Single DocType is a DocType that holds only one record in the database. It is useful for persisting things like System Settings, which don't make sense to have multiple records. Schema Single DocTypes are stored in the tabSingles table in the database, with each property having its own record. Columns: - doctype - field - value | Actions and Links Actions A DocType may also have ++Daily Action++ that will result in a button creation on the DocType View. Supported actions are: Server Action: This will trigger a whitelisted server action. Links A standard navigation aid to the DocType view is the ++Links++ section on the dashboard. This helps the viewer identify at a glance which document types are connected to this DocType and can quickly create new related documents. **Configuration of Actions and Links ** | Customizing DocTypes If you are using the same application for multiple site (tenants), each site may want specific customization on top of the DocType. For example if you have a "Customer" DocType each user may want addition Custom Fields or naming or other configuration that would be specific to them. To allow for site-specific customization, Frappe Framework has multiple approaches: - Custom Field: A DocType that keeps track of site-specific fields. - Property Setter: This keeps track of specific properties that are overridden in DocType and its children. - Customize Form: A view that helps you easily customize DocTypes - Client Script: Additional client-side event handlers. - Server Script: Additional server-side business logic. - Custom DocPerm: Additional Permission (handled via Role Permission Manager) Customize Form Customize Form is a view that helps you override properties of a DocType and add Custom Fields via a single view. When you change any properties of the DocType via Customize Form, it will not change the underlying DocType but add new custom objects to override those properties. This is done in a seamless manner. Adding Custom Links and Actions You can also add / edit Links and Actions via Customize Form. These changes are saved in the same DocTypes (DocType Link and DocType Action) but with a custom property checked. These addtional (custom) configurations are automatically applied when metadata is fetched via frappe.get_meta.

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

Field types

Field Types The following are the types of fields you can define while creating new ones, or while amending standard ones. Link Link field is connected to another master from where it fetches data. For example, in the Quotation master, the Customer is a Link field. Dynamic Link Dynamic Link field is one which can search and hold value of any document/doctype. Check This will enable you to have a checkbox here. Select Select will be a drop-down field. You can add multiple results in the Option field, separated by row. Table A table will be a kind of Link field which renders another DocType within the current form. For example, the Item Table in the Sales Order is a Table field, which is linked to Sales Order Item DocType. Attach Attach field allows you to browse a field from the File Manager and attach the same herein. Attach Image Attach Image is a field wherein you will be allowed to attach Images of the format jpeg, png, etc. This becomes the Image representing that particular DocType. For e.g., you would want the image of an Item in its DocType, you can choose your field to be an Attach Image Field. Text Editor Text Editor is a text field. It has text-formatting options. In OneHash, this field is generally used for defining Terms and Conditions. Date This field will enable you to enter the Date in this field. Date and Time This field will give you a date and time picker. The current date and time (as provided by your computer) are set by default. Barcode In this field, you can specify the field as Barcode which will allow you to enter a Barcode number. Oce you do that, the Barcode would automatically get generated against the number. Button This kind of field will be an action button, like Save, Submit, etc. Code If the Field Type is selected as code, you will be able to enter a Code to the field. Color You will have the option of specifying the color for this Form. Column Break Since OneHash has multiple column layouts, using Column Breaks, you can divide a set of fields into a maximum of two columns. Currency Currency field holds numeric value, like Item Price, Amount, etc. Currency field can have value up to six decimal places. Also, you can have a currency symbol being shown for the currency field. Data The data field will be a simple text field. It allows you to enter a value of up to 140 characters, making this the most generic field type. To enable validations for Email, Name, or Phone Number inputs, set options to "Email", "Name", "Phone" in Settings > DocType. Float Float field carries numeric value, up to nine decimal places. Precision for the float field is set via Set Precision. ++Setup > Settings > System Settings++ The setting will be applicable on all the float field. Geolocation Use Geolocation field to store GeoJSON ${color}#bb3adf. Stores polygons, lines, and points. Internally it uses the following custom properties for identifying a circle. HTML You can select the field to be an HTML field when you want the data to be entered in HTML format. Image Image field will render an image file selected in another attach field. For the Image field, under Option (in Doctype), a field name should be provided where the image file is attached. By referring to the value in that field, the image will be a reference in the Image field. Int (Integer) The integer field holds numeric value, without decimal place. Small Text Small Text field carries text content and has more character limit than the Data field. Long Text You can define your field to a Long Text Field when you would want to enter data with an unlimited character limit. Text This field type would allow you to add text in the field. The character limit in Small text, Long text and Text fields shall be determined based on the Relational Database Management System. Markdown Editor This field will allow you to add the text in Markup language. Password The password field will have decoded value in it. Percent You can define the field as a Percentage field which in the background will be calculated as a percentage. Rating You can define the field as a Rate field which in the background will be calculated as Rating. Read Only Read Only field will carry data fetched from another form which will be non-editable. You should set Read Only as field type if its source for value is predetermined. Section Break Section Break is used to divide the form into multiple sections. Signature You can define the field to be a Signature field wherein you can add the Digital Signature in this field. This field allows you to write a signature in a block, just like we signature on a paper. Table MultiSelect This is a combination of 'Link' type and 'Table' type fields. Instead of a child table with 'Add Row' button, in one field multiple values can be selected. Time This is a Time field where you can define the Time in the field. Duration You can use the Duration field if you want to define a timespan. If you don't want to track duration in terms of days or seconds, you can enable "Hide Days" and "Hide Seconds" options respectively in your Form. For example, here in the SLA DocType, option is present to choose hours and minutes only.

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

Managing Permission Level

Managing Perm Level in Permission Manager - Perm Level reduces the amount of information visible or changeable in a specific Doctype for certain User Groups. Whereas you can define visibility or changeability for each Doctype by customizing the Doctype-specific Permissions Rule, you can change these for specific Sections or Fields with the Perm Level. - In each document, you can group fields by "levels". Each group of fields or field group is denoted by a unique number (0, 1, 2, 3 Etc.). A separate set of permission rules can be applied to each field group. By default, all fields are of level 0. Perm Level (An abbreviated form of Permission Level) for a field can be defined in the Customize form. - If you need to assign different permissions of a particular field to different users, you can achieve it via Perm Level. Let's consider an example for better understanding. - Delivery Note is accessible to Stock Managers as well as Stock Users. You don't wish Stock User access the amount related field in Delivery Note, but other fields should be visible just like it is visible Stock Manager. - For all related fields that should not be seen, you can set Perm Level as 2. - For Stock Managers, they will have permission on fields on Delivery Note with Perm Level 2. In contrast, a Stock User will not have permission on Perm Level 2 for Delivery Note because their role has not been assigned with a rule allowing them to read or write in Field with Perm Level of 2, as shown below. - Considering the same scenario, if you want a Stock User to access a field at Perm Level 2 but do not want to permit to edit it, the Stock User will be assigned with permission to only be able to read on Perm Level 2, but not to write/edit. - Perm Levels (1, 2, 3 or 2, 1, 3 or 3,2,1) do not need to be in any particular order. They do not imply hierarchy. Perm Level is primarily used to group several fields together and then assign permission to Roles for that group. Hence, you can set any perm level for an item and then do permission setting for it. - If you want to change permissions for all fields in a section, you can change the perm level for the section field, and it will be applied to all fields in the section.

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

How to create an Email Template?

Email Template Every email sent is different but certain emails can be standardized, usually known as Email Template or Standard Reply. To access the Email Template list, go to: ++Home > Settings > Email / Notifications > Email Template++ | 1. How to create an Email Template 1. Go to the Email Template list, click on New. 2. Enter a name for this Email Template. 3. Enter a Subject for this Email Template. 4. Response is the standard content of the email that will be a part of this template. 5. Save. 1.1 How to use Email Template You can use this Email Template in the Emails that are sent from OneHash in the "CC, BCC & Email Template" field of the email section of the document. OneHash will fetch the subject and response as per the template selected. You can set a Default Email Template for each document type via Customize Form. 1.2 How to get fieldnames The fieldnames you can use in your email template are the fields in the document from which you are sending the email. You can find out the fields of any documents via Customize Form and selecting the document type (e.g. Sales Order). 1.3 Using HTML to build the template There's a Use HTML check that you can toggle to switch from the text editor to a code editor. This allows finer control over the body of the email and makes it easier to use for features like loops in Jinja. 1.4 Templating Templates are compiled using the Jinja. To learn more about Jinja, visit this page.

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

Customize Print Format

Customize Print Format Print Formats are the layouts that are generated when you want to Print or Email a transaction. This feature comes handy for all the transactions in OneHash like all the sales and purchase transactions, HR documents and lot more. In OneHash, there are three types of Print Formats, namely, Standard Print Format, Custom Print Format and HTML Print Format. Standard Print Format Every Printable Document Type in OneHash will have it's own Standard Print Format which gets generated by the Frappe Framework. The field placement in the Standard Print Formats will be dependent on the position of the respective fields in the document. Any changes made to the Standard Print Format will have to be done using a Customize Form. You can also checkout adding fields in Print Format Custom Print Format You can also create your own custom Print Formats by using a tool called Print Format Builder.. This tool will help you in making a simple Customized Print Format by dragging and dropping fields in a format as per your preference. Once a Print Format is created using a Print Format Builder, then it will be available for selection in the Print Format List, after Standard. For creating Custom Print Formats, OneHash comes with several pre-defined templates in three styles, namely, Modern, Monochrome and Classic. To create your versions, open an existing template from: ++Setup > Printing > Print Formats++ HTML Print Format For creating an HTML Print Format, you would require some knowledge of HTML, CSS, and Python. Here is an example of how a Print Format can be design which has very specific format. Print Formats are provided on the server-side using the Jinja Templating Language. All forms have access to the doc object which contains information about the document that is being formatted. You can also access common utilities via the frappe module. Print Settings To edit/update your print and PDF settings, go to: ++Setup > Printing and Branding > Print Settings++ Example || Notes To get date and currency formatted values use, doc.get_formatted("fieldname") For translatable strings, use {{ _("This string is translated") }} ${youtube}Customize print format

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

How to create a Print Format?

Print Format With Print Format, you can set how document types look when printing. Every transaction has a default Print Format called 'Standard'. You can change Print Formats by: - Using the Print Format form - Using Jinja/JS scripting under Print Format - Using the Print Format Builder to create print formats with UI - Using Customize Form to hide/unhide fields To access Print Format, go to: ++Home > Settings > Printing > Print Format++ | 1. How to create a Print Format 1. Go to the Print Format List, click on New. 2. Enter a name and select a DocType for which the Print Format is to be used. 3. The module for which it should apply will be selected automatically. 1. Save. Under Style Settings, there are options to change the styling options. With those options, you can change the font, align the labels together on the left or right, add headings for sections, etc. To style the Print Format using custom Jinja/JS, click on Custom Format. If you select this option, there'll be a checkbox for Raw Printing. If developer mode is enabled, you can select Standard as yes to contribute a print format as a standard (preset) print format in the system. 1.1 Using Customize form to change the Print Format items Fields in the transactions and their child tables can be hidden/shown using Customize Form. For example, if you want to hide the 'Item Code' when printing a Quotation, click on the print icon to enter the print screen. Go to Menu > Customize, select Quotation Item in the 'Enter Form Type' field. To know more, visit the Customize Print Format page. In the fields table, expand the 'Item Code' row, scroll down and tick the 'Print Hide' checkbox. A newly created Print Format can be selected on the print screen of a transaction. From there you can see how it looks and proceed to print.

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

Sending Email from any Document

Sending Email from any Document In OneHash you can send any document as email (with a PDF attachment) by clicking on Menu > Email after opening any document. || Note: You must have outgoing Email Accounts set up for this. After you click on send, the email gets added to the email queue. It will be in the Sending status until it is Sent. The status of the email is displayed in the queue, if sending has failed, it can be sent by clicking on Send Now. The following options are available when sending an Email. - CC: Carbon Copy of the email. Useful when you want to keep someone in the conversation loop but don't want to address the email directly to them. - BCC: Blind Carbon Copy is similar to CC but everyone else on the email thread cannot see that the mail was also sent to the BCC recipients. This is useful to hide the email address of certain people if you're sending the email to a lot of people who don't necessarily know each other. - Email Template: You can create preset templates to send out standard replies. Email Templates are already available in the system for Dispatch Notification, Leave Status Notification, and Leave Approval Notification. - Send me a copy: This will send a copy to your email address. It's useful to ensure that the email was sent without any errors. - Send Read Receipt: Ticking this checkbox will send you a notification if the receiver has read the email. In case of multiple receivers, even if one has read the email, you'll get a notification. - Attach Document Print: Attach the PDF of the document you're sending via email. - Select Attachments: Any additional attachments can be added here. The following two fields are the fields which appear on the print screen: - Select Print Format: The Print Format of the document. - Select Languages: The language in which the PDF is to be generated.

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

Email Inbox

Email Inbox Once an email account is added, the email inbox will be accessible. Running a business involves many transactional email exchanges with parties like Customers and Suppliers and other members within the company. Email Inbox feature allows you to pull all your business emails into your OneHash account. Enabling access to business emails with other transactional details makes OneHash a single platform for accessing all business information in one place. In OneHash , you can configure Email Inbox for each System User. Following are the detailed steps to configure Email Inbox for a User. | 1. Create a User You can configure an Email Inbox for a System User only. Hence ensure that you have added yourself and your colleagues as a User and assigned them required permissions. To know how to add a new User, go to the User page. | 2. Create an Email Domain Email Domain for the following Services is available out-of-the-box and you can directly proceed to create an Email Account. *** Gmail** *** Yahoo** *** Sparkpost** *** SendGrid** *** Outlook.com** *** Yandex.mail** To be able to send and receive emails into your OneHash account from other email services (like WebMail or Gmail), you should set up an Email Domain master. In this master, email gateway details like SMTP Address, Port No., IMAP/POP3 address details are captured. If you have ever configured a local email client (like Outlook), Email Domain master requires details to be fed similarly. To add new Email Domain, go to: ++Home > Settings > Emails > Email Domain > New++ Know more about Email Domains here. Once you have configured an Email Domain for your Email Service, it will be used for creating Email Accounts for all the Users in your OneHash account. | 3. Email Account Create an Email Account based on the Email ID of the User. For each User whose email account is to be integrated with OneHash, an Email Account master should be created for it. If you are creating an Email Account for your colleague who's Email Password is unknown to you, then check field "Awaiting Password". As per this setting, a User (for whom Email Account is created) will get a prompt to enter email password when accessing his/her OneHash Account. || If you are creating an Email Account for Email Inbox of a User, then leave Append To field as blank. Read Email Account documentation for more details on how to setup. | 4. Linking Email Account in the User master Once an Email Account is created for a User, select that Email Account in the User. This will ensure that emails pulled from the said Email ID will accessible only to this User in your OneHash account. You can link multiple emails with one user. | 5. Using Email Inbox If you have correctly configured Email Inbox as instructed above, then on the login of a User, Email Inbox icon will be visible. This will navigate the user to Email Inbox view within the OneHash account. All the Emails received on that email will be fetched and listed in the Email Inbox view. User will be able to open emails and perform various actions on them. 5.1 Folders In OneHash , you can link multiple Email Accounts with the single User. To switch to Inbox of a different email account and access other folders like Sent Emails, Spam, Trash, click on Email Inbox option in the left bar. 5.2 Actions On the emails in your inbox, you can take various actions like Reply, Forward, Mark as Spam or Trash. 5.3 Relink You can relink an email to a document like Issue, Lead, Opportunity, etc. based on the context of the email. Select the document type and the document to link the email to. | 6. Related Topics 1. Email Account 2. Sending Email 3. Email Domain

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

Shopify Integration

Shopify Integration The Shopify Connector pulls the orders from Shopify and creates Sales Order against them in OneHash. While creating the sales order if Customer or Item is missing in OneHash the system will create new Customer/Item by pulling respective details from Shopify. **How to Setup Connector? ** Shopify Connector is moved out from OneHash and available in Open Marketplace. **Note to users of old Shopify Connector ** If you have not setup Shopify Connector on your OneHash site you can proceed to next step. If you are using old Shopify integration that's provided in OneHash then you will have to disable the connector before proceeding. After installing the app, it will migrate existing data e.g. unique product_id for items to separate doctype. Once you are done configuring new integration, you can confirm the status of migration by going to "Ecommerce Integration Log" doctype. Create A Custom App in Shopify 1. Click on Apps in menu bar Menu Section 2. Click on Develop apps for your store to create custom app new app 3. Create New app  4. Fill up the details and create app. The each app has its own API key, Password and Shared secret  5. Allow following permissions to the app. - Draft Orders - Read and Write - Orders - Read and Write - Location - Read - Customers - Read - Assigned fulfillment orders - Read and Write - Products - Read and Write - Product listings - Read and Write - Inventory - Read and Write your final admin scopes should look like this: 6. Install the app on your site  **Setting Up Shopify on OneHash:- ** Once you have created a Private App on Shopify, setup App Credentials and other details in Shopify Settings in OneHash. To access Shopify Settings, go to: Awesome search bar > Shopify Setting 1. Fill-up Shopify site URL, Access Token and API Secret from Shopify's Private App.   2. Setup Customer, Company and Inventory configurations. 3. Shopify setting page 4. Setup Sync Configurations. The system pulls Orders from Shopify and creates Sales Order in OneHash. You can configure OneHash system to capture payment and fulfilments against orders. Shopify sync config for orders 5. Setup Tax Mapper. Prepare tax and shipping charges mapper for each tax and shipping charge you apply in Shopify. You can find name of your taxes from your Shopify Admin page.   Finding Shopify Tax names After setting up all the configurations, enable the Shopify sync and save the settings. This will register the API's to Shopify and the system will start Order sync between Shopify and OneHash. **Syncing Old Orders From Shopify ** Once you are done with the Shopify configuration and have enabled Shopify Syncing, you also get a provision to sync your old orders from Shopify into OneHash. This syncing will happen in background and can take few hours depending on number of orders you have. 1. Enable "Sync Old Shopify Orders" 2. Enter the From and To dates between which the orders need to be synced shopify sync old orders **Inventory Sync ** You can update your inventory with Shopify for items that are synced from Shopify. Inventory sync is done every hour with a scheduled job. Inventory levels of items that have changed since last sync are pushed to Shopify. Inventory levels of OneHash warehouses are mapped 1 to 1 with Shopify locations. 1. To enable inventory sync click on the checkbox, this will show you a table to map OneHash warehouse with Shopify Location. 2. Select sync frequency. 30 to 60 minutes is recommended frequency. 3. Click on "Fetch Shopify Locations" button to populate Shopify locations in the table. 4. Link each location with OneHash warehouse. 5. Save the settings. Note: This connector assumes that OneHash is main source of information about inventory levels, any changes done to Shopify inventory levels will be overwritten by OneHash if OneHash inventory levels change. Note: Shopify does not support fractional quantity. If fractional quantity is found in OneHash, the inventory level on Shopify will be set by rounding it down to nearest whole number. **Item Sync ** You can enable sync of new OneHash items to Shopify by checking "Upload new OneHash items to Shopify". You can also update Shopify item upon updating OneHash item. Following fields are uploaded / updated: OneHash FieldShopify FieldItem NameTitleItem CodeSKUDescription bodyDescriptionItem GroupProduct TypeWeight per UnitWeightWeight UOMWeight UOM By default all items are marked as Draft on Shopify and not published in any store. Purpose of providing this functionality is to sync items with Shopify. It's not possible to map every fields 1-to-1. Upon creation of item on Shopify using this method, it's linked with OneHash, this eliminates possibility of duplication. You can modify items on Shopify later to add more details. Note: This feature is not supported in data import or for variant / template items. **Cancellation of Orders ** This connector handles various cancellation scenario in following manner: 1. If Order on Shopify is cancelled and it doesn't have invoice or Delivery note linked against it then Sales Order is cancelled. 2. If Sales Order does have any linked document, then status of order on Shopify is added to the respective document. Cancellation and preparation of appropriate documents has to be done by user based on this information.

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025

Improve Email Tracking & Engagement with OneHash CRM’s Email Insights

🚀 Introducing Email Insights in OneHash CRM/ERP 📧 Have you ever sent a quotation to a lead or customer and wished you could gauge their interest level? 🤔 Prioritizing follow-ups and nurturing leads effectively can be challenging without clear insights. But with OneHash CRM/ERP’s Email Insights feature, you can now effortlessly track engagement and determine interest levels. 🎯 ✨ How It Works When you send an email from OneHash CRM, Email Insights records the number of times your lead or customer opens it. 👀 This simple yet powerful feature helps you understand their level of interest, allowing you to strategize follow-ups more effectively. 📊 🌍 Beyond Leads and Customers The best part? Email Insights isn’t limited to tracking emails sent to leads or customers—it works across multiple documents in OneHash ERP, including projects, job cards, employees, and more. 🔄 In essence, this feature is available system-wide, providing valuable insights across various business processes. 📌 How to Use Email Insights 1. ✉️ Sending Emails: - Open a Customer document, click on the three-dot menu, and send an email with attachments. - Alternatively, use Notifications, run an Email Campaign, or set up a Drip Campaign to send emails. 2. 📊 Tracking Engagement: - Navigate to the Communication List and filter emails based on the linked document (e.g., the quotation or customer document). - Open the relevant communication record. - Click on the Email Insights tab to view the email details along with the number of times it was opened, including timestamps. ⏳ With Email Insights, tracking customer engagement has never been easier! 🚀 Stay ahead by understanding your leads’ and customers’ interest levels and tailor your approach accordingly. Start leveraging Email Insights today and enhance your CRM experience like never before! 🎉

By Frappe Content licensed CC-BY-SA 3.0
Last updated on Jun 18, 2025