您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 

610 行
21 KiB

  1. from frappe import _
  2. app_name = "erpnext"
  3. app_title = "ERPNext"
  4. app_publisher = "Frappe Technologies Pvt. Ltd."
  5. app_description = """ERP made simple"""
  6. app_icon = "fa fa-th"
  7. app_color = "#e74c3c"
  8. app_email = "info@erpnext.com"
  9. app_license = "GNU General Public License (v3)"
  10. source_link = "https://github.com/frappe/erpnext"
  11. app_logo_url = "/assets/erpnext/images/erpnext-logo.svg"
  12. develop_version = "14.x.x-develop"
  13. app_include_js = "erpnext.bundle.js"
  14. app_include_css = "erpnext.bundle.css"
  15. web_include_js = "erpnext-web.bundle.js"
  16. web_include_css = "erpnext-web.bundle.css"
  17. email_css = "email_erpnext.bundle.css"
  18. doctype_js = {
  19. "Address": "public/js/address.js",
  20. "Communication": "public/js/communication.js",
  21. "Event": "public/js/event.js",
  22. "Newsletter": "public/js/newsletter.js",
  23. "Contact": "public/js/contact.js",
  24. }
  25. override_doctype_class = {"Address": "erpnext.accounts.custom.address.ERPNextAddress"}
  26. welcome_email = "erpnext.setup.utils.welcome_email"
  27. # setup wizard
  28. setup_wizard_requires = "assets/erpnext/js/setup_wizard.js"
  29. setup_wizard_stages = "erpnext.setup.setup_wizard.setup_wizard.get_setup_stages"
  30. setup_wizard_test = "erpnext.setup.setup_wizard.test_setup_wizard.run_setup_wizard_test"
  31. before_install = "erpnext.setup.install.check_setup_wizard_not_completed"
  32. after_install = "erpnext.setup.install.after_install"
  33. boot_session = "erpnext.startup.boot.boot_session"
  34. notification_config = "erpnext.startup.notifications.get_notification_config"
  35. get_help_messages = "erpnext.utilities.activation.get_help_messages"
  36. leaderboards = "erpnext.startup.leaderboard.get_leaderboards"
  37. filters_config = "erpnext.startup.filters.get_filters_config"
  38. additional_print_settings = "erpnext.controllers.print_settings.get_print_settings"
  39. on_session_creation = [
  40. "erpnext.portal.utils.create_customer_or_supplier",
  41. "erpnext.e_commerce.shopping_cart.utils.set_cart_count",
  42. ]
  43. on_logout = "erpnext.e_commerce.shopping_cart.utils.clear_cart_count"
  44. treeviews = [
  45. "Account",
  46. "Cost Center",
  47. "Warehouse",
  48. "Item Group",
  49. "Customer Group",
  50. "Supplier Group",
  51. "Sales Person",
  52. "Territory",
  53. "Department",
  54. ]
  55. # website
  56. update_website_context = [
  57. "erpnext.e_commerce.shopping_cart.utils.update_website_context",
  58. ]
  59. my_account_context = "erpnext.e_commerce.shopping_cart.utils.update_my_account_context"
  60. webform_list_context = "erpnext.controllers.website_list_for_contact.get_webform_list_context"
  61. calendars = [
  62. "Task",
  63. "Work Order",
  64. "Leave Application",
  65. "Sales Order",
  66. "Holiday List",
  67. ]
  68. website_generators = ["Item Group", "Website Item", "BOM", "Sales Partner"]
  69. website_context = {
  70. "favicon": "/assets/erpnext/images/erpnext-favicon.svg",
  71. "splash_image": "/assets/erpnext/images/erpnext-logo.svg",
  72. }
  73. # nosemgrep
  74. website_route_rules = [
  75. {"from_route": "/orders", "to_route": "Sales Order"},
  76. {
  77. "from_route": "/orders/<path:name>",
  78. "to_route": "order",
  79. "defaults": {"doctype": "Sales Order", "parents": [{"label": _("Orders"), "route": "orders"}]},
  80. },
  81. {"from_route": "/invoices", "to_route": "Sales Invoice"},
  82. {
  83. "from_route": "/invoices/<path:name>",
  84. "to_route": "order",
  85. "defaults": {
  86. "doctype": "Sales Invoice",
  87. "parents": [{"label": _("Invoices"), "route": "invoices"}],
  88. },
  89. },
  90. {"from_route": "/supplier-quotations", "to_route": "Supplier Quotation"},
  91. {
  92. "from_route": "/supplier-quotations/<path:name>",
  93. "to_route": "order",
  94. "defaults": {
  95. "doctype": "Supplier Quotation",
  96. "parents": [{"label": _("Supplier Quotation"), "route": "supplier-quotations"}],
  97. },
  98. },
  99. {"from_route": "/purchase-orders", "to_route": "Purchase Order"},
  100. {
  101. "from_route": "/purchase-orders/<path:name>",
  102. "to_route": "order",
  103. "defaults": {
  104. "doctype": "Purchase Order",
  105. "parents": [{"label": _("Purchase Order"), "route": "purchase-orders"}],
  106. },
  107. },
  108. {"from_route": "/purchase-invoices", "to_route": "Purchase Invoice"},
  109. {
  110. "from_route": "/purchase-invoices/<path:name>",
  111. "to_route": "order",
  112. "defaults": {
  113. "doctype": "Purchase Invoice",
  114. "parents": [{"label": _("Purchase Invoice"), "route": "purchase-invoices"}],
  115. },
  116. },
  117. {"from_route": "/quotations", "to_route": "Quotation"},
  118. {
  119. "from_route": "/quotations/<path:name>",
  120. "to_route": "order",
  121. "defaults": {
  122. "doctype": "Quotation",
  123. "parents": [{"label": _("Quotations"), "route": "quotations"}],
  124. },
  125. },
  126. {"from_route": "/shipments", "to_route": "Delivery Note"},
  127. {
  128. "from_route": "/shipments/<path:name>",
  129. "to_route": "order",
  130. "defaults": {
  131. "doctype": "Delivery Note",
  132. "parents": [{"label": _("Shipments"), "route": "shipments"}],
  133. },
  134. },
  135. {"from_route": "/rfq", "to_route": "Request for Quotation"},
  136. {
  137. "from_route": "/rfq/<path:name>",
  138. "to_route": "rfq",
  139. "defaults": {
  140. "doctype": "Request for Quotation",
  141. "parents": [{"label": _("Request for Quotation"), "route": "rfq"}],
  142. },
  143. },
  144. {"from_route": "/addresses", "to_route": "Address"},
  145. {
  146. "from_route": "/addresses/<path:name>",
  147. "to_route": "addresses",
  148. "defaults": {"doctype": "Address", "parents": [{"label": _("Addresses"), "route": "addresses"}]},
  149. },
  150. {"from_route": "/boms", "to_route": "BOM"},
  151. {"from_route": "/timesheets", "to_route": "Timesheet"},
  152. {"from_route": "/material-requests", "to_route": "Material Request"},
  153. {
  154. "from_route": "/material-requests/<path:name>",
  155. "to_route": "material_request_info",
  156. "defaults": {
  157. "doctype": "Material Request",
  158. "parents": [{"label": _("Material Request"), "route": "material-requests"}],
  159. },
  160. },
  161. {"from_route": "/project", "to_route": "Project"},
  162. ]
  163. standard_portal_menu_items = [
  164. {"title": _("Projects"), "route": "/project", "reference_doctype": "Project"},
  165. {
  166. "title": _("Request for Quotations"),
  167. "route": "/rfq",
  168. "reference_doctype": "Request for Quotation",
  169. "role": "Supplier",
  170. },
  171. {
  172. "title": _("Supplier Quotation"),
  173. "route": "/supplier-quotations",
  174. "reference_doctype": "Supplier Quotation",
  175. "role": "Supplier",
  176. },
  177. {
  178. "title": _("Purchase Orders"),
  179. "route": "/purchase-orders",
  180. "reference_doctype": "Purchase Order",
  181. "role": "Supplier",
  182. },
  183. {
  184. "title": _("Purchase Invoices"),
  185. "route": "/purchase-invoices",
  186. "reference_doctype": "Purchase Invoice",
  187. "role": "Supplier",
  188. },
  189. {
  190. "title": _("Quotations"),
  191. "route": "/quotations",
  192. "reference_doctype": "Quotation",
  193. "role": "Customer",
  194. },
  195. {
  196. "title": _("Orders"),
  197. "route": "/orders",
  198. "reference_doctype": "Sales Order",
  199. "role": "Customer",
  200. },
  201. {
  202. "title": _("Invoices"),
  203. "route": "/invoices",
  204. "reference_doctype": "Sales Invoice",
  205. "role": "Customer",
  206. },
  207. {
  208. "title": _("Shipments"),
  209. "route": "/shipments",
  210. "reference_doctype": "Delivery Note",
  211. "role": "Customer",
  212. },
  213. {"title": _("Issues"), "route": "/issues", "reference_doctype": "Issue", "role": "Customer"},
  214. {"title": _("Addresses"), "route": "/addresses", "reference_doctype": "Address"},
  215. {
  216. "title": _("Timesheets"),
  217. "route": "/timesheets",
  218. "reference_doctype": "Timesheet",
  219. "role": "Customer",
  220. },
  221. {"title": _("Newsletter"), "route": "/newsletters", "reference_doctype": "Newsletter"},
  222. {
  223. "title": _("Material Request"),
  224. "route": "/material-requests",
  225. "reference_doctype": "Material Request",
  226. "role": "Customer",
  227. },
  228. {"title": _("Appointment Booking"), "route": "/book_appointment"},
  229. ]
  230. default_roles = [
  231. {"role": "Customer", "doctype": "Contact", "email_field": "email_id"},
  232. {"role": "Supplier", "doctype": "Contact", "email_field": "email_id"},
  233. ]
  234. sounds = [
  235. {"name": "incoming-call", "src": "/assets/erpnext/sounds/incoming-call.mp3", "volume": 0.2},
  236. {"name": "call-disconnect", "src": "/assets/erpnext/sounds/call-disconnect.mp3", "volume": 0.2},
  237. ]
  238. has_upload_permission = {
  239. "Employee": "erpnext.setup.doctype.employee.employee.has_upload_permission"
  240. }
  241. has_website_permission = {
  242. "Sales Order": "erpnext.controllers.website_list_for_contact.has_website_permission",
  243. "Quotation": "erpnext.controllers.website_list_for_contact.has_website_permission",
  244. "Sales Invoice": "erpnext.controllers.website_list_for_contact.has_website_permission",
  245. "Supplier Quotation": "erpnext.controllers.website_list_for_contact.has_website_permission",
  246. "Purchase Order": "erpnext.controllers.website_list_for_contact.has_website_permission",
  247. "Purchase Invoice": "erpnext.controllers.website_list_for_contact.has_website_permission",
  248. "Material Request": "erpnext.controllers.website_list_for_contact.has_website_permission",
  249. "Delivery Note": "erpnext.controllers.website_list_for_contact.has_website_permission",
  250. "Issue": "erpnext.support.doctype.issue.issue.has_website_permission",
  251. "Timesheet": "erpnext.controllers.website_list_for_contact.has_website_permission",
  252. }
  253. before_tests = "erpnext.setup.utils.before_tests"
  254. standard_queries = {
  255. "Customer": "erpnext.controllers.queries.customer_query",
  256. }
  257. doc_events = {
  258. "*": {
  259. "validate": "erpnext.support.doctype.service_level_agreement.service_level_agreement.apply",
  260. },
  261. "Stock Entry": {
  262. "on_submit": "erpnext.stock.doctype.material_request.material_request.update_completed_and_requested_qty",
  263. "on_cancel": "erpnext.stock.doctype.material_request.material_request.update_completed_and_requested_qty",
  264. },
  265. "User": {
  266. "after_insert": "frappe.contacts.doctype.contact.contact.update_contact",
  267. "validate": "erpnext.setup.doctype.employee.employee.validate_employee_role",
  268. "on_update": [
  269. "erpnext.setup.doctype.employee.employee.update_user_permissions",
  270. "erpnext.portal.utils.set_default_role",
  271. ],
  272. },
  273. "Communication": {
  274. "on_update": [
  275. "erpnext.support.doctype.service_level_agreement.service_level_agreement.on_communication_update",
  276. "erpnext.support.doctype.issue.issue.set_first_response_time",
  277. ],
  278. "after_insert": "erpnext.crm.utils.link_communications_with_prospect",
  279. },
  280. "Event": {
  281. "after_insert": "erpnext.crm.utils.link_events_with_prospect",
  282. },
  283. "Sales Taxes and Charges Template": {
  284. "on_update": "erpnext.e_commerce.doctype.e_commerce_settings.e_commerce_settings.validate_cart_settings"
  285. },
  286. "Sales Invoice": {
  287. "on_submit": [
  288. "erpnext.regional.create_transaction_log",
  289. "erpnext.regional.italy.utils.sales_invoice_on_submit",
  290. "erpnext.regional.saudi_arabia.utils.create_qr_code",
  291. "erpnext.erpnext_integrations.taxjar_integration.create_transaction",
  292. ],
  293. "on_cancel": [
  294. "erpnext.regional.italy.utils.sales_invoice_on_cancel",
  295. "erpnext.erpnext_integrations.taxjar_integration.delete_transaction",
  296. "erpnext.regional.saudi_arabia.utils.delete_qr_code_file",
  297. ],
  298. "on_trash": "erpnext.regional.check_deletion_permission",
  299. },
  300. "POS Invoice": {"on_submit": ["erpnext.regional.saudi_arabia.utils.create_qr_code"]},
  301. "Purchase Invoice": {
  302. "validate": [
  303. "erpnext.regional.united_arab_emirates.utils.update_grand_total_for_rcm",
  304. "erpnext.regional.united_arab_emirates.utils.validate_returns",
  305. ]
  306. },
  307. "Payment Entry": {
  308. "on_submit": [
  309. "erpnext.regional.create_transaction_log",
  310. "erpnext.accounts.doctype.payment_request.payment_request.update_payment_req_status",
  311. "erpnext.accounts.doctype.dunning.dunning.resolve_dunning",
  312. ],
  313. "on_trash": "erpnext.regional.check_deletion_permission",
  314. },
  315. "Address": {
  316. "validate": [
  317. "erpnext.regional.italy.utils.set_state_code",
  318. ],
  319. },
  320. "Contact": {
  321. "on_trash": "erpnext.support.doctype.issue.issue.update_issue",
  322. "after_insert": "erpnext.telephony.doctype.call_log.call_log.link_existing_conversations",
  323. "validate": ["erpnext.crm.utils.update_lead_phone_numbers"],
  324. },
  325. "Email Unsubscribe": {
  326. "after_insert": "erpnext.crm.doctype.email_campaign.email_campaign.unsubscribe_recipient"
  327. },
  328. ("Quotation", "Sales Order", "Sales Invoice"): {
  329. "validate": ["erpnext.erpnext_integrations.taxjar_integration.set_sales_tax"]
  330. },
  331. "Company": {"on_trash": ["erpnext.regional.saudi_arabia.utils.delete_vat_settings_for_company"]},
  332. "Integration Request": {
  333. "validate": "erpnext.accounts.doctype.payment_request.payment_request.validate_payment"
  334. },
  335. }
  336. # On cancel event Payment Entry will be exempted and all linked submittable doctype will get cancelled.
  337. # to maintain data integrity we exempted payment entry. it will un-link when sales invoice get cancelled.
  338. # if payment entry not in auto cancel exempted doctypes it will cancel payment entry.
  339. auto_cancel_exempted_doctypes = [
  340. "Payment Entry",
  341. ]
  342. scheduler_events = {
  343. "cron": {
  344. "0/15 * * * *": [
  345. "erpnext.manufacturing.doctype.bom_update_log.bom_update_log.resume_bom_cost_update_jobs",
  346. "erpnext.accounts.doctype.process_payment_reconciliation.process_payment_reconciliation.trigger_reconciliation_for_queued_docs",
  347. ],
  348. "0/30 * * * *": [
  349. "erpnext.utilities.doctype.video.video.update_youtube_data",
  350. ],
  351. # Hourly but offset by 30 minutes
  352. "30 * * * *": [
  353. "erpnext.accounts.doctype.gl_entry.gl_entry.rename_gle_sle_docs",
  354. ],
  355. # Daily but offset by 45 minutes
  356. "45 0 * * *": [
  357. "erpnext.stock.reorder_item.reorder_item",
  358. ],
  359. },
  360. "all": [
  361. "erpnext.projects.doctype.project.project.project_status_update_reminder",
  362. "erpnext.crm.doctype.social_media_post.social_media_post.process_scheduled_social_media_posts",
  363. ],
  364. "hourly": [
  365. "erpnext.erpnext_integrations.doctype.plaid_settings.plaid_settings.automatic_synchronization",
  366. "erpnext.projects.doctype.project.project.hourly_reminder",
  367. "erpnext.projects.doctype.project.project.collect_project_status",
  368. ],
  369. "hourly_long": [
  370. "erpnext.accounts.doctype.subscription.subscription.process_all",
  371. "erpnext.stock.doctype.repost_item_valuation.repost_item_valuation.repost_entries",
  372. "erpnext.bulk_transaction.doctype.bulk_transaction_log.bulk_transaction_log.retry_failing_transaction",
  373. ],
  374. "daily": [
  375. "erpnext.support.doctype.issue.issue.auto_close_tickets",
  376. "erpnext.crm.doctype.opportunity.opportunity.auto_close_opportunity",
  377. "erpnext.controllers.accounts_controller.update_invoice_status",
  378. "erpnext.accounts.doctype.fiscal_year.fiscal_year.auto_create_fiscal_year",
  379. "erpnext.projects.doctype.task.task.set_tasks_as_overdue",
  380. "erpnext.assets.doctype.asset.depreciation.post_depreciation_entries",
  381. "erpnext.stock.doctype.serial_no.serial_no.update_maintenance_status",
  382. "erpnext.buying.doctype.supplier_scorecard.supplier_scorecard.refresh_scorecards",
  383. "erpnext.setup.doctype.company.company.cache_companies_monthly_sales_history",
  384. "erpnext.assets.doctype.asset.asset.update_maintenance_status",
  385. "erpnext.assets.doctype.asset.asset.make_post_gl_entry",
  386. "erpnext.crm.doctype.contract.contract.update_status_for_contracts",
  387. "erpnext.projects.doctype.project.project.update_project_sales_billing",
  388. "erpnext.projects.doctype.project.project.send_project_status_email_to_users",
  389. "erpnext.quality_management.doctype.quality_review.quality_review.review",
  390. "erpnext.support.doctype.service_level_agreement.service_level_agreement.check_agreement_status",
  391. "erpnext.crm.doctype.email_campaign.email_campaign.send_email_to_leads_or_contacts",
  392. "erpnext.crm.doctype.email_campaign.email_campaign.set_email_campaign_status",
  393. "erpnext.selling.doctype.quotation.quotation.set_expired_status",
  394. "erpnext.buying.doctype.supplier_quotation.supplier_quotation.set_expired_status",
  395. "erpnext.accounts.doctype.process_statement_of_accounts.process_statement_of_accounts.send_auto_email",
  396. ],
  397. "daily_long": [
  398. "erpnext.setup.doctype.email_digest.email_digest.send",
  399. "erpnext.manufacturing.doctype.bom_update_tool.bom_update_tool.auto_update_latest_price_in_all_boms",
  400. "erpnext.loan_management.doctype.process_loan_security_shortfall.process_loan_security_shortfall.create_process_loan_security_shortfall",
  401. "erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual.process_loan_interest_accrual_for_term_loans",
  402. "erpnext.crm.utils.open_leads_opportunities_based_on_todays_event",
  403. ],
  404. "monthly_long": [
  405. "erpnext.accounts.deferred_revenue.process_deferred_accounting",
  406. "erpnext.loan_management.doctype.process_loan_interest_accrual.process_loan_interest_accrual.process_loan_interest_accrual_for_demand_loans",
  407. ],
  408. }
  409. email_brand_image = "assets/erpnext/images/erpnext-logo.jpg"
  410. default_mail_footer = """
  411. <span>
  412. Sent via
  413. <a class="text-muted" href="https://erpnext.com?source=via_email_footer" target="_blank">
  414. ERPNext
  415. </a>
  416. </span>
  417. """
  418. get_translated_dict = {
  419. ("doctype", "Global Defaults"): "frappe.geo.country_info.get_translated_dict"
  420. }
  421. bot_parsers = [
  422. "erpnext.utilities.bot.FindItemBot",
  423. ]
  424. get_site_info = "erpnext.utilities.get_site_info"
  425. payment_gateway_enabled = "erpnext.accounts.utils.create_payment_gateway_account"
  426. communication_doctypes = ["Customer", "Supplier"]
  427. advance_payment_doctypes = ["Sales Order", "Purchase Order"]
  428. invoice_doctypes = ["Sales Invoice", "Purchase Invoice"]
  429. period_closing_doctypes = [
  430. "Sales Invoice",
  431. "Purchase Invoice",
  432. "Journal Entry",
  433. "Bank Clearance",
  434. "Asset",
  435. "Stock Entry",
  436. ]
  437. bank_reconciliation_doctypes = [
  438. "Payment Entry",
  439. "Journal Entry",
  440. "Purchase Invoice",
  441. "Sales Invoice",
  442. "Loan Repayment",
  443. "Loan Disbursement",
  444. ]
  445. accounting_dimension_doctypes = [
  446. "GL Entry",
  447. "Payment Ledger Entry",
  448. "Sales Invoice",
  449. "Purchase Invoice",
  450. "Payment Entry",
  451. "Asset",
  452. "Stock Entry",
  453. "Budget",
  454. "Delivery Note",
  455. "Sales Invoice Item",
  456. "Purchase Invoice Item",
  457. "Purchase Order Item",
  458. "Journal Entry Account",
  459. "Material Request Item",
  460. "Delivery Note Item",
  461. "Purchase Receipt Item",
  462. "Stock Entry Detail",
  463. "Payment Entry Deduction",
  464. "Sales Taxes and Charges",
  465. "Purchase Taxes and Charges",
  466. "Shipping Rule",
  467. "Landed Cost Item",
  468. "Asset Value Adjustment",
  469. "Asset Repair",
  470. "Asset Capitalization",
  471. "Loyalty Program",
  472. "Stock Reconciliation",
  473. "POS Profile",
  474. "Opening Invoice Creation Tool",
  475. "Opening Invoice Creation Tool Item",
  476. "Subscription",
  477. "Subscription Plan",
  478. "POS Invoice",
  479. "POS Invoice Item",
  480. "Purchase Order",
  481. "Purchase Receipt",
  482. "Sales Order",
  483. "Subcontracting Order",
  484. "Subcontracting Order Item",
  485. "Subcontracting Receipt",
  486. "Subcontracting Receipt Item",
  487. ]
  488. # get matching queries for Bank Reconciliation
  489. get_matching_queries = (
  490. "erpnext.accounts.doctype.bank_reconciliation_tool.bank_reconciliation_tool.get_matching_queries"
  491. )
  492. regional_overrides = {
  493. "France": {
  494. "erpnext.tests.test_regional.test_method": "erpnext.regional.france.utils.test_method"
  495. },
  496. "United Arab Emirates": {
  497. "erpnext.controllers.taxes_and_totals.update_itemised_tax_data": "erpnext.regional.united_arab_emirates.utils.update_itemised_tax_data",
  498. "erpnext.accounts.doctype.purchase_invoice.purchase_invoice.make_regional_gl_entries": "erpnext.regional.united_arab_emirates.utils.make_regional_gl_entries",
  499. },
  500. "Saudi Arabia": {
  501. "erpnext.controllers.taxes_and_totals.update_itemised_tax_data": "erpnext.regional.united_arab_emirates.utils.update_itemised_tax_data"
  502. },
  503. "Italy": {
  504. "erpnext.controllers.taxes_and_totals.update_itemised_tax_data": "erpnext.regional.italy.utils.update_itemised_tax_data",
  505. "erpnext.controllers.accounts_controller.validate_regional": "erpnext.regional.italy.utils.sales_invoice_validate",
  506. },
  507. }
  508. user_privacy_documents = [
  509. {
  510. "doctype": "Lead",
  511. "match_field": "email_id",
  512. "personal_fields": ["phone", "mobile_no", "fax", "website", "lead_name"],
  513. },
  514. {
  515. "doctype": "Opportunity",
  516. "match_field": "contact_email",
  517. "personal_fields": ["contact_mobile", "contact_display", "customer_name"],
  518. },
  519. ]
  520. # ERPNext doctypes for Global Search
  521. global_search_doctypes = {
  522. "Default": [
  523. {"doctype": "Customer", "index": 0},
  524. {"doctype": "Supplier", "index": 1},
  525. {"doctype": "Item", "index": 2},
  526. {"doctype": "Warehouse", "index": 3},
  527. {"doctype": "Account", "index": 4},
  528. {"doctype": "Employee", "index": 5},
  529. {"doctype": "BOM", "index": 6},
  530. {"doctype": "Sales Invoice", "index": 7},
  531. {"doctype": "Sales Order", "index": 8},
  532. {"doctype": "Quotation", "index": 9},
  533. {"doctype": "Work Order", "index": 10},
  534. {"doctype": "Purchase Order", "index": 11},
  535. {"doctype": "Purchase Receipt", "index": 12},
  536. {"doctype": "Purchase Invoice", "index": 13},
  537. {"doctype": "Delivery Note", "index": 14},
  538. {"doctype": "Stock Entry", "index": 15},
  539. {"doctype": "Material Request", "index": 16},
  540. {"doctype": "Delivery Trip", "index": 17},
  541. {"doctype": "Pick List", "index": 18},
  542. {"doctype": "Payment Entry", "index": 22},
  543. {"doctype": "Lead", "index": 23},
  544. {"doctype": "Opportunity", "index": 24},
  545. {"doctype": "Item Price", "index": 25},
  546. {"doctype": "Purchase Taxes and Charges Template", "index": 26},
  547. {"doctype": "Sales Taxes and Charges", "index": 27},
  548. {"doctype": "Asset", "index": 28},
  549. {"doctype": "Project", "index": 29},
  550. {"doctype": "Task", "index": 30},
  551. {"doctype": "Timesheet", "index": 31},
  552. {"doctype": "Issue", "index": 32},
  553. {"doctype": "Serial No", "index": 33},
  554. {"doctype": "Batch", "index": 34},
  555. {"doctype": "Branch", "index": 35},
  556. {"doctype": "Department", "index": 36},
  557. {"doctype": "Designation", "index": 38},
  558. {"doctype": "Loan", "index": 44},
  559. {"doctype": "Maintenance Schedule", "index": 45},
  560. {"doctype": "Maintenance Visit", "index": 46},
  561. {"doctype": "Warranty Claim", "index": 47},
  562. ],
  563. }
  564. additional_timeline_content = {
  565. "*": ["erpnext.telephony.doctype.call_log.call_log.get_linked_call_logs"]
  566. }