blob: b7e685cd6fb8a051ec50ac8f613010d23cda165d [file] [log] [blame]
Anand Doshi885e0742015-03-03 14:55:30 +05301// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
Rushabh Mehtae67d1fb2013-08-05 14:59:54 +05302// License: GNU General Public License v3. See license.txt
Rushabh Mehta5e7ec202013-01-11 11:15:27 +05303
Rushabh Mehta7c932002014-03-11 16:15:05 +05304// searches for enabled users
Rushabh Mehta793ba6b2014-02-14 15:47:51 +05305frappe.provide("erpnext.queries");
Anand Doshi61cad502013-07-18 13:26:27 +05306$.extend(erpnext.queries, {
Ankush Menatec74a5e2024-03-10 19:45:40 +05307 user: function () {
Rushabh Mehta7c932002014-03-11 16:15:05 +05308 return { query: "frappe.core.doctype.user.user.user_query" };
Anand Doshi61cad502013-07-18 13:26:27 +05309 },
Nabin Haitfe8db592014-01-30 12:32:47 +053010
Ankush Menatec74a5e2024-03-10 19:45:40 +053011 lead: function () {
Rushabh Mehta6de403f2013-12-13 14:10:14 +053012 return { query: "erpnext.controllers.queries.lead_query" };
Anand Doshi61cad502013-07-18 13:26:27 +053013 },
Nabin Haitfe8db592014-01-30 12:32:47 +053014
Ankush Menatec74a5e2024-03-10 19:45:40 +053015 customer: function () {
Rushabh Mehta6de403f2013-12-13 14:10:14 +053016 return { query: "erpnext.controllers.queries.customer_query" };
Anand Doshi61cad502013-07-18 13:26:27 +053017 },
Nabin Haitfe8db592014-01-30 12:32:47 +053018
Ankush Menatec74a5e2024-03-10 19:45:40 +053019 supplier: function () {
Rushabh Mehta6de403f2013-12-13 14:10:14 +053020 return { query: "erpnext.controllers.queries.supplier_query" };
Anand Doshi61cad502013-07-18 13:26:27 +053021 },
Nabin Haitfe8db592014-01-30 12:32:47 +053022
Ankush Menatec74a5e2024-03-10 19:45:40 +053023 item: function (filters) {
Anand Doshi652bc072014-04-16 15:21:46 +053024 var args = { query: "erpnext.controllers.queries.item_query" };
Ankush Menatec74a5e2024-03-10 19:45:40 +053025 if (filters) args["filters"] = filters;
Anand Doshi652bc072014-04-16 15:21:46 +053026 return args;
Anand Doshi61cad502013-07-18 13:26:27 +053027 },
Nabin Haitfe8db592014-01-30 12:32:47 +053028
Ankush Menatec74a5e2024-03-10 19:45:40 +053029 bom: function () {
Rushabh Mehta6de403f2013-12-13 14:10:14 +053030 return { query: "erpnext.controllers.queries.bom" };
Anand Doshi61cad502013-07-18 13:26:27 +053031 },
Nabin Haitfe8db592014-01-30 12:32:47 +053032
Ankush Menatec74a5e2024-03-10 19:45:40 +053033 task: function () {
Akhilesh Darjee4cdb7992014-01-30 13:56:57 +053034 return { query: "erpnext.projects.utils.query_task" };
Anand Doshi61cad502013-07-18 13:26:27 +053035 },
Nabin Haitfe8db592014-01-30 12:32:47 +053036
Ankush Menatec74a5e2024-03-10 19:45:40 +053037 customer_filter: function (doc) {
38 if (!doc.customer) {
39 frappe.throw(
40 __("Please set {0}", [__(frappe.meta.get_label(doc.doctype, "customer", doc.name))])
41 );
Anand Doshi61cad502013-07-18 13:26:27 +053042 }
Anand Doshi652bc072014-04-16 15:21:46 +053043
Anand Doshi61cad502013-07-18 13:26:27 +053044 return { filters: { customer: doc.customer } };
45 },
Nabin Haitfe8db592014-01-30 12:32:47 +053046
Ankush Menatec74a5e2024-03-10 19:45:40 +053047 contact_query: function (doc) {
48 if (frappe.dynamic_link) {
49 if (!doc[frappe.dynamic_link.fieldname]) {
50 frappe.throw(
51 __("Please set {0}", [
52 __(frappe.meta.get_label(doc.doctype, frappe.dynamic_link.fieldname, doc.name)),
53 ])
54 );
Rushabh Mehtab92087c2017-01-13 18:53:11 +053055 }
56
57 return {
Ankush Menatec74a5e2024-03-10 19:45:40 +053058 query: "frappe.contacts.doctype.contact.contact.contact_query",
Rushabh Mehta919a74a2017-06-22 16:37:04 +053059 filters: {
60 link_doctype: frappe.dynamic_link.doctype,
Ankush Menatec74a5e2024-03-10 19:45:40 +053061 link_name: doc[frappe.dynamic_link.fieldname],
62 },
Rushabh Mehta919a74a2017-06-22 16:37:04 +053063 };
Rushabh Mehtab92087c2017-01-13 18:53:11 +053064 }
65 },
66
Ankush Menatec74a5e2024-03-10 19:45:40 +053067 address_query: function (doc) {
68 if (frappe.dynamic_link) {
69 if (!doc[frappe.dynamic_link.fieldname]) {
70 frappe.throw(
71 __("Please set {0}", [
72 __(frappe.meta.get_label(doc.doctype, frappe.dynamic_link.fieldname, doc.name)),
73 ])
74 );
Rushabh Mehtab92087c2017-01-13 18:53:11 +053075 }
Deepesh Garg6e2c13f2019-12-10 15:55:05 +053076
Rushabh Mehtab92087c2017-01-13 18:53:11 +053077 return {
Ankush Menatec74a5e2024-03-10 19:45:40 +053078 query: "frappe.contacts.doctype.address.address.address_query",
Rushabh Mehta919a74a2017-06-22 16:37:04 +053079 filters: {
80 link_doctype: frappe.dynamic_link.doctype,
Ankush Menatec74a5e2024-03-10 19:45:40 +053081 link_name: doc[frappe.dynamic_link.fieldname],
82 },
Rushabh Mehta919a74a2017-06-22 16:37:04 +053083 };
Rushabh Mehtab92087c2017-01-13 18:53:11 +053084 }
85 },
86
Ankush Menatec74a5e2024-03-10 19:45:40 +053087 company_address_query: function (doc) {
mbauskar8271b4c2017-01-20 14:47:15 +053088 return {
Ankush Menatec74a5e2024-03-10 19:45:40 +053089 query: "frappe.contacts.doctype.address.address.address_query",
90 filters: { is_your_company_address: 1, link_doctype: "Company", link_name: doc.company || "" },
mbauskar8271b4c2017-01-20 14:47:15 +053091 };
92 },
93
Ankush Menatec74a5e2024-03-10 19:45:40 +053094 dispatch_address_query: function (doc) {
Subin Tom98d41762021-12-21 12:35:44 +053095 return {
Ankush Menatec74a5e2024-03-10 19:45:40 +053096 query: "frappe.contacts.doctype.address.address.address_query",
97 filters: { link_doctype: "Company", link_name: doc.company || "" },
Subin Tom98d41762021-12-21 12:35:44 +053098 };
99 },
100
Ankush Menatec74a5e2024-03-10 19:45:40 +0530101 supplier_filter: function (doc) {
102 if (!doc.supplier) {
103 frappe.throw(
104 __("Please set {0}", [__(frappe.meta.get_label(doc.doctype, "supplier", doc.name))])
105 );
Anand Doshid5d39ac2013-07-29 13:28:37 +0530106 }
Anand Doshi652bc072014-04-16 15:21:46 +0530107
Anand Doshid5d39ac2013-07-29 13:28:37 +0530108 return { filters: { supplier: doc.supplier } };
109 },
Nabin Haitfe8db592014-01-30 12:32:47 +0530110
Ankush Menatec74a5e2024-03-10 19:45:40 +0530111 lead_filter: function (doc) {
112 if (!doc.lead) {
113 frappe.throw(
114 __("Please specify a {0}", [__(frappe.meta.get_label(doc.doctype, "lead", doc.name))])
115 );
Nabin Haitfe8db592014-01-30 12:32:47 +0530116 }
117
118 return { filters: { lead: doc.lead } };
119 },
120
Ankush Menatec74a5e2024-03-10 19:45:40 +0530121 not_a_group_filter: function () {
Saurabh6bc7b892016-07-14 14:03:19 +0530122 return { filters: { is_group: 0 } };
Anand Doshi61cad502013-07-18 13:26:27 +0530123 },
Anand Doshib71a18c2014-05-02 16:20:45 +0530124
Ankush Menatec74a5e2024-03-10 19:45:40 +0530125 employee: function () {
126 return { query: "erpnext.controllers.queries.employee_query" };
Anand Doshifaefeaa2014-06-24 18:53:04 +0530127 },
128
Ankush Menatec74a5e2024-03-10 19:45:40 +0530129 warehouse: function (doc) {
Anand Doshifaefeaa2014-06-24 18:53:04 +0530130 return {
Saurabh3d6aecd2016-06-20 17:25:45 +0530131 filters: [
132 ["Warehouse", "company", "in", ["", cstr(doc.company)]],
Ankush Menatec74a5e2024-03-10 19:45:40 +0530133 ["Warehouse", "is_group", "=", 0],
134 ],
Deepesh Garg23ab5c52020-12-31 11:29:06 +0530135 };
Deepesh Garg6e5748e2020-11-15 22:43:48 +0530136 },
137
Ankush Menatec74a5e2024-03-10 19:45:40 +0530138 get_filtered_dimensions: function (doc, child_fields, dimension, company) {
139 let account = "";
Deepesh Garg6e5748e2020-11-15 22:43:48 +0530140
141 child_fields.forEach((field) => {
142 if (!account) {
143 account = doc[field];
144 }
145 });
146
147 return {
148 query: "erpnext.controllers.queries.get_filtered_dimensions",
149 filters: {
Ankush Menatec74a5e2024-03-10 19:45:40 +0530150 dimension: dimension,
151 account: account,
152 company: company,
153 },
Deepesh Garg9e9ea962020-11-16 12:03:47 +0530154 };
Ankush Menatec74a5e2024-03-10 19:45:40 +0530155 },
Anand Doshi652bc072014-04-16 15:21:46 +0530156});
Rushabh Mehta1828c122015-08-10 17:04:07 +0530157
Ankush Menatec74a5e2024-03-10 19:45:40 +0530158erpnext.queries.setup_queries = function (frm, options, query_fn) {
Rushabh Mehta1828c122015-08-10 17:04:07 +0530159 var me = this;
Ankush Menatec74a5e2024-03-10 19:45:40 +0530160 var set_query = function (doctype, parentfield) {
161 var link_fields = frappe.meta.get_docfields(doctype, frm.doc.name, {
162 fieldtype: "Link",
163 options: options,
164 });
165 $.each(link_fields, function (i, df) {
166 if (parentfield) {
Rushabh Mehta1828c122015-08-10 17:04:07 +0530167 frm.set_query(df.fieldname, parentfield, query_fn);
168 } else {
169 frm.set_query(df.fieldname, query_fn);
170 }
171 });
172 };
173
174 set_query(frm.doc.doctype);
175
176 // warehouse field in tables
Ankush Menatec74a5e2024-03-10 19:45:40 +0530177 $.each(
178 frappe.meta.get_docfields(frm.doc.doctype, frm.doc.name, { fieldtype: "Table" }),
179 function (i, df) {
Rushabh Mehta1828c122015-08-10 17:04:07 +0530180 set_query(df.options, df.fieldname);
Ankush Menatec74a5e2024-03-10 19:45:40 +0530181 }
182 );
183};
suyashphadtare049a88c2017-01-12 17:49:37 +0530184
185/* if item code is selected in child table
186 then list down warehouses with its quantity
187 else apply default filters.
188*/
Ankush Menatec74a5e2024-03-10 19:45:40 +0530189erpnext.queries.setup_warehouse_query = function (frm) {
190 frm.set_query("warehouse", "items", function (doc, cdt, cdn) {
191 var row = locals[cdt][cdn];
suyashphadtare049a88c2017-01-12 17:49:37 +0530192 var filters = erpnext.queries.warehouse(frm.doc);
Ankush Menatec74a5e2024-03-10 19:45:40 +0530193 if (row.item_code) {
194 $.extend(filters, { query: "erpnext.controllers.queries.warehouse_query" });
suyashphadtare049a88c2017-01-12 17:49:37 +0530195 filters["filters"].push(["Bin", "item_code", "=", row.item_code]);
196 }
Ankush Menatec74a5e2024-03-10 19:45:40 +0530197 return filters;
suyashphadtare049a88c2017-01-12 17:49:37 +0530198 });
Ankush Menatec74a5e2024-03-10 19:45:40 +0530199};