In this blog, we will learn how to create new doctypes in ERPNext.
DocType is similar to a Model in other frameworks (like odoo).
When we create doctypes in ERPNext, then database table with the same name gets created (with tab prefix)
e.g – If the doctype name is Library -> the db table name will be tabLibrary
The directory structure for doctypes:-
library_management/library_management/doctype/__init__.py library_management/library_management/doctype/library/__init__.py library_management/library_management/doctype/library/library.js library_management/library_management/doctype/library/library.json library_management/library_management/doctype/library/library.py library_management/library_management/doctype/library/test_library.py
library.json:- JSON file that defines the doctype attributes and fields(table columns)
library.js:- Client-side controller for the Form view
library.py:- Python controller (server side) for library doctype
test_library.py:- Python Unit Test boilerplate for writing tests
library.json
** (This file creates the doctype) **
{ "autoname": "format: PS-{####}", "doctype": "DocType", "fields": [ { "fieldname": "section1", "fieldtype": "Section Break", "label": "Section 1" }, { "fieldname": "field_1", "fieldtype": "Data", "in_list_view": 1, "label": "Field 1 Label", "reqd": 1 }, { "fieldname": "column_break1", "fieldtype": "Column Break", "label": "" }, { "fieldname": "field_2", "fieldtype": "Select", "in_list_view": 1, "label": "Field 2 Label", "options": "option1\option2", "reqd": 1 } ], "module": "library_management", "name": "Doctype Name", "owner": "Administrator", "permissions": [ { "amend": 0, "cancel": 0, "create": 1, "delete": 1, "email": 1, "export": 1, "if_owner": 0, "import": 0, "permlevel": 0, "print": 1, "read": 1, "report": 1, "role": "System Manager", "set_user_permissions": 0, "share": 1, "submit": 0, "write": 1 }, { "amend": 0, "cancel": 0, "create": 1, "delete": 0, "email": 0, "export": 0, "if_owner": 0, "import": 0, "permlevel": 0, "print": 0, "read": 1, "report": 0, "role": "All", "set_user_permissions": 0, "share": 0, "submit": 0, "write": 1 } ], "quick_entry": 1, "show_name_in_global_search": 1, "sort_field": "field1", "sort_order": "DESC", "title_field": "field1", "track_changes": 1, "track_seen": 1, "track_views": 1 }
library.py
** (This file contains business logic for particular doctype) **
import frappe from frappe.model.document import Document class Library(Document): def before_save(self): # code to execute before saving a library record #
library.js
** (This file contains the js code for the form view) **
frappe.ui.form.on('Library', { refresh: function(frm) { // refresh method will run every time a form is refreshed // frm if the form object } });
Read how to create a new app in ERPNext- App Creation and App installation process in ERPNext
Single doctypes in ERPNext
When a DocType has Is Single enabled, it becomes a Single DocType.
It does not create a new database table. All single values stored in the tabSingles table. You can use it for storing global settings.
We will use `frappe.db.get_single_value(doctype_name, field_name)` method to get the value of a field from the single doctype.
NEED HELP?
Hope you find the guide helpful! Please feel free to share your feedback in the comments below.
If you still have any issues/queries regarding the same, please raise a ticket at https://webkul.uvdesk.com/en/customer/create-ticket/.
Also, please explore our Odoo development services & an extensive range of quality Odoo Apps.
For any doubt, contact us at [email protected].
Thanks for paying attention!!
Be the first to comment.