|
|
|
from frappe import _
|
|
|
|
|
|
|
|
app_name = "erpnext"
|
|
|
|
app_title = "ERPNext"
|
|
|
|
app_publisher = "Frappe Technologies Pvt. Ltd."
|
|
|
|
app_description = """ERP made simple"""
|
|
|
|
app_icon = "fa fa-th"
|
|
|
|
app_color = "#e74c3c"
|
|
|
|
app_email = "info@erpnext.com"
|
|
|
|
app_license = "GNU General Public License (v3)"
|
|
|
|
source_link = "https://github.com/frappe/erpnext"
|
|
|
|
app_logo_url = "/assets/erpnext/images/erpnext-logo.svg"
|
|
|
|
|
|
|
|
|
|
|
|
develop_version = '13.x.x-develop'
|
|
|
|
|
|
|
|
app_include_js = "erpnext.bundle.js"
|
|
|
|
app_include_css = "erpnext.bundle.css"
|
|
|
|
web_include_js = "erpnext-web.bundle.js"
|
|
|
|
web_include_css = "erpnext-web.bundle.css"
|
|
|
|
email_css = "email_erpnext.bundle.css"
|
|
|
|
|
|
|
|
doctype_js = {
|
|
|
|
"Address": "public/js/address.js",
|
|
|
|
"Communication": "public/js/communication.js",
|
|
|
|
"Event": "public/js/event.js",
|
|
|
|
"Newsletter": "public/js/newsletter.js",
|
|
|
|
"Contact": "public/js/contact.js"
|
|
|
|
}
|
|
|
|
|
|
|
|
override_doctype_class = {
|
|
|
|
'Address': 'erpnext.accounts.custom.address.ERPNextAddress'
|
|
|
|
}
|
|
|
|
|
|
|
|
welcome_email = "erpnext.setup.utils.welcome_email"
|
|
|
|
|
|
|
|
# setup wizard
|
|
|
|
setup_wizard_requires = "assets/erpnext/js/setup_wizard.js"
|
|
|
|
setup_wizard_stages = "erpnext.setup.setup_wizard.setup_wizard.get_setup_stages"
|
|
|
|
setup_wizard_test = "erpnext.setup.setup_wizard.test_setup_wizard.run_setup_wizard_test"
|
|
|
|
|
|
|
|
before_install = "erpnext.setup.install.check_setup_wizard_not_completed"
|
|
|
|
after_install = "erpnext.setup.install.after_install"
|
|
|
|
|
|
|
|
boot_session = "erpnext.startup.boot.boot_session"
|
|
|
|
notification_config = "erpnext.startup.notifications.get_notification_config"
|
|
|
|
get_help_messages = "erpnext.utilities.activation.get_help_messages"
|
|
|
|
leaderboards = "erpnext.startup.leaderboard.get_leaderboards"
|
|
|
|
filters_config = "erpnext.startup.filters.get_filters_config"
|
|
|
|
additional_print_settings = "erpnext.controllers.print_settings.get_print_settings"
|
|
|
|
|
|
|
|
on_session_creation = [
|
|
|
|
"erpnext.portal.utils.create_customer_or_supplier",
|
|
|
|
"erpnext.shopping_cart.utils.set_cart_count"
|
|
|
|
]
|
|
|
|
on_logout = "erpnext.shopping_cart.utils.clear_cart_count"
|
|
|
|
|
|
|
|
treeviews = ['Account', 'Cost Center', 'Warehouse', 'Item Group', 'Customer Group', 'Sales Person', 'Territory', 'Assessment Group', 'Department']
|
|
|
|
|
|
|
|
# website
|
|
|
|
update_website_context = ["erpnext.shopping_cart.utils.update_website_context", "erpnext.education.doctype.education_settings.education_settings.update_website_context"]
|
|
|
|
my_account_context = "erpnext.shopping_cart.utils.update_my_account_context"
|
|
|
|
webform_list_context = "erpnext.controllers.website_list_for_contact.get_webform_list_context"
|
|
|
|
|
|
|
|
calendars = ["Task", "Work Order", "Leave Application", "Sales Order", "Holiday List", "Course Schedule"]
|
|
|
|
|
|
|
|
domains = {
|
[Agriculture Domain] (#11663)
* created Soil Analysis, Water Analysis, Weather and Fertilizer doctype
* soil doctype edited and crop doctype added
* minor stuff
* Land Unit + Leaflet
* crop cycle added
* Land Unit changes + Crop cycle
* autoname for plant_analysis
* created Agriculture Task
* minor stuff
* - deleted agriculture_task
- current state after the call
* [Agriculture] modified fertilizer doctype to have a link to Item
This was done so that the `Fertilizer` doctype could track the contents exclusive to the fertilizer, whereas the `Fertilizer Item` could be a seperate entity, so as to leverage the existing ERPNext doctypes
* Added fields to `Water Analysis` doctype
- Collection Datetime
- Laboratory Testing Datetime
- Results Datetime (default to Laboratory Testing Datetime)
* Edited the doctypes `Agrivulture Task`, `Pest` and `Soil Texture`
- Created `agriculture task` doctype
- added fields `Common Name`, `Scientific Name`, `Treatment` and `Treatment Options` to `Pest` doctype
- edited `Soil Texture` doctype to contain a soil texture ternary plot diagram made using SnapSVG. The code was put in public folder so as to be accessible by the entire agriculture module
* Recursively reflect child land unit feature changes on parents
* fixed feature repition bug
* added legeneds to ternary plot
* added stuff
* changes
* fix Task
* reverted the Task Doctype to have naming in the form TASK.#####
* fixed modifications made to TASK doctype
* [dirty commit] added auto create Task from Crop on creation of Crop Cycle
* Changed the Crop Cycle Doctype
- Deleted the "Crop Cycly Task" doctype and its link from "Crop Cycle"
- Creation of a new Project with the same name as the Crop Cycle on creation of a new Crop Cycle
- Creation of all the tasks imported from Agriculture Task doctype of the Crop in the Crop Cycle
* [Agriculture Module] Modifications
- Created childtable doctype "Pest Detected"
- Added childtable "Pest Detected" to Pest
- Modified "Agriculture Task" to include "Start Day" and "End Day" of task
- Modified the code in "Crop Cycle" to create a parent task with same name as Crop Cycle
* [Agriculture Module] fixed Pest doctype not saving issue
* [Agrcilture Module] Changes in Crop Cycle
- removed the creation of a master task on creation of a new crop cycle
- temporary fix to add the pest tasks from the pests added in crop cycle
* land_unit_tree.js fields modified to have field objects instead of just field names
* Revert "land_unit_tree.js modified"
* land_unit_tree.js fields modified to have field objects instead of just field names
* [Agriculture Domain] Converted Agriculture Module to a Domain
- Converted into a Domain field from Select to Link field in Company doctype, linked to Domain doctype
- Agriculture (alpha) is now a Domain
* land_unit area aggregation enabled
* land_unit.py checks feature diff for every ancestor and not just the parent
* Removed unnecessary print messages
* agriculture.py modified to include fixtures
* fixtures added to setup.py inside agriculture module
* [Agriculture Domain] UI tests added
- 'materials' table renamed to 'materials_required' in 'Crop'
- wrote UI test for Crop, Fertilizer, Crop Cycle, Pest, Water Analysis, Soil Texture
- moved creation of tasks from client side to server side in Crop Cycle
- Plant Analysis, Water Analysis, Soil Analysis, Soil Texture docs are now autonamed in the format PAnalysis.#####, WAnalysis.#####, SAnalysis.#####, STexture.##### respectively
- company_name changed in domains.py from 'Schrute Farms.' to 'Schrute Farms'
* [Agriculture Domain] Mostly written server side tests and moved client side code to server side
- moved client side code to server side for Crop, Water Analysis, Pest, Soil Texture,
- wrote server side tests for Crop, Crop Cycle, Fertilizer, Soil Texture, Pest
- NOTE: none of the server side codes were tested
* [Agriculture Domain] All server side tests working locally
* [Agriculture Domain] Testing
- added sample test for Land Unit, which needs to be modified to test multiple things
- modified tests to be independant of each other
* Land Units tests added and area aggregation code migrated to server side
* added land_unit server side tests and on_trash added to land_unit
* Changing field location for start date
* [Agriculture Domain] deleted unnecessary comments
* [Agriculture Domain] reverted changes
* [Agriculture Domain] Modified the code to replace Pest doctype with Land Unit doctype
- Deleted the Pest doctype and replaced it with the more generic Disease doctype
- Deleted the Detected Pest doctype and replaced it with Detected Disease doctype
* [Agriculture Domain] resolves #11654, resolves #11653
* [Agriculture] Added links to soil analysis, soil texture, plant analysis in crop cycle and land unit
- not working perfectly yet
- docs are fetched but not appended
* [Agricuture] Crop Cycle modifed to link with relevent analysis docs, not fully functional
* [Agriculture] added seperate stage for client side agriculture tests
* [Agriculture] minor modification to crop_cycle.js test
* [Agriculture] fixed tests
* upgrade chromedriver in .travis.yml from 2.32 to 2.33
* [Agriculture] added land unit ui test
* [Agriculture] added Agriculture server side test as a seperate stage in travis
* tesing travis.yml
* [Agriculture] Crop Cycle is able to fetch linked analysis docs
* Modified travis.yml for modular server side testing
* [minor fix][Agriculture] in soil_texture
- fixed multiple soil_texture ternary plot creation on refresh
- fixed error on soil composition change
* Update .travis.yml
* removed location field from linked doctypes
* minor fixes and cleanup of agri
* minor fix in agriculture and domain patches
* permissions added to agriculture
- Agriculture Manager and Agriculture User roles were added to all Agriculture doctypes
* [Agriculture]
- Created Agiculture Analysis Criteria and added sample records to it
- All the analysis doctypes now fetch their fields inside a child table, form Agriculture Analysis Criteria
- Also Fertilizer does the same
This was introduced so that, new parameters could be added on demand
* minor changes requested in Agriculture
* minor changes
* minor fix
* Update desktop.py
* Update .travis.yml
7 years ago
|
|
|
'Agriculture': 'erpnext.domains.agriculture',
|
|
|
|
'Distribution': 'erpnext.domains.distribution',
|
|
|
|
'Education': 'erpnext.domains.education',
|
|
|
|
'Hospitality': 'erpnext.domains.hospitality',
|
|
|
|
'Manufacturing': 'erpnext.domains.manufacturing',
|
|
|
|
'Non Profit': 'erpnext.domains.non_profit',
|
|
|
|
'Retail': 'erpnext.domains.retail',
|
|
|
|
'Services': 'erpnext.domains.services',
|
|
|
|
}
|
|
|
|
|
|
|
|
website_generators = ["Item Group", "Item", "BOM", "Sales Partner",
|
|
|
|
"Job Opening", "Student Admission"]
|
|
|
|
|
|
|
|
website_context = {
|
|
|
|
"favicon": "/assets/erpnext/images/erpnext-favicon.svg",
|
|
|
|
"splash_image": "/assets/erpnext/images/erpnext-logo.svg"
|
|
|
|
}
|
|
|
|
|
|
|
|
website_route_rules = [
|
|
|
|
{"from_route": "/orders", "to_route": "Sales Order"},
|
|
|
|
{"from_route": "/orders/<path:name>", "to_route": "order",
|
|
|
|
"defaults": {
|
|
|
|
"doctype": "Sales Order",
|
|
|
|
"parents": [{"label": _("Orders"), "route": "orders"}]
|
|
|
|
}
|
|
|
|
},
|
|
|
|
{"from_route": "/invoices", "to_route": "Sales Invoice"},
|
|
|
|
{"from_route": "/invoices/<path:name>", "to_route": "order",
|
|
|
|
"defaults": {
|
|
|
|
"doctype": "Sales Invoice",
|
|
|
|
"parents": [{"label": _("Invoices"), "route": "invoices"}]
|
|
|
|
}
|
|
|
|
},
|
|
|
|
{"from_route": "/supplier-quotations", "to_route": "Supplier Quotation"},
|
|
|
|
{"from_route": "/supplier-quotations/<path:name>", "to_route": "order",
|
|
|
|
"defaults": {
|
|
|
|
"doctype": "Supplier Quotation",
|
|
|
|
"parents": [{"label": _("Supplier Quotation"), "route": "supplier-quotations"}]
|
|
|
|
}
|
|
|
|
},
|
|
|
|
{"from_route": "/purchase-orders", "to_route": "Purchase Order"},
|
|
|
|
{"from_route": "/purchase-orders/<path:name>", "to_route": "order",
|
|
|
|
"defaults": {
|
|
|
|
"doctype": "Purchase Order",
|
|
|
|
"parents": [{"label": _("Purchase Order"), "route": "purchase-orders"}]
|
|
|
|
}
|
|
|
|
},
|
|
|
|
{"from_route": "/purchase-invoices", "to_route": "Purchase Invoice"},
|
|
|
|
{"from_route": "/purchase-invoices/<path:name>", "to_route": "order",
|
|
|
|
"defaults": {
|
|
|
|
"doctype": "Purchase Invoice",
|
|
|
|
"parents": [{"label": _("Purchase Invoice"), "route": "purchase-invoices"}]
|
|
|
|
}
|
|
|
|
},
|
|
|
|
{"from_route": "/quotations", "to_route": "Quotation"},
|
|
|
|
{"from_route": "/quotations/<path:name>", "to_route": "order",
|
|
|
|
"defaults": {
|
|
|
|
"doctype": "Quotation",
|
|
|
|
"parents": [{"label": _("Quotations"), "route": "quotations"}]
|
|
|
|
}
|
|
|
|
},
|
|
|
|
{"from_route": "/shipments", "to_route": "Delivery Note"},
|
|
|
|
{"from_route": "/shipments/<path:name>", "to_route": "order",
|
|
|
|
"defaults": {
|
|
|
|
"doctype": "Delivery Note",
|
|
|
|
"parents": [{"label": _("Shipments"), "route": "shipments"}]
|
|
|
|
}
|
|
|
|
},
|
|
|
|
{"from_route": "/rfq", "to_route": "Request for Quotation"},
|
|
|
|
{"from_route": "/rfq/<path:name>", "to_route": "rfq",
|
|
|
|
"defaults": {
|
|
|
|
"doctype": "Request for Quotation",
|
|
|
|
"parents": [{"label": _("Request for Quotation"), "route": "rfq"}]
|
|
|
|
}
|
|
|
|
},
|
|
|
|
{"from_route": "/addresses", "to_route": "Address"},
|
|
|
|
{"from_route": "/addresses/<path:name>", "to_route": "addresses",
|
|
|
|
"defaults": {
|
|
|
|
"doctype": "Address",
|
|
|
|
"parents": [{"label": _("Addresses"), "route": "addresses"}]
|
|
|
|
}
|
|
|
|
},
|
|
|
|
{"from_route": "/jobs", "to_route": "Job Opening"},
|
|
|
|
{"from_route": "/admissions", "to_route": "Student Admission"},
|
|
|
|
{"from_route": "/boms", "to_route": "BOM"},
|
|
|
|
{"from_route": "/timesheets", "to_route": "Timesheet"},
|
|
|
|
{"from_route": "/material-requests", "to_route": "Material Request"},
|
|
|
|
{"from_route": "/material-requests/<path:name>", "to_route": "material_request_info",
|
|
|
|
"defaults": {
|
|
|
|
"doctype": "Material Request",
|
|
|
|
"parents": [{"label": _("Material Request"), "route": "material-requests"}]
|
|
|
|
}
|
|
|
|
},
|
|
|
|
{"from_route": "/project", "to_route": "Project"}
|
|
|
|
]
|
|
|
|
|
|
|
|
standard_portal_menu_items = [
|
|
|
|
{"title": _("Projects"), "route": "/project", "reference_doctype": "Project"},
|
|
|
|
{"title": _("Request for Quotations"), "route": "/rfq", "reference_doctype": "Request for Quotation", "role": "Supplier"},
|
|
|
|
{"title": _("Supplier Quotation"), "route": "/supplier-quotations", "reference_doctype": "Supplier Quotation", "role": "Supplier"},
|
|
|
|
{"title": _("Purchase Orders"), "route": "/purchase-orders", "reference_doctype": "Purchase Order", "role": "Supplier"},
|
|
|
|
{"title": _("Purchase Invoices"), "route": "/purchase-invoices", "reference_doctype": "Purchase Invoice", "role": "Supplier"},
|
|
|
|
{"title": _("Quotations"), "route": "/quotations", "reference_doctype": "Quotation", "role":"Customer"},
|
|
|
|
{"title": _("Orders"), "route": "/orders", "reference_doctype": "Sales Order", "role":"Customer"},
|
|
|
|
{"title": _("Invoices"), "route": "/invoices", "reference_doctype": "Sales Invoice", "role":"Customer"},
|
|
|
|
{"title": _("Shipments"), "route": "/shipments", "reference_doctype": "Delivery Note", "role":"Customer"},
|
|
|
|
{"title": _("Issues"), "route": "/issues", "reference_doctype": "Issue", "role":"Customer"},
|
|
|
|
{"title": _("Addresses"), "route": "/addresses", "reference_doctype": "Address"},
|
|
|
|
{"title": _("Timesheets"), "route": "/timesheets", "reference_doctype": "Timesheet", "role":"Customer"},
|
|
|
|
{"title": _("Fees"), "route": "/fees", "reference_doctype": "Fees", "role":"Student"},
|
|
|
|
{"title": _("Newsletter"), "route": "/newsletters", "reference_doctype": "Newsletter"},
|
|
|
|
{"title": _("Admission"), "route": "/admissions", "reference_doctype": "Student Admission", "role": "Student"},
|
|
|
|
{"title": _("Certification"), "route": "/certification", "reference_doctype": "Certification Application", "role": "Non Profit Portal User"},
|
|
|
|
{"title": _("Material Request"), "route": "/material-requests", "reference_doctype": "Material Request", "role": "Customer"},
|
|
|
|
{"title": _("Appointment Booking"), "route": "/book_appointment"},
|
|
|
|
]
|
|
|
|
|
|
|
|
default_roles = [
|
|
|
|
{'role': 'Customer', 'doctype':'Contact', 'email_field': 'email_id'},
|
|
|
|
{'role': 'Supplier', 'doctype':'Contact', 'email_field': 'email_id'},
|
|
|
|
{'role': 'Student', 'doctype':'Student', 'email_field': 'student_email_id'},
|
|
|
|
]
|
|
|
|
|
|
|
|
sounds = [
|
|
|
|
{"name": "incoming-call", "src": "/assets/erpnext/sounds/incoming-call.mp3", "volume": 0.2},
|
|
|
|
{"name": "call-disconnect", "src": "/assets/erpnext/sounds/call-disconnect.mp3", "volume": 0.2},
|
|
|
|
]
|
|
|
|
|
|
|
|
has_upload_permission = {
|
|
|
|
"Employee": "erpnext.hr.doctype.employee.employee.has_upload_permission"
|
|
|
|
}
|
|
|
|
|
|
|
|
has_website_permission = {
|
|
|
|
"Sales Order": "erpnext.controllers.website_list_for_contact.has_website_permission",
|
|
|
|
"Quotation": "erpnext.controllers.website_list_for_contact.has_website_permission",
|
|
|
|
"Sales Invoice": "erpnext.controllers.website_list_for_contact.has_website_permission",
|
|
|
|
"Supplier Quotation": "erpnext.controllers.website_list_for_contact.has_website_permission",
|
|
|
|
"Purchase Order": "erpnext.controllers.website_list_for_contact.has_website_permission",
|
|
|
|
"Purchase Invoice": "erpnext.controllers.website_list_for_contact.has_website_permission",
|
|
|
|
"Material Request": "erpnext.controllers.website_list_for_contact.has_website_permission",
|
|
|
|
"Delivery Note": "erpnext.controllers.website_list_for_contact.has_website_permission",
|
|
|
|
"Issue": "erpnext.support.doctype.issue.issue.has_website_permission",
|
|
|
|
"Timesheet": "erpnext.controllers.website_list_for_contact.has_website_permission",
|
|
|
|
}
|
|
|
|
|
|
|
|
dump_report_map = "erpnext.startup.report_data_map.data_map"
|
|
|
|
|
|
|
|
before_tests = "erpnext.setup.utils.before_tests"
|
|
|
|
|
|
|
|
standard_queries = {
|
|
|
|
"Customer": "erpnext.selling.doctype.customer.customer.get_customer_list",
|
|
|
|
}
|
|
|
|
|
|
|
|
doc_events = {
|
|
|
|
"*": {
|
|
|
|
"validate": "erpnext.support.doctype.service_level_agreement.service_level_agreement.apply",
|
|
|
|
},
|
|
|
|
"Stock Entry": {
|
|
|
|
"on_submit": "erpnext.stock.doctype.material_request.material_request.update_completed_and_requested_qty",
|
|
|
|
"on_cancel": "erpnext.stock.doctype.material_request.material_request.update_completed_and_requested_qty"
|
|
|
|
},
|
|
|
|
"User": {
|
|
|
|
"after_insert": "frappe.contacts.doctype.contact.contact.update_contact",
|
|
|
|
"validate": "erpnext.hr.doctype.employee.employee.validate_employee_role",
|
|
|
|
"on_update": ["erpnext.hr.doctype.employee.employee.update_user_permissions",
|
|
|
|
"erpnext.portal.utils.set_default_role"]
|
|
|
|
},
|
|
|
|
"Communication": {
|
|
|
|
"on_update": [
|
|
|
|
"erpnext.support.doctype.service_level_agreement.service_level_agreement.on_communication_update",
|
|
|
|
"erpnext.support.doctype.issue.issue.set_first_response_time"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
"Sales Taxes and Charges Template": {
|
|
|
|
"on_update": "erpnext.shopping_cart.doctype.shopping_cart_settings.shopping_cart_settings.validate_cart_settings"
|
|
|
|
},
|
|
|
|
"Website Settings": {
|
|
|
|
"validate": "erpnext.portal.doctype.products_settings.products_settings.home_page_is_products"
|
|
|
|
},
|
|
|
|
"Tax Category": {
|
|
|
|
"validate": "erpnext.regional.india.utils.validate_tax_category"
|
|
|
|
},
|
|
|
|
"Sales Invoice": {
|
|
|
|
"on_submit": [
|
|
|
|
"erpnext.regional.create_transaction_log",
|
|
|
|
"erpnext.regional.italy.utils.sales_invoice_on_submit",
|
|
|
|
"erpnext.regional.saudi_arabia.utils.create_qr_code",
|
|
|
|
"erpnext.erpnext_integrations.taxjar_integration.create_transaction"
|
|
|
|
],
|
|
|
|
"on_cancel": [
|
|
|
|
"erpnext.regional.italy.utils.sales_invoice_on_cancel",
|
|
|
|
"erpnext.erpnext_integrations.taxjar_integration.delete_transaction",
|
|
|
|
"erpnext.regional.saudi_arabia.utils.delete_qr_code_file"
|
|
|
|
],
|
|
|
|
"on_trash": "erpnext.regional.check_deletion_permission",
|
|
|
|
"validate": [
|
|
|
|
"erpnext.regional.india.utils.validate_document_name",
|
|
|
|
"erpnext.regional.india.utils.update_taxable_values"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
"POS Invoice": {
|
|
|
|
"on_submit": ["erpnext.regional.saudi_arabia.utils.create_qr_code"]
|
|
|
|
},
|
|
|
|
"Purchase Invoice": {
|
|
|
|
"validate": [
|
|
|
|
"erpnext.regional.india.utils.validate_reverse_charge_transaction",
|
|
|
|
"erpnext.regional.india.utils.update_itc_availed_fields",
|
|
|
|
"erpnext.regional.united_arab_emirates.utils.update_grand_total_for_rcm",
|
|
|
|
"erpnext.regional.united_arab_emirates.utils.validate_returns",
|
|
|
|
"erpnext.regional.india.utils.update_taxable_values"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
"Payment Entry": {
|
|
|
|
"validate": "erpnext.regional.india.utils.update_place_of_supply",
|
|
|
|
"on_submit": ["erpnext.regional.create_transaction_log", "erpnext.accounts.doctype.payment_request.payment_request.update_payment_req_status", "erpnext.accounts.doctype.dunning.dunning.resolve_dunning"],
|
|
|
|
"on_trash": "erpnext.regional.check_deletion_permission"
|
|
|
|
},
|
|
|
|
'Address': {
|
|
|
|
'validate': [
|
|
|
|
'erpnext.regional.india.utils.validate_gstin_for_india',
|
|
|
|
'erpnext.regional.italy.utils.set_state_code',
|
|
|
|
'erpnext.regional.india.utils.update_gst_category',
|
|
|
|
],
|
|
|
|
},
|
|
|
|
'Supplier': {
|
|
|
|
'validate': 'erpnext.regional.india.utils.validate_pan_for_india'
|
|
|
|
},
|
|
|
|
('Sales Invoice', 'Sales Order', 'Delivery Note', 'Purchase Invoice', 'Purchase Order', 'Purchase Receipt'): {
|
|
|
|
'validate': ['erpnext.regional.india.utils.set_place_of_supply']
|
|
|
|
},
|
|
|
|
"Contact": {
|
|
|
|
"on_trash": "erpnext.support.doctype.issue.issue.update_issue",
|
|
|
|
"after_insert": "erpnext.telephony.doctype.call_log.call_log.link_existing_conversations",
|
|
|
|
"validate": ["erpnext.crm.utils.update_lead_phone_numbers"]
|
|
|
|
},
|
|
|
|
"Email Unsubscribe": {
|
|
|
|
"after_insert": "erpnext.crm.doctype.email_campaign.email_campaign.unsubscribe_recipient"
|
|
|
|
},
|
|
|
|
('Quotation', 'Sales Order', 'Sales Invoice'): {
|
|
|
|
'validate': ["erpnext.erpnext_integrations.taxjar_integration.set_sales_tax"]
|
|
|
|
},
|
|
|
|
"Company": {
|
|
|
|
"on_trash": ["erpnext.regional.india.utils.delete_gst_settings_for_company",
|
|
|
|
"erpnext.regional.saudi_arabia.utils.delete_vat_settings_for_company"]
|
|
|
|
},
|
|
|
|
"Integration Request": {
|
|
|
|
"validate": "erpnext.accounts.doctype.payment_request.payment_request.validate_payment"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
# On cancel event Payment Entry will be exempted and all linked submittable doctype will get cancelled.
|
|
|
|
# to maintain data integrity we exempted payment entry. it will un-link when sales invoice get cancelled.
|
|
|
|
# if payment entry not in auto cancel exempted doctypes it will cancel payment entry.
|
|
|
|
auto_cancel_exempted_doctypes= [
|
|
|
|
"Payment Entry",
|
|
|
|
]
|
|
|
|
|
|
|
|
after_migrate = ["erpnext.setup.install.update_select_perm_after_install"]
|
|
|
|
|
|
|
|
scheduler_events = {
|
|
|
|
"cron": {
|
|
|
|
"0/30 * * * *": [
|
|
|
|
"erpnext.utilities.doctype.video.video.update_youtube_data",
|
|
|
|
]
|
|
|
|
},
|
|
|
|
"all": [
|
|
|
|
"erpnext.projects.doctype.project.project.project_status_update_reminder",
|
|
|
|
"erpnext.hr.doctype.interview.interview.send_interview_reminder",
|
|
|
|
"erpnext.crm.doctype.social_media_post.social_media_post.process_scheduled_social_media_posts"
|
|
|
|
],
|
|
|
|
"hourly": [
|
|
|
|
'erpnext.hr.doctype.daily_work_summary_group.daily_work_summary_group.trigger_emails',
|
|
|
|
"erpnext.accounts.doctype.subscription.subscription.process_all",
|
|
|
|
"erpnext.erpnext_integrations.doctype.amazon_mws_settings.amazon_mws_settings.schedule_get_order_details",
|
|
|
|
"erpnext.accounts.doctype.gl_entry.gl_entry.rename_gle_sle_docs",
|
|
|
|
"erpnext.erpnext_integrations.doctype.plaid_settings.plaid_settings.automatic_synchronization",
|
|
|
|
"erpnext.projects.doctype.project.project.hourly_reminder",
|
|
|
|
"erpnext.projects.doctype.project.project.collect_project_status",
|
|
|
|
"erpnext.hr.doctype.shift_type.shift_type.process_auto_attendance_for_all_shifts"
|
|
|
|
],
|
|
|
|
"hourly_long": [
|
|
|
|
"erpnext.stock.doctype.repost_item_valuation.repost_item_valuation.repost_entries"
|
|
|
|
],
|
|
|
|
"daily": [
|
|
|
|
"erpnext.stock.reorder_item.reorder_item",
|
|
|
|
"erpnext.support.doctype.issue.issue.auto_close_tickets",
|
|
|
|
"erpnext.crm.doctype.opportunity.opportunity.auto_close_opportunity",
|
|
|
|
"erpnext.controllers.accounts_controller.update_invoice_status",
|
|
|
|
"erpnext.accounts.doctype.fiscal_year.fiscal_year.auto_create_fiscal_year",
|
|
|
|
"erpnext.hr.doctype.employee.employee_reminders.send_work_anniversary_reminders",
|
|
|
|
"erpnext.hr.doctype.employee.employee_reminders.send_birthday_reminders",
|
|
|
|
"erpnext.projects.doctype.task.task.set_tasks_as_overdue",
|
|
|
|
"erpnext.assets.doctype.asset.depreciation.post_depreciation_entries",
|
|
|
|
"erpnext.hr.doctype.daily_work_summary_group.daily_work_summary_group.send_summary",
|
|
|
|
"erpnext.stock.doctype.serial_no.serial_no.update_maintenance_status",
|
|
|
|
"erpnext.buying.doctype.supplier_scorecard.supplier_scorecard.refresh_scorecards",
|
|
|
|
"erpnext.setup.doctype.company.company.cache_companies_monthly_sales_history",
|
|
|
|
"erpnext.assets.doctype.asset.asset.update_maintenance_status",
|
|
|
|
"erpnext.assets.doctype.asset.asset.make_post_gl_entry",
|
|
|
|
"erpnext.crm.doctype.contract.contract.update_status_for_contracts",
|
|
|
|
"erpnext.projects.doctype.project.project.update_project_sales_billing",
|
|
|
|
"erpnext.projects.doctype.project.project.send_project_status_email_to_users",
|
|
|
|
"erpnext.quality_management.doctype.quality_review.quality_review.review",
|
|
|
|
"erpnext.support.doctype.service_level_agreement.service_level_agreement.check_agreement_status",
|
|
|
|
"erpnext.crm.doctype.email_campaign.email_campaign.send_email_to_leads_or_contacts",
|
|
|
|
"erpnext.crm.doctype.email_campaign.email_campaign.set_email_campaign_status",
|
|
|
|
"erpnext.selling.doctype.quotation.quotation.set_expired_status",
|
|
|
|
"erpnext.buying.doctype.supplier_quotation.supplier_quotation.set_expired_status",
|
|
|
|
"erpnext.accounts.doctype.process_statement_of_accounts.process_statement_of_accounts.send_auto_email",
|
|
|
|
"erpnext.non_profit.doctype.membership.membership.set_expired_status",
|
|
|
|
"erpnext.hr.doctype.interview.interview.send_daily_feedback_reminder"
|
|
|
|
],
|
|
|
|
"daily_long": [
|
|
|
|
"erpnext.setup.doctype.email_digest.email_digest.send",
|
|
|
|
"erpnext.manufacturing.doctype.bom_update_tool.bom_update_tool.update_latest_price_in_all_boms",
|
|
|
|
"erpnext.hr.doctype.leave_ledger_entry.leave_ledger_entry.process_expired_allocation",
|
|
|
|
"erpnext.hr.utils.generate_leave_encashment",
|
|
|
|
"erpnext.hr.utils.allocate_earned_leaves",
|
|
|
|
"erpnext.loan_management.doctype.process_loan_security_shortfall.process_loan_security_shortfall.create_process_loan_security_shortfall",
|
|
|
|
"erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual.process_loan_interest_accrual_for_term_loans",
|
|
|
|
"erpnext.crm.doctype.lead.lead.daily_open_lead"
|
|
|
|
],
|
|
|
|
"weekly": [
|
|
|
|
"erpnext.hr.doctype.employee.employee_reminders.send_reminders_in_advance_weekly"
|
|
|
|
],
|
|
|
|
"monthly": [
|
|
|
|
"erpnext.hr.doctype.employee.employee_reminders.send_reminders_in_advance_monthly"
|
|
|
|
],
|
|
|
|
"monthly_long": [
|
|
|
|
"erpnext.accounts.deferred_revenue.process_deferred_accounting",
|
|
|
|
"erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual.process_loan_interest_accrual_for_demand_loans"
|
|
|
|
]
|
|
|
|
}
|
|
|
|
|
|
|
|
email_brand_image = "assets/erpnext/images/erpnext-logo.jpg"
|
|
|
|
|
|
|
|
default_mail_footer = """
|
|
|
|
<span>
|
|
|
|
Sent via
|
|
|
|
<a class="text-muted" href="https://erpnext.com?source=via_email_footer" target="_blank">
|
|
|
|
ERPNext
|
|
|
|
</a>
|
|
|
|
</span>
|
|
|
|
"""
|
|
|
|
|
|
|
|
get_translated_dict = {
|
|
|
|
("doctype", "Global Defaults"): "frappe.geo.country_info.get_translated_dict"
|
|
|
|
}
|
|
|
|
|
|
|
|
bot_parsers = [
|
|
|
|
'erpnext.utilities.bot.FindItemBot',
|
|
|
|
]
|
|
|
|
|
|
|
|
get_site_info = 'erpnext.utilities.get_site_info'
|
|
|
|
|
|
|
|
payment_gateway_enabled = "erpnext.accounts.utils.create_payment_gateway_account"
|
|
|
|
|
|
|
|
communication_doctypes = ["Customer", "Supplier"]
|
|
|
|
|
|
|
|
accounting_dimension_doctypes = ["GL Entry", "Sales Invoice", "Purchase Invoice", "Payment Entry", "Asset",
|
|
|
|
"Expense Claim", "Expense Claim Detail", "Expense Taxes and Charges", "Stock Entry", "Budget", "Payroll Entry", "Delivery Note",
|
|
|
|
"Sales Invoice Item", "Purchase Invoice Item", "Purchase Order Item", "Journal Entry Account", "Material Request Item", "Delivery Note Item",
|
|
|
|
"Purchase Receipt Item", "Stock Entry Detail", "Payment Entry Deduction", "Sales Taxes and Charges", "Purchase Taxes and Charges", "Shipping Rule",
|
|
|
|
"Landed Cost Item", "Asset Value Adjustment", "Loyalty Program", "Fee Schedule", "Fee Structure", "Stock Reconciliation",
|
|
|
|
"Travel Request", "Fees", "POS Profile", "Opening Invoice Creation Tool", "Opening Invoice Creation Tool Item", "Subscription",
|
|
|
|
"Subscription Plan", "POS Invoice", "POS Invoice Item"
|
|
|
|
]
|
|
|
|
|
|
|
|
regional_overrides = {
|
|
|
|
'France': {
|
|
|
|
'erpnext.tests.test_regional.test_method': 'erpnext.regional.france.utils.test_method'
|
|
|
|
},
|
|
|
|
'India': {
|
|
|
|
'erpnext.tests.test_regional.test_method': 'erpnext.regional.india.utils.test_method',
|
|
|
|
'erpnext.controllers.taxes_and_totals.get_itemised_tax_breakup_header': 'erpnext.regional.india.utils.get_itemised_tax_breakup_header',
|
|
|
|
'erpnext.controllers.taxes_and_totals.get_itemised_tax_breakup_data': 'erpnext.regional.india.utils.get_itemised_tax_breakup_data',
|
|
|
|
'erpnext.accounts.party.get_regional_address_details': 'erpnext.regional.india.utils.get_regional_address_details',
|
|
|
|
'erpnext.controllers.taxes_and_totals.get_regional_round_off_accounts': 'erpnext.regional.india.utils.get_regional_round_off_accounts',
|
|
|
|
'erpnext.hr.utils.calculate_annual_eligible_hra_exemption': 'erpnext.regional.india.utils.calculate_annual_eligible_hra_exemption',
|
|
|
|
'erpnext.hr.utils.calculate_hra_exemption_for_period': 'erpnext.regional.india.utils.calculate_hra_exemption_for_period',
|
|
|
|
'erpnext.assets.doctype.asset.asset.get_depreciation_amount': 'erpnext.regional.india.utils.get_depreciation_amount',
|
|
|
|
'erpnext.stock.doctype.item.item.set_item_tax_from_hsn_code': 'erpnext.regional.india.utils.set_item_tax_from_hsn_code'
|
|
|
|
},
|
|
|
|
'United Arab Emirates': {
|
|
|
|
'erpnext.controllers.taxes_and_totals.update_itemised_tax_data': 'erpnext.regional.united_arab_emirates.utils.update_itemised_tax_data',
|
|
|
|
'erpnext.accounts.doctype.purchase_invoice.purchase_invoice.make_regional_gl_entries': 'erpnext.regional.united_arab_emirates.utils.make_regional_gl_entries',
|
|
|
|
},
|
|
|
|
'Saudi Arabia': {
|
|
|
|
'erpnext.controllers.taxes_and_totals.update_itemised_tax_data': 'erpnext.regional.united_arab_emirates.utils.update_itemised_tax_data'
|
|
|
|
},
|
|
|
|
'Italy': {
|
|
|
|
'erpnext.controllers.taxes_and_totals.update_itemised_tax_data': 'erpnext.regional.italy.utils.update_itemised_tax_data',
|
|
|
|
'erpnext.controllers.accounts_controller.validate_regional': 'erpnext.regional.italy.utils.sales_invoice_validate',
|
|
|
|
}
|
|
|
|
}
|
|
|
|
user_privacy_documents = [
|
|
|
|
{
|
|
|
|
'doctype': 'Lead',
|
|
|
|
'match_field': 'email_id',
|
|
|
|
'personal_fields': ['phone', 'mobile_no', 'fax', 'website', 'lead_name'],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
'doctype': 'Opportunity',
|
|
|
|
'match_field': 'contact_email',
|
|
|
|
'personal_fields': ['contact_mobile', 'contact_display', 'customer_name'],
|
|
|
|
}
|
|
|
|
]
|
|
|
|
|
|
|
|
# ERPNext doctypes for Global Search
|
|
|
|
global_search_doctypes = {
|
|
|
|
"Default": [
|
|
|
|
{"doctype": "Customer", "index": 0},
|
|
|
|
{"doctype": "Supplier", "index": 1},
|
|
|
|
{"doctype": "Item", "index": 2},
|
|
|
|
{"doctype": "Warehouse", "index": 3},
|
|
|
|
{"doctype": "Account", "index": 4},
|
|
|
|
{"doctype": "Employee", "index": 5},
|
|
|
|
{"doctype": "BOM", "index": 6},
|
|
|
|
{"doctype": "Sales Invoice", "index": 7},
|
|
|
|
{"doctype": "Sales Order", "index": 8},
|
|
|
|
{"doctype": "Quotation", "index": 9},
|
|
|
|
{"doctype": "Work Order", "index": 10},
|
|
|
|
{"doctype": "Purchase Order", "index": 11},
|
|
|
|
{"doctype": "Purchase Receipt", "index": 12},
|
|
|
|
{"doctype": "Purchase Invoice", "index": 13},
|
|
|
|
{"doctype": "Delivery Note", "index": 14},
|
|
|
|
{"doctype": "Stock Entry", "index": 15},
|
|
|
|
{"doctype": "Material Request", "index": 16},
|
|
|
|
{"doctype": "Delivery Trip", "index": 17},
|
|
|
|
{"doctype": "Pick List", "index": 18},
|
|
|
|
{"doctype": "Salary Slip", "index": 19},
|
|
|
|
{"doctype": "Leave Application", "index": 20},
|
|
|
|
{"doctype": "Expense Claim", "index": 21},
|
|
|
|
{"doctype": "Payment Entry", "index": 22},
|
|
|
|
{"doctype": "Lead", "index": 23},
|
|
|
|
{"doctype": "Opportunity", "index": 24},
|
|
|
|
{"doctype": "Item Price", "index": 25},
|
|
|
|
{"doctype": "Purchase Taxes and Charges Template", "index": 26},
|
|
|
|
{"doctype": "Sales Taxes and Charges", "index": 27},
|
|
|
|
{"doctype": "Asset", "index": 28},
|
|
|
|
{"doctype": "Project", "index": 29},
|
|
|
|
{"doctype": "Task", "index": 30},
|
|
|
|
{"doctype": "Timesheet", "index": 31},
|
|
|
|
{"doctype": "Issue", "index": 32},
|
|
|
|
{"doctype": "Serial No", "index": 33},
|
|
|
|
{"doctype": "Batch", "index": 34},
|
|
|
|
{"doctype": "Branch", "index": 35},
|
|
|
|
{"doctype": "Department", "index": 36},
|
|
|
|
{"doctype": "Employee Grade", "index": 37},
|
|
|
|
{"doctype": "Designation", "index": 38},
|
|
|
|
{"doctype": "Job Opening", "index": 39},
|
|
|
|
{"doctype": "Job Applicant", "index": 40},
|
|
|
|
{"doctype": "Job Offer", "index": 41},
|
|
|
|
{"doctype": "Salary Structure Assignment", "index": 42},
|
|
|
|
{"doctype": "Appraisal", "index": 43},
|
|
|
|
{"doctype": "Loan", "index": 44},
|
|
|
|
{"doctype": "Maintenance Schedule", "index": 45},
|
|
|
|
{"doctype": "Maintenance Visit", "index": 46},
|
|
|
|
{"doctype": "Warranty Claim", "index": 47},
|
|
|
|
],
|
|
|
|
"Education": [
|
|
|
|
{'doctype': 'Article', 'index': 1},
|
|
|
|
{'doctype': 'Video', 'index': 2},
|
|
|
|
{'doctype': 'Topic', 'index': 3},
|
|
|
|
{'doctype': 'Course', 'index': 4},
|
|
|
|
{'doctype': 'Program', 'index': 5},
|
|
|
|
{'doctype': 'Quiz', 'index': 6},
|
|
|
|
{'doctype': 'Question', 'index': 7},
|
|
|
|
{'doctype': 'Fee Schedule', 'index': 8},
|
|
|
|
{'doctype': 'Fee Structure', 'index': 9},
|
|
|
|
{'doctype': 'Fees', 'index': 10},
|
|
|
|
{'doctype': 'Student Group', 'index': 11},
|
|
|
|
{'doctype': 'Student', 'index': 12},
|
|
|
|
{'doctype': 'Instructor', 'index': 13},
|
|
|
|
{'doctype': 'Course Activity', 'index': 14},
|
|
|
|
{'doctype': 'Quiz Activity', 'index': 15},
|
|
|
|
{'doctype': 'Course Enrollment', 'index': 16},
|
|
|
|
{'doctype': 'Program Enrollment', 'index': 17},
|
|
|
|
{'doctype': 'Student Language', 'index': 18},
|
|
|
|
{'doctype': 'Student Applicant', 'index': 19},
|
|
|
|
{'doctype': 'Assessment Result', 'index': 20},
|
|
|
|
{'doctype': 'Assessment Plan', 'index': 21},
|
|
|
|
{'doctype': 'Grading Scale', 'index': 22},
|
|
|
|
{'doctype': 'Guardian', 'index': 23},
|
|
|
|
{'doctype': 'Student Leave Application', 'index': 24},
|
|
|
|
{'doctype': 'Student Log', 'index': 25},
|
|
|
|
{'doctype': 'Room', 'index': 26},
|
|
|
|
{'doctype': 'Course Schedule', 'index': 27},
|
|
|
|
{'doctype': 'Student Attendance', 'index': 28},
|
|
|
|
{'doctype': 'Announcement', 'index': 29},
|
|
|
|
{'doctype': 'Student Category', 'index': 30},
|
|
|
|
{'doctype': 'Assessment Group', 'index': 31},
|
|
|
|
{'doctype': 'Student Batch Name', 'index': 32},
|
|
|
|
{'doctype': 'Assessment Criteria', 'index': 33},
|
|
|
|
{'doctype': 'Academic Year', 'index': 34},
|
|
|
|
{'doctype': 'Academic Term', 'index': 35},
|
|
|
|
{'doctype': 'School House', 'index': 36},
|
|
|
|
{'doctype': 'Student Admission', 'index': 37},
|
|
|
|
{'doctype': 'Fee Category', 'index': 38},
|
|
|
|
{'doctype': 'Assessment Code', 'index': 39},
|
|
|
|
{'doctype': 'Discussion', 'index': 40},
|
|
|
|
],
|
|
|
|
"Agriculture": [
|
|
|
|
{'doctype': 'Weather', 'index': 1},
|
|
|
|
{'doctype': 'Soil Texture', 'index': 2},
|
|
|
|
{'doctype': 'Water Analysis', 'index': 3},
|
|
|
|
{'doctype': 'Soil Analysis', 'index': 4},
|
|
|
|
{'doctype': 'Plant Analysis', 'index': 5},
|
|
|
|
{'doctype': 'Agriculture Analysis Criteria', 'index': 6},
|
|
|
|
{'doctype': 'Disease', 'index': 7},
|
|
|
|
{'doctype': 'Crop', 'index': 8},
|
|
|
|
{'doctype': 'Fertilizer', 'index': 9},
|
|
|
|
{'doctype': 'Crop Cycle', 'index': 10}
|
|
|
|
],
|
|
|
|
"Non Profit": [
|
|
|
|
{'doctype': 'Certified Consultant', 'index': 1},
|
|
|
|
{'doctype': 'Certification Application', 'index': 2},
|
|
|
|
{'doctype': 'Volunteer', 'index': 3},
|
|
|
|
{'doctype': 'Membership', 'index': 4},
|
|
|
|
{'doctype': 'Member', 'index': 5},
|
|
|
|
{'doctype': 'Donor', 'index': 6},
|
|
|
|
{'doctype': 'Chapter', 'index': 7},
|
|
|
|
{'doctype': 'Grant Application', 'index': 8},
|
|
|
|
{'doctype': 'Volunteer Type', 'index': 9},
|
|
|
|
{'doctype': 'Donor Type', 'index': 10},
|
|
|
|
{'doctype': 'Membership Type', 'index': 11}
|
|
|
|
],
|
|
|
|
"Hospitality": [
|
|
|
|
{'doctype': 'Hotel Room', 'index': 0},
|
|
|
|
{'doctype': 'Hotel Room Reservation', 'index': 1},
|
|
|
|
{'doctype': 'Hotel Room Pricing', 'index': 2},
|
|
|
|
{'doctype': 'Hotel Room Package', 'index': 3},
|
|
|
|
{'doctype': 'Hotel Room Type', 'index': 4}
|
|
|
|
]
|
|
|
|
}
|
|
|
|
|
|
|
|
additional_timeline_content = {
|
|
|
|
'*': ['erpnext.telephony.doctype.call_log.call_log.get_linked_call_logs']
|
|
|
|
}
|