diff --git a/.eslintrc b/.eslintrc
index f901372..03aca2c 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -35,6 +35,9 @@
"no-control-regex": [
"off"
],
+ "no-prototype-builtins": "off",
+ "no-unsafe-optional-chaining": "off",
+ "no-empty": "warn"
},
"root": true,
"globals": {
@@ -132,6 +135,22 @@
"after": true,
"qz": true,
"localforage": true,
- "extend_cscript": true
+ "extend_cscript": true,
+ "callAPI": true,
+ "apply_filter": true,
+ "extend_options_length": true,
+ "hide_advance_search": true,
+ "addTableFilter": true,
+ "scheme_list": true,
+ "generateDOBFromAge": true,
+ "get_occupation_category": true,
+ "render_scheme_datatable": true,
+ "truncate_multiple_fields_value": true,
+ "get_document": true,
+ "apply_filter_on_id_document": true,
+ "get_ordered_list": true,
+ "support_items": true,
+ "SchemeEligibleBen": true,
+ "_doc": true
}
}
\ No newline at end of file
diff --git a/myojana/__init__.py b/myojana/__init__.py
index 7a0660b..f102a9c 100644
--- a/myojana/__init__.py
+++ b/myojana/__init__.py
@@ -1,3 +1 @@
-
-__version__ = '0.0.1'
-
+__version__ = "0.0.1"
diff --git a/myojana/api.py b/myojana/api.py
index 7a80fb2..735789c 100644
--- a/myojana/api.py
+++ b/myojana/api.py
@@ -1,41 +1,50 @@
+import json
+
import frappe
+
from myojana.services.beneficiary_scheme import BeneficaryScheme
+from myojana.utils.htmltoimg import create_image
from myojana.utils.misc import Misc
+
# from myojana.utils.filter import Filter
from myojana.utils.report_filter import ReportFilter
-import json
-from myojana.utils.htmltoimg import create_image
@frappe.whitelist(allow_guest=True)
def get_image(ben_id):
- return create_image(ben_id)
+ return create_image(ben_id)
+
@frappe.whitelist(allow_guest=True)
def get_mYojana_settings():
- return frappe.get_doc('mYojana Settings')
+ return frappe.get_doc("mYojana Settings")
+
@frappe.whitelist(allow_guest=True)
def get_installed_apps():
- installed_apps = frappe.get_installed_apps()
- return installed_apps
+ installed_apps = frappe.get_installed_apps()
+ return installed_apps
+
def create_condition(scheme, _tbl_pre=""):
- if isinstance(scheme, str):
- raise "No rules"
- user_role_filter = ReportFilter.set_report_filters()
- cond_str = Misc.create_condition(scheme.rules)
- filters = []
- if cond_str:
- filters.append(cond_str)
- if user_role_filter:
- filters.append(user_role_filter)
- return " WHERE 1=1 "+ (f"AND {' AND '.join(filters)}" if len(filters) else "")
+ if isinstance(scheme, str):
+ raise ValueError("No rules")
+ user_role_filter = ReportFilter.set_report_filters()
+ cond_str = Misc.create_condition(scheme.rules)
+ filters = []
+ if cond_str:
+ filters.append(cond_str)
+ if user_role_filter:
+ filters.append(user_role_filter)
+ return " WHERE 1=1 " + (f"AND {' AND '.join(filters)}" if len(filters) else "")
+
-def get_beneficiary_scheme_query(scheme_doc,start=0,page_limit=10,is_limit=False,filters=[]):
- availed_sql = f""
- if scheme_doc.get('how_many_times_can_this_scheme_be_availed') == 'Once':
- availed_sql = f"""
+def get_beneficiary_scheme_query(scheme_doc, start=0, page_limit=10, is_limit=False, filters=None):
+ if filters is None:
+ filters = []
+ availed_sql = ""
+ if scheme_doc.get("how_many_times_can_this_scheme_be_availed") == "Once":
+ availed_sql = f"""
AND name not in (
select
distinct parent
@@ -49,32 +58,32 @@ def get_beneficiary_scheme_query(scheme_doc,start=0,page_limit=10,is_limit=False
status IN ('Completed','Availed')
)
"""
- condition = create_condition(scheme_doc)
- filter_condition = ""
- ward_filter = ""
- primary_member_filter= ""
- pm_join_type = "LEFT JOIN"
- ward_join_type = "LEFT JOIN"
- if len(filters):
- for filter_item in json.loads(filters): # Convert filters from string to list
- for filter_key, filter_value in filter_item.items():
- if filter_key == 'name_of_the_beneficiary':
- filter_condition += f" AND LOWER({filter_key}) LIKE LOWER('{filter_value}%')"
- elif filter_key == 'contact_number':
- filter_condition += f" AND {filter_key} LIKE '%{filter_value}%'"
- elif filter_key == 'block_name':
- ward_filter += f" AND LOWER(block_name) LIKE LOWER('{filter_value}%')"
- ward_join_type = "INNER JOIN"
- elif filter_key == 'name_of_parents':
- primary_member_filter += f" AND LOWER(name_of_parents) LIKE LOWER('{filter_value}%')"
- pm_join_type = "INNER JOIN"
- else:
- pm_join_type = "LEFT JOIN"
- ward_join_type = "LEFT JOIN"
- pagination = ""
- if is_limit:
- pagination = f"LIMIT {page_limit} OFFSET {start}"
- sql = f"""
+ condition = create_condition(scheme_doc)
+ filter_condition = ""
+ ward_filter = ""
+ primary_member_filter = ""
+ pm_join_type = "LEFT JOIN"
+ ward_join_type = "LEFT JOIN"
+ if len(filters):
+ for filter_item in json.loads(filters): # Convert filters from string to list
+ for filter_key, filter_value in filter_item.items():
+ if filter_key == "name_of_the_beneficiary":
+ filter_condition += f" AND LOWER({filter_key}) LIKE LOWER('{filter_value}%')"
+ elif filter_key == "contact_number":
+ filter_condition += f" AND {filter_key} LIKE '%{filter_value}%'"
+ elif filter_key == "block_name":
+ ward_filter += f" AND LOWER(block_name) LIKE LOWER('{filter_value}%')"
+ ward_join_type = "INNER JOIN"
+ elif filter_key == "name_of_parents":
+ primary_member_filter += f" AND LOWER(name_of_parents) LIKE LOWER('{filter_value}%')"
+ pm_join_type = "INNER JOIN"
+ else:
+ pm_join_type = "LEFT JOIN"
+ ward_join_type = "LEFT JOIN"
+ pagination = ""
+ if is_limit:
+ pagination = f"LIMIT {page_limit} OFFSET {start}"
+ sql = f"""
SELECT
_ben.*,
_pm.name_of_parents AS name_of_parents,
@@ -88,12 +97,15 @@ def get_beneficiary_scheme_query(scheme_doc,start=0,page_limit=10,is_limit=False
ORDER BY select_primary_member DESC
{pagination}
"""
- return sql
+ return sql
+
-def get_total_beneficiary_count_query(scheme_doc , start=0,page_limit=10,filters=[]):
- availed_sql = f""
- if scheme_doc.get('how_many_times_can_this_scheme_be_availed') == 'Once':
- availed_sql = f"""
+def get_total_beneficiary_count_query(scheme_doc, start=0, page_limit=10, filters=None):
+ if filters is None:
+ filters = []
+ availed_sql = ""
+ if scheme_doc.get("how_many_times_can_this_scheme_be_availed") == "Once":
+ availed_sql = f"""
AND name not in (
select
distinct parent
@@ -107,30 +119,30 @@ def get_total_beneficiary_count_query(scheme_doc , start=0,page_limit=10,filters
status IN ('Completed','Availed')
)
"""
- condition = create_condition(scheme_doc)
- filter_condition = ""
- ward_filter = ""
- primary_member_filter= ""
- pm_join_type = "LEFT JOIN"
- ward_join_type = "LEFT JOIN"
- if len(filters):
- for filter_item in json.loads(filters): # Convert filters from string to list
- for filter_key, filter_value in filter_item.items():
- if filter_key == 'name_of_the_beneficiary':
- filter_condition += f" AND {filter_key} LIKE '{filter_value}%'"
- elif filter_key == 'contact_number':
- filter_condition += f" AND {filter_key} LIKE '%{filter_value}%'"
- elif filter_key == 'block_name':
- ward_filter += f" AND block_name LIKE '{filter_value}%'"
- ward_join_type = "INNER JOIN"
- elif filter_key == 'name_of_parents':
- primary_member_filter += f" AND name_of_parents LIKE '{filter_value}%'"
- pm_join_type = "INNER JOIN"
- else:
- pm_join_type = "LEFT JOIN"
- ward_join_type = "LEFT JOIN"
+ condition = create_condition(scheme_doc)
+ filter_condition = ""
+ ward_filter = ""
+ primary_member_filter = ""
+ pm_join_type = "LEFT JOIN"
+ ward_join_type = "LEFT JOIN"
+ if len(filters):
+ for filter_item in json.loads(filters): # Convert filters from string to list
+ for filter_key, filter_value in filter_item.items():
+ if filter_key == "name_of_the_beneficiary":
+ filter_condition += f" AND {filter_key} LIKE '{filter_value}%'"
+ elif filter_key == "contact_number":
+ filter_condition += f" AND {filter_key} LIKE '%{filter_value}%'"
+ elif filter_key == "block_name":
+ ward_filter += f" AND block_name LIKE '{filter_value}%'"
+ ward_join_type = "INNER JOIN"
+ elif filter_key == "name_of_parents":
+ primary_member_filter += f" AND name_of_parents LIKE '{filter_value}%'"
+ pm_join_type = "INNER JOIN"
+ else:
+ pm_join_type = "LEFT JOIN"
+ ward_join_type = "LEFT JOIN"
- sql = f"""
+ sql = f"""
SELECT
_ben.*,
_ben.select_primary_member AS name_of_parents,
@@ -143,37 +155,36 @@ def get_total_beneficiary_count_query(scheme_doc , start=0,page_limit=10,filters
LEFT JOIN `tabVillage` _vl ON _vl.name = _ben.name_of_the_settlement
ORDER BY select_primary_member DESC
"""
- # LIMIT {page_limit} OFFSET {start}
- return sql
+ # LIMIT {page_limit} OFFSET {start}
+ return sql
+
+
@frappe.whitelist(allow_guest=True)
def execute(name=None):
- return BeneficaryScheme.get_schemes(name)
+ return BeneficaryScheme.get_schemes(name)
+
@frappe.whitelist(allow_guest=True)
-def eligible_beneficiaries(scheme=None, columns=[], filters=[], start=0, page_imit=10,is_limit=False):
- # filter value is getting hear
- # print("filter", filters)
- columns = json.loads(columns)
- if scheme is None:
- return frappe.throw('Scheme not found.')
- scheme_doc = frappe.get_doc('Scheme',scheme)
- res = {
- 'data':[],
- 'count':{
- 'total':0,
- 'total_family':0,
- 'block_count':0,
- 'settlement_count':0
- }
- }
- if not scheme_doc:
- return res
+def eligible_beneficiaries(scheme=None, columns=None, filters=None, start=0, page_imit=10, is_limit=False):
+ # filter value is getting hear
+ # print("filter", filters)
+ if filters is None:
+ filters = []
+ if columns is None:
+ columns = []
+ columns = json.loads(columns)
+ if scheme is None:
+ return frappe.throw("Scheme not found.")
+ scheme_doc = frappe.get_doc("Scheme", scheme)
+ res = {"data": [], "count": {"total": 0, "total_family": 0, "block_count": 0, "settlement_count": 0}}
+ if not scheme_doc:
+ return res
- ben_sql = get_beneficiary_scheme_query(scheme_doc,start,page_imit,is_limit,filters)
- # print(ben_sql)
- total_count_sql = get_total_beneficiary_count_query(scheme_doc , start,page_imit,filters)
- res['data'] = frappe.db.sql(ben_sql, as_dict=True)
- count_sql = f"""
+ ben_sql = get_beneficiary_scheme_query(scheme_doc, start, page_imit, is_limit, filters)
+ # print(ben_sql)
+ total_count_sql = get_total_beneficiary_count_query(scheme_doc, start, page_imit, filters)
+ res["data"] = frappe.db.sql(ben_sql, as_dict=True)
+ count_sql = f"""
select
count(distinct _tbl.name) as total,
count(distinct _tbl.select_primary_member) as family_count,
@@ -182,76 +193,85 @@ def eligible_beneficiaries(scheme=None, columns=[], filters=[], start=0, page_im
from
({total_count_sql}) _tbl
"""
- count_data = frappe.db.sql(count_sql, as_dict=True)
- if len(count_data):
- res['count'].update(count_data[0])
- return res
+ count_data = frappe.db.sql(count_sql, as_dict=True)
+ if len(count_data):
+ res["count"].update(count_data[0])
+ return res
+
@frappe.whitelist(allow_guest=True)
def most_eligible_ben():
- scheam_ben_count =[]
- scheame_query = f"""select name from `tabScheme` """
- get_all_scheame = frappe.db.sql(scheame_query, as_dict=True)
- for scheme in get_all_scheame:
- get_rules = f"""select rule_field, operator, data from `tabScheme` as _ts JOIN `tabRule Engine Child` as _tsc on _tsc.parent = _ts.name where _ts.name_of_the_scheme ='{scheme.name.replace("'", "''")}';"""
+ scheam_ben_count = []
+ scheame_query = """select name from `tabScheme` """
+ get_all_scheame = frappe.db.sql(scheame_query, as_dict=True)
+ for scheme in get_all_scheame:
+ get_rules = f"""select rule_field, operator, data from `tabScheme` as _ts JOIN `tabRule Engine Child` as _tsc on _tsc.parent = _ts.name where _ts.name_of_the_scheme ='{scheme.name.replace("'", "''")}';"""
+
+ # get_rules = f"""select rule_field, operator, data from `tabScheme` as _ts JOIN `tabRule Engine Child` as _tsc on _tsc.parent = _ts.name where _ts.name_of_the_scheme ='{scheme.name}';"""
+ rules = frappe.db.sql(get_rules, as_dict=True)
+ condition_str = ""
+ if rules:
+ for rule in rules:
+ condition_str = f"""{condition_str} {rule.rule_field} {rule.operator} '{rule.data}' AND"""
+ # condition_str = f"{condition_str} "
+ else:
+ condition_str = ""
+ get_elegible_ben = f""" SELECT count(name) as abc FROM `tabBeneficiary Profiling` WHERE{condition_str} 1=1 order by abc DESC"""
+ all_ben = frappe.db.sql(get_elegible_ben, as_dict=True)
+ sch_ben = {"scheam": scheme.name, "bencount": all_ben[0].abc}
+ scheam_ben_count.append(sch_ben)
+ sorted_schemes = sorted(scheam_ben_count, key=lambda x: x["bencount"], reverse=True)
+ # Get the top 5 schemes
+ top_5_schemes = sorted_schemes[:5]
+ return top_5_schemes
- # get_rules = f"""select rule_field, operator, data from `tabScheme` as _ts JOIN `tabRule Engine Child` as _tsc on _tsc.parent = _ts.name where _ts.name_of_the_scheme ='{scheme.name}';"""
- rules = frappe.db.sql(get_rules, as_dict=True)
- condition_str =""
- if rules:
- for rule in rules:
- condition_str = f"""{condition_str} {rule.rule_field} {rule.operator} '{rule.data}' AND"""
- # condition_str = f"{condition_str} "
- else:
- condition_str = ""
- get_elegible_ben = f""" SELECT count(name) as abc FROM `tabBeneficiary Profiling` WHERE{condition_str} 1=1 order by abc DESC"""
- all_ben = frappe.db.sql(get_elegible_ben, as_dict=True)
- sch_ben = {"scheam": scheme.name , "bencount": all_ben[0].abc}
- scheam_ben_count.append(sch_ben)
- sorted_schemes = sorted(scheam_ben_count, key=lambda x: x["bencount"], reverse=True)
- # Get the top 5 schemes
- top_5_schemes = sorted_schemes[:5]
- return top_5_schemes
@frappe.whitelist(allow_guest=True)
def top_schemes():
- milestones = frappe.get_list("Milestone category", fields=['name'])
- # user_role_filter = Filter.set_query_filters()
- # user_grole_filter will apply on condtional string
- scheme_with_rule_sql = f"""
+ milestones = frappe.get_list("Milestone category", fields=["name"])
+ # user_role_filter = Filter.set_query_filters()
+ # user_grole_filter will apply on condtional string
+ scheme_with_rule_sql = """
select
distinct parent
from
`tabRule Engine Child`
"""
- scheme_with_rules = frappe.db.sql(scheme_with_rule_sql, as_dict=True)
- scheme_list = [sc.get('parent') for sc in scheme_with_rules]
- for milestone in milestones:
- schemes = frappe.get_list("Scheme", filters={'milestone':milestone.name, 'name':["IN",scheme_list], 'enabled': '1'}, fields=['name'])
- for scheme in schemes:
- scheme['ben_count'] = 0
- scheme_doc = frappe.get_doc('Scheme',scheme.name)
- ben_sql = get_beneficiary_scheme_query(scheme_doc)
- count_sql = f"""
+ scheme_with_rules = frappe.db.sql(scheme_with_rule_sql, as_dict=True)
+ scheme_list = [sc.get("parent") for sc in scheme_with_rules]
+ for milestone in milestones:
+ schemes = frappe.get_list(
+ "Scheme",
+ filters={"milestone": milestone.name, "name": ["IN", scheme_list], "enabled": "1"},
+ fields=["name"],
+ )
+ for scheme in schemes:
+ scheme["ben_count"] = 0
+ scheme_doc = frappe.get_doc("Scheme", scheme.name)
+ ben_sql = get_beneficiary_scheme_query(scheme_doc)
+ count_sql = f"""
select
count(distinct _tbl.name) as total
from
({ben_sql}) as _tbl
"""
- # print(count_sql)
- count_data = frappe.db.sql(count_sql, as_dict=True)
- if len(count_data):
- scheme['ben_count'] = count_data[0].total
- sorted_schemes = sorted(schemes, key=lambda x: x.get('ben_count', 0), reverse=True)
- milestone['schemes'] = sorted_schemes[:5]
- return milestones
+ # print(count_sql)
+ count_data = frappe.db.sql(count_sql, as_dict=True)
+ if len(count_data):
+ scheme["ben_count"] = count_data[0].total
+ sorted_schemes = sorted(schemes, key=lambda x: x.get("ben_count", 0), reverse=True)
+ milestone["schemes"] = sorted_schemes[:5]
+ return milestones
+
-#Code is not reflecting
+# Code is not reflecting
@frappe.whitelist()
-def get_user_permission(user, join_con=[]):
- sql_query = f"""
+def get_user_permission(user, join_con=None):
+ if join_con is None:
+ join_con = []
+ sql_query = f"""
SELECT
CASE
WHEN LOWER(UP.allow) = 'state' THEN TS.state_name
@@ -274,4 +294,4 @@ def get_user_permission(user, join_con=[]):
LEFT JOIN `tabSub Centre` AS TCS ON UP.for_value = TCS.name AND LOWER(UP.allow) = 'sub centre'
WHERE UP.user = '{user}'
"""
- return frappe.db.sql(sql_query, as_dict=True)
+ return frappe.db.sql(sql_query, as_dict=True)
diff --git a/myojana/apis/get_doctype_meta.py b/myojana/apis/get_doctype_meta.py
index ede83a5..274544f 100644
--- a/myojana/apis/get_doctype_meta.py
+++ b/myojana/apis/get_doctype_meta.py
@@ -1,22 +1,31 @@
import frappe
+
@frappe.whitelist()
-def get_allowed_doctype(doctype_name="Beneficiary Profiling", field_types='Link', options=None):
- meta = frappe.get_meta(doctype_name)
-
- if options is not None:
- filtered_fields = [{
- "label": field.label,
- "value": field.fieldname,
- "type": field.fieldtype,
- "options": field.options
- } for field in meta.fields if field.fieldtype in field_types and field.options == options]
- else:
- filtered_fields = [{
- "label": field.label,
- "value": field.fieldname,
- "type": field.fieldtype,
- "options": field.options
- } for field in meta.fields if field.fieldtype in field_types]
+def get_allowed_doctype(doctype_name="Beneficiary Profiling", field_types="Link", options=None):
+ meta = frappe.get_meta(doctype_name)
+
+ if options is not None:
+ filtered_fields = [
+ {
+ "label": field.label,
+ "value": field.fieldname,
+ "type": field.fieldtype,
+ "options": field.options,
+ }
+ for field in meta.fields
+ if field.fieldtype in field_types and field.options == options
+ ]
+ else:
+ filtered_fields = [
+ {
+ "label": field.label,
+ "value": field.fieldname,
+ "type": field.fieldtype,
+ "options": field.options,
+ }
+ for field in meta.fields
+ if field.fieldtype in field_types
+ ]
- return filtered_fields
+ return filtered_fields
diff --git a/myojana/apis/html_to_image.py b/myojana/apis/html_to_image.py
index 16d6a06..6a790c7 100644
--- a/myojana/apis/html_to_image.py
+++ b/myojana/apis/html_to_image.py
@@ -1,99 +1,118 @@
+import base64
+import json
+import os
+
import frappe
import imgkit
-import base64
-from frappe.utils.jinja import render_template
-from frappe.utils.file_manager import save_file,get_file
from frappe import _
-import os
-import json
from frappe.utils import get_site_path
+from frappe.utils.file_manager import get_file, save_file
+from frappe.utils.jinja import render_template
+
def get_attachment_fields(doctype_name, doc):
- meta = frappe.get_meta(doctype_name)
- attachment_fields = []
- for field in meta.fields:
- field_value = doc.get(field.fieldname)
- if field_value:
- if field.fieldtype in ['Attach', 'Attach Image']:
- attachment_fields.append(field.fieldname)
-
- return attachment_fields
+ meta = frappe.get_meta(doctype_name)
+ attachment_fields = []
+ for field in meta.fields:
+ field_value = doc.get(field.fieldname)
+ if field_value:
+ if field.fieldtype in ["Attach", "Attach Image"]:
+ attachment_fields.append(field.fieldname)
+
+ return attachment_fields
+
def file_to_base64(file_path):
- with open(file_path, "rb") as file:
- return base64.b64encode(file.read()).decode('utf-8')
+ with open(file_path, "rb") as file:
+ return base64.b64encode(file.read()).decode("utf-8")
+
@frappe.whitelist(allow_guest=True)
def create_image(ref_doc, tepmlate_name):
- template = frappe.get_doc("App Template", tepmlate_name)
- context,doc = set_context_data(template.ref_doctype,ref_doc)
- try:
- options = json.loads(options)
- except:
- options = None
- if not options:
- options = {
- 'width': 547,
- 'height': 373,
- }
-
- try:
- processed_html = render_template(template.html, context)
- image_binary = imgkit.from_string(processed_html, False, options=options)
- file = save_file(f"{doc.name}.png", image_binary, template.ref_doctype, doc.name, folder=None, decode=False, is_private=0, df=None)
- return file,doc
- except Exception as e:
- print("Exception::",e)
- frappe.log_error(f"Error in rendering template: {e}", "Check Syntax")
- return None,None
-
+ template = frappe.get_doc("App Template", tepmlate_name)
+ context, doc = set_context_data(template.ref_doctype, ref_doc)
+ try:
+ options = json.loads(options)
+ except Exception:
+ options = None
+ if not options:
+ options = {
+ "width": 547,
+ "height": 373,
+ }
+
+ try:
+ processed_html = render_template(template.html, context)
+ image_binary = imgkit.from_string(processed_html, False, options=options)
+ file = save_file(
+ f"{doc.name}.png",
+ image_binary,
+ template.ref_doctype,
+ doc.name,
+ folder=None,
+ decode=False,
+ is_private=0,
+ df=None,
+ )
+ return file, doc
+ except Exception as e:
+ print("Exception::", e)
+ frappe.log_error(f"Error in rendering template: {e}", "Check Syntax")
+ return None, None
+
+
def sanitize_file_path(original_file_path):
- # if we are in a private file system, we need to remove the private files path
- if original_file_path.startswith('/files/'):
- return original_file_path.replace('/files/', '/public/files/')
- return original_file_path
+ # if we are in a private file system, we need to remove the private files path
+ if original_file_path.startswith("/files/"):
+ return original_file_path.replace("/files/", "/public/files/")
+ return original_file_path
+
+
def set_context_data(doctype, name):
- doc = frappe.get_doc(doctype, name)
- attachment_fields = get_attachment_fields(doctype , doc)
- for field in attachment_fields:
- file_url = doc.get(field)
- if file_url:
- file_path = frappe.get_site_path(sanitize_file_path(file_url).lstrip('/'))
- if os.path.isfile(file_path):
- base64_data = f"data:image/png;base64,{file_to_base64(file_path)}"
- doc.set(field, base64_data)
- return doc.as_dict(),doc
+ doc = frappe.get_doc(doctype, name)
+ attachment_fields = get_attachment_fields(doctype, doc)
+ for field in attachment_fields:
+ file_url = doc.get(field)
+ if file_url:
+ file_path = frappe.get_site_path(sanitize_file_path(file_url).lstrip("/"))
+ if os.path.isfile(file_path):
+ base64_data = f"data:image/png;base64,{file_to_base64(file_path)}"
+ doc.set(field, base64_data)
+ return doc.as_dict(), doc
+
+
@frappe.whitelist(allow_guest=True)
def preview_image(doctype, doc, template, options=None):
- context, doc = set_context_data(doctype,doc)
- # return template, context
- try:
- processed_html = render_template(template, context)
- except Exception as e:
- print("Exception::",e)
- frappe.log_error(f"Error in rendering template: {e}", "Check Syntax")
- return None
-
- try:
- options = json.loads(options)
- except:
- options = None
- if not options:
- options = {
- 'width': 547,
- 'height': 373,
- }
- image_binary = imgkit.from_string(processed_html, False, options=options)
- return base64.b64encode(image_binary).decode('utf-8')
+ context, doc = set_context_data(doctype, doc)
+ # return template, context
+ try:
+ processed_html = render_template(template, context)
+ except Exception as e:
+ print("Exception::", e)
+ frappe.log_error(f"Error in rendering template: {e}", "Check Syntax")
+ return None
+
+ try:
+ options = json.loads(options)
+ except Exception:
+ options = None
+ if not options:
+ options = {
+ "width": 547,
+ "height": 373,
+ }
+ image_binary = imgkit.from_string(processed_html, False, options=options)
+ return base64.b64encode(image_binary).decode("utf-8")
+
@frappe.whitelist(allow_guest=True)
def preview_doc_template(doc):
- template_name = frappe.db.get_single_value('mYojana Settings', 'id_card_template')
- if not template_name:
- frappe.throw(_("Please set ID Card Template in mYojana Settings"))
- print("template_name",template_name)
- template = frappe.get_doc('App Template', template_name)
- if not template:
- frappe.throw(_("Please set ID Card Template in Whats App Template"))
-
- return preview_image(template.ref_doctype, doc, template.html)
\ No newline at end of file
+ template_name = frappe.db.get_single_value("mYojana Settings", "id_card_template")
+ if not template_name:
+ frappe.throw(_("Please set ID Card Template in mYojana Settings"))
+ print("template_name", template_name)
+ template = frappe.get_doc("App Template", template_name)
+ if not template:
+ frappe.throw(_("Please set ID Card Template in Whats App Template"))
+
+ return preview_image(template.ref_doctype, doc, template.html)
diff --git a/myojana/apis/load_test.py b/myojana/apis/load_test.py
index 73f3a53..c8c21a5 100644
--- a/myojana/apis/load_test.py
+++ b/myojana/apis/load_test.py
@@ -1,217 +1,480 @@
-import frappe
import datetime
import random
import string
import uuid
+import frappe
+
+
def generate_random_indian_phone_number():
- first_digit = random.choice([6,7, 8, 9])
- rest_digits = ''.join(random.choices('0123456789', k=9))
- phone_number = str(first_digit) + rest_digits
- return phone_number
+ first_digit = random.choice([6, 7, 8, 9])
+ rest_digits = "".join(random.choices("0123456789", k=9))
+ phone_number = str(first_digit) + rest_digits
+ return phone_number
+
def generate_indian_name(gender):
- male_names = ["Aarav", "Vikram", "Arjun", "Rahul", "Aryan", "Rohan", "Kabir", "Aditya", "Shivam", "Krishna",
- "Amit", "Ankit", "Ashish", "Alok", "Avinash", "Akshay", "Ayush", "Bhaskar", "Chandan", "Dheeraj",
- "Deepak", "Gaurav", "Ganesh", "Hitesh", "Harsh", "Himanshu", "Jatin", "Jagdish", "Karan", "Kunal",
- "Lalit", "Manish", "Mukesh", "Nitin", "Nikhil", "Pawan", "Prateek", "Rajesh", "Ravi", "Sachin",
- "Sanjay", "Saurabh", "Sumit", "Tarun", "Utkarsh", "Vivek", "Yogesh", "Abhinav", "Arun", "Avinash",
- "Alok", "Bhuvan", "Chirag", "Devendra", "Dinesh", "Dilip", "Girish", "Govind", "Hari", "Jagat",
- "Jitendra", "Kamal", "Kishan", "Laxman", "Mahesh", "Mohan", "Naveen", "Pankaj", "Pradeep", "Rajiv",
- "Rakesh", "Ramesh", "Sandeep", "Satish", "Shyam", "Sunil", "Surendra", "Vikas", "Vinod", "Yash"]
- female_names = ["Aaradhya", "Isha", "Sakshi", "Priya", "Ananya", "Diya", "Kavya", "Trisha", "Mira", "Neha",
- "Anjali", "Bhavna", "Chitra", "Deepika", "Divya", "Ekta", "Jyoti", "Komal", "Pooja", "Rashmi",
- "Sunita", "Vandana", "Varsha", "Vidya", "Ambika", "Asha", "Aarti", "Anuradha", "Geeta", "Ganga",
- "Hema", "Indira", "Kiran", "Lakshmi", "Mamta", "Meena", "Neeta", "Poonam", "Radha", "Rani",
- "Renuka", "Rekha", "Seema", "Sharda", "Shanti", "Sita", "Sarita", "Sarla", "Savita", "Tanuja",
- "Uma", "Vijaya", "Veena", "Yamini", "Zara", "Aradhana", "Aparna", "Bhavani", "Chanchal", "Darshana",
- "Deepti", "Gauri", "Harsha", "Ila", "Jayanti", "Kamala", "Leela", "Madhuri", "Malini", "Nalini",
- "Padmini", "Rajani", "Shashi", "Sonal", "Suchitra", "Vidhi", "Yogita", "Jaya", "Meera", "Nisha"]
- surnames = ["Patel", "Shah", "Desai", "Mehta", "Joshi", "Sharma", "Gupta", "Shah", "Singh", "Verma",
- "Trivedi", "Pandey", "Yadav", "Patil", "Soni", "Mishra", "Das", "Kumar", "Chauhan", "Gandhi",
- "Saxena", "Agarwal", "Choudhury", "Bose", "Banerjee", "Dutta", "Chatterjee", "Mukherjee", "Sen",
- "Nair", "Menon", "Iyer", "Reddy", "Rao", "Rajan", "Naidu", "Kulkarni", "Gowda", "Shetty",
- "Rajput", "Rawat", "Singh", "Chauhan", "Thakur", "Sinha", "Pathak", "Goswami", "Jha",
- "Bhattacharya", "Dutta", "Mitra", "Ghosh", "Ray", "Roy", "Malhotra", "Acharya", "Shrestha",
- "Rana", "Subedi", "Bhandari", "Shakya", "Gurung", "Tamang", "Thapa", "Bhattarai", "Lama",
- "Dhakal", "Rai", "Adhikari", "Maharjan", "Koirala", "Poudel", "Basnet", "Pandit", "Sharma",
- "Pokharel", "Magar", "Khanal", "Shahi", "Giri", "Dahal", "Khatri", "Panta", "Joshi",
- "Shrestha", "Bista", "Pariyar", "Sherpa", "Neupane", "Bhatta", "Shah", "Thakali", "Panta"]
-
- if gender == "Male":
- return f"{random.choice(male_names)} {random.choice(surnames)}"
- elif gender == "Female":
- return f"{random.choice(female_names)} {random.choice(surnames)}"
- elif gender == "Transgender":
- return f"{random.choice(male_names)} {random.choice(surnames)}"
- elif gender == "Others":
- return f"{random.choice(male_names)} {random.choice(surnames)}"
- else:
- return "Invalid gender specified. Please choose from 'male', 'female', or 'others'."
-
+ male_names = [
+ "Aarav",
+ "Vikram",
+ "Arjun",
+ "Rahul",
+ "Aryan",
+ "Rohan",
+ "Kabir",
+ "Aditya",
+ "Shivam",
+ "Krishna",
+ "Amit",
+ "Ankit",
+ "Ashish",
+ "Alok",
+ "Avinash",
+ "Akshay",
+ "Ayush",
+ "Bhaskar",
+ "Chandan",
+ "Dheeraj",
+ "Deepak",
+ "Gaurav",
+ "Ganesh",
+ "Hitesh",
+ "Harsh",
+ "Himanshu",
+ "Jatin",
+ "Jagdish",
+ "Karan",
+ "Kunal",
+ "Lalit",
+ "Manish",
+ "Mukesh",
+ "Nitin",
+ "Nikhil",
+ "Pawan",
+ "Prateek",
+ "Rajesh",
+ "Ravi",
+ "Sachin",
+ "Sanjay",
+ "Saurabh",
+ "Sumit",
+ "Tarun",
+ "Utkarsh",
+ "Vivek",
+ "Yogesh",
+ "Abhinav",
+ "Arun",
+ "Avinash",
+ "Alok",
+ "Bhuvan",
+ "Chirag",
+ "Devendra",
+ "Dinesh",
+ "Dilip",
+ "Girish",
+ "Govind",
+ "Hari",
+ "Jagat",
+ "Jitendra",
+ "Kamal",
+ "Kishan",
+ "Laxman",
+ "Mahesh",
+ "Mohan",
+ "Naveen",
+ "Pankaj",
+ "Pradeep",
+ "Rajiv",
+ "Rakesh",
+ "Ramesh",
+ "Sandeep",
+ "Satish",
+ "Shyam",
+ "Sunil",
+ "Surendra",
+ "Vikas",
+ "Vinod",
+ "Yash",
+ ]
+ female_names = [
+ "Aaradhya",
+ "Isha",
+ "Sakshi",
+ "Priya",
+ "Ananya",
+ "Diya",
+ "Kavya",
+ "Trisha",
+ "Mira",
+ "Neha",
+ "Anjali",
+ "Bhavna",
+ "Chitra",
+ "Deepika",
+ "Divya",
+ "Ekta",
+ "Jyoti",
+ "Komal",
+ "Pooja",
+ "Rashmi",
+ "Sunita",
+ "Vandana",
+ "Varsha",
+ "Vidya",
+ "Ambika",
+ "Asha",
+ "Aarti",
+ "Anuradha",
+ "Geeta",
+ "Ganga",
+ "Hema",
+ "Indira",
+ "Kiran",
+ "Lakshmi",
+ "Mamta",
+ "Meena",
+ "Neeta",
+ "Poonam",
+ "Radha",
+ "Rani",
+ "Renuka",
+ "Rekha",
+ "Seema",
+ "Sharda",
+ "Shanti",
+ "Sita",
+ "Sarita",
+ "Sarla",
+ "Savita",
+ "Tanuja",
+ "Uma",
+ "Vijaya",
+ "Veena",
+ "Yamini",
+ "Zara",
+ "Aradhana",
+ "Aparna",
+ "Bhavani",
+ "Chanchal",
+ "Darshana",
+ "Deepti",
+ "Gauri",
+ "Harsha",
+ "Ila",
+ "Jayanti",
+ "Kamala",
+ "Leela",
+ "Madhuri",
+ "Malini",
+ "Nalini",
+ "Padmini",
+ "Rajani",
+ "Shashi",
+ "Sonal",
+ "Suchitra",
+ "Vidhi",
+ "Yogita",
+ "Jaya",
+ "Meera",
+ "Nisha",
+ ]
+ surnames = [
+ "Patel",
+ "Shah",
+ "Desai",
+ "Mehta",
+ "Joshi",
+ "Sharma",
+ "Gupta",
+ "Shah",
+ "Singh",
+ "Verma",
+ "Trivedi",
+ "Pandey",
+ "Yadav",
+ "Patil",
+ "Soni",
+ "Mishra",
+ "Das",
+ "Kumar",
+ "Chauhan",
+ "Gandhi",
+ "Saxena",
+ "Agarwal",
+ "Choudhury",
+ "Bose",
+ "Banerjee",
+ "Dutta",
+ "Chatterjee",
+ "Mukherjee",
+ "Sen",
+ "Nair",
+ "Menon",
+ "Iyer",
+ "Reddy",
+ "Rao",
+ "Rajan",
+ "Naidu",
+ "Kulkarni",
+ "Gowda",
+ "Shetty",
+ "Rajput",
+ "Rawat",
+ "Singh",
+ "Chauhan",
+ "Thakur",
+ "Sinha",
+ "Pathak",
+ "Goswami",
+ "Jha",
+ "Bhattacharya",
+ "Dutta",
+ "Mitra",
+ "Ghosh",
+ "Ray",
+ "Roy",
+ "Malhotra",
+ "Acharya",
+ "Shrestha",
+ "Rana",
+ "Subedi",
+ "Bhandari",
+ "Shakya",
+ "Gurung",
+ "Tamang",
+ "Thapa",
+ "Bhattarai",
+ "Lama",
+ "Dhakal",
+ "Rai",
+ "Adhikari",
+ "Maharjan",
+ "Koirala",
+ "Poudel",
+ "Basnet",
+ "Pandit",
+ "Sharma",
+ "Pokharel",
+ "Magar",
+ "Khanal",
+ "Shahi",
+ "Giri",
+ "Dahal",
+ "Khatri",
+ "Panta",
+ "Joshi",
+ "Shrestha",
+ "Bista",
+ "Pariyar",
+ "Sherpa",
+ "Neupane",
+ "Bhatta",
+ "Shah",
+ "Thakali",
+ "Panta",
+ ]
+
+ if gender == "Male":
+ return f"{random.choice(male_names)} {random.choice(surnames)}"
+ elif gender == "Female":
+ return f"{random.choice(female_names)} {random.choice(surnames)}"
+ elif gender == "Transgender":
+ return f"{random.choice(male_names)} {random.choice(surnames)}"
+ elif gender == "Others":
+ return f"{random.choice(male_names)} {random.choice(surnames)}"
+ else:
+ return "Invalid gender specified. Please choose from 'male', 'female', or 'others'."
+
+
def random_string(length):
- letters = string.ascii_lowercase
- return ''.join(random.choice(letters) for i in range(length))
+ letters = string.ascii_lowercase
+ return "".join(random.choice(letters) for i in range(length))
def random_date(start, end):
- return start + datetime.timedelta(
- seconds=random.randint(0, int((end - start).total_seconds()))
- )
+ return start + datetime.timedelta(seconds=random.randint(0, int((end - start).total_seconds())))
+
def calculate_age(date_of_birth):
- dob = datetime.datetime.strptime(date_of_birth, "%Y-%m-%d")
- current_date = datetime.datetime.now()
- age = current_date.year - dob.year
- month_diff = current_date.month - dob.month
- if month_diff < 0 or (month_diff == 0 and current_date.day < dob.day):
- age -= 1
- month_diff += 12
- return age, month_diff
+ dob = datetime.datetime.strptime(date_of_birth, "%Y-%m-%d")
+ current_date = datetime.datetime.now()
+ age = current_date.year - dob.year
+ month_diff = current_date.month - dob.month
+ if month_diff < 0 or (month_diff == 0 and current_date.day < dob.day):
+ age -= 1
+ month_diff += 12
+ return age, month_diff
+
disabilities = [
- "Blindness",
- "Low vision",
- "Leprosy cured persons",
- "Locomotor disability",
- "Dwarfism",
- "Intellectual disability",
- "Mental illness",
- "Cerebral Palsy",
- "Specific learning disability",
- "Speech and Language disability",
- "Hearing impairment",
- "Muscular dystrophy",
- "Acid attack victim",
- "Parkinson's disease",
- "Multiple Sclerosis",
- "Thalassemia",
- "Hemophilia",
- "Sickle cell disease",
- "Autism spectrum disorder",
- "Chronic neurological conditions",
- "Multiple disabilities including deaf and blindness."
+ "Blindness",
+ "Low vision",
+ "Leprosy cured persons",
+ "Locomotor disability",
+ "Dwarfism",
+ "Intellectual disability",
+ "Mental illness",
+ "Cerebral Palsy",
+ "Specific learning disability",
+ "Speech and Language disability",
+ "Hearing impairment",
+ "Muscular dystrophy",
+ "Acid attack victim",
+ "Parkinson's disease",
+ "Multiple Sclerosis",
+ "Thalassemia",
+ "Hemophilia",
+ "Sickle cell disease",
+ "Autism spectrum disorder",
+ "Chronic neurological conditions",
+ "Multiple disabilities including deaf and blindness.",
]
+
def generate_random_bulk_data():
- Caste_category = frappe.get_list('Caste category',filters={'name': ['!=', 'Others']}, pluck='name')
- Schemes = frappe.get_list('Scheme', pluck='name')
- Religion = frappe.get_list('Religion',filters={'name': ['!=', 'Others']}, pluck='name')
- Education = frappe.get_list('Education',filters={'name': ['!=', 'Others']}, pluck='name')
- Occupation = frappe.get_list('Occupation',filters={'name': ['!=', 'Others']}, pluck='name')
- Marital_status = frappe.get_list('Marital status',filters={'name': ['!=', 'Others']}, pluck='name')
- Sub_Centre = frappe.get_list('Sub Centre', pluck='name')
- Source_Of_Information = frappe.get_list(
- 'Source Of Information',filters={'name': ['!=', 'Others']}, pluck='name')
- Social_vulnerable_category = frappe.get_list(
- 'Social vulnerable category',filters={'name': ['!=', 'Others']}, pluck='name')
- House_Types = frappe.get_list('House Types',filters={'name': ['!=', 'Others']} ,pluck='name')
- ID_Document = frappe.get_list('ID Document', pluck='name')
- Village = frappe.get_list(
- 'Village', filters={'state': 'S07'}, pluck='name')
- date_of_birth = random_date(datetime.datetime(
- 1950, 1, 1), datetime.datetime(2010, 1, 1)).strftime("%Y-%m-%d")
- completed_age, completed_age_month = calculate_age(date_of_birth)
- random_oc = random.choice(Occupation)
- random_occ = frappe.get_value(
- 'Occupation', random_oc, 'occupational_category')
- random_sub_center = random.choice(Sub_Centre)
- random_center = frappe.get_value(
- 'Sub Centre', random_sub_center, 'centre')
- soi = random.choice(Source_Of_Information)
- ms = random.choice(Marital_status)
- sv = random.choice(["Yes", "No"])
- pwd = random.choice(["Yes", "No"])
- vil = random.choice(Village)
- wards = frappe.get_value('Village', vil, 'block')
- dis = frappe.get_value('Village', vil, 'district')
- any_doc = random.choice(["Yes", "No"])
- weyd = random.choice(["Below 40%","Do not know"])
- scheme = random.choice(Schemes)
- Milestone_category = frappe.get_value('Scheme', scheme, 'milestone')
- name_of_department = frappe.get_value(
- 'Scheme', scheme, 'name_of_department')
- random_gender = random.choice(["Male", "Female", "Transgender", "Others"])
- data = {
- "date_of_visit": random_date(datetime.datetime(2020, 1, 1), datetime.datetime(2024, 1, 1)).strftime("%Y-%m-%d"),
- "name_of_the_beneficiary": generate_indian_name(random_gender),
- "gender": random_gender,
- "date_of_birth": date_of_birth,
- "completed_age": completed_age,
- "completed_age_month": completed_age_month,
- "contact_number": generate_random_indian_phone_number(),
- "centre": random_center,
- "sub_centre": random_sub_center,
- "source_of_information": soi,
- **({"name_of_the_camp": random.choice(frappe.get_list('Camp', pluck='name'))} if soi == 'Camp' else {}),
- "has_anyone_from_your_family_visisted_before": 'No',
- "caste_category": random.choice(Caste_category),
- "religion": random.choice(Religion),
- "education": random.choice(Education),
- "current_occupation": random_oc,
- "occupational_category": random_occ,
- "marital_status": ms,
- **({"spouses_name": random_string(10)} if ms == 'Married' else {}),
- "social_vulnerable": sv,
- **({"social_vulnerable_category": random.choice(Social_vulnerable_category)} if sv == 'Yes' else {}),
- "are_you_a_person_with_disability_pwd": pwd,
- **({"type_of_disability": random.choice(disabilities)} if pwd == 'Yes' else {}),
- **({"what_is_the_extent_of_your_disability": weyd} if pwd == 'Yes' else {}),
- "annual_income": random.randint(10000, 1000000),
- "do_you_have_any_bank_account": random.choice(["Yes", "No"]),
- "fathers_name": generate_indian_name("Male"),
- "mothers_name": generate_indian_name("Female"),
- "added_by": 'Administrator',
- "current_house_type": random.choice(House_Types),
- "state": 'S07',
- "state_of_origin": 'S07',
- "district": dis,
- "ward": wards,
- "name_of_the_settlement": vil,
- "do_you_have_any_id_documents": any_doc,
- "overall_status":"Partially completed"
- }
- if any_doc == 'Yes':
- for i in range(3):
- data.setdefault("id_table_list", []).append({
- "doctype": "ID Document Child",
- "enter_id_number": ''.join(random.choice(string.digits) for _ in range(12)),
- "which_of_the_following_id_documents_do_you_have": random.choice(ID_Document)
- })
- for i in range(5):
- application_submitted = random.choice(["Yes", "Completed"])
- data.setdefault("scheme_table", []).append({
- "amount_paid": random.randint(500, 1000),
- "application_number": f"APP-{uuid.uuid4().hex[:6]}",
- "application_submitted": application_submitted,
- "date_of_application": datetime.datetime.now().strftime("%Y-%m-%d"),
- "milestone_category": Milestone_category,
- "mode_of_application": random.choice(["Online", "Offline"]),
- "name_of_the_department": name_of_department,
- **({"date_of_completion": datetime.datetime.now().strftime("%Y-%m-%d") if application_submitted == "Completed" else ""}),
- "name_of_the_scheme": scheme,
- "paid_by": random.choice(["Self", "CSC"]),
- "reason_of_application": "any",
- "remarks": "any",
- "status":"Under process" if application_submitted == "Yes" else "Completed"
- })
- data.setdefault("follow_up_table", []).append({
- "follow": random_sub_center,
- "follow_up_date": datetime.datetime.now().strftime("%Y-%m-%d"),
- "follow_up_mode": random.choice(["Home visit", "Phone call", "Centre visit", "In-person visit"]),
- "follow_up_status": "Completed" if application_submitted == "Completed" else "Document submitted",
- "follow_up_with": random.choice(["Beneficiary", "Government department", "Government website", "Others"]),
- "name_of_the_scheme": scheme,
- "remarks": "any"
- })
- return data
+ Caste_category = frappe.get_list("Caste category", filters={"name": ["!=", "Others"]}, pluck="name")
+ Schemes = frappe.get_list("Scheme", pluck="name")
+ Religion = frappe.get_list("Religion", filters={"name": ["!=", "Others"]}, pluck="name")
+ Education = frappe.get_list("Education", filters={"name": ["!=", "Others"]}, pluck="name")
+ Occupation = frappe.get_list("Occupation", filters={"name": ["!=", "Others"]}, pluck="name")
+ Marital_status = frappe.get_list("Marital status", filters={"name": ["!=", "Others"]}, pluck="name")
+ Sub_Centre = frappe.get_list("Sub Centre", pluck="name")
+ Source_Of_Information = frappe.get_list(
+ "Source Of Information", filters={"name": ["!=", "Others"]}, pluck="name"
+ )
+ Social_vulnerable_category = frappe.get_list(
+ "Social vulnerable category", filters={"name": ["!=", "Others"]}, pluck="name"
+ )
+ House_Types = frappe.get_list("House Types", filters={"name": ["!=", "Others"]}, pluck="name")
+ ID_Document = frappe.get_list("ID Document", pluck="name")
+ Village = frappe.get_list("Village", filters={"state": "S07"}, pluck="name")
+ date_of_birth = random_date(datetime.datetime(1950, 1, 1), datetime.datetime(2010, 1, 1)).strftime(
+ "%Y-%m-%d"
+ )
+ completed_age, completed_age_month = calculate_age(date_of_birth)
+ random_oc = random.choice(Occupation)
+ random_occ = frappe.get_value("Occupation", random_oc, "occupational_category")
+ random_sub_center = random.choice(Sub_Centre)
+ random_center = frappe.get_value("Sub Centre", random_sub_center, "centre")
+ soi = random.choice(Source_Of_Information)
+ ms = random.choice(Marital_status)
+ sv = random.choice(["Yes", "No"])
+ pwd = random.choice(["Yes", "No"])
+ vil = random.choice(Village)
+ wards = frappe.get_value("Village", vil, "block")
+ dis = frappe.get_value("Village", vil, "district")
+ any_doc = random.choice(["Yes", "No"])
+ weyd = random.choice(["Below 40%", "Do not know"])
+ scheme = random.choice(Schemes)
+ Milestone_category = frappe.get_value("Scheme", scheme, "milestone")
+ name_of_department = frappe.get_value("Scheme", scheme, "name_of_department")
+ random_gender = random.choice(["Male", "Female", "Transgender", "Others"])
+ data = {
+ "date_of_visit": random_date(datetime.datetime(2020, 1, 1), datetime.datetime(2024, 1, 1)).strftime(
+ "%Y-%m-%d"
+ ),
+ "name_of_the_beneficiary": generate_indian_name(random_gender),
+ "gender": random_gender,
+ "date_of_birth": date_of_birth,
+ "completed_age": completed_age,
+ "completed_age_month": completed_age_month,
+ "contact_number": generate_random_indian_phone_number(),
+ "centre": random_center,
+ "sub_centre": random_sub_center,
+ "source_of_information": soi,
+ **(
+ {"name_of_the_camp": random.choice(frappe.get_list("Camp", pluck="name"))}
+ if soi == "Camp"
+ else {}
+ ),
+ "has_anyone_from_your_family_visisted_before": "No",
+ "caste_category": random.choice(Caste_category),
+ "religion": random.choice(Religion),
+ "education": random.choice(Education),
+ "current_occupation": random_oc,
+ "occupational_category": random_occ,
+ "marital_status": ms,
+ **({"spouses_name": random_string(10)} if ms == "Married" else {}),
+ "social_vulnerable": sv,
+ **({"social_vulnerable_category": random.choice(Social_vulnerable_category)} if sv == "Yes" else {}),
+ "are_you_a_person_with_disability_pwd": pwd,
+ **({"type_of_disability": random.choice(disabilities)} if pwd == "Yes" else {}),
+ **({"what_is_the_extent_of_your_disability": weyd} if pwd == "Yes" else {}),
+ "annual_income": random.randint(10000, 1000000),
+ "do_you_have_any_bank_account": random.choice(["Yes", "No"]),
+ "fathers_name": generate_indian_name("Male"),
+ "mothers_name": generate_indian_name("Female"),
+ "added_by": "Administrator",
+ "current_house_type": random.choice(House_Types),
+ "state": "S07",
+ "state_of_origin": "S07",
+ "district": dis,
+ "ward": wards,
+ "name_of_the_settlement": vil,
+ "do_you_have_any_id_documents": any_doc,
+ "overall_status": "Partially completed",
+ }
+ if any_doc == "Yes":
+ for _i in range(3):
+ data.setdefault("id_table_list", []).append(
+ {
+ "doctype": "ID Document Child",
+ "enter_id_number": "".join(random.choice(string.digits) for _ in range(12)),
+ "which_of_the_following_id_documents_do_you_have": random.choice(ID_Document),
+ }
+ )
+ for _i in range(5):
+ application_submitted = random.choice(["Yes", "Completed"])
+ data.setdefault("scheme_table", []).append(
+ {
+ "amount_paid": random.randint(500, 1000),
+ "application_number": f"APP-{uuid.uuid4().hex[:6]}",
+ "application_submitted": application_submitted,
+ "date_of_application": datetime.datetime.now().strftime("%Y-%m-%d"),
+ "milestone_category": Milestone_category,
+ "mode_of_application": random.choice(["Online", "Offline"]),
+ "name_of_the_department": name_of_department,
+ **(
+ {
+ "date_of_completion": datetime.datetime.now().strftime("%Y-%m-%d")
+ if application_submitted == "Completed"
+ else ""
+ }
+ ),
+ "name_of_the_scheme": scheme,
+ "paid_by": random.choice(["Self", "CSC"]),
+ "reason_of_application": "any",
+ "remarks": "any",
+ "status": "Under process" if application_submitted == "Yes" else "Completed",
+ }
+ )
+ data.setdefault("follow_up_table", []).append(
+ {
+ "follow": random_sub_center,
+ "follow_up_date": datetime.datetime.now().strftime("%Y-%m-%d"),
+ "follow_up_mode": random.choice(
+ ["Home visit", "Phone call", "Centre visit", "In-person visit"]
+ ),
+ "follow_up_status": "Completed"
+ if application_submitted == "Completed"
+ else "Document submitted",
+ "follow_up_with": random.choice(
+ ["Beneficiary", "Government department", "Government website", "Others"]
+ ),
+ "name_of_the_scheme": scheme,
+ "remarks": "any",
+ }
+ )
+ return data
+
+
@frappe.whitelist()
def create_beneficiary_profiling(count=10):
- if frappe.session.user == "Administrator":
- for _ in range(count):
- beneficiary = frappe.new_doc("Beneficiary Profiling")
- beneficiary.update(generate_random_bulk_data())
- beneficiary.insert()
- return count
- else:
- return "Invalid access to the api!"
\ No newline at end of file
+ if frappe.session.user == "Administrator":
+ for _ in range(count):
+ beneficiary = frappe.new_doc("Beneficiary Profiling")
+ beneficiary.update(generate_random_bulk_data())
+ beneficiary.insert()
+ return count
+ else:
+ return "Invalid access to the api!"
diff --git a/myojana/apis/myojana_setting.py b/myojana/apis/myojana_setting.py
index 4357321..ec0ef02 100644
--- a/myojana/apis/myojana_setting.py
+++ b/myojana/apis/myojana_setting.py
@@ -1,18 +1,21 @@
-import frappe
import json
-@frappe.whitelist()
-def get_myojana_setting(fields=['*']):
- try:
- myojana_setting = frappe.get_doc('mYojana Settings')
- if fields == '*':
- return myojana_setting.as_dict()
- result = {field: myojana_setting.get(field) for field in json.loads(fields)}
- return result
- except frappe.DoesNotExistError:
- frappe.log_error('mYojana Settings document does not exist', 'get_myojana_setting')
- return None
- except Exception as e:
- frappe.log_error(frappe.get_traceback(), 'get_myojana_setting')
- return None
+import frappe
+
+@frappe.whitelist()
+def get_myojana_setting(fields=None):
+ if fields is None:
+ fields = ["*"]
+ try:
+ myojana_setting = frappe.get_doc("mYojana Settings")
+ if fields == "*":
+ return myojana_setting.as_dict()
+ result = {field: myojana_setting.get(field) for field in json.loads(fields)}
+ return result
+ except frappe.DoesNotExistError:
+ frappe.log_error("mYojana Settings document does not exist", "get_myojana_setting")
+ return None
+ except Exception:
+ frappe.log_error(frappe.get_traceback(), "get_myojana_setting")
+ return None
diff --git a/myojana/apis/myojana_user.py b/myojana/apis/myojana_user.py
index b67de01..9f055c6 100644
--- a/myojana/apis/myojana_user.py
+++ b/myojana/apis/myojana_user.py
@@ -1,7 +1,8 @@
import frappe
+
@frappe.whitelist()
def get_allowed_doctype():
- doctype = frappe.db.get_single_value('mYojana Settings', 'doctype_which_is_shown_in_user_permission')
- doctypes = [doctype.strip() for doctype in doctype.split(',')]
- return doctypes
\ No newline at end of file
+ doctype = frappe.db.get_single_value("mYojana Settings", "doctype_which_is_shown_in_user_permission")
+ doctypes = [doctype.strip() for doctype in doctype.split(",")]
+ return doctypes
diff --git a/myojana/apis/track_seen.py b/myojana/apis/track_seen.py
index 1002d09..fda8ac1 100644
--- a/myojana/apis/track_seen.py
+++ b/myojana/apis/track_seen.py
@@ -1,10 +1,12 @@
-import frappe
import json
+import frappe
+
+
@frappe.whitelist()
-def toggle_track_changes(list,value):
- list = json.loads(list)
- for item in list:
- frappe.db.set_value('DocType', item, 'track_changes', value, update_modified=False)
- frappe.db.commit()
- return len(list)
\ No newline at end of file
+def toggle_track_changes(list, value):
+ list = json.loads(list)
+ for item in list:
+ frappe.db.set_value("DocType", item, "track_changes", value, update_modified=False)
+ frappe.db.commit()
+ return len(list)
diff --git a/myojana/apis/update_scheme.py b/myojana/apis/update_scheme.py
index abd7e48..ec1e19f 100644
--- a/myojana/apis/update_scheme.py
+++ b/myojana/apis/update_scheme.py
@@ -1,10 +1,12 @@
-import frappe
import json
+import frappe
+
+
@frappe.whitelist()
-def toggle_enable_disable(list,value):
- list = json.loads(list)
- for item in list:
- frappe.db.set_value('Scheme', item, 'enabled', value, update_modified=False)
- frappe.db.commit()
- return len(list)
+def toggle_enable_disable(list, value):
+ list = json.loads(list)
+ for item in list:
+ frappe.db.set_value("Scheme", item, "enabled", value, update_modified=False)
+ frappe.db.commit()
+ return len(list)
diff --git a/myojana/apis/user_permissions.py b/myojana/apis/user_permissions.py
index 76bfa34..68abded 100644
--- a/myojana/apis/user_permissions.py
+++ b/myojana/apis/user_permissions.py
@@ -1,138 +1,97 @@
-import frappe
import json
+import frappe
+
+
@frappe.whitelist()
def create_user_permissions(doc=None):
- document = json.loads(doc)
- allow = document.get('allow')
- for_value = document.get('for_value')
- doctype = document.get('doctype')
- user = document.get('user')
- if allow == "State":
- exist = frappe.db.exists(document)
- if not exist:
- state_perm = frappe.get_doc(document)
- state_perm.insert(ignore_permissions=True)
- elif allow == "District":
- state_value = frappe.db.get_value("District", for_value, ['state'])
- new_state_doc = {
- 'doctype': doctype,
- 'allow': 'State',
- 'for_value':state_value,
- 'user':user
- }
- state_exist = frappe.db.exists(new_state_doc)
- dist_exist = frappe.db.exists(document)
- if not state_exist:
- state_perm = frappe.get_doc(new_state_doc)
- state_perm.insert(ignore_permissions=True)
- if not dist_exist:
- dist_perm = frappe.get_doc(document)
- dist_perm.insert(ignore_permissions=True)
- elif allow == "Block":
- state_value,dist_value = frappe.db.get_value("Block", for_value, ['state','district'])
- new_state_doc = {
- 'doctype': doctype,
- 'allow': 'State',
- 'for_value':state_value,
- 'user':user
- }
- new_dist_doc = {
- 'doctype': doctype,
- 'allow': 'District',
- 'for_value':dist_value,
- 'user':user
- }
- state_exist = frappe.db.exists(new_state_doc)
- dist_exist = frappe.db.exists(new_dist_doc)
- block_exist = frappe.db.exists(document)
- if not state_exist:
- state_perm = frappe.get_doc(new_state_doc)
- state_perm.insert(ignore_permissions=True)
- if not dist_exist:
- dist_perm = frappe.get_doc(new_dist_doc)
- dist_perm.insert(ignore_permissions=True)
- if not block_exist:
- block_perm = frappe.get_doc(document)
- block_perm.insert(ignore_permissions=True)
- elif allow == "Village":
- state_value,dist_value , block_val= frappe.db.get_value("Village", for_value, ['state','district', 'block'])
- new_state_doc = {
- 'doctype': doctype,
- 'allow': 'State',
- 'for_value':state_value,
- 'user':user
- }
- new_dist_doc = {
- 'doctype': doctype,
- 'allow': 'District',
- 'for_value':dist_value,
- 'user':user
- }
- new_block_doc = {
- 'doctype': doctype,
- 'allow': 'Block',
- 'for_value':block_val,
- 'user':user
- }
- state_exist = frappe.db.exists(new_state_doc)
- dist_exist = frappe.db.exists(new_dist_doc)
- block_exist = frappe.db.exists(new_block_doc)
- village_exist = frappe.db.exists(document)
- if not state_exist:
- state_perm = frappe.get_doc(new_state_doc)
- state_perm.insert(ignore_permissions=True)
- if not dist_exist:
- dist_perm = frappe.get_doc(new_dist_doc)
- dist_perm.insert(ignore_permissions=True)
- if not block_exist:
- block_perm = frappe.get_doc(new_block_doc)
- block_perm.insert(ignore_permissions=True)
- if not village_exist:
- vill_perm = frappe.get_doc(document)
- vill_perm.insert(ignore_permissions=True)
+ document = json.loads(doc)
+ allow = document.get("allow")
+ for_value = document.get("for_value")
+ doctype = document.get("doctype")
+ user = document.get("user")
+ if allow == "State":
+ exist = frappe.db.exists(document)
+ if not exist:
+ state_perm = frappe.get_doc(document)
+ state_perm.insert(ignore_permissions=True)
+ elif allow == "District":
+ state_value = frappe.db.get_value("District", for_value, ["state"])
+ new_state_doc = {"doctype": doctype, "allow": "State", "for_value": state_value, "user": user}
+ state_exist = frappe.db.exists(new_state_doc)
+ dist_exist = frappe.db.exists(document)
+ if not state_exist:
+ state_perm = frappe.get_doc(new_state_doc)
+ state_perm.insert(ignore_permissions=True)
+ if not dist_exist:
+ dist_perm = frappe.get_doc(document)
+ dist_perm.insert(ignore_permissions=True)
+ elif allow == "Block":
+ state_value, dist_value = frappe.db.get_value("Block", for_value, ["state", "district"])
+ new_state_doc = {"doctype": doctype, "allow": "State", "for_value": state_value, "user": user}
+ new_dist_doc = {"doctype": doctype, "allow": "District", "for_value": dist_value, "user": user}
+ state_exist = frappe.db.exists(new_state_doc)
+ dist_exist = frappe.db.exists(new_dist_doc)
+ block_exist = frappe.db.exists(document)
+ if not state_exist:
+ state_perm = frappe.get_doc(new_state_doc)
+ state_perm.insert(ignore_permissions=True)
+ if not dist_exist:
+ dist_perm = frappe.get_doc(new_dist_doc)
+ dist_perm.insert(ignore_permissions=True)
+ if not block_exist:
+ block_perm = frappe.get_doc(document)
+ block_perm.insert(ignore_permissions=True)
+ elif allow == "Village":
+ state_value, dist_value, block_val = frappe.db.get_value(
+ "Village", for_value, ["state", "district", "block"]
+ )
+ new_state_doc = {"doctype": doctype, "allow": "State", "for_value": state_value, "user": user}
+ new_dist_doc = {"doctype": doctype, "allow": "District", "for_value": dist_value, "user": user}
+ new_block_doc = {"doctype": doctype, "allow": "Block", "for_value": block_val, "user": user}
+ state_exist = frappe.db.exists(new_state_doc)
+ dist_exist = frappe.db.exists(new_dist_doc)
+ block_exist = frappe.db.exists(new_block_doc)
+ village_exist = frappe.db.exists(document)
+ if not state_exist:
+ state_perm = frappe.get_doc(new_state_doc)
+ state_perm.insert(ignore_permissions=True)
+ if not dist_exist:
+ dist_perm = frappe.get_doc(new_dist_doc)
+ dist_perm.insert(ignore_permissions=True)
+ if not block_exist:
+ block_perm = frappe.get_doc(new_block_doc)
+ block_perm.insert(ignore_permissions=True)
+ if not village_exist:
+ vill_perm = frappe.get_doc(document)
+ vill_perm.insert(ignore_permissions=True)
- elif allow == "Centre":
- state_value = frappe.db.get_value("Centre", for_value, ['state'])
- new_state_doc = {
- 'doctype': doctype,
- 'allow': 'State',
- 'for_value':state_value,
- 'user':user
- }
- state_exist = frappe.db.exists(new_state_doc)
- block_exist = frappe.db.exists(document)
- if not state_exist:
- state_perm = frappe.get_doc(new_state_doc)
- state_perm.insert(ignore_permissions=True)
- if not block_exist:
- block_perm = frappe.get_doc(document)
- block_perm.insert(ignore_permissions=True)
- elif allow == "Sub Centre":
- state_value,centre_value = frappe.db.get_value("Sub Centre", for_value, ['state','centre'])
- new_state_doc = {
- 'doctype': doctype,
- 'allow': 'State',
- 'for_value':state_value,
- 'user':user
- }
- new_centre_doc = {
- 'doctype': doctype,
- 'allow': 'Centre',
- 'for_value':centre_value,
- 'user':user
- }
- state_exist = frappe.db.exists(new_state_doc)
- centre_exist = frappe.db.exists(new_centre_doc)
- sub_centre_exist = frappe.db.exists(document)
- if not state_exist:
- state_perm = frappe.get_doc(new_state_doc)
- state_perm.insert(ignore_permissions=True)
- if not centre_exist:
- dist_perm = frappe.get_doc(new_centre_doc)
- dist_perm.insert(ignore_permissions=True)
- if not sub_centre_exist:
- sub_centre_perm = frappe.get_doc(document)
- sub_centre_perm.insert(ignore_permissions=True)
- else:
- return document
\ No newline at end of file
+ elif allow == "Centre":
+ state_value = frappe.db.get_value("Centre", for_value, ["state"])
+ new_state_doc = {"doctype": doctype, "allow": "State", "for_value": state_value, "user": user}
+ state_exist = frappe.db.exists(new_state_doc)
+ block_exist = frappe.db.exists(document)
+ if not state_exist:
+ state_perm = frappe.get_doc(new_state_doc)
+ state_perm.insert(ignore_permissions=True)
+ if not block_exist:
+ block_perm = frappe.get_doc(document)
+ block_perm.insert(ignore_permissions=True)
+ elif allow == "Sub Centre":
+ state_value, centre_value = frappe.db.get_value("Sub Centre", for_value, ["state", "centre"])
+ new_state_doc = {"doctype": doctype, "allow": "State", "for_value": state_value, "user": user}
+ new_centre_doc = {"doctype": doctype, "allow": "Centre", "for_value": centre_value, "user": user}
+ state_exist = frappe.db.exists(new_state_doc)
+ centre_exist = frappe.db.exists(new_centre_doc)
+ sub_centre_exist = frappe.db.exists(document)
+ if not state_exist:
+ state_perm = frappe.get_doc(new_state_doc)
+ state_perm.insert(ignore_permissions=True)
+ if not centre_exist:
+ dist_perm = frappe.get_doc(new_centre_doc)
+ dist_perm.insert(ignore_permissions=True)
+ if not sub_centre_exist:
+ sub_centre_perm = frappe.get_doc(document)
+ sub_centre_perm.insert(ignore_permissions=True)
+ else:
+ return document
diff --git a/myojana/apis/whatsapp.py b/myojana/apis/whatsapp.py
index 5a99fba..8b49336 100644
--- a/myojana/apis/whatsapp.py
+++ b/myojana/apis/whatsapp.py
@@ -1,110 +1,108 @@
+import http.client
+import json
+
import frappe
-from frappe import _
import requests
-import json
-import http.client
-from myojana.apis.html_to_image import create_image
+from frappe import _
from frappe.utils import get_site_name
+
+from myojana.apis.html_to_image import create_image
+
+
def format_mobile_number(mobile):
- # Remove any leading '+' sign
- if mobile.startswith('+'):
- mobile = mobile[1:]
-
- # Check if the mobile number starts with the country code for India (91)
- if mobile.startswith('91') and len(mobile) > 10:
- mobile = mobile[2:]
-
- # Ensure the mobile number is 10 digits long
- if len(mobile) == 10 and mobile.isdigit():
- return mobile
- else:
- raise ValueError("Invalid mobile number format")
+ # Remove any leading '+' sign
+ if mobile.startswith("+"):
+ mobile = mobile[1:]
+
+ # Check if the mobile number starts with the country code for India (91)
+ if mobile.startswith("91") and len(mobile) > 10:
+ mobile = mobile[2:]
+
+ # Ensure the mobile number is 10 digits long
+ if len(mobile) == 10 and mobile.isdigit():
+ return mobile
+ else:
+ raise ValueError("Invalid mobile number format")
+
+
@frappe.whitelist()
def test_auth_key(auth_key):
- conn = http.client.HTTPSConnection("control.msg91.com")
- headers = {
- 'accept': "application/json",
- 'authkey': auth_key
- }
- conn.request("GET", "/api/v5/whatsapp/whatsapp-activation/", headers=headers)
+ conn = http.client.HTTPSConnection("control.msg91.com")
+ headers = {"accept": "application/json", "authkey": auth_key}
+ conn.request("GET", "/api/v5/whatsapp/whatsapp-activation/", headers=headers)
- res = conn.getresponse()
- response_str = res.read().decode("utf-8") # Read and decode the response
- response_json = json.loads(response_str) # Convert the string to a JSON object
- return response_json
+ res = conn.getresponse()
+ response_str = res.read().decode("utf-8") # Read and decode the response
+ response_json = json.loads(response_str) # Convert the string to a JSON object
+ return response_json
@frappe.whitelist()
def send_id(doc):
- template_name, auth_key , integrated_number = frappe.db.get_value('mYojana Settings', None, ['id_card_template', 'auth_key' ,'integrated_number'])
-
- print("template_name",auth_key)
- if not auth_key:
- frappe.throw(_("Please set Auth Key in mYojana Settings"))
-
- if not template_name:
- frappe.throw(_("Please set ID Card Template in mYojana Settings"))
-
- file,doc = create_image(doc, template_name)
- conn = http.client.HTTPSConnection("api.msg91.com")
- payload = json.dumps({
- "integrated_number": integrated_number,
- "content_type": "template",
- "payload": {
- "messaging_product": "whatsapp",
- "type": "template",
- "template": {
- "name": "beneficiary_profile_id",
- "language": {
- "code": "en",
- "policy": "deterministic"
- },
- "namespace": None,
- "to_and_components": [{
- "to": [
- f"91{format_mobile_number(doc.contact_number)}"
- ],
- "components": {
- "header_1": {
- "type": "image",
- "value": f"{frappe.local.request.scheme}://{frappe.local.request.host}{file.file_url}"
- },
- "body_1": {
- "type": "text",
- "value": f"{doc.name_of_the_beneficiary}"
- }
- }
- }]
- }
- }
- })
- # return payload
- # print(payload)
- headers = {
- 'Content-Type': 'application/json',
- 'authkey': auth_key
- }
- conn.request("POST", "/api/v5/whatsapp/whatsapp-outbound-message/bulk/", payload, headers)
- res = conn.getresponse()
- data = res.read()
- print(data.decode("utf-8"))
- return data.decode("utf-8")
+ template_name, auth_key, integrated_number = frappe.db.get_value(
+ "mYojana Settings", None, ["id_card_template", "auth_key", "integrated_number"]
+ )
+
+ print("template_name", auth_key)
+ if not auth_key:
+ frappe.throw(_("Please set Auth Key in mYojana Settings"))
+
+ if not template_name:
+ frappe.throw(_("Please set ID Card Template in mYojana Settings"))
+
+ file, doc = create_image(doc, template_name)
+ conn = http.client.HTTPSConnection("api.msg91.com")
+ payload = json.dumps(
+ {
+ "integrated_number": integrated_number,
+ "content_type": "template",
+ "payload": {
+ "messaging_product": "whatsapp",
+ "type": "template",
+ "template": {
+ "name": "beneficiary_profile_id",
+ "language": {"code": "en", "policy": "deterministic"},
+ "namespace": None,
+ "to_and_components": [
+ {
+ "to": [f"91{format_mobile_number(doc.contact_number)}"],
+ "components": {
+ "header_1": {
+ "type": "image",
+ "value": f"{frappe.local.request.scheme}://{frappe.local.request.host}{file.file_url}",
+ },
+ "body_1": {"type": "text", "value": f"{doc.name_of_the_beneficiary}"},
+ },
+ }
+ ],
+ },
+ },
+ }
+ )
+ # return payload
+ # print(payload)
+ headers = {"Content-Type": "application/json", "authkey": auth_key}
+ conn.request("POST", "/api/v5/whatsapp/whatsapp-outbound-message/bulk/", payload, headers)
+ res = conn.getresponse()
+ data = res.read()
+ print(data.decode("utf-8"))
+ return data.decode("utf-8")
+
@frappe.whitelist()
def send(phoneNo):
- whatsapp = frappe.conf.get('whatsapp')
- message = '%7B%22type%22%3A%22text%22%2C%22text%22%3A%22Hi%20Sir%2FMadam%20Ji%5Cn%5CnNamaskar!%5Cn%5CnAap%20apna%20organization%20ID%20yaha%20dekh%20sakte%20hai.%20Kripya%20isko%20star%20mark%20karke%20save%20kar%20lijiye.%5Cn%5CnRegards%5CnJanpahal%22%7D'
- message_old = '%7B%22type%22%3A%22text%22%2C%22text%22%3A%22Congratulations!%20%F0%9F%8E%89%20Your%20loan%20application%20has%20been%20applied%20successfully!%20%F0%9F%92%B0%E2%9C%85%5Cn%5CnBest%20Regards%5CnGov%5Cn%5Cn%22%7D'
- payload = f"channel=whatsapp&source={whatsapp.get('source')}&destination=91{phoneNo}&message={message_old}&src.name={whatsapp.get('src.name')}"
- headers = {
- 'Cache-Control': 'no-cache',
- 'Content-Type': 'application/x-www-form-urlencoded',
- 'apikey': whatsapp.get('apikey'),
- 'cache-control': 'no-cache'
- }
- conn = http.client.HTTPSConnection("api.gupshup.io")
- conn.request("POST", "/wa/api/v1/msg", payload, headers)
- res = conn.getresponse()
- data = res.read()
- print("///////////////////////////////////////////////////////", data)
- return json.loads(data.decode("utf-8"))
\ No newline at end of file
+ whatsapp = frappe.conf.get("whatsapp")
+ message_old = "%7B%22type%22%3A%22text%22%2C%22text%22%3A%22Congratulations!%20%F0%9F%8E%89%20Your%20loan%20application%20has%20been%20applied%20successfully!%20%F0%9F%92%B0%E2%9C%85%5Cn%5CnBest%20Regards%5CnGov%5Cn%5Cn%22%7D"
+ payload = f"channel=whatsapp&source={whatsapp.get('source')}&destination=91{phoneNo}&message={message_old}&src.name={whatsapp.get('src.name')}"
+ headers = {
+ "Cache-Control": "no-cache",
+ "Content-Type": "application/x-www-form-urlencoded",
+ "apikey": whatsapp.get("apikey"),
+ "cache-control": "no-cache",
+ }
+ conn = http.client.HTTPSConnection("api.gupshup.io")
+ conn.request("POST", "/wa/api/v1/msg", payload, headers)
+ res = conn.getresponse()
+ data = res.read()
+ print("///////////////////////////////////////////////////////", data)
+ return json.loads(data.decode("utf-8"))
diff --git a/myojana/hooks.py b/myojana/hooks.py
index 5b91c0f..1d17716 100644
--- a/myojana/hooks.py
+++ b/myojana/hooks.py
@@ -7,70 +7,85 @@
# required_apps = ["Suvaidyam/sva_dashboard"]
fixtures = [
- # "mYojana Settings",
- # "Report List",
- # "SVA Report"
- # "scheme application submitted",
- # "Scheme Paid by",
- # "Client Script",
- # "Custom HTML Block",
- # "Caste category",
- # "Religion",
- # "Education",
- # "Marital status",
- # "Social vulnerable category",
- # "PWD master",
- # "ID Document",
- # "Occupation",
- # "Occupational Category",
- # "Role Profile",
- # "Source Of Information",
- # "House Types",
- # "Gender",
- # "Role",
- # "Name of the Department",
- # "State",
- # "District",
- # "Block",
- # "Village",
- # "Scheme",
- # "Camp",
- # "Proof of Disability",
- # "Milestone category",
- # "Centre",
- # "Sub Centre",
-
- # --- Jan Pahal CR fixtures (added 2026-04-12) ---
- # Jan Pahal custom DocTypes (Collective ecosystem + Infrastructure assessment)
- {"dt": "DocType", "filters": [["name", "in", [
- "Collective Members List", "Action child", "Collective"
- ]], ["custom", "=", 1]]},
- # CR-2: Updated Occupational Category with "Mobile Street Vendors"
- "Occupational Category",
- # CR-11: Custom Fields for digital payments, MSME, digital onboarding
- {"dt": "Custom Field", "filters": [["dt", "=", "Beneficiary Profiling"], ["fieldname", "like", "custom_%"]]},
- # CR-9: Property Setter to make DOB non-mandatory
- {"dt": "Property Setter", "filters": [["doc_type", "=", "Beneficiary Profiling"], ["field_name", "=", "date_of_birth"]]},
- # CR-5, CR-6, CR-10: Client Scripts for Collective, Infrastructural Success, dropdown indicators
- {"dt": "Client Script", "filters": [["dt", "in", ["Collective", "Infrastructural Success", "Beneficiary Profiling"]], ["name", "!=", "Scheme and Followup Validate"]]},
- # Meetings & Collectives workspace
- {"dt": "Workspace", "filters": [["name", "=", "Meetings & Collectives"]]},
+ # "mYojana Settings",
+ # "Report List",
+ # "SVA Report"
+ # "scheme application submitted",
+ # "Scheme Paid by",
+ # "Client Script",
+ # "Custom HTML Block",
+ # "Caste category",
+ # "Religion",
+ # "Education",
+ # "Marital status",
+ # "Social vulnerable category",
+ # "PWD master",
+ # "ID Document",
+ # "Occupation",
+ # "Occupational Category",
+ # "Role Profile",
+ # "Source Of Information",
+ # "House Types",
+ # "Gender",
+ # "Role",
+ # "Name of the Department",
+ # "State",
+ # "District",
+ # "Block",
+ # "Village",
+ # "Scheme",
+ # "Camp",
+ # "Proof of Disability",
+ # "Milestone category",
+ # "Centre",
+ # "Sub Centre",
+ # --- Jan Pahal CR fixtures (added 2026-04-12) ---
+ # Jan Pahal custom DocTypes (Collective ecosystem + Infrastructure assessment)
+ {
+ "dt": "DocType",
+ "filters": [
+ ["name", "in", ["Collective Members List", "Action child", "Collective"]],
+ ["custom", "=", 1],
+ ],
+ },
+ # CR-2: Updated Occupational Category with "Mobile Street Vendors"
+ "Occupational Category",
+ # CR-11: Custom Fields for digital payments, MSME, digital onboarding
+ {
+ "dt": "Custom Field",
+ "filters": [["dt", "=", "Beneficiary Profiling"], ["fieldname", "like", "custom_%"]],
+ },
+ # CR-9: Property Setter to make DOB non-mandatory
+ {
+ "dt": "Property Setter",
+ "filters": [["doc_type", "=", "Beneficiary Profiling"], ["field_name", "=", "date_of_birth"]],
+ },
+ # CR-5, CR-6, CR-10: Client Scripts for Collective, Infrastructural Success, dropdown indicators
+ {
+ "dt": "Client Script",
+ "filters": [
+ ["dt", "in", ["Collective", "Infrastructural Success", "Beneficiary Profiling"]],
+ ["name", "!=", "Scheme and Followup Validate"],
+ ],
+ },
+ # Meetings & Collectives workspace
+ {"dt": "Workspace", "filters": [["name", "=", "Meetings & Collectives"]]},
]
# Includes in
# ------------------
permission_query_conditions = {
- # "Sub Centre":"myojana.middlewares.sub_centre.list_query",
- # "Myojana User":"myojana.middlewares.myojana_users.list_query",
- "Role Profile":"myojana.middlewares.role_profile.list_query",
- # "User":"myojana.middlewares.user.list_query",
- # "Centre":"myojana.middlewares.centre.list_query",
+ # "Sub Centre":"myojana.middlewares.sub_centre.list_query",
+ # "Myojana User":"myojana.middlewares.myojana_users.list_query",
+ "Role Profile": "myojana.middlewares.role_profile.list_query",
+ # "User":"myojana.middlewares.user.list_query",
+ # "Centre":"myojana.middlewares.centre.list_query",
}
# include js, css files in header of desk.html
app_include_css = "/assets/myojana/css/main.css"
app_include_js = [
- "/assets/myojana/js/main.js",
- "https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js"
+ "/assets/myojana/js/main.js",
+ "https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js",
]
# include js, css files in header of web template
@@ -89,20 +104,16 @@
# include js in doctype views
doctype_js = {
- "Beneficiary Profiling" : [
- "public/js/utils/utils.js" ,
- "public/js/beneficiary_profiling/beneficiary_profiling.js",
- "public/js/beneficiary_profiling/follow_up.js",
- "public/js/beneficiary_profiling/scheme.js",
- "public/js/beneficiary_profiling/id_document.js",
- ],
- "Sub Centre":[
- "public/js/utils/utils.js"
- ],
- "mYojana Settings":[
- "public/js/utils/utils.js"
- ],
- "Scheme":"public/js/scheme/eligibile_ben.js"
+ "Beneficiary Profiling": [
+ "public/js/utils/utils.js",
+ "public/js/beneficiary_profiling/beneficiary_profiling.js",
+ "public/js/beneficiary_profiling/follow_up.js",
+ "public/js/beneficiary_profiling/scheme.js",
+ "public/js/beneficiary_profiling/id_document.js",
+ ],
+ "Sub Centre": ["public/js/utils/utils.js"],
+ "mYojana Settings": ["public/js/utils/utils.js"],
+ "Scheme": "public/js/scheme/eligibile_ben.js",
}
# doctype_js = {"Beneficiary Profiling" : }
# doctype_list_js = {"doctype" : "public/js/doctype_list.js"}
@@ -122,7 +133,7 @@
# website user home page (by Role)
# role_home_page = {
-# "Role": "home_page"
+# "Role": "home_page"
# }
# Generators
@@ -136,8 +147,8 @@
# add methods and filters to jinja environment
# jinja = {
-# "methods": "myojana.utils.jinja_methods",
-# "filters": "myojana.utils.jinja_filters"
+# "methods": "myojana.utils.jinja_methods",
+# "filters": "myojana.utils.jinja_filters"
# }
# Installation
@@ -179,11 +190,11 @@
# Permissions evaluated in scripted ways
# permission_query_conditions = {
-# "Event": "frappe.desk.doctype.event.event.get_permission_query_conditions",
+# "Event": "frappe.desk.doctype.event.event.get_permission_query_conditions",
# }
#
# has_permission = {
-# "Event": "frappe.desk.doctype.event.event.has_permission",
+# "Event": "frappe.desk.doctype.event.event.has_permission",
# }
# DocType Class
@@ -191,7 +202,7 @@
# Override standard doctype classes
# override_doctype_class = {
-# "ToDo": "custom_app.overrides.CustomToDo"
+# "ToDo": "custom_app.overrides.CustomToDo"
# }
# Document Events
@@ -204,32 +215,32 @@
# "on_cancel": "myojana.scheduler_events.ben_dob_update.update_dob_of_ben",
# "on_trash": "myojana.scheduler_events.ben_dob_update.update_dob_of_ben"
},
- # "Beneficiary Profiling": {
- # "on_update": "myojana.middlewares.test.test",
- # }
+ # "Beneficiary Profiling": {
+ # "on_update": "myojana.middlewares.test.test",
+ # }
}
# Scheduled Tasks
# ---------------
scheduler_events = {
-# "all": [
-# "myojana.tasks.all"
-# ],
+ # "all": [
+ # "myojana.tasks.all"
+ # ],
"daily": [
- "myojana.scheduler_events.ben_dob_update.update_age",
- # "myojana.scheduler_events.ben_dob_update.update_dob_of_ben",
- # "myojana.scheduler_events.ben_dob_update.update_dob_months"
+ "myojana.scheduler_events.ben_dob_update.update_age",
+ # "myojana.scheduler_events.ben_dob_update.update_dob_of_ben",
+ # "myojana.scheduler_events.ben_dob_update.update_dob_months"
],
-# "hourly": [
-# "myojana.tasks.hourly"
-# ],
-# "weekly": [
-# "myojana.tasks.weekly"
-# ],
-# "monthly": [
-# "myojana.tasks.monthly"
-# ],
+ # "hourly": [
+ # "myojana.tasks.hourly"
+ # ],
+ # "weekly": [
+ # "myojana.tasks.weekly"
+ # ],
+ # "monthly": [
+ # "myojana.tasks.monthly"
+ # ],
}
# Testing
@@ -241,14 +252,14 @@
# ------------------------------
#
# override_whitelisted_methods = {
-# "frappe.desk.doctype.event.event.get_events": "myojana.event.get_events"
+# "frappe.desk.doctype.event.event.get_events": "myojana.event.get_events"
# }
#
# each overriding function accepts a `data` argument;
# generated from the base implementation of the doctype dashboard,
# along with any modifications made in other Frappe apps
# override_doctype_dashboards = {
-# "Task": "myojana.task.get_dashboard_data"
+# "Task": "myojana.task.get_dashboard_data"
# }
# exempt linked doctypes from being automatically cancelled
@@ -258,7 +269,7 @@
# Ignore links to specified DocTypes when deleting documents
# -----------------------------------------------------------
-ignore_links_on_delete = ["Beneficiary Profiling", "Family" , "Route History"]
+ignore_links_on_delete = ["Beneficiary Profiling", "Family", "Route History"]
# Request Events
# ----------------
@@ -274,29 +285,29 @@
# --------------------
# user_data_fields = [
-# {
-# "doctype": "{doctype_1}",
-# "filter_by": "{filter_by}",
-# "redact_fields": ["{field_1}", "{field_2}"],
-# "partial": 1,
-# },
-# {
-# "doctype": "{doctype_2}",
-# "filter_by": "{filter_by}",
-# "partial": 1,
-# },
-# {
-# "doctype": "{doctype_3}",
-# "strict": False,
-# },
-# {
-# "doctype": "{doctype_4}"
-# }
+# {
+# "doctype": "{doctype_1}",
+# "filter_by": "{filter_by}",
+# "redact_fields": ["{field_1}", "{field_2}"],
+# "partial": 1,
+# },
+# {
+# "doctype": "{doctype_2}",
+# "filter_by": "{filter_by}",
+# "partial": 1,
+# },
+# {
+# "doctype": "{doctype_3}",
+# "strict": False,
+# },
+# {
+# "doctype": "{doctype_4}"
+# }
# ]
# Authentication and authorization
# --------------------------------
# auth_hooks = [
-# "myojana.auth.validate"
+# "myojana.auth.validate"
# ]
diff --git a/myojana/install/after_install.py b/myojana/install/after_install.py
index 22876ea..7b04a61 100644
--- a/myojana/install/after_install.py
+++ b/myojana/install/after_install.py
@@ -1,49 +1,25 @@
from myojana.utils.after_install import AfterInstall
state_json = [
- {
- "docstatus": 0,
- "doctype": "State",
- "name": "S01",
- "state_code": "S01",
- "state_name": "Jammu & Kashmir"
- },
- {
- "docstatus": 0,
- "doctype": "State",
- "name": "S02",
- "state_code": "S02",
- "state_name": "Himachal Pradesh"
- },
- {
- "docstatus": 0,
- "doctype": "State",
- "name": "S03",
- "state_code": "S03",
- "state_name": "Punjab"
- },
- {
- "docstatus": 0,
- "doctype": "State",
- "name": "S04",
- "state_code": "S04",
- "state_name": "Chandigarh"
- },
- {
- "docstatus": 0,
- "doctype": "State",
- "name": "S05",
- "state_code": "S05",
- "state_name": "Uttarakhand"
- }
+ {"docstatus": 0, "doctype": "State", "name": "S01", "state_code": "S01", "state_name": "Jammu & Kashmir"},
+ {
+ "docstatus": 0,
+ "doctype": "State",
+ "name": "S02",
+ "state_code": "S02",
+ "state_name": "Himachal Pradesh",
+ },
+ {"docstatus": 0, "doctype": "State", "name": "S03", "state_code": "S03", "state_name": "Punjab"},
+ {"docstatus": 0, "doctype": "State", "name": "S04", "state_code": "S04", "state_name": "Chandigarh"},
+ {"docstatus": 0, "doctype": "State", "name": "S05", "state_code": "S05", "state_name": "Uttarakhand"},
]
-def update_myojana_settings():
- AfterInstall.set_app_name()
- AfterInstall.set_brand_logo()
- AfterInstall.set_favicons()
- AfterInstall.set_navbar_logo()
- AfterInstall.set_navbar_setting()
- AfterInstall.set_splash_image()
- AfterInstall.set_website_logo()
+def update_myojana_settings():
+ AfterInstall.set_app_name()
+ AfterInstall.set_brand_logo()
+ AfterInstall.set_favicons()
+ AfterInstall.set_navbar_logo()
+ AfterInstall.set_navbar_setting()
+ AfterInstall.set_splash_image()
+ AfterInstall.set_website_logo()
diff --git a/myojana/master/doctype/block/block.js b/myojana/master/doctype/block/block.js
index 4e9db4c..0664779 100644
--- a/myojana/master/doctype/block/block.js
+++ b/myojana/master/doctype/block/block.js
@@ -1,35 +1,37 @@
// Copyright (c) 2023, suvaidyam and contributors
// For license information, please see license.txt
const apply_filter = (frm, field_name, filter_on, filter_value) => {
- frm.fields_dict[field_name].get_query = function (doc) {
- return {
- filters: {
- [filter_on]: filter_value,
- },
- page_length: 1000
- };
- }
-}
-function defult_filter(field_name, filter_on, frm) {
- frm.fields_dict[field_name].get_query = function (doc) {
- return {
- filters: {
- [filter_on]: frm.doc.filter_on || `please select ${filter_on}`,
- },
- };
- }
+ frm.fields_dict[field_name].get_query = function (doc) {
+ return {
+ filters: {
+ [filter_on]: filter_value,
+ },
+ page_length: 1000,
+ };
+ };
};
+function defult_filter(field_name, filter_on, frm) {
+ frm.fields_dict[field_name].get_query = function (doc) {
+ return {
+ filters: {
+ [filter_on]: frm.doc.filter_on || `please select ${filter_on}`,
+ },
+ };
+ };
+}
function hide_advance_search(frm, list) {
- for (item of list) {
- frm.set_df_property(item, 'only_select', true);
- }
-};
+ for (const item of list) {
+ frm.set_df_property(item, "only_select", true);
+ }
+}
frappe.ui.form.on("Block", {
- refresh(frm) {
- frm.doc.state ? apply_filter(frm, "district", "state", frm.doc.state) : defult_filter('district', "State", frm);
- // frm.doc.district ? apply_filter(frm ,"block", "District", frm.doc.district) : defult_filter('block', "District", frm);
- },
- state: function (frm) {
- apply_filter(frm, 'district', "state", frm.doc.state)
- },
+ refresh(frm) {
+ frm.doc.state
+ ? apply_filter(frm, "district", "state", frm.doc.state)
+ : defult_filter("district", "State", frm);
+ // frm.doc.district ? apply_filter(frm ,"block", "District", frm.doc.district) : defult_filter('block', "District", frm);
+ },
+ state: function (frm) {
+ apply_filter(frm, "district", "state", frm.doc.state);
+ },
});
diff --git a/myojana/master/doctype/block/block_list.js b/myojana/master/doctype/block/block_list.js
index 3774fdf..b02c511 100644
--- a/myojana/master/doctype/block/block_list.js
+++ b/myojana/master/doctype/block/block_list.js
@@ -1,5 +1,5 @@
-frappe.listview_settings['Block'] = {
- onload: function (listview) {
- $('.layout-side-section').hide();
- }
-};
\ No newline at end of file
+frappe.listview_settings["Block"] = {
+ onload: function (listview) {
+ $(".layout-side-section").hide();
+ },
+};
diff --git a/myojana/master/doctype/camp/camp.js b/myojana/master/doctype/camp/camp.js
index 6a05f21..e0fca72 100644
--- a/myojana/master/doctype/camp/camp.js
+++ b/myojana/master/doctype/camp/camp.js
@@ -2,7 +2,5 @@
// For license information, please see license.txt
frappe.ui.form.on("Camp", {
- refresh(frm) {
-
- },
+ refresh(frm) {},
});
diff --git a/myojana/master/doctype/camp/camp_list.js b/myojana/master/doctype/camp/camp_list.js
index 1880827..9a62552 100644
--- a/myojana/master/doctype/camp/camp_list.js
+++ b/myojana/master/doctype/camp/camp_list.js
@@ -1,5 +1,5 @@
-frappe.listview_settings['Camp'] = {
- onload: function (listview) {
- // $('.layout-side-section').hide();
- }
-};
\ No newline at end of file
+frappe.listview_settings["Camp"] = {
+ onload: function (listview) {
+ // $('.layout-side-section').hide();
+ },
+};
diff --git a/myojana/master/doctype/caste_category/caste_category_list.js b/myojana/master/doctype/caste_category/caste_category_list.js
index bdb61de..82bbcc4 100644
--- a/myojana/master/doctype/caste_category/caste_category_list.js
+++ b/myojana/master/doctype/caste_category/caste_category_list.js
@@ -1,5 +1,5 @@
-frappe.listview_settings['Caste category'] = {
- onload: function (listview) {
- $('.layout-side-section').hide();
- }
-};
\ No newline at end of file
+frappe.listview_settings["Caste category"] = {
+ onload: function (listview) {
+ $(".layout-side-section").hide();
+ },
+};
diff --git a/myojana/master/doctype/district/district_list.js b/myojana/master/doctype/district/district_list.js
index 9a5d5ff..4279c5d 100644
--- a/myojana/master/doctype/district/district_list.js
+++ b/myojana/master/doctype/district/district_list.js
@@ -1,5 +1,5 @@
-frappe.listview_settings['District'] = {
- onload: function (listview) {
- $('.layout-side-section').hide();
- }
-};
\ No newline at end of file
+frappe.listview_settings["District"] = {
+ onload: function (listview) {
+ $(".layout-side-section").hide();
+ },
+};
diff --git a/myojana/master/doctype/education/education_list.js b/myojana/master/doctype/education/education_list.js
index feb0476..7a1de19 100644
--- a/myojana/master/doctype/education/education_list.js
+++ b/myojana/master/doctype/education/education_list.js
@@ -1,5 +1,5 @@
-frappe.listview_settings['Education'] = {
- onload: function (listview) {
- $('.layout-side-section').hide();
- }
-};
\ No newline at end of file
+frappe.listview_settings["Education"] = {
+ onload: function (listview) {
+ $(".layout-side-section").hide();
+ },
+};
diff --git a/myojana/master/doctype/house_types/house_types_list.js b/myojana/master/doctype/house_types/house_types_list.js
index bd46df4..e064927 100644
--- a/myojana/master/doctype/house_types/house_types_list.js
+++ b/myojana/master/doctype/house_types/house_types_list.js
@@ -1,5 +1,5 @@
-frappe.listview_settings['House Types'] = {
- onload: function (listview) {
- $('.layout-side-section').hide();
- }
-};
\ No newline at end of file
+frappe.listview_settings["House Types"] = {
+ onload: function (listview) {
+ $(".layout-side-section").hide();
+ },
+};
diff --git a/myojana/master/doctype/id_document/id_document_list.js b/myojana/master/doctype/id_document/id_document_list.js
index 0fea897..2f0a31a 100644
--- a/myojana/master/doctype/id_document/id_document_list.js
+++ b/myojana/master/doctype/id_document/id_document_list.js
@@ -1,5 +1,5 @@
-frappe.listview_settings['ID Document'] = {
- onload: function (listview) {
- $('.layout-side-section').hide();
- }
-};
\ No newline at end of file
+frappe.listview_settings["ID Document"] = {
+ onload: function (listview) {
+ $(".layout-side-section").hide();
+ },
+};
diff --git a/myojana/master/doctype/marital_status/marital_status_list.js b/myojana/master/doctype/marital_status/marital_status_list.js
index 04dcf39..44ab9c0 100644
--- a/myojana/master/doctype/marital_status/marital_status_list.js
+++ b/myojana/master/doctype/marital_status/marital_status_list.js
@@ -1,5 +1,5 @@
-frappe.listview_settings['Marital status'] = {
- onload: function (listview) {
- $('.layout-side-section').hide();
- }
-};
\ No newline at end of file
+frappe.listview_settings["Marital status"] = {
+ onload: function (listview) {
+ $(".layout-side-section").hide();
+ },
+};
diff --git a/myojana/master/doctype/milestone_category/milestone_category_list.js b/myojana/master/doctype/milestone_category/milestone_category_list.js
index bd5269f..8c96caf 100644
--- a/myojana/master/doctype/milestone_category/milestone_category_list.js
+++ b/myojana/master/doctype/milestone_category/milestone_category_list.js
@@ -1,5 +1,5 @@
-frappe.listview_settings['Milestone category'] = {
- onload: function (listview) {
- $('.layout-side-section').hide();
- }
-};
\ No newline at end of file
+frappe.listview_settings["Milestone category"] = {
+ onload: function (listview) {
+ $(".layout-side-section").hide();
+ },
+};
diff --git a/myojana/master/doctype/name_of_the_department/name_of_the_department.js b/myojana/master/doctype/name_of_the_department/name_of_the_department.js
index 5720118..77205de 100644
--- a/myojana/master/doctype/name_of_the_department/name_of_the_department.js
+++ b/myojana/master/doctype/name_of_the_department/name_of_the_department.js
@@ -3,13 +3,13 @@
frappe.ui.form.on("Name of the Department", {
refresh(frm) {
- if(frm.doc.department_urlwebsite){
- frm.add_web_link(frm?.doc?.department_urlwebsite)
- }
+ if (frm.doc.department_urlwebsite) {
+ frm.add_web_link(frm?.doc?.department_urlwebsite);
+ }
+ },
+ department_urlwebsite: function (frm) {
+ if (frm.doc.department_urlwebsite) {
+ frm.add_web_link(frm?.doc?.department_urlwebsite);
+ }
},
- department_urlwebsite: function(frm){
- if(frm.doc.department_urlwebsite){
- frm.add_web_link(frm?.doc?.department_urlwebsite)
- }
- }
});
diff --git a/myojana/master/doctype/name_of_the_department/name_of_the_department_list.js b/myojana/master/doctype/name_of_the_department/name_of_the_department_list.js
index 4163436..718366b 100644
--- a/myojana/master/doctype/name_of_the_department/name_of_the_department_list.js
+++ b/myojana/master/doctype/name_of_the_department/name_of_the_department_list.js
@@ -1,5 +1,5 @@
-frappe.listview_settings['Name of the Department'] = {
- onload: function (listview) {
- $('.layout-side-section').hide();
- }
-};
\ No newline at end of file
+frappe.listview_settings["Name of the Department"] = {
+ onload: function (listview) {
+ $(".layout-side-section").hide();
+ },
+};
diff --git a/myojana/master/doctype/occupation/occupation_list.js b/myojana/master/doctype/occupation/occupation_list.js
index 7966372..12420ad 100644
--- a/myojana/master/doctype/occupation/occupation_list.js
+++ b/myojana/master/doctype/occupation/occupation_list.js
@@ -1,5 +1,5 @@
-frappe.listview_settings['Occupation'] = {
- onload: function (listview) {
- $('.layout-side-section').hide();
- }
-};
\ No newline at end of file
+frappe.listview_settings["Occupation"] = {
+ onload: function (listview) {
+ $(".layout-side-section").hide();
+ },
+};
diff --git a/myojana/master/doctype/occupational_category/occupational_category_list.js b/myojana/master/doctype/occupational_category/occupational_category_list.js
index 7f34852..f503d60 100644
--- a/myojana/master/doctype/occupational_category/occupational_category_list.js
+++ b/myojana/master/doctype/occupational_category/occupational_category_list.js
@@ -1,5 +1,5 @@
-frappe.listview_settings['Occupational Category'] = {
- onload: function (listview) {
- $('.layout-side-section').hide();
- }
-};
\ No newline at end of file
+frappe.listview_settings["Occupational Category"] = {
+ onload: function (listview) {
+ $(".layout-side-section").hide();
+ },
+};
diff --git a/myojana/master/doctype/proof_of_disability/proof_of_disability_list.js b/myojana/master/doctype/proof_of_disability/proof_of_disability_list.js
index 3786a03..e29fce1 100644
--- a/myojana/master/doctype/proof_of_disability/proof_of_disability_list.js
+++ b/myojana/master/doctype/proof_of_disability/proof_of_disability_list.js
@@ -1,5 +1,5 @@
-frappe.listview_settings['Proof of Disability'] = {
- onload: function (listview) {
- $('.layout-side-section').hide();
- }
-};
\ No newline at end of file
+frappe.listview_settings["Proof of Disability"] = {
+ onload: function (listview) {
+ $(".layout-side-section").hide();
+ },
+};
diff --git a/myojana/master/doctype/pwd_master/pwd_master_list.js b/myojana/master/doctype/pwd_master/pwd_master_list.js
index ec4c325..8fc3181 100644
--- a/myojana/master/doctype/pwd_master/pwd_master_list.js
+++ b/myojana/master/doctype/pwd_master/pwd_master_list.js
@@ -1,5 +1,5 @@
-frappe.listview_settings['PWD master'] = {
- onload: function (listview) {
- $('.layout-side-section').hide();
- }
-};
\ No newline at end of file
+frappe.listview_settings["PWD master"] = {
+ onload: function (listview) {
+ $(".layout-side-section").hide();
+ },
+};
diff --git a/myojana/master/doctype/religion/religion_list.js b/myojana/master/doctype/religion/religion_list.js
index a2d1461..1578dcd 100644
--- a/myojana/master/doctype/religion/religion_list.js
+++ b/myojana/master/doctype/religion/religion_list.js
@@ -1,5 +1,5 @@
-frappe.listview_settings['Religion'] = {
- onload: function (listview) {
- $('.layout-side-section').hide();
- }
-};
\ No newline at end of file
+frappe.listview_settings["Religion"] = {
+ onload: function (listview) {
+ $(".layout-side-section").hide();
+ },
+};
diff --git a/myojana/master/doctype/scheme/scheme.js b/myojana/master/doctype/scheme/scheme.js
index 5b2daa4..3fd832c 100644
--- a/myojana/master/doctype/scheme/scheme.js
+++ b/myojana/master/doctype/scheme/scheme.js
@@ -1,426 +1,481 @@
// Copyright (c) 2023, suvaidyam and contributors
// For license information, please see license.txt
let response;
-var common_operators = ["=", "!="]
+var common_operators = ["=", "!="];
let columns;
let current_page = 1;
var field_types = {
- "Date": [...common_operators, ">", "<", ">=", "<="],
- "Int": [...common_operators, ">", "<", ">=", "<="],
- "Link": [...common_operators],
- "Select": [...common_operators],
- "Currency": [...common_operators, ">", "<", ">=", "<="]
-}
+ Date: [...common_operators, ">", "<", ">=", "<="],
+ Int: [...common_operators, ">", "<", ">=", "<="],
+ Link: [...common_operators],
+ Select: [...common_operators],
+ Currency: [...common_operators, ">", "<", ">=", "<="],
+};
// CHILD TABLE
-var child_table_field = 'rules'
+var child_table_field = "rules";
function evaluateExpression(input, expression) {
- if (!(/^[a-zA-Z0-9\s()+\-/*%&|=!<>]*$/.test(expression))) {
- return 'Invalid expression'
- }
- // expression = expression.toLowerCase();
- expression = expression.replace(/and/g, '&&').replace(/or/g, '||');
- expression = expression.replace(/AND/g, '&&').replace(/OR/g, '||');
- for (let key in input) {
- expression = expression.replace(new RegExp(key, 'g'), input[key]);
- }
- try {
- return eval(expression);
- } catch (err) {
- return err.message;
- }
+ if (!/^[a-zA-Z0-9\s()+\-/*%&|=!<>]*$/.test(expression)) {
+ return "Invalid expression";
+ }
+ // expression = expression.toLowerCase();
+ expression = expression.replace(/and/g, "&&").replace(/or/g, "||");
+ expression = expression.replace(/AND/g, "&&").replace(/OR/g, "||");
+ for (let key in input) {
+ expression = expression.replace(new RegExp(key, "g"), input[key]);
+ }
+ try {
+ return eval(expression);
+ } catch (err) {
+ return err.message;
+ }
}
function convertJSONToCSV(jsonData, fileName) {
- // Convert JSON to CSV format
- const csvContent = [];
- const keys = Object.keys(jsonData[0]);
- csvContent.push(keys.join(','));
+ // Convert JSON to CSV format
+ const csvContent = [];
+ const keys = Object.keys(jsonData[0]);
+ csvContent.push(keys.join(","));
- jsonData.forEach(entry => {
- const values = keys.map(key => {
- let value = entry[key];
- if (typeof value === 'string') {
- value = `"${value}"`; // Enclose in double quotes to handle commas within strings
- }
- return value;
- });
- csvContent.push(values.join(','));
- });
+ jsonData.forEach((entry) => {
+ const values = keys.map((key) => {
+ let value = entry[key];
+ if (typeof value === "string") {
+ value = `"${value}"`; // Enclose in double quotes to handle commas within strings
+ }
+ return value;
+ });
+ csvContent.push(values.join(","));
+ });
- // Create CSV file
- const csvString = csvContent.join('\n');
- const blob = new Blob([csvString], { type: 'text/csv;charset=utf-8;' });
- if (navigator.msSaveBlob) { // IE 10+
- navigator.msSaveBlob(blob, fileName);
- } else {
- const link = document.createElement('a');
- if (link.download !== undefined) {
- const url = URL.createObjectURL(blob);
- link.setAttribute('href', url);
- link.setAttribute('download', fileName);
- document.body.appendChild(link);
- link.click();
- document.body.removeChild(link);
- } else {
- alert('Your browser does not support downloading files. Please try a different browser.');
- }
- }
+ // Create CSV file
+ const csvString = csvContent.join("\n");
+ const blob = new Blob([csvString], { type: "text/csv;charset=utf-8;" });
+ if (navigator.msSaveBlob) {
+ // IE 10+
+ navigator.msSaveBlob(blob, fileName);
+ } else {
+ const link = document.createElement("a");
+ if (link.download !== undefined) {
+ const url = URL.createObjectURL(blob);
+ link.setAttribute("href", url);
+ link.setAttribute("download", fileName);
+ document.body.appendChild(link);
+ link.click();
+ document.body.removeChild(link);
+ } else {
+ alert(
+ "Your browser does not support downloading files. Please try a different browser."
+ );
+ }
+ }
}
function generateQueryString(rows) {
- // console.log("generateQueryString[called]", rows);
- let obj = {};
- for (let row of rows) {
- if (row.rule_field && row.operator && row.data) {
- let val = ['IN', 'NOT IN'].includes(row.operator) ? row.data?.split(',').map(e => `'${e}'`).join(',') : row.data;
- if (obj[row.group]) {
- obj[row.group].push(`${row.rule_field} ${row.operator} ${val}`)
- } else {
- obj[row.group] = [`${row.rule_field} ${row.operator} ${val}`]
- }
- }
- }
- let cond = Object.keys(obj).map(e => `(${obj[e].join(' AND ')})`).join(' OR ')
- document.getElementById('query').innerText = cond ? cond : 'Rules are not set for this scheme.'
+ // console.log("generateQueryString[called]", rows);
+ let obj = {};
+ for (let row of rows) {
+ if (row.rule_field && row.operator && row.data) {
+ let val = ["IN", "NOT IN"].includes(row.operator)
+ ? row.data
+ ?.split(",")
+ .map((e) => `'${e}'`)
+ .join(",")
+ : row.data;
+ if (obj[row.group]) {
+ obj[row.group].push(`${row.rule_field} ${row.operator} ${val}`);
+ } else {
+ obj[row.group] = [`${row.rule_field} ${row.operator} ${val}`];
+ }
+ }
+ }
+ let cond = Object.keys(obj)
+ .map((e) => `(${obj[e].join(" AND ")})`)
+ .join(" OR ");
+ document.getElementById("query").innerText = cond
+ ? cond
+ : "Rules are not set for this scheme.";
}
-var field_list = []
+var field_list = [];
function get_field_list(child_table_field, frm) {
- frappe.call({
- method: "myojana.rule_engine.apis.get_meta_api.get_field_lists",
- args: {
- doctype_name: "Beneficiary Profiling",
- field_types: Object.keys(field_types)
- },
- callback: function (response) {
- // Handle the response
- if (response.message) {
- field_list = response.message
- frm.fields_dict[child_table_field].grid.update_docfield_property("rule_field", "options", response.message);
- // console.log(response.message);
- } else {
- // console.error("API call failed");
- }
- }
- });
-
+ frappe.call({
+ method: "myojana.rule_engine.apis.get_meta_api.get_field_lists",
+ args: {
+ doctype_name: "Beneficiary Profiling",
+ field_types: Object.keys(field_types),
+ },
+ callback: function (response) {
+ // Handle the response
+ if (response.message) {
+ field_list = response.message;
+ frm.fields_dict[child_table_field].grid.update_docfield_property(
+ "rule_field",
+ "options",
+ response.message
+ );
+ // console.log(response.message);
+ } else {
+ // console.error("API call failed");
+ }
+ },
+ });
}
function get_Link_list(doctype_name) {
- return new Promise((resolve, reject) => {
- frappe.call({
- method: "frappe.desk.search.search_link",
- args: {
- doctype: doctype_name,
- txt: "",
- page_length: 10000
- },
- callback: async function (response) {
- let data = response?.results || response?.message
- if (data) {
- resolve(data);
- }
- }
- });
- })
+ return new Promise((resolve, reject) => {
+ frappe.call({
+ method: "frappe.desk.search.search_link",
+ args: {
+ doctype: doctype_name,
+ txt: "",
+ page_length: 10000,
+ },
+ callback: async function (response) {
+ let data = response?.results || response?.message;
+ if (data) {
+ resolve(data);
+ }
+ },
+ });
+ });
}
function callAPI(options) {
- return new Promise((resolve, reject) => {
- frappe.call({
- ...options,
- callback: async function (response) {
- resolve(response?.message || response?.value)
- }
- });
- })
+ return new Promise((resolve, reject) => {
+ frappe.call({
+ ...options,
+ callback: async function (response) {
+ resolve(response?.message || response?.value);
+ },
+ });
+ });
}
const generate_filters = async (frm, datatable, filter_val) => {
- response = await get_ben_list(frm, ['name', ...columns], filter_val)
- await render_counts(response)
- datatable.refresh(response.data)
- // console.log("filter values", filter_val)
-
-}
+ response = await get_ben_list(frm, ["name", ...columns], filter_val);
+ await render_counts(response);
+ datatable.refresh(response.data);
+ // console.log("filter values", filter_val)
+};
const addTableFilter = (datatable, elements = [], rows = []) => {
- document.addEventListener('keyup', function (event) {
- if (elements.includes(event.target.id)) {
- let filters = []
- for (let el of elements) {
- let val = document.getElementById(el)?.value;
- if (val) {
- filters.push({ [el]: __(val) });
- } else {
- filters = filters.filter(filter => !filter.hasOwnProperty(el));
- }
- }
- generate_filters(cur_frm, datatable, filters)
- datatable.refresh(rows)
- }
- });
-}
+ document.addEventListener("keyup", function (event) {
+ if (elements.includes(event.target.id)) {
+ let filters = [];
+ for (let el of elements) {
+ let val = document.getElementById(el)?.value;
+ if (val) {
+ filters.push({ [el]: __(val) });
+ } else {
+ filters = filters.filter((filter) => !filter.hasOwnProperty(el));
+ }
+ }
+ generate_filters(cur_frm, datatable, filters);
+ datatable.refresh(rows);
+ }
+ });
+};
const get_ben_list = async (frm, columns, filters = [], start = 0, page_imit = 100) => {
- // console.log("filters", filters,)
- let list = await callAPI({
- method: 'myojana.api.eligible_beneficiaries',
- freeze: true,
- args: {
- "scheme": frm.doc.name,
- columns: columns,
- filters: filters,
- start: start,
- page_imit: page_imit
- },
- freeze_message: __("Getting beneficiaries..."),
- })
- // scheme_list = list.sort((a, b) => b.matching_rules_per - a.matching_rules_per);
- return list
-}
+ // console.log("filters", filters,)
+ let list = await callAPI({
+ method: "myojana.api.eligible_beneficiaries",
+ freeze: true,
+ args: {
+ scheme: frm.doc.name,
+ columns: columns,
+ filters: filters,
+ start: start,
+ page_imit: page_imit,
+ },
+ freeze_message: __("Getting beneficiaries..."),
+ });
+ // scheme_list = list.sort((a, b) => b.matching_rules_per - a.matching_rules_per);
+ return list;
+};
let tableConf = {
- columns: [
- {
- name: " ",
- id: 'serial_no',
- editable: false,
- resizable: true,
- sortable: false,
- focusable: false,
- dropdown: true,
- width: 100,
- format: (value, columns, ops, row) => {
- // console.log(current_page)
- return (columns?.[0]?.rowIndex + 1)
- }
- },
- {
- name: __("Name of the beneficiary"),
- id: 'name_of_the_beneficiary',
- editable: false,
- resizable: false,
- sortable: false,
- focusable: false,
- dropdown: true,
- width: 200,
- format: (value, columns, ops, row, i) => {
- return `${row.name_of_the_beneficiary}`
- }
- },
- {
- name: __("Primary member"),
- id: 'name_of_parents',
- field: 'select_primary_member.name_of_parents',
- editable: false,
- resizable: false,
- sortable: false,
- focusable: false,
- dropdown: false,
- width: 200,
- },
- {
- name: __("Contact number"),
- id: 'contact_number',
- editable: false,
- resizable: false,
- sortable: false,
- focusable: false,
- dropdown: false,
- width: 150,
- },
- {
- name: __("Block"),
- id: 'block_name',
- field: 'ward.block_name',
- editable: false,
- resizable: false,
- sortable: false,
- focusable: false,
- dropdown: false,
- width: 200,
- },
- {
- name: __("Name of the settlement"),
- id: 'village_name',
- field: 'name_of_the_settlement.village_name',
- editable: false,
- resizable: false,
- sortable: false,
- focusable: false,
- dropdown: false,
- width: 200,
- }
- ],
- rows: [],
- filterable: true
+ columns: [
+ {
+ name: " ",
+ id: "serial_no",
+ editable: false,
+ resizable: true,
+ sortable: false,
+ focusable: false,
+ dropdown: true,
+ width: 100,
+ format: (value, columns, ops, row) => {
+ // console.log(current_page)
+ return columns?.[0]?.rowIndex + 1;
+ },
+ },
+ {
+ name: __("Name of the beneficiary"),
+ id: "name_of_the_beneficiary",
+ editable: false,
+ resizable: false,
+ sortable: false,
+ focusable: false,
+ dropdown: true,
+ width: 200,
+ format: (value, columns, ops, row, i) => {
+ return `${row.name_of_the_beneficiary}`;
+ },
+ },
+ {
+ name: __("Primary member"),
+ id: "name_of_parents",
+ field: "select_primary_member.name_of_parents",
+ editable: false,
+ resizable: false,
+ sortable: false,
+ focusable: false,
+ dropdown: false,
+ width: 200,
+ },
+ {
+ name: __("Contact number"),
+ id: "contact_number",
+ editable: false,
+ resizable: false,
+ sortable: false,
+ focusable: false,
+ dropdown: false,
+ width: 150,
+ },
+ {
+ name: __("Block"),
+ id: "block_name",
+ field: "ward.block_name",
+ editable: false,
+ resizable: false,
+ sortable: false,
+ focusable: false,
+ dropdown: false,
+ width: 200,
+ },
+ {
+ name: __("Name of the settlement"),
+ id: "village_name",
+ field: "name_of_the_settlement.village_name",
+ editable: false,
+ resizable: false,
+ sortable: false,
+ focusable: false,
+ dropdown: false,
+ width: 200,
+ },
+ ],
+ rows: [],
+ filterable: true,
};
-const render_counts = async(response)=>{
- document.getElementById('total') ? document.getElementById('total').innerText = "Total: Beneficiary: " + response?.count?.total + ',' : ''
- document.getElementById('total_family') ? document.getElementById('total_family').innerText = "Primary member: " + response?.count?.family_count + ',' : ''
- document.getElementById('block_count') ? document.getElementById('block_count').innerText = "Block count: " + response?.count?.block_count + ',' : ''
- document.getElementById('settlement_count') ? document.getElementById('settlement_count').innerText = "Settlement count: " + response?.count?.settlement_count : ''
-}
-var page_list
+const render_counts = async (response) => {
+ document.getElementById("total")
+ ? (document.getElementById("total").innerText =
+ "Total: Beneficiary: " + response?.count?.total + ",")
+ : "";
+ document.getElementById("total_family")
+ ? (document.getElementById("total_family").innerText =
+ "Primary member: " + response?.count?.family_count + ",")
+ : "";
+ document.getElementById("block_count")
+ ? (document.getElementById("block_count").innerText =
+ "Block count: " + response?.count?.block_count + ",")
+ : "";
+ document.getElementById("settlement_count")
+ ? (document.getElementById("settlement_count").innerText =
+ "Settlement count: " + response?.count?.settlement_count)
+ : "";
+};
+var page_list;
const render_table = async (frm) => {
- response = { count: { total: 0, family_count: 0, }, data: [] };
- let total_page = 0;
- get_field_list('rules', frm)
- if (!frm?.doc?.__islocal) {
- columns = tableConf.columns.map(e => (e.field ? e.field : e.id))
- response = await get_ben_list(frm, ['name', ...columns])
- total_page = Math.ceil((response?.count.total / 100));
- }
- page_list = `
+ response = { count: { total: 0, family_count: 0 }, data: [] };
+ let total_page = 0;
+ get_field_list("rules", frm);
+ if (!frm?.doc?.__islocal) {
+ columns = tableConf.columns.map((e) => (e.field ? e.field : e.id));
+ response = await get_ben_list(frm, ["name", ...columns]);
+ total_page = Math.ceil(response?.count.total / 100);
+ }
+ page_list = `
«
Previous
- `
- for (let i = 1; i <= total_page; i++) {
- page_list = page_list + `${i}`
- // console.log("loop page", i)
- }
- page_list = page_list + `
+ `;
+ for (let i = 1; i <= total_page; i++) {
+ page_list =
+ page_list + `${i}`;
+ // console.log("loop page", i)
+ }
+ page_list =
+ page_list +
+ `
»
Next
- `
- let pagination_page = document.getElementById('page_list')
- pagination_page.innerHTML = page_list
+ `;
+ let pagination_page = document.getElementById("page_list");
+ pagination_page.innerHTML = page_list;
- const container = document.getElementById('eligible_beneficiaries');
- const datatable = new DataTable(container, {
- layout: 'fluid',
- columns: tableConf.columns,
- serialNoColumn: false
- });
- // next page on pagination
- document.getElementById('next-page').onclick = () => {
- current_page += 1
- // console.log(current_page)
- }
- // previous page of pagination
- document.getElementById("previous-page").onclick = () => {
- current_page -= 1
- // console.log(current_page)
- }
- const elements = document.querySelectorAll('.page-value');
- elements.forEach(element => {
- element.addEventListener('click', async function (event) {
- current_page = Number(event.target.innerText);
- let active_page = Number(event.target.innerText)
- const start = (active_page > 1 ? ((active_page * (100)) - 100) : 0)
- response = await get_ben_list(frm, ['name', ...columns], [], start, 100)
- datatable.refresh(response.data);
- });
- });
- datatable.style.setStyle(`.dt-scrollable`, { height: '400px!important', overflow: 'scroll!important' });
- datatable.style.setStyle(`.dt-instance-1 .dt-cell__content--col-0`, { width: '660px' });
- datatable.refresh(response?.data);
- addTableFilter(datatable, ['name_of_the_beneficiary', 'name_of_parents', 'contact_number', 'block_name'], response?.data)
- document.getElementById('parent').style.display = "flex";
- document.getElementById('parent').style.columnGap = "15px";
- document.getElementById('parent').style.flexWrap = "wrap";
- await render_counts(response)
- // document.getElementById('pagination') ? document.getElementById('pagination').innerHTML = paginationHTML : ""
- frm.set_query("name_of_department", () => { return { page_length: 1000 }; });
- if (frm.doc.department_urlwebsite) {
- frm.add_web_link(frm?.doc?.department_urlwebsite)
- }
- generateQueryString(frm.doc[child_table_field])
-}
+ const container = document.getElementById("eligible_beneficiaries");
+ const datatable = new DataTable(container, {
+ layout: "fluid",
+ columns: tableConf.columns,
+ serialNoColumn: false,
+ });
+ // next page on pagination
+ document.getElementById("next-page").onclick = () => {
+ current_page += 1;
+ // console.log(current_page)
+ };
+ // previous page of pagination
+ document.getElementById("previous-page").onclick = () => {
+ current_page -= 1;
+ // console.log(current_page)
+ };
+ const elements = document.querySelectorAll(".page-value");
+ elements.forEach((element) => {
+ element.addEventListener("click", async function (event) {
+ current_page = Number(event.target.innerText);
+ let active_page = Number(event.target.innerText);
+ const start = active_page > 1 ? active_page * 100 - 100 : 0;
+ response = await get_ben_list(frm, ["name", ...columns], [], start, 100);
+ datatable.refresh(response.data);
+ });
+ });
+ datatable.style.setStyle(`.dt-scrollable`, {
+ height: "400px!important",
+ overflow: "scroll!important",
+ });
+ datatable.style.setStyle(`.dt-instance-1 .dt-cell__content--col-0`, { width: "660px" });
+ datatable.refresh(response?.data);
+ addTableFilter(
+ datatable,
+ ["name_of_the_beneficiary", "name_of_parents", "contact_number", "block_name"],
+ response?.data
+ );
+ document.getElementById("parent").style.display = "flex";
+ document.getElementById("parent").style.columnGap = "15px";
+ document.getElementById("parent").style.flexWrap = "wrap";
+ await render_counts(response);
+ // document.getElementById('pagination') ? document.getElementById('pagination').innerHTML = paginationHTML : ""
+ frm.set_query("name_of_department", () => {
+ return { page_length: 1000 };
+ });
+ if (frm.doc.department_urlwebsite) {
+ frm.add_web_link(frm?.doc?.department_urlwebsite);
+ }
+ generateQueryString(frm.doc[child_table_field]);
+};
frappe.ui.form.on("Scheme", {
- async refresh(frm) {
- // render_table(frm)
- // document.getElementById('export-exel').onclick = function () {
- // convertJSONToCSV(response.data, "eligible_ben")
- // }
- let wrapper = document.getElementById('eligible_beneficiaries');
- new SchemeEligibleBen(frm, wrapper)
- },
- async onload(frm) {
- },
- before_save: async function (frm) {
- },
- type_of_the_scheme: function (frm) {
- if (frm.doc.type_of_the_scheme != "State") {
- frm.set_value("state", "");
- }
- },
- name_of_department: function (frm) {
- if (frm.doc.department_urlwebsite) {
- frm.add_web_link(frm?.doc?.department_urlwebsite)
- }
- },
- // name_of_beneficiary: async function (frm) {
- // generate_filters(frm)
+ async refresh(frm) {
+ // render_table(frm)
+ // document.getElementById('export-exel').onclick = function () {
+ // convertJSONToCSV(response.data, "eligible_ben")
+ // }
+ let wrapper = document.getElementById("eligible_beneficiaries");
+ new SchemeEligibleBen(frm, wrapper);
+ },
+ async onload(frm) {},
+ before_save: async function (frm) {},
+ type_of_the_scheme: function (frm) {
+ if (frm.doc.type_of_the_scheme != "State") {
+ frm.set_value("state", "");
+ }
+ },
+ name_of_department: function (frm) {
+ if (frm.doc.department_urlwebsite) {
+ frm.add_web_link(frm?.doc?.department_urlwebsite);
+ }
+ },
+ // name_of_beneficiary: async function (frm) {
+ // generate_filters(frm)
- // },
- // primary_member: async function (frm) {
- // generate_filters(frm)
- // },
- // phone_number: async function (frm) {
- // generate_filters(frm)
- // },
- // block: async function (frm) {
- // generate_filters(frm)
- // },
+ // },
+ // primary_member: async function (frm) {
+ // generate_filters(frm)
+ // },
+ // phone_number: async function (frm) {
+ // generate_filters(frm)
+ // },
+ // block: async function (frm) {
+ // generate_filters(frm)
+ // },
});
const form_events = {
- [`${child_table_field}_add`]: (frm, cdt, cdn) => {
- let initial_code = 64
- let row = frappe.get_doc(cdt, cdn);
- if (row.idx <= 26) {
- row.code = (String.fromCharCode(initial_code + row.idx))
- } else {
- row.code = (String.fromCharCode(initial_code + (row.idx - 26)) + String.fromCharCode(initial_code + (row.idx - 26)))
- }
- get_field_list('rules', frm)
- }
-}
-frappe.ui.form.on('Rule Engine Child', {
- refresh(frm) {
- generateQueryString(frm.doc[child_table_field])
- },
- form_render(frm) {
- generateQueryString(frm.doc[child_table_field])
- },
- ...form_events,
- rule_field: async function (frm, cdt, cdn) {
- let row = frappe.get_doc(cdt, cdn);
- row.type = field_list?.find(f => f.value == row.rule_field)?.type;
- frm.fields_dict[child_table_field].grid.update_docfield_property("operator", "options", field_types[row.type]);
- let options = field_list.find(f => f.value == row.rule_field)?.options;
+ [`${child_table_field}_add`]: (frm, cdt, cdn) => {
+ let initial_code = 64;
+ let row = frappe.get_doc(cdt, cdn);
+ if (row.idx <= 26) {
+ row.code = String.fromCharCode(initial_code + row.idx);
+ } else {
+ row.code =
+ String.fromCharCode(initial_code + (row.idx - 26)) +
+ String.fromCharCode(initial_code + (row.idx - 26));
+ }
+ get_field_list("rules", frm);
+ },
+};
+frappe.ui.form.on("Rule Engine Child", {
+ refresh(frm) {
+ generateQueryString(frm.doc[child_table_field]);
+ },
+ form_render(frm) {
+ generateQueryString(frm.doc[child_table_field]);
+ },
+ ...form_events,
+ rule_field: async function (frm, cdt, cdn) {
+ let row = frappe.get_doc(cdt, cdn);
+ row.type = field_list?.find((f) => f.value == row.rule_field)?.type;
+ frm.fields_dict[child_table_field].grid.update_docfield_property(
+ "operator",
+ "options",
+ field_types[row.type]
+ );
+ let options = field_list.find((f) => f.value == row.rule_field)?.options;
- if (row.type == "Link") {
- let link_data = await get_Link_list(options)
- frm.fields_dict[child_table_field].grid.update_docfield_property("select", "options", link_data);
- }
- if (row.type == "Select") {
- let link_data = options?.split('\n').filter(f => f).map(e => { return { 'label': e, 'value': e } })
- frm.fields_dict[child_table_field].grid.update_docfield_property("select", "options", link_data);
- }
- frm.fields_dict[child_table_field].grid.refresh();
- var cur_grid = frm.get_field(`${child_table_field}`).grid;
- var cur_doc = locals[cdt][cdn];
- var cur_row = cur_grid.get_row(cur_doc.name);
- // cur_row.toggle_view();
- },
- data: (frm) => {
- frm.fields_dict[child_table_field].grid.refresh();
- generateQueryString(frm.doc[child_table_field])
- },
- date: function (frm, cdt, cdn) {
- let row = frappe.get_doc(cdt, cdn);
- row.data = row.date
- frm.fields_dict[child_table_field].grid.refresh();
- generateQueryString(frm.doc[child_table_field])
- },
- select: function (frm, cdt, cdn) {
- let row = frappe.get_doc(cdt, cdn);
- row.data = row.select
- frm.fields_dict[child_table_field].grid.refresh();
- generateQueryString(frm.doc[child_table_field])
- },
- value: function (frm, cdt, cdn) {
- let row = frappe.get_doc(cdt, cdn);
- row.data = row.value
- frm.fields_dict[child_table_field].grid.refresh();
- generateQueryString(frm.doc[child_table_field])
- }
-})
\ No newline at end of file
+ if (row.type == "Link") {
+ let link_data = await get_Link_list(options);
+ frm.fields_dict[child_table_field].grid.update_docfield_property(
+ "select",
+ "options",
+ link_data
+ );
+ }
+ if (row.type == "Select") {
+ let link_data = options
+ ?.split("\n")
+ .filter((f) => f)
+ .map((e) => {
+ return { label: e, value: e };
+ });
+ frm.fields_dict[child_table_field].grid.update_docfield_property(
+ "select",
+ "options",
+ link_data
+ );
+ }
+ frm.fields_dict[child_table_field].grid.refresh();
+ var cur_grid = frm.get_field(`${child_table_field}`).grid;
+ var cur_doc = locals[cdt][cdn];
+ var cur_row = cur_grid.get_row(cur_doc.name);
+ // cur_row.toggle_view();
+ },
+ data: (frm) => {
+ frm.fields_dict[child_table_field].grid.refresh();
+ generateQueryString(frm.doc[child_table_field]);
+ },
+ date: function (frm, cdt, cdn) {
+ let row = frappe.get_doc(cdt, cdn);
+ row.data = row.date;
+ frm.fields_dict[child_table_field].grid.refresh();
+ generateQueryString(frm.doc[child_table_field]);
+ },
+ select: function (frm, cdt, cdn) {
+ let row = frappe.get_doc(cdt, cdn);
+ row.data = row.select;
+ frm.fields_dict[child_table_field].grid.refresh();
+ generateQueryString(frm.doc[child_table_field]);
+ },
+ value: function (frm, cdt, cdn) {
+ let row = frappe.get_doc(cdt, cdn);
+ row.data = row.value;
+ frm.fields_dict[child_table_field].grid.refresh();
+ generateQueryString(frm.doc[child_table_field]);
+ },
+});
diff --git a/myojana/master/doctype/scheme/scheme.py b/myojana/master/doctype/scheme/scheme.py
index 9c2c9ac..2bdac9b 100644
--- a/myojana/master/doctype/scheme/scheme.py
+++ b/myojana/master/doctype/scheme/scheme.py
@@ -2,10 +2,13 @@
# For license information, please see license.txt
# import frappe
-from frappe.model.document import Document
import re
-from frappe import _
+
import frappe
+from frappe import _
+from frappe.model.document import Document
+
+
class Scheme(Document):
def validate(self):
# validation for rules is set or not
@@ -32,17 +35,17 @@ def validate(self):
# return str(err)
def generate_query_string(rows, __expression):
- expression = __expression.replace('and', '#').replace('or', '%')
- expression = expression.replace('AND', '#').replace('OR', '%')
+ expression = __expression.replace("and", "#").replace("or", "%")
+ expression = expression.replace("AND", "#").replace("OR", "%")
for row in rows:
- if row['operator'] in ['IN', 'NOT IN']:
- val = ','.join([f"'{e.strip()}'" for e in row['data'].split(',')]) if row['data'] else ''
- expression = expression.replace(row['code'], f"{row['rule_field']} {row['operator']} ({val})")
+ if row["operator"] in ["IN", "NOT IN"]:
+ val = ",".join([f"'{e.strip()}'" for e in row["data"].split(",")]) if row["data"] else ""
+ expression = expression.replace(row["code"], f"{row['rule_field']} {row['operator']} ({val})")
else:
- expression = expression.replace(row['code'], f"{row['rule_field']} {row['operator']} '{row['data']}'")
+ expression = expression.replace(
+ row["code"], f"{row['rule_field']} {row['operator']} '{row['data']}'"
+ )
- expression = expression.replace('#', 'and').replace('%', 'or')
+ expression = expression.replace("#", "and").replace("%", "or")
return f"select * from `tabBeneficiary Profiling` where {expression}"
-
-
diff --git a/myojana/master/doctype/scheme/scheme_list.js b/myojana/master/doctype/scheme/scheme_list.js
index c4032fe..5e503f6 100644
--- a/myojana/master/doctype/scheme/scheme_list.js
+++ b/myojana/master/doctype/scheme/scheme_list.js
@@ -1,50 +1,49 @@
-
async function update_enable_disable(listview, value) {
- let names = [];
- await $.each(listview.get_checked_items(), function (key, value) {
- names.push(value.name);
- });
- if (names.length === 0) {
- frappe.throw(__("No rows selected."));
- }
- let res = await toggleEnableDisable(names, value)
- listview.clear_checked_items()
- listview.refresh()
- if (value === 1) {
- frappe.msgprint(`${res.message} Schemes enabled successfully
`)
- } else {
- frappe.msgprint(`${res.message} Schemes disabled successfully
`)
- }
+ let names = [];
+ await $.each(listview.get_checked_items(), function (key, value) {
+ names.push(value.name);
+ });
+ if (names.length === 0) {
+ frappe.throw(__("No rows selected."));
+ }
+ let res = await toggleEnableDisable(names, value);
+ listview.clear_checked_items();
+ listview.refresh();
+ if (value === 1) {
+ frappe.msgprint(`${res.message} Schemes enabled successfully
`);
+ } else {
+ frappe.msgprint(`${res.message} Schemes disabled successfully
`);
+ }
}
const toggleEnableDisable = async (list, value) => {
- return await frappe.call({
- method: "myojana.apis.update_scheme.toggle_enable_disable",
- freeze: true,
- args: {
- "list": list,
- "value": value
- },
- freeze_message: __("Updating schemes..."),
- callback: function (response) {
- if (response.message) {
- return response.message
- } else {
- console.log("Api Failed....")
- }
- }
- });
-}
-frappe.listview_settings['Scheme'] = {
- refresh: function (listview) {
- // console.log(listview)
- listview.page.add_actions_menu_item("Enable Selected", async function () {
- await update_enable_disable(listview, 1)
- });
- listview.page.add_actions_menu_item("Disable Selected", async function () {
- await update_enable_disable(listview, 0)
- });
- },
- onload: function (listview) {
- $('.layout-side-section').hide();
- }
-};
\ No newline at end of file
+ return await frappe.call({
+ method: "myojana.apis.update_scheme.toggle_enable_disable",
+ freeze: true,
+ args: {
+ list: list,
+ value: value,
+ },
+ freeze_message: __("Updating schemes..."),
+ callback: function (response) {
+ if (response.message) {
+ return response.message;
+ } else {
+ console.log("Api Failed....");
+ }
+ },
+ });
+};
+frappe.listview_settings["Scheme"] = {
+ refresh: function (listview) {
+ // console.log(listview)
+ listview.page.add_actions_menu_item("Enable Selected", async function () {
+ await update_enable_disable(listview, 1);
+ });
+ listview.page.add_actions_menu_item("Disable Selected", async function () {
+ await update_enable_disable(listview, 0);
+ });
+ },
+ onload: function (listview) {
+ $(".layout-side-section").hide();
+ },
+};
diff --git a/myojana/master/doctype/social_vulnerable_category/social_vulnerable_category_list.js b/myojana/master/doctype/social_vulnerable_category/social_vulnerable_category_list.js
index c89c9de..abf5e9a 100644
--- a/myojana/master/doctype/social_vulnerable_category/social_vulnerable_category_list.js
+++ b/myojana/master/doctype/social_vulnerable_category/social_vulnerable_category_list.js
@@ -1,5 +1,5 @@
-frappe.listview_settings['Social vulnerable category'] = {
- onload: function (listview) {
- $('.layout-side-section').hide();
- }
-};
\ No newline at end of file
+frappe.listview_settings["Social vulnerable category"] = {
+ onload: function (listview) {
+ $(".layout-side-section").hide();
+ },
+};
diff --git a/myojana/master/doctype/source_of_information/source_of_information_list.js b/myojana/master/doctype/source_of_information/source_of_information_list.js
index dd4eb93..d576086 100644
--- a/myojana/master/doctype/source_of_information/source_of_information_list.js
+++ b/myojana/master/doctype/source_of_information/source_of_information_list.js
@@ -1,5 +1,5 @@
-frappe.listview_settings['Source Of Information'] = {
- onload: function (listview) {
- $('.layout-side-section').hide();
- }
-};
\ No newline at end of file
+frappe.listview_settings["Source Of Information"] = {
+ onload: function (listview) {
+ $(".layout-side-section").hide();
+ },
+};
diff --git a/myojana/master/doctype/state/state_list.js b/myojana/master/doctype/state/state_list.js
index 2c87ed2..5f8534c 100644
--- a/myojana/master/doctype/state/state_list.js
+++ b/myojana/master/doctype/state/state_list.js
@@ -1,5 +1,5 @@
-frappe.listview_settings['State'] = {
- onload: function (listview) {
- $('.layout-side-section').hide();
- }
-};
\ No newline at end of file
+frappe.listview_settings["State"] = {
+ onload: function (listview) {
+ $(".layout-side-section").hide();
+ },
+};
diff --git a/myojana/master/doctype/support_category/support_category_list.js b/myojana/master/doctype/support_category/support_category_list.js
index 3a8c71f..e1d2c79 100644
--- a/myojana/master/doctype/support_category/support_category_list.js
+++ b/myojana/master/doctype/support_category/support_category_list.js
@@ -1,5 +1,5 @@
-frappe.listview_settings['Support category'] = {
- onload: function (listview) {
- $('.layout-side-section').hide();
- }
-};
\ No newline at end of file
+frappe.listview_settings["Support category"] = {
+ onload: function (listview) {
+ $(".layout-side-section").hide();
+ },
+};
diff --git a/myojana/master/doctype/village/village.js b/myojana/master/doctype/village/village.js
index c21c2c5..ae7d0aa 100644
--- a/myojana/master/doctype/village/village.js
+++ b/myojana/master/doctype/village/village.js
@@ -1,38 +1,42 @@
// Copyright (c) 2023, suvaidyam and contributors
// For license information, please see license.txt
-const apply_filter = (frm , field_name , filter_on , filter_value)=>{
- frm.fields_dict[field_name].get_query = function (doc) {
- return {
- filters: {
- [filter_on]: filter_value,
- },
- page_length: 1000
- };
- }
-}
+const apply_filter = (frm, field_name, filter_on, filter_value) => {
+ frm.fields_dict[field_name].get_query = function (doc) {
+ return {
+ filters: {
+ [filter_on]: filter_value,
+ },
+ page_length: 1000,
+ };
+ };
+};
function defult_filter(field_name, filter_on, frm) {
- frm.fields_dict[field_name].get_query = function (doc) {
- return {
- filters: {
- [filter_on]: frm.doc.filter_on || `please select ${filter_on}`,
- },
- };
- }
- };
- function hide_advance_search(frm, list) {
- for (item of list) {
- frm.set_df_property(item, 'only_select', true);
- }
- };
+ frm.fields_dict[field_name].get_query = function (doc) {
+ return {
+ filters: {
+ [filter_on]: frm.doc.filter_on || `please select ${filter_on}`,
+ },
+ };
+ };
+}
+function hide_advance_search(frm, list) {
+ for (const item of list) {
+ frm.set_df_property(item, "only_select", true);
+ }
+}
frappe.ui.form.on("Village", {
refresh(frm) {
- frm.doc.state ? apply_filter(frm ,"district", "state", frm.doc.state) : defult_filter('district', "state", frm);
- frm.doc.district ? apply_filter(frm ,"block", "district", frm.doc.district) : defult_filter('block', "district", frm);
+ frm.doc.state
+ ? apply_filter(frm, "district", "state", frm.doc.state)
+ : defult_filter("district", "state", frm);
+ frm.doc.district
+ ? apply_filter(frm, "block", "district", frm.doc.district)
+ : defult_filter("block", "district", frm);
+ },
+ state: function (frm) {
+ apply_filter(frm, "district", "state", frm.doc.state);
+ },
+ district: function (frm) {
+ apply_filter(frm, "block", "district", frm.doc.district);
},
- state:function(frm){
- apply_filter(frm , 'district', "state", frm.doc.state)
- },
- district:function(frm){
- apply_filter(frm , 'block', "district", frm.doc.district)
- }
});
diff --git a/myojana/master/doctype/village/village_list.js b/myojana/master/doctype/village/village_list.js
index 41a6ec0..a5c0df1 100644
--- a/myojana/master/doctype/village/village_list.js
+++ b/myojana/master/doctype/village/village_list.js
@@ -1,5 +1,5 @@
-frappe.listview_settings['Village'] = {
- onload: function (listview) {
- $('.layout-side-section').hide();
- }
-};
\ No newline at end of file
+frappe.listview_settings["Village"] = {
+ onload: function (listview) {
+ $(".layout-side-section").hide();
+ },
+};
diff --git a/myojana/master/report/camps_wise_beneficiaries/camps_wise_beneficiaries.js b/myojana/master/report/camps_wise_beneficiaries/camps_wise_beneficiaries.js
index d1458ee..9960051 100644
--- a/myojana/master/report/camps_wise_beneficiaries/camps_wise_beneficiaries.js
+++ b/myojana/master/report/camps_wise_beneficiaries/camps_wise_beneficiaries.js
@@ -2,7 +2,5 @@
// For license information, please see license.txt
frappe.query_reports["Camps-wise beneficiaries"] = {
- "filters": [
-
- ]
+ filters: [],
};
diff --git a/myojana/middlewares/centre.py b/myojana/middlewares/centre.py
index 5764b2c..d84b80a 100644
--- a/myojana/middlewares/centre.py
+++ b/myojana/middlewares/centre.py
@@ -1,19 +1,20 @@
import frappe
+
from myojana.utils.cache import Cache
-def list_query(user):
- if not user:
- user = frappe.session.user
- # value = Cache.get_csc()
- if "Admin" in frappe.get_roles(user) and ("Administrator" not in frappe.get_roles(user)):
- pass
- # return """(`tabCentre`.state = '{0}')""".format(value)
- # elif "CSC Member" in frappe.get_roles(user) and ("Administrator" not in frappe.get_roles(user)):
- # return """(`tabCentre`.Centre = '{0}')""".format(value)
- # elif "Sub-Centre" in frappe.get_roles(user) and ("Administrator" not in frappe.get_roles(user)):
- # return """(`tabCentre`.Centre = '{0}')""".format(value)
- # elif "MIS executive" in frappe.get_roles(user) and ("Administrator" not in frappe.get_roles(user)):
- # return """(`tabCentre`.Centre = '{0}')""".format(value)
- else:
- return ""
+def list_query(user):
+ if not user:
+ user = frappe.session.user
+ # value = Cache.get_csc()
+ if "Admin" in frappe.get_roles(user) and ("Administrator" not in frappe.get_roles(user)):
+ pass
+ # return """(`tabCentre`.state = '{0}')""".format(value)
+ # elif "CSC Member" in frappe.get_roles(user) and ("Administrator" not in frappe.get_roles(user)):
+ # return """(`tabCentre`.Centre = '{0}')""".format(value)
+ # elif "Sub-Centre" in frappe.get_roles(user) and ("Administrator" not in frappe.get_roles(user)):
+ # return """(`tabCentre`.Centre = '{0}')""".format(value)
+ # elif "MIS executive" in frappe.get_roles(user) and ("Administrator" not in frappe.get_roles(user)):
+ # return """(`tabCentre`.Centre = '{0}')""".format(value)
+ else:
+ return ""
diff --git a/myojana/middlewares/myojana_users.py b/myojana/middlewares/myojana_users.py
index 2f4b635..2df59a4 100644
--- a/myojana/middlewares/myojana_users.py
+++ b/myojana/middlewares/myojana_users.py
@@ -1,20 +1,21 @@
import frappe
+
+
def list_query(user):
- if not user:
- user = frappe.session.user
-
- # if"Administrator" not in frappe.get_roles(user):
+ if not user:
+ user = frappe.session.user
+
+ # if"Administrator" not in frappe.get_roles(user):
-
- if"Administrator" in frappe.get_roles(user):
- return ''
- # elif "Admin" in frappe.get_roles(user) and "Administrator" not in frappe.get_roles(user):
- # include_roles = ['CSC Member', 'MIS executive', 'Sub-Centre']
- # profile_condition = f"""(`tabMyojana User`.name = '{user}' OR `tabMyojana User`.role_profile IN ({', '.join(f"'{r}'" for r in include_roles)}) And `tabMyojana User`.state = '{state}')"""
- # return profile_condition
- # elif("MIS executive" in frappe.get_roles(user) and "Administrator" not in frappe.get_roles(user)):
- # include_roles = ['CSC Member', 'Sub-Centre']
- # profile_condition = f"""(`tabMyojana User`.name = '{user}' OR `tabMyojana User`.role_profile IN ({', '.join(f"'{r}'" for r in include_roles)}) And `tabMyojana User`.state = '{state}')"""
- # return profile_condition
- else:
- return ""
+ if "Administrator" in frappe.get_roles(user):
+ return ""
+ # elif "Admin" in frappe.get_roles(user) and "Administrator" not in frappe.get_roles(user):
+ # include_roles = ['CSC Member', 'MIS executive', 'Sub-Centre']
+ # profile_condition = f"""(`tabMyojana User`.name = '{user}' OR `tabMyojana User`.role_profile IN ({', '.join(f"'{r}'" for r in include_roles)}) And `tabMyojana User`.state = '{state}')"""
+ # return profile_condition
+ # elif("MIS executive" in frappe.get_roles(user) and "Administrator" not in frappe.get_roles(user)):
+ # include_roles = ['CSC Member', 'Sub-Centre']
+ # profile_condition = f"""(`tabMyojana User`.name = '{user}' OR `tabMyojana User`.role_profile IN ({', '.join(f"'{r}'" for r in include_roles)}) And `tabMyojana User`.state = '{state}')"""
+ # return profile_condition
+ else:
+ return ""
diff --git a/myojana/middlewares/role_profile.py b/myojana/middlewares/role_profile.py
index d048f56..fc8bbfc 100644
--- a/myojana/middlewares/role_profile.py
+++ b/myojana/middlewares/role_profile.py
@@ -1,11 +1,15 @@
import frappe
+
+
def list_query(user):
- if not user:
- user = frappe.session.user
-
- if "Admin" in frappe.get_roles(user) and ("Administrator" not in frappe.get_roles(user)):
- return """(`tabRole Profile`.role_profile != '{0}')""".format('Admin')
- elif "MIS executive" in frappe.get_roles(user) and ("Administrator" not in frappe.get_roles(user)):
- excluded_roles = ['Admin', 'MIS executive']
- return """(`tabRole Profile`.role_profile NOT IN ({0}))""".format(', '.join(f"'{r}'" for r in excluded_roles))
- return ""
+ if not user:
+ user = frappe.session.user
+
+ if "Admin" in frappe.get_roles(user) and ("Administrator" not in frappe.get_roles(user)):
+ return """(`tabRole Profile`.role_profile != '{}')""".format("Admin")
+ elif "MIS executive" in frappe.get_roles(user) and ("Administrator" not in frappe.get_roles(user)):
+ excluded_roles = ["Admin", "MIS executive"]
+ return """(`tabRole Profile`.role_profile NOT IN ({}))""".format(
+ ", ".join(f"'{r}'" for r in excluded_roles)
+ )
+ return ""
diff --git a/myojana/middlewares/sub_centre.py b/myojana/middlewares/sub_centre.py
index 48eb1c5..d360722 100644
--- a/myojana/middlewares/sub_centre.py
+++ b/myojana/middlewares/sub_centre.py
@@ -1,12 +1,14 @@
import frappe
+
+
def list_query(user):
- if not user:
- user = frappe.session.user
-
- if "Admin" in frappe.get_roles(user) and ("Administrator" not in frappe.get_roles(user)):
- # return """(`tabSub Centre`.centre != '{0}')""".format('Admin')
- return None
- elif("Administrator" not in frappe.get_roles(user)):
- pass
- # return "(`tabSub Centre`.centre = '{0}')".format(centres)
- return None
+ if not user:
+ user = frappe.session.user
+
+ if "Admin" in frappe.get_roles(user) and ("Administrator" not in frappe.get_roles(user)):
+ # return """(`tabSub Centre`.centre != '{0}')""".format('Admin')
+ return None
+ elif "Administrator" not in frappe.get_roles(user):
+ pass
+ # return "(`tabSub Centre`.centre = '{0}')".format(centres)
+ return None
diff --git a/myojana/middlewares/test.py b/myojana/middlewares/test.py
index 7d5d0e0..d65f10f 100644
--- a/myojana/middlewares/test.py
+++ b/myojana/middlewares/test.py
@@ -2,5 +2,5 @@
def test(doc, method):
- frappe.msgprint("Hello from test middleware")
- frappe.msgprint(f"Method: {method}")
+ frappe.msgprint("Hello from test middleware")
+ frappe.msgprint(f"Method: {method}")
diff --git a/myojana/middlewares/user.py b/myojana/middlewares/user.py
index 5c49a8b..b293ecc 100644
--- a/myojana/middlewares/user.py
+++ b/myojana/middlewares/user.py
@@ -1,8 +1,9 @@
import frappe
-def list_query(user):
- if not user:
- user = frappe.session.user
- if "Administrator" and "Admin" not in frappe.get_roles(user):
- profile_condition = f"""(`tabUser`.name = '{user}')"""
- return profile_condition
+
+def list_query(user):
+ if not user:
+ user = frappe.session.user
+ if "Administrator" and "Admin" not in frappe.get_roles(user):
+ profile_condition = f"""(`tabUser`.name = '{user}')"""
+ return profile_condition
diff --git a/myojana/myojana/doctype/app_template/app_template.js b/myojana/myojana/doctype/app_template/app_template.js
index 4980652..2c88c92 100644
--- a/myojana/myojana/doctype/app_template/app_template.js
+++ b/myojana/myojana/doctype/app_template/app_template.js
@@ -1,46 +1,48 @@
// Copyright (c) 2024, dhwaniris and contributors
// For license information, please see license.txt
-const wait = (seconds)=>{
- return new Promise((resolve,reject)=>{
- setTimeout(()=>{
- resolve();
- },seconds*1000)
- })
-}
+const wait = (seconds) => {
+ return new Promise((resolve, reject) => {
+ setTimeout(() => {
+ resolve();
+ }, seconds * 1000);
+ });
+};
-const render_image = (frm)=>{
- frappe.call({
- method: "myojana.apis.html_to_image.preview_image",
- headers:{
-
- },
- args: {
- doctype:frm.doc.ref_doctype,
- doc:frm.doc.ref_doc,
- template:frm.doc.html,
- options:frm.doc.options
- }
- }).then(async(res)=>{
- document.getElementById("preview_html").innerHTML = `
`;
-
- }).catch(err=>{
- console.log("Error",err);
- })
-}
+const render_image = (frm) => {
+ frappe
+ .call({
+ method: "myojana.apis.html_to_image.preview_image",
+ headers: {},
+ args: {
+ doctype: frm.doc.ref_doctype,
+ doc: frm.doc.ref_doc,
+ template: frm.doc.html,
+ options: frm.doc.options,
+ },
+ })
+ .then(async (res) => {
+ document.getElementById(
+ "preview_html"
+ ).innerHTML = `
`;
+ })
+ .catch((err) => {
+ console.log("Error", err);
+ });
+};
frappe.ui.form.on("App Template", {
refresh(frm) {
- if(frm.doc.ref_doctype&&frm.doc.ref_doc){
- render_image(frm);
- }
+ if (frm.doc.ref_doctype && frm.doc.ref_doc) {
+ render_image(frm);
+ }
+ },
+ html: (frm) => {
+ // if(frm.doc.ref_doctype&&frm.doc.ref_doc){
+ // render_image(frm);
+ // }
+ },
+ preview: (frm) => {
+ if (frm.doc.ref_doctype && frm.doc.ref_doc) {
+ render_image(frm);
+ }
},
- html:(frm)=>{
- // if(frm.doc.ref_doctype&&frm.doc.ref_doc){
- // render_image(frm);
- // }
- },
- preview:(frm)=>{
- if(frm.doc.ref_doctype&&frm.doc.ref_doc){
- render_image(frm);
- }
- },
});
diff --git a/myojana/myojana/doctype/beneficiary_profiling/beneficiary_profiling.js b/myojana/myojana/doctype/beneficiary_profiling/beneficiary_profiling.js
index 8bc09b9..9a5a2c8 100644
--- a/myojana/myojana/doctype/beneficiary_profiling/beneficiary_profiling.js
+++ b/myojana/myojana/doctype/beneficiary_profiling/beneficiary_profiling.js
@@ -6,424 +6,562 @@ const indianPhoneNumberRegex = /^(?:(?:(?:\+|0{0,2})91(\s*[\-]\s*)?|[0]?)?[6789]
let state_option = [];
let districts_option = [];
function callAPI(options) {
- return new Promise((resolve, reject) => {
- frappe.call({
- ...options,
- callback: async function (response) {
- resolve(response?.message || response?.value)
- }
- });
- })
+ return new Promise((resolve, reject) => {
+ frappe.call({
+ ...options,
+ callback: async function (response) {
+ resolve(response?.message || response?.value);
+ },
+ });
+ });
}
async function autoSetOption(frm) {
- let centre_meta = frm?.meta?.fields?.filter((e)=> e.fieldname == "centre")[0]
- if(centre_meta.hidden != 1){
- let centres = await callAPI({
- method: 'frappe.desk.search.search_link',
- freeze: false,
- args: {
- txt: '',
- doctype: "Centre",
- reference_doctype: "Beneficiary Profiling"
- },
- })
- if (centres?.length === 1) {
- frm.set_value("centre", centres[0].value)
- }
- }else{
- console.log("centre is hidden fields",)
- }
- state_option = await callAPI({
- method: 'frappe.desk.search.search_link',
- freeze: false,
- args: {
- txt: '',
- doctype: "State",
- reference_doctype: "Beneficiary Profiling"
- },
- })
- districts_option = await callAPI({
- method: 'frappe.desk.search.search_link',
- freeze: false,
- args: {
- txt: '',
- doctype: "District",
- reference_doctype: "Beneficiary Profiling"
- },
- // freeze_message: __("Getting Districts"),
- })
-
- if (state_option?.length === 1) {
- frm.set_value("state", state_option[0].value)
- }
- if (districts_option?.length === 1) {
- frm.set_value("district", districts_option[0].value)
- }
+ let centre_meta = frm?.meta?.fields?.filter((e) => e.fieldname == "centre")[0];
+ if (centre_meta.hidden != 1) {
+ let centres = await callAPI({
+ method: "frappe.desk.search.search_link",
+ freeze: false,
+ args: {
+ txt: "",
+ doctype: "Centre",
+ reference_doctype: "Beneficiary Profiling",
+ },
+ });
+ if (centres?.length === 1) {
+ frm.set_value("centre", centres[0].value);
+ }
+ } else {
+ console.log("centre is hidden fields");
+ }
+ state_option = await callAPI({
+ method: "frappe.desk.search.search_link",
+ freeze: false,
+ args: {
+ txt: "",
+ doctype: "State",
+ reference_doctype: "Beneficiary Profiling",
+ },
+ });
+ districts_option = await callAPI({
+ method: "frappe.desk.search.search_link",
+ freeze: false,
+ args: {
+ txt: "",
+ doctype: "District",
+ reference_doctype: "Beneficiary Profiling",
+ },
+ // freeze_message: __("Getting Districts"),
+ });
+
+ if (state_option?.length === 1) {
+ frm.set_value("state", state_option[0].value);
+ }
+ if (districts_option?.length === 1) {
+ frm.set_value("district", districts_option[0].value);
+ }
}
async function get_myojana_setting() {
- let get_myojana_setting = await callAPI({
- method: 'myojana.apis.myojana_setting.get_myojana_setting',
- freeze: true,
- args: {
- fields: ['is_primary_member_link_through_phone_number']
- },
- // freeze_message: __("Getting Centres"),
- })
- return get_myojana_setting.is_primary_member_link_through_phone_number
+ let get_myojana_setting = await callAPI({
+ method: "myojana.apis.myojana_setting.get_myojana_setting",
+ freeze: true,
+ args: {
+ fields: ["is_primary_member_link_through_phone_number"],
+ },
+ // freeze_message: __("Getting Centres"),
+ });
+ return get_myojana_setting.is_primary_member_link_through_phone_number;
}
frappe.ui.form.on("Beneficiary Profiling", {
- after_save: async function (frm) {
- if (!frm.is_new()) {
- frm.debounced_reload_doc()
- }
- },
- before_save: async function (frm) {
- if ((frm.doc.completed_age || frm.doc.completed_age_month) && !frm.doc?.date_of_birth) {
- await frm.set_value("date_of_birth", generateDOBFromAge(frm.doc?.completed_age, frm.doc?.completed_age_month, frm.doc?.date_of_birth))
- }
- // fill into hidden fields
- if (frm?.doc?.scheme_table && frm.doc?.scheme_table?.length) {
- for (_doc of frm?.doc?.scheme_table) {
- _doc.scheme = _doc.name_of_the_scheme;
- _doc.milestone = _doc.milestone_category;
- }
- }
- // check alternate mobile number digits
- if (is_primary_member_link_through_phone_number && (frm.doc.alternate_contact_number || frm.doc.contact_number)) {
- if (!indianPhoneNumberRegex.test(frm.doc.contact_number)) {
- frappe.throw(`Phone Number ${frm.doc.contact_number} set in field contact_number is not valid.`)
- }
- }
- if (!indianPhoneNumberRegex.test(frm.doc.alternate_contact_number) && frm.doc.alternate_contact_number?.length > 1) {
- frappe.throw(`Phone Number ${frm.doc.alternate_contact_number} set in field alternate_contact_number is not valid.`)
- }
- },
- async refresh(frm) {
- is_primary_member_link_through_phone_number = await get_myojana_setting()
- if (frm.is_new()) {
- console.log("new data")
- await autoSetOption(frm); // set options of centre and sub centre
- await frm.set_value('added_by', frappe.session.user);
- await frm.set_value('date_of_visit', frappe.datetime.get_today()); // SET TODAY DATE IN DATE OF VISIT
-
- } else {
- frm.add_custom_button(__('Add family members'), function () {
- frappe.route_options = {
- has_anyone_from_your_family_visisted_before: "Yes",
- select_primary_member: frm.doc.select_primary_member || frm.doc.contact_number,
- };
- frappe.new_doc('Beneficiary Profiling');
- }, __());
-
- let id_card_template = await frappe.db.get_single_value('mYojana Settings', 'id_card_template')
- if (id_card_template) {
- frm.add_custom_button(__(''), async function () {
- let base64Image = await callAPI({
- method: 'myojana.apis.html_to_image.preview_doc_template',
- freeze: true,
- args: {
- doc:frm.doc.name,
- doctype:frm.doctype,
- },
- // freeze_message: __("getting template..."),
- });
- console.log('base64Image', base64Image);
-
- const imgSrc = `data:image/png;base64,${base64Image}`;
-
- // console.log('print_template', print_template);
- let d = new frappe.ui.Dialog({
- title: __("Confirmation"),
- fields: [
- {
- fieldtype: 'HTML',
- options: `
`
- }
- ],
- primary_action_label: 'Send',
- primary_action: async function () {
- console.log('Send button clicked primary action');
- let id_doc = await callAPI({
- method: 'myojana.apis.whatsapp.send_id',
- freeze: true,
- args: {
- doc:frm.doc.name
- },
- freeze_message: __("Sending Message ..."),
- });
- console.log('id_doc', id_doc);
- d.hide();
- }
- });
-
- d.set_secondary_action_label('Cancel');
- d.set_secondary_action(() => d.hide());
- d.show();
- }, __()).addClass('whatsapp-svg-button');
+ after_save: async function (frm) {
+ if (!frm.is_new()) {
+ frm.debounced_reload_doc();
+ }
+ },
+ before_save: async function (frm) {
+ if ((frm.doc.completed_age || frm.doc.completed_age_month) && !frm.doc?.date_of_birth) {
+ await frm.set_value(
+ "date_of_birth",
+ generateDOBFromAge(
+ frm.doc?.completed_age,
+ frm.doc?.completed_age_month,
+ frm.doc?.date_of_birth
+ )
+ );
+ }
+ // fill into hidden fields
+ if (frm?.doc?.scheme_table && frm.doc?.scheme_table?.length) {
+ for (_doc of frm?.doc?.scheme_table) {
+ _doc.scheme = _doc.name_of_the_scheme;
+ _doc.milestone = _doc.milestone_category;
+ }
+ }
+ // check alternate mobile number digits
+ if (
+ is_primary_member_link_through_phone_number &&
+ (frm.doc.alternate_contact_number || frm.doc.contact_number)
+ ) {
+ if (!indianPhoneNumberRegex.test(frm.doc.contact_number)) {
+ frappe.throw(
+ `Phone Number ${frm.doc.contact_number} set in field contact_number is not valid.`
+ );
+ }
+ }
+ if (
+ !indianPhoneNumberRegex.test(frm.doc.alternate_contact_number) &&
+ frm.doc.alternate_contact_number?.length > 1
+ ) {
+ frappe.throw(
+ `Phone Number ${frm.doc.alternate_contact_number} set in field alternate_contact_number is not valid.`
+ );
+ }
+ },
+ async refresh(frm) {
+ is_primary_member_link_through_phone_number = await get_myojana_setting();
+ if (frm.is_new()) {
+ console.log("new data");
+ await autoSetOption(frm); // set options of centre and sub centre
+ await frm.set_value("added_by", frappe.session.user);
+ await frm.set_value("date_of_visit", frappe.datetime.get_today()); // SET TODAY DATE IN DATE OF VISIT
+ } else {
+ frm.add_custom_button(
+ __("Add family members"),
+ function () {
+ frappe.route_options = {
+ has_anyone_from_your_family_visisted_before: "Yes",
+ select_primary_member:
+ frm.doc.select_primary_member || frm.doc.contact_number,
+ };
+ frappe.new_doc("Beneficiary Profiling");
+ },
+ __()
+ );
- }
-
- await apply_filter_on_id_document()
+ let id_card_template = await frappe.db.get_single_value(
+ "mYojana Settings",
+ "id_card_template"
+ );
+ if (id_card_template) {
+ frm.add_custom_button(
+ __(
+ ''
+ ),
+ async function () {
+ let base64Image = await callAPI({
+ method: "myojana.apis.html_to_image.preview_doc_template",
+ freeze: true,
+ args: {
+ doc: frm.doc.name,
+ doctype: frm.doctype,
+ },
+ // freeze_message: __("getting template..."),
+ });
+ console.log("base64Image", base64Image);
- }
- frm.fields_dict.date_of_visit.$input?.datepicker({ maxDate: new Date(frappe.datetime.get_today()) }); // restrict future date from date pickers
- extend_options_length(frm, ["centre", "sub_centre", "religion", "caste_category", "marital_status", "current_house_type", "source_of_information", "current_house_type", "state", "district", "occupational_category", "education", "education", "ward", "name_of_the_settlement", "proof_of_disability", "block", "state_of_origin", "current_occupation", "district_of_origin", "social_vulnerable_category", "name_of_the_camp"]);
- hide_advance_search(frm, ["state", "district", "ward", "state_of_origin", "religion", "caste_category", "marital_status", "district_of_origin", "block", "gender", "current_occupation", "social_vulnerable_category", "pwd_category", "family", "sub_centre", "centre", "source_of_information", "occupational_category", "current_house_type", "name_of_the_settlement", "name_of_the_camp", "proof_of_disability", "education"]);
+ const imgSrc = `data:image/png;base64,${base64Image}`;
- // APPLY FILTER IN CASE OF EDIT OF DATA
- apply_filter('select_primary_member', 'name_of_head_of_family', frm, ['!=', frm.doc.name])
- apply_filter("sub_centre", "centre", frm, frm.doc.centre);
- apply_filter("district", "state", frm, frm.doc.state)
- apply_filter("ward", "district", frm, frm.doc.district);
- apply_filter("name_of_the_settlement", "block", frm, frm.doc.ward);
- apply_filter("district_of_origin", "state", frm, frm.doc.state_of_origin);
- apply_filter("block", "district", frm, frm.doc.district_of_origin);
- // defult filter on current occupations
- if (frm.doc?.current_occupation) {
- if (frm.doc.current_occupation == 'Others') {
- apply_filter('occupational_category', 'name', frm, '', true)
- } else {
- let doc = await get_occupation_category(frm)
- apply_filter('occupational_category', 'name', frm, ['=', doc.occupational_category])
- frm.set_value('occupational_category', doc.occupational_category)
- }
- }
+ // console.log('print_template', print_template);
+ let d = new frappe.ui.Dialog({
+ title: __("Confirmation"),
+ fields: [
+ {
+ fieldtype: "HTML",
+ options: `
`,
+ },
+ ],
+ primary_action_label: "Send",
+ primary_action: async function () {
+ console.log("Send button clicked primary action");
+ let id_doc = await callAPI({
+ method: "myojana.apis.whatsapp.send_id",
+ freeze: true,
+ args: {
+ doc: frm.doc.name,
+ },
+ freeze_message: __("Sending Message ..."),
+ });
+ console.log("id_doc", id_doc);
+ d.hide();
+ },
+ });
- if (!frappe.user_roles.includes("Administrator")) {
- if (!frm.doc.__islocal) {
- frm.set_df_property('centre', 'read_only', 1);
- frm.set_df_property('sub_centre', 'read_only', 1);
- }
- }
+ d.set_secondary_action_label("Cancel");
+ d.set_secondary_action(() => d.hide());
+ d.show();
+ },
+ __()
+ ).addClass("whatsapp-svg-button");
+ }
- if (frappe.user_roles.includes("Sub-Centre") || frappe.user_roles.includes("CSC Member") || frappe.user_roles.includes("MIS executive")) {
- if (!frappe.user_roles.includes("Administrator")) {
- frm.set_df_property('scheme_table', 'cannot_delete_rows', true); // Hide delete button
- frm.set_df_property('scheme_table', 'cannot_delete_all_rows', true);
- frm.set_df_property('follow_up_table', 'cannot_delete_rows', true); // Hide delete button
- frm.set_df_property('follow_up_table', 'cannot_delete_all_rows', true);
- }
- }
+ await apply_filter_on_id_document();
+ }
+ frm.fields_dict.date_of_visit.$input?.datepicker({
+ maxDate: new Date(frappe.datetime.get_today()),
+ }); // restrict future date from date pickers
+ extend_options_length(frm, [
+ "centre",
+ "sub_centre",
+ "religion",
+ "caste_category",
+ "marital_status",
+ "current_house_type",
+ "source_of_information",
+ "current_house_type",
+ "state",
+ "district",
+ "occupational_category",
+ "education",
+ "education",
+ "ward",
+ "name_of_the_settlement",
+ "proof_of_disability",
+ "block",
+ "state_of_origin",
+ "current_occupation",
+ "district_of_origin",
+ "social_vulnerable_category",
+ "name_of_the_camp",
+ ]);
+ hide_advance_search(frm, [
+ "state",
+ "district",
+ "ward",
+ "state_of_origin",
+ "religion",
+ "caste_category",
+ "marital_status",
+ "district_of_origin",
+ "block",
+ "gender",
+ "current_occupation",
+ "social_vulnerable_category",
+ "pwd_category",
+ "family",
+ "sub_centre",
+ "centre",
+ "source_of_information",
+ "occupational_category",
+ "current_house_type",
+ "name_of_the_settlement",
+ "name_of_the_camp",
+ "proof_of_disability",
+ "education",
+ ]);
+ // APPLY FILTER IN CASE OF EDIT OF DATA
+ apply_filter("select_primary_member", "name_of_head_of_family", frm, ["!=", frm.doc.name]);
+ apply_filter("sub_centre", "centre", frm, frm.doc.centre);
+ apply_filter("district", "state", frm, frm.doc.state);
+ apply_filter("ward", "district", frm, frm.doc.district);
+ apply_filter("name_of_the_settlement", "block", frm, frm.doc.ward);
+ apply_filter("district_of_origin", "state", frm, frm.doc.state_of_origin);
+ apply_filter("block", "district", frm, frm.doc.district_of_origin);
+ // defult filter on current occupations
+ if (frm.doc?.current_occupation) {
+ if (frm.doc.current_occupation == "Others") {
+ apply_filter("occupational_category", "name", frm, "", true);
+ } else {
+ let doc = await get_occupation_category(frm);
+ apply_filter("occupational_category", "name", frm, [
+ "=",
+ doc.occupational_category,
+ ]);
+ frm.set_value("occupational_category", doc.occupational_category);
+ }
+ }
- await render_scheme_datatable(frm) // render scheme_data_tables
+ if (!frappe.user_roles.includes("Administrator")) {
+ if (!frm.doc.__islocal) {
+ frm.set_df_property("centre", "read_only", 1);
+ frm.set_df_property("sub_centre", "read_only", 1);
+ }
+ }
- },
- ////////////////////DATE VALIDATION/////////////////////////////////////////
- date_of_visit: async function (frm) {
- if (new Date(frm.doc.date_of_visit) > new Date(frappe.datetime.get_today())) {
- await frm.set_value("date_of_visit", '');
- await frappe.throw(__("Date of registration can't be greater than today's date"));
- }
- if (frm.doc.date_of_visit && frm.doc.date_of_birth) {
- if (frm.doc.date_of_visit < frm.doc.date_of_birth) {
- await frm.set_value('date_of_visit', '');
- return frappe.throw("Date of registration shall not be before the Date of Birth")
- }
- }
- },
- contact_number: function (frm) {
- if (is_primary_member_link_through_phone_number && (!indianPhoneNumberRegex.test(frm.doc.contact_number) && frm.doc.contact_number.length > 9)) {
- console.log("frm.doc.contact_number.length", frm.doc.contact_number.length);
- frappe.throw(`Phone Number ${frm.doc.contact_number} set in field contact_number is not valid.`)
- }
- },
- state: async function (frm) {
- await apply_filter("district", "state", frm, frm.doc.state);
- districts_option && districts_option.length > 1 ? await frm.set_value("district", '') : null;
- await frm.set_value("ward", '');
- await frm.set_value("name_of_the_settlement", '');
- },
- district: async function (frm) {
- await apply_filter("ward", "district", frm, frm.doc.district);
- await frm.set_value("ward", '');
- await frm.set_value("name_of_the_settlement", '');
- },
- ward: async function (frm) {
- await apply_filter("name_of_the_settlement", "block", frm, frm.doc.ward);
- await frm.set_value("name_of_the_settlement", '');
- },
- state_of_origin: async function (frm) {
- await apply_filter("district_of_origin", "state", frm, frm.doc.state_of_origin);
- await frm.set_value("district_of_origin", '');
- await frm.set_value("block", '');
- },
- district_of_origin: async function (frm) {
- await apply_filter("block", "district", frm, frm.doc.district_of_origin);
- await frm.set_value("block", '');
- },
- centre: async function (frm) {
- await frm.set_value('sub_centre', '');
- await apply_filter("sub_centre", "centre", frm, frm.doc.centre);
- },
- current_occupation: async function (frm) {
- if (!frm.doc.current_occupation) return;
- if (frm.doc.current_occupation == 'Others') {
- await apply_filter('occupational_category', 'name', frm, '', true);
- await frm.set_value('occupational_category', '');
- } else {
- let doc = await get_occupation_category(frm);
- await apply_filter('occupational_category', 'name', frm, ['=', doc.occupational_category]);
- await frm.set_value('occupational_category', doc.occupational_category);
- await frm.set_value('new_occupation', '');
- }
- },
- occupational_category: async function (frm) {
- frm.doc.occupational_category != 'Others' ? await frm.set_value('new_occupation_category', '') : null;
- },
- date_of_birth: async function (frm) {
- let dob = frm.doc.date_of_birth;
- if (new Date(dob) > new Date(frappe.datetime.get_today())) {
- await frm.set_value("date_of_birth", '');
- return frappe.throw(__("Date of birth can't be greater than today's date"));
- }
- if (frm.doc.date_of_visit && frm.doc.date_of_birth) {
- if (frm.doc.date_of_visit && frm.doc.date_of_birth) {
- if (frm.doc.date_of_visit < frm.doc.date_of_birth) {
- await frm.set_value("date_of_birth", '');
- return frappe.throw("Date of birth cannot be greater than the date of registration");
- }
- }
- }
+ if (
+ frappe.user_roles.includes("Sub-Centre") ||
+ frappe.user_roles.includes("CSC Member") ||
+ frappe.user_roles.includes("MIS executive")
+ ) {
+ if (!frappe.user_roles.includes("Administrator")) {
+ frm.set_df_property("scheme_table", "cannot_delete_rows", true); // Hide delete button
+ frm.set_df_property("scheme_table", "cannot_delete_all_rows", true);
+ frm.set_df_property("follow_up_table", "cannot_delete_rows", true); // Hide delete button
+ frm.set_df_property("follow_up_table", "cannot_delete_all_rows", true);
+ }
+ }
- if (dob) {
- let today = frappe.datetime.get_today();
- let birthDate = new Date(dob);
- let currentDate = new Date(today);
- let years = currentDate.getFullYear() - birthDate.getFullYear();
- let months = currentDate.getMonth() - birthDate.getMonth();
- if (months < 0 || (months === 0 && currentDate.getDate() < birthDate.getDate())) {
- years--;
- months = 12 - birthDate.getMonth() + currentDate.getMonth();
- } else {
- months = currentDate.getMonth() - birthDate.getMonth();
- }
- if (currentDate.getDate() < birthDate.getDate()) {
- months--;
- }
- let ageString = years > 0 ? years.toString() : '0';
- let completedAgeMonths = months <= 11 ? months : null;
- if(frm.doc.completed_age != ageString){
- await frm.set_value(
- 'completed_age', ageString,
- );
- }
- if(frm.doc.completed_age_month != completedAgeMonths){
- await frm.set_value(
- 'completed_age_month', completedAgeMonths,
- );
- }
- // await frm.set_value({
- // 'completed_age': ageString,
- // 'completed_age_month': completedAgeMonths
- // });
- }
- },
- completed_age: function (frm) {
+ await render_scheme_datatable(frm); // render scheme_data_tables
+ },
+ ////////////////////DATE VALIDATION/////////////////////////////////////////
+ date_of_visit: async function (frm) {
+ if (new Date(frm.doc.date_of_visit) > new Date(frappe.datetime.get_today())) {
+ await frm.set_value("date_of_visit", "");
+ await frappe.throw(__("Date of registration can't be greater than today's date"));
+ }
+ if (frm.doc.date_of_visit && frm.doc.date_of_birth) {
+ if (frm.doc.date_of_visit < frm.doc.date_of_birth) {
+ await frm.set_value("date_of_visit", "");
+ return frappe.throw(
+ "Date of registration shall not be before the Date of Birth"
+ );
+ }
+ }
+ },
+ contact_number: function (frm) {
+ if (
+ is_primary_member_link_through_phone_number &&
+ !indianPhoneNumberRegex.test(frm.doc.contact_number) &&
+ frm.doc.contact_number.length > 9
+ ) {
+ console.log("frm.doc.contact_number.length", frm.doc.contact_number.length);
+ frappe.throw(
+ `Phone Number ${frm.doc.contact_number} set in field contact_number is not valid.`
+ );
+ }
+ },
+ state: async function (frm) {
+ await apply_filter("district", "state", frm, frm.doc.state);
+ districts_option && districts_option.length > 1
+ ? await frm.set_value("district", "")
+ : null;
+ await frm.set_value("ward", "");
+ await frm.set_value("name_of_the_settlement", "");
+ },
+ district: async function (frm) {
+ await apply_filter("ward", "district", frm, frm.doc.district);
+ await frm.set_value("ward", "");
+ await frm.set_value("name_of_the_settlement", "");
+ },
+ ward: async function (frm) {
+ await apply_filter("name_of_the_settlement", "block", frm, frm.doc.ward);
+ await frm.set_value("name_of_the_settlement", "");
+ },
+ state_of_origin: async function (frm) {
+ await apply_filter("district_of_origin", "state", frm, frm.doc.state_of_origin);
+ await frm.set_value("district_of_origin", "");
+ await frm.set_value("block", "");
+ },
+ district_of_origin: async function (frm) {
+ await apply_filter("block", "district", frm, frm.doc.district_of_origin);
+ await frm.set_value("block", "");
+ },
+ centre: async function (frm) {
+ await frm.set_value("sub_centre", "");
+ await apply_filter("sub_centre", "centre", frm, frm.doc.centre);
+ },
+ current_occupation: async function (frm) {
+ if (!frm.doc.current_occupation) return;
+ if (frm.doc.current_occupation == "Others") {
+ await apply_filter("occupational_category", "name", frm, "", true);
+ await frm.set_value("occupational_category", "");
+ } else {
+ let doc = await get_occupation_category(frm);
+ await apply_filter("occupational_category", "name", frm, [
+ "=",
+ doc.occupational_category,
+ ]);
+ await frm.set_value("occupational_category", doc.occupational_category);
+ await frm.set_value("new_occupation", "");
+ }
+ },
+ occupational_category: async function (frm) {
+ frm.doc.occupational_category != "Others"
+ ? await frm.set_value("new_occupation_category", "")
+ : null;
+ },
+ date_of_birth: async function (frm) {
+ let dob = frm.doc.date_of_birth;
+ if (new Date(dob) > new Date(frappe.datetime.get_today())) {
+ await frm.set_value("date_of_birth", "");
+ return frappe.throw(__("Date of birth can't be greater than today's date"));
+ }
+ if (frm.doc.date_of_visit && frm.doc.date_of_birth) {
+ if (frm.doc.date_of_visit && frm.doc.date_of_birth) {
+ if (frm.doc.date_of_visit < frm.doc.date_of_birth) {
+ await frm.set_value("date_of_birth", "");
+ return frappe.throw(
+ "Date of birth cannot be greater than the date of registration"
+ );
+ }
+ }
+ }
- },
- completed_age_month: async function (frm) {
- if (frm.doc.completed_age_month > 11) {
- await frm.set_value("completed_age_month", '');
- await frappe.throw(__("Completed age in month should be less than or equal to 11"));
- }
- let dob = generateDOBFromAge(frm.doc?.completed_age, frm.doc?.completed_age_month, frm.doc?.date_of_birth)
- // console.log("///////////////////", frm.doc?.date_of_birth , dob)
- if (new Date(frm.doc.date_of_birth) !== new Date(dob)) {
- console.log("generatedDOB", dob, frm.doc?.completed_age, frm.doc?.completed_age_month);
- // frm.set_value("date_of_birth", dob)
- }
- },
- are_you_a_person_with_disability_pwd: async function (frm) {
- frm.doc.are_you_a_person_with_disability_pwd == "No" ? await frm.set_value({
- "type_of_disability": '',
- "proof_of_disability": '',
- "what_is_the_extent_of_your_disability": ''
- }) : null;
- },
- what_is_the_extent_of_your_disability: async function (frm) {
- frm.doc.what_is_the_extent_of_your_disability != "Above 40%" ? await frm.set_value('proof_of_disability', []) : null;
- },
- marital_status: async function (frm) {
- frm.doc.marital_status != "Married" ? await frm.set_value("spouses_name", '') : null;
- },
- social_vulnerable: async function (frm) {
- frm.doc.social_vulnerable != "Yes" ? await frm.set_value({
- "social_vulnerable_category": '',
- 'other_social_vulnerable_category': ''
- }) : null;
-
- },
- social_vulnerable_category: async function (frm) {
- frm.doc.social_vulnerable_category != "Others" ? await frm.set_value('other_social_vulnerable_category', '') : null;
- },
- source_of_information: async function (frm) {
- frm.doc.source_of_information != "Others" ? await frm.set_value({
- 'new_source_of_information': '',
- 'name_of_the_camp': '',
- 'new_camp': ''
- }) : null;
- },
- name_of_the_camp: async function (frm) {
- frm.doc.name_of_the_camp != "Others" ? await frm.set_value('new_camp', '') : null;
- },
- has_anyone_from_your_family_visisted_before: async function (frm) {
- if (frm.doc.has_anyone_from_your_family_visisted_before == "Yes") {
- await frm.set_value('select_primary_member', '')
- } else {
- if (frm.is_new()) {
- await truncate_multiple_fields_value(frm, ['current_house_type', 'state', 'district', 'ward',
- 'name_of_the_settlement', 'address_with_landmark', 'same_as_above', 'state_of_origin', 'district_of_origin', 'block'])
- }
- }
- },
- select_primary_member: async function (frm) {
- const pm = frm.doc.select_primary_member;
- if (pm && frm.is_new()) {
- let response = await get_document({ "contact_number": pm },
- ['name', "name_of_the_beneficiary", 'current_house_type', 'state', 'district', 'ward',
- 'name_of_the_settlement', 'address_with_landmark', 'same_as_above', 'state_of_origin', 'district_of_origin', 'block']);
- const parent = response.message;
- frm.doc.current_house_type = parent.current_house_type;
- frm.doc.state = parent.state;
- frm.doc.district = parent.district;
- frm.doc.ward = parent.ward;
- frm.doc.name_of_the_settlement = parent.name_of_the_settlement;
- frm.doc.address_with_landmark = parent.address_with_landmark;
- frm.doc.same_as_above = parent.same_as_above;
- frm.doc.state_of_origin = parent.state_of_origin;
- frm.doc.district_of_origin = parent.district_of_origin;
- frm.doc.block = parent.block;
- frm.refresh_fields(['current_house_type', 'state', 'district', 'ward',
- 'name_of_the_settlement', 'address_with_landmark', 'same_as_above', 'state_of_origin', 'district_of_origin', 'block'])
- }
- },
- current_house_type: async function (frm) {
- frm.doc.current_house_type != "Others" ? await frm.set_value('add_house_type', '') : null;
- },
- same_as_above: async function (frm) {
- frm.doc.same_as_above == '1' ? await frm.set_value({
- 'state_of_origin': frm.doc.state,
- 'district_of_origin': frm.doc.district,
- 'block': frm.doc.ward
- }) : await frm.set_value({
- 'state_of_origin': '',
- 'district_of_origin': '',
- 'block': ''
- });
- },
+ if (dob) {
+ let today = frappe.datetime.get_today();
+ let birthDate = new Date(dob);
+ let currentDate = new Date(today);
+ let years = currentDate.getFullYear() - birthDate.getFullYear();
+ let months = currentDate.getMonth() - birthDate.getMonth();
+ if (months < 0 || (months === 0 && currentDate.getDate() < birthDate.getDate())) {
+ years--;
+ months = 12 - birthDate.getMonth() + currentDate.getMonth();
+ } else {
+ months = currentDate.getMonth() - birthDate.getMonth();
+ }
+ if (currentDate.getDate() < birthDate.getDate()) {
+ months--;
+ }
+ let ageString = years > 0 ? years.toString() : "0";
+ let completedAgeMonths = months <= 11 ? months : null;
+ if (frm.doc.completed_age != ageString) {
+ await frm.set_value("completed_age", ageString);
+ }
+ if (frm.doc.completed_age_month != completedAgeMonths) {
+ await frm.set_value("completed_age_month", completedAgeMonths);
+ }
+ // await frm.set_value({
+ // 'completed_age': ageString,
+ // 'completed_age_month': completedAgeMonths
+ // });
+ }
+ },
+ completed_age: function (frm) {},
+ completed_age_month: async function (frm) {
+ if (frm.doc.completed_age_month > 11) {
+ await frm.set_value("completed_age_month", "");
+ await frappe.throw(__("Completed age in month should be less than or equal to 11"));
+ }
+ let dob = generateDOBFromAge(
+ frm.doc?.completed_age,
+ frm.doc?.completed_age_month,
+ frm.doc?.date_of_birth
+ );
+ // console.log("///////////////////", frm.doc?.date_of_birth , dob)
+ if (new Date(frm.doc.date_of_birth) !== new Date(dob)) {
+ console.log("generatedDOB", dob, frm.doc?.completed_age, frm.doc?.completed_age_month);
+ // frm.set_value("date_of_birth", dob)
+ }
+ },
+ are_you_a_person_with_disability_pwd: async function (frm) {
+ frm.doc.are_you_a_person_with_disability_pwd == "No"
+ ? await frm.set_value({
+ type_of_disability: "",
+ proof_of_disability: "",
+ what_is_the_extent_of_your_disability: "",
+ })
+ : null;
+ },
+ what_is_the_extent_of_your_disability: async function (frm) {
+ frm.doc.what_is_the_extent_of_your_disability != "Above 40%"
+ ? await frm.set_value("proof_of_disability", [])
+ : null;
+ },
+ marital_status: async function (frm) {
+ frm.doc.marital_status != "Married" ? await frm.set_value("spouses_name", "") : null;
+ },
+ social_vulnerable: async function (frm) {
+ frm.doc.social_vulnerable != "Yes"
+ ? await frm.set_value({
+ social_vulnerable_category: "",
+ other_social_vulnerable_category: "",
+ })
+ : null;
+ },
+ social_vulnerable_category: async function (frm) {
+ frm.doc.social_vulnerable_category != "Others"
+ ? await frm.set_value("other_social_vulnerable_category", "")
+ : null;
+ },
+ source_of_information: async function (frm) {
+ frm.doc.source_of_information != "Others"
+ ? await frm.set_value({
+ new_source_of_information: "",
+ name_of_the_camp: "",
+ new_camp: "",
+ })
+ : null;
+ },
+ name_of_the_camp: async function (frm) {
+ frm.doc.name_of_the_camp != "Others" ? await frm.set_value("new_camp", "") : null;
+ },
+ has_anyone_from_your_family_visisted_before: async function (frm) {
+ if (frm.doc.has_anyone_from_your_family_visisted_before == "Yes") {
+ await frm.set_value("select_primary_member", "");
+ } else {
+ if (frm.is_new()) {
+ await truncate_multiple_fields_value(frm, [
+ "current_house_type",
+ "state",
+ "district",
+ "ward",
+ "name_of_the_settlement",
+ "address_with_landmark",
+ "same_as_above",
+ "state_of_origin",
+ "district_of_origin",
+ "block",
+ ]);
+ }
+ }
+ },
+ select_primary_member: async function (frm) {
+ const pm = frm.doc.select_primary_member;
+ if (pm && frm.is_new()) {
+ let response = await get_document({ contact_number: pm }, [
+ "name",
+ "name_of_the_beneficiary",
+ "current_house_type",
+ "state",
+ "district",
+ "ward",
+ "name_of_the_settlement",
+ "address_with_landmark",
+ "same_as_above",
+ "state_of_origin",
+ "district_of_origin",
+ "block",
+ ]);
+ const parent = response.message;
+ frm.doc.current_house_type = parent.current_house_type;
+ frm.doc.state = parent.state;
+ frm.doc.district = parent.district;
+ frm.doc.ward = parent.ward;
+ frm.doc.name_of_the_settlement = parent.name_of_the_settlement;
+ frm.doc.address_with_landmark = parent.address_with_landmark;
+ frm.doc.same_as_above = parent.same_as_above;
+ frm.doc.state_of_origin = parent.state_of_origin;
+ frm.doc.district_of_origin = parent.district_of_origin;
+ frm.doc.block = parent.block;
+ frm.refresh_fields([
+ "current_house_type",
+ "state",
+ "district",
+ "ward",
+ "name_of_the_settlement",
+ "address_with_landmark",
+ "same_as_above",
+ "state_of_origin",
+ "district_of_origin",
+ "block",
+ ]);
+ }
+ },
+ current_house_type: async function (frm) {
+ frm.doc.current_house_type != "Others" ? await frm.set_value("add_house_type", "") : null;
+ },
+ same_as_above: async function (frm) {
+ frm.doc.same_as_above == "1"
+ ? await frm.set_value({
+ state_of_origin: frm.doc.state,
+ district_of_origin: frm.doc.district,
+ block: frm.doc.ward,
+ })
+ : await frm.set_value({
+ state_of_origin: "",
+ district_of_origin: "",
+ block: "",
+ });
+ },
});
-frappe.ui.form.on('Follow Up Child',{
- follow_up_status:function(frm,cdt, cdn){
- let row = locals[cdt][cdn];
- if(row.follow_up_status){
- let last_update_date = frappe.datetime.get_datetime_as_string()
- let user = frappe.session.user
- frappe.model.set_value(cdt, cdn, 'last_update_date', last_update_date);
- frappe.model.set_value(cdt, cdn, 'last_update_by', user);
- }
-
- },
-})
+frappe.ui.form.on("Follow Up Child", {
+ follow_up_status: function (frm, cdt, cdn) {
+ let row = locals[cdt][cdn];
+ if (row.follow_up_status) {
+ let last_update_date = frappe.datetime.get_datetime_as_string();
+ let user = frappe.session.user;
+ frappe.model.set_value(cdt, cdn, "last_update_date", last_update_date);
+ frappe.model.set_value(cdt, cdn, "last_update_by", user);
+ }
+ },
+});
diff --git a/myojana/myojana/doctype/beneficiary_profiling/beneficiary_profiling.py b/myojana/myojana/doctype/beneficiary_profiling/beneficiary_profiling.py
index a1ce1b8..cf7997e 100644
--- a/myojana/myojana/doctype/beneficiary_profiling/beneficiary_profiling.py
+++ b/myojana/myojana/doctype/beneficiary_profiling/beneficiary_profiling.py
@@ -1,10 +1,13 @@
# Copyright (c) 2023, suvaidyam and contributors
# For license information, please see license.txt
+from datetime import datetime, timedelta
+
import frappe
from frappe.model.document import Document
+
from myojana.services.family import family
-from datetime import datetime, timedelta
+
class BeneficiaryProfiling(Document):
# def printKeys(obj, f=False):
@@ -14,43 +17,55 @@ class BeneficiaryProfiling(Document):
# else:
# for key in obj.__dict__.keys():
# print(key,obj.get(key, None))
-# find family and get family function
+ # find family and get family function
def get_family(contact_number):
- docs = frappe.db.get_list(doctype='Primary Member', filters={'name':contact_number}, fields=["name", "name_of_head_of_family",'name_of_head_of_family.name_of_the_beneficiary as name_of_the_beneficiary'])
+ docs = frappe.db.get_list(
+ doctype="Primary Member",
+ filters={"name": contact_number},
+ fields=[
+ "name",
+ "name_of_head_of_family",
+ "name_of_head_of_family.name_of_the_beneficiary as name_of_the_beneficiary",
+ ],
+ )
if len(docs):
return docs[0]
return None
-
-# create new souource of information
+
+ # create new souource of information
def create_source_of_information(new_source_of_information):
data_exist = frappe.db.exists("Source Of Information", new_source_of_information)
if not data_exist:
new_source_of_information_doc = frappe.new_doc("Source Of Information")
new_source_of_information_doc.source_name = new_source_of_information
new_source_of_information_doc.save()
-# create new house_type
+
+ # create new house_type
def create_house_type(add_house_type):
data_exist = frappe.db.exists("House Types", add_house_type)
if not data_exist:
current_house_type_doc = frappe.new_doc("House Types")
current_house_type_doc.house_type_name = add_house_type
current_house_type_doc.save()
-# create new_camp
+
+ # create new_camp
def create_new_camp(new_camp):
data_exist = frappe.db.exists("Camp", new_camp)
if not data_exist:
camp_doc = frappe.new_doc("Camp")
camp_doc.name_of_the_camp = new_camp
camp_doc.save()
-# create social_vulnerable_category
+
+ # create social_vulnerable_category
def new_social_vulnerable_category(other_social_vulnerable_category):
data_exist = frappe.db.exists("Social vulnerable category", other_social_vulnerable_category)
if not data_exist:
scc_doc = frappe.new_doc("Social vulnerable category")
scc_doc.social_vulnerable_category = other_social_vulnerable_category
scc_doc.save()
-# create social_vulnerable_category
- def other_new_occupation(new_occupation , occupational_category , new_occupation_category):
+
+ # create social_vulnerable_category
+ def other_new_occupation(new_occupation, occupational_category, new_occupation_category):
data_exist = frappe.db.exists("Occupation", new_occupation)
if not data_exist:
occupation = frappe.new_doc("Occupation")
@@ -68,86 +83,112 @@ def other_new_occupation(new_occupation , occupational_category , new_occupation
occupation.save()
def validate(self):
- if(self.contact_number == self.alternate_contact_number and self.contact_number is not None):
+ if self.contact_number == self.alternate_contact_number and self.contact_number is not None:
return frappe.throw("Alternate contact number cannot be the same as mobile number")
- if(self.do_you_have_any_id_documents != "Yes"):
+ if self.do_you_have_any_id_documents != "Yes":
self.id_table_list = []
- if(self.date_of_birth and self.date_of_visit):
+ if self.date_of_birth and self.date_of_visit:
if self.date_of_visit < self.date_of_birth:
return frappe.throw("Date of Visit shall not be before the Date of Birth")
- if(self.what_is_the_extent_of_your_disability == "Above 40%"):
- if(self.proof_of_disability == []):
- return frappe.throw("""Mandatory fields required in Beneficiary
• Profiling Proof of disability""")
+ if self.what_is_the_extent_of_your_disability == "Above 40%":
+ if self.proof_of_disability == []:
+ return frappe.throw(
+ """Mandatory fields required in Beneficiary
• Profiling Proof of disability"""
+ )
# BeneficiaryProfiling.printKeys(self)
- if(self.has_anyone_from_your_family_visisted_before == "No"):
- if self.get('_doc_before_save', None): # Update
+ if self.has_anyone_from_your_family_visisted_before == "No":
+ if self.get("_doc_before_save", None): # Update
family_doc = BeneficiaryProfiling.get_family(self.contact_number)
# akndcjkdxckjvbxjbvkjcxbvkjcxbkjvbckj
if family_doc and not (family_doc.name_of_head_of_family == self.name):
- frappe.throw(f"Primary member exist with name {family_doc.name_of_the_beneficiary} [{self.contact_number}], Please Select Primary Member")
+ frappe.throw(
+ f"Primary member exist with name {family_doc.name_of_the_beneficiary} [{self.contact_number}], Please Select Primary Member"
+ )
return
- if self.get('_doc_before_save').get('has_anyone_from_your_family_visisted_before') == 'Yes':
- self.select_primary_member = None # set family to None
- else: # Create
+ if self.get("_doc_before_save").get("has_anyone_from_your_family_visisted_before") == "Yes":
+ self.select_primary_member = None # set family to None
+ else: # Create
family_doc = BeneficiaryProfiling.get_family(self.contact_number)
if family_doc:
- frappe.throw(f"Primary member exist with name {family_doc.name_of_the_beneficiary} [{self.contact_number}], Please Select Primary Member")
+ frappe.throw(
+ f"Primary member exist with name {family_doc.name_of_the_beneficiary} [{self.contact_number}], Please Select Primary Member"
+ )
return
else:
- _doc_before_save = self.get('_doc_before_save', None)
+ _doc_before_save = self.get("_doc_before_save", None)
# if _doc_before_save is not None:
# if self.select_primary_member == _doc_before_save.get('select_primary_member'):
# frappe.throw(f"Please select other primary member")
# return
+
def after_insert(self):
print("Ben[after_insert]")
# if not self.centre and "Administrator" not in frappe.get_roles(frappe.session.user):
- # frappe.db.set_value('Beneficiary Profiling', self.name, update_modified=False)
+ # frappe.db.set_value('Beneficiary Profiling', self.name, update_modified=False)
# if not self.sub_centre:
# self.sub_centre = sub_centre
# frappe.db.set_value('Beneficiary Profiling', self.name, 'sub_centre', sub_centre, update_modified=False)
- if(self.new_source_of_information):
+ if self.new_source_of_information:
BeneficiaryProfiling.create_source_of_information(self.new_source_of_information)
- if(self.add_house_type):
+ if self.add_house_type:
BeneficiaryProfiling.create_house_type(self.add_house_type)
- if(self.new_camp):
+ if self.new_camp:
BeneficiaryProfiling.create_new_camp(self.new_camp)
- if(self.other_social_vulnerable_category):
+ if self.other_social_vulnerable_category:
BeneficiaryProfiling.new_social_vulnerable_category(self.other_social_vulnerable_category)
- if(self.has_anyone_from_your_family_visisted_before == "No"):
+ if self.has_anyone_from_your_family_visisted_before == "No":
family_doc = family.create(self)
- frappe.db.set_value('Beneficiary Profiling', self.name, 'select_primary_member', family_doc.name, update_modified=False)
+ frappe.db.set_value(
+ "Beneficiary Profiling",
+ self.name,
+ "select_primary_member",
+ family_doc.name,
+ update_modified=False,
+ )
def on_update(self):
- if(self.new_source_of_information):
+ if self.new_source_of_information:
BeneficiaryProfiling.create_source_of_information(self.new_source_of_information)
- if(self.add_house_type):
+ if self.add_house_type:
BeneficiaryProfiling.create_house_type(self.add_house_type)
- if(self.new_camp):
+ if self.new_camp:
BeneficiaryProfiling.create_new_camp(self.new_camp)
- if(self.other_social_vulnerable_category):
+ if self.other_social_vulnerable_category:
BeneficiaryProfiling.new_social_vulnerable_category(self.other_social_vulnerable_category)
- if(self.new_occupation and self.occupational_category or self.new_occupation_category):
- BeneficiaryProfiling.other_new_occupation(self.new_occupation , self.occupational_category , self.new_occupation_category)
- if self.get('localname'):
+ if self.new_occupation and self.occupational_category or self.new_occupation_category:
+ BeneficiaryProfiling.other_new_occupation(
+ self.new_occupation, self.occupational_category, self.new_occupation_category
+ )
+ if self.get("localname"):
return
else:
- if(self.has_anyone_from_your_family_visisted_before == "No"):
- if self.get('_doc_before_save', None):
- _doc_before_save = self.get('_doc_before_save')
- if _doc_before_save.get('has_anyone_from_your_family_visisted_before') == 'Yes':
+ if self.has_anyone_from_your_family_visisted_before == "No":
+ if self.get("_doc_before_save", None):
+ _doc_before_save = self.get("_doc_before_save")
+ if _doc_before_save.get("has_anyone_from_your_family_visisted_before") == "Yes":
family_doc = family.update(self)
- frappe.db.set_value('Beneficiary Profiling', self.name, 'select_primary_member', family_doc.name, update_modified=False)
+ frappe.db.set_value(
+ "Beneficiary Profiling",
+ self.name,
+ "select_primary_member",
+ family_doc.name,
+ update_modified=False,
+ )
else:
family_doc = family.update(self)
- frappe.db.set_value('Beneficiary Profiling', self.name, 'select_primary_member', family_doc.name, update_modified=False)
- else: # handle if No -> Yes
- if self.get('_doc_before_save', None):
- _doc_before_save = self.get('_doc_before_save')
- if _doc_before_save.get('has_anyone_from_your_family_visisted_before') == 'No':
+ frappe.db.set_value(
+ "Beneficiary Profiling",
+ self.name,
+ "select_primary_member",
+ family_doc.name,
+ update_modified=False,
+ )
+ else: # handle if No -> Yes
+ if self.get("_doc_before_save", None):
+ _doc_before_save = self.get("_doc_before_save")
+ if _doc_before_save.get("has_anyone_from_your_family_visisted_before") == "No":
family_doc = BeneficiaryProfiling.get_family(_doc_before_save.contact_number)
if family_doc:
query = f"UPDATE `tabBeneficiary Profiling` SET select_primary_member = '{self.select_primary_member}' WHERE select_primary_member = '{_doc_before_save.select_primary_member}'"
frappe.db.sql(query)
frappe.db.delete("Primary Member", {"name": family_doc.name})
-
diff --git a/myojana/myojana/doctype/beneficiary_profiling/beneficiary_profiling_list.js b/myojana/myojana/doctype/beneficiary_profiling/beneficiary_profiling_list.js
index 57e7b6b..8f04172 100644
--- a/myojana/myojana/doctype/beneficiary_profiling/beneficiary_profiling_list.js
+++ b/myojana/myojana/doctype/beneficiary_profiling/beneficiary_profiling_list.js
@@ -1,10 +1,9 @@
-frappe.listview_settings['Beneficiary Profiling'] = {
+frappe.listview_settings["Beneficiary Profiling"] = {
refresh: function (listview) {
// console.log(listview)
// listview.page.add_actions_menu_item("WhatsApp", async function () {
// for(ben of listview.data){
// console.log("//////", ben)
-
// }
// // await update_enable_disable(listview, 1)
// });
@@ -17,13 +16,16 @@ frappe.listview_settings['Beneficiary Profiling'] = {
},
before_render: async function () {
cur_list?.page?.add_inner_button("Beneficiary report", function () {
- window.location.href = 'report-list/Beneficiary%20Profiling'
- })
-
+ window.location.href = "report-list/Beneficiary%20Profiling";
+ });
},
add_fields: [
- 'name_of_the_beneficiary', 'date_of_visit', 'contact_number',
- 'select_primary_member', 'overall_status', 'numeric_overall_status'
+ "name_of_the_beneficiary",
+ "date_of_visit",
+ "contact_number",
+ "select_primary_member",
+ "overall_status",
+ "numeric_overall_status",
],
hide_name_column: true,
-}
+};
diff --git a/myojana/myojana/doctype/centre/centre_list.js b/myojana/myojana/doctype/centre/centre_list.js
index 99395c4..45e0645 100644
--- a/myojana/myojana/doctype/centre/centre_list.js
+++ b/myojana/myojana/doctype/centre/centre_list.js
@@ -1,5 +1,5 @@
-frappe.listview_settings['Centre'] = {
- onload: function (listview) {
- $('.layout-side-section').hide();
- }
-};
\ No newline at end of file
+frappe.listview_settings["Centre"] = {
+ onload: function (listview) {
+ $(".layout-side-section").hide();
+ },
+};
diff --git a/myojana/myojana/doctype/fielddependencyconfiguration/fielddependencyconfiguration.js b/myojana/myojana/doctype/fielddependencyconfiguration/fielddependencyconfiguration.js
index ff1b3e3..6e4a8a1 100644
--- a/myojana/myojana/doctype/fielddependencyconfiguration/fielddependencyconfiguration.js
+++ b/myojana/myojana/doctype/fielddependencyconfiguration/fielddependencyconfiguration.js
@@ -42,5 +42,4 @@
// }
// });
-
-// //
\ No newline at end of file
+// //
diff --git a/myojana/myojana/doctype/myojana_settings/myojana_settings.js b/myojana/myojana/doctype/myojana_settings/myojana_settings.js
index 1cfacd8..f9b8bb9 100644
--- a/myojana/myojana/doctype/myojana_settings/myojana_settings.js
+++ b/myojana/myojana/doctype/myojana_settings/myojana_settings.js
@@ -16,119 +16,131 @@
// }
let deleted_row = [];
const get_fields_list = async (doctype) => {
- let list = await callAPI({
- method: 'myojana.apis.get_doctype_meta.get_allowed_doctype',
- freeze: true,
- args: {
- "doctype_name": "Beneficiary Profiling",
- "field_types": "Link",
- "options": doctype
- },
- freeze_message: __("Getting Fields..."),
- })
- // list = list.map((e)=>{e.label = list.label, e.value = list.label})
- cur_frm.cur_grid.grid_form.fields_dict.field_name._data = list
- // frm.fields_dict.select_doctypes.grid.open_grid_row.fields_dict.doctypes._data = list;
- return list;
-}
+ let list = await callAPI({
+ method: "myojana.apis.get_doctype_meta.get_allowed_doctype",
+ freeze: true,
+ args: {
+ doctype_name: "Beneficiary Profiling",
+ field_types: "Link",
+ options: doctype,
+ },
+ freeze_message: __("Getting Fields..."),
+ });
+ // list = list.map((e)=>{e.label = list.label, e.value = list.label})
+ cur_frm.cur_grid.grid_form.fields_dict.field_name._data = list;
+ // frm.fields_dict.select_doctypes.grid.open_grid_row.fields_dict.doctypes._data = list;
+ return list;
+};
const toggle_track_changes = async (items, value) => {
- let list = await callAPI({
- method: 'myojana.apis.track_seen.toggle_track_changes',
- freeze: true,
- args: {
- 'list': items,
- "value": value
- },
- freeze_message: __("Updating Track Changes..."),
- })
- return list;
-}
+ let list = await callAPI({
+ method: "myojana.apis.track_seen.toggle_track_changes",
+ freeze: true,
+ args: {
+ list: items,
+ value: value,
+ },
+ freeze_message: __("Updating Track Changes..."),
+ });
+ return list;
+};
const apply_filter_on_doctypes = async (frm) => {
- // APPLY Filter in ID DOCUMENT
- var child_table = frm.fields_dict['enable_track_changes'].grid;
- if (child_table) {
- try {
- child_table.get_field('doc').get_query = function () {
- return {
- filters: [
- ["DocType", "module", "IN", ["Sva Report", "Rule Engine", "Master", "myojana"]],
- ["DocType", "istable", "=", 0],
- ['DocType', 'name', 'NOT IN', cur_frm.doc.enable_track_changes.map(function (item) {
- return item.doc;
- })]
- ]
- };
- };
- } catch (error) {
- console.error(error)
- }
- }
-}
+ // APPLY Filter in ID DOCUMENT
+ var child_table = frm.fields_dict["enable_track_changes"].grid;
+ if (child_table) {
+ try {
+ child_table.get_field("doc").get_query = function () {
+ return {
+ filters: [
+ [
+ "DocType",
+ "module",
+ "IN",
+ ["Sva Report", "Rule Engine", "Master", "myojana"],
+ ],
+ ["DocType", "istable", "=", 0],
+ [
+ "DocType",
+ "name",
+ "NOT IN",
+ cur_frm.doc.enable_track_changes.map(function (item) {
+ return item.doc;
+ }),
+ ],
+ ],
+ };
+ };
+ } catch (error) {
+ console.error(error);
+ }
+ }
+};
const test_auth_key = async (frm) => {
- let data = await callAPI({
- method: 'myojana.apis.whatsapp.test_auth_key',
- freeze: true,
- args: {
- "auth_key":frm.doc.auth_key
- },
- freeze_message: __("Validating Auth Key..."),
- })
- if(data.status == "success"){
- // console.log(data, data?.data[0]?.integrated_number)
- frm.set_value("integrated_number",data?.data[0]?.integrated_number)
- // frappe.msgprint("Auth Key is valid")
- }else{
- frm.set_value("integrated_number",'')
- frm.__unsaved = 1;
- return frappe.throw("Auth Key is invalid")
- }
-
-}
+ let data = await callAPI({
+ method: "myojana.apis.whatsapp.test_auth_key",
+ freeze: true,
+ args: {
+ auth_key: frm.doc.auth_key,
+ },
+ freeze_message: __("Validating Auth Key..."),
+ });
+ if (data.status == "success") {
+ // console.log(data, data?.data[0]?.integrated_number)
+ frm.set_value("integrated_number", data?.data[0]?.integrated_number);
+ // frappe.msgprint("Auth Key is valid")
+ } else {
+ frm.set_value("integrated_number", "");
+ frm.__unsaved = 1;
+ return frappe.throw("Auth Key is invalid");
+ }
+};
frappe.ui.form.on("mYojana Settings", {
- async refresh(frm) {
- },
- async before_save(frm) {
- if(frm.doc.auth_key){
- await test_auth_key(frm)
- }
- const disable_tracking = deleted_row.map((item) => { return item.doc });
- if (disable_tracking.length) {
- await toggle_track_changes(disable_tracking, 0)
- }
- const enable_tracking = frm.doc.enable_track_changes.map((item) => { return item.doc });
- if (enable_tracking.length) {
- await toggle_track_changes(enable_tracking, 1);
- }
- deleted_row = [];
- },
- test_auth_key:async function(frm){
- console.log("data")
- await test_auth_key(frm)
- }
+ async refresh(frm) {},
+ async before_save(frm) {
+ if (frm.doc.auth_key) {
+ await test_auth_key(frm);
+ }
+ const disable_tracking = deleted_row.map((item) => {
+ return item.doc;
+ });
+ if (disable_tracking.length) {
+ await toggle_track_changes(disable_tracking, 0);
+ }
+ const enable_tracking = frm.doc.enable_track_changes.map((item) => {
+ return item.doc;
+ });
+ if (enable_tracking.length) {
+ await toggle_track_changes(enable_tracking, 1);
+ }
+ deleted_row = [];
+ },
+ test_auth_key: async function (frm) {
+ console.log("data");
+ await test_auth_key(frm);
+ },
});
-frappe.ui.form.on('Setting Doctype Child', {
- form_render: async function (frm, cdt, cdn) {
- let row = frappe.get_doc(cdt, cdn);
- row.doctypes && await get_fields_list(row.doctypes)
- },
- select_doctypes_add: async function (frm, cdt, cdn) {
- console.log("hello everyone")
- },
- doctypes: async function (frm, cdt, cdn) {
- let row = frappe.get_doc(cdt, cdn);
- row.doctypes && await get_fields_list(row.doctypes)
- }
-})
-frappe.ui.form.on('DocType Child', {
- form_render: async function (frm, cdt, cdn) {
- await apply_filter_on_doctypes(frm)
- },
- enable_track_changes_add: async function (frm, cdt, cdn) {
- await apply_filter_on_doctypes(frm)
- },
- before_enable_track_changes_remove: async function (frm, cdt, cdn) {
- let row = frappe.get_doc(cdt, cdn);
- deleted_row.push(row)
- }
-})
\ No newline at end of file
+frappe.ui.form.on("Setting Doctype Child", {
+ form_render: async function (frm, cdt, cdn) {
+ let row = frappe.get_doc(cdt, cdn);
+ row.doctypes && (await get_fields_list(row.doctypes));
+ },
+ select_doctypes_add: async function (frm, cdt, cdn) {
+ console.log("hello everyone");
+ },
+ doctypes: async function (frm, cdt, cdn) {
+ let row = frappe.get_doc(cdt, cdn);
+ row.doctypes && (await get_fields_list(row.doctypes));
+ },
+});
+frappe.ui.form.on("DocType Child", {
+ form_render: async function (frm, cdt, cdn) {
+ await apply_filter_on_doctypes(frm);
+ },
+ enable_track_changes_add: async function (frm, cdt, cdn) {
+ await apply_filter_on_doctypes(frm);
+ },
+ before_enable_track_changes_remove: async function (frm, cdt, cdn) {
+ let row = frappe.get_doc(cdt, cdn);
+ deleted_row.push(row);
+ },
+});
diff --git a/myojana/myojana/doctype/myojana_settings/myojana_settings.py b/myojana/myojana/doctype/myojana_settings/myojana_settings.py
index 4222a72..97d3dfb 100644
--- a/myojana/myojana/doctype/myojana_settings/myojana_settings.py
+++ b/myojana/myojana/doctype/myojana_settings/myojana_settings.py
@@ -8,13 +8,13 @@
class mYojanaSettings(Document):
def validate(self):
pass
+
def before_save(self):
if not self.enable_whats_app_notification:
self.id_card_template = 0
- self.whatsapp_service_provider =""
+ self.whatsapp_service_provider = ""
self.auth_key = ""
self.integrated_number = ""
# Get the host_url and remove the trailing slash if present
- self.base_url = frappe.local.request.host_url.rstrip('/')
-
+ self.base_url = frappe.local.request.host_url.rstrip("/")
diff --git a/myojana/myojana/doctype/myojana_settings/myojana_settings_list.js b/myojana/myojana/doctype/myojana_settings/myojana_settings_list.js
index 4592b94..9ae4e66 100644
--- a/myojana/myojana/doctype/myojana_settings/myojana_settings_list.js
+++ b/myojana/myojana/doctype/myojana_settings/myojana_settings_list.js
@@ -1,5 +1,5 @@
-frappe.listview_settings['mYojana Settings'] = {
- onload: function (listview) {
- $('.layout-side-section').hide();
- }
-};
\ No newline at end of file
+frappe.listview_settings["mYojana Settings"] = {
+ onload: function (listview) {
+ $(".layout-side-section").hide();
+ },
+};
diff --git a/myojana/myojana/doctype/myojana_system_notification_setting/myojana_system_notification_setting.js b/myojana/myojana/doctype/myojana_system_notification_setting/myojana_system_notification_setting.js
index 796861c..2e4990f 100644
--- a/myojana/myojana/doctype/myojana_system_notification_setting/myojana_system_notification_setting.js
+++ b/myojana/myojana/doctype/myojana_system_notification_setting/myojana_system_notification_setting.js
@@ -2,43 +2,55 @@
// For license information, please see license.txt
const set_field_list = async (frm) => {
- frappe.model.with_doctype( frm.doc.select_doctype, function() {
- let meta = frappe.get_meta(frm.doc.select_doctype);
- meta.istable == 1 ? frm.set_df_property('select_parent_doctype', 'hidden', 0): frm.set_df_property('select_parent_doctype', 'hidden', 1);
- meta.istable == 1 ? frm.set_df_property('select_parent_doctype', 'reqd', 1): frm.set_df_property('select_parent_doctype', 'reqd', 0);
- console.log(meta);
- let meta_field = meta.fields.filter(field => field.fieldtype === 'Select' || field.fieldtype === 'Link' || field.fieldtype === 'Autocomplete' );
- const result = meta_field.map(item => ({
- value: item.fieldname,
- // lable: item.label
- }));
- frm.fields_dict.table_lrtz.grid.update_docfield_property("select_field", "options", result);
- return meta_field
- });
-}
+ frappe.model.with_doctype(frm.doc.select_doctype, function () {
+ let meta = frappe.get_meta(frm.doc.select_doctype);
+ meta.istable == 1
+ ? frm.set_df_property("select_parent_doctype", "hidden", 0)
+ : frm.set_df_property("select_parent_doctype", "hidden", 1);
+ meta.istable == 1
+ ? frm.set_df_property("select_parent_doctype", "reqd", 1)
+ : frm.set_df_property("select_parent_doctype", "reqd", 0);
+ console.log(meta);
+ let meta_field = meta.fields.filter(
+ (field) =>
+ field.fieldtype === "Select" ||
+ field.fieldtype === "Link" ||
+ field.fieldtype === "Autocomplete"
+ );
+ const result = meta_field.map((item) => ({
+ value: item.fieldname,
+ // lable: item.label
+ }));
+ frm.fields_dict.table_lrtz.grid.update_docfield_property(
+ "select_field",
+ "options",
+ result
+ );
+ return meta_field;
+ });
+};
frappe.ui.form.on("mYojana System Notification Setting", {
refresh(frm) {
- if(!frm.is_new()){
- set_field_list(frm);
- // let meta = frappe.get_meta("");
- // console.log(meta);
- }
+ if (!frm.is_new()) {
+ set_field_list(frm);
+ // let meta = frappe.get_meta("");
+ // console.log(meta);
+ }
+ },
+ select_doctype(frm) {
+ set_field_list(frm);
+ // let meta = frappe.get_meta(frm.doc.select_doctype);
},
- select_doctype(frm){
- set_field_list(frm);
- // let meta = frappe.get_meta(frm.doc.select_doctype);
- }
});
frappe.ui.form.on("System Notification Child", {
- form_render(frm, cdt, cdn){
- let row = locals[cdt][cdn];
- set_field_list(frm);
- console.log("from form render");
- },
- select_action(frm, cdt, cdn){
- let row = locals[cdt][cdn];
- console.log(row);
- }
-
+ form_render(frm, cdt, cdn) {
+ let row = locals[cdt][cdn];
+ set_field_list(frm);
+ console.log("from form render");
+ },
+ select_action(frm, cdt, cdn) {
+ let row = locals[cdt][cdn];
+ console.log(row);
+ },
});
diff --git a/myojana/myojana/doctype/myojana_system_notification_setting/myojana_system_notification_setting.py b/myojana/myojana/doctype/myojana_system_notification_setting/myojana_system_notification_setting.py
index 0d216cb..8f33c39 100644
--- a/myojana/myojana/doctype/myojana_system_notification_setting/myojana_system_notification_setting.py
+++ b/myojana/myojana/doctype/myojana_system_notification_setting/myojana_system_notification_setting.py
@@ -7,7 +7,9 @@
class mYojanaSystemNotificationSetting(Document):
def validate(self):
- is_system_notification_enabled = frappe.db.get_single_value('mYojana Settings', 'enable_system_notification')
+ is_system_notification_enabled = frappe.db.get_single_value(
+ "mYojana Settings", "enable_system_notification"
+ )
- if(is_system_notification_enabled != 1):
+ if is_system_notification_enabled != 1:
frappe.throw("System Notification is disabled. Please enable it from mYojana Settings")
diff --git a/myojana/myojana/doctype/myojana_user/myojana_user.js b/myojana/myojana/doctype/myojana_user/myojana_user.js
index 62f7eb2..3887c2b 100644
--- a/myojana/myojana/doctype/myojana_user/myojana_user.js
+++ b/myojana/myojana/doctype/myojana_user/myojana_user.js
@@ -1,146 +1,153 @@
// Copyright (c) 2023, suvaidyam and contributors
// For license information, please see license.txt
-var settings = {}
+var settings = {};
const openDialog = (_cb, role_profile) => {
- var doctypes = settings?.role_doctype_mapping?.filter((e) => e.doctyperef && e.role_profile ==role_profile);
- const doctypes_arr = settings?.role_doctype_mapping
- ?.filter(e => e.doctyperef && e.role_profile === role_profile)
- .map(e => e.doctyperef) || [];
- // new_doctypes = doctypes.filter((e) => e.doctyperef && e.role_profile ==role_profile);
- if (!doctypes) {
- doctypes = settings?.doctype_which_is_shown_in_user_permission?.split(",").map(e => e.trim()).filter(f => f).join("\n");
- }
- console.log("doctypes print", doctypes, doctypes_arr)
- return new frappe.ui.Dialog({
- title: "Add User Permission",
- fields: [
- {
- "fieldname": "select_doctype",
- "fieldtype": "Autocomplete",
- "label": "Select Doctype",
- "options": doctypes_arr,
- // "default": doctypes.split("\n")
- },
- {
- "depends_on": "eval:doc.select_doctype==\"State\"",
- "fieldname": "select_states",
- "fieldtype": "Table MultiSelect",
- "label": "Select States",
- "options": "State Child"
- },
- {
- "depends_on": "eval:doc.select_doctype==\"District\"",
- "fieldname": "select_districts",
- "fieldtype": "Table MultiSelect",
- "label": "Select Districts",
- "options": "District Child"
- },
- {
- "depends_on": "eval:doc.select_doctype==\"Block\"",
- "fieldname": "select_blocks",
- "fieldtype": "Table MultiSelect",
- "label": "Select Blocks",
- "options": "Block Child"
- },
- {
- "depends_on": "eval:doc.select_doctype==\"Village\"",
- "fieldname": "select_villages",
- "fieldtype": "Table MultiSelect",
- "label": "Select Villages",
- "options": "Village Child"
- },
- {
- "depends_on": "eval:doc.select_doctype==\"Centre\"",
- "fieldname": "select_centres",
- "fieldtype": "Table MultiSelect",
- "label": "Select Centres",
- "options": "Centre Child"
- },
- {
- "depends_on": "eval:doc.select_doctype==\"Sub Centre\"",
- "fieldname": "select_sub_centres",
- "fieldtype": "Table MultiSelect",
- "label": "Select Sub Centres",
- "options": "Sub Centre Child"
- }
- ],
- primary_action_label: 'Submit',
- async primary_action(values) {
- // Log the selected values
- let doctype = values.select_doctype;
- console.log(doctype);
- let selected_keys;
- switch (doctype) {
- case "State":
- selected_keys = values.select_states;
- console.log(selected_keys)
- await loop_values(selected_keys, doctype, cur_frm, 'state')
- break;
- case "District":
- selected_keys = values.select_districts;
- console.log(selected_keys)
- await loop_values(selected_keys, doctype, cur_frm, 'district')
- break;
- case "Block":
- selected_keys = values.select_blocks;
- console.log(selected_keys)
- await loop_values(selected_keys, doctype, cur_frm, 'block')
- break;
- case "Village":
- selected_keys = values.select_villages;
- console.log(selected_keys)
- await loop_values(selected_keys, doctype, cur_frm, 'village')
- break;
- case "Centre":
- selected_keys = values.select_centres;
- console.log(selected_keys)
- await loop_values(selected_keys, doctype, cur_frm, 'centre')
- break;
- case "Sub Centre":
- selected_keys = values.select_sub_centres;
- console.log(selected_keys)
- await loop_values(selected_keys, doctype, cur_frm, 'sub_centre')
- break
- default:
- break;
- }
- console.log("cur_frm", cur_frm)
- _cb(cur_frm)
- this.hide();
- }
- })
-}
+ var doctypes = settings?.role_doctype_mapping?.filter(
+ (e) => e.doctyperef && e.role_profile == role_profile
+ );
+ const doctypes_arr =
+ settings?.role_doctype_mapping
+ ?.filter((e) => e.doctyperef && e.role_profile === role_profile)
+ .map((e) => e.doctyperef) || [];
+ // new_doctypes = doctypes.filter((e) => e.doctyperef && e.role_profile ==role_profile);
+ if (!doctypes) {
+ doctypes = settings?.doctype_which_is_shown_in_user_permission
+ ?.split(",")
+ .map((e) => e.trim())
+ .filter((f) => f)
+ .join("\n");
+ }
+ console.log("doctypes print", doctypes, doctypes_arr);
+ return new frappe.ui.Dialog({
+ title: "Add User Permission",
+ fields: [
+ {
+ fieldname: "select_doctype",
+ fieldtype: "Autocomplete",
+ label: "Select Doctype",
+ options: doctypes_arr,
+ // "default": doctypes.split("\n")
+ },
+ {
+ depends_on: 'eval:doc.select_doctype=="State"',
+ fieldname: "select_states",
+ fieldtype: "Table MultiSelect",
+ label: "Select States",
+ options: "State Child",
+ },
+ {
+ depends_on: 'eval:doc.select_doctype=="District"',
+ fieldname: "select_districts",
+ fieldtype: "Table MultiSelect",
+ label: "Select Districts",
+ options: "District Child",
+ },
+ {
+ depends_on: 'eval:doc.select_doctype=="Block"',
+ fieldname: "select_blocks",
+ fieldtype: "Table MultiSelect",
+ label: "Select Blocks",
+ options: "Block Child",
+ },
+ {
+ depends_on: 'eval:doc.select_doctype=="Village"',
+ fieldname: "select_villages",
+ fieldtype: "Table MultiSelect",
+ label: "Select Villages",
+ options: "Village Child",
+ },
+ {
+ depends_on: 'eval:doc.select_doctype=="Centre"',
+ fieldname: "select_centres",
+ fieldtype: "Table MultiSelect",
+ label: "Select Centres",
+ options: "Centre Child",
+ },
+ {
+ depends_on: 'eval:doc.select_doctype=="Sub Centre"',
+ fieldname: "select_sub_centres",
+ fieldtype: "Table MultiSelect",
+ label: "Select Sub Centres",
+ options: "Sub Centre Child",
+ },
+ ],
+ primary_action_label: "Submit",
+ async primary_action(values) {
+ // Log the selected values
+ let doctype = values.select_doctype;
+ console.log(doctype);
+ let selected_keys;
+ switch (doctype) {
+ case "State":
+ selected_keys = values.select_states;
+ console.log(selected_keys);
+ await loop_values(selected_keys, doctype, cur_frm, "state");
+ break;
+ case "District":
+ selected_keys = values.select_districts;
+ console.log(selected_keys);
+ await loop_values(selected_keys, doctype, cur_frm, "district");
+ break;
+ case "Block":
+ selected_keys = values.select_blocks;
+ console.log(selected_keys);
+ await loop_values(selected_keys, doctype, cur_frm, "block");
+ break;
+ case "Village":
+ selected_keys = values.select_villages;
+ console.log(selected_keys);
+ await loop_values(selected_keys, doctype, cur_frm, "village");
+ break;
+ case "Centre":
+ selected_keys = values.select_centres;
+ console.log(selected_keys);
+ await loop_values(selected_keys, doctype, cur_frm, "centre");
+ break;
+ case "Sub Centre":
+ selected_keys = values.select_sub_centres;
+ console.log(selected_keys);
+ await loop_values(selected_keys, doctype, cur_frm, "sub_centre");
+ break;
+ default:
+ break;
+ }
+ console.log("cur_frm", cur_frm);
+ _cb(cur_frm);
+ this.hide();
+ },
+ });
+};
const delete_button = async (frm) => {
- document.querySelectorAll(".delete-button").forEach(element => {
- element.onclick = async (e) => {
- frappe.confirm('Are you sure you want to delete this permission?',
- async () => {
- let list = await callAPI({
- method: 'frappe.desk.reportview.delete_items',
- freeze: true,
- args: {
- items: [e.target.id],
- doctype: "User Permission",
- },
-
- freeze_message: __("Deleting Data ..."),
- })
- await render_tables(frm)
- },
- () => {
- return
- }
- )
- };
- });
+ document.querySelectorAll(".delete-button").forEach((element) => {
+ element.onclick = async (e) => {
+ frappe.confirm(
+ "Are you sure you want to delete this permission?",
+ async () => {
+ let list = await callAPI({
+ method: "frappe.desk.reportview.delete_items",
+ freeze: true,
+ args: {
+ items: [e.target.id],
+ doctype: "User Permission",
+ },
-}
+ freeze_message: __("Deleting Data ..."),
+ });
+ await render_tables(frm);
+ },
+ () => {
+ return;
+ }
+ );
+ };
+ });
+};
const render_tables = async (frm) => {
- let list = await get_permission(frm.doc.name)
- console.log(list)
- let tables = `
+ let list = await get_permission(frm.doc.name);
+ console.log(list);
+ let tables = `
| Sr.No |
@@ -150,150 +157,156 @@ const render_tables = async (frm) => {
- `
- for (let i = 0; i < list?.length; i++) {
- tables = tables + `
+ `;
+ for (let i = 0; i < list?.length; i++) {
+ tables =
+ tables +
+ `
| ${i + 1} |
${list?.[i].allow} |
${list?.[i].name_value} |
- |
+ |
- `
- }
- tables = tables + `
+ `;
+ }
+ tables =
+ tables +
+ `
`;
- if (list?.length) {
- document.getElementById('datatable').innerHTML = tables
- } else {
- document.getElementById('datatable').innerHTML = ''
- }
- delete_button(frm)
-}
+ if (list?.length) {
+ document.getElementById("datatable").innerHTML = tables;
+ } else {
+ document.getElementById("datatable").innerHTML = "";
+ }
+ delete_button(frm);
+};
const loop_values = async (selected_keys, doctype, frm, key) => {
- for (let i = 0; i < selected_keys.length; i++) {
- console.log(doctype, selected_keys[i][key])
- await set_permission(doctype, selected_keys[i][key], frm)
- }
-}
+ for (let i = 0; i < selected_keys.length; i++) {
+ console.log(doctype, selected_keys[i][key]);
+ await set_permission(doctype, selected_keys[i][key], frm);
+ }
+};
// Calling APIs Common function
function callAPI(options) {
- return new Promise((resolve, reject) => {
- frappe.call({
- ...options,
- callback: async function (response) {
- resolve(response?.message || response?.value)
- }
- });
- })
+ return new Promise((resolve, reject) => {
+ frappe.call({
+ ...options,
+ callback: async function (response) {
+ resolve(response?.message || response?.value);
+ },
+ });
+ });
}
// get scheme lists
const set_permission = async (doctype, values, frm) => {
- let list = await callAPI({
- method: 'myojana.apis.user_permissions.create_user_permissions',
- freeze: true,
- args: {
- doc: {
- "doctype": "User Permission",
- "user": frm.doc.name,
- "allow": doctype,
- "for_value": values
- },
- action: "Save",
- },
- freeze_message: __("Saving Data"),
- })
- return list
-}
+ let list = await callAPI({
+ method: "myojana.apis.user_permissions.create_user_permissions",
+ freeze: true,
+ args: {
+ doc: {
+ doctype: "User Permission",
+ user: frm.doc.name,
+ allow: doctype,
+ for_value: values,
+ },
+ action: "Save",
+ },
+ freeze_message: __("Saving Data"),
+ });
+ return list;
+};
// get permissions
const get_permission = async (user) => {
- let list = await callAPI({
- method: 'myojana.api.get_user_permission',
- freeze: true,
- args: {
- doctype: "User Permission",
- user: user,
- view: "List",
- order_by: "",
- group_by: '',
- },
+ let list = await callAPI({
+ method: "myojana.api.get_user_permission",
+ freeze: true,
+ args: {
+ doctype: "User Permission",
+ user: user,
+ view: "List",
+ order_by: "",
+ group_by: "",
+ },
- freeze_message: __("Getting Permissions"),
- })
- return list
-}
-function defult_filter(field_name, filter_on, frm) {
- frm.fields_dict[field_name].get_query = function (doc) {
- return {
- filters: {
- [filter_on]: frm.doc.filter_on || `please select ${filter_on}`,
- },
- };
- }
+ freeze_message: __("Getting Permissions"),
+ });
+ return list;
};
+function defult_filter(field_name, filter_on, frm) {
+ frm.fields_dict[field_name].get_query = function (doc) {
+ return {
+ filters: {
+ [filter_on]: frm.doc.filter_on || `please select ${filter_on}`,
+ },
+ };
+ };
+}
function apply_filter(field_name, filter_on, frm, filter_value) {
- frm.fields_dict[field_name].get_query = function (doc) {
- return {
- filters: {
- [filter_on]: filter_value,
- },
- page_length: 1000
- };
- }
-};
+ frm.fields_dict[field_name].get_query = function (doc) {
+ return {
+ filters: {
+ [filter_on]: filter_value,
+ },
+ page_length: 1000,
+ };
+ };
+}
function extend_options_length(frm, fields) {
- fields.forEach((field) => {
- frm.set_query(field, () => {
- return { page_length: 1000 };
- });
- })
-};
+ fields.forEach((field) => {
+ frm.set_query(field, () => {
+ return { page_length: 1000 };
+ });
+ });
+}
function hide_advance_search(frm, list) {
- for (item of list) {
- frm.set_df_property(item, 'only_select', true);
- }
-};
+ for (const item of list) {
+ frm.set_df_property(item, "only_select", true);
+ }
+}
frappe.ui.form.on("Myojana User", {
- async refresh(frm) {
- await render_tables(frm);
- if (frm.is_new()) {
- frm.set_df_property('add_permission', 'hidden', true);
- } else {
- frm.set_df_property('add_permission', 'hidden', false);
- }
- frm.doc.password = frm.doc.confirm_password
- frm.doc.state ? apply_filter("centre", "state", frm, frm.doc.state) :null
- extend_options_length(frm, ["state"])
- hide_advance_search(frm, ["role_profile", "state", "centre"])
- },
- state: function (frm) {
- if (frm.doc.state) {
- apply_filter("centre", "state", frm, frm.doc.state)
- } else {
- defult_filter('centre', "state", frm)
- }
- },
- add_permission: async function (frm) {
- if (!Object.keys(settings).length) {
- settings = await callAPI({
- method: 'myojana.api.get_mYojana_settings',
- freeze: true,
- freeze_message: __("Getting Permissions"),
- })
- }
- console.log("frm.role_profile", frm.doc.role_profile)
- openDialog((_frm) => {
- render_tables(_frm)
- }, frm.doc.role_profile).show()
- // d.show();
- }
- // centre: function (frm) {
- // if (frm.doc.centre) {
- // apply_filter("sub_centre", "centre", frm, frm.doc.centre)
- // } else {
- // defult_filter('sub_centre', "centre", frm);
- // }
- // }
+ async refresh(frm) {
+ await render_tables(frm);
+ if (frm.is_new()) {
+ frm.set_df_property("add_permission", "hidden", true);
+ } else {
+ frm.set_df_property("add_permission", "hidden", false);
+ }
+ frm.doc.password = frm.doc.confirm_password;
+ frm.doc.state ? apply_filter("centre", "state", frm, frm.doc.state) : null;
+ extend_options_length(frm, ["state"]);
+ hide_advance_search(frm, ["role_profile", "state", "centre"]);
+ },
+ state: function (frm) {
+ if (frm.doc.state) {
+ apply_filter("centre", "state", frm, frm.doc.state);
+ } else {
+ defult_filter("centre", "state", frm);
+ }
+ },
+ add_permission: async function (frm) {
+ if (!Object.keys(settings).length) {
+ settings = await callAPI({
+ method: "myojana.api.get_mYojana_settings",
+ freeze: true,
+ freeze_message: __("Getting Permissions"),
+ });
+ }
+ console.log("frm.role_profile", frm.doc.role_profile);
+ openDialog((_frm) => {
+ render_tables(_frm);
+ }, frm.doc.role_profile).show();
+ // d.show();
+ },
+ // centre: function (frm) {
+ // if (frm.doc.centre) {
+ // apply_filter("sub_centre", "centre", frm, frm.doc.centre)
+ // } else {
+ // defult_filter('sub_centre', "centre", frm);
+ // }
+ // }
});
diff --git a/myojana/myojana/doctype/myojana_user/myojana_user.py b/myojana/myojana/doctype/myojana_user/myojana_user.py
index 978239d..f1ea24d 100644
--- a/myojana/myojana/doctype/myojana_user/myojana_user.py
+++ b/myojana/myojana/doctype/myojana_user/myojana_user.py
@@ -4,9 +4,10 @@
import frappe
from frappe.model.document import Document
+
class MyojanaUser(Document):
def validate(self):
- if(self.password != self.confirm_password):
+ if self.password != self.confirm_password:
frappe.throw("Password and Confirm password not matched")
def after_insert(self):
@@ -19,7 +20,6 @@ def after_insert(self):
new_user.new_password = self.confirm_password
new_user.save()
-
def on_update(self):
user_doc = frappe.get_doc("User", self.email)
user_doc.email = self.email
@@ -29,7 +29,7 @@ def on_update(self):
user_doc.user_image = self.user_image
user_doc.new_password = self.confirm_password
user_doc.save()
-
+
def on_trash(self):
# Check if the user exists
if frappe.db.exists("User", self.name):
@@ -38,4 +38,3 @@ def on_trash(self):
frappe.msgprint(f"The user {self.name} has been deleted.")
else:
frappe.msgprint(f"The user {self.name} does not exist.")
-
\ No newline at end of file
diff --git a/myojana/myojana/doctype/myojana_user/myojana_user_list.js b/myojana/myojana/doctype/myojana_user/myojana_user_list.js
index 2ce6b73..9b28f54 100644
--- a/myojana/myojana/doctype/myojana_user/myojana_user_list.js
+++ b/myojana/myojana/doctype/myojana_user/myojana_user_list.js
@@ -1,5 +1,5 @@
-frappe.listview_settings['Myojana User'] = {
- onload: function (listview) {
- $('.layout-side-section').hide();
- }
-};
\ No newline at end of file
+frappe.listview_settings["Myojana User"] = {
+ onload: function (listview) {
+ $(".layout-side-section").hide();
+ },
+};
diff --git a/myojana/myojana/doctype/primary_member/primary_member_list.js b/myojana/myojana/doctype/primary_member/primary_member_list.js
index e9689d2..b3d3915 100644
--- a/myojana/myojana/doctype/primary_member/primary_member_list.js
+++ b/myojana/myojana/doctype/primary_member/primary_member_list.js
@@ -1,5 +1,5 @@
-frappe.listview_settings['Primary Member'] = {
- onload: function (listview) {
- $('.layout-side-section').hide();
- }
-};
\ No newline at end of file
+frappe.listview_settings["Primary Member"] = {
+ onload: function (listview) {
+ $(".layout-side-section").hide();
+ },
+};
diff --git a/myojana/myojana/doctype/sub_centre/sub_centre.js b/myojana/myojana/doctype/sub_centre/sub_centre.js
index 20fce6c..e7edfae 100644
--- a/myojana/myojana/doctype/sub_centre/sub_centre.js
+++ b/myojana/myojana/doctype/sub_centre/sub_centre.js
@@ -2,13 +2,12 @@
// For license information, please see license.txt
frappe.ui.form.on("Sub Centre", {
-
- refresh(frm) {
- apply_filter("centre", "State", frm, frm.doc.state);
- extend_options_length(frm, ['state','centre']);
- hide_advance_search(frm, ['state','centre'])
- },
- state: function (frm) {
- apply_filter("centre", "State", frm, frm.doc.state);
- }
+ refresh(frm) {
+ apply_filter("centre", "State", frm, frm.doc.state);
+ extend_options_length(frm, ["state", "centre"]);
+ hide_advance_search(frm, ["state", "centre"]);
+ },
+ state: function (frm) {
+ apply_filter("centre", "State", frm, frm.doc.state);
+ },
});
diff --git a/myojana/myojana/doctype/sub_centre/sub_centre_list.js b/myojana/myojana/doctype/sub_centre/sub_centre_list.js
index 7709ee2..a2ad7f7 100644
--- a/myojana/myojana/doctype/sub_centre/sub_centre_list.js
+++ b/myojana/myojana/doctype/sub_centre/sub_centre_list.js
@@ -1,5 +1,5 @@
-frappe.listview_settings['Sub Centre'] = {
- onload: function (listview) {
- $('.layout-side-section').hide();
- }
-};
\ No newline at end of file
+frappe.listview_settings["Sub Centre"] = {
+ onload: function (listview) {
+ $(".layout-side-section").hide();
+ },
+};
diff --git a/myojana/myojana/report/age_wise_beneficiaries/age_wise_beneficiaries.js b/myojana/myojana/report/age_wise_beneficiaries/age_wise_beneficiaries.js
index 3e8978e..a0d6afb 100644
--- a/myojana/myojana/report/age_wise_beneficiaries/age_wise_beneficiaries.js
+++ b/myojana/myojana/report/age_wise_beneficiaries/age_wise_beneficiaries.js
@@ -2,43 +2,40 @@
// For license information, please see license.txt
var filters = [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": "From Date",
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: "From Date",
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": "To Date"
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: "To Date",
},
];
if (frappe.user_roles.includes("Admin")) {
filters.push(
{
- "fieldname": "centre",
- "fieldtype": "Link",
- "label": "Centre",
- "options": "Centre"
+ fieldname: "centre",
+ fieldtype: "Link",
+ label: "Centre",
+ options: "Centre",
},
{
- "fieldname": "district",
- "fieldtype": "Link",
- "label": "District",
- "options": "District",
- "get_query": function () {
- var state = frappe.query_report.get_filter_value('state');
+ fieldname: "district",
+ fieldtype: "Link",
+ label: "District",
+ options: "District",
+ get_query: function () {
+ var state = frappe.query_report.get_filter_value("state");
return {
filters: {
- 'state': state
- }
+ state: state,
+ },
};
- }
+ },
}
- )
+ );
}
frappe.query_reports["Age-wise beneficiaries"] = {
- filters: filters
+ filters: filters,
};
-
-
-
diff --git a/myojana/myojana/report/age_wise_beneficiaries/age_wise_beneficiaries.json b/myojana/myojana/report/age_wise_beneficiaries/age_wise_beneficiaries.json
index 5b4aae0..226f158 100644
--- a/myojana/myojana/report/age_wise_beneficiaries/age_wise_beneficiaries.json
+++ b/myojana/myojana/report/age_wise_beneficiaries/age_wise_beneficiaries.json
@@ -1,15 +1,16 @@
{
- "add_total_row": 1,
+ "add_total_row": 0,
+ "add_translate_data": 0,
"columns": [],
"creation": "2024-01-16 10:06:38.820516",
"disabled": 0,
"docstatus": 0,
"doctype": "Report",
"filters": [],
- "idx": 0,
+ "idx": 1,
"is_standard": "Yes",
- "letterhead": null,
- "modified": "2025-04-01 10:57:03.277066",
+ "letter_head": null,
+ "modified": "2026-06-09 12:38:52.009075",
"modified_by": "Administrator",
"module": "myojana",
"name": "Age-wise beneficiaries",
diff --git a/myojana/myojana/report/age_wise_beneficiaries/age_wise_beneficiaries.py b/myojana/myojana/report/age_wise_beneficiaries/age_wise_beneficiaries.py
index e0f9edc..5edbd8d 100644
--- a/myojana/myojana/report/age_wise_beneficiaries/age_wise_beneficiaries.py
+++ b/myojana/myojana/report/age_wise_beneficiaries/age_wise_beneficiaries.py
@@ -3,33 +3,28 @@
import frappe
+
from myojana.utils.report_filter import ReportFilter
def execute(filters=None):
- columns = [
- {
- "fieldname": "age_category",
- "label": "Age Category",
- "fieldtype": "Data",
- "width": 200
- },
- {
- "fieldname": "number_of_beneficiaries",
- "label": "Number of beneficiaries",
- "fieldtype": "Int",
- "width": 300
- }
- ]
- condition_str = ReportFilter.set_report_filters(
- filters, 'date_of_visit', True)
-
- if condition_str:
- condition_str = f"WHERE {condition_str}"
- else:
- condition_str = ""
-
- sql_query = f"""
+ columns = [
+ {"fieldname": "age_category", "label": "Age Category", "fieldtype": "Data", "width": 200},
+ {
+ "fieldname": "number_of_beneficiaries",
+ "label": "Number of beneficiaries",
+ "fieldtype": "Int",
+ "width": 300,
+ },
+ ]
+ condition_str = ReportFilter.set_report_filters(filters, "date_of_visit", True)
+
+ if condition_str:
+ condition_str = f"WHERE {condition_str}"
+ else:
+ condition_str = ""
+
+ sql_query = f"""
SELECT
'Less than 5 years' AS age_category, COUNT(CASE WHEN completed_age < 5 THEN 1 END) AS number_of_beneficiaries
FROM
@@ -77,5 +72,5 @@ def execute(filters=None):
{condition_str}
"""
- data = frappe.db.sql(sql_query, as_dict=True)
- return columns, data
+ data = frappe.db.sql(sql_query, as_dict=True)
+ return columns, data
diff --git a/myojana/myojana/report/beneficiaries_who_have_received_benefits_of_2_or_more_schemes/beneficiaries_who_have_received_benefits_of_2_or_more_schemes.js b/myojana/myojana/report/beneficiaries_who_have_received_benefits_of_2_or_more_schemes/beneficiaries_who_have_received_benefits_of_2_or_more_schemes.js
index ada8886..2dbc6bf 100644
--- a/myojana/myojana/report/beneficiaries_who_have_received_benefits_of_2_or_more_schemes/beneficiaries_who_have_received_benefits_of_2_or_more_schemes.js
+++ b/myojana/myojana/report/beneficiaries_who_have_received_benefits_of_2_or_more_schemes/beneficiaries_who_have_received_benefits_of_2_or_more_schemes.js
@@ -2,16 +2,16 @@
// For license information, please see license.txt
var filters = [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": __("From Date"),
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: __("From Date"),
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": __("To Date")
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: __("To Date"),
},
];
frappe.query_reports["Beneficiaries who have received benefits of 2 or more schemes"] = {
- filters: filters
+ filters: filters,
};
diff --git a/myojana/myojana/report/beneficiaries_who_have_received_benefits_of_2_or_more_schemes/beneficiaries_who_have_received_benefits_of_2_or_more_schemes.py b/myojana/myojana/report/beneficiaries_who_have_received_benefits_of_2_or_more_schemes/beneficiaries_who_have_received_benefits_of_2_or_more_schemes.py
index 763a62f..1e83d32 100644
--- a/myojana/myojana/report/beneficiaries_who_have_received_benefits_of_2_or_more_schemes/beneficiaries_who_have_received_benefits_of_2_or_more_schemes.py
+++ b/myojana/myojana/report/beneficiaries_who_have_received_benefits_of_2_or_more_schemes/beneficiaries_who_have_received_benefits_of_2_or_more_schemes.py
@@ -1,33 +1,30 @@
import frappe
from frappe import _
+
from myojana.utils.report_filter import ReportFilter
+
def execute(filters=None):
- columns = [
- {
- "fieldname": "n",
- "label": _("No. of members"),
- "fieldtype": "Data", # Note: 'Int' should be properly capitalized
- "width": 200
- },
- {
- "fieldname": "count",
- "label": _("No. distinct member"),
- "fieldtype": "Int",
- "width": 200
- }
- ]
+ columns = [
+ {
+ "fieldname": "n",
+ "label": _("No. of members"),
+ "fieldtype": "Data", # Note: 'Int' should be properly capitalized
+ "width": 200,
+ },
+ {"fieldname": "count", "label": _("No. distinct member"), "fieldtype": "Int", "width": 200},
+ ]
+
+ # Set the report filters
+ condition_str = ReportFilter.set_report_filters(filters, "creation", True, "ben")
- # Set the report filters
- condition_str = ReportFilter.set_report_filters(filters, 'creation', True, 'ben')
-
- if condition_str:
- condition_str = f"WHERE {condition_str}"
- else:
- condition_str = ""
+ if condition_str:
+ condition_str = f"WHERE {condition_str}"
+ else:
+ condition_str = ""
- # SQL Query
- sql_query = f"""
+ # SQL Query
+ sql_query = f"""
SELECT
'Number of members' AS n,
COUNT(t.name) AS count
@@ -37,12 +34,12 @@ def execute(filters=None):
ben.name,
COUNT(sc.name) AS sc_count
FROM
- "tabBeneficiary Profiling" AS ben
- INNER JOIN "tabScheme Child" sc ON (sc.parent = ben.name AND sc.status = 'Completed')
+ `tabBeneficiary Profiling` AS ben
+ INNER JOIN `tabScheme Child` sc ON (sc.parent = ben.name AND sc.status = 'Completed')
{condition_str}
GROUP BY ben.name
HAVING COUNT(sc.name) >= 2
) as t;
"""
- data = frappe.db.sql(sql_query, as_dict=True)
- return columns, data
+ data = frappe.db.sql(sql_query, as_dict=True)
+ return columns, data
diff --git a/myojana/myojana/report/beneficiaries_who_have_received_benefits_of_3_or_more_schemes/beneficiaries_who_have_received_benefits_of_3_or_more_schemes.js b/myojana/myojana/report/beneficiaries_who_have_received_benefits_of_3_or_more_schemes/beneficiaries_who_have_received_benefits_of_3_or_more_schemes.js
index d2d4816..407d9d8 100644
--- a/myojana/myojana/report/beneficiaries_who_have_received_benefits_of_3_or_more_schemes/beneficiaries_who_have_received_benefits_of_3_or_more_schemes.js
+++ b/myojana/myojana/report/beneficiaries_who_have_received_benefits_of_3_or_more_schemes/beneficiaries_who_have_received_benefits_of_3_or_more_schemes.js
@@ -2,16 +2,16 @@
// For license information, please see license.txt
var filters = [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": __("From Date"),
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: __("From Date"),
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": __("To Date")
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: __("To Date"),
},
];
frappe.query_reports["Beneficiaries who have received benefits of 3 or more schemes"] = {
- filters: filters
+ filters: filters,
};
diff --git a/myojana/myojana/report/beneficiaries_who_have_received_benefits_of_3_or_more_schemes/beneficiaries_who_have_received_benefits_of_3_or_more_schemes.py b/myojana/myojana/report/beneficiaries_who_have_received_benefits_of_3_or_more_schemes/beneficiaries_who_have_received_benefits_of_3_or_more_schemes.py
index 3c47aef..da0785f 100644
--- a/myojana/myojana/report/beneficiaries_who_have_received_benefits_of_3_or_more_schemes/beneficiaries_who_have_received_benefits_of_3_or_more_schemes.py
+++ b/myojana/myojana/report/beneficiaries_who_have_received_benefits_of_3_or_more_schemes/beneficiaries_who_have_received_benefits_of_3_or_more_schemes.py
@@ -6,30 +6,22 @@
import frappe
from frappe import _
+
from myojana.utils.report_filter import ReportFilter
+
def execute(filters=None):
# frappe.errprint(filters)
columns = [
- {
- "fieldname":"n",
- "label":_("No. of members"),
- "fieldtype":"int",
- "width":200
- },
- {
- "fieldname":"count",
- "label":_("No. distinct member"),
- "fieldtype":"int",
- "width":200
- }
+ {"fieldname": "n", "label": _("No. of members"), "fieldtype": "int", "width": 200},
+ {"fieldname": "count", "label": _("No. distinct member"), "fieldtype": "int", "width": 200},
]
- condition_str = ReportFilter.set_report_filters(filters, 'creation', True,'ben')
+ condition_str = ReportFilter.set_report_filters(filters, "creation", True, "ben")
if condition_str:
condition_str = f"AND {condition_str}"
else:
condition_str = ""
-
+
sql_query = f"""
SELECT
'Number of members' AS n,
@@ -40,8 +32,8 @@ def execute(filters=None):
ben.name,
COUNT(sc.name) AS sc_count
FROM
- "tabBeneficiary Profiling" AS ben
- INNER JOIN "tabScheme Child" sc ON (sc.parent = ben.name AND sc.status = 'Completed')
+ `tabBeneficiary Profiling` AS ben
+ INNER JOIN `tabScheme Child` sc ON (sc.parent = ben.name AND sc.status = 'Completed')
WHERE 1=1 {condition_str}
GROUP BY ben.name
HAVING COUNT(sc.name) >= 3
diff --git a/myojana/myojana/report/beneficiaries_who_have_received_benefits_of_at_least_1_scheme_in_each_category/beneficiaries_who_have_received_benefits_of_at_least_1_scheme_in_each_category.js b/myojana/myojana/report/beneficiaries_who_have_received_benefits_of_at_least_1_scheme_in_each_category/beneficiaries_who_have_received_benefits_of_at_least_1_scheme_in_each_category.js
index c236cbb..83f888c 100644
--- a/myojana/myojana/report/beneficiaries_who_have_received_benefits_of_at_least_1_scheme_in_each_category/beneficiaries_who_have_received_benefits_of_at_least_1_scheme_in_each_category.js
+++ b/myojana/myojana/report/beneficiaries_who_have_received_benefits_of_at_least_1_scheme_in_each_category/beneficiaries_who_have_received_benefits_of_at_least_1_scheme_in_each_category.js
@@ -2,16 +2,18 @@
// For license information, please see license.txt
var filters = [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": __("From Date"),
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: __("From Date"),
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": __("To Date")
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: __("To Date"),
},
];
-frappe.query_reports["Beneficiaries who have received benefits of at least 1 scheme in each category"] = {
- filters: filters
+frappe.query_reports[
+ "Beneficiaries who have received benefits of at least 1 scheme in each category"
+] = {
+ filters: filters,
};
diff --git a/myojana/myojana/report/beneficiaries_who_have_received_benefits_of_at_least_1_scheme_in_each_category/beneficiaries_who_have_received_benefits_of_at_least_1_scheme_in_each_category.py b/myojana/myojana/report/beneficiaries_who_have_received_benefits_of_at_least_1_scheme_in_each_category/beneficiaries_who_have_received_benefits_of_at_least_1_scheme_in_each_category.py
index b10998e..cd205c9 100644
--- a/myojana/myojana/report/beneficiaries_who_have_received_benefits_of_at_least_1_scheme_in_each_category/beneficiaries_who_have_received_benefits_of_at_least_1_scheme_in_each_category.py
+++ b/myojana/myojana/report/beneficiaries_who_have_received_benefits_of_at_least_1_scheme_in_each_category/beneficiaries_who_have_received_benefits_of_at_least_1_scheme_in_each_category.py
@@ -6,35 +6,29 @@
import frappe
from frappe import _
+
from myojana.utils.report_filter import ReportFilter
+
def execute(filters=None):
# frappe.errprint(filters)
columns = [
- {
- "fieldname":"n",
- "label":_("No. of beneficiaries"),
- "fieldtype":"int",
- "width":200
- },
- {
- "fieldname":"count",
- "label":_("No. distinct beneficiaries"),
- "fieldtype":"int",
- "width":200
- }
+ {"fieldname": "n", "label": _("No. of beneficiaries"), "fieldtype": "int", "width": 200},
+ {"fieldname": "count", "label": _("No. distinct beneficiaries"), "fieldtype": "int", "width": 200},
]
- condition_str = ReportFilter.set_report_filters(filters, 'creation', True,'bp')
+ condition_str = ReportFilter.set_report_filters(filters, "creation", True, "bp")
if condition_str:
condition_str = f"AND {condition_str}"
else:
condition_str = ""
- milestones = frappe.db.sql("SELECT DISTINCT milestone as milestone FROM `tabScheme` WHERE enabled = 1", as_dict=True)
+ milestones = frappe.db.sql(
+ "SELECT DISTINCT milestone as milestone FROM `tabScheme` WHERE enabled = 1", as_dict=True
+ )
mcount = len(milestones)
milestones = [f"'{m['milestone']}'" for m in milestones]
- query =f"""
- SELECT
+ query = f"""
+ SELECT
COUNT(t.name) as count,
'Number of beneficiaries' as n
FROM
@@ -45,8 +39,8 @@ def execute(filters=None):
from
`tabScheme Child` as s
INNER JOIN `tabBeneficiary Profiling` bp ON bp.name = parent
- WHERE
- s.parenttype = 'Beneficiary Profiling' and s.parentfield = 'scheme_table' {condition_str}
+ WHERE
+ s.parenttype = 'Beneficiary Profiling' and s.parentfield = 'scheme_table' {condition_str}
AND s.milestone_category IN ({','.join(milestones)})
GROUP BY bp.name
HAVING COUNT(DISTINCT s.milestone) = {mcount}
diff --git a/myojana/myojana/report/beneficiaries_with_bank_account/beneficiaries_with_bank_account.js b/myojana/myojana/report/beneficiaries_with_bank_account/beneficiaries_with_bank_account.js
index 11052bb..66870fe 100644
--- a/myojana/myojana/report/beneficiaries_with_bank_account/beneficiaries_with_bank_account.js
+++ b/myojana/myojana/report/beneficiaries_with_bank_account/beneficiaries_with_bank_account.js
@@ -2,25 +2,24 @@
// For license information, please see license.txt
var filters = [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": "From Date",
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: "From Date",
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": "To Date"
- }
-
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: "To Date",
+ },
];
if (!frappe.user_roles.includes("MIS executive") || frappe.user_roles.includes("Administrator")) {
filters.push({
- "fieldname": "state",
- "fieldtype": "Link",
- "label": "State",
- "options": "State"
- })
+ fieldname: "state",
+ fieldtype: "Link",
+ label: "State",
+ options: "State",
+ });
}
frappe.query_reports["Beneficiaries with Bank Account"] = {
- filters: filters
+ filters: filters,
};
diff --git a/myojana/myojana/report/beneficiaries_with_bank_account/beneficiaries_with_bank_account.py b/myojana/myojana/report/beneficiaries_with_bank_account/beneficiaries_with_bank_account.py
index 1bb207b..7fda0b9 100644
--- a/myojana/myojana/report/beneficiaries_with_bank_account/beneficiaries_with_bank_account.py
+++ b/myojana/myojana/report/beneficiaries_with_bank_account/beneficiaries_with_bank_account.py
@@ -2,30 +2,27 @@
# For license information, please see license.txt
import frappe
+
from myojana.utils.report_filter import ReportFilter
+
def execute(filters=None):
# frappe.errprint(filters)
columns = [
{
- "fieldname":"bank_account",
- "label":"Bank account status of Beneficiaries",
- "fieldtype":"Data",
- "width":300
+ "fieldname": "bank_account",
+ "label": "Bank account status of Beneficiaries",
+ "fieldtype": "Data",
+ "width": 300,
},
- {
- "fieldname":"count",
- "label":"Count",
- "fieldtype":"int",
- "width":200
- }
+ {"fieldname": "count", "label": "Count", "fieldtype": "int", "width": 200},
]
- condition_str = ReportFilter.set_report_filters(filters, 'creation', True)
+ condition_str = ReportFilter.set_report_filters(filters, "creation", True)
if condition_str:
condition_str = f"AND {condition_str}"
else:
condition_str = ""
-
+
sql_query = f"""
SELECT
CASE
@@ -42,4 +39,4 @@ def execute(filters=None):
"""
data = frappe.db.sql(sql_query, as_dict=True)
- return columns, data
\ No newline at end of file
+ return columns, data
diff --git a/myojana/myojana/report/camps_wise_beneficiaries/camps_wise_beneficiaries.js b/myojana/myojana/report/camps_wise_beneficiaries/camps_wise_beneficiaries.js
index 928a38a..d6bba2c 100644
--- a/myojana/myojana/report/camps_wise_beneficiaries/camps_wise_beneficiaries.js
+++ b/myojana/myojana/report/camps_wise_beneficiaries/camps_wise_beneficiaries.js
@@ -2,27 +2,23 @@
// For license information, please see license.txt
var filters = [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": "From Date",
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: "From Date",
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": "To Date"
- }
-
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: "To Date",
+ },
];
if (frappe.user_roles.includes("Administrator")) {
filters.push({
- "fieldname": "state",
- "fieldtype": "Link",
- "label": "State",
- "options": "State"
- },
-
-
- )
+ fieldname: "state",
+ fieldtype: "Link",
+ label: "State",
+ options: "State",
+ });
}
frappe.query_reports["Camps-wise beneficiaries"] = {
filters: filters,
diff --git a/myojana/myojana/report/camps_wise_beneficiaries/camps_wise_beneficiaries.py b/myojana/myojana/report/camps_wise_beneficiaries/camps_wise_beneficiaries.py
index 3240ecc..51d8f3b 100644
--- a/myojana/myojana/report/camps_wise_beneficiaries/camps_wise_beneficiaries.py
+++ b/myojana/myojana/report/camps_wise_beneficiaries/camps_wise_beneficiaries.py
@@ -2,30 +2,25 @@
# For license information, please see license.txt
import frappe
+
from myojana.utils.report_filter import ReportFilter
def execute(filters=None):
- columns = [
- {
- "fieldname": "camp",
- "label": "Camp",
- "fieldtype": "Data",
- "width": 400
- },
- {
- "fieldname": "count",
- "label": "Count",
- "fieldtype": "int",
- "width": 200
- }
- ]
- condition_str = ReportFilter.set_report_filters(filters, 'date_of_visit', True,)
- if condition_str:
- condition_str = f"{condition_str}"
- else:
- condition_str = "1=1"
- sql_query = f"""
+ columns = [
+ {"fieldname": "camp", "label": "Camp", "fieldtype": "Data", "width": 400},
+ {"fieldname": "count", "label": "Count", "fieldtype": "int", "width": 200},
+ ]
+ condition_str = ReportFilter.set_report_filters(
+ filters,
+ "date_of_visit",
+ True,
+ )
+ if condition_str:
+ condition_str = f"{condition_str}"
+ else:
+ condition_str = "1=1"
+ sql_query = f"""
SELECT
name_of_the_camp as camp,
COUNT(name) AS count
@@ -36,5 +31,5 @@ def execute(filters=None):
name_of_the_camp
"""
- data = frappe.db.sql(sql_query, as_dict=True)
- return columns, data
+ data = frappe.db.sql(sql_query, as_dict=True)
+ return columns, data
diff --git a/myojana/myojana/report/centre_wise_demands/centre_wise_demands.js b/myojana/myojana/report/centre_wise_demands/centre_wise_demands.js
index 91de9ef..b18091e 100644
--- a/myojana/myojana/report/centre_wise_demands/centre_wise_demands.js
+++ b/myojana/myojana/report/centre_wise_demands/centre_wise_demands.js
@@ -2,27 +2,23 @@
// For license information, please see license.txt
var filters = [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": "From Date",
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: "From Date",
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": "To Date"
- }
-
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: "To Date",
+ },
];
if (frappe.user_roles.includes("Administrator")) {
filters.push({
- "fieldname": "state",
- "fieldtype": "Link",
- "label": "State",
- "options": "State"
- },
-
-
- )
+ fieldname: "state",
+ fieldtype: "Link",
+ label: "State",
+ options: "State",
+ });
}
frappe.query_reports["Centre wise demands"] = {
filters: filters,
diff --git a/myojana/myojana/report/centre_wise_demands/centre_wise_demands.json b/myojana/myojana/report/centre_wise_demands/centre_wise_demands.json
index d9025bc..53b3f7f 100644
--- a/myojana/myojana/report/centre_wise_demands/centre_wise_demands.json
+++ b/myojana/myojana/report/centre_wise_demands/centre_wise_demands.json
@@ -1,38 +1,40 @@
{
- "add_total_row": 0,
- "columns": [],
- "creation": "2024-01-16 10:49:32.351251",
- "disabled": 0,
- "docstatus": 0,
- "doctype": "Report",
- "filters": [],
- "idx": 0,
- "is_standard": "Yes",
- "letterhead": null,
- "modified": "2024-01-16 10:49:32.351251",
- "modified_by": "Administrator",
- "module": "myojana",
- "name": "Centre wise demands",
- "owner": "Administrator",
- "prepared_report": 0,
- "ref_doctype": "Beneficiary Profiling",
- "report_name": "Centre wise demands",
- "report_type": "Script Report",
- "roles": [
- {
- "role": "Admin"
- },
- {
- "role": "CSC Member"
- },
- {
- "role": "Sub-Centre"
- },
- {
- "role": "MIS executive"
- },
- {
- "role": "System Manager"
- }
- ]
+ "add_total_row": 0,
+ "add_translate_data": 0,
+ "columns": [],
+ "creation": "2024-01-16 10:49:32.351251",
+ "disabled": 0,
+ "docstatus": 0,
+ "doctype": "Report",
+ "filters": [],
+ "idx": 1,
+ "is_standard": "Yes",
+ "letter_head": null,
+ "modified": "2026-06-10 10:19:10.406002",
+ "modified_by": "Administrator",
+ "module": "myojana",
+ "name": "Centre wise demands",
+ "owner": "Administrator",
+ "prepared_report": 0,
+ "ref_doctype": "Beneficiary Profiling",
+ "report_name": "Centre wise demands",
+ "report_type": "Script Report",
+ "roles": [
+ {
+ "role": "Admin"
+ },
+ {
+ "role": "CSC Member"
+ },
+ {
+ "role": "Sub-Centre"
+ },
+ {
+ "role": "MIS executive"
+ },
+ {
+ "role": "System Manager"
+ }
+ ],
+ "timeout": 0
}
\ No newline at end of file
diff --git a/myojana/myojana/report/centre_wise_demands/centre_wise_demands.py b/myojana/myojana/report/centre_wise_demands/centre_wise_demands.py
index 3d6ffab..3ffeee2 100644
--- a/myojana/myojana/report/centre_wise_demands/centre_wise_demands.py
+++ b/myojana/myojana/report/centre_wise_demands/centre_wise_demands.py
@@ -2,60 +2,60 @@
# For license information, please see license.txt
import frappe
+
from myojana.utils.report_filter import ReportFilter
def execute(filters=None):
- columns = [
- {
- "fieldname": "centre_name",
- "label": " Centre Name ",
- "fieldtype": "Data",
- "width": 200,
-
- },
- {
- "fieldname": "total_demands",
- "label": "Total Demands",
- "fieldtype": "Data",
- "width": 130,
- },
- {
- "fieldname": "open_demands",
- "label": "Open Demands",
- "fieldtype": "Data",
- "width": 130,
- },
- {
- "fieldname": "submitted_demands",
- "label": "Submitted Demands",
- "fieldtype": "Data",
- "width": 160,
- },
- {
- "fieldname": "completed_demands",
- "label": "Completed Demands",
- "fieldtype": "Data",
- "width": 170,
- },
- {
- "fieldname": "rejected_demands",
- "label": "Rejected Demands",
- "fieldtype": "Data",
- "width": 130,
- },
- {
- "fieldname": "closed_demands",
- "label": "Closed Demands",
- "fieldtype": "Data",
- "width": 130,
- }
- ]
+ columns = [
+ {
+ "fieldname": "centre_name",
+ "label": " Centre Name ",
+ "fieldtype": "Data",
+ "width": 200,
+ },
+ {
+ "fieldname": "total_demands",
+ "label": "Total Demands",
+ "fieldtype": "Data",
+ "width": 130,
+ },
+ {
+ "fieldname": "open_demands",
+ "label": "Open Demands",
+ "fieldtype": "Data",
+ "width": 130,
+ },
+ {
+ "fieldname": "submitted_demands",
+ "label": "Submitted Demands",
+ "fieldtype": "Data",
+ "width": 160,
+ },
+ {
+ "fieldname": "completed_demands",
+ "label": "Completed Demands",
+ "fieldtype": "Data",
+ "width": 170,
+ },
+ {
+ "fieldname": "rejected_demands",
+ "label": "Rejected Demands",
+ "fieldtype": "Data",
+ "width": 130,
+ },
+ {
+ "fieldname": "closed_demands",
+ "label": "Closed Demands",
+ "fieldtype": "Data",
+ "width": 130,
+ },
+ ]
- condition_str = ReportFilter.set_report_filters(filters, 'date_of_visit', True , 'bp')
- condition_str = f"WHERE {condition_str}" if condition_str else ""
+ condition_str = ReportFilter.set_report_filters(filters, "date_of_visit", True, "bp")
+ condition_str = f"WHERE {condition_str}" if condition_str else ""
- sql_query = f"""
+ sql_query = f"""
SELECT
tw.centre_name,
SUM(CASE WHEN (sc.status = 'Open') THEN 1 ELSE 0 END) as open_demands,
@@ -75,6 +75,5 @@ def execute(filters=None):
tw.centre_name;
"""
-
- data = frappe.db.sql(sql_query, as_dict=True)
- return columns, data
\ No newline at end of file
+ data = frappe.db.sql(sql_query, as_dict=True)
+ return columns, data
diff --git a/myojana/myojana/report/current_location(agrasar)/current_location(agrasar).js b/myojana/myojana/report/current_location(agrasar)/current_location(agrasar).js
index db44968..3e866bf 100644
--- a/myojana/myojana/report/current_location(agrasar)/current_location(agrasar).js
+++ b/myojana/myojana/report/current_location(agrasar)/current_location(agrasar).js
@@ -2,27 +2,25 @@
// For license information, please see license.txt
var filters = [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": "From Date",
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: "From Date",
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": "To Date"
- }
-
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: "To Date",
+ },
];
if (!frappe.user_roles.includes("MIS executive") || frappe.user_roles.includes("Administrator")) {
filters.push({
- "fieldname": "centre",
- "fieldtype": "Link",
- "options": "Centre",
- "label": "Centre"
-
- })
+ fieldname: "centre",
+ fieldtype: "Link",
+ options: "Centre",
+ label: "Centre",
+ });
}
frappe.query_reports["Current Location(agrasar)"] = {
- filters: filters
+ filters: filters,
};
diff --git a/myojana/myojana/report/current_location(agrasar)/current_location(agrasar).py b/myojana/myojana/report/current_location(agrasar)/current_location(agrasar).py
index 7781117..55c5cf7 100644
--- a/myojana/myojana/report/current_location(agrasar)/current_location(agrasar).py
+++ b/myojana/myojana/report/current_location(agrasar)/current_location(agrasar).py
@@ -2,48 +2,47 @@
# For license information, please see license.txt
import frappe
+
from myojana.utils.report_filter import ReportFilter
def execute(filters=None):
- columns = [
- {
- "fieldname": "location",
- "label": "Current Location",
- "fieldtype": "Data",
- "width": 150,
-
- },
- {
- "fieldname": "count",
- "label": "count",
- "fieldtype": "Data",
- "width": 160,
- },
- ]
-
- condition_str = ReportFilter.set_report_filters(filters, 'date_of_visit', True , 'ben')
- if condition_str:
- condition_str = f"AND {condition_str}"
- else:
- condition_str = ""
-
- sql_query = f"""
- SELECT
- cl.name_of_location AS location,
+ columns = [
+ {
+ "fieldname": "location",
+ "label": "Current Location",
+ "fieldtype": "Data",
+ "width": 150,
+ },
+ {
+ "fieldname": "count",
+ "label": "count",
+ "fieldtype": "Data",
+ "width": 160,
+ },
+ ]
+
+ condition_str = ReportFilter.set_report_filters(filters, "date_of_visit", True, "ben")
+ if condition_str:
+ condition_str = f"AND {condition_str}"
+ else:
+ condition_str = ""
+
+ sql_query = f"""
+ SELECT
+ cl.name_of_location AS location,
COUNT(ben.name) AS count
- FROM
+ FROM
`tabBeneficiary Profiling` AS ben
- LEFT JOIN
- `tabCurrent location` AS cl
+ LEFT JOIN
+ `tabCurrent location` AS cl
ON cl.name = ben.custom_current_location
WHERE 1=1 {condition_str}
- GROUP BY
+ GROUP BY
cl.name
- ORDER BY
+ ORDER BY
Count DESC
"""
-
- data = frappe.db.sql(sql_query, as_dict=True)
- return columns, data
+ data = frappe.db.sql(sql_query, as_dict=True)
+ return columns, data
diff --git a/myojana/myojana/report/district_wise_demands/district_wise_demands.js b/myojana/myojana/report/district_wise_demands/district_wise_demands.js
index 4a2fd6c..af6410b 100644
--- a/myojana/myojana/report/district_wise_demands/district_wise_demands.js
+++ b/myojana/myojana/report/district_wise_demands/district_wise_demands.js
@@ -2,39 +2,39 @@
// For license information, please see license.txt
var filters = [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": "From Date",
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: "From Date",
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": "To Date"
- }
-
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: "To Date",
+ },
];
if (!frappe.user_roles.includes("MIS executive") || frappe.user_roles.includes("Administrator")) {
- filters.push({
- "fieldname": "state",
- "fieldtype": "Link",
- "label": "State",
- "options": "State"
- },
- {
- "fieldname": "district",
- "fieldtype": "Link",
- "label": "District",
- "options": "District",
- "get_query": function() {
- var state = frappe.query_report.get_filter_value('state');
- return {
- filters: {
- 'state': state
- }
- };
+ filters.push(
+ {
+ fieldname: "state",
+ fieldtype: "Link",
+ label: "State",
+ options: "State",
+ },
+ {
+ fieldname: "district",
+ fieldtype: "Link",
+ label: "District",
+ options: "District",
+ get_query: function () {
+ var state = frappe.query_report.get_filter_value("state");
+ return {
+ filters: {
+ state: state,
+ },
+ };
+ },
}
- }
- )
+ );
}
frappe.query_reports["District-wise demands"] = {
filters: filters,
diff --git a/myojana/myojana/report/district_wise_demands/district_wise_demands.py b/myojana/myojana/report/district_wise_demands/district_wise_demands.py
index 6898a4a..53f5f42 100644
--- a/myojana/myojana/report/district_wise_demands/district_wise_demands.py
+++ b/myojana/myojana/report/district_wise_demands/district_wise_demands.py
@@ -2,63 +2,63 @@
# For license information, please see license.txt
import frappe
+
from myojana.utils.report_filter import ReportFilter
def execute(filters=None):
- columns = [
- {
- "fieldname": "district_name",
- "label": " Name Of District ",
- "fieldtype": "Data",
- "width": 200,
-
- },
- {
- "fieldname": "total_demands",
- "label": "Total Demands",
- "fieldtype": "Data",
- "width": 130,
- },
- {
- "fieldname": "open_demands",
- "label": "Open Demands",
- "fieldtype": "Data",
- "width": 130,
- },
- {
- "fieldname": "submitted_demands",
- "label": "Submitted Demands",
- "fieldtype": "Data",
- "width": 160,
- },
- {
- "fieldname": "completed_demands",
- "label": "Completed Demands",
- "fieldtype": "Data",
- "width": 170,
- },
- {
- "fieldname": "rejected_demands",
- "label": "Rejected Demands",
- "fieldtype": "Data",
- "width": 130,
- },
- {
- "fieldname": "closed_demands",
- "label": "Closed Demands",
- "fieldtype": "Data",
- "width": 130,
- },
- ]
+ columns = [
+ {
+ "fieldname": "district_name",
+ "label": " Name Of District ",
+ "fieldtype": "Data",
+ "width": 200,
+ },
+ {
+ "fieldname": "total_demands",
+ "label": "Total Demands",
+ "fieldtype": "Data",
+ "width": 130,
+ },
+ {
+ "fieldname": "open_demands",
+ "label": "Open Demands",
+ "fieldtype": "Data",
+ "width": 130,
+ },
+ {
+ "fieldname": "submitted_demands",
+ "label": "Submitted Demands",
+ "fieldtype": "Data",
+ "width": 160,
+ },
+ {
+ "fieldname": "completed_demands",
+ "label": "Completed Demands",
+ "fieldtype": "Data",
+ "width": 170,
+ },
+ {
+ "fieldname": "rejected_demands",
+ "label": "Rejected Demands",
+ "fieldtype": "Data",
+ "width": 130,
+ },
+ {
+ "fieldname": "closed_demands",
+ "label": "Closed Demands",
+ "fieldtype": "Data",
+ "width": 130,
+ },
+ ]
- condition_str = ReportFilter.set_report_filters(filters, 'date_of_visit', True , 'bp')
- if condition_str:
- condition_str = f"WHERE {condition_str}"
- else:
- condition_str = ""
+ condition_str = ReportFilter.set_report_filters(filters, "date_of_visit", True, "bp")
+ if condition_str:
+ condition_str = f"WHERE {condition_str}"
+ else:
+ condition_str = ""
- sql_query = f"""
+ sql_query = f"""
SELECT
COALESCE(d.district_name, 'Unknown') AS district_name,
SUM(CASE WHEN (sc.status = 'Open') THEN 1 ELSE 0 END) as open_demands,
@@ -78,8 +78,5 @@ def execute(filters=None):
COALESCE(d.district_name, 'Unknown');
"""
-
-
-
- data = frappe.db.sql(sql_query, as_dict=True)
- return columns, data
\ No newline at end of file
+ data = frappe.db.sql(sql_query, as_dict=True)
+ return columns, data
diff --git a/myojana/myojana/report/education_composition/education_composition.js b/myojana/myojana/report/education_composition/education_composition.js
index ad5eb01..cddc531 100644
--- a/myojana/myojana/report/education_composition/education_composition.js
+++ b/myojana/myojana/report/education_composition/education_composition.js
@@ -3,25 +3,24 @@
var filters = [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": "From Date",
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: "From Date",
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": "To Date"
- }
-
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: "To Date",
+ },
];
if (!frappe.user_roles.includes("MIS executive") || frappe.user_roles.includes("Administrator")) {
filters.push({
- "fieldname": "centre",
- "fieldtype": "Link",
- "label": "Centre",
- "options": "Centre"
- })
+ fieldname: "centre",
+ fieldtype: "Link",
+ label: "Centre",
+ options: "Centre",
+ });
}
frappe.query_reports["Education composition"] = {
- filters: filters
+ filters: filters,
};
diff --git a/myojana/myojana/report/education_composition/education_composition.py b/myojana/myojana/report/education_composition/education_composition.py
index 9e11109..cdd6f97 100644
--- a/myojana/myojana/report/education_composition/education_composition.py
+++ b/myojana/myojana/report/education_composition/education_composition.py
@@ -2,30 +2,22 @@
# For license information, please see license.txt
import frappe
+
from myojana.utils.report_filter import ReportFilter
+
def execute(filters=None):
# frappe.errprint(filters)
columns = [
- {
- "fieldname":"education",
- "label":"Education of beneficiary",
- "fieldtype":"Data",
- "width":400
- },
- {
- "fieldname":"count",
- "label":"Count",
- "fieldtype":"int",
- "width":200
- }
+ {"fieldname": "education", "label": "Education of beneficiary", "fieldtype": "Data", "width": 400},
+ {"fieldname": "count", "label": "Count", "fieldtype": "int", "width": 200},
]
- condition_str = ReportFilter.set_report_filters(filters, 'date_of_visit', True, 't1')
+ condition_str = ReportFilter.set_report_filters(filters, "date_of_visit", True, "t1")
if condition_str:
condition_str = f"AND {condition_str}"
else:
condition_str = ""
-
+
sql_query = f"""
SELECT
COALESCE(NULLIF(t1.education, ''), 'Unknown') AS education,
diff --git a/myojana/myojana/report/families_who_have_received_benefits_of_2_or_more_schemes/families_who_have_received_benefits_of_2_or_more_schemes.js b/myojana/myojana/report/families_who_have_received_benefits_of_2_or_more_schemes/families_who_have_received_benefits_of_2_or_more_schemes.js
index 0787fd3..f4cc30a 100644
--- a/myojana/myojana/report/families_who_have_received_benefits_of_2_or_more_schemes/families_who_have_received_benefits_of_2_or_more_schemes.js
+++ b/myojana/myojana/report/families_who_have_received_benefits_of_2_or_more_schemes/families_who_have_received_benefits_of_2_or_more_schemes.js
@@ -2,16 +2,16 @@
// For license information, please see license.txt
var filters = [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": __("From Date"),
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: __("From Date"),
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": __("To Date")
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: __("To Date"),
},
];
frappe.query_reports["Families who have received benefits of 2 or more schemes"] = {
- filters: filters
+ filters: filters,
};
diff --git a/myojana/myojana/report/families_who_have_received_benefits_of_2_or_more_schemes/families_who_have_received_benefits_of_2_or_more_schemes.py b/myojana/myojana/report/families_who_have_received_benefits_of_2_or_more_schemes/families_who_have_received_benefits_of_2_or_more_schemes.py
index 8ffa9e3..caf7e35 100644
--- a/myojana/myojana/report/families_who_have_received_benefits_of_2_or_more_schemes/families_who_have_received_benefits_of_2_or_more_schemes.py
+++ b/myojana/myojana/report/families_who_have_received_benefits_of_2_or_more_schemes/families_who_have_received_benefits_of_2_or_more_schemes.py
@@ -6,25 +6,17 @@
import frappe
from frappe import _
+
from myojana.utils.report_filter import ReportFilter
+
def execute(filters=None):
# frappe.errprint(filters)
columns = [
- {
- "fieldname":"n",
- "label":_("No. of members"),
- "fieldtype":"int",
- "width":200
- },
- {
- "fieldname":"count",
- "label":_("No. distinct Families"),
- "fieldtype":"int",
- "width":200
- }
+ {"fieldname": "n", "label": _("No. of members"), "fieldtype": "int", "width": 200},
+ {"fieldname": "count", "label": _("No. distinct Families"), "fieldtype": "int", "width": 200},
]
- condition_str = ReportFilter.set_report_filters(filters, 'date_of_visit', True, 'ben')
+ condition_str = ReportFilter.set_report_filters(filters, "date_of_visit", True, "ben")
if condition_str:
condition_str = f"AND {condition_str}"
else:
@@ -40,8 +32,8 @@ def execute(filters=None):
ben.select_primary_member,
COUNT(ben.select_primary_member) AS sc_count
FROM
- "tabBeneficiary Profiling" AS ben
- INNER JOIN "tabScheme Child" sc ON (sc.parent = ben.name AND sc.status = 'Completed')
+ `tabBeneficiary Profiling` AS ben
+ INNER JOIN `tabScheme Child` sc ON (sc.parent = ben.name AND sc.status = 'Completed')
WHERE 1=1 {condition_str}
GROUP BY ben.select_primary_member
HAVING COUNT(ben.select_primary_member) >= 2
diff --git a/myojana/myojana/report/families_who_have_received_benefits_of_3_or_more_schemes/families_who_have_received_benefits_of_3_or_more_schemes.js b/myojana/myojana/report/families_who_have_received_benefits_of_3_or_more_schemes/families_who_have_received_benefits_of_3_or_more_schemes.js
index 80851bc..9a94915 100644
--- a/myojana/myojana/report/families_who_have_received_benefits_of_3_or_more_schemes/families_who_have_received_benefits_of_3_or_more_schemes.js
+++ b/myojana/myojana/report/families_who_have_received_benefits_of_3_or_more_schemes/families_who_have_received_benefits_of_3_or_more_schemes.js
@@ -2,16 +2,16 @@
// For license information, please see license.txt
var filters = [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": __("From Date"),
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: __("From Date"),
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": __("To Date")
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: __("To Date"),
},
];
frappe.query_reports["Families who have received benefits of 3 or more schemes"] = {
- filters: filters
+ filters: filters,
};
diff --git a/myojana/myojana/report/families_who_have_received_benefits_of_3_or_more_schemes/families_who_have_received_benefits_of_3_or_more_schemes.py b/myojana/myojana/report/families_who_have_received_benefits_of_3_or_more_schemes/families_who_have_received_benefits_of_3_or_more_schemes.py
index 9191ab1..7ca3c83 100644
--- a/myojana/myojana/report/families_who_have_received_benefits_of_3_or_more_schemes/families_who_have_received_benefits_of_3_or_more_schemes.py
+++ b/myojana/myojana/report/families_who_have_received_benefits_of_3_or_more_schemes/families_who_have_received_benefits_of_3_or_more_schemes.py
@@ -6,30 +6,22 @@
import frappe
from frappe import _
+
from myojana.utils.report_filter import ReportFilter
+
def execute(filters=None):
# frappe.errprint(filters)
columns = [
- {
- "fieldname":"n",
- "label":_("No. of members"),
- "fieldtype":"int",
- "width":200
- },
- {
- "fieldname":"count",
- "label":_("No. distinct Families"),
- "fieldtype":"int",
- "width":200
- }
+ {"fieldname": "n", "label": _("No. of members"), "fieldtype": "int", "width": 200},
+ {"fieldname": "count", "label": _("No. distinct Families"), "fieldtype": "int", "width": 200},
]
- condition_str = ReportFilter.set_report_filters(filters, 'date_of_visit', True, 'ben')
+ condition_str = ReportFilter.set_report_filters(filters, "date_of_visit", True, "ben")
if condition_str:
condition_str = f"AND {condition_str}"
else:
condition_str = ""
-
+
sql_query = f"""
SELECT
'Number of members' AS n,
@@ -40,8 +32,8 @@ def execute(filters=None):
ben.select_primary_member,
COUNT(ben.select_primary_member) AS sc_count
FROM
- "tabBeneficiary Profiling" AS ben
- INNER JOIN "tabScheme Child" sc ON (sc.parent = ben.name AND sc.status = 'Completed')
+ `tabBeneficiary Profiling` AS ben
+ INNER JOIN `tabScheme Child` sc ON (sc.parent = ben.name AND sc.status = 'Completed')
WHERE 1=1 {condition_str}
GROUP BY ben.select_primary_member
HAVING COUNT(ben.select_primary_member) >= 3
diff --git a/myojana/myojana/report/families_who_have_received_benefits_of_at_least_1_scheme_in_each_category/families_who_have_received_benefits_of_at_least_1_scheme_in_each_category.js b/myojana/myojana/report/families_who_have_received_benefits_of_at_least_1_scheme_in_each_category/families_who_have_received_benefits_of_at_least_1_scheme_in_each_category.js
index efd3c8b..df66c41 100644
--- a/myojana/myojana/report/families_who_have_received_benefits_of_at_least_1_scheme_in_each_category/families_who_have_received_benefits_of_at_least_1_scheme_in_each_category.js
+++ b/myojana/myojana/report/families_who_have_received_benefits_of_at_least_1_scheme_in_each_category/families_who_have_received_benefits_of_at_least_1_scheme_in_each_category.js
@@ -2,16 +2,17 @@
// For license information, please see license.txt
var filters = [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": __("From Date"),
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: __("From Date"),
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": __("To Date")
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: __("To Date"),
},
];
-frappe.query_reports["Families who have received benefits of at least 1 scheme in each category"] = {
- filters: filters
-};
+frappe.query_reports["Families who have received benefits of at least 1 scheme in each category"] =
+ {
+ filters: filters,
+ };
diff --git a/myojana/myojana/report/families_who_have_received_benefits_of_at_least_1_scheme_in_each_category/families_who_have_received_benefits_of_at_least_1_scheme_in_each_category.py b/myojana/myojana/report/families_who_have_received_benefits_of_at_least_1_scheme_in_each_category/families_who_have_received_benefits_of_at_least_1_scheme_in_each_category.py
index eef2ff0..e86f81b 100644
--- a/myojana/myojana/report/families_who_have_received_benefits_of_at_least_1_scheme_in_each_category/families_who_have_received_benefits_of_at_least_1_scheme_in_each_category.py
+++ b/myojana/myojana/report/families_who_have_received_benefits_of_at_least_1_scheme_in_each_category/families_who_have_received_benefits_of_at_least_1_scheme_in_each_category.py
@@ -6,35 +6,29 @@
import frappe
from frappe import _
+
from myojana.utils.report_filter import ReportFilter
+
def execute(filters=None):
# frappe.errprint(filters)
columns = [
- {
- "fieldname":"n",
- "label":_("No. of families"),
- "fieldtype":"int",
- "width":200
- },
- {
- "fieldname":"count",
- "label":_("No. distinct families"),
- "fieldtype":"int",
- "width":200
- }
+ {"fieldname": "n", "label": _("No. of families"), "fieldtype": "int", "width": 200},
+ {"fieldname": "count", "label": _("No. distinct families"), "fieldtype": "int", "width": 200},
]
- condition_str = ReportFilter.set_report_filters(filters, 'date_of_visit', True, 'bp')
+ condition_str = ReportFilter.set_report_filters(filters, "date_of_visit", True, "bp")
if condition_str:
condition_str = f"AND {condition_str}"
else:
condition_str = ""
- milestones = frappe.db.sql("select distinct milestone as milestone from `tabScheme` where enabled = 1", as_dict=True)
+ milestones = frappe.db.sql(
+ "select distinct milestone as milestone from `tabScheme` where enabled = 1", as_dict=True
+ )
mcount = len(milestones)
milestones = [f"'{m['milestone']}'" for m in milestones]
- query =f"""
- SELECT
+ query = f"""
+ SELECT
COUNT(t.select_primary_member) as count,
'Number of beneficiaries' as n
FROM
@@ -44,8 +38,8 @@ def execute(filters=None):
bp.select_primary_member
FROM
`tabScheme Child` as s
- INNER JOIN `tabBeneficiary Profiling` bp ON bp.name = s.parent
- WHERE
+ INNER JOIN `tabBeneficiary Profiling` bp ON bp.name = s.parent
+ WHERE
s.parenttype = 'Beneficiary Profiling' AND s.parentfield = 'scheme_table' {condition_str}
AND s.milestone_category IN ({','.join(milestones)})
GROUP BY bp.select_primary_member
diff --git a/myojana/myojana/report/gender_composition/__init__.py b/myojana/myojana/report/gender_composition/__init__.py
index b28b04f..8b13789 100644
--- a/myojana/myojana/report/gender_composition/__init__.py
+++ b/myojana/myojana/report/gender_composition/__init__.py
@@ -1,3 +1 @@
-
-
diff --git a/myojana/myojana/report/gender_composition/gender_composition.js b/myojana/myojana/report/gender_composition/gender_composition.js
index 476b540..06e92f7 100644
--- a/myojana/myojana/report/gender_composition/gender_composition.js
+++ b/myojana/myojana/report/gender_composition/gender_composition.js
@@ -3,27 +3,24 @@
var filters = [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": "From Date",
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: "From Date",
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": "To Date"
- }
-
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: "To Date",
+ },
];
if (!frappe.user_roles.includes("MIS executive") || frappe.user_roles.includes("Administrator")) {
filters.push({
- "fieldname": "state",
- "fieldtype": "Link",
- "label": "State",
- "options": "State"
- })
+ fieldname: "state",
+ fieldtype: "Link",
+ label: "State",
+ options: "State",
+ });
}
frappe.query_reports["Gender composition"] = {
- filters: filters
+ filters: filters,
};
-
-
diff --git a/myojana/myojana/report/gender_composition/gender_composition.py b/myojana/myojana/report/gender_composition/gender_composition.py
index a6bb736..edabd28 100644
--- a/myojana/myojana/report/gender_composition/gender_composition.py
+++ b/myojana/myojana/report/gender_composition/gender_composition.py
@@ -2,30 +2,22 @@
# For license information, please see license.txt
import frappe
+
from myojana.utils.report_filter import ReportFilter
+
def execute(filters=None):
# frappe.errprint(filters)
columns = [
- {
- "fieldname":"gender",
- "label":"Gender",
- "fieldtype":"Data",
- "width":300
- },
- {
- "fieldname":"count",
- "label":"Count",
- "fieldtype":"int",
- "width":200
- }
+ {"fieldname": "gender", "label": "Gender", "fieldtype": "Data", "width": 300},
+ {"fieldname": "count", "label": "Count", "fieldtype": "int", "width": 200},
]
- condition_str = ReportFilter.set_report_filters(filters, 'creation', True)
+ condition_str = ReportFilter.set_report_filters(filters, "creation", True)
if condition_str:
condition_str = f"WHERE {condition_str}"
else:
condition_str = ""
-
+
sql_query = f"""
SELECT
COALESCE(NULLIF(gender, ''), 'Unknown') as gender,
@@ -37,4 +29,4 @@ def execute(filters=None):
COALESCE(NULLIF(gender, ''), 'Unknown');
"""
data = frappe.db.sql(sql_query, as_dict=True)
- return columns, data
\ No newline at end of file
+ return columns, data
diff --git a/myojana/myojana/report/gender_split_of_total_citizenship_id_demands/gender_split_of_total_citizenship_id_demands.js b/myojana/myojana/report/gender_split_of_total_citizenship_id_demands/gender_split_of_total_citizenship_id_demands.js
index 837b8dc..6921e51 100644
--- a/myojana/myojana/report/gender_split_of_total_citizenship_id_demands/gender_split_of_total_citizenship_id_demands.js
+++ b/myojana/myojana/report/gender_split_of_total_citizenship_id_demands/gender_split_of_total_citizenship_id_demands.js
@@ -2,16 +2,16 @@
// For license information, please see license.txt
frappe.query_reports["Gender Split of Total Citizenship ID Demands"] = {
- "filters": [
+ filters: [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": "From Date",
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: "From Date",
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": "To Date"
- }
- ]
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: "To Date",
+ },
+ ],
};
diff --git a/myojana/myojana/report/gender_split_of_total_citizenship_id_demands/gender_split_of_total_citizenship_id_demands.py b/myojana/myojana/report/gender_split_of_total_citizenship_id_demands/gender_split_of_total_citizenship_id_demands.py
index c0e314a..3ec13f8 100644
--- a/myojana/myojana/report/gender_split_of_total_citizenship_id_demands/gender_split_of_total_citizenship_id_demands.py
+++ b/myojana/myojana/report/gender_split_of_total_citizenship_id_demands/gender_split_of_total_citizenship_id_demands.py
@@ -2,66 +2,41 @@
# For license information, please see license.txt
import frappe
+
from myojana.utils.report_filter import ReportFilter
+
def execute(filters=None):
# frappe.errprint(filters)
columns = [
- {
- "fieldname":"gender",
- "label":"Gender",
- "fieldtype":"Data",
- "width":200
- },
- {
- "fieldname":"ben_count",
- "label":"Beneficiary Count",
- "fieldtype":"int",
- "width":200
- },
-
- {
- "fieldname":"open",
- "label":"Open",
- "fieldtype":"Data",
- "width":200
- },
- {
- "fieldname":"completed",
- "label":"Completed",
- "fieldtype":"Data",
- "width":200
- },
- {
- "fieldname":"under_process",
- "label":"Under Process",
- "fieldtype":"Data",
- "width":200
- }
-
+ {"fieldname": "gender", "label": "Gender", "fieldtype": "Data", "width": 200},
+ {"fieldname": "ben_count", "label": "Beneficiary Count", "fieldtype": "int", "width": 200},
+ {"fieldname": "open", "label": "Open", "fieldtype": "Data", "width": 200},
+ {"fieldname": "completed", "label": "Completed", "fieldtype": "Data", "width": 200},
+ {"fieldname": "under_process", "label": "Under Process", "fieldtype": "Data", "width": 200},
]
- condition_str = ReportFilter.set_report_filters(filters, 'date_of_visit', True, 'ben')
+ condition_str = ReportFilter.set_report_filters(filters, "date_of_visit", True, "ben")
if condition_str:
condition_str = f"AND {condition_str}"
else:
condition_str = ""
-
+
sql_query = f"""
- SELECT
+ SELECT
COUNT(ben.name) AS ben_count,
ben.gender,
SUM(CASE WHEN s.status = 'Open' THEN 1 ELSE 0 END) AS open,
SUM(CASE WHEN s.status = 'Completed' THEN 1 ELSE 0 END) AS completed,
SUM(CASE WHEN s.status = 'Under Process' THEN 1 ELSE 0 END) AS under_process
- FROM
+ FROM
`tabBeneficiary Profiling` AS ben
- LEFT JOIN `tabScheme Child` AS s
- ON ben.name = s.parent
- WHERE
- s.milestone_category = 'Citizenship Entitlement' AND s.status IN ('Open','Completed','Under Process')
+ LEFT JOIN `tabScheme Child` AS s
+ ON ben.name = s.parent
+ WHERE
+ s.milestone_category = 'Citizenship Entitlement' AND s.status IN ('Open','Completed','Under Process')
{condition_str}
- GROUP BY
+ GROUP BY
ben.gender;
"""
data = frappe.db.sql(sql_query, as_dict=True)
- return columns, data
\ No newline at end of file
+ return columns, data
diff --git a/myojana/myojana/report/gender_split_of_total_demands/gender_split_of_total_demands.js b/myojana/myojana/report/gender_split_of_total_demands/gender_split_of_total_demands.js
index 1d0bd39..56cc691 100644
--- a/myojana/myojana/report/gender_split_of_total_demands/gender_split_of_total_demands.js
+++ b/myojana/myojana/report/gender_split_of_total_demands/gender_split_of_total_demands.js
@@ -2,16 +2,16 @@
// For license information, please see license.txt
frappe.query_reports["Gender Split of Total Demands"] = {
- "filters": [
+ filters: [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": "From Date",
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: "From Date",
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": "To Date"
- }
- ]
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: "To Date",
+ },
+ ],
};
diff --git a/myojana/myojana/report/gender_split_of_total_demands/gender_split_of_total_demands.py b/myojana/myojana/report/gender_split_of_total_demands/gender_split_of_total_demands.py
index a16711b..548d645 100644
--- a/myojana/myojana/report/gender_split_of_total_demands/gender_split_of_total_demands.py
+++ b/myojana/myojana/report/gender_split_of_total_demands/gender_split_of_total_demands.py
@@ -2,66 +2,41 @@
# For license information, please see license.txt
import frappe
+
from myojana.utils.report_filter import ReportFilter
+
def execute(filters=None):
# frappe.errprint(filters)
columns = [
- {
- "fieldname":"gender",
- "label":"Gender",
- "fieldtype":"Data",
- "width":200
- },
- {
- "fieldname":"ben_count",
- "label":"Beneficiary Count",
- "fieldtype":"int",
- "width":200
- },
-
- {
- "fieldname":"open",
- "label":"Open",
- "fieldtype":"Data",
- "width":200
- },
- {
- "fieldname":"completed",
- "label":"Completed",
- "fieldtype":"Data",
- "width":200
- },
- {
- "fieldname":"under_process",
- "label":"Under Process",
- "fieldtype":"Data",
- "width":200
- }
-
+ {"fieldname": "gender", "label": "Gender", "fieldtype": "Data", "width": 200},
+ {"fieldname": "ben_count", "label": "Beneficiary Count", "fieldtype": "int", "width": 200},
+ {"fieldname": "open", "label": "Open", "fieldtype": "Data", "width": 200},
+ {"fieldname": "completed", "label": "Completed", "fieldtype": "Data", "width": 200},
+ {"fieldname": "under_process", "label": "Under Process", "fieldtype": "Data", "width": 200},
]
- condition_str = ReportFilter.set_report_filters(filters, 'date_of_visit', True, 'ben')
+ condition_str = ReportFilter.set_report_filters(filters, "date_of_visit", True, "ben")
if condition_str:
condition_str = f"AND {condition_str}"
else:
condition_str = ""
-
+
sql_query = f"""
- SELECT
+ SELECT
COUNT(ben.name) AS ben_count,
ben.gender,
SUM(CASE WHEN s.status = 'Open' THEN 1 ELSE 0 END) AS open,
SUM(CASE WHEN s.status = 'Completed' THEN 1 ELSE 0 END) AS completed,
SUM(CASE WHEN s.status = 'Under Process' THEN 1 ELSE 0 END) AS under_process
- FROM
+ FROM
`tabBeneficiary Profiling` AS ben
- LEFT JOIN `tabScheme Child` AS s
- ON ben.name = s.parent
- WHERE
- s.status IN ('Open','Completed','Under Process')
+ LEFT JOIN `tabScheme Child` AS s
+ ON ben.name = s.parent
+ WHERE
+ s.status IN ('Open','Completed','Under Process')
{condition_str}
- GROUP BY
+ GROUP BY
ben.gender;
"""
data = frappe.db.sql(sql_query, as_dict=True)
- return columns, data
\ No newline at end of file
+ return columns, data
diff --git a/myojana/myojana/report/gender_split_of_total_demands_exclusive_citizenship_id_demands/gender_split_of_total_demands_exclusive_citizenship_id_demands.js b/myojana/myojana/report/gender_split_of_total_demands_exclusive_citizenship_id_demands/gender_split_of_total_demands_exclusive_citizenship_id_demands.js
index b7e0058..0bb4396 100644
--- a/myojana/myojana/report/gender_split_of_total_demands_exclusive_citizenship_id_demands/gender_split_of_total_demands_exclusive_citizenship_id_demands.js
+++ b/myojana/myojana/report/gender_split_of_total_demands_exclusive_citizenship_id_demands/gender_split_of_total_demands_exclusive_citizenship_id_demands.js
@@ -2,16 +2,16 @@
// For license information, please see license.txt
frappe.query_reports["Gender Split of Total Demands Exclusive Citizenship ID Demands"] = {
- "filters": [
+ filters: [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": "From Date",
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: "From Date",
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": "To Date"
- }
- ]
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: "To Date",
+ },
+ ],
};
diff --git a/myojana/myojana/report/gender_split_of_total_demands_exclusive_citizenship_id_demands/gender_split_of_total_demands_exclusive_citizenship_id_demands.py b/myojana/myojana/report/gender_split_of_total_demands_exclusive_citizenship_id_demands/gender_split_of_total_demands_exclusive_citizenship_id_demands.py
index fafa4dc..5414d23 100644
--- a/myojana/myojana/report/gender_split_of_total_demands_exclusive_citizenship_id_demands/gender_split_of_total_demands_exclusive_citizenship_id_demands.py
+++ b/myojana/myojana/report/gender_split_of_total_demands_exclusive_citizenship_id_demands/gender_split_of_total_demands_exclusive_citizenship_id_demands.py
@@ -2,66 +2,41 @@
# For license information, please see license.txt
import frappe
+
from myojana.utils.report_filter import ReportFilter
+
def execute(filters=None):
# frappe.errprint(filters)
columns = [
- {
- "fieldname":"gender",
- "label":"Gender",
- "fieldtype":"Data",
- "width":200
- },
- {
- "fieldname":"ben_count",
- "label":"Beneficiary Count",
- "fieldtype":"int",
- "width":200
- },
-
- {
- "fieldname":"open",
- "label":"Open",
- "fieldtype":"Data",
- "width":200
- },
- {
- "fieldname":"completed",
- "label":"Completed",
- "fieldtype":"Data",
- "width":200
- },
- {
- "fieldname":"under_process",
- "label":"Under Process",
- "fieldtype":"Data",
- "width":200
- }
-
+ {"fieldname": "gender", "label": "Gender", "fieldtype": "Data", "width": 200},
+ {"fieldname": "ben_count", "label": "Beneficiary Count", "fieldtype": "int", "width": 200},
+ {"fieldname": "open", "label": "Open", "fieldtype": "Data", "width": 200},
+ {"fieldname": "completed", "label": "Completed", "fieldtype": "Data", "width": 200},
+ {"fieldname": "under_process", "label": "Under Process", "fieldtype": "Data", "width": 200},
]
- condition_str = ReportFilter.set_report_filters(filters, 'date_of_visit', True, 'ben')
+ condition_str = ReportFilter.set_report_filters(filters, "date_of_visit", True, "ben")
if condition_str:
condition_str = f"AND {condition_str}"
else:
condition_str = ""
-
+
sql_query = f"""
- SELECT
+ SELECT
COUNT(ben.name) AS ben_count,
ben.gender,
SUM(CASE WHEN s.status = 'Open' THEN 1 ELSE 0 END) AS open,
SUM(CASE WHEN s.status = 'Completed' THEN 1 ELSE 0 END) AS completed,
SUM(CASE WHEN s.status = 'Under Process' THEN 1 ELSE 0 END) AS under_process
- FROM
+ FROM
`tabBeneficiary Profiling` AS ben
- LEFT JOIN `tabScheme Child` AS s
- ON ben.name = s.parent
- WHERE
- s.milestone_category != 'Citizenship Entitlement' AND s.status IN ('Open','Completed','Under Process')
+ LEFT JOIN `tabScheme Child` AS s
+ ON ben.name = s.parent
+ WHERE
+ s.milestone_category != 'Citizenship Entitlement' AND s.status IN ('Open','Completed','Under Process')
{condition_str}
- GROUP BY
+ GROUP BY
ben.gender;
"""
data = frappe.db.sql(sql_query, as_dict=True)
- return columns, data
\ No newline at end of file
+ return columns, data
diff --git a/myojana/myojana/report/house_type_wise_beneficiaries/house_type_wise_beneficiaries.js b/myojana/myojana/report/house_type_wise_beneficiaries/house_type_wise_beneficiaries.js
index 4565e70..0e19514 100644
--- a/myojana/myojana/report/house_type_wise_beneficiaries/house_type_wise_beneficiaries.js
+++ b/myojana/myojana/report/house_type_wise_beneficiaries/house_type_wise_beneficiaries.js
@@ -2,40 +2,40 @@
// For license information, please see license.txt
var filters = [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": "From Date",
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: "From Date",
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": "To Date"
- }
-
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: "To Date",
+ },
];
if (frappe.user_roles.includes("Admin")) {
- filters.push({
- "fieldname": "state",
- "fieldtype": "Link",
- "label": "State",
- "options": "State"
- },
- // {
- // "fieldname": "district",
- // "fieldtype": "Link",
- // "label": "District",
- // "options": "District",
- // "get_query": function() {
- // var state = frappe.query_report.get_filter_value('state');
- // return {
- // filters: {
- // 'state': state
- // }
- // };
- // }
- // }
- )
+ filters.push(
+ {
+ fieldname: "state",
+ fieldtype: "Link",
+ label: "State",
+ options: "State",
+ }
+ // {
+ // "fieldname": "district",
+ // "fieldtype": "Link",
+ // "label": "District",
+ // "options": "District",
+ // "get_query": function() {
+ // var state = frappe.query_report.get_filter_value('state');
+ // return {
+ // filters: {
+ // 'state': state
+ // }
+ // };
+ // }
+ // }
+ );
}
frappe.query_reports["House type-wise beneficiaries"] = {
- filters: filters
+ filters: filters,
};
diff --git a/myojana/myojana/report/house_type_wise_beneficiaries/house_type_wise_beneficiaries.py b/myojana/myojana/report/house_type_wise_beneficiaries/house_type_wise_beneficiaries.py
index 06b92f3..dcf7b26 100644
--- a/myojana/myojana/report/house_type_wise_beneficiaries/house_type_wise_beneficiaries.py
+++ b/myojana/myojana/report/house_type_wise_beneficiaries/house_type_wise_beneficiaries.py
@@ -2,32 +2,29 @@
# For license information, please see license.txt
import frappe
+
from myojana.utils.report_filter import ReportFilter
+
def execute(filters=None):
- columns = [
- {
- "fieldname": "house_type",
- "label": "House Type",
- "fieldtype": "Data",
- "width": 200
- },
- {
- "fieldname": "number_of_beneficiaries",
- "label": "Number Of beneficiaries",
- "fieldtype": "Int",
- "width": 300
- }
- ]
-
- condition_str = ReportFilter.set_report_filters(filters, 'date_of_visit', True)
-
- if condition_str:
- condition_str = f"WHERE {condition_str}"
- else:
- condition_str = ""
-
- sql_query = f"""
+ columns = [
+ {"fieldname": "house_type", "label": "House Type", "fieldtype": "Data", "width": 200},
+ {
+ "fieldname": "number_of_beneficiaries",
+ "label": "Number Of beneficiaries",
+ "fieldtype": "Int",
+ "width": 300,
+ },
+ ]
+
+ condition_str = ReportFilter.set_report_filters(filters, "date_of_visit", True)
+
+ if condition_str:
+ condition_str = f"WHERE {condition_str}"
+ else:
+ condition_str = ""
+
+ sql_query = f"""
SELECT
CASE
WHEN COALESCE(current_house_type, '') = '' THEN 'Unknown'
@@ -42,7 +39,5 @@ def execute(filters=None):
ORDER BY number_of_beneficiaries DESC
"""
-
- data = frappe.db.sql(sql_query, as_dict=True)
- return columns, data
-
+ data = frappe.db.sql(sql_query, as_dict=True)
+ return columns, data
diff --git a/myojana/myojana/report/milestone_wise_demands/milestone_wise_demands.js b/myojana/myojana/report/milestone_wise_demands/milestone_wise_demands.js
index 7918993..17573be 100644
--- a/myojana/myojana/report/milestone_wise_demands/milestone_wise_demands.js
+++ b/myojana/myojana/report/milestone_wise_demands/milestone_wise_demands.js
@@ -2,16 +2,15 @@
// For license information, please see license.txt
var filters = [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": "From Date",
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: "From Date",
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": "To Date"
- }
-
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: "To Date",
+ },
];
// if (!frappe.user_roles.includes("MIS executive") || frappe.user_roles.includes("Administrator")) {
// filters.push({
diff --git a/myojana/myojana/report/milestone_wise_demands/milestone_wise_demands.py b/myojana/myojana/report/milestone_wise_demands/milestone_wise_demands.py
index c9f0282..c1f3ca4 100644
--- a/myojana/myojana/report/milestone_wise_demands/milestone_wise_demands.py
+++ b/myojana/myojana/report/milestone_wise_demands/milestone_wise_demands.py
@@ -2,63 +2,63 @@
# For license information, please see license.txt
import frappe
+
from myojana.utils.report_filter import ReportFilter
def execute(filters=None):
- columns = [
- {
- "fieldname": "milestone_category",
- "label": "Milestone ",
- "fieldtype": "Data",
- "width": 200,
-
- },
- {
- "fieldname": "total_demands",
- "label": "Total Demands",
- "fieldtype": "Data",
- "width": 130,
- },
- {
- "fieldname": "open_demands",
- "label": "Open Demands",
- "fieldtype": "Data",
- "width": 130,
- },
- {
- "fieldname": "submitted_demands",
- "label": "Submitted Demands",
- "fieldtype": "Data",
- "width": 160,
- },
- {
- "fieldname": "completed_demands",
- "label": "Completed Demands",
- "fieldtype": "Data",
- "width": 170,
- },
- {
- "fieldname": "rejected_demands",
- "label": "Rejected Demands",
- "fieldtype": "Data",
- "width": 130,
- },
- {
- "fieldname": "closed_demands",
- "label": "Closed Demands",
- "fieldtype": "Data",
- "width": 130,
- },
- ]
+ columns = [
+ {
+ "fieldname": "milestone_category",
+ "label": "Milestone ",
+ "fieldtype": "Data",
+ "width": 200,
+ },
+ {
+ "fieldname": "total_demands",
+ "label": "Total Demands",
+ "fieldtype": "Data",
+ "width": 130,
+ },
+ {
+ "fieldname": "open_demands",
+ "label": "Open Demands",
+ "fieldtype": "Data",
+ "width": 130,
+ },
+ {
+ "fieldname": "submitted_demands",
+ "label": "Submitted Demands",
+ "fieldtype": "Data",
+ "width": 160,
+ },
+ {
+ "fieldname": "completed_demands",
+ "label": "Completed Demands",
+ "fieldtype": "Data",
+ "width": 170,
+ },
+ {
+ "fieldname": "rejected_demands",
+ "label": "Rejected Demands",
+ "fieldtype": "Data",
+ "width": 130,
+ },
+ {
+ "fieldname": "closed_demands",
+ "label": "Closed Demands",
+ "fieldtype": "Data",
+ "width": 130,
+ },
+ ]
- condition_str = ReportFilter.set_report_filters(filters, 'date_of_visit', True , 'ben_table')
- if condition_str:
- condition_str = f"AND {condition_str}"
- else:
- condition_str = ""
+ condition_str = ReportFilter.set_report_filters(filters, "date_of_visit", True, "ben_table")
+ if condition_str:
+ condition_str = f"AND {condition_str}"
+ else:
+ condition_str = ""
- sql_query = f"""
+ sql_query = f"""
SELECT
milestone_category,
SUM(CASE WHEN (_sc.status = 'Open') THEN 1 ELSE 0 END) as open_demands,
@@ -76,6 +76,5 @@ def execute(filters=None):
milestone_category;
"""
-
- data = frappe.db.sql(sql_query, as_dict=True)
- return columns, data
+ data = frappe.db.sql(sql_query, as_dict=True)
+ return columns, data
diff --git a/myojana/myojana/report/number_of_unique_beneficiaries_(_government_schemes_+documentation_)/number_of_unique_beneficiaries_(_government_schemes_+documentation_).js b/myojana/myojana/report/number_of_unique_beneficiaries_(_government_schemes_+documentation_)/number_of_unique_beneficiaries_(_government_schemes_+documentation_).js
index 5de3bff..b23295d 100644
--- a/myojana/myojana/report/number_of_unique_beneficiaries_(_government_schemes_+documentation_)/number_of_unique_beneficiaries_(_government_schemes_+documentation_).js
+++ b/myojana/myojana/report/number_of_unique_beneficiaries_(_government_schemes_+documentation_)/number_of_unique_beneficiaries_(_government_schemes_+documentation_).js
@@ -2,17 +2,16 @@
// For license information, please see license.txt
var filters = [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": "From Date",
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: "From Date",
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": "To Date"
- }
-
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: "To Date",
+ },
];
frappe.query_reports["Number of Unique Beneficiaries ( Government schemes +Documentation )"] = {
- "filters": filters
+ filters: filters,
};
diff --git a/myojana/myojana/report/number_of_unique_beneficiaries_(_government_schemes_+documentation_)/number_of_unique_beneficiaries_(_government_schemes_+documentation_).py b/myojana/myojana/report/number_of_unique_beneficiaries_(_government_schemes_+documentation_)/number_of_unique_beneficiaries_(_government_schemes_+documentation_).py
index d4c7849..231edd5 100644
--- a/myojana/myojana/report/number_of_unique_beneficiaries_(_government_schemes_+documentation_)/number_of_unique_beneficiaries_(_government_schemes_+documentation_).py
+++ b/myojana/myojana/report/number_of_unique_beneficiaries_(_government_schemes_+documentation_)/number_of_unique_beneficiaries_(_government_schemes_+documentation_).py
@@ -2,33 +2,33 @@
# For license information, please see license.txt
import frappe
+
from myojana.utils.report_filter import ReportFilter
def execute(filters=None):
- columns = [
- # {
- # "fieldname": "milestone_category",
- # "label": "Support Category",
- # "fieldtype": "Data",
- # "width": 200,
-
- # },
- {
- "fieldname": "total_demands",
- "label": "Total Unique Demands",
- "fieldtype": "Data",
- "width": 130,
- }
- ]
+ columns = [
+ # {
+ # "fieldname": "milestone_category",
+ # "label": "Support Category",
+ # "fieldtype": "Data",
+ # "width": 200,
+ # },
+ {
+ "fieldname": "total_demands",
+ "label": "Total Unique Demands",
+ "fieldtype": "Data",
+ "width": 130,
+ }
+ ]
- condition_str = ReportFilter.set_report_filters(filters, 'date_of_visit', True , 'ben_table')
- if condition_str:
- condition_str = f"AND {condition_str}"
- else:
- condition_str = ""
+ condition_str = ReportFilter.set_report_filters(filters, "date_of_visit", True, "ben_table")
+ if condition_str:
+ condition_str = f"AND {condition_str}"
+ else:
+ condition_str = ""
- sql_query = f"""
+ sql_query = f"""
SELECT
milestone_category,
COUNT(DISTINCT ben_table.name) AS total_demands
@@ -39,6 +39,5 @@ def execute(filters=None):
1=1 {condition_str} AND milestone_category IN ("Documentation","Government schemes") AND _sc.status = 'Completed';
"""
-
- data = frappe.db.sql(sql_query, as_dict=True)
- return columns, data
+ data = frappe.db.sql(sql_query, as_dict=True)
+ return columns, data
diff --git a/myojana/myojana/report/occupational_category_wise_beneficiaries/occupational_category_wise_beneficiaries.js b/myojana/myojana/report/occupational_category_wise_beneficiaries/occupational_category_wise_beneficiaries.js
index e84ead4..2faf396 100644
--- a/myojana/myojana/report/occupational_category_wise_beneficiaries/occupational_category_wise_beneficiaries.js
+++ b/myojana/myojana/report/occupational_category_wise_beneficiaries/occupational_category_wise_beneficiaries.js
@@ -2,40 +2,40 @@
// For license information, please see license.txt
var filters = [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": "From Date",
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: "From Date",
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": "To Date"
- }
-
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: "To Date",
+ },
];
if (!frappe.user_roles.includes("MIS executive") || frappe.user_roles.includes("Administrator")) {
- filters.push({
- "fieldname": "state",
- "fieldtype": "Link",
- "label": "State",
- "options": "State"
- },
- {
- "fieldname": "district",
- "fieldtype": "Link",
- "label": "District",
- "options": "District",
- "get_query": function() {
- var state = frappe.query_report.get_filter_value('state');
- return {
- filters: {
- 'state': state
- }
- };
+ filters.push(
+ {
+ fieldname: "state",
+ fieldtype: "Link",
+ label: "State",
+ options: "State",
+ },
+ {
+ fieldname: "district",
+ fieldtype: "Link",
+ label: "District",
+ options: "District",
+ get_query: function () {
+ var state = frappe.query_report.get_filter_value("state");
+ return {
+ filters: {
+ state: state,
+ },
+ };
+ },
}
- }
- )
+ );
}
frappe.query_reports["Occupational category-wise beneficiaries"] = {
- filters: filters
+ filters: filters,
};
diff --git a/myojana/myojana/report/occupational_category_wise_beneficiaries/occupational_category_wise_beneficiaries.py b/myojana/myojana/report/occupational_category_wise_beneficiaries/occupational_category_wise_beneficiaries.py
index be7cb85..6c4c843 100644
--- a/myojana/myojana/report/occupational_category_wise_beneficiaries/occupational_category_wise_beneficiaries.py
+++ b/myojana/myojana/report/occupational_category_wise_beneficiaries/occupational_category_wise_beneficiaries.py
@@ -1,32 +1,29 @@
# Copyright (c) 2023, suvaidyam and contributors
# For license information, please see license.txt
import frappe
+
from myojana.utils.report_filter import ReportFilter
+
def execute(filters=None):
- columns = [
- {
- "fieldname": "occupation",
- "label": "Occupation category",
- "fieldtype": "Data",
- "width": 200
- },
- {
- "fieldname": "number_of_beneficiaries",
- "label": "Number Of beneficiaries",
- "fieldtype": "Int",
- "width": 300
- }
- ]
+ columns = [
+ {"fieldname": "occupation", "label": "Occupation category", "fieldtype": "Data", "width": 200},
+ {
+ "fieldname": "number_of_beneficiaries",
+ "label": "Number Of beneficiaries",
+ "fieldtype": "Int",
+ "width": 300,
+ },
+ ]
- condition_str = ReportFilter.set_report_filters(filters, 'date_of_visit', True)
+ condition_str = ReportFilter.set_report_filters(filters, "date_of_visit", True)
- if condition_str:
- condition_str = f"WHERE {condition_str}"
- else:
- condition_str = ""
+ if condition_str:
+ condition_str = f"WHERE {condition_str}"
+ else:
+ condition_str = ""
- sql_query = f"""
+ sql_query = f"""
SELECT
COALESCE(occupational_category, 'Unknown') AS occupation,
COUNT(name) AS number_of_beneficiaries
@@ -38,6 +35,5 @@ def execute(filters=None):
ORDER BY number_of_beneficiaries DESC
"""
-
- data = frappe.db.sql(sql_query, as_dict=True)
- return columns, data
+ data = frappe.db.sql(sql_query, as_dict=True)
+ return columns, data
diff --git a/myojana/myojana/report/overall_tracking_of_scheme/overall_tracking_of_scheme.js b/myojana/myojana/report/overall_tracking_of_scheme/overall_tracking_of_scheme.js
index ebee014..13a7e0e 100644
--- a/myojana/myojana/report/overall_tracking_of_scheme/overall_tracking_of_scheme.js
+++ b/myojana/myojana/report/overall_tracking_of_scheme/overall_tracking_of_scheme.js
@@ -2,32 +2,30 @@
// For license information, please see license.txt
var filters = [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": "From Date",
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: "From Date",
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": "To Date"
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: "To Date",
},
{
- "fieldname": "milestone",
- "fieldtype": "Link",
- "label": "Support category",
- "options":"Milestone category"
+ fieldname: "milestone",
+ fieldtype: "Link",
+ label: "Support category",
+ options: "Milestone category",
},
-
];
if (!frappe.user_roles.includes("MIS executive") || frappe.user_roles.includes("Administrator")) {
filters.push({
- "fieldname": "centre",
- "fieldtype": "Link",
- "options": "Centre",
- "label": "Centre"
-
- })
+ fieldname: "centre",
+ fieldtype: "Link",
+ options: "Centre",
+ label: "Centre",
+ });
}
frappe.query_reports["Overall tracking of scheme"] = {
- "filters": filters
+ filters: filters,
};
diff --git a/myojana/myojana/report/overall_tracking_of_scheme/overall_tracking_of_scheme.py b/myojana/myojana/report/overall_tracking_of_scheme/overall_tracking_of_scheme.py
index f4cc9d7..b3bd1e2 100644
--- a/myojana/myojana/report/overall_tracking_of_scheme/overall_tracking_of_scheme.py
+++ b/myojana/myojana/report/overall_tracking_of_scheme/overall_tracking_of_scheme.py
@@ -2,65 +2,64 @@
# For license information, please see license.txt
import frappe
+
from myojana.utils.report_filter import ReportFilter
def execute(filters=None):
- if filters.milestone:
- child_filter = f"""_sc.milestone = '{filters['milestone']}'"""
- del filters['milestone']
- else:
- child_filter = "1=1"
- print(filters.milestone)
- # return print(filters)
- columns = [
- {
- "fieldname": "milestone",
- "label": "Support category",
- "fieldtype": "Data",
- "width": 150,
-
- },
- {
- "fieldname": "scheme",
- "label": "Support Name",
- "fieldtype": "Data",
- "width": 200,
-
- },
- {
- "fieldname": "total_demands",
- "label": "No. of enquiries received",
- "fieldtype": "Data",
- "width": 200,
- },
- {
- "fieldname": "completed_demands",
- "label": "Achieved",
- "fieldtype": "Data",
- "width": 170,
- },
- {
- "fieldname": "rejected_demands",
- "label": "Rejected",
- "fieldtype": "Data",
- "width": 130,
- },
- {
- "fieldname": "pending_count",
- "label": "Pending",
- "fieldtype": "Data",
- "width": 160,
- },
- ]
+ if filters.milestone:
+ child_filter = f"""_sc.milestone = '{filters['milestone']}'"""
+ del filters["milestone"]
+ else:
+ child_filter = "1=1"
+ print(filters.milestone)
+ # return print(filters)
+ columns = [
+ {
+ "fieldname": "milestone",
+ "label": "Support category",
+ "fieldtype": "Data",
+ "width": 150,
+ },
+ {
+ "fieldname": "scheme",
+ "label": "Support Name",
+ "fieldtype": "Data",
+ "width": 200,
+ },
+ {
+ "fieldname": "total_demands",
+ "label": "No. of enquiries received",
+ "fieldtype": "Data",
+ "width": 200,
+ },
+ {
+ "fieldname": "completed_demands",
+ "label": "Achieved",
+ "fieldtype": "Data",
+ "width": 170,
+ },
+ {
+ "fieldname": "rejected_demands",
+ "label": "Rejected",
+ "fieldtype": "Data",
+ "width": 130,
+ },
+ {
+ "fieldname": "pending_count",
+ "label": "Pending",
+ "fieldtype": "Data",
+ "width": 160,
+ },
+ ]
- condition_str = ReportFilter.set_report_filters(filters, 'date_of_visit', True , 'ben_table')
- if condition_str:
- condition_str = f"AND {condition_str}"
- else:
- condition_str = ""
+ condition_str = ReportFilter.set_report_filters(filters, "date_of_visit", True, "ben_table")
+ if condition_str:
+ condition_str = f"AND {condition_str}"
+ else:
+ condition_str = ""
- sql_query = f"""
+ sql_query = f"""
SELECT
_sc.modified_by as user,
_sc.scheme,
@@ -79,6 +78,5 @@ def execute(filters=None):
_sc.scheme
"""
-
- data = frappe.db.sql(sql_query, as_dict=True)
- return columns, data
+ data = frappe.db.sql(sql_query, as_dict=True)
+ return columns, data
diff --git a/myojana/myojana/report/place_of_origin/place_of_origin.js b/myojana/myojana/report/place_of_origin/place_of_origin.js
index 535a209..b3cc2c6 100644
--- a/myojana/myojana/report/place_of_origin/place_of_origin.js
+++ b/myojana/myojana/report/place_of_origin/place_of_origin.js
@@ -3,32 +3,30 @@
var filters = [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": "From Date",
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: "From Date",
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": "To Date"
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: "To Date",
},
{
- "fieldname": "state_of_origin",
- "fieldtype": "Link",
- "label": "State",
- "options":"State"
+ fieldname: "state_of_origin",
+ fieldtype: "Link",
+ label: "State",
+ options: "State",
},
-
-
];
if (!frappe.user_roles.includes("MIS executive") || frappe.user_roles.includes("Administrator")) {
filters.push({
- "fieldname": "centre",
- "fieldtype": "Link",
- "label": "Centre",
- "options": "Centre"
- })
+ fieldname: "centre",
+ fieldtype: "Link",
+ label: "Centre",
+ options: "Centre",
+ });
}
frappe.query_reports["Place of origin"] = {
- filters: filters
+ filters: filters,
};
diff --git a/myojana/myojana/report/place_of_origin/place_of_origin.py b/myojana/myojana/report/place_of_origin/place_of_origin.py
index 09725a2..1629852 100644
--- a/myojana/myojana/report/place_of_origin/place_of_origin.py
+++ b/myojana/myojana/report/place_of_origin/place_of_origin.py
@@ -2,43 +2,24 @@
# For license information, please see license.txt
import frappe
+
from myojana.utils.report_filter import ReportFilter
def execute(filters=None):
- columns = [
- {
- "fieldname": "state",
- "label": "State",
- "fieldtype": "Data",
- "width": 200
- },
- {
- "fieldname": "district",
- "label": "District",
- "fieldtype": "Data",
- "width": 200
- },
- {
- "fieldname": "block",
- "label": "Block",
- "fieldtype": "Data",
- "width": 200
- },
- {
- "fieldname": "count",
- "label": "Count",
- "fieldtype": "int",
- "width": 200
- }
- ]
- condition_str = ReportFilter.set_report_filters(filters, 'date_of_visit', True, 'b')
- if condition_str:
- condition_str = f"{condition_str}"
- else:
- condition_str = "1=1"
+ columns = [
+ {"fieldname": "state", "label": "State", "fieldtype": "Data", "width": 200},
+ {"fieldname": "district", "label": "District", "fieldtype": "Data", "width": 200},
+ {"fieldname": "block", "label": "Block", "fieldtype": "Data", "width": 200},
+ {"fieldname": "count", "label": "Count", "fieldtype": "int", "width": 200},
+ ]
+ condition_str = ReportFilter.set_report_filters(filters, "date_of_visit", True, "b")
+ if condition_str:
+ condition_str = f"{condition_str}"
+ else:
+ condition_str = "1=1"
- sql_query = f"""
+ sql_query = f"""
SELECT
COALESCE(NULLIF(s.state_name, ''), 'Unknown') AS state,
COALESCE(NULLIF(d.district_name, ''), 'Unknown') AS district,
@@ -55,5 +36,5 @@ def execute(filters=None):
ORDER BY
COALESCE(NULLIF(b.state_of_origin, ''), 'Unknown'), COALESCE(NULLIF(b.district_of_origin, ''), 'Unknown');
"""
- data = frappe.db.sql(sql_query, as_dict=True)
- return columns, data
+ data = frappe.db.sql(sql_query, as_dict=True)
+ return columns, data
diff --git a/myojana/myojana/report/religion_wise_beneficiaries/religion_wise_beneficiaries.js b/myojana/myojana/report/religion_wise_beneficiaries/religion_wise_beneficiaries.js
index 18156aa..3a9cb4a 100644
--- a/myojana/myojana/report/religion_wise_beneficiaries/religion_wise_beneficiaries.js
+++ b/myojana/myojana/report/religion_wise_beneficiaries/religion_wise_beneficiaries.js
@@ -2,40 +2,40 @@
// For license information, please see license.txt
var filters = [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": "From Date",
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: "From Date",
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": "To Date"
- }
-
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: "To Date",
+ },
];
if (frappe.user_roles.includes("Administrator")) {
- filters.push({
- "fieldname": "state",
- "fieldtype": "Link",
- "label": "State",
- "options": "State"
- },
- {
- "fieldname": "district",
- "fieldtype": "Link",
- "label": "District",
- "options": "District",
- "get_query": function() {
- var state = frappe.query_report.get_filter_value('state');
- return {
- filters: {
- 'state': state
- }
- };
+ filters.push(
+ {
+ fieldname: "state",
+ fieldtype: "Link",
+ label: "State",
+ options: "State",
+ },
+ {
+ fieldname: "district",
+ fieldtype: "Link",
+ label: "District",
+ options: "District",
+ get_query: function () {
+ var state = frappe.query_report.get_filter_value("state");
+ return {
+ filters: {
+ state: state,
+ },
+ };
+ },
}
- }
- )
+ );
}
frappe.query_reports["Religion-wise beneficiaries"] = {
- filters: filters
+ filters: filters,
};
diff --git a/myojana/myojana/report/religion_wise_beneficiaries/religion_wise_beneficiaries.py b/myojana/myojana/report/religion_wise_beneficiaries/religion_wise_beneficiaries.py
index f9f87be..b000991 100644
--- a/myojana/myojana/report/religion_wise_beneficiaries/religion_wise_beneficiaries.py
+++ b/myojana/myojana/report/religion_wise_beneficiaries/religion_wise_beneficiaries.py
@@ -2,32 +2,29 @@
# For license information, please see license.txt
import frappe
+
from myojana.utils.report_filter import ReportFilter
+
def execute(filters=None):
- columns = [
- {
- "fieldname": "religion",
- "label": "Religion",
- "fieldtype": "Data",
- "width": 200
- },
- {
- "fieldname": "number_of_beneficiaries",
- "label": "Number Of beneficiaries",
- "fieldtype": "Int",
- "width": 300
- }
- ]
-
- condition_str = ReportFilter.set_report_filters(filters, 'date_of_visit', True)
-
- if condition_str:
- condition_str = f"WHERE {condition_str}"
- else:
- condition_str = ""
-
- sql_query = f"""
+ columns = [
+ {"fieldname": "religion", "label": "Religion", "fieldtype": "Data", "width": 200},
+ {
+ "fieldname": "number_of_beneficiaries",
+ "label": "Number Of beneficiaries",
+ "fieldtype": "Int",
+ "width": 300,
+ },
+ ]
+
+ condition_str = ReportFilter.set_report_filters(filters, "date_of_visit", True)
+
+ if condition_str:
+ condition_str = f"WHERE {condition_str}"
+ else:
+ condition_str = ""
+
+ sql_query = f"""
SELECT
CASE
WHEN COALESCE(religion, '') = '' THEN 'Unknown'
@@ -42,7 +39,5 @@ def execute(filters=None):
ORDER BY number_of_beneficiaries DESC
"""
-
-
- data = frappe.db.sql(sql_query, as_dict=True)
- return columns, data
+ data = frappe.db.sql(sql_query, as_dict=True)
+ return columns, data
diff --git a/myojana/myojana/report/saving_status/saving_status.js b/myojana/myojana/report/saving_status/saving_status.js
index c3e2c98..aef0796 100644
--- a/myojana/myojana/report/saving_status/saving_status.js
+++ b/myojana/myojana/report/saving_status/saving_status.js
@@ -2,17 +2,16 @@
// For license information, please see license.txt
var filters = [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": "From Date",
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: "From Date",
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": "To Date"
- }
-
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: "To Date",
+ },
];
frappe.query_reports["Saving status"] = {
- filters: filters
+ filters: filters,
};
diff --git a/myojana/myojana/report/saving_status/saving_status.py b/myojana/myojana/report/saving_status/saving_status.py
index eeb0868..cc41f29 100644
--- a/myojana/myojana/report/saving_status/saving_status.py
+++ b/myojana/myojana/report/saving_status/saving_status.py
@@ -2,30 +2,22 @@
# For license information, please see license.txt
import frappe
+
from myojana.utils.report_filter import ReportFilter
+
def execute(filters=None):
# frappe.errprint(filters)
columns = [
- {
- "fieldname":"bank_account",
- "label":"Saving status",
- "fieldtype":"Data",
- "width":300
- },
- {
- "fieldname":"count",
- "label":"Count",
- "fieldtype":"int",
- "width":200
- }
+ {"fieldname": "bank_account", "label": "Saving status", "fieldtype": "Data", "width": 300},
+ {"fieldname": "count", "label": "Count", "fieldtype": "int", "width": 200},
]
- condition_str = ReportFilter.set_report_filters(filters, 'creation', True)
+ condition_str = ReportFilter.set_report_filters(filters, "creation", True)
if condition_str:
condition_str = f"AND {condition_str}"
else:
condition_str = ""
-
+
sql_query = f"""
SELECT
CASE
@@ -42,4 +34,4 @@ def execute(filters=None):
"""
data = frappe.db.sql(sql_query, as_dict=True)
- return columns, data
\ No newline at end of file
+ return columns, data
diff --git a/myojana/myojana/report/scheme_wise_demands/scheme_wise_demands.js b/myojana/myojana/report/scheme_wise_demands/scheme_wise_demands.js
index 84558b6..0fe706a 100644
--- a/myojana/myojana/report/scheme_wise_demands/scheme_wise_demands.js
+++ b/myojana/myojana/report/scheme_wise_demands/scheme_wise_demands.js
@@ -3,22 +3,21 @@
var filters = [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": "From Date",
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: "From Date",
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": "To Date"
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: "To Date",
},
{
- "fieldname": "modified_by",
- "fieldtype": "Link",
- "options": "User",
- "label": "User"
- }
-
+ fieldname: "modified_by",
+ fieldtype: "Link",
+ options: "User",
+ label: "User",
+ },
];
// if (!frappe.user_roles.includes("MIS executive") || frappe.user_roles.includes("Administrator")) {
// filters.push({
@@ -44,7 +43,6 @@ var filters = [
// )
// }
-
frappe.query_reports["Scheme-wise demands"] = {
filters: filters,
};
diff --git a/myojana/myojana/report/scheme_wise_demands/scheme_wise_demands.json b/myojana/myojana/report/scheme_wise_demands/scheme_wise_demands.json
index 52c4a57..fc1a534 100644
--- a/myojana/myojana/report/scheme_wise_demands/scheme_wise_demands.json
+++ b/myojana/myojana/report/scheme_wise_demands/scheme_wise_demands.json
@@ -1,5 +1,6 @@
{
"add_total_row": 1,
+ "add_translate_data": 0,
"columns": [],
"creation": "2024-05-07 16:46:18.197249",
"disabled": 0,
@@ -8,8 +9,8 @@
"filters": [],
"idx": 1,
"is_standard": "Yes",
- "letterhead": null,
- "modified": "2024-10-14 07:17:05.579676",
+ "letter_head": null,
+ "modified": "2026-06-10 10:19:35.540654",
"modified_by": "Administrator",
"module": "myojana",
"name": "Scheme-wise demands",
@@ -34,5 +35,6 @@
{
"role": "System Manager"
}
- ]
+ ],
+ "timeout": 0
}
\ No newline at end of file
diff --git a/myojana/myojana/report/scheme_wise_demands/scheme_wise_demands.py b/myojana/myojana/report/scheme_wise_demands/scheme_wise_demands.py
index c983fe9..546a903 100644
--- a/myojana/myojana/report/scheme_wise_demands/scheme_wise_demands.py
+++ b/myojana/myojana/report/scheme_wise_demands/scheme_wise_demands.py
@@ -2,77 +2,75 @@
# For license information, please see license.txt
import frappe
+
from myojana.utils.report_filter import ReportFilter
def execute(filters=None):
- columns = [
- {
- "fieldname": "user",
- "label": "User Name",
- "fieldtype": "Data",
- "width": 150,
-
- },
- {
- "fieldname": "milestone",
- "label": "Milestone category",
- "fieldtype": "Data",
- "width": 150,
+ columns = [
+ {
+ "fieldname": "user",
+ "label": "User Name",
+ "fieldtype": "Data",
+ "width": 150,
+ },
+ {
+ "fieldname": "milestone",
+ "label": "Milestone category",
+ "fieldtype": "Data",
+ "width": 150,
+ },
+ {
+ "fieldname": "scheme",
+ "label": "Scheme ",
+ "fieldtype": "Data",
+ "width": 200,
+ },
+ {
+ "fieldname": "total_demands",
+ "label": "Total Demands",
+ "fieldtype": "Data",
+ "width": 130,
+ },
+ {
+ "fieldname": "open_demands",
+ "label": "Open Demands",
+ "fieldtype": "Data",
+ "width": 130,
+ },
+ {
+ "fieldname": "submitted_demands",
+ "label": "Submitted Demands",
+ "fieldtype": "Data",
+ "width": 160,
+ },
+ {
+ "fieldname": "completed_demands",
+ "label": "Completed Demands",
+ "fieldtype": "Data",
+ "width": 170,
+ },
+ {
+ "fieldname": "rejected_demands",
+ "label": "Rejected Demands",
+ "fieldtype": "Data",
+ "width": 130,
+ },
+ {
+ "fieldname": "closed_demands",
+ "label": "Closed Demands",
+ "fieldtype": "Data",
+ "width": 130,
+ },
+ ]
- },
- {
- "fieldname": "scheme",
- "label": "Scheme ",
- "fieldtype": "Data",
- "width": 200,
-
- },
- {
- "fieldname": "total_demands",
- "label": "Total Demands",
- "fieldtype": "Data",
- "width": 130,
- },
- {
- "fieldname": "open_demands",
- "label": "Open Demands",
- "fieldtype": "Data",
- "width": 130,
- },
- {
- "fieldname": "submitted_demands",
- "label": "Submitted Demands",
- "fieldtype": "Data",
- "width": 160,
- },
- {
- "fieldname": "completed_demands",
- "label": "Completed Demands",
- "fieldtype": "Data",
- "width": 170,
- },
- {
- "fieldname": "rejected_demands",
- "label": "Rejected Demands",
- "fieldtype": "Data",
- "width": 130,
- },
- {
- "fieldname": "closed_demands",
- "label": "Closed Demands",
- "fieldtype": "Data",
- "width": 130,
- },
- ]
+ condition_str = ReportFilter.set_report_filters(filters, "date_of_visit", True, "ben_table")
+ if condition_str:
+ condition_str = f"AND {condition_str}"
+ else:
+ condition_str = ""
- condition_str = ReportFilter.set_report_filters(filters, 'date_of_visit', True , 'ben_table')
- if condition_str:
- condition_str = f"AND {condition_str}"
- else:
- condition_str = ""
-
- sql_query = f"""
+ sql_query = f"""
SELECT
_sc.modified_by as user,
_sc.scheme,
@@ -92,6 +90,5 @@ def execute(filters=None):
scheme , user;
"""
-
- data = frappe.db.sql(sql_query, as_dict=True)
- return columns, data
+ data = frappe.db.sql(sql_query, as_dict=True)
+ return columns, data
diff --git a/myojana/myojana/report/source_of_information/source_of_information.js b/myojana/myojana/report/source_of_information/source_of_information.js
index ac2535b..81d3586 100644
--- a/myojana/myojana/report/source_of_information/source_of_information.js
+++ b/myojana/myojana/report/source_of_information/source_of_information.js
@@ -2,27 +2,23 @@
// For license information, please see license.txt
var filters = [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": "From Date",
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: "From Date",
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": "To Date"
- }
-
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: "To Date",
+ },
];
if (frappe.user_roles.includes("Administrator")) {
filters.push({
- "fieldname": "state",
- "fieldtype": "Link",
- "label": "State",
- "options": "State"
- },
-
-
- )
+ fieldname: "state",
+ fieldtype: "Link",
+ label: "State",
+ options: "State",
+ });
}
frappe.query_reports["Source of information"] = {
filters: filters,
diff --git a/myojana/myojana/report/source_of_information/source_of_information.py b/myojana/myojana/report/source_of_information/source_of_information.py
index ca07e45..b837269 100644
--- a/myojana/myojana/report/source_of_information/source_of_information.py
+++ b/myojana/myojana/report/source_of_information/source_of_information.py
@@ -2,31 +2,31 @@
# For license information, please see license.txt
import frappe
+
from myojana.utils.report_filter import ReportFilter
def execute(filters=None):
- columns = [
- {
- "fieldname": "source_of_information",
- "label": "Source of Information",
- "fieldtype": "Data",
- "width": 400
- },
- {
- "fieldname": "count",
- "label": "Count",
- "fieldtype": "int",
- "width": 200
- }
- ]
- condition_str = ReportFilter.set_report_filters(filters, 'date_of_visit', True,)
- if condition_str:
- condition_str = f"WHERE {condition_str}"
- else:
- condition_str = ""
-
- sql_query = f"""
+ columns = [
+ {
+ "fieldname": "source_of_information",
+ "label": "Source of Information",
+ "fieldtype": "Data",
+ "width": 400,
+ },
+ {"fieldname": "count", "label": "Count", "fieldtype": "int", "width": 200},
+ ]
+ condition_str = ReportFilter.set_report_filters(
+ filters,
+ "date_of_visit",
+ True,
+ )
+ if condition_str:
+ condition_str = f"WHERE {condition_str}"
+ else:
+ condition_str = ""
+
+ sql_query = f"""
SELECT
COALESCE(NULLIF(source_of_information, ''), 'Unknown') as source_of_information,
COUNT(name) AS count
@@ -36,6 +36,6 @@ def execute(filters=None):
GROUP BY
COALESCE(NULLIF(source_of_information, ''), 'Unknown');
"""
-
- data = frappe.db.sql(sql_query, as_dict=True)
- return columns, data
+
+ data = frappe.db.sql(sql_query, as_dict=True)
+ return columns, data
diff --git a/myojana/myojana/report/state_of_origin/state_of_origin.js b/myojana/myojana/report/state_of_origin/state_of_origin.js
index d612906..f357ebf 100644
--- a/myojana/myojana/report/state_of_origin/state_of_origin.js
+++ b/myojana/myojana/report/state_of_origin/state_of_origin.js
@@ -3,25 +3,24 @@
var filters = [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": "From Date",
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: "From Date",
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": "To Date"
- }
-
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: "To Date",
+ },
];
if (!frappe.user_roles.includes("MIS executive") || frappe.user_roles.includes("Administrator")) {
filters.push({
- "fieldname": "centre",
- "fieldtype": "Link",
- "label": "Centre",
- "options": "Centre"
- })
+ fieldname: "centre",
+ fieldtype: "Link",
+ label: "Centre",
+ options: "Centre",
+ });
}
frappe.query_reports["State of origin"] = {
- filters: filters
+ filters: filters,
};
diff --git a/myojana/myojana/report/state_of_origin/state_of_origin.py b/myojana/myojana/report/state_of_origin/state_of_origin.py
index 5049cba..7df7c36 100644
--- a/myojana/myojana/report/state_of_origin/state_of_origin.py
+++ b/myojana/myojana/report/state_of_origin/state_of_origin.py
@@ -2,25 +2,17 @@
# For license information, please see license.txt
import frappe
+
from myojana.utils.report_filter import ReportFilter
+
def execute(filters=None):
# frappe.errprint(filters)
columns = [
- {
- "fieldname":"state",
- "label":"State",
- "fieldtype":"Data",
- "width":400
- },
- {
- "fieldname":"count",
- "label":"Count",
- "fieldtype":"int",
- "width":200
- }
+ {"fieldname": "state", "label": "State", "fieldtype": "Data", "width": 400},
+ {"fieldname": "count", "label": "Count", "fieldtype": "int", "width": 200},
]
- condition_str = ReportFilter.set_report_filters(filters, 'date_of_visit', True, 't1')
+ condition_str = ReportFilter.set_report_filters(filters, "date_of_visit", True, "t1")
if condition_str:
condition_str = f"AND {condition_str}"
else:
@@ -40,7 +32,6 @@ def execute(filters=None):
COALESCE(t2.state_name, 'Unknown');
"""
-
data = frappe.db.sql(sql_query, as_dict=True)
return columns, data
diff --git a/myojana/myojana/report/state_wise_demands/state_wise_demands.js b/myojana/myojana/report/state_wise_demands/state_wise_demands.js
index fb05f0c..8d0880f 100644
--- a/myojana/myojana/report/state_wise_demands/state_wise_demands.js
+++ b/myojana/myojana/report/state_wise_demands/state_wise_demands.js
@@ -2,27 +2,23 @@
// For license information, please see license.txt
var filters = [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": "From Date",
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: "From Date",
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": "To Date"
- }
-
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: "To Date",
+ },
];
if (!frappe.user_roles.includes("MIS executive") || frappe.user_roles.includes("Administrator")) {
filters.push({
- "fieldname": "state",
- "fieldtype": "Link",
- "label": "State",
- "options": "State"
- },
-
-
- )
+ fieldname: "state",
+ fieldtype: "Link",
+ label: "State",
+ options: "State",
+ });
}
frappe.query_reports["State-wise demands"] = {
filters: filters,
diff --git a/myojana/myojana/report/state_wise_demands/state_wise_demands.json b/myojana/myojana/report/state_wise_demands/state_wise_demands.json
index 0a75416..c4c2422 100644
--- a/myojana/myojana/report/state_wise_demands/state_wise_demands.json
+++ b/myojana/myojana/report/state_wise_demands/state_wise_demands.json
@@ -1,39 +1,41 @@
{
- "add_total_row": 0,
- "columns": [],
- "creation": "2024-01-16 10:31:02.572079",
- "disabled": 0,
- "docstatus": 0,
- "doctype": "Report",
- "filters": [],
- "idx": 0,
- "is_standard": "Yes",
- "json": "{}",
- "letterhead": null,
- "modified": "2024-01-16 10:31:09.622544",
- "modified_by": "Administrator",
- "module": "myojana",
- "name": "State-wise demands",
- "owner": "Administrator",
- "prepared_report": 0,
- "ref_doctype": "Beneficiary Profiling",
- "report_name": "State-wise demands",
- "report_type": "Script Report",
- "roles": [
- {
- "role": "Admin"
- },
- {
- "role": "CSC Member"
- },
- {
- "role": "Sub-Centre"
- },
- {
- "role": "MIS executive"
- },
- {
- "role": "System Manager"
- }
- ]
+ "add_total_row": 0,
+ "add_translate_data": 0,
+ "columns": [],
+ "creation": "2024-01-16 10:31:02.572079",
+ "disabled": 0,
+ "docstatus": 0,
+ "doctype": "Report",
+ "filters": [],
+ "idx": 1,
+ "is_standard": "Yes",
+ "json": "{}",
+ "letter_head": null,
+ "modified": "2026-06-10 10:16:56.425572",
+ "modified_by": "Administrator",
+ "module": "myojana",
+ "name": "State-wise demands",
+ "owner": "Administrator",
+ "prepared_report": 0,
+ "ref_doctype": "Beneficiary Profiling",
+ "report_name": "State-wise demands",
+ "report_type": "Script Report",
+ "roles": [
+ {
+ "role": "Admin"
+ },
+ {
+ "role": "CSC Member"
+ },
+ {
+ "role": "Sub-Centre"
+ },
+ {
+ "role": "MIS executive"
+ },
+ {
+ "role": "System Manager"
+ }
+ ],
+ "timeout": 0
}
\ No newline at end of file
diff --git a/myojana/myojana/report/state_wise_demands/state_wise_demands.py b/myojana/myojana/report/state_wise_demands/state_wise_demands.py
index 2e0c2f0..98a6adb 100644
--- a/myojana/myojana/report/state_wise_demands/state_wise_demands.py
+++ b/myojana/myojana/report/state_wise_demands/state_wise_demands.py
@@ -2,61 +2,60 @@
# For license information, please see license.txt
import frappe
+
from myojana.utils.report_filter import ReportFilter
def execute(filters=None):
- columns = [
- {
- "fieldname": "state_name",
- "label": " Name Of State ",
- "fieldtype": "Data",
- "width": 200,
-
- },
- {
- "fieldname": "total_demands",
- "label": "Total Demands",
- "fieldtype": "Data",
- "width": 130,
- },
- {
- "fieldname": "open_demands",
- "label": "Open Demands",
- "fieldtype": "Data",
- "width": 130,
- },
- {
- "fieldname": "submitted_demands",
- "label": "Submitted Demands",
- "fieldtype": "Data",
- "width": 160,
- },
- {
- "fieldname": "completed_demands",
- "label": "Completed Demands",
- "fieldtype": "Data",
- "width": 170,
- },
- {
- "fieldname": "rejected_demands",
- "label": "Rejected Demands",
- "fieldtype": "Data",
- "width": 130,
- },
- {
- "fieldname": "closed_demands",
- "label": "Closed Demands",
- "fieldtype": "Data",
- "width": 130,
- },
- ]
-
+ columns = [
+ {
+ "fieldname": "state_name",
+ "label": " Name Of State ",
+ "fieldtype": "Data",
+ "width": 200,
+ },
+ {
+ "fieldname": "total_demands",
+ "label": "Total Demands",
+ "fieldtype": "Data",
+ "width": 130,
+ },
+ {
+ "fieldname": "open_demands",
+ "label": "Open Demands",
+ "fieldtype": "Data",
+ "width": 130,
+ },
+ {
+ "fieldname": "submitted_demands",
+ "label": "Submitted Demands",
+ "fieldtype": "Data",
+ "width": 160,
+ },
+ {
+ "fieldname": "completed_demands",
+ "label": "Completed Demands",
+ "fieldtype": "Data",
+ "width": 170,
+ },
+ {
+ "fieldname": "rejected_demands",
+ "label": "Rejected Demands",
+ "fieldtype": "Data",
+ "width": 130,
+ },
+ {
+ "fieldname": "closed_demands",
+ "label": "Closed Demands",
+ "fieldtype": "Data",
+ "width": 130,
+ },
+ ]
- condition_str = ReportFilter.set_report_filters(filters, 'date_of_visit', True , 'bp')
- condition_str = f"WHERE {condition_str}" if condition_str else ""
+ condition_str = ReportFilter.set_report_filters(filters, "date_of_visit", True, "bp")
+ condition_str = f"WHERE {condition_str}" if condition_str else ""
- sql_query = f"""
+ sql_query = f"""
SELECT
COALESCE(s.state_name, 'Unknown') AS state_name,
SUM(CASE WHEN (sc.status = 'Open') THEN 1 ELSE 0 END) as open_demands,
@@ -76,6 +75,5 @@ def execute(filters=None):
COALESCE(s.state_name, 'Unknown');
"""
-
- data = frappe.db.sql(sql_query, as_dict=True)
- return columns, data
\ No newline at end of file
+ data = frappe.db.sql(sql_query, as_dict=True)
+ return columns, data
diff --git a/myojana/myojana/report/sub_centre_wise_demands/sub_centre_wise_demands.js b/myojana/myojana/report/sub_centre_wise_demands/sub_centre_wise_demands.js
index 6065d12..074d114 100644
--- a/myojana/myojana/report/sub_centre_wise_demands/sub_centre_wise_demands.js
+++ b/myojana/myojana/report/sub_centre_wise_demands/sub_centre_wise_demands.js
@@ -2,27 +2,23 @@
// For license information, please see license.txt
var filters = [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": "From Date",
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: "From Date",
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": "To Date"
- }
-
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: "To Date",
+ },
];
if (frappe.user_roles.includes("Administrator")) {
filters.push({
- "fieldname": "state",
- "fieldtype": "Link",
- "label": "State",
- "options": "State"
- },
-
-
- )
+ fieldname: "state",
+ fieldtype: "Link",
+ label: "State",
+ options: "State",
+ });
}
frappe.query_reports["Sub centre wise demands"] = {
filters: filters,
diff --git a/myojana/myojana/report/sub_centre_wise_demands/sub_centre_wise_demands.json b/myojana/myojana/report/sub_centre_wise_demands/sub_centre_wise_demands.json
index 4c5f815..2204ae8 100644
--- a/myojana/myojana/report/sub_centre_wise_demands/sub_centre_wise_demands.json
+++ b/myojana/myojana/report/sub_centre_wise_demands/sub_centre_wise_demands.json
@@ -1,38 +1,40 @@
{
- "add_total_row": 0,
- "columns": [],
- "creation": "2024-01-16 10:43:45.607853",
- "disabled": 0,
- "docstatus": 0,
- "doctype": "Report",
- "filters": [],
- "idx": 0,
- "is_standard": "Yes",
- "letterhead": null,
- "modified": "2024-01-16 10:43:45.607853",
- "modified_by": "Administrator",
- "module": "myojana",
- "name": "Sub centre wise demands",
- "owner": "Administrator",
- "prepared_report": 0,
- "ref_doctype": "Beneficiary Profiling",
- "report_name": "Sub centre wise demands",
- "report_type": "Script Report",
- "roles": [
- {
- "role": "Admin"
- },
- {
- "role": "CSC Member"
- },
- {
- "role": "Sub centre member"
- },
- {
- "role": "MIS executive"
- },
- {
- "role": "System Manager"
- }
- ]
+ "add_total_row": 0,
+ "add_translate_data": 0,
+ "columns": [],
+ "creation": "2024-01-16 10:43:45.607853",
+ "disabled": 0,
+ "docstatus": 0,
+ "doctype": "Report",
+ "filters": [],
+ "idx": 2,
+ "is_standard": "Yes",
+ "letter_head": null,
+ "modified": "2026-06-10 10:18:38.604148",
+ "modified_by": "Administrator",
+ "module": "myojana",
+ "name": "Sub centre wise demands",
+ "owner": "Administrator",
+ "prepared_report": 0,
+ "ref_doctype": "Beneficiary Profiling",
+ "report_name": "Sub centre wise demands",
+ "report_type": "Script Report",
+ "roles": [
+ {
+ "role": "Admin"
+ },
+ {
+ "role": "CSC Member"
+ },
+ {
+ "role": "Sub centre member"
+ },
+ {
+ "role": "MIS executive"
+ },
+ {
+ "role": "System Manager"
+ }
+ ],
+ "timeout": 0
}
\ No newline at end of file
diff --git a/myojana/myojana/report/sub_centre_wise_demands/sub_centre_wise_demands.py b/myojana/myojana/report/sub_centre_wise_demands/sub_centre_wise_demands.py
index 42d6bcc..6f4f49c 100644
--- a/myojana/myojana/report/sub_centre_wise_demands/sub_centre_wise_demands.py
+++ b/myojana/myojana/report/sub_centre_wise_demands/sub_centre_wise_demands.py
@@ -2,68 +2,66 @@
# For license information, please see license.txt
import frappe
+
from myojana.utils.report_filter import ReportFilter
def execute(filters=None):
- columns = [
- {
- "fieldname": "user",
- "label": "User",
- "fieldtype": "Data",
- "width": 200,
-
- },
- {
- "fieldname": "sub_centre_name",
- "label": "Sub Centre Name",
- "fieldtype": "Data",
- "width": 200,
-
- },
- {
- "fieldname": "total_demands",
- "label": "Total Demands",
- "fieldtype": "Data",
- "width": 130,
- },
- {
- "fieldname": "open_demands",
- "label": "Open Demands",
- "fieldtype": "Data",
- "width": 130,
- },
- {
- "fieldname": "submitted_demands",
- "label": "Submitted Demands",
- "fieldtype": "Data",
- "width": 160,
- },
- {
- "fieldname": "completed_demands",
- "label": "Completed Demands",
- "fieldtype": "Data",
- "width": 170,
- },
- {
- "fieldname": "rejected_demands",
- "label": "Rejected Demands",
- "fieldtype": "Data",
- "width": 130,
- },
- {
- "fieldname": "closed_demands",
- "label": "Closed Demands",
- "fieldtype": "Data",
- "width": 130,
- }
- ]
-
+ columns = [
+ {
+ "fieldname": "user",
+ "label": "User",
+ "fieldtype": "Data",
+ "width": 200,
+ },
+ {
+ "fieldname": "sub_centre_name",
+ "label": "Sub Centre Name",
+ "fieldtype": "Data",
+ "width": 200,
+ },
+ {
+ "fieldname": "total_demands",
+ "label": "Total Demands",
+ "fieldtype": "Data",
+ "width": 130,
+ },
+ {
+ "fieldname": "open_demands",
+ "label": "Open Demands",
+ "fieldtype": "Data",
+ "width": 130,
+ },
+ {
+ "fieldname": "submitted_demands",
+ "label": "Submitted Demands",
+ "fieldtype": "Data",
+ "width": 160,
+ },
+ {
+ "fieldname": "completed_demands",
+ "label": "Completed Demands",
+ "fieldtype": "Data",
+ "width": 170,
+ },
+ {
+ "fieldname": "rejected_demands",
+ "label": "Rejected Demands",
+ "fieldtype": "Data",
+ "width": 130,
+ },
+ {
+ "fieldname": "closed_demands",
+ "label": "Closed Demands",
+ "fieldtype": "Data",
+ "width": 130,
+ },
+ ]
- condition_str = ReportFilter.set_report_filters(filters, 'date_of_visit', True , 'bp')
- condition_str = f"{condition_str}" if condition_str else "1=1"
+ condition_str = ReportFilter.set_report_filters(filters, "date_of_visit", True, "bp")
+ condition_str = f"{condition_str}" if condition_str else "1=1"
- sql_query = f"""
+ sql_query = f"""
SELECT
sc.modified_by as user,
COALESCE(hd.sub_centre_name, 'Unknown') AS sub_centre_name,
@@ -78,13 +76,11 @@ def execute(filters=None):
LEFT JOIN
`tabScheme Child` sc ON bp.name = sc.parent
LEFT JOIN
- `tabSub Centre` hd ON bp.sub_centre = hd.name
+ `tabSub Centre` hd ON bp.sub_centre = hd.name
WHERE {condition_str} AND sc.modified_by !=""
GROUP BY
COALESCE(hd.sub_centre_name, 'Unknown') , user;
"""
-
-
- data = frappe.db.sql(sql_query, as_dict=True)
- return columns, data
\ No newline at end of file
+ data = frappe.db.sql(sql_query, as_dict=True)
+ return columns, data
diff --git a/myojana/myojana/report/support_wise_status_(unique_beneficiaries)/support_wise_status_(unique_beneficiaries).js b/myojana/myojana/report/support_wise_status_(unique_beneficiaries)/support_wise_status_(unique_beneficiaries).js
index b1fa022..42dcb19 100644
--- a/myojana/myojana/report/support_wise_status_(unique_beneficiaries)/support_wise_status_(unique_beneficiaries).js
+++ b/myojana/myojana/report/support_wise_status_(unique_beneficiaries)/support_wise_status_(unique_beneficiaries).js
@@ -2,25 +2,24 @@
// For license information, please see license.txt
var filters = [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": "From Date",
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: "From Date",
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": "To Date"
- }
-
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: "To Date",
+ },
];
if (!frappe.user_roles.includes("MIS executive") || frappe.user_roles.includes("Administrator")) {
filters.push({
- "fieldname": "centre",
- "fieldtype": "Link",
- "label": "Centre",
- "options": "Centre"
- })
+ fieldname: "centre",
+ fieldtype: "Link",
+ label: "Centre",
+ options: "Centre",
+ });
}
frappe.query_reports["Support-wise status (unique beneficiaries)"] = {
- "filters": filters
+ filters: filters,
};
diff --git a/myojana/myojana/report/support_wise_status_(unique_beneficiaries)/support_wise_status_(unique_beneficiaries).py b/myojana/myojana/report/support_wise_status_(unique_beneficiaries)/support_wise_status_(unique_beneficiaries).py
index 2bd35c7..a9c94fd 100644
--- a/myojana/myojana/report/support_wise_status_(unique_beneficiaries)/support_wise_status_(unique_beneficiaries).py
+++ b/myojana/myojana/report/support_wise_status_(unique_beneficiaries)/support_wise_status_(unique_beneficiaries).py
@@ -2,39 +2,39 @@
# For license information, please see license.txt
import frappe
+
from myojana.utils.report_filter import ReportFilter
def execute(filters=None):
- columns = [
- {
- "fieldname": "milestone_category",
- "label": "Scheme Type",
- "fieldtype": "Data",
- "width": 200,
-
- },
- {
- "fieldname": "applied",
- "label": "Applied",
- "fieldtype": "Data",
- "width": 130,
- },
- {
- "fieldname": "completed",
- "label": "Completed",
- "fieldtype": "Data",
- "width": 130,
- }
- ]
+ columns = [
+ {
+ "fieldname": "milestone_category",
+ "label": "Scheme Type",
+ "fieldtype": "Data",
+ "width": 200,
+ },
+ {
+ "fieldname": "applied",
+ "label": "Applied",
+ "fieldtype": "Data",
+ "width": 130,
+ },
+ {
+ "fieldname": "completed",
+ "label": "Completed",
+ "fieldtype": "Data",
+ "width": 130,
+ },
+ ]
- condition_str = ReportFilter.set_report_filters(filters, 'date_of_visit', True , 'bp')
- if condition_str:
- condition_str = f"AND {condition_str}"
- else:
- condition_str = ""
+ condition_str = ReportFilter.set_report_filters(filters, "date_of_visit", True, "bp")
+ if condition_str:
+ condition_str = f"AND {condition_str}"
+ else:
+ condition_str = ""
- sql_query = f"""
+ sql_query = f"""
SELECT
sc.milestone_category as milestone_category,
COUNT(DISTINCT sc.parent) AS applied,
@@ -51,6 +51,5 @@ def execute(filters=None):
sc.milestone_category
"""
-
- data = frappe.db.sql(sql_query, as_dict=True)
- return columns, data
+ data = frappe.db.sql(sql_query, as_dict=True)
+ return columns, data
diff --git a/myojana/myojana/report/top_schemes_that_most_beneficiaries_of_that_user_are_eligible/top_schemes_that_most_beneficiaries_of_that_user_are_eligible.js b/myojana/myojana/report/top_schemes_that_most_beneficiaries_of_that_user_are_eligible/top_schemes_that_most_beneficiaries_of_that_user_are_eligible.js
index 174f555..bb58ce7 100644
--- a/myojana/myojana/report/top_schemes_that_most_beneficiaries_of_that_user_are_eligible/top_schemes_that_most_beneficiaries_of_that_user_are_eligible.js
+++ b/myojana/myojana/report/top_schemes_that_most_beneficiaries_of_that_user_are_eligible/top_schemes_that_most_beneficiaries_of_that_user_are_eligible.js
@@ -2,7 +2,5 @@
// For license information, please see license.txt
frappe.query_reports["Top schemes that most beneficiaries of that user are eligible"] = {
- "filters": [
-
- ]
+ filters: [],
};
diff --git a/myojana/myojana/report/top_schemes_that_most_beneficiaries_of_that_user_are_eligible/top_schemes_that_most_beneficiaries_of_that_user_are_eligible.py b/myojana/myojana/report/top_schemes_that_most_beneficiaries_of_that_user_are_eligible/top_schemes_that_most_beneficiaries_of_that_user_are_eligible.py
index abc9d8f..9699b86 100644
--- a/myojana/myojana/report/top_schemes_that_most_beneficiaries_of_that_user_are_eligible/top_schemes_that_most_beneficiaries_of_that_user_are_eligible.py
+++ b/myojana/myojana/report/top_schemes_that_most_beneficiaries_of_that_user_are_eligible/top_schemes_that_most_beneficiaries_of_that_user_are_eligible.py
@@ -2,47 +2,42 @@
# For license information, please see license.txt
import frappe
+
from myojana.utils.misc import Misc
+
+
def execute(filters=None):
# frappe.errprint(filters)
columns = [
- {
- "fieldname":"scheme",
- "label":"Scheme",
- "fieldtype":"Data",
- "width":400
- },
- {
- "fieldname":"count",
- "label":"Count",
- "fieldtype":"int",
- "width":200
- }
+ {"fieldname": "scheme", "label": "Scheme", "fieldtype": "Data", "width": 400},
+ {"fieldname": "count", "label": "Count", "fieldtype": "int", "width": 200},
]
# filter_condition_str = ReportFilter.set_report_filters(filters, 'date_of_visit', True, 't1')
- get_all_scheame = frappe.db.sql(f"select name from `tabScheme`", as_dict=True)
- scheme_ben_count_list =[]
+ get_all_scheame = frappe.db.sql("select name from `tabScheme`", as_dict=True)
+ scheme_ben_count_list = []
for scheme in get_all_scheame:
- conditions = []
- rule_cond_str = Misc.scheme_rules_to_condition(scheme.name)
- if rule_cond_str:
- conditions.append(rule_cond_str)
- # if filter_condition_str:
- # conditions.append(filter_condition_str)
- get_elegible_ben = f"""
+ conditions = []
+ rule_cond_str = Misc.scheme_rules_to_condition(scheme.name)
+ if rule_cond_str:
+ conditions.append(rule_cond_str)
+ # if filter_condition_str:
+ # conditions.append(filter_condition_str)
+ get_elegible_ben = f"""
SELECT
count(name) as count
FROM
`tabBeneficiary Profiling`
{('WHERE '+' AND '.join(conditions)) if len(conditions) else ""}
"""
-
- ben_result = frappe.db.sql(get_elegible_ben, as_dict=True)
- scheme_ben_count_list.append({"scheme": scheme.name , "count": (ben_result[0].count if len(ben_result) else 0)})
+
+ ben_result = frappe.db.sql(get_elegible_ben, as_dict=True)
+ scheme_ben_count_list.append(
+ {"scheme": scheme.name, "count": (ben_result[0].count if len(ben_result) else 0)}
+ )
sorted_schemes = sorted(scheme_ben_count_list, key=lambda x: x["count"], reverse=True)
- # Get the top 5 schemes
+ # Get the top 5 schemes
top_5_schemes = sorted_schemes[:5]
- # data = frappe.db.sql(sql_query, as_dict=True)
+ # data = frappe.db.sql(sql_query, as_dict=True)
return columns, top_5_schemes
diff --git a/myojana/myojana/report/total_approved_demands/total_approved_demands.js b/myojana/myojana/report/total_approved_demands/total_approved_demands.js
index d2a326a..6a5f342 100644
--- a/myojana/myojana/report/total_approved_demands/total_approved_demands.js
+++ b/myojana/myojana/report/total_approved_demands/total_approved_demands.js
@@ -3,16 +3,15 @@
var filters = [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": "From Date",
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: "From Date",
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": "To Date"
- }
-
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: "To Date",
+ },
];
// if (!frappe.user_roles.includes("MIS executive") || frappe.user_roles.includes("Administrator")) {
// filters.push({
@@ -24,5 +23,5 @@ var filters = [
// }
frappe.query_reports["Total Approved Demands"] = {
- filters: filters
+ filters: filters,
};
diff --git a/myojana/myojana/report/total_approved_demands/total_approved_demands.py b/myojana/myojana/report/total_approved_demands/total_approved_demands.py
index 0e520a9..b4cc6e6 100644
--- a/myojana/myojana/report/total_approved_demands/total_approved_demands.py
+++ b/myojana/myojana/report/total_approved_demands/total_approved_demands.py
@@ -1,29 +1,26 @@
import frappe
+
from myojana.utils.report_filter import ReportFilter
+
def execute(filters=None):
- columns = [
- {
- "fieldname": "application_submitted",
- "label": "Application Submitted",
- "fieldtype": "Data",
- "width": 400,
- },
- {
- "fieldname": "count",
- "label": "Count",
- "fieldtype": "Int",
- "width": 200
- }
- ]
+ columns = [
+ {
+ "fieldname": "application_submitted",
+ "label": "Application Submitted",
+ "fieldtype": "Data",
+ "width": 400,
+ },
+ {"fieldname": "count", "label": "Count", "fieldtype": "Int", "width": 200},
+ ]
- condition_str = ReportFilter.set_report_filters(filters, 'creation', True)
- if condition_str:
- condition_str = f"AND {condition_str}"
- else:
- condition_str = ""
+ condition_str = ReportFilter.set_report_filters(filters, "creation", True)
+ if condition_str:
+ condition_str = f"AND {condition_str}"
+ else:
+ condition_str = ""
- sql_query = f"""
+ sql_query = f"""
SELECT
application_submitted,
COUNT(name) as count
@@ -37,5 +34,5 @@ def execute(filters=None):
application_submitted
"""
- data = frappe.db.sql(sql_query, as_dict=True)
- return columns, data
\ No newline at end of file
+ data = frappe.db.sql(sql_query, as_dict=True)
+ return columns, data
diff --git a/myojana/myojana/report/total_beneficiary_from_the_camps/total_beneficiary_from_the_camps.js b/myojana/myojana/report/total_beneficiary_from_the_camps/total_beneficiary_from_the_camps.js
index 9378e16..3dcb811 100644
--- a/myojana/myojana/report/total_beneficiary_from_the_camps/total_beneficiary_from_the_camps.js
+++ b/myojana/myojana/report/total_beneficiary_from_the_camps/total_beneficiary_from_the_camps.js
@@ -2,7 +2,5 @@
// For license information, please see license.txt
frappe.query_reports["Total beneficiary from the camps"] = {
- "filters": [
-
- ]
+ filters: [],
};
diff --git a/myojana/myojana/report/total_beneficiary_from_the_camps/total_beneficiary_from_the_camps.py b/myojana/myojana/report/total_beneficiary_from_the_camps/total_beneficiary_from_the_camps.py
index bd84138..fb39c8c 100644
--- a/myojana/myojana/report/total_beneficiary_from_the_camps/total_beneficiary_from_the_camps.py
+++ b/myojana/myojana/report/total_beneficiary_from_the_camps/total_beneficiary_from_the_camps.py
@@ -2,39 +2,37 @@
# For license information, please see license.txt
import frappe
+
from myojana.utils.report_filter import ReportFilter
def execute(filters=None):
- columns = [
- {
- "fieldname": "milestone",
- "label": "Support Category",
- "fieldtype": "Data",
- "width": 200,
-
- },
- {
- "fieldname": "count",
- "label": "Count",
- "fieldtype": "Int",
- "width": 130,
- }
- ]
-
-
- condition_str = ReportFilter.set_report_filters(filters, 'date_of_visit', True , 'c')
- condition_str = condition_str.replace("c.centre", "c.custom_centre")
- condition_str = f"WHERE {condition_str}" if condition_str else ""
-
- sql_query = f"""
- SELECT cc.support_category as milestone , SUM(cc.number_of_participants) as count
+ columns = [
+ {
+ "fieldname": "milestone",
+ "label": "Support Category",
+ "fieldtype": "Data",
+ "width": 200,
+ },
+ {
+ "fieldname": "count",
+ "label": "Count",
+ "fieldtype": "Int",
+ "width": 130,
+ },
+ ]
+
+ condition_str = ReportFilter.set_report_filters(filters, "date_of_visit", True, "c")
+ condition_str = condition_str.replace("c.centre", "c.custom_centre")
+ condition_str = f"WHERE {condition_str}" if condition_str else ""
+
+ sql_query = f"""
+ SELECT cc.support_category as milestone , SUM(cc.number_of_participants) as count
FROM `tabCamp` AS c
INNER JOIN `tabCamp Form Child` AS cc ON cc.parent = c.name
- {condition_str}
+ {condition_str}
Group by cc.support_category;
"""
-
- data = frappe.db.sql(sql_query, as_dict=True)
- return columns, data
\ No newline at end of file
+ data = frappe.db.sql(sql_query, as_dict=True)
+ return columns, data
diff --git a/myojana/myojana/report/total_demands/total_demands.js b/myojana/myojana/report/total_demands/total_demands.js
index cc53e97..46a86af 100644
--- a/myojana/myojana/report/total_demands/total_demands.js
+++ b/myojana/myojana/report/total_demands/total_demands.js
@@ -2,27 +2,26 @@
// For license information, please see license.txt
var filters = [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": "From Date",
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: "From Date",
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": "To Date"
- }
-
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: "To Date",
+ },
];
frappe.query_reports["Total Demands"] = {
filters: filters,
- "formatter": function(value, row, column, data, default_formatter) {
- // Make the 'name' field clickable to open the relevant document
- if (column.fieldname === "current_status" && data) {
- value = `${value}`;
- }
-
- value = default_formatter(value, row, column, data);
- return value;
- }
+ formatter: function (value, row, column, data, default_formatter) {
+ // Make the 'name' field clickable to open the relevant document
+ if (column.fieldname === "current_status" && data) {
+ value = `${value}`;
+ }
+
+ value = default_formatter(value, row, column, data);
+ return value;
+ },
};
diff --git a/myojana/myojana/report/total_demands/total_demands.py b/myojana/myojana/report/total_demands/total_demands.py
index 503d1ef..b3cf984 100644
--- a/myojana/myojana/report/total_demands/total_demands.py
+++ b/myojana/myojana/report/total_demands/total_demands.py
@@ -1,29 +1,31 @@
import frappe
+
from myojana.utils.report_filter import ReportFilter
+
def execute(filters=None):
- columns = [
- {
- "fieldname": "current_status",
- "label": "Current status",
- "fieldtype": "Data",
- "width": 400,
- },
- {
- "fieldname": "status",
- "label": "Count",
- "fieldtype": "Int",
- "width": 400,
- },
- ]
+ columns = [
+ {
+ "fieldname": "current_status",
+ "label": "Current status",
+ "fieldtype": "Data",
+ "width": 400,
+ },
+ {
+ "fieldname": "status",
+ "label": "Count",
+ "fieldtype": "Int",
+ "width": 400,
+ },
+ ]
- condition_str = ReportFilter.set_report_filters(filters, 'date_of_visit', True, 'ben_table')
- if condition_str:
- condition_str = f"AND {condition_str}"
- else:
- condition_str = ""
+ condition_str = ReportFilter.set_report_filters(filters, "date_of_visit", True, "ben_table")
+ if condition_str:
+ condition_str = f"AND {condition_str}"
+ else:
+ condition_str = ""
- sql_query = f"""
+ sql_query = f"""
SELECT
_sc.status as current_status,
COUNT(_sc.status) as status
@@ -36,5 +38,5 @@ def execute(filters=None):
_sc.status;
"""
- data = frappe.db.sql(sql_query, as_dict=True)
- return columns, data
+ data = frappe.db.sql(sql_query, as_dict=True)
+ return columns, data
diff --git a/myojana/myojana/report/total_sanctioned_demands/total_sanctioned_demands.js b/myojana/myojana/report/total_sanctioned_demands/total_sanctioned_demands.js
index 5215d78..e82acd4 100644
--- a/myojana/myojana/report/total_sanctioned_demands/total_sanctioned_demands.js
+++ b/myojana/myojana/report/total_sanctioned_demands/total_sanctioned_demands.js
@@ -2,27 +2,26 @@
// For license information, please see license.txt
var filters = [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": "From Date",
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: "From Date",
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": "To Date"
- }
-
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: "To Date",
+ },
];
frappe.query_reports["Total sanctioned demands"] = {
filters: filters,
- "formatter": function(value, row, column, data, default_formatter) {
- // Make the 'name' field clickable to open the relevant document
+ formatter: function (value, row, column, data, default_formatter) {
+ // Make the 'name' field clickable to open the relevant document
console.log(column.fieldname);
- if (column.fieldname === "status" && data) {
- value = `${value}`;
- }
-
- value = default_formatter(value, row, column, data);
- return value;
- }
+ if (column.fieldname === "status" && data) {
+ value = `${value}`;
+ }
+
+ value = default_formatter(value, row, column, data);
+ return value;
+ },
};
diff --git a/myojana/myojana/report/total_sanctioned_demands/total_sanctioned_demands.py b/myojana/myojana/report/total_sanctioned_demands/total_sanctioned_demands.py
index bb57c7d..eb2dad0 100644
--- a/myojana/myojana/report/total_sanctioned_demands/total_sanctioned_demands.py
+++ b/myojana/myojana/report/total_sanctioned_demands/total_sanctioned_demands.py
@@ -1,29 +1,26 @@
import frappe
+
from myojana.utils.report_filter import ReportFilter
+
def execute(filters=None):
- columns = [
- {
- "fieldname": "status",
- "label": "Current status",
- "fieldtype": "Data",
- "width": 400,
- },
- {
- "fieldname": "count",
- "label": "Count",
- "fieldtype": "Int",
- "width": 200
- }
- ]
+ columns = [
+ {
+ "fieldname": "status",
+ "label": "Current status",
+ "fieldtype": "Data",
+ "width": 400,
+ },
+ {"fieldname": "count", "label": "Count", "fieldtype": "Int", "width": 200},
+ ]
- condition_str = ReportFilter.set_report_filters(filters, 'date_of_visit', True, 'ben_table')
- if condition_str:
- condition_str = f"AND {condition_str}"
- else:
- condition_str = ""
+ condition_str = ReportFilter.set_report_filters(filters, "date_of_visit", True, "ben_table")
+ if condition_str:
+ condition_str = f"AND {condition_str}"
+ else:
+ condition_str = ""
- sql_query = f"""
+ sql_query = f"""
SELECT
_sc.status,
COUNT(_sc.name) AS count
@@ -37,5 +34,5 @@ def execute(filters=None):
_sc.status;
"""
- data = frappe.db.sql(sql_query, as_dict=True)
- return columns, data
\ No newline at end of file
+ data = frappe.db.sql(sql_query, as_dict=True)
+ return columns, data
diff --git a/myojana/myojana/report/total_under_process_demands/total_under_process_demands.js b/myojana/myojana/report/total_under_process_demands/total_under_process_demands.js
index f2e7921..492a953 100644
--- a/myojana/myojana/report/total_under_process_demands/total_under_process_demands.js
+++ b/myojana/myojana/report/total_under_process_demands/total_under_process_demands.js
@@ -2,28 +2,27 @@
// For license information, please see license.txt
var filters = [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": "From Date",
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: "From Date",
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": "To Date"
- }
-
-]
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: "To Date",
+ },
+];
frappe.query_reports["Total under process demands"] = {
filters: filters,
- "formatter": function(value, row, column, data, default_formatter) {
- // Make the 'name' field clickable to open the relevant document
+ formatter: function (value, row, column, data, default_formatter) {
+ // Make the 'name' field clickable to open the relevant document
console.log(column.fieldname);
- if (column.fieldname === "status" && data) {
- value = `${value}`;
- }
-
- value = default_formatter(value, row, column, data);
- return value;
- }
+ if (column.fieldname === "status" && data) {
+ value = `${value}`;
+ }
+
+ value = default_formatter(value, row, column, data);
+ return value;
+ },
};
diff --git a/myojana/myojana/report/total_under_process_demands/total_under_process_demands.py b/myojana/myojana/report/total_under_process_demands/total_under_process_demands.py
index d4f79ac..6de3279 100644
--- a/myojana/myojana/report/total_under_process_demands/total_under_process_demands.py
+++ b/myojana/myojana/report/total_under_process_demands/total_under_process_demands.py
@@ -1,29 +1,26 @@
import frappe
+
from myojana.utils.report_filter import ReportFilter
+
def execute(filters=None):
- columns = [
- {
- "fieldname": "status",
- "label": "Current status",
- "fieldtype": "Data",
- "width": 400,
- },
- {
- "fieldname": "count",
- "label": "Count",
- "fieldtype": "Int",
- "width": 200
- }
- ]
+ columns = [
+ {
+ "fieldname": "status",
+ "label": "Current status",
+ "fieldtype": "Data",
+ "width": 400,
+ },
+ {"fieldname": "count", "label": "Count", "fieldtype": "Int", "width": 200},
+ ]
- condition_str = ReportFilter.set_report_filters(filters, 'date_of_visit', True, 'ben_table')
- if condition_str:
- condition_str = f"AND {condition_str}"
- else:
- condition_str = ""
+ condition_str = ReportFilter.set_report_filters(filters, "date_of_visit", True, "ben_table")
+ if condition_str:
+ condition_str = f"AND {condition_str}"
+ else:
+ condition_str = ""
- sql_query = f"""
+ sql_query = f"""
SELECT
_sc.status AS status,
COUNT(_sc.name) AS count
@@ -37,5 +34,5 @@ def execute(filters=None):
_sc.application_submitted,_sc.status
"""
- data = frappe.db.sql(sql_query, as_dict=True)
- return columns, data
+ data = frappe.db.sql(sql_query, as_dict=True)
+ return columns, data
diff --git a/myojana/myojana/report/tracking_of_occupation_of_beneficiaries,_segregated_by_caste/tracking_of_occupation_of_beneficiaries,_segregated_by_caste.js b/myojana/myojana/report/tracking_of_occupation_of_beneficiaries,_segregated_by_caste/tracking_of_occupation_of_beneficiaries,_segregated_by_caste.js
index 059fd83..8d56081 100644
--- a/myojana/myojana/report/tracking_of_occupation_of_beneficiaries,_segregated_by_caste/tracking_of_occupation_of_beneficiaries,_segregated_by_caste.js
+++ b/myojana/myojana/report/tracking_of_occupation_of_beneficiaries,_segregated_by_caste/tracking_of_occupation_of_beneficiaries,_segregated_by_caste.js
@@ -2,30 +2,30 @@
// For license information, please see license.txt
var filters = [
{
- "fieldname": "from_date",
- "fieldtype": "Date",
- "label": "From Date",
+ fieldname: "from_date",
+ fieldtype: "Date",
+ label: "From Date",
},
{
- "fieldname": "to_date",
- "fieldtype": "Date",
- "label": "To Date"
+ fieldname: "to_date",
+ fieldtype: "Date",
+ label: "To Date",
},
{
- "fieldname":"caste_category",
- "label":"Caste category",
- "fieldtype":"Link",
- "options":"Caste category"
- }
+ fieldname: "caste_category",
+ label: "Caste category",
+ fieldtype: "Link",
+ options: "Caste category",
+ },
];
if (!frappe.user_roles.includes("MIS executive") || frappe.user_roles.includes("Administrator")) {
filters.push({
- "fieldname": "centre",
- "fieldtype": "Link",
- "label": "Centre",
- "options": "Centre"
- })
+ fieldname: "centre",
+ fieldtype: "Link",
+ label: "Centre",
+ options: "Centre",
+ });
}
frappe.query_reports["Tracking of Occupation of beneficiaries, segregated by Caste"] = {
- filters: filters
+ filters: filters,
};
diff --git a/myojana/myojana/report/tracking_of_occupation_of_beneficiaries,_segregated_by_caste/tracking_of_occupation_of_beneficiaries,_segregated_by_caste.py b/myojana/myojana/report/tracking_of_occupation_of_beneficiaries,_segregated_by_caste/tracking_of_occupation_of_beneficiaries,_segregated_by_caste.py
index 1cb0ce0..d739ff0 100644
--- a/myojana/myojana/report/tracking_of_occupation_of_beneficiaries,_segregated_by_caste/tracking_of_occupation_of_beneficiaries,_segregated_by_caste.py
+++ b/myojana/myojana/report/tracking_of_occupation_of_beneficiaries,_segregated_by_caste/tracking_of_occupation_of_beneficiaries,_segregated_by_caste.py
@@ -1,37 +1,34 @@
import frappe
+
from myojana.utils.report_filter import ReportFilter
+
def execute(filters=None):
- columns = [
- {
- "fieldname": "caste_category",
- "label": "Caste",
- "fieldtype": "Link",
- "options": "Caste category",
- "width": 200
- },
- {
- "fieldname": "occupation",
- "label": "Occupation",
- "fieldtype": "Link",
- "options": "Occupation",
- "width": 300
- },
- {
- "fieldname": "count",
- "label": "Count",
- "fieldtype": "int",
- "width": 200
- }
- ]
+ columns = [
+ {
+ "fieldname": "caste_category",
+ "label": "Caste",
+ "fieldtype": "Link",
+ "options": "Caste category",
+ "width": 200,
+ },
+ {
+ "fieldname": "occupation",
+ "label": "Occupation",
+ "fieldtype": "Link",
+ "options": "Occupation",
+ "width": 300,
+ },
+ {"fieldname": "count", "label": "Count", "fieldtype": "int", "width": 200},
+ ]
- condition_str = ReportFilter.set_report_filters(filters, 'date_of_visit', True, 'ben')
- if condition_str:
- condition_str = f"AND {condition_str}"
- else:
- condition_str = ""
+ condition_str = ReportFilter.set_report_filters(filters, "date_of_visit", True, "ben")
+ if condition_str:
+ condition_str = f"AND {condition_str}"
+ else:
+ condition_str = ""
- sql_query = f"""
+ sql_query = f"""
SELECT
ben.caste_category as caste_category,
ben.current_occupation as occupation,
@@ -45,5 +42,5 @@ def execute(filters=None):
ORDER BY caste_category ASC, occupation ASC
"""
- data = frappe.db.sql(sql_query, as_dict=True)
- return columns, data
+ data = frappe.db.sql(sql_query, as_dict=True)
+ return columns, data
diff --git a/myojana/public/js/beneficiary_profiling/beneficiary_profiling.js b/myojana/public/js/beneficiary_profiling/beneficiary_profiling.js
index c777cf8..5c998cc 100644
--- a/myojana/public/js/beneficiary_profiling/beneficiary_profiling.js
+++ b/myojana/public/js/beneficiary_profiling/beneficiary_profiling.js
@@ -1,86 +1,86 @@
// order list in select fields
const get_ordered_list = async (doctype, optionsToSort) => {
- let list = await callAPI({
- method: 'frappe.desk.search.search_link',
- freeze: false,
- args: {
- doctype: doctype,
- page_length: 1000,
- txt: ''
- },
- // freeze_message: __("Getting list ..."),
- })
- if (optionsToSort) {
- let reOrderedList = [];
- optionsToSort?.forEach(async (option) => {
- const requiredOption = await list?.find(item => item.value === option);
- reOrderedList.push(requiredOption);
- });
- const exceptionList = await list?.filter(item => !optionsToSort.some(item2 => item.value === item2));
- exceptionList?.forEach(async (option) => {
- reOrderedList = [...reOrderedList, option];
- })
- list = reOrderedList;
- return list;
- // const otherOption = list.find(item => item.value === 'Others');
- // if (otherOption) {
- // list = list.filter(item => item.value !== 'Others');
- // list.push(otherOption);
- // }
- }
- return list
-
-}
+ let list = await callAPI({
+ method: "frappe.desk.search.search_link",
+ freeze: false,
+ args: {
+ doctype: doctype,
+ page_length: 1000,
+ txt: "",
+ },
+ // freeze_message: __("Getting list ..."),
+ });
+ if (optionsToSort) {
+ let reOrderedList = [];
+ optionsToSort?.forEach(async (option) => {
+ const requiredOption = await list?.find((item) => item.value === option);
+ reOrderedList.push(requiredOption);
+ });
+ const exceptionList = await list?.filter(
+ (item) => !optionsToSort.some((item2) => item.value === item2)
+ );
+ exceptionList?.forEach(async (option) => {
+ reOrderedList = [...reOrderedList, option];
+ });
+ list = reOrderedList;
+ return list;
+ // const otherOption = list.find(item => item.value === 'Others');
+ // if (otherOption) {
+ // list = list.filter(item => item.value !== 'Others');
+ // list.push(otherOption);
+ // }
+ }
+ return list;
+};
const get_occupation_category = async (frm) => {
- let list = await callAPI({
- method: 'frappe.client.get',
- freeze: false,
- args: {
- doctype: 'Occupation',
- name: frm.doc.current_occupation
- },
- // freeze_message: __("Getting schemes..."),
- })
- return list;
-}
+ let list = await callAPI({
+ method: "frappe.client.get",
+ freeze: false,
+ args: {
+ doctype: "Occupation",
+ name: frm.doc.current_occupation,
+ },
+ // freeze_message: __("Getting schemes..."),
+ });
+ return list;
+};
const get_document = async (filter, fields) => {
- return await frappe.call({
- method: 'frappe.client.get_value',
- args: {
- 'doctype': 'Beneficiary Profiling',
- 'filters': filter,
- 'fieldname': fields
- },
- callback: function (response) {
- // Handle the response
- if (!response.exc) {
- var doc = response.message;
- return doc;
- } else {
- console.error('Error fetching document:', response.exc);
- }
- }
- });
-
-}
+ return await frappe.call({
+ method: "frappe.client.get_value",
+ args: {
+ doctype: "Beneficiary Profiling",
+ filters: filter,
+ fieldname: fields,
+ },
+ callback: function (response) {
+ // Handle the response
+ if (!response.exc) {
+ var doc = response.message;
+ return doc;
+ } else {
+ console.error("Error fetching document:", response.exc);
+ }
+ },
+ });
+};
// generate date of birth
function generateDOBFromAge(ageInYears = 0, ageInMonths = 0, date_of_birth) {
- let date = 1;
- if (date_of_birth) {
- const split_value = date_of_birth.split('-');
- date = parseInt(split_value[2], 10);
- }
- let currentDate = new Date();
- let startOfMonth = new Date(currentDate.getFullYear(), currentDate.getMonth(), date);
- let birthYear = startOfMonth.getFullYear() - ageInYears;
- let birthMonth = startOfMonth.getMonth() - ageInMonths;
- if (birthMonth < 0) {
- birthYear--;
- birthMonth += 11;
- }
- let generatedDOB = new Date(birthYear, birthMonth, date);
- return generatedDOB;
+ let date = 1;
+ if (date_of_birth) {
+ const split_value = date_of_birth.split("-");
+ date = parseInt(split_value[2], 10);
+ }
+ let currentDate = new Date();
+ let startOfMonth = new Date(currentDate.getFullYear(), currentDate.getMonth(), date);
+ let birthYear = startOfMonth.getFullYear() - ageInYears;
+ let birthMonth = startOfMonth.getMonth() - ageInMonths;
+ if (birthMonth < 0) {
+ birthYear--;
+ birthMonth += 11;
+ }
+ let generatedDOB = new Date(birthYear, birthMonth, date);
+ return generatedDOB;
}
// function generateDOBFromAge(ageInYears = 0, ageInMonths = 0 , date_of_birth) {
// if(date_of_birth){
@@ -103,117 +103,137 @@ function generateDOBFromAge(ageInYears = 0, ageInMonths = 0, date_of_birth) {
// return generatedDOB;
// }
// get scheme lists
-const get_scheme_list = async(frm) => {
- let list = await callAPI({
- method: 'myojana.api.execute',
- freeze: false,
- args: {
- name: frm.doc.name
- },
- freeze_message: __("Getting schemes..."),
- })
- scheme_list = list.sort((a, b) => b.matching_rules_per - a.matching_rules_per);
- return scheme_list
-}
+const get_scheme_list = async (frm) => {
+ let list = await callAPI({
+ method: "myojana.api.execute",
+ freeze: false,
+ args: {
+ name: frm.doc.name,
+ },
+ freeze_message: __("Getting schemes..."),
+ });
+ scheme_list = list.sort((a, b) => b.matching_rules_per - a.matching_rules_per);
+ return scheme_list;
+};
async function render_scheme_datatable(frm) {
+ scheme_list = await get_scheme_list(frm);
+ let tableConf = {
+ columns: [
+ {
+ name: " ",
+ id: "serial_no",
+ editable: false,
+ resizable: true,
+ sortable: false,
+ focusable: false,
+ dropdown: false,
+ width: 70,
+ format: (value, columns, ops, row) => {
+ return columns?.[0]?.rowIndex + 1;
+ },
+ },
+ {
+ name: "Name",
+ id: "name",
+ editable: false,
+ resizable: false,
+ sortable: false,
+ focusable: false,
+ dropdown: false,
+ width: 400,
+ },
+ {
+ name: "Milestone",
+ id: "milestone",
+ editable: false,
+ resizable: false,
+ sortable: false,
+ focusable: false,
+ dropdown: false,
+ width: 200,
+ },
+ {
+ name: "Matches",
+ id: "matches",
+ editable: false,
+ resizable: false,
+ sortable: false,
+ focusable: false,
+ dropdown: false,
+ width: 90,
+ format: (value, columns, ops, row) => {
+ let rules = row?.rules
+ ?.map((e) => `${e.message} ${e.matched ? "✔" : "❌"}`)
+ .join("\n")
+ .toString();
+ return `${row?.matches?.bold()}
`;
+ },
+ },
+ {
+ name: "Group",
+ id: "group",
+ editable: false,
+ resizable: false,
+ sortable: false,
+ focusable: false,
+ dropdown: false,
+ width: 70,
+ format: (value, columns, ops, row) => {
+ let messages = row.groups.map((g) =>
+ g.rules
+ ?.map((e) => `${e.message} ${e.matched ? "✔" : "❌"}`)
+ .join("\n")
+ .toString()
+ );
+ return `${row?.groups
+ ?.filter((f) => f.percentage == 100)
+ ?.length?.toString()
+ ?.bold()}/${row?.groups?.length?.toString()?.bold()}
`;
+ },
+ },
+ //milestone
+ // {
+ // name: "Availed",
+ // id: 'availed',
+ // editable: false,
+ // resizable: false,
+ // sortable: false,
+ // focusable: false,
+ // dropdown: false,
+ // width: 100,
+ // format: (value, columns, ops, row) => {
+ // return `${value ? '' : '✔'}
`
+ // }
+ // }
+ ],
+ rows: [],
+ };
+ let scheme_row_list = scheme_list
+ .map((scheme, i) => {
+ return (
+ scheme.available && {
+ scheme_name: scheme?.name_of_the_scheme,
+ name: `${scheme.name_of_the_scheme}`,
+ matches: `${scheme.matching_rules}/${scheme?.total_rules}`,
+ rules: scheme.rules,
+ groups: scheme.groups,
+ availed: scheme.available,
+ milestone: scheme.milestone,
+ }
+ );
+ })
+ .filter((f) => f);
- scheme_list = await get_scheme_list(frm)
- let tableConf = {
- columns: [
- {
- name: " ",
- id: 'serial_no',
- editable: false,
- resizable: true,
- sortable: false,
- focusable: false,
- dropdown: false,
- width: 70,
- format: (value, columns, ops, row) => {
- return (columns?.[0]?.rowIndex + 1)
- }
- },
- {
- name: "Name",
- id: 'name',
- editable: false,
- resizable: false,
- sortable: false,
- focusable: false,
- dropdown: false,
- width: 400
- },
- {
- name: "Milestone",
- id: 'milestone',
- editable: false,
- resizable: false,
- sortable: false,
- focusable: false,
- dropdown: false,
- width: 200
- },
- {
- name: "Matches",
- id: 'matches',
- editable: false,
- resizable: false,
- sortable: false,
- focusable: false,
- dropdown: false,
- width: 90,
- format: (value, columns, ops, row) => {
- let rules = row?.rules?.map(e => `${e.message} ${e.matched ? '✔' : '❌'}`).join("\n").toString()
- return `${row?.matches?.bold()}
`
- }
- },
- {
- name: "Group",
- id: 'group',
- editable: false,
- resizable: false,
- sortable: false,
- focusable: false,
- dropdown: false,
- width: 70,
- format: (value, columns, ops, row) => {
- let messages = row.groups.map(g => (g.rules?.map(e => `${e.message} ${e.matched ? '✔' : '❌'}`).join("\n").toString()))
- return `${row?.groups?.filter(f => f.percentage == 100)?.length?.toString()?.bold()}/${row?.groups?.length?.toString()?.bold()}
`
- }
- },
- //milestone
- // {
- // name: "Availed",
- // id: 'availed',
- // editable: false,
- // resizable: false,
- // sortable: false,
- // focusable: false,
- // dropdown: false,
- // width: 100,
- // format: (value, columns, ops, row) => {
- // return `${value ? '' : '✔'}
`
- // }
- // }
- ],
- rows: []
- };
- let scheme_row_list = scheme_list.map((scheme, i) => {
- return scheme.available && {
- scheme_name: scheme?.name_of_the_scheme,
- name: `${scheme.name_of_the_scheme}`,
- matches: `${scheme.matching_rules}/${scheme?.total_rules}`,
- rules: scheme.rules,
- groups: scheme.groups,
- availed: scheme.available,
- milestone: scheme.milestone
- }
- }).filter(f => f);
-
- const container = document.getElementById('all_schemes');
- const datatable = new DataTable(container, { columns: tableConf.columns, serialNoColumn: false });
- datatable.style.setStyle(`.dt-scrollable`, { height: '300px!important', overflow: 'scroll!important' });
- addTableFilter(datatable, ['scheme_name', 'milestone'], scheme_row_list)
- datatable.refresh(scheme_row_list);
-}
\ No newline at end of file
+ const container = document.getElementById("all_schemes");
+ const datatable = new DataTable(container, {
+ columns: tableConf.columns,
+ serialNoColumn: false,
+ });
+ datatable.style.setStyle(`.dt-scrollable`, {
+ height: "300px!important",
+ overflow: "scroll!important",
+ });
+ addTableFilter(datatable, ["scheme_name", "milestone"], scheme_row_list);
+ datatable.refresh(scheme_row_list);
+}
diff --git a/myojana/public/js/beneficiary_profiling/dialogs.js b/myojana/public/js/beneficiary_profiling/dialogs.js
index 3e81f69..23ea2ab 100644
--- a/myojana/public/js/beneficiary_profiling/dialogs.js
+++ b/myojana/public/js/beneficiary_profiling/dialogs.js
@@ -1,266 +1,266 @@
-
let _frm;
let global_frm;
// global variable
const dialogsConfig = {
- document_submitted: {
- title: __('Enter details for Support'),
- fields: [
- {
- label: __('Date of application'),
- fieldname: 'date_of_application',
- fieldtype: 'Date',
- reqd: 1,
- _doc: true
- },
- {
- label: __('Mode of application'),
- fieldname: 'mode_of_application',
- fieldtype: 'Select',
- reqd: 1,
- options: [__("Online"), __("Offline")],
- _doc: true
- },
- {
- label: __('Reason of application'),
- fieldname: 'reason_of_application',
- fieldtype: 'Data',
- _doc: true
- },
- {
- label: __('Application number'),
- fieldname: 'application_number',
- fieldtype: 'Data',
- _doc: true
- },
- {
- label: __('Amount paid'),
- fieldname: 'amount_paid',
- fieldtype: 'Int',
- _doc: true
- },
- {
- label: __('Paid by'),
- fieldname: 'paid_by',
- fieldtype: 'Link',
- options: 'Scheme Paid by',
- 'only_select':true,
- _doc: true
- },
- {
- label: __('Remarks'),
- fieldname: 'remarks',
- fieldtype: 'Data',
- _doc: true
- }
- ]
- },
+ document_submitted: {
+ title: __("Enter details for Support"),
+ fields: [
+ {
+ label: __("Date of application"),
+ fieldname: "date_of_application",
+ fieldtype: "Date",
+ reqd: 1,
+ _doc: true,
+ },
+ {
+ label: __("Mode of application"),
+ fieldname: "mode_of_application",
+ fieldtype: "Select",
+ reqd: 1,
+ options: [__("Online"), __("Offline")],
+ _doc: true,
+ },
+ {
+ label: __("Reason of application"),
+ fieldname: "reason_of_application",
+ fieldtype: "Data",
+ _doc: true,
+ },
+ {
+ label: __("Application number"),
+ fieldname: "application_number",
+ fieldtype: "Data",
+ _doc: true,
+ },
+ {
+ label: __("Amount paid"),
+ fieldname: "amount_paid",
+ fieldtype: "Int",
+ _doc: true,
+ },
+ {
+ label: __("Paid by"),
+ fieldname: "paid_by",
+ fieldtype: "Link",
+ options: "Scheme Paid by",
+ only_select: true,
+ _doc: true,
+ },
+ {
+ label: __("Remarks"),
+ fieldname: "remarks",
+ fieldtype: "Data",
+ _doc: true,
+ },
+ ],
+ },
- document_completed_frm_support: {
- title: __('Enter details for Support'),
- fields: [
- {
- label: __('Date of application'),
- fieldname: 'date_of_application',
- fieldtype: 'Date',
- reqd: 1,
- _doc: true
- },
- {
- label: __('Date of completion'),
- fieldname: 'date_of_completion',
- fieldtype: 'Date',
- reqd: 1,
- _doc: true
- },
- {
- label: __('Mode of application'),
- fieldname: 'mode_of_application',
- fieldtype: 'Select',
- reqd: 1,
- options: [__("Online"), __("Offline")],
- _doc: true
- },
- {
- label: __('Reason of application'),
- fieldname: 'reason_of_application',
- fieldtype: 'Data',
- _doc: true
- },
- {
- label: __('Application number'),
- fieldname: 'application_number',
- fieldtype: 'Data',
- _doc: true
- },
- {
- label: __('Amount paid'),
- fieldname: 'amount_paid',
- fieldtype: 'Int',
- _doc: true
- },
- {
- label: __('Paid by'),
- fieldname: 'paid_by',
- fieldtype: 'Link',
- options: 'Scheme Paid by',
- 'only_select':true,
- _doc: true
- },
- {
- label: __('Completion certificate'),
- fieldname: 'completion_certificate',
- fieldtype: 'Attach',
- _doc: true
- },
- {
- label: __('Remarks'),
- fieldname: 'remarks',
- fieldtype: 'Data',
- _doc: true
- }
- ]
- },
- document_completed: {
- title: __('Enter details for Support'),
- fields: [
- {
- label: __('Date of completion'),
- fieldname: 'date_of_completion',
- fieldtype: 'Date',
- reqd: 1,
- _doc: true
- },
- {
- label: __('Completion certificate'),
- fieldname: 'completion_certificate',
- fieldtype: 'Attach',
- _doc: true
- },
- {
- label: __('Remarks'),
- fieldname: 'remarks',
- fieldtype: 'Data',
- _doc: true
- }
- ]
- },
- document_rejected: {
- title: __('Enter details for Support'),
- fields: [
- {
- label: __('Date of rejection'),
- fieldname: 'date_of_rejection',
- fieldtype: 'Date',
- reqd: 1,
- _doc: true
- },
- {
- label: __('Reason of rejection'),
- fieldname: 'reason_of_rejection',
- fieldtype: 'Data',
- reqd: 1,
- _doc: true
- },
- {
- label: __('Remarks'),
- fieldname: 'remarks',
- fieldtype: 'Data',
- _doc: true
- }
- ]
- }
-}
+ document_completed_frm_support: {
+ title: __("Enter details for Support"),
+ fields: [
+ {
+ label: __("Date of application"),
+ fieldname: "date_of_application",
+ fieldtype: "Date",
+ reqd: 1,
+ _doc: true,
+ },
+ {
+ label: __("Date of completion"),
+ fieldname: "date_of_completion",
+ fieldtype: "Date",
+ reqd: 1,
+ _doc: true,
+ },
+ {
+ label: __("Mode of application"),
+ fieldname: "mode_of_application",
+ fieldtype: "Select",
+ reqd: 1,
+ options: [__("Online"), __("Offline")],
+ _doc: true,
+ },
+ {
+ label: __("Reason of application"),
+ fieldname: "reason_of_application",
+ fieldtype: "Data",
+ _doc: true,
+ },
+ {
+ label: __("Application number"),
+ fieldname: "application_number",
+ fieldtype: "Data",
+ _doc: true,
+ },
+ {
+ label: __("Amount paid"),
+ fieldname: "amount_paid",
+ fieldtype: "Int",
+ _doc: true,
+ },
+ {
+ label: __("Paid by"),
+ fieldname: "paid_by",
+ fieldtype: "Link",
+ options: "Scheme Paid by",
+ only_select: true,
+ _doc: true,
+ },
+ {
+ label: __("Completion certificate"),
+ fieldname: "completion_certificate",
+ fieldtype: "Attach",
+ _doc: true,
+ },
+ {
+ label: __("Remarks"),
+ fieldname: "remarks",
+ fieldtype: "Data",
+ _doc: true,
+ },
+ ],
+ },
+ document_completed: {
+ title: __("Enter details for Support"),
+ fields: [
+ {
+ label: __("Date of completion"),
+ fieldname: "date_of_completion",
+ fieldtype: "Date",
+ reqd: 1,
+ _doc: true,
+ },
+ {
+ label: __("Completion certificate"),
+ fieldname: "completion_certificate",
+ fieldtype: "Attach",
+ _doc: true,
+ },
+ {
+ label: __("Remarks"),
+ fieldname: "remarks",
+ fieldtype: "Data",
+ _doc: true,
+ },
+ ],
+ },
+ document_rejected: {
+ title: __("Enter details for Support"),
+ fields: [
+ {
+ label: __("Date of rejection"),
+ fieldname: "date_of_rejection",
+ fieldtype: "Date",
+ reqd: 1,
+ _doc: true,
+ },
+ {
+ label: __("Reason of rejection"),
+ fieldname: "reason_of_rejection",
+ fieldtype: "Data",
+ reqd: 1,
+ _doc: true,
+ },
+ {
+ label: __("Remarks"),
+ fieldname: "remarks",
+ fieldtype: "Data",
+ _doc: true,
+ },
+ ],
+ },
+};
const doc_submitted_validate = (_doc, _scheme) => {
- if (_doc.date_of_application < _frm.doc.date_of_visit) {
- return {
- status: false,
- message: __("Date of application should not be less than date of visit"),
- }
- } else if (_doc.date_of_application > frappe.datetime.get_today()) {
- return {
- status: false,
- message: __("Date of application should not be greater than today's date")
- }
- } else {
- return {
- status: true,
- // message:"Invalid "
- }
- }
-}
+ if (_doc.date_of_application < _frm.doc.date_of_visit) {
+ return {
+ status: false,
+ message: __("Date of application should not be less than date of visit"),
+ };
+ } else if (_doc.date_of_application > frappe.datetime.get_today()) {
+ return {
+ status: false,
+ message: __("Date of application should not be greater than today's date"),
+ };
+ } else {
+ return {
+ status: true,
+ // message:"Invalid "
+ };
+ }
+};
const doc_rejected_validate = (_doc, _scheme) => {
- if (_doc.date_of_rejection < _frm.doc.date_of_visit) {
- return {
- status: false,
- message: __("Date of visit should not be less than date of visit")
- }
- } else if (_doc.date_of_rejection < _scheme.date_of_application) {
- return {
- status: false,
- message: __("Date of rejection should not be less than date of application")
- }
- } else if (_doc.date_of_rejection > frappe.datetime.get_today()) {
- return {
- status: false,
- message: __("Date of rejection should not be greater than today's date")
- }
- } else {
- return {
- status: true,
- // message:"Invalid "
- }
- }
-}
+ if (_doc.date_of_rejection < _frm.doc.date_of_visit) {
+ return {
+ status: false,
+ message: __("Date of visit should not be less than date of visit"),
+ };
+ } else if (_doc.date_of_rejection < _scheme.date_of_application) {
+ return {
+ status: false,
+ message: __("Date of rejection should not be less than date of application"),
+ };
+ } else if (_doc.date_of_rejection > frappe.datetime.get_today()) {
+ return {
+ status: false,
+ message: __("Date of rejection should not be greater than today's date"),
+ };
+ } else {
+ return {
+ status: true,
+ // message:"Invalid "
+ };
+ }
+};
const date_of_complete_validate = (_doc, _scheme) => {
- console.log(_doc, _scheme)
- if (_doc.date_of_application < _frm.doc.date_of_visit) {
- return {
- status: false,
- message: __("Date of application should not be less than date of visit")
-
- }
- } else if (_doc.date_of_completion < _frm.doc.date_of_visit) {
- return {
- status: false,
- message: __("Date of completion should not be less than date of visit")
- }
- } else if (_doc.date_of_completion > frappe.datetime.get_today()) {
- return {
- status: false,
- message: __("Date of completion should not be greater than today's date")
- }
- } else if ((_doc.date_of_completion < _doc.date_of_application) || (_doc.date_of_completion < _scheme?.date_of_application)) {
- return {
- status: false,
- message: __("Date of completion should not be less than Date of Application")
- }
- } else {
- return {
- status: true,
- // message:"Invalid "
- }
- }
-}
+ console.log(_doc, _scheme);
+ if (_doc.date_of_application < _frm.doc.date_of_visit) {
+ return {
+ status: false,
+ message: __("Date of application should not be less than date of visit"),
+ };
+ } else if (_doc.date_of_completion < _frm.doc.date_of_visit) {
+ return {
+ status: false,
+ message: __("Date of completion should not be less than date of visit"),
+ };
+ } else if (_doc.date_of_completion > frappe.datetime.get_today()) {
+ return {
+ status: false,
+ message: __("Date of completion should not be greater than today's date"),
+ };
+ } else if (
+ _doc.date_of_completion < _doc.date_of_application ||
+ _doc.date_of_completion < _scheme?.date_of_application
+ ) {
+ return {
+ status: false,
+ message: __("Date of completion should not be less than Date of Application"),
+ };
+ } else {
+ return {
+ status: true,
+ // message:"Invalid "
+ };
+ }
+};
const createDialog = (_doc, config, validator = null) => {
- return new frappe.ui.Dialog({
- title: config.title,
- fields: config.fields,
- size: 'small', // small, large, extra-large
- primary_action_label: 'Save',
- primary_action(obj) {
- if (validator) {
- let valid = validator(obj, _doc)
- if (!valid.status) {
- return frappe.throw(valid.message);
- }
- }
- let fields = config.fields.filter(f => f._doc).map(e => e.fieldname)
- for (let field of fields) {
- if (obj[field])
- _doc[field] = obj[field]
- }
- this.hide()
- }
- });
-}
+ return new frappe.ui.Dialog({
+ title: config.title,
+ fields: config.fields,
+ size: "small", // small, large, extra-large
+ primary_action_label: "Save",
+ primary_action(obj) {
+ if (validator) {
+ let valid = validator(obj, _doc);
+ if (!valid.status) {
+ return frappe.throw(valid.message);
+ }
+ }
+ let fields = config.fields.filter((f) => f._doc).map((e) => e.fieldname);
+ for (let field of fields) {
+ if (obj[field]) _doc[field] = obj[field];
+ }
+ this.hide();
+ },
+ });
+};
diff --git a/myojana/public/js/beneficiary_profiling/follow_up.js b/myojana/public/js/beneficiary_profiling/follow_up.js
index 5210445..a21b333 100644
--- a/myojana/public/js/beneficiary_profiling/follow_up.js
+++ b/myojana/public/js/beneficiary_profiling/follow_up.js
@@ -1,152 +1,298 @@
// ********************* FOLLOW UP CHILD Table***********************
-frappe.ui.form.on('Follow Up Child', {
- form_render: async function (frm, cdt, cdn) {
- let row = frappe.get_doc(cdt, cdn);
- if (frm.fields_dict.follow_up_table.grid && row.name_of_the_scheme) {
- let _local_scheme_followups = frm.doc.follow_up_table.filter(f => f.__islocal).map(e => e.name_of_the_scheme);
- let support_data = frm.doc.scheme_table.filter(f => ['Open', 'Under process', 'Closed'].includes(f.status) && !_local_scheme_followups.includes(f.scheme)).map(m => m.name_of_the_scheme);
- frm.fields_dict.follow_up_table.grid.update_docfield_property("name_of_the_scheme", "options", [...support_data, row.name_of_the_scheme]);
- }
- },
- async follow_up_table_add(frm, cdt, cdn) {
- let row = frappe.get_doc(cdt, cdn);
- if (frappe.user_roles.includes("Sub-Centre")) {
- let sub_centre = await get_ordered_list("Sub Centre", false)
- frm.fields_dict.follow_up_table.grid.update_docfield_property("follow", "options", sub_centre);
- } else {
- frm.fields_dict.follow_up_table.grid.update_docfield_property("follow", "options", [`${frappe.session.user_fullname}`]);
- row.follow = frappe.session.user_fullname
- }
- // call api of list of subcentre with checking roles
- let _local_scheme_followups = frm.doc.follow_up_table.filter(f => f.__islocal).map(e => e.name_of_the_scheme)
- let support_data = frm.doc.scheme_table.filter(f => ['Open', 'Under process', 'Closed'].includes(f.status) && !_local_scheme_followups.includes(f.scheme)).map(m => m.name_of_the_scheme);
- frm.fields_dict.follow_up_table.grid.update_docfield_property("name_of_the_scheme", "options", support_data);
- },
- name_of_the_scheme: function (frm, cdt, cdn) {
- let row = frappe.get_doc(cdt, cdn);
- let supports = frm.doc.scheme_table.filter(f => f.scheme == row.name_of_the_scheme && (['Open', 'Under process', 'Closed'].includes(f.status)));
- row.date_of_application = supports[0].date_of_application
- row.follow_up_date = frappe.datetime.get_today()
- // console.log(supports, "supports")
- row.parent_ref = supports[0].name
- for (support_items of frm.doc.scheme_table) {
- if (row.name_of_the_scheme == support_items.name_of_the_scheme) {
- if (support_items.status === "Open" && support_items.application_submitted == "No") {
- frm.fields_dict.follow_up_table.grid.update_docfield_property("follow_up_with", "options", ["Beneficiary"]);
- row.follow_up_with = "Beneficiary"
- frm.fields_dict.follow_up_table.grid.update_docfield_property("follow_up_status", "options", ["Interested", "Not interested", "Document submitted", "Not reachable" , "Completed"]);
- } else if (support_items.status === "Under process" && support_items.application_submitted == "Yes") {
- frm.fields_dict.follow_up_table.grid.update_docfield_property("follow_up_with", "options", ["Beneficiary", "Government department", "Government website", "Others"]);
- frm.fields_dict.follow_up_table.grid.update_docfield_property("follow_up_status", "options", ["Not reachable", "Under process", "Additional info required", "Completed", "Rejected"]);
- } else if (support_items.status === "Closed" && support_items.application_submitted == "Yes") {
- // last call update ?? confusion changes
- frm.fields_dict.follow_up_table.grid.update_docfield_property("follow_up_with", "options", ["Beneficiary", "Government department", "Government website", "Others"]);
- frm.fields_dict.follow_up_table.grid.update_docfield_property("follow_up_status", "options", ["Not reachable", "Under process", "Additional info required", "Completed", "Rejected"]);
- } else if (support_items.status === "Closed" && support_items.application_submitted == "No") {
- frm.fields_dict.follow_up_table.grid.update_docfield_property("follow_up_with", "options", ["Beneficiary"]);
- row.follow_up_with = "Beneficiary"
- frm.fields_dict.follow_up_table.grid.update_docfield_property("follow_up_status", "options", ["Interested", "Not interested", "Document submitted", "Not reachable"]);
- }
- }
- }
- },
- follow_up_date: function (frm, cdt, cdn) {
- let row = frappe.get_doc(cdt, cdn);
- // console.log("follow up", row)
- },
- follow_up_date: function (frm, cdt, cdn) {
- let row = frappe.get_doc(cdt, cdn);
- if (row.follow_up_date > frappe.datetime.get_today()) {
- row.follow_up_date = null
- frappe.throw(__("You can not select future date in Follow-up date"));
- }
- if (row.follow_up_date < row.date_of_application) {
- row.follow_up_date = null
- frappe.throw(__("Follow-up date should not be less than date of application"));
- }
- if (row.follow_up_date < frm.doc.date_of_visit) {
- row.follow_up_date = null
- frappe.throw(__("Follow-up date should not be less than date of date of registration"));
- }
- },
- follow_up_with: function (frm, cdt, cdn) {
- let row = frappe.get_doc(cdt, cdn);
- if (row.follow_up_with == "Government department" || row.follow_up_with == "Others") {
- frm.fields_dict.follow_up_table.grid.update_docfield_property("follow_up_mode", "options", ["Phone call", "In-person visit"]);
- } else {
- frm.fields_dict.follow_up_table.grid.update_docfield_property("follow_up_mode", "options", ["Phone call", "Home visit", "Centre visit"]);
- }
- let supports = frm.doc.scheme_table.filter(f => f.specific_support_type == row.support_name);
- let latestSupport = supports.length ? supports[supports.length - 1] : null;
- if (row.follow_up_with != "Beneficiary" && latestSupport.application_submitted == "Yes") {
- frm.fields_dict.follow_up_table.grid.update_docfield_property("follow_up_status", "options", ["Not reachable", "Under process", "Additional info required", "Completed", "Rejected"]);
- } else if (row.follow_up_with == "Beneficiary" && latestSupport.application_submitted == "Yes") {
- frm.fields_dict.follow_up_table.grid.update_docfield_property("follow_up_status", "options", ["Not reachable", "Under process", "Additional info required", "Completed", "Rejected"]);
- } else if (row.follow_up_with == "Beneficiary" && latestSupport.application_submitted == "No") {
- frm.fields_dict.follow_up_table.grid.update_docfield_property("follow_up_status", "options", ["Interested", "Not interested", "Document submitted", "Not reachable","Completed"]);
- }
- },
- follow_up_status: function (frm, cdt, cdn) {
- let row = frappe.get_doc(cdt, cdn);
- let supports = frm.doc.scheme_table.filter(f => f.specific_support_type == row.support_name);
- let latestSupport = supports.length ? supports[supports.length - 1] : null;
- if (row.follow_up_status === "Not reachable" && latestSupport.status != "Closed") {
- let followups = frm.doc.follow_up_table.filter(f => f.parent_ref == row.parent_ref && f.support_name == row.support_name && f.follow_up_status == "Not reachable")
- if (followups.length >= 2) {
- frappe.warn('Do you want to close the scheme?',
- `The follow-up status is "Not reachable" ${followups.length} times`,
- () => {
- row.to_close_status = "Closed"
- console.log(row, "row")
- },
- 'Close',
- true // Sets dialog as minimizable
- )
-
- }
- // show popup and continue and close if more than two times
- }
- },
- date_of_application:function(frm , cdt , cdn){
- let row = frappe.get_doc(cdt, cdn);
- if(row.date_of_application < frm.doc.date_of_visit){
- row.date_of_application = ''
- frappe.throw(__("Date of application should not be less than date of registration"));
- }else if (row.date_of_application > frappe.datetime.get_today()) {
- row.date_of_application = ''
- frappe.throw(__("Date of application should not be greater than today's date"));
- }
- },
- date_of_completion: function(frm , cdt, cdn){
- let row = frappe.get_doc(cdt, cdn);
- if(row.date_of_application < frm.doc.date_of_visit){
- row.date_of_completion = ''
- frappe.throw(__("Date of application should not be less than date of registration"))
- } else if (row.date_of_completion < frm.doc.date_of_visit){
- row.date_of_completion = ''
- frappe.throw(__("Date of completion should not be less than date of registration"))
- }else if (row.date_of_completion > frappe.datetime.get_today()){
- row.date_of_completion = ''
- frappe.throw(__("Date of completion should not be greater than today's date"))
- }else if((row.date_of_completion < row.date_of_application)){
- // modified this logic
- row.date_of_completion = ''
- frappe.throw(__("Date of completion should not be less than Date of Application"))
- }
- },
- date_of_rejection:function(frm, cdt, cdn){
- let row = frappe.get_doc(cdt, cdn);
- if (row.date_of_rejection < frm.doc.date_of_visit){
- row.date_of_rejection = ''
- frappe.throw(__("Date of rejection should not be less than date of registration"))
- }else if((row.date_of_rejection < row.date_of_application)){
- // mmay be need modify
- row.date_of_rejection = ''
- frappe.throw(__("Date of rejection should not be less than date of application"))
- }else if (row.date_of_rejection > frappe.datetime.get_today()) {
- row.date_of_rejection = ''
- frappe.throw(__("Date of rejection should not be greater than today's date"))
- }
- }
-
-})
\ No newline at end of file
+frappe.ui.form.on("Follow Up Child", {
+ form_render: async function (frm, cdt, cdn) {
+ let row = frappe.get_doc(cdt, cdn);
+ if (frm.fields_dict.follow_up_table.grid && row.name_of_the_scheme) {
+ let _local_scheme_followups = frm.doc.follow_up_table
+ .filter((f) => f.__islocal)
+ .map((e) => e.name_of_the_scheme);
+ let support_data = frm.doc.scheme_table
+ .filter(
+ (f) =>
+ ["Open", "Under process", "Closed"].includes(f.status) &&
+ !_local_scheme_followups.includes(f.scheme)
+ )
+ .map((m) => m.name_of_the_scheme);
+ frm.fields_dict.follow_up_table.grid.update_docfield_property(
+ "name_of_the_scheme",
+ "options",
+ [...support_data, row.name_of_the_scheme]
+ );
+ }
+ },
+ async follow_up_table_add(frm, cdt, cdn) {
+ let row = frappe.get_doc(cdt, cdn);
+ if (frappe.user_roles.includes("Sub-Centre")) {
+ let sub_centre = await get_ordered_list("Sub Centre", false);
+ frm.fields_dict.follow_up_table.grid.update_docfield_property(
+ "follow",
+ "options",
+ sub_centre
+ );
+ } else {
+ frm.fields_dict.follow_up_table.grid.update_docfield_property("follow", "options", [
+ `${frappe.session.user_fullname}`,
+ ]);
+ row.follow = frappe.session.user_fullname;
+ }
+ // call api of list of subcentre with checking roles
+ let _local_scheme_followups = frm.doc.follow_up_table
+ .filter((f) => f.__islocal)
+ .map((e) => e.name_of_the_scheme);
+ let support_data = frm.doc.scheme_table
+ .filter(
+ (f) =>
+ ["Open", "Under process", "Closed"].includes(f.status) &&
+ !_local_scheme_followups.includes(f.scheme)
+ )
+ .map((m) => m.name_of_the_scheme);
+ frm.fields_dict.follow_up_table.grid.update_docfield_property(
+ "name_of_the_scheme",
+ "options",
+ support_data
+ );
+ },
+ name_of_the_scheme: function (frm, cdt, cdn) {
+ let row = frappe.get_doc(cdt, cdn);
+ let supports = frm.doc.scheme_table.filter(
+ (f) =>
+ f.scheme == row.name_of_the_scheme &&
+ ["Open", "Under process", "Closed"].includes(f.status)
+ );
+ row.date_of_application = supports[0].date_of_application;
+ row.follow_up_date = frappe.datetime.get_today();
+ // console.log(supports, "supports")
+ row.parent_ref = supports[0].name;
+ for (support_items of frm.doc.scheme_table) {
+ if (row.name_of_the_scheme == support_items.name_of_the_scheme) {
+ if (
+ support_items.status === "Open" &&
+ support_items.application_submitted == "No"
+ ) {
+ frm.fields_dict.follow_up_table.grid.update_docfield_property(
+ "follow_up_with",
+ "options",
+ ["Beneficiary"]
+ );
+ row.follow_up_with = "Beneficiary";
+ frm.fields_dict.follow_up_table.grid.update_docfield_property(
+ "follow_up_status",
+ "options",
+ [
+ "Interested",
+ "Not interested",
+ "Document submitted",
+ "Not reachable",
+ "Completed",
+ ]
+ );
+ } else if (
+ support_items.status === "Under process" &&
+ support_items.application_submitted == "Yes"
+ ) {
+ frm.fields_dict.follow_up_table.grid.update_docfield_property(
+ "follow_up_with",
+ "options",
+ ["Beneficiary", "Government department", "Government website", "Others"]
+ );
+ frm.fields_dict.follow_up_table.grid.update_docfield_property(
+ "follow_up_status",
+ "options",
+ [
+ "Not reachable",
+ "Under process",
+ "Additional info required",
+ "Completed",
+ "Rejected",
+ ]
+ );
+ } else if (
+ support_items.status === "Closed" &&
+ support_items.application_submitted == "Yes"
+ ) {
+ // last call update ?? confusion changes
+ frm.fields_dict.follow_up_table.grid.update_docfield_property(
+ "follow_up_with",
+ "options",
+ ["Beneficiary", "Government department", "Government website", "Others"]
+ );
+ frm.fields_dict.follow_up_table.grid.update_docfield_property(
+ "follow_up_status",
+ "options",
+ [
+ "Not reachable",
+ "Under process",
+ "Additional info required",
+ "Completed",
+ "Rejected",
+ ]
+ );
+ } else if (
+ support_items.status === "Closed" &&
+ support_items.application_submitted == "No"
+ ) {
+ frm.fields_dict.follow_up_table.grid.update_docfield_property(
+ "follow_up_with",
+ "options",
+ ["Beneficiary"]
+ );
+ row.follow_up_with = "Beneficiary";
+ frm.fields_dict.follow_up_table.grid.update_docfield_property(
+ "follow_up_status",
+ "options",
+ ["Interested", "Not interested", "Document submitted", "Not reachable"]
+ );
+ }
+ }
+ }
+ },
+ follow_up_date: function (frm, cdt, cdn) {
+ let row = frappe.get_doc(cdt, cdn);
+ if (row.follow_up_date > frappe.datetime.get_today()) {
+ row.follow_up_date = null;
+ frappe.throw(__("You can not select future date in Follow-up date"));
+ }
+ if (row.follow_up_date < row.date_of_application) {
+ row.follow_up_date = null;
+ frappe.throw(__("Follow-up date should not be less than date of application"));
+ }
+ if (row.follow_up_date < frm.doc.date_of_visit) {
+ row.follow_up_date = null;
+ frappe.throw(
+ __("Follow-up date should not be less than date of date of registration")
+ );
+ }
+ },
+ follow_up_with: function (frm, cdt, cdn) {
+ let row = frappe.get_doc(cdt, cdn);
+ if (row.follow_up_with == "Government department" || row.follow_up_with == "Others") {
+ frm.fields_dict.follow_up_table.grid.update_docfield_property(
+ "follow_up_mode",
+ "options",
+ ["Phone call", "In-person visit"]
+ );
+ } else {
+ frm.fields_dict.follow_up_table.grid.update_docfield_property(
+ "follow_up_mode",
+ "options",
+ ["Phone call", "Home visit", "Centre visit"]
+ );
+ }
+ let supports = frm.doc.scheme_table.filter(
+ (f) => f.specific_support_type == row.support_name
+ );
+ let latestSupport = supports.length ? supports[supports.length - 1] : null;
+ if (row.follow_up_with != "Beneficiary" && latestSupport.application_submitted == "Yes") {
+ frm.fields_dict.follow_up_table.grid.update_docfield_property(
+ "follow_up_status",
+ "options",
+ [
+ "Not reachable",
+ "Under process",
+ "Additional info required",
+ "Completed",
+ "Rejected",
+ ]
+ );
+ } else if (
+ row.follow_up_with == "Beneficiary" &&
+ latestSupport.application_submitted == "Yes"
+ ) {
+ frm.fields_dict.follow_up_table.grid.update_docfield_property(
+ "follow_up_status",
+ "options",
+ [
+ "Not reachable",
+ "Under process",
+ "Additional info required",
+ "Completed",
+ "Rejected",
+ ]
+ );
+ } else if (
+ row.follow_up_with == "Beneficiary" &&
+ latestSupport.application_submitted == "No"
+ ) {
+ frm.fields_dict.follow_up_table.grid.update_docfield_property(
+ "follow_up_status",
+ "options",
+ [
+ "Interested",
+ "Not interested",
+ "Document submitted",
+ "Not reachable",
+ "Completed",
+ ]
+ );
+ }
+ },
+ follow_up_status: function (frm, cdt, cdn) {
+ let row = frappe.get_doc(cdt, cdn);
+ let supports = frm.doc.scheme_table.filter(
+ (f) => f.specific_support_type == row.support_name
+ );
+ let latestSupport = supports.length ? supports[supports.length - 1] : null;
+ if (row.follow_up_status === "Not reachable" && latestSupport.status != "Closed") {
+ let followups = frm.doc.follow_up_table.filter(
+ (f) =>
+ f.parent_ref == row.parent_ref &&
+ f.support_name == row.support_name &&
+ f.follow_up_status == "Not reachable"
+ );
+ if (followups.length >= 2) {
+ frappe.warn(
+ "Do you want to close the scheme?",
+ `The follow-up status is "Not reachable" ${followups.length} times`,
+ () => {
+ row.to_close_status = "Closed";
+ console.log(row, "row");
+ },
+ "Close",
+ true // Sets dialog as minimizable
+ );
+ }
+ // show popup and continue and close if more than two times
+ }
+ },
+ date_of_application: function (frm, cdt, cdn) {
+ let row = frappe.get_doc(cdt, cdn);
+ if (row.date_of_application < frm.doc.date_of_visit) {
+ row.date_of_application = "";
+ frappe.throw(__("Date of application should not be less than date of registration"));
+ } else if (row.date_of_application > frappe.datetime.get_today()) {
+ row.date_of_application = "";
+ frappe.throw(__("Date of application should not be greater than today's date"));
+ }
+ },
+ date_of_completion: function (frm, cdt, cdn) {
+ let row = frappe.get_doc(cdt, cdn);
+ if (row.date_of_application < frm.doc.date_of_visit) {
+ row.date_of_completion = "";
+ frappe.throw(__("Date of application should not be less than date of registration"));
+ } else if (row.date_of_completion < frm.doc.date_of_visit) {
+ row.date_of_completion = "";
+ frappe.throw(__("Date of completion should not be less than date of registration"));
+ } else if (row.date_of_completion > frappe.datetime.get_today()) {
+ row.date_of_completion = "";
+ frappe.throw(__("Date of completion should not be greater than today's date"));
+ } else if (row.date_of_completion < row.date_of_application) {
+ // modified this logic
+ row.date_of_completion = "";
+ frappe.throw(__("Date of completion should not be less than Date of Application"));
+ }
+ },
+ date_of_rejection: function (frm, cdt, cdn) {
+ let row = frappe.get_doc(cdt, cdn);
+ if (row.date_of_rejection < frm.doc.date_of_visit) {
+ row.date_of_rejection = "";
+ frappe.throw(__("Date of rejection should not be less than date of registration"));
+ } else if (row.date_of_rejection < row.date_of_application) {
+ // mmay be need modify
+ row.date_of_rejection = "";
+ frappe.throw(__("Date of rejection should not be less than date of application"));
+ } else if (row.date_of_rejection > frappe.datetime.get_today()) {
+ row.date_of_rejection = "";
+ frappe.throw(__("Date of rejection should not be greater than today's date"));
+ }
+ },
+});
diff --git a/myojana/public/js/beneficiary_profiling/id_document.js b/myojana/public/js/beneficiary_profiling/id_document.js
index 2a807bd..46c390f 100644
--- a/myojana/public/js/beneficiary_profiling/id_document.js
+++ b/myojana/public/js/beneficiary_profiling/id_document.js
@@ -1,45 +1,58 @@
const indianVoterIdRegex = /^[A-Z]{3}[0-9]{7}$/;
const indianAadharRegex = /^\d{4}\d{4}\d{4}$/;
-
const apply_filter_on_id_document = async () => {
- // APPLY Filter in ID DOCUMENT
- var child_table = cur_frm.fields_dict['id_table_list'].grid;
- if (child_table) {
- try {
- child_table.get_field('which_of_the_following_id_documents_do_you_have').get_query = function () {
- return {
- filters: [
- ['ID Document', 'document', 'NOT IN', cur_frm.doc.id_table_list.map(function (item) {
- return item.which_of_the_following_id_documents_do_you_have;
- })]
- ]
- };
- };
- } catch (error) {
- console.error(error)
- }
- }
-}
+ // APPLY Filter in ID DOCUMENT
+ var child_table = cur_frm.fields_dict["id_table_list"].grid;
+ if (child_table) {
+ try {
+ child_table.get_field("which_of_the_following_id_documents_do_you_have").get_query =
+ function () {
+ return {
+ filters: [
+ [
+ "ID Document",
+ "document",
+ "NOT IN",
+ cur_frm.doc.id_table_list.map(function (item) {
+ return item.which_of_the_following_id_documents_do_you_have;
+ }),
+ ],
+ ],
+ };
+ };
+ } catch (error) {
+ console.error(error);
+ }
+ }
+};
// ********************* ID documents CHILD Table *********************
-frappe.ui.form.on('ID Document Child', {
- form_render: async function (frm, cdt, cdn) {
- apply_filter_on_id_document()
- },
- id_table_list_add: async function (frm, cdt, cdn) {
- apply_filter_on_id_document()
- },
- enter_id_number: async function (frm, cdt, cdn) {
- let row = frappe.get_doc(cdt, cdn);
- if (!indianVoterIdRegex.test(row.enter_id_number) && row.which_of_the_following_id_documents_do_you_have === "Voter ID card" && (row.enter_id_number.length < 11 || row.enter_id_number.length > 9)) {
- row.enter_id_number = ''
- frm.refresh_fields('enter_id_number')
- frappe.throw(`The Voter ID Number entered is invalid`)
- }
- if (!indianAadharRegex.test(row.enter_id_number) && row.which_of_the_following_id_documents_do_you_have === "Aadhar card" && (row.enter_id_number.length < 12 || row.enter_id_number.length > 11)) {
- row.enter_id_number = ''
- frm.refresh_fields('enter_id_number')
- frappe.throw(`The Aadhar number entered is invalid `)
- }
- },
-})
+frappe.ui.form.on("ID Document Child", {
+ form_render: async function (frm, cdt, cdn) {
+ apply_filter_on_id_document();
+ },
+ id_table_list_add: async function (frm, cdt, cdn) {
+ apply_filter_on_id_document();
+ },
+ enter_id_number: async function (frm, cdt, cdn) {
+ let row = frappe.get_doc(cdt, cdn);
+ if (
+ !indianVoterIdRegex.test(row.enter_id_number) &&
+ row.which_of_the_following_id_documents_do_you_have === "Voter ID card" &&
+ (row.enter_id_number.length < 11 || row.enter_id_number.length > 9)
+ ) {
+ row.enter_id_number = "";
+ frm.refresh_fields("enter_id_number");
+ frappe.throw(`The Voter ID Number entered is invalid`);
+ }
+ if (
+ !indianAadharRegex.test(row.enter_id_number) &&
+ row.which_of_the_following_id_documents_do_you_have === "Aadhar card" &&
+ (row.enter_id_number.length < 12 || row.enter_id_number.length > 11)
+ ) {
+ row.enter_id_number = "";
+ frm.refresh_fields("enter_id_number");
+ frappe.throw(`The Aadhar number entered is invalid `);
+ }
+ },
+});
diff --git a/myojana/public/js/beneficiary_profiling/scheme.js b/myojana/public/js/beneficiary_profiling/scheme.js
index 6d56a9d..340fac3 100644
--- a/myojana/public/js/beneficiary_profiling/scheme.js
+++ b/myojana/public/js/beneficiary_profiling/scheme.js
@@ -1,136 +1,173 @@
-var scheme_list = []
+var scheme_list = [];
const showRules = (row) => {
- let rules = (row?.rules || []).map(e => `${e.rule_field} ${e.operator} ${e.data} ${e.check}`).join("\n")
- frappe.msgprint({
- title: __('rules'),
- message: rules,
- primary_action: {
- action(values) {
- console.log(values);
- }
- }
- });
-}
+ let rules = (row?.rules || [])
+ .map((e) => `${e.rule_field} ${e.operator} ${e.data} ${e.check}`)
+ .join("\n");
+ frappe.msgprint({
+ title: __("rules"),
+ message: rules,
+ primary_action: {
+ action(values) {
+ console.log(values);
+ },
+ },
+ });
+};
const addTableFilter = (datatable, elements = [], rows = []) => {
- document.addEventListener('keyup', function (event) {
- if (elements.includes(event.target.id)) {
- let filters = []
- for (el of elements) {
- let val = document.getElementById(el)?.value;
- if (val) {
- filters.push([el, val])
- }
- }
- if (filters.length) {
- datatable.refresh(rows.filter(row => !filters.map(e => (row[e[0]]?.toString()?.toLowerCase()?.indexOf(e[1]?.toLowerCase()) > -1)).includes(false)))
- } else {
- datatable.refresh(rows)
- }
- }
- });
-}
+ document.addEventListener("keyup", function (event) {
+ if (elements.includes(event.target.id)) {
+ let filters = [];
+ for (const el of elements) {
+ let val = document.getElementById(el)?.value;
+ if (val) {
+ filters.push([el, val]);
+ }
+ }
+ if (filters.length) {
+ datatable.refresh(
+ rows.filter(
+ (row) =>
+ !filters
+ .map(
+ (e) =>
+ row[e[0]]
+ ?.toString()
+ ?.toLowerCase()
+ ?.indexOf(e[1]?.toLowerCase()) > -1
+ )
+ .includes(false)
+ )
+ );
+ } else {
+ datatable.refresh(rows);
+ }
+ }
+ });
+};
// ********************* Support CHILD Table***********************
-frappe.ui.form.on('Scheme Child', {
- form_render: async function (frm, cdt, cdn) {
- let row = frappe.get_doc(cdt, cdn);
- let schemes_op = frm.doc.scheme_table.filter(f => ['Open', 'Under process', 'Closed', ''].includes(f.status)).map(e => e.name_of_the_scheme);
- let fl_schemes_ops = scheme_list.filter(f => !schemes_op.includes(f.name) && f.available)
- let milestones = {};
- let ops = fl_schemes_ops.map(e => {
- milestones.hasOwnProperty(e.milestone) ? '' : milestones[e.milestone] = e.milestone
- return { 'label': __(e.name_of_the_scheme), "value": __(e.name) }
- })
- frm.fields_dict.scheme_table.grid.open_grid_row.fields_dict.name_of_the_scheme._data = ops;
- frm.fields_dict.scheme_table.grid.open_grid_row.fields_dict.milestone_category._data = Object.keys(milestones)
- .map(e => ({ 'label': __(milestones[e]), 'value': __(milestones[e]) }))
- .filter(item => item.value !== "");
- },
- scheme_table_add: async function (frm, cdt, cdn) {
- // get_milestone_category(frm)
- let schemes_op = frm.doc.scheme_table.filter(f => ['Open', 'Under process', 'Closed', ''].includes(f.status)).map(e => e.name_of_the_scheme);
- let fl_schemes_ops = scheme_list.filter(f => !schemes_op.includes(f.name) && f.available)
- let milestones = {};
- let ops = fl_schemes_ops.map(e => {
- milestones.hasOwnProperty(e.milestone) ? '' : milestones[e.milestone] = e.milestone
- return { 'label': __(e.name), "value": __(e.name) }
- })
- frm.fields_dict.scheme_table.grid.open_grid_row.fields_dict.name_of_the_scheme._data = ops;
- frm.fields_dict.scheme_table.grid.open_grid_row.fields_dict.milestone_category._data = Object.keys(milestones)
- .map(e => ({ 'label': __(milestones[e]), 'value': __(milestones[e]) }))
- .filter(item => item.value !== "");
+frappe.ui.form.on("Scheme Child", {
+ form_render: async function (frm, cdt, cdn) {
+ let row = frappe.get_doc(cdt, cdn);
+ let schemes_op = frm.doc.scheme_table
+ .filter((f) => ["Open", "Under process", "Closed", ""].includes(f.status))
+ .map((e) => e.name_of_the_scheme);
+ let fl_schemes_ops = scheme_list.filter(
+ (f) => !schemes_op.includes(f.name) && f.available
+ );
+ let milestones = {};
+ let ops = fl_schemes_ops.map((e) => {
+ milestones.hasOwnProperty(e.milestone) ? "" : (milestones[e.milestone] = e.milestone);
+ return { label: __(e.name_of_the_scheme), value: __(e.name) };
+ });
+ frm.fields_dict.scheme_table.grid.open_grid_row.fields_dict.name_of_the_scheme._data = ops;
+ frm.fields_dict.scheme_table.grid.open_grid_row.fields_dict.milestone_category._data =
+ Object.keys(milestones)
+ .map((e) => ({ label: __(milestones[e]), value: __(milestones[e]) }))
+ .filter((item) => item.value !== "");
+ },
+ scheme_table_add: async function (frm, cdt, cdn) {
+ // get_milestone_category(frm)
+ let schemes_op = frm.doc.scheme_table
+ .filter((f) => ["Open", "Under process", "Closed", ""].includes(f.status))
+ .map((e) => e.name_of_the_scheme);
+ let fl_schemes_ops = scheme_list.filter(
+ (f) => !schemes_op.includes(f.name) && f.available
+ );
+ let milestones = {};
+ let ops = fl_schemes_ops.map((e) => {
+ milestones.hasOwnProperty(e.milestone) ? "" : (milestones[e.milestone] = e.milestone);
+ return { label: __(e.name), value: __(e.name) };
+ });
+ frm.fields_dict.scheme_table.grid.open_grid_row.fields_dict.name_of_the_scheme._data = ops;
+ frm.fields_dict.scheme_table.grid.open_grid_row.fields_dict.milestone_category._data =
+ Object.keys(milestones)
+ .map((e) => ({ label: __(milestones[e]), value: __(milestones[e]) }))
+ .filter((item) => item.value !== "");
- // frm.fields_dict.scheme_table.grid.update_docfield_property("milestone_category", "options", );
- },
- name_of_the_scheme: function (frm, cdt, cdn) {
- let row = frappe.get_doc(cdt, cdn);
- row.milestone_category = ''
- let scheme = scheme_list.find(f => row.name_of_the_scheme == f.name)
- if (scheme && row.name_of_the_scheme) {
- row.milestone_category = scheme.milestone;
- // row.mode_of_application = scheme.mode_of_application;
- row.name_of_the_department = scheme.name_of_department;
- }
- refresh_field("scheme_table")
- },
- milestone_category: (frm, cdt, cdn) => {
- let row = frappe.get_doc(cdt, cdn);
- row.name_of_the_scheme = ''
- frm.refresh_fields('name_of_the_scheme')
- let schemes;
- if (row.milestone_category === "") {
- schemes = scheme_list;
- } else {
- schemes = scheme_list.filter(f => row.milestone_category == f.milestone);
- }
- let schemes_op = frm.doc.scheme_table.filter(f => ['Open', 'Under process', 'Closed', ''].includes(f.status)).map(e => e.name_of_the_scheme);
- let fl_schemes_ops = schemes.filter(f => !schemes_op.includes(f.name) && f.available)
- let milestones = {};
- let ops = fl_schemes_ops.map(e => {
- milestones.hasOwnProperty(e.milestone) ? '' : milestones[e.milestone] = e.milestone
- return { 'label': __(e.name), "value": __(e.name) }
- })
- // frm.fields_dict.scheme_table.grid.update_docfield_property("name_of_the_scheme", "options", ops);
- frm.fields_dict.scheme_table.grid.open_grid_row.fields_dict.name_of_the_scheme._data = ops
- // frm.fields_dict.scheme_table.grid.open_grid_row.fields_dict.name_of_the_scheme.set_options()
- },
- application_submitted: function (frm, cdt, cdn) {
- let row = frappe.get_doc(cdt, cdn);
- if (row.application_submitted == "Yes") {
- row.status = ''; row.date_of_completion = '';
- frm.refresh_fields('status', 'date_of_completion')
- } else if (["Completed"].includes(row.application_submitted)) {
- } else if (row.application_submitted == "No") {
- row.date_of_application = ''; row.date_of_completion = ''; row.application_number = ''; row.amount_paid = ''; row.paid_by = "";
- frm.refresh_fields("date_of_application", "date_of_completion", "application_number", "amount_paid", "paid_by");
- }
- },
- date_of_application: function(frm , cdt, cdn){
- let row = frappe.get_doc(cdt, cdn);
- if(row.date_of_application < frm.doc.date_of_visit){
- row.date_of_application = ''
- frappe.throw(__("Date of application should not be less than date of registration"));
- }else if (row.date_of_application > frappe.datetime.get_today()) {
- row.date_of_application = ''
- frappe.throw(__("Date of application should not be greater than today's date"));
- }
- },
- date_of_completion: function(frm, cdt , cdn){
- let row = frappe.get_doc(cdt, cdn);
- if(row.date_of_application < frm.doc.date_of_visit){
- row.date_of_completion = ''
- frappe.throw(__("Date of application should not be less than date of registration"))
- } else if (row.date_of_completion < frm.doc.date_of_visit){
- row.date_of_completion = ''
- frappe.throw(__("Date of completion should not be less than date of registration"))
- }else if (row.date_of_completion > frappe.datetime.get_today()){
- row.date_of_completion = ''
- frappe.throw(__("Date of completion should not be greater than today's date"))
- }else if((row.date_of_completion < row.date_of_application)){
- row.date_of_completion = ''
- frappe.throw(__("Date of completion should not be greater than today's date"))
- }
- }
-
-})
\ No newline at end of file
+ // frm.fields_dict.scheme_table.grid.update_docfield_property("milestone_category", "options", );
+ },
+ name_of_the_scheme: function (frm, cdt, cdn) {
+ let row = frappe.get_doc(cdt, cdn);
+ row.milestone_category = "";
+ let scheme = scheme_list.find((f) => row.name_of_the_scheme == f.name);
+ if (scheme && row.name_of_the_scheme) {
+ row.milestone_category = scheme.milestone;
+ // row.mode_of_application = scheme.mode_of_application;
+ row.name_of_the_department = scheme.name_of_department;
+ }
+ refresh_field("scheme_table");
+ },
+ milestone_category: (frm, cdt, cdn) => {
+ let row = frappe.get_doc(cdt, cdn);
+ row.name_of_the_scheme = "";
+ frm.refresh_fields("name_of_the_scheme");
+ let schemes;
+ if (row.milestone_category === "") {
+ schemes = scheme_list;
+ } else {
+ schemes = scheme_list.filter((f) => row.milestone_category == f.milestone);
+ }
+ let schemes_op = frm.doc.scheme_table
+ .filter((f) => ["Open", "Under process", "Closed", ""].includes(f.status))
+ .map((e) => e.name_of_the_scheme);
+ let fl_schemes_ops = schemes.filter((f) => !schemes_op.includes(f.name) && f.available);
+ let milestones = {};
+ let ops = fl_schemes_ops.map((e) => {
+ milestones.hasOwnProperty(e.milestone) ? "" : (milestones[e.milestone] = e.milestone);
+ return { label: __(e.name), value: __(e.name) };
+ });
+ // frm.fields_dict.scheme_table.grid.update_docfield_property("name_of_the_scheme", "options", ops);
+ frm.fields_dict.scheme_table.grid.open_grid_row.fields_dict.name_of_the_scheme._data = ops;
+ // frm.fields_dict.scheme_table.grid.open_grid_row.fields_dict.name_of_the_scheme.set_options()
+ },
+ application_submitted: function (frm, cdt, cdn) {
+ let row = frappe.get_doc(cdt, cdn);
+ if (row.application_submitted == "Yes") {
+ row.status = "";
+ row.date_of_completion = "";
+ frm.refresh_fields("status", "date_of_completion");
+ } else if (["Completed"].includes(row.application_submitted)) {
+ } else if (row.application_submitted == "No") {
+ row.date_of_application = "";
+ row.date_of_completion = "";
+ row.application_number = "";
+ row.amount_paid = "";
+ row.paid_by = "";
+ frm.refresh_fields(
+ "date_of_application",
+ "date_of_completion",
+ "application_number",
+ "amount_paid",
+ "paid_by"
+ );
+ }
+ },
+ date_of_application: function (frm, cdt, cdn) {
+ let row = frappe.get_doc(cdt, cdn);
+ if (row.date_of_application < frm.doc.date_of_visit) {
+ row.date_of_application = "";
+ frappe.throw(__("Date of application should not be less than date of registration"));
+ } else if (row.date_of_application > frappe.datetime.get_today()) {
+ row.date_of_application = "";
+ frappe.throw(__("Date of application should not be greater than today's date"));
+ }
+ },
+ date_of_completion: function (frm, cdt, cdn) {
+ let row = frappe.get_doc(cdt, cdn);
+ if (row.date_of_application < frm.doc.date_of_visit) {
+ row.date_of_completion = "";
+ frappe.throw(__("Date of application should not be less than date of registration"));
+ } else if (row.date_of_completion < frm.doc.date_of_visit) {
+ row.date_of_completion = "";
+ frappe.throw(__("Date of completion should not be less than date of registration"));
+ } else if (row.date_of_completion > frappe.datetime.get_today()) {
+ row.date_of_completion = "";
+ frappe.throw(__("Date of completion should not be greater than today's date"));
+ } else if (row.date_of_completion < row.date_of_application) {
+ row.date_of_completion = "";
+ frappe.throw(__("Date of completion should not be greater than today's date"));
+ }
+ },
+});
diff --git a/myojana/public/js/main.js b/myojana/public/js/main.js
index ab4dcfe..ee7f171 100644
--- a/myojana/public/js/main.js
+++ b/myojana/public/js/main.js
@@ -1,59 +1,69 @@
-frappe.router.on('change', async () => {
- let cur_router = await frappe.get_route();
- if (cur_router[0] != 'Workspaces') {
- $('.sidebar-toggle-btn').hide();
- $('.layout-side-section').hide();
- } else {
- $('.sidebar-toggle-btn').show();
- $('.layout-side-section').show();
- }
+frappe.router.on("change", async () => {
+ let cur_router = await frappe.get_route();
+ if (cur_router[0] != "Workspaces") {
+ $(".sidebar-toggle-btn").hide();
+ $(".layout-side-section").hide();
+ } else {
+ $(".sidebar-toggle-btn").show();
+ $(".layout-side-section").show();
+ }
});
async function callAPI(options) {
- return new Promise((resolve, reject) => {
- frappe.call({
- ...options,
- callback: function (response) {
- resolve(response?.message || response?.value);
- },
- error: function (error) {
- reject(error);
- }
- });
- });
+ return new Promise((resolve, reject) => {
+ frappe.call({
+ ...options,
+ callback: function (response) {
+ resolve(response?.message || response?.value);
+ },
+ error: function (error) {
+ reject(error);
+ },
+ });
+ });
}
async function fetchSettings() {
- try {
- let myojanaSetting = await callAPI({
- method: 'myojana.apis.myojana_setting.get_myojana_setting',
- freeze: true,
- args: {
- fields: ['is_primary_member_link_through_phone_number']
- },
- });
- return myojanaSetting
- // console.log(myojanaSetting);
- } catch (error) {
- console.error('Error fetching myojana settings:', error);
- }
+ try {
+ let myojanaSetting = await callAPI({
+ method: "myojana.apis.myojana_setting.get_myojana_setting",
+ freeze: true,
+ args: {
+ fields: ["is_primary_member_link_through_phone_number"],
+ },
+ });
+ return myojanaSetting;
+ // console.log(myojanaSetting);
+ } catch (error) {
+ console.error("Error fetching myojana settings:", error);
+ }
}
let data = {};
-fetchSettings().then((res) => {data = res}).catch((err) => {console.log(err);});
-console.log("jhvhjvhj",data);
+fetchSettings()
+ .then((res) => {
+ data = res;
+ })
+ .catch((err) => {
+ console.log(err);
+ });
+console.log("jhvhjvhj", data);
setTimeout(() => {
- if (frappe.user_roles.includes("Sub-Centre") || frappe.user_roles.includes("CSC Member") || frappe.user_roles.includes("MIS executive")) {
- if (!frappe.user_roles.includes("Administrator")) {
- document.getElementById('navbar-search').hidden = true;
- document.getElementsByClassName('search-icon')[0].hidden = true;
- } else {
- document.getElementById('navbar-search').hidden = false;
- document.getElementsByClassName('search-icon')[0].hidden = false;
- }
- } else {
- document.getElementById('navbar-search').hidden = false;
- document.getElementsByClassName('search-icon')[0].hidden = false;
- }
+ if (
+ frappe.user_roles.includes("Sub-Centre") ||
+ frappe.user_roles.includes("CSC Member") ||
+ frappe.user_roles.includes("MIS executive")
+ ) {
+ if (!frappe.user_roles.includes("Administrator")) {
+ document.getElementById("navbar-search").hidden = true;
+ document.getElementsByClassName("search-icon")[0].hidden = true;
+ } else {
+ document.getElementById("navbar-search").hidden = false;
+ document.getElementsByClassName("search-icon")[0].hidden = false;
+ }
+ } else {
+ document.getElementById("navbar-search").hidden = false;
+ document.getElementsByClassName("search-icon")[0].hidden = false;
+ }
}, 100);
diff --git a/myojana/public/js/scheme/eligibile_ben.js b/myojana/public/js/scheme/eligibile_ben.js
index 2ba7b8a..0dd128a 100644
--- a/myojana/public/js/scheme/eligibile_ben.js
+++ b/myojana/public/js/scheme/eligibile_ben.js
@@ -1,44 +1,54 @@
class SchemeEligibleBen {
- constructor(frm = null, wrapper = null) {
- // debugger
- this.frm = frm;
- this.wrapper = wrapper;
- this.eligible_ben = [];
- this.total_pages = 1;
- this.currentPage = 1;
- if (frm) {
- this.show_table();
- }
- this.filters = [{
- name_of_the_beneficiary: '',
- name_of_parents: '',
- contact_number: '',
- block_name: ''
- }]
- }
- getRandomColor() {
- const letters = '0123456789ABCDEF';
- let color = '#';
- for (let i = 0; i < 6; i++) {
- color += letters[Math.floor(Math.random() * 16)];
- }
- return color;
- }
- stripHtmlTags(input) {
- const tempDiv = document.createElement('div');
- tempDiv.innerHTML = input;
- return tempDiv.textContent || tempDiv.innerText || '';
- }
- getActionBar() {
- let el = document.createElement('div');
- el.className = 'd-flex pb-4 justify-content-between align-items-center';
- el.style = 'gap: 20px;'
- el.innerHTML = `
+ constructor(frm = null, wrapper = null) {
+ // debugger
+ this.frm = frm;
+ this.wrapper = wrapper;
+ this.eligible_ben = [];
+ this.total_pages = 1;
+ this.currentPage = 1;
+ if (frm) {
+ this.show_table();
+ }
+ this.filters = [
+ {
+ name_of_the_beneficiary: "",
+ name_of_parents: "",
+ contact_number: "",
+ block_name: "",
+ },
+ ];
+ }
+ getRandomColor() {
+ const letters = "0123456789ABCDEF";
+ let color = "#";
+ for (let i = 0; i < 6; i++) {
+ color += letters[Math.floor(Math.random() * 16)];
+ }
+ return color;
+ }
+ stripHtmlTags(input) {
+ const tempDiv = document.createElement("div");
+ tempDiv.innerHTML = input;
+ return tempDiv.textContent || tempDiv.innerText || "";
+ }
+ getActionBar() {
+ let el = document.createElement("div");
+ el.className = "d-flex pb-4 justify-content-between align-items-center";
+ el.style = "gap: 20px;";
+ el.innerHTML = `
-
-
-
-
+
+
+
+
@@ -46,301 +56,379 @@ class SchemeEligibleBen {
- `
- return el;
- }
- createTable() {
- let el = document.createElement('div');
- el.className = 'form-grid-container form-grid';
- el.style = 'overflow-y:auto;'
- el.innerHTML = `
+ `;
+ return el;
+ }
+ createTable() {
+ let el = document.createElement("div");
+ el.className = "form-grid-container form-grid";
+ el.style = "overflow-y:auto;";
+ el.innerHTML = `
|
#
|
- ${__('Name of the Beneficiary')} |
- ${__('Head of household')} |
- ${__('Contact number')} |
- ${__('Block')} |
- ${__('Village')} |
+ ${__(
+ "Name of the Beneficiary"
+ )} |
+ ${__(
+ "Head of household"
+ )} |
+ ${__(
+ "Contact number"
+ )} |
+ ${__(
+ "Block"
+ )} |
+ ${__(
+ "Village"
+ )} |
- ${this.eligible_ben?.data?.length === 0
- ? `
+ ${
+ this.eligible_ben?.data?.length === 0
+ ? `
|
No rows
|
`
- : this.eligible_ben?.data?.map((item,index) => `
+ : this.eligible_ben?.data
+ ?.map(
+ (item, index) => `
|
${index + 1}
|
- ${item.name_of_the_beneficiary}
+ ${
+ item.name_of_the_beneficiary
+ }
|
${item.name_of_parents ?? ``} |
${item.contact_number ?? ``} |
- ${item.block_name ?? ``} |
- ${item.village_name ?? ``} |
+ ${
+ item.block_name ?? ``
+ } |
+ ${
+ item.village_name ?? ``
+ } |
- `).join('')}
+ `
+ )
+ .join("")
+ }
- `
- return el;
- }
- createFooter() {
- let el = document.createElement('div');
- el.className = 'd-flex py-2 justify-content-between align-items-center';
- el.style = 'gap: 10px;'
- let totalPages = this.total_pages;
- let currentPage = this.currentPage;
+ `;
+ return el;
+ }
+ createFooter() {
+ let el = document.createElement("div");
+ el.className = "d-flex py-2 justify-content-between align-items-center";
+ el.style = "gap: 10px;";
+ let totalPages = this.total_pages;
+ let currentPage = this.currentPage;
- const getPagination = () => {
- if (totalPages <= 7) {
- return Array.from({ length: totalPages }, (_, i) => i + 1);
- }
+ const getPagination = () => {
+ if (totalPages <= 7) {
+ return Array.from({ length: totalPages }, (_, i) => i + 1);
+ }
- let pages = new Set([1, 2, totalPages - 1, totalPages]);
+ let pages = new Set([1, 2, totalPages - 1, totalPages]);
- if (currentPage > 3) pages.add(currentPage - 1);
- if (currentPage > 2) pages.add(currentPage);
- if (currentPage < totalPages - 1) pages.add(currentPage + 1);
+ if (currentPage > 3) pages.add(currentPage - 1);
+ if (currentPage > 2) pages.add(currentPage);
+ if (currentPage < totalPages - 1) pages.add(currentPage + 1);
- let result = [];
- let prev = 0;
- [...pages].sort((a, b) => a - b).forEach(page => {
- if (prev && page - prev > 1) {
- result.push("...");
- }
- result.push(page);
- prev = page;
- });
+ let result = [];
+ let prev = 0;
+ [...pages]
+ .sort((a, b) => a - b)
+ .forEach((page) => {
+ if (prev && page - prev > 1) {
+ result.push("...");
+ }
+ result.push(page);
+ prev = page;
+ });
- return result;
- };
+ return result;
+ };
- el.innerHTML = `
+ el.innerHTML = `
Total Beneficiary: ${this.eligible_ben?.count?.total ?? 0}
Primary member: ${this.eligible_ben?.count?.family_count ?? 0}
Block count: ${this.eligible_ben?.count?.block_count ?? 0}
Settlement count: ${this.eligible_ben?.count?.settlement_count ?? 0}
- ${totalPages > 1 ? `
+ ${
+ totalPages > 1
+ ? `
- ` : ''}
+ `
+ : ""
+ }
`;
- return el;
- }
+ return el;
+ }
- noDataFound() {
- let el = document.createElement('div');
- el.style = 'flex-direction: column; height: 200px;'
- el.classList.add('d-flex', 'justify-content-center', 'align-items-center');
- el.innerHTML = `
+ noDataFound() {
+ let el = document.createElement("div");
+ el.style = "flex-direction: column; height: 200px;";
+ el.classList.add("d-flex", "justify-content-center", "align-items-center");
+ el.innerHTML = `
You haven't created a Recored yet
- `
- return el;
- }
- async show_table() {
- let limit = 50;
- let start = (this.currentPage - 1) * limit;
- this.eligible_ben = await callAPI({
- method: 'myojana.api.eligible_beneficiaries',
- freeze: false,
- args: {
- scheme: this.frm.doc.name,
- columns: ["name", "serial_no", "name_of_the_beneficiary", "select_primary_member.name_of_parents", "contact_number", "ward.block_name", "name_of_the_settlement.village_name"],
- filters: this.filters ?? [],
- start: start,
- page_imit: limit,
- is_limit: true,
- },
- // freeze_message: __("Getting beneficiaries..."),
- })
- this.total_pages = Math.ceil(this.eligible_ben?.count?.total / limit);
- this.currentPage = Math.max(1, Math.min(this.currentPage, this.total_pages));
+ `;
+ return el;
+ }
+ async show_table() {
+ let limit = 50;
+ let start = (this.currentPage - 1) * limit;
+ this.eligible_ben = await callAPI({
+ method: "myojana.api.eligible_beneficiaries",
+ freeze: false,
+ args: {
+ scheme: this.frm.doc.name,
+ columns: [
+ "name",
+ "serial_no",
+ "name_of_the_beneficiary",
+ "select_primary_member.name_of_parents",
+ "contact_number",
+ "ward.block_name",
+ "name_of_the_settlement.village_name",
+ ],
+ filters: this.filters ?? [],
+ start: start,
+ page_imit: limit,
+ is_limit: true,
+ },
+ // freeze_message: __("Getting beneficiaries..."),
+ });
+ this.total_pages = Math.ceil(this.eligible_ben?.count?.total / limit);
+ this.currentPage = Math.max(1, Math.min(this.currentPage, this.total_pages));
- if (document.getElementById('task-list')) {
- document.getElementById('eligible_ben-body').remove();
- document.getElementById('eligible_ben-footer').remove();
- }
- let task_container = document.createElement('div');
- task_container.classList.add('task-list');
- task_container.id = 'task-list';
- task_container.style = 'min-width: 100%;'
- task_container.innerHTML = `
+ if (document.getElementById("task-list")) {
+ document.getElementById("eligible_ben-body").remove();
+ document.getElementById("eligible_ben-footer").remove();
+ }
+ let task_container = document.createElement("div");
+ task_container.classList.add("task-list");
+ task_container.id = "task-list";
+ task_container.style = "min-width: 100%;";
+ task_container.innerHTML = `
`;
- if(!document.getElementById('eligible_ben-header')){
- task_container.querySelector('#eligible_ben-header').appendChild(this.getActionBar());
- }
- task_container.querySelector('#eligible_ben-body').appendChild(this.createTable());
- task_container.querySelector('#eligible_ben-footer').appendChild(this.createFooter());
- this.wrapper.appendChild(task_container);
+ if (!document.getElementById("eligible_ben-header")) {
+ task_container.querySelector("#eligible_ben-header").appendChild(this.getActionBar());
+ }
+ task_container.querySelector("#eligible_ben-body").appendChild(this.createTable());
+ task_container.querySelector("#eligible_ben-footer").appendChild(this.createFooter());
+ this.wrapper.appendChild(task_container);
- // Function to toggle Clear Filters button visibility
- const toggleClearFiltersButton = () => {
- const filtersApplied =
- $('#name_of_beneficiary').val().trim() !== '' ||
- $('#name_of_parents').val().trim() !== '' ||
- $('#phone_number').val().trim() !== '' ||
- $('#block_name').val().trim() !== '';
- $('#clearFilters').css('display', filtersApplied ? 'inline-block' : 'none');
- };
+ // Function to toggle Clear Filters button visibility
+ const toggleClearFiltersButton = () => {
+ const filtersApplied =
+ $("#name_of_beneficiary").val().trim() !== "" ||
+ $("#name_of_parents").val().trim() !== "" ||
+ $("#phone_number").val().trim() !== "" ||
+ $("#block_name").val().trim() !== "";
+ $("#clearFilters").css("display", filtersApplied ? "inline-block" : "none");
+ };
- // Pagination events
- $(document).off('click', '.page-link').on('click', '.page-link', (e) => {
- let page = Number($(e.target).text());
- if (!isNaN(page)) {
- this.currentPage = page;
- this.show_table();
- }
- });
+ // Pagination events
+ $(document)
+ .off("click", ".page-link")
+ .on("click", ".page-link", (e) => {
+ let page = Number($(e.target).text());
+ if (!isNaN(page)) {
+ this.currentPage = page;
+ this.show_table();
+ }
+ });
- $(document).off('click', '.prev-page').on('click', '.prev-page', (e) => {
- if (this.currentPage > 1) {
- this.currentPage--;
- this.show_table();
- }
- });
+ $(document)
+ .off("click", ".prev-page")
+ .on("click", ".prev-page", (e) => {
+ if (this.currentPage > 1) {
+ this.currentPage--;
+ this.show_table();
+ }
+ });
- $(document).off('click', '.next-page').on('click', '.next-page', (e) => {
- if (this.currentPage < this.total_pages) {
- this.currentPage++;
- this.show_table();
- }
- });
+ $(document)
+ .off("click", ".next-page")
+ .on("click", ".next-page", (e) => {
+ if (this.currentPage < this.total_pages) {
+ this.currentPage++;
+ this.show_table();
+ }
+ });
- // Filter input events with toggle
- $(document).off('keyup', '#name_of_beneficiary').on('keyup', '#name_of_beneficiary', (e) => {
- let name_of_beneficiary = $(e.target).val();
- this.filters[0].name_of_the_beneficiary = name_of_beneficiary;
- this.show_table();
- toggleClearFiltersButton();
- });
+ // Filter input events with toggle
+ $(document)
+ .off("keyup", "#name_of_beneficiary")
+ .on("keyup", "#name_of_beneficiary", (e) => {
+ let name_of_beneficiary = $(e.target).val();
+ this.filters[0].name_of_the_beneficiary = name_of_beneficiary;
+ this.show_table();
+ toggleClearFiltersButton();
+ });
- $(document).off('keyup', '#name_of_parents').on('keyup', '#name_of_parents', (e) => {
- let name_of_parents = $(e.target).val();
- this.filters[0].name_of_parents = name_of_parents;
- this.show_table();
- toggleClearFiltersButton();
- });
+ $(document)
+ .off("keyup", "#name_of_parents")
+ .on("keyup", "#name_of_parents", (e) => {
+ let name_of_parents = $(e.target).val();
+ this.filters[0].name_of_parents = name_of_parents;
+ this.show_table();
+ toggleClearFiltersButton();
+ });
- $(document).off('keyup', '#phone_number').on('keyup', '#phone_number', (e) => {
- let phone_number = $(e.target).val();
- this.filters[0].contact_number = Number(phone_number);
- this.show_table();
- toggleClearFiltersButton();
- });
+ $(document)
+ .off("keyup", "#phone_number")
+ .on("keyup", "#phone_number", (e) => {
+ let phone_number = $(e.target).val();
+ this.filters[0].contact_number = Number(phone_number);
+ this.show_table();
+ toggleClearFiltersButton();
+ });
- $(document).off('keyup', '#block_name').on('keyup', '#block_name', (e) => {
- let block_name = $(e.target).val();
- this.filters[0].block_name = block_name;
- this.show_table();
- toggleClearFiltersButton();
- });
+ $(document)
+ .off("keyup", "#block_name")
+ .on("keyup", "#block_name", (e) => {
+ let block_name = $(e.target).val();
+ this.filters[0].block_name = block_name;
+ this.show_table();
+ toggleClearFiltersButton();
+ });
- // Export
- $(document).off('click', '#bulkDeleteButton').on('click', '#bulkDeleteButton', async(e) => {
- let data = await callAPI({
- method: 'myojana.api.eligible_beneficiaries',
- freeze: false,
- args: {
- scheme: this.frm.doc.name,
- columns: ["name", "serial_no", "name_of_the_beneficiary", "select_primary_member.name_of_parents", "contact_number", "ward.block_name", "name_of_the_settlement.village_name"],
- filters: [],
- start: 0
- },
- // freeze_message: __("Getting beneficiaries..."),
- })
- this.convertJSONToCSV(data.data, 'Eligible Beneficiary');
- });
+ // Export
+ $(document)
+ .off("click", "#bulkDeleteButton")
+ .on("click", "#bulkDeleteButton", async (e) => {
+ let data = await callAPI({
+ method: "myojana.api.eligible_beneficiaries",
+ freeze: false,
+ args: {
+ scheme: this.frm.doc.name,
+ columns: [
+ "name",
+ "serial_no",
+ "name_of_the_beneficiary",
+ "select_primary_member.name_of_parents",
+ "contact_number",
+ "ward.block_name",
+ "name_of_the_settlement.village_name",
+ ],
+ filters: [],
+ start: 0,
+ },
+ // freeze_message: __("Getting beneficiaries..."),
+ });
+ this.convertJSONToCSV(data.data, "Eligible Beneficiary");
+ });
- // Clear Filters with toggle
- $(document).off('click', '#clearFilters').on('click', '#clearFilters', (e) => {
- $('#name_of_beneficiary').val('');
- $('#name_of_parents').val('');
- $('#phone_number').val('');
- $('#block_name').val('');
- this.filters = [{ // Reset filters object
- name_of_the_beneficiary: '',
- name_of_parents: '',
- contact_number: '',
- block_name: ''
- }];
- this.show_table();
- toggleClearFiltersButton(); // Hide button after clearing
- });
+ // Clear Filters with toggle
+ $(document)
+ .off("click", "#clearFilters")
+ .on("click", "#clearFilters", (e) => {
+ $("#name_of_beneficiary").val("");
+ $("#name_of_parents").val("");
+ $("#phone_number").val("");
+ $("#block_name").val("");
+ this.filters = [
+ {
+ // Reset filters object
+ name_of_the_beneficiary: "",
+ name_of_parents: "",
+ contact_number: "",
+ block_name: "",
+ },
+ ];
+ this.show_table();
+ toggleClearFiltersButton(); // Hide button after clearing
+ });
- // Initial toggle check
- toggleClearFiltersButton();
- }
- convertJSONToCSV(jsonData, fileName) {
- // Convert JSON to CSV format
- const csvContent = [];
- const keys = Object.keys(jsonData[0]);
- csvContent.push(keys.join(','));
+ // Initial toggle check
+ toggleClearFiltersButton();
+ }
+ convertJSONToCSV(jsonData, fileName) {
+ // Convert JSON to CSV format
+ const csvContent = [];
+ const keys = Object.keys(jsonData[0]);
+ csvContent.push(keys.join(","));
- jsonData.forEach(entry => {
- const values = keys.map(key => {
- let value = entry[key];
- if (typeof value === 'string') {
- value = `"${value}"`; // Enclose in double quotes to handle commas within strings
- }
- return value;
- });
- csvContent.push(values.join(','));
- });
+ jsonData.forEach((entry) => {
+ const values = keys.map((key) => {
+ let value = entry[key];
+ if (typeof value === "string") {
+ value = `"${value}"`; // Enclose in double quotes to handle commas within strings
+ }
+ return value;
+ });
+ csvContent.push(values.join(","));
+ });
- // Create CSV file
- const csvString = csvContent.join('\n');
- const blob = new Blob([csvString], { type: 'text/csv;charset=utf-8;' });
- if (navigator.msSaveBlob) { // IE 10+
- navigator.msSaveBlob(blob, fileName);
- } else {
- const link = document.createElement('a');
- if (link.download !== undefined) {
- const url = URL.createObjectURL(blob);
- link.setAttribute('href', url);
- link.setAttribute('download', fileName);
- document.body.appendChild(link);
- link.click();
- document.body.removeChild(link);
- } else {
- alert('Your browser does not support downloading files. Please try a different browser.');
- }
- }
- }
-}
\ No newline at end of file
+ // Create CSV file
+ const csvString = csvContent.join("\n");
+ const blob = new Blob([csvString], { type: "text/csv;charset=utf-8;" });
+ if (navigator.msSaveBlob) {
+ // IE 10+
+ navigator.msSaveBlob(blob, fileName);
+ } else {
+ const link = document.createElement("a");
+ if (link.download !== undefined) {
+ const url = URL.createObjectURL(blob);
+ link.setAttribute("href", url);
+ link.setAttribute("download", fileName);
+ document.body.appendChild(link);
+ link.click();
+ document.body.removeChild(link);
+ } else {
+ alert(
+ "Your browser does not support downloading files. Please try a different browser."
+ );
+ }
+ }
+ }
+}
diff --git a/myojana/public/js/utils/utils.js b/myojana/public/js/utils/utils.js
index 0a445e7..1634be2 100644
--- a/myojana/public/js/utils/utils.js
+++ b/myojana/public/js/utils/utils.js
@@ -1,51 +1,50 @@
-
// This Function Hide Advance search option in Link Fields
-const hide_advance_search=(frm, list)=> {
- for (item of list) {
- frm.set_df_property(item, 'only_select', true);
- }
+const hide_advance_search = (frm, list) => {
+ for (const item of list) {
+ frm.set_df_property(item, "only_select", true);
+ }
};
// This Function extend limit of Link field in dropdowns
-const extend_options_length=(frm, fields) => {
- fields?.forEach((field) => {
- frm.set_query(field, () => {
- return { page_length: 1000 };
- });
- })
+const extend_options_length = (frm, fields) => {
+ fields?.forEach((field) => {
+ frm.set_query(field, () => {
+ return { page_length: 1000 };
+ });
+ });
};
// COMMON FUNCTON FOR FILTER OF LINK FIELD
// this function apply filter
function apply_filter(field_name, filter_on, frm, filter_value, withoutFilter = false) {
- frm.fields_dict[field_name].get_query = () => {
- if (withoutFilter) {
- return {
- filters: {},
- page_length: 1000
- };
- }
- return {
- filters: {
- [filter_on]: filter_value || frm.doc[filter_on] || `please select ${filter_on}`,
- },
- page_length: 1000
- };
- }
-};
+ frm.fields_dict[field_name].get_query = () => {
+ if (withoutFilter) {
+ return {
+ filters: {},
+ page_length: 1000,
+ };
+ }
+ return {
+ filters: {
+ [filter_on]: filter_value || frm.doc[filter_on] || `please select ${filter_on}`,
+ },
+ page_length: 1000,
+ };
+ };
+}
// This Fields delete fields values
async function truncate_multiple_fields_value(_frm, fields) {
- for (field of fields) {
- _frm.set_value(field, '')
- }
+ for (const field of fields) {
+ _frm.set_value(field, "");
+ }
}
// Calling APIs Common function
function callAPI(options) {
- return new Promise((resolve, reject) => {
- frappe.call({
- ...options,
- callback: async function (response) {
- resolve(response?.message || response?.value)
- }
- });
- })
+ return new Promise((resolve, reject) => {
+ frappe.call({
+ ...options,
+ callback: async function (response) {
+ resolve(response?.message || response?.value);
+ },
+ });
+ });
}
diff --git a/myojana/rule_engine/apis/get_meta_api.py b/myojana/rule_engine/apis/get_meta_api.py
index 92e9c44..c6dc136 100644
--- a/myojana/rule_engine/apis/get_meta_api.py
+++ b/myojana/rule_engine/apis/get_meta_api.py
@@ -1,9 +1,14 @@
import frappe
from frappe import _
+
@frappe.whitelist(allow_guest=True)
def get_field_lists(doctype_name, field_types):
- # Your API logic here
- meta = frappe.get_meta(doctype_name)
- filtered_fields = [{"label": field.label, "value": field.fieldname, "type": field.fieldtype , "options":field.options} for field in meta.fields if field.fieldtype in field_types]
- return filtered_fields
\ No newline at end of file
+ # Your API logic here
+ meta = frappe.get_meta(doctype_name)
+ filtered_fields = [
+ {"label": field.label, "value": field.fieldname, "type": field.fieldtype, "options": field.options}
+ for field in meta.fields
+ if field.fieldtype in field_types
+ ]
+ return filtered_fields
diff --git a/myojana/rule_engine/doctype/rule_engine/rule_engine.js b/myojana/rule_engine/doctype/rule_engine/rule_engine.js
index 1fd602c..4166929 100644
--- a/myojana/rule_engine/doctype/rule_engine/rule_engine.js
+++ b/myojana/rule_engine/doctype/rule_engine/rule_engine.js
@@ -1,167 +1,182 @@
// Copyright (c) 2023, suvaidyam and contributors
// For license information, please see license.txt
-var common_operators = ["=", "!="]
+var common_operators = ["=", "!="];
var field_types = {
- "Date": [...common_operators, ">", "<", ">=", "<="],
- "Int": [...common_operators, ">", "<", ">=", "<="],
- "Link": [...common_operators]
-}
+ Date: [...common_operators, ">", "<", ">=", "<="],
+ Int: [...common_operators, ">", "<", ">=", "<="],
+ Link: [...common_operators],
+};
function evaluateExpression(input, expression) {
- if (!(/^[a-zA-Z0-9\s()+\-/*%&|=!<>]*$/.test(expression))) {
- return 'Invalid expression'
- }
- // expression = expression.toLowerCase();
- expression = expression.replace(/and/g, '&&').replace(/or/g, '||');
- expression = expression.replace(/AND/g, '&&').replace(/OR/g, '||');
- for (let key in input) {
- expression = expression.replace(new RegExp(key, 'g'), input[key]);
- }
- try {
- return eval(expression);
- } catch (err) {
- return err.message;
- }
+ if (!/^[a-zA-Z0-9\s()+\-/*%&|=!<>]*$/.test(expression)) {
+ return "Invalid expression";
+ }
+ // expression = expression.toLowerCase();
+ expression = expression.replace(/and/g, "&&").replace(/or/g, "||");
+ expression = expression.replace(/AND/g, "&&").replace(/OR/g, "||");
+ for (let key in input) {
+ expression = expression.replace(new RegExp(key, "g"), input[key]);
+ }
+ try {
+ return eval(expression);
+ } catch (err) {
+ return err.message;
+ }
}
function generateQueryString(rows, expression) {
-
- for (let row of rows) {
- if (['IN', 'NOT IN'].includes(row.operator)) {
- let val = row.data?.split(',').map(e => `'${e}'`).join(',');
- expression = expression.replace(new RegExp(row.code, 'g'), `${row.rule_field} ${row.operator} (${val})`)
- } else {
- expression = expression.replace(new RegExp(row.code, 'g'), `${row.rule_field} ${row.operator} '${row.data}'`)
- }
- }
- return 'select * from `tabBeneficiary Profiling` where ' + expression
+ for (let row of rows) {
+ if (["IN", "NOT IN"].includes(row.operator)) {
+ let val = row.data
+ ?.split(",")
+ .map((e) => `'${e}'`)
+ .join(",");
+ expression = expression.replace(
+ new RegExp(row.code, "g"),
+ `${row.rule_field} ${row.operator} (${val})`
+ );
+ } else {
+ expression = expression.replace(
+ new RegExp(row.code, "g"),
+ `${row.rule_field} ${row.operator} '${row.data}'`
+ );
+ }
+ }
+ return "select * from `tabBeneficiary Profiling` where " + expression;
}
-var field_list = []
+var field_list = [];
function get_field_list(frm) {
- frappe.call({
- method: "myojana.rule_engine.apis.get_meta_api.get_field_lists",
- args: {
- doctype_name: "Beneficiary Profiling",
- field_types: Object.keys(field_types)
- },
- callback: function (response) {
- // Handle the response
- if (response.message) {
- field_list = response.message
- frm.fields_dict.field_table.grid.update_docfield_property("rule_field", "options", response.message);
- console.log(response.message);
- } else {
- // console.error("API call failed");
- }
- }
- });
-
+ frappe.call({
+ method: "myojana.rule_engine.apis.get_meta_api.get_field_lists",
+ args: {
+ doctype_name: "Beneficiary Profiling",
+ field_types: Object.keys(field_types),
+ },
+ callback: function (response) {
+ // Handle the response
+ if (response.message) {
+ field_list = response.message;
+ frm.fields_dict.field_table.grid.update_docfield_property(
+ "rule_field",
+ "options",
+ response.message
+ );
+ console.log(response.message);
+ } else {
+ // console.error("API call failed");
+ }
+ },
+ });
}
function get_Link_list(doctype_name) {
- return new Promise((resolve, reject) => {
- frappe.call({
- method: "frappe.desk.search.search_link",
- args: {
- doctype: doctype_name,
- txt: "",
- page_length: 10000
- },
- callback: async function (response) {
- let data = response?.results || response?.message
- if (data) {
- resolve(data);
- }
- }
- });
- })
+ return new Promise((resolve, reject) => {
+ frappe.call({
+ method: "frappe.desk.search.search_link",
+ args: {
+ doctype: doctype_name,
+ txt: "",
+ page_length: 10000,
+ },
+ callback: async function (response) {
+ let data = response?.results || response?.message;
+ if (data) {
+ resolve(data);
+ }
+ },
+ });
+ });
}
frappe.ui.form.on("Rule Engine", {
- refresh(frm) {
-
- },
- condition: (frm) => {
- let el = document.querySelector("[data-fieldname='condition'] p")
- let rows = frm.get_field('field_table')?.grid?.data;
- if (rows && rows?.length) {
- let input = {};
- for (let row of rows) {
- input[row.code] = true
- }
- let eval = evaluateExpression(input, frm.doc.condition);
- if (typeof eval == 'string') {
- // el.style.color = 'red !important';
- el.setAttribute("style", "color: red !important");
- el.textContent = eval;
- } else {
- el.setAttribute("style", "color: green !important");
- el.textContent = generateQueryString(rows, frm.doc.condition);
- }
- } else if (frm.doc.condition) {
- el.setAttribute("style", "color: red !important");
- el.textContent = 'Invalid expression.';
- } else {
- el.setAttribute("style", "");
- el.textContent = '';
- }
- }
+ refresh(frm) {},
+ condition: (frm) => {
+ let el = document.querySelector("[data-fieldname='condition'] p");
+ let rows = frm.get_field("field_table")?.grid?.data;
+ if (rows && rows?.length) {
+ let input = {};
+ for (let row of rows) {
+ input[row.code] = true;
+ }
+ let result = evaluateExpression(input, frm.doc.condition);
+ if (typeof result == "string") {
+ // el.style.color = 'red !important';
+ el.setAttribute("style", "color: red !important");
+ el.textContent = result;
+ } else {
+ el.setAttribute("style", "color: green !important");
+ el.textContent = generateQueryString(rows, frm.doc.condition);
+ }
+ } else if (frm.doc.condition) {
+ el.setAttribute("style", "color: red !important");
+ el.textContent = "Invalid expression.";
+ } else {
+ el.setAttribute("style", "");
+ el.textContent = "";
+ }
+ },
});
// CHILD TABLE
-frappe.ui.form.on('Rule Engine Child', {
- refresh(frm) {
- },
- field_table_add(frm, cdt, cdn) {
- let initial_code = 64
- let row = frappe.get_doc(cdt, cdn);
- if (row.idx <= 26) {
- row.code = (String.fromCharCode(initial_code + row.idx))
- } else {
- row.code = (String.fromCharCode(initial_code + (row.idx - 26)) + String.fromCharCode(initial_code + (row.idx - 26)))
- }
+frappe.ui.form.on("Rule Engine Child", {
+ refresh(frm) {},
+ field_table_add(frm, cdt, cdn) {
+ let initial_code = 64;
+ let row = frappe.get_doc(cdt, cdn);
+ if (row.idx <= 26) {
+ row.code = String.fromCharCode(initial_code + row.idx);
+ } else {
+ row.code =
+ String.fromCharCode(initial_code + (row.idx - 26)) +
+ String.fromCharCode(initial_code + (row.idx - 26));
+ }
- get_field_list(frm)
- console.log("aa", row)
- // frm.fields_dict.field_table.grid.toggle_reqd("data", 1)
- // console.log(frm.fields_dict.field_table.grid.get_field('rule_field'))
- // frm.fields_dict.field_table.section.fields_dict.field_table.grid.df.fields_dict.rule_field.toggle(false)
- // frm.fields_dict.field_table.grid.df.fields_dict.rule_field.toggle(false);
- // frm.fields_dict.field_table.grid.get_field('rule_field').df.hidden = true;
+ get_field_list(frm);
+ console.log("aa", row);
+ // frm.fields_dict.field_table.grid.toggle_reqd("data", 1)
+ // console.log(frm.fields_dict.field_table.grid.get_field('rule_field'))
+ // frm.fields_dict.field_table.section.fields_dict.field_table.grid.df.fields_dict.rule_field.toggle(false)
+ // frm.fields_dict.field_table.grid.df.fields_dict.rule_field.toggle(false);
+ // frm.fields_dict.field_table.grid.get_field('rule_field').df.hidden = true;
+ // frm.fields_dict.field_table.grid.df.read_only = 1
+ // frm.fields_dict.field_table.row.data.df.data = 'Date';
+ // console.log(frm.fields_dict.field_table.section.fields_dict.field_table)
+ },
+ rule_field: async function (frm, cdt, cdn) {
+ let row = frappe.get_doc(cdt, cdn);
+ row.type = field_list?.find((f) => f.value == row.rule_field)?.type;
+ frm.fields_dict.field_table.grid.update_docfield_property(
+ "operator",
+ "options",
+ field_types[row.type]
+ );
- // frm.fields_dict.field_table.grid.df.read_only = 1
- // frm.fields_dict.field_table.row.data.df.data = 'Date';
- // console.log(frm.fields_dict.field_table.section.fields_dict.field_table)
-
-
- },
- rule_field: async function (frm, cdt, cdn) {
- let row = frappe.get_doc(cdt, cdn);
- row.type = field_list?.find(f => f.value == row.rule_field)?.type;
- frm.fields_dict.field_table.grid.update_docfield_property("operator", "options", field_types[row.type]);
-
- if (row.type == "Link") {
- let options = field_list.find(f => f.value == row.rule_field)?.options;
- console.log("rule_field", row.type, options);
- let link_data = await get_Link_list(options)
- console.log("link_data:", link_data);
- frm.fields_dict.field_table.grid.update_docfield_property("select", "options", link_data);
- }
- frm.fields_dict.field_table.grid.refresh();
- var cur_grid = frm.get_field('field_table').grid;
- var cur_doc = locals[cdt][cdn];
- var cur_row = cur_grid.get_row(cur_doc.name);
- cur_row.toggle_view();
- },
- date: function (frm, cdt, cdn) {
- let row = frappe.get_doc(cdt, cdn);
- row.data = row.date
- frm.fields_dict.field_table.grid.refresh();
- },
- select: function (frm, cdt, cdn) {
- let row = frappe.get_doc(cdt, cdn);
- row.data = row.select
- frm.fields_dict.field_table.grid.refresh();
- },
- value: function (frm, cdt, cdn) {
- let row = frappe.get_doc(cdt, cdn);
- row.data = row.value
- frm.fields_dict.field_table.grid.refresh();
- }
-})
+ if (row.type == "Link") {
+ let options = field_list.find((f) => f.value == row.rule_field)?.options;
+ console.log("rule_field", row.type, options);
+ let link_data = await get_Link_list(options);
+ console.log("link_data:", link_data);
+ frm.fields_dict.field_table.grid.update_docfield_property(
+ "select",
+ "options",
+ link_data
+ );
+ }
+ frm.fields_dict.field_table.grid.refresh();
+ var cur_grid = frm.get_field("field_table").grid;
+ var cur_doc = locals[cdt][cdn];
+ var cur_row = cur_grid.get_row(cur_doc.name);
+ cur_row.toggle_view();
+ },
+ date: function (frm, cdt, cdn) {
+ let row = frappe.get_doc(cdt, cdn);
+ row.data = row.date;
+ frm.fields_dict.field_table.grid.refresh();
+ },
+ select: function (frm, cdt, cdn) {
+ let row = frappe.get_doc(cdt, cdn);
+ row.data = row.select;
+ frm.fields_dict.field_table.grid.refresh();
+ },
+ value: function (frm, cdt, cdn) {
+ let row = frappe.get_doc(cdt, cdn);
+ row.data = row.value;
+ frm.fields_dict.field_table.grid.refresh();
+ },
+});
diff --git a/myojana/scheduler_events/ben_dob_update.py b/myojana/scheduler_events/ben_dob_update.py
index b0ce9b4..6d8fa24 100644
--- a/myojana/scheduler_events/ben_dob_update.py
+++ b/myojana/scheduler_events/ben_dob_update.py
@@ -1,7 +1,8 @@
import frappe
+
def update_age():
- query = """
+ query = """
UPDATE
`tabBeneficiary Profiling`
SET
@@ -22,22 +23,24 @@ def update_age():
OR
completed_age_month != (TIMESTAMPDIFF(MONTH, date_of_birth, CURDATE()) % 12);
"""
- try:
- data = frappe.db.sql(query, as_dict=True)
- except Exception as e:
- frappe.throw(str(e))
+ try:
+ frappe.db.sql(query, as_dict=True)
+ except Exception as e:
+ frappe.throw(str(e))
+
def update_dob_of_ben():
- query = """UPDATE `tabBeneficiary Profiling`
+ query = """UPDATE `tabBeneficiary Profiling`
SET completed_age = completed_age + 1
WHERE DATE_FORMAT(date_of_birth, '%m-%d') = DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 DAY), '%m-%d');
"""
- data = frappe.db.sql(query, as_dict=True)
+ data = frappe.db.sql(query, as_dict=True)
+
+ return data
- return data
def update_dob_months():
- query = """UPDATE `tabBeneficiary Profiling`
+ query = """UPDATE `tabBeneficiary Profiling`
SET completed_age_month =
CASE
WHEN completed_age_month < 11 THEN completed_age_month + 1
@@ -45,6 +48,5 @@ def update_dob_months():
END
WHERE DATE_FORMAT(date_of_birth, '%d') = DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 DAY), '%d');
"""
- data = frappe.db.sql(query, as_dict=True)
- return data
-
+ data = frappe.db.sql(query, as_dict=True)
+ return data
diff --git a/myojana/services/beneficiary_scheme.py b/myojana/services/beneficiary_scheme.py
index 05f665b..dc618bc 100644
--- a/myojana/services/beneficiary_scheme.py
+++ b/myojana/services/beneficiary_scheme.py
@@ -1,52 +1,57 @@
import frappe
+
from myojana.utils.misc import Misc
+
+
class BeneficaryScheme:
- def run(beneficiary=None):
- schemes = frappe.get_list('Scheme', fields=['name', 'name_of_department', 'milestone'])
- for scheme in schemes:
- doc = frappe.get_doc("Scheme", scheme.name)
- rule_list = []
- matching_counter = 0
- if doc.rules and len(doc.rules):
- filters = Misc.rules_to_filters(doc.rules,True)
- for group in filters:
- sql_query = ' AND '.join([f"{condition[0]} {condition[1]} {condition[2]}" for condition in filters[group]])
- filter = filters[group]
- filter.append(['name','=',beneficiary])
- beneficiary_list = frappe.get_list("Beneficiary Profiling", filters=filter,page_length=1)
- check = True if len(beneficiary_list) else False
- if check:
- matching_counter += 1
- rule_list.append({
- 'message':f"[{group if group else ''}]:({sql_query})",
- 'check':check
- })
- scheme['rules'] = rule_list
+ def run(beneficiary=None):
+ schemes = frappe.get_list("Scheme", fields=["name", "name_of_department", "milestone"])
+ for scheme in schemes:
+ doc = frappe.get_doc("Scheme", scheme.name)
+ rule_list = []
+ matching_counter = 0
+ if doc.rules and len(doc.rules):
+ filters = Misc.rules_to_filters(doc.rules, True)
+ for group in filters:
+ sql_query = " AND ".join(
+ [f"{condition[0]} {condition[1]} {condition[2]}" for condition in filters[group]]
+ )
+ filter = filters[group]
+ filter.append(["name", "=", beneficiary])
+ beneficiary_list = frappe.get_list("Beneficiary Profiling", filters=filter, page_length=1)
+ check = True if len(beneficiary_list) else False
+ if check:
+ matching_counter += 1
+ rule_list.append({"message": f"[{group if group else ''}]:({sql_query})", "check": check})
+ scheme["rules"] = rule_list
+
+ scheme["total_rules"] = len(rule_list)
+ scheme["matching_rules"] = matching_counter
+ scheme["matching_rules_per"] = 0
+ if matching_counter > 0:
+ scheme["matching_rules_per"] = (matching_counter / scheme["total_rules"]) * 100
+ return schemes
+
+ def validate(beneficiary, condition):
+ list = frappe.get_list(
+ "Beneficiary Profiling", filters=[condition, ["name", "=", beneficiary]], page_length=1
+ )
+ return True if len(list) > 0 else False
- scheme['total_rules'] = len(rule_list)
- scheme['matching_rules'] = matching_counter
- scheme['matching_rules_per'] = 0
- if matching_counter > 0:
- scheme['matching_rules_per'] = (matching_counter/scheme['total_rules'])*100
- return schemes
- def validate(beneficiary, condition):
- list = frappe.get_list("Beneficiary Profiling", filters=[condition,['name','=',beneficiary]],page_length=1)
- return True if len(list) > 0 else False
+ def validate_conditions(beneficiary, key, conditions):
+ obj = {"total": len(conditions), "matched": 0, "percentage": 0, "rules": [], "key": key}
+ for condition in conditions:
+ is_matched = BeneficaryScheme.validate(beneficiary, condition)
+ if is_matched:
+ obj["matched"] += 1
+ obj["rules"].append(
+ {"message": f"{condition[0]} {condition[1]} {condition[2]}", "matched": is_matched}
+ )
+ obj["percentage"] = ((obj["matched"] / obj["total"]) * 100) if obj["total"] > 0 else 0
+ return obj
- def validate_conditions(beneficiary, key, conditions):
- obj = {'total':len(conditions), 'matched':0, 'percentage':0,'rules':[],'key':key}
- for condition in conditions:
- is_matched = BeneficaryScheme.validate(beneficiary, condition)
- if is_matched:
- obj['matched'] += 1
- obj['rules'].append({
- 'message':f"{condition[0]} {condition[1]} {condition[2]}",
- 'matched':is_matched
- })
- obj['percentage'] = ((obj['matched']/obj['total'])*100) if obj['total'] > 0 else 0
- return obj
- def has_availed(beneficiary, scheme):
- sql = f"""
+ def has_availed(beneficiary, scheme):
+ sql = f"""
select
name
from
@@ -61,36 +66,56 @@ def has_availed(beneficiary, scheme):
status IN ('Completed','Availed')
limit 1
"""
- count_list = frappe.db.sql(sql, as_dict=True)
- return False if len(count_list) else True
+ count_list = frappe.db.sql(sql, as_dict=True)
+ return False if len(count_list) else True
- def get_schemes(beneficiary=None):
- schemes = frappe.get_list('Scheme', fields=['name','name_of_the_scheme', 'name_of_department', 'milestone', 'how_many_times_can_this_scheme_be_availed'], filters={'enabled': '1'})
- for scheme in schemes:
- doc = frappe.get_doc("Scheme", scheme.name)
- scheme['groups'] = []
- scheme['available'] = True
- if scheme.get('how_many_times_can_this_scheme_be_availed') == 'Once':
- scheme['available'] = BeneficaryScheme.has_availed(beneficiary, scheme.name)
- scheme['rules'] = []
- scheme['total_rules'] = 0
- scheme['matching_rules'] = 0
- scheme['matching_rules_per'] = 0
- if doc.rules and len(doc.rules):
- filters = Misc.rules_to_filters(doc.rules,True)
- groups = []
- for key in filters:
- groups.append(BeneficaryScheme.validate_conditions(beneficiary,key,filters[key]))
- denominator_sorted_list = sorted(groups, key=lambda x: x['total'], reverse=True)
- percentage_sorted_list = sorted(denominator_sorted_list, key=lambda x: x['percentage'], reverse=True)
+ def get_schemes(beneficiary=None):
+ schemes = frappe.get_list(
+ "Scheme",
+ fields=[
+ "name",
+ "name_of_the_scheme",
+ "name_of_department",
+ "milestone",
+ "how_many_times_can_this_scheme_be_availed",
+ ],
+ filters={"enabled": "1"},
+ )
+ for scheme in schemes:
+ doc = frappe.get_doc("Scheme", scheme.name)
+ scheme["groups"] = []
+ scheme["available"] = True
+ if scheme.get("how_many_times_can_this_scheme_be_availed") == "Once":
+ scheme["available"] = BeneficaryScheme.has_availed(beneficiary, scheme.name)
+ scheme["rules"] = []
+ scheme["total_rules"] = 0
+ scheme["matching_rules"] = 0
+ scheme["matching_rules_per"] = 0
+ if doc.rules and len(doc.rules):
+ filters = Misc.rules_to_filters(doc.rules, True)
+ groups = []
+ for key in filters:
+ groups.append(BeneficaryScheme.validate_conditions(beneficiary, key, filters[key]))
+ denominator_sorted_list = sorted(groups, key=lambda x: x["total"], reverse=True)
+ percentage_sorted_list = sorted(
+ denominator_sorted_list, key=lambda x: x["percentage"], reverse=True
+ )
- scheme['groups'] = percentage_sorted_list
- scheme['rules'] = percentage_sorted_list[0]['rules'] if len(percentage_sorted_list)>0 else []
- scheme['total_rules'] = percentage_sorted_list[0]['total'] if len(percentage_sorted_list)>0 else 0
- scheme['matching_rules'] = percentage_sorted_list[0]['matched'] if len(percentage_sorted_list)>0 else 0
- scheme['matching_rules_per'] = 0
- if scheme['matching_rules'] > 0:
- scheme['matching_rules_per'] = ((scheme['matching_rules']/scheme['total_rules'])*100)
- res_schemes_denominator_sort = sorted(schemes, key=lambda x: x.get('total_rules', 0), reverse=True)
- res_schemes = sorted(res_schemes_denominator_sort, key=lambda x: x.get('matching_rules_per', 0), reverse=True)
- return res_schemes
+ scheme["groups"] = percentage_sorted_list
+ scheme["rules"] = (
+ percentage_sorted_list[0]["rules"] if len(percentage_sorted_list) > 0 else []
+ )
+ scheme["total_rules"] = (
+ percentage_sorted_list[0]["total"] if len(percentage_sorted_list) > 0 else 0
+ )
+ scheme["matching_rules"] = (
+ percentage_sorted_list[0]["matched"] if len(percentage_sorted_list) > 0 else 0
+ )
+ scheme["matching_rules_per"] = 0
+ if scheme["matching_rules"] > 0:
+ scheme["matching_rules_per"] = (scheme["matching_rules"] / scheme["total_rules"]) * 100
+ res_schemes_denominator_sort = sorted(schemes, key=lambda x: x.get("total_rules", 0), reverse=True)
+ res_schemes = sorted(
+ res_schemes_denominator_sort, key=lambda x: x.get("matching_rules_per", 0), reverse=True
+ )
+ return res_schemes
diff --git a/myojana/services/family.py b/myojana/services/family.py
index 6925d32..1c28ff1 100644
--- a/myojana/services/family.py
+++ b/myojana/services/family.py
@@ -1,62 +1,65 @@
import frappe
-class family:
- def create(beneficiary):
- print("family[create]")
- family_doc = frappe.new_doc("Primary Member")
- family_doc.name_of_head_of_family = beneficiary.name
- family_doc.name_of_parents = beneficiary.name_of_the_beneficiary
- family_doc.phone_no = beneficiary.contact_number
- family_doc.state = beneficiary.state
- family_doc.centre = beneficiary.centre
- family_doc.sub_centre = beneficiary.sub_centre
- family_doc.save()
- return family_doc
+class family:
+ def create(beneficiary):
+ print("family[create]")
+ family_doc = frappe.new_doc("Primary Member")
+ family_doc.name_of_head_of_family = beneficiary.name
+ family_doc.name_of_parents = beneficiary.name_of_the_beneficiary
+ family_doc.phone_no = beneficiary.contact_number
+ family_doc.state = beneficiary.state
+ family_doc.centre = beneficiary.centre
+ family_doc.sub_centre = beneficiary.sub_centre
+ family_doc.save()
+ return family_doc
- def update(beneficiary):
- family_doc_name = frappe.db.exists('Primary Member', beneficiary.contact_number)
- family_doc = None
- if(family_doc_name):
- family_doc = frappe.get_doc("Primary Member", family_doc_name)
- family_doc.name_of_parents = beneficiary.name
- family_doc.phone_no = beneficiary.contact_number
- family_doc.state = beneficiary.state
- family_doc.centre = beneficiary.centre
- family_doc.sub_centre = beneficiary.sub_centre
- family_doc.save()
- else:
- family_doc = frappe.new_doc("Primary Member")
- family_doc.name_of_head_of_family = beneficiary.name
- family_doc.name_of_parents = beneficiary.name_of_the_beneficiary
- family_doc.phone_no = beneficiary.contact_number
- family_doc.centre = beneficiary.centre
- family_doc.sub_centre = beneficiary.sub_centre
- family_doc.state = beneficiary.state
- family_doc.insert()
- family.handle_contactnumber_change(beneficiary,family_doc)
- frappe.msgprint("The beneficiary has been updated to a primary member")
- return family_doc
+ def update(beneficiary):
+ family_doc_name = frappe.db.exists("Primary Member", beneficiary.contact_number)
+ family_doc = None
+ if family_doc_name:
+ family_doc = frappe.get_doc("Primary Member", family_doc_name)
+ family_doc.name_of_parents = beneficiary.name
+ family_doc.phone_no = beneficiary.contact_number
+ family_doc.state = beneficiary.state
+ family_doc.centre = beneficiary.centre
+ family_doc.sub_centre = beneficiary.sub_centre
+ family_doc.save()
+ else:
+ family_doc = frappe.new_doc("Primary Member")
+ family_doc.name_of_head_of_family = beneficiary.name
+ family_doc.name_of_parents = beneficiary.name_of_the_beneficiary
+ family_doc.phone_no = beneficiary.contact_number
+ family_doc.centre = beneficiary.centre
+ family_doc.sub_centre = beneficiary.sub_centre
+ family_doc.state = beneficiary.state
+ family_doc.insert()
+ family.handle_contactnumber_change(beneficiary, family_doc)
+ frappe.msgprint("The beneficiary has been updated to a primary member")
+ return family_doc
- def handle_contactnumber_change(doc,family_doc):
- _doc_before_save = doc.get('_doc_before_save',None)
- # print("_doc_before_save",_doc_before_save)
- if _doc_before_save:
- # print("_doc_before_save[IF]")
- if doc.get('contact_number') != _doc_before_save.get('contact_number'):
- # print("_doc_before_save[IF->IF]")
- families = frappe.db.get_list(doctype='Primary Member', filters={'name':_doc_before_save.contact_number}, fields=["name"])
- family = families[0] if len(families) else None
- # print("family",family)
- if family:
- # print("_doc_before_save[IF->IF->IF]")
- query = f"UPDATE `tabBeneficiary Profiling` SET select_primary_member = '{family_doc.name}' WHERE select_primary_member = '{_doc_before_save.select_primary_member}'"
- up_doc = frappe.db.sql(query)
- # print("_doc_before_save[IF->IF->IF] up_doc",up_doc,query)
- del_doc = frappe.db.delete("Primary Member", {"name": _doc_before_save.select_primary_member})
- # print("_doc_before_save[IF->IF->IF] del_doc",del_doc)
+ def handle_contactnumber_change(doc, family_doc):
+ _doc_before_save = doc.get("_doc_before_save", None)
+ # print("_doc_before_save",_doc_before_save)
+ if _doc_before_save:
+ # print("_doc_before_save[IF]")
+ if doc.get("contact_number") != _doc_before_save.get("contact_number"):
+ # print("_doc_before_save[IF->IF]")
+ families = frappe.db.get_list(
+ doctype="Primary Member",
+ filters={"name": _doc_before_save.contact_number},
+ fields=["name"],
+ )
+ family = families[0] if len(families) else None
+ # print("family",family)
+ if family:
+ # print("_doc_before_save[IF->IF->IF]")
+ query = f"UPDATE `tabBeneficiary Profiling` SET select_primary_member = '{family_doc.name}' WHERE select_primary_member = '{_doc_before_save.select_primary_member}'"
+ frappe.db.sql(query)
+ # print("_doc_before_save[IF->IF->IF] up_doc",up_doc,query)
+ frappe.db.delete("Primary Member", {"name": _doc_before_save.select_primary_member})
+ # print("_doc_before_save[IF->IF->IF] del_doc",del_doc)
- def delete_family(beneficiary):
- delate_family = frappe.db.delete("Primary Member", {
- "name": beneficiary.contact_number})
- return delate_family
\ No newline at end of file
+ def delete_family(beneficiary):
+ delate_family = frappe.db.delete("Primary Member", {"name": beneficiary.contact_number})
+ return delate_family
diff --git a/myojana/sva_report/controllers/child_table_crud.py b/myojana/sva_report/controllers/child_table_crud.py
index 9e1d510..e0e748e 100644
--- a/myojana/sva_report/controllers/child_table_crud.py
+++ b/myojana/sva_report/controllers/child_table_crud.py
@@ -3,39 +3,47 @@
import frappe
+
@frappe.whitelist()
-def insert_child_doc(doctype=None,parent=None,parentfield=None,parenttype=None,fieldname=None,label=None,fieldtype=None,idx=None):
- doc = frappe.get_doc({
- 'doctype': doctype,
- 'parent':parent,
- 'parentfield':parentfield,
- 'parenttype':parenttype,
- 'fieldname':fieldname,
- 'label':label,
- 'fieldtype':fieldtype,
- 'idx':idx
- })
- doc.insert(ignore_permissions=True)
- return doc
+def insert_child_doc(
+ doctype=None,
+ parent=None,
+ parentfield=None,
+ parenttype=None,
+ fieldname=None,
+ label=None,
+ fieldtype=None,
+ idx=None,
+):
+ doc = frappe.get_doc(
+ {
+ "doctype": doctype,
+ "parent": parent,
+ "parentfield": parentfield,
+ "parenttype": parenttype,
+ "fieldname": fieldname,
+ "label": label,
+ "fieldtype": fieldtype,
+ "idx": idx,
+ }
+ )
+ doc.insert(ignore_permissions=True)
+ return doc
+
@frappe.whitelist()
-def delete_all_child_doc(doctype=None,parent=None,parentfield=None,parenttype=None):
- frappe.db.delete(doctype, {
- "parent":parent,
- 'parentfield':parentfield,
- 'parenttype':parenttype
- })
- return True
+def delete_all_child_doc(doctype=None, parent=None, parentfield=None, parenttype=None):
+ frappe.db.delete(doctype, {"parent": parent, "parentfield": parentfield, "parenttype": parenttype})
+ return True
+
+
@frappe.whitelist()
-def get_all_child_doc(doctype=None,parent=None,parentfield=None,parenttype=None):
- list = frappe.db.get_list(doctype,
- filters={
- "parent":parent,
- 'parentfield':parentfield,
- 'parenttype':parenttype
- },
- pluck='fieldname',
- order_by='idx asc',
- ignore_permissions=True
- )
- return list
\ No newline at end of file
+def get_all_child_doc(doctype=None, parent=None, parentfield=None, parenttype=None):
+ list = frappe.db.get_list(
+ doctype,
+ filters={"parent": parent, "parentfield": parentfield, "parenttype": parenttype},
+ pluck="fieldname",
+ order_by="idx asc",
+ ignore_permissions=True,
+ )
+ return list
diff --git a/myojana/sva_report/controllers/doc_type_info.py b/myojana/sva_report/controllers/doc_type_info.py
index fcde704..e2f86e2 100644
--- a/myojana/sva_report/controllers/doc_type_info.py
+++ b/myojana/sva_report/controllers/doc_type_info.py
@@ -1,180 +1,203 @@
-import frappe
+import copy
import csv
from io import StringIO
+
+import frappe
from frappe.utils.response import Response
-import copy
-allowed_types = ['Data','Date', 'Int', 'Select', 'Check', 'Phone']
-child_types = ['Table', 'Table MultiSelect']
+allowed_types = ["Data", "Date", "Int", "Select", "Check", "Phone"]
+child_types = ["Table", "Table MultiSelect"]
+
+
class DocTypeInfo:
+ def get_fields(
+ doc_type,
+ fields,
+ parent_field="",
+ degree=1,
+ link_table=None,
+ child_table=None,
+ child_degree=1,
+ idx=0,
+ section=False,
+ ):
+ # print("section",section, type(section))
+ if parent_field:
+ parent_field = f"{parent_field}."
+ ref_doc_meta = frappe.get_meta(doc_type)
+ for field in ref_doc_meta.fields:
+ # print("field.fieldtype:",field.fieldtype)
+ local_field = {
+ "idx": float(f"{idx}.{field.idx}") if idx else field.idx,
+ "label": field.label,
+ "fieldtype": field.fieldtype,
+ "fieldname": f"{field.fieldname}",
+ "options": field.options,
+ }
+ if (
+ (field.fieldtype in allowed_types)
+ or (degree == 1 and section == "1" and field.fieldtype in ["Section Break", "Tab Break"])
+ ) and (field.print_hide != 1 and field.hidden != 1):
+ fields.append(
+ {
+ "idx": float(f"{idx}.{field.idx}") if idx else field.idx,
+ "doc_type": doc_type,
+ "label": field.label,
+ "fieldtype": field.fieldtype,
+ "fieldname": f"{parent_field}{field.fieldname}",
+ "options": field.options,
+ "link_table": link_table,
+ "child_table": child_table,
+ }
+ )
+ elif field.fieldtype == "Link":
+ if degree == 1:
+ new_parent_field = field.fieldname
+ if parent_field:
+ new_parent_field = f"{parent_field}{field.fieldname}"
+ DocTypeInfo.get_fields(
+ doc_type=field.options,
+ fields=fields,
+ parent_field=new_parent_field,
+ degree=2,
+ link_table=local_field,
+ child_table=child_table,
+ child_degree=2,
+ idx=field.idx,
+ section=section,
+ )
+ elif child_degree == 1 and field.fieldtype in child_types:
+ local_field["parenttype"] = doc_type
+ if child_degree == 1:
+ # print(child_degree,field.fieldtype,doc_type,field.options)
+ DocTypeInfo.get_fields(
+ doc_type=field.options,
+ fields=fields,
+ parent_field=field.fieldname,
+ degree=1,
+ link_table=None,
+ child_table=local_field,
+ child_degree=2,
+ idx=field.idx,
+ section=section,
+ )
+
+ return fields
+
+ def prepare_fields(report_doc):
+ all_fields = DocTypeInfo.get_fields(report_doc.ref_doctype, [], parent_field="")
+ fields = []
+ # print("all_fields",all_fields)
+ # print("report_fields",report_fields, all_fields)
+ if len(report_doc.columns) > 0:
+ for column in report_doc.columns:
+ for field in all_fields:
+ if field.get("fieldname") == column.fieldname:
+ field["label"] = column.label
+ fields.append(field)
+ else:
+ fields.extend(all_fields)
+ return fields
+
+ def prepare_joins(base_tbl, fields):
+ joins = []
+ unique_link_table = []
+ unique_child_table = []
+ unique_child_link_table = []
+ for field in fields:
+ if field.get("child_table") is None and field.get("link_table"):
+ tbl_name = f"`tab{field.get('link_table').get('options')}`"
+ lnk_fieldname = f"{field.get('link_table').get('fieldname')}"
+ if lnk_fieldname not in unique_link_table:
+ joins.append(
+ f"LEFT JOIN {tbl_name} as {lnk_fieldname} ON {lnk_fieldname}.`name` = {base_tbl}.{lnk_fieldname}"
+ )
+ unique_link_table.append(lnk_fieldname)
+ elif field.get("child_table") and field.get("link_table") is None:
+ tbl_name = f"`tab{field.get('child_table').get('options')}`"
+ lnk_fieldname = f"{field.get('child_table').get('fieldname')}"
+ if lnk_fieldname not in unique_child_table:
+ joins.append(
+ f"LEFT JOIN {tbl_name} as {lnk_fieldname} ON {lnk_fieldname}.`parent` = {base_tbl}.name"
+ )
+ unique_child_table.append(lnk_fieldname)
+ elif field.get("child_table") and field.get("link_table"):
+ tbl_name_ = f"`tab{field.get('child_table').get('options')}`"
+ lnk_fieldname_ = f"{field.get('child_table').get('fieldname')}"
+ lnk_fieldname_alias_ = f"{lnk_fieldname_}_child"
+ if lnk_fieldname_ not in unique_child_table:
+ joins.append(
+ f"LEFT JOIN {tbl_name_} as {lnk_fieldname_alias_} ON {lnk_fieldname_alias_}.`parent` = {base_tbl}.name"
+ )
+ unique_child_table.append(lnk_fieldname_)
- def get_fields(
- doc_type,
- fields,
- parent_field="",
- degree=1,
- link_table=None,
- child_table=None,
- child_degree=1,
- idx=0,
- section=False
- ):
- # print("section",section, type(section))
- if parent_field:
- parent_field = f"{parent_field}."
- ref_doc_meta = frappe.get_meta(doc_type)
- for field in ref_doc_meta.fields:
- # print("field.fieldtype:",field.fieldtype)
- local_field = {"idx":float(f"{idx}.{field.idx}") if idx else field.idx,"label": field.label,"fieldtype": field.fieldtype,"fieldname": f"{field.fieldname}","options": field.options}
- if (
- (
- (field.fieldtype in allowed_types)
- or
- (degree ==1 and section=='1' and field.fieldtype in ['Section Break','Tab Break']))
- and
- (field.print_hide != 1 and field.hidden != 1)
- ) :
- fields.append({
- "idx":float(f"{idx}.{field.idx}") if idx else field.idx,
- "doc_type":doc_type,
- "label": field.label,
- "fieldtype": field.fieldtype,
- "fieldname": f"{parent_field}{field.fieldname}",
- "options": field.options,
- "link_table":link_table,
- "child_table":child_table
- })
- elif field.fieldtype == 'Link':
- if degree == 1:
- new_parent_field = field.fieldname
- if parent_field:
- new_parent_field = f"{parent_field}{field.fieldname}"
- link_fields = DocTypeInfo.get_fields(
- doc_type=field.options,
- fields=fields,
- parent_field=new_parent_field,
- degree=2,
- link_table=local_field,
- child_table=child_table,
- child_degree=2,
- idx=field.idx,
- section=section
- )
- elif child_degree == 1 and field.fieldtype in child_types:
- local_field['parenttype'] = doc_type
- if child_degree == 1:
- # print(child_degree,field.fieldtype,doc_type,field.options)
- DocTypeInfo.get_fields(
- doc_type=field.options,
- fields=fields,
- parent_field=field.fieldname,
- degree=1,
- link_table=None,
- child_table=local_field,
- child_degree=2,
- idx=field.idx,
- section=section
- )
+ tbl_name = f"`tab{field.get('link_table').get('options')}`"
+ lnk_fieldname = f"{field.get('link_table').get('fieldname')}"
+ if lnk_fieldname not in unique_child_link_table:
+ joins.append(
+ f"LEFT JOIN {tbl_name} as {lnk_fieldname} ON {lnk_fieldname}.`name` = {lnk_fieldname_alias_}.parent"
+ )
+ unique_child_link_table.append(lnk_fieldname)
+ return "\n".join(joins)
- return fields
- def prepare_fields(report_doc):
- all_fields = DocTypeInfo.get_fields(report_doc.ref_doctype,[], parent_field="")
- fields = []
- # print("all_fields",all_fields)
- # print("report_fields",report_fields, all_fields)
- if len(report_doc.columns) > 0:
- for column in report_doc.columns:
- for field in all_fields:
- if field.get('fieldname') == column.fieldname:
- field['label'] = column.label
- fields.append(field)
- else:
- fields.extend(all_fields)
- return fields
- def prepare_joins(base_tbl,fields):
- joins = []
- unique_link_table = []
- unique_child_table = []
- unique_child_link_table = []
- for field in fields:
- if field.get('child_table') is None and field.get('link_table'):
- tbl_name = f"`tab{field.get('link_table').get('options')}`"
- lnk_fieldname = f"{field.get('link_table').get('fieldname')}"
- if lnk_fieldname not in unique_link_table:
- joins.append(f"LEFT JOIN {tbl_name} as {lnk_fieldname} ON {lnk_fieldname}.`name` = {base_tbl}.{lnk_fieldname}")
- unique_link_table.append(lnk_fieldname)
- elif field.get('child_table') and field.get('link_table') is None:
- tbl_name = f"`tab{field.get('child_table').get('options')}`"
- lnk_fieldname = f"{field.get('child_table').get('fieldname')}"
- if lnk_fieldname not in unique_child_table:
- joins.append(f"LEFT JOIN {tbl_name} as {lnk_fieldname} ON {lnk_fieldname}.`parent` = {base_tbl}.name")
- unique_child_table.append(lnk_fieldname)
- elif field.get('child_table') and field.get('link_table'):
- tbl_name_ = f"`tab{field.get('child_table').get('options')}`"
- lnk_fieldname_ = f"{field.get('child_table').get('fieldname')}"
- lnk_fieldname_alias_ = f"{lnk_fieldname_}_child"
- if lnk_fieldname_ not in unique_child_table:
- joins.append(f"LEFT JOIN {tbl_name_} as {lnk_fieldname_alias_} ON {lnk_fieldname_alias_}.`parent` = {base_tbl}.name")
- unique_child_table.append(lnk_fieldname_)
+ def prepare_columns(base_tbl, fields):
+ columns = []
+ field_obj = {}
+ field_index = 0
+ for field in fields:
+ label = f"{field.get('label')}"
+ fl = field_obj.get(label.lower(), None)
+ if fl is None:
+ field_obj[label.lower()] = 1
+ else:
+ field_obj[label.lower()] += 1
+ label = f"{label}{str(fl)}"
- tbl_name = f"`tab{field.get('link_table').get('options')}`"
- lnk_fieldname = f"{field.get('link_table').get('fieldname')}"
- if lnk_fieldname not in unique_child_link_table:
- joins.append(f"LEFT JOIN {tbl_name} as {lnk_fieldname} ON {lnk_fieldname}.`name` = {lnk_fieldname_alias_}.parent")
- unique_child_link_table.append(lnk_fieldname)
- return '\n'.join(joins)
- def prepare_columns(base_tbl,fields):
- columns = []
- field_obj = {}
- field_index = 0
- for field in fields:
- label = f"{field.get('label')}"
- fl = field_obj.get(label.lower(), None)
- if fl is None:
- field_obj[label.lower()] = 1
- else:
- field_obj[label.lower()] += 1
- label = f"{label}{str(fl)}"
+ if len(field.get("fieldname").split(".")) == 3:
+ columns.append(
+ f"{field.get('fieldname').split('.')[1]}.{field.get('fieldname').split('.')[2]} as `{label}`"
+ )
+ elif len(field.get("fieldname").split(".")) == 2:
+ columns.append(f"{field.get('fieldname')} as `{label}`")
+ elif len(field.get("fieldname").split(".")) == 1:
+ columns.append(f"{base_tbl}.{field.get('fieldname')} as `{label}`")
- if len(field.get('fieldname').split('.')) == 3:
- columns.append(f"{field.get('fieldname').split('.')[1]}.{field.get('fieldname').split('.')[2]} as `{label}`")
- elif len(field.get('fieldname').split('.')) == 2:
- columns.append(f"{field.get('fieldname')} as `{label}`")
- elif len(field.get('fieldname').split('.')) == 1:
- columns.append(f"{base_tbl}.{field.get('fieldname')} as `{label}`")
+ fields[field_index]["label"] = label
+ field_index += 1
- fields[field_index]['label'] = label
- field_index += 1
+ columns_str = ",\n".join(columns)
+ if columns_str == "":
+ columns_str = "*"
+ return columns_str
- columns_str = ',\n'.join(columns)
- if columns_str=="":
- columns_str = "*"
- return columns_str
- def prepare_condition(filters, rpt_filters):
- base_tbl_cond_list = []
- outer_tbl_condition = []
- if filters is not None:
- for filter in filters:
- if len(filter) == 3:
- cond_str = f"{filter[0]} {filter[1]} '{filter[2]}'"
- if len(filter[0].split('.')) == 1:
- if all(filt.get('fieldname') == filter[0] for filt in rpt_filters):
- base_tbl_cond_list.append(cond_str)
- else:
- outer_tbl_condition.append(cond_str)
- elif len(filter[0].split('.')) == 2:
- print("Logic pending")
- outer_tbl_condition.append(cond_str)
- # base_tbl_cond_list.append(cond_str)
- base_tbl_cond_str = f"WHERE {'AND'.join(base_tbl_cond_list)}" if len(base_tbl_cond_list) > 0 else ""
- outer_tbl_cond_str = f"WHERE {'AND'.join(outer_tbl_condition)}" if len(outer_tbl_condition) > 0 else ""
- return base_tbl_cond_str,outer_tbl_cond_str
- def prepare_base_query(doctype, fields, doc_filters, req_filters):
- base_tbl = f"`tab{doctype}`"
- columns_str = DocTypeInfo.prepare_columns(base_tbl,fields)
- join_str = DocTypeInfo.prepare_joins(base_tbl,fields)
- base_tbl_cond_str,outer_tbl_cond_str = DocTypeInfo.prepare_condition(req_filters, doc_filters)
- with_query = f"""
+ def prepare_condition(filters, rpt_filters):
+ base_tbl_cond_list = []
+ outer_tbl_condition = []
+ if filters is not None:
+ for filter in filters:
+ if len(filter) == 3:
+ cond_str = f"{filter[0]} {filter[1]} '{filter[2]}'"
+ if len(filter[0].split(".")) == 1:
+ if all(filt.get("fieldname") == filter[0] for filt in rpt_filters):
+ base_tbl_cond_list.append(cond_str)
+ else:
+ outer_tbl_condition.append(cond_str)
+ elif len(filter[0].split(".")) == 2:
+ print("Logic pending")
+ outer_tbl_condition.append(cond_str)
+ # base_tbl_cond_list.append(cond_str)
+ base_tbl_cond_str = f"WHERE {'AND'.join(base_tbl_cond_list)}" if len(base_tbl_cond_list) > 0 else ""
+ outer_tbl_cond_str = (
+ f"WHERE {'AND'.join(outer_tbl_condition)}" if len(outer_tbl_condition) > 0 else ""
+ )
+ return base_tbl_cond_str, outer_tbl_cond_str
+
+ def prepare_base_query(doctype, fields, doc_filters, req_filters):
+ base_tbl = f"`tab{doctype}`"
+ columns_str = DocTypeInfo.prepare_columns(base_tbl, fields)
+ join_str = DocTypeInfo.prepare_joins(base_tbl, fields)
+ base_tbl_cond_str, outer_tbl_cond_str = DocTypeInfo.prepare_condition(req_filters, doc_filters)
+ with_query = f"""
WITH tmp_tble AS (
select
{columns_str}
@@ -184,251 +207,294 @@ def prepare_base_query(doctype, fields, doc_filters, req_filters):
{outer_tbl_cond_str}
)
"""
- return with_query
- def get_total(with_query, skip=0):
- count=None
- if skip == 0:
- count_query = f"""
+ return with_query
+
+ def get_total(with_query, skip=0):
+ count = None
+ if skip == 0:
+ count_query = f"""
{with_query}
select count(*) as count from tmp_tble
"""
- count_result = frappe.db.sql(count_query, as_dict=True)
- if len(count_result)>0:
- count = count_result[0].get('count', None)
- return count
- def get_result(with_query, skip=0, limit=20):
- limit_str = '' if limit < 0 else f"LIMIT {limit} OFFSET {skip}"
- data_query = f"""
+ count_result = frappe.db.sql(count_query, as_dict=True)
+ if len(count_result) > 0:
+ count = count_result[0].get("count", None)
+ return count
+
+ def get_result(with_query, skip=0, limit=20):
+ limit_str = "" if limit < 0 else f"LIMIT {limit} OFFSET {skip}"
+ data_query = f"""
{with_query}
select * from tmp_tble {limit_str}
"""
- results = frappe.db.sql(data_query, as_dict=True)
- return results
- def generate_csv(doc_type, with_query,batch_size = 1000):
- start = 0
- rows_count = batch_size
+ results = frappe.db.sql(data_query, as_dict=True)
+ return results
- header = True
+ def generate_csv(doc_type, with_query, batch_size=1000):
+ start = 0
+ rows_count = batch_size
- while batch_size == rows_count:
- rows = DocTypeInfo.get_result(with_query, start, batch_size)
- rows_count = len(rows)
+ header = True
- if header and rows_count:
- # Write header
- csv_buffer = StringIO()
- csv_writer = csv.writer(csv_buffer)
- csv_writer.writerow(rows[0].keys())
- yield csv_buffer.getvalue()
- csv_buffer.seek(0)
- csv_buffer.truncate(0)
- header = False
- for row in rows:
- csv_buffer = StringIO()
- csv_writer = csv.writer(csv_buffer)
- csv_writer.writerow(row.values())
- yield csv_buffer.getvalue()
- csv_buffer.seek(0)
- csv_buffer.truncate(0)
- start += batch_size
+ while batch_size == rows_count:
+ rows = DocTypeInfo.get_result(with_query, start, batch_size)
+ rows_count = len(rows)
- def export_csv(doc_type, with_query):
- response = Response(DocTypeInfo.generate_csv(doc_type, with_query), content_type='text/csv')
- response.http_status_code = 200
- response.headers["Content-Disposition"] = f"attachment; filename={doc_type.lower()}.csv"
- return response
+ if header and rows_count:
+ # Write header
+ csv_buffer = StringIO()
+ csv_writer = csv.writer(csv_buffer)
+ csv_writer.writerow(rows[0].keys())
+ yield csv_buffer.getvalue()
+ csv_buffer.seek(0)
+ csv_buffer.truncate(0)
+ header = False
+ for row in rows:
+ csv_buffer = StringIO()
+ csv_writer = csv.writer(csv_buffer)
+ csv_writer.writerow(row.values())
+ yield csv_buffer.getvalue()
+ csv_buffer.seek(0)
+ csv_buffer.truncate(0)
+ start += batch_size
- def get_fields_info(fields):
- obj = {
- 'columns':['name'],
- '_columns':[],
- 'children':{}
- }
- for field in fields:
- if field.get('child_table') is None:
- obj.get('columns').append(f"{field.get('fieldname')} as `{field.get('fieldname')}`")
- obj.get('_columns').append(field.get('fieldname'))
- else:
- child_table_field = field.get('child_table').get('fieldname')
- _fn = field.get('fieldname').replace(f"{child_table_field}.",'', 1)
- fn = f"{_fn} as `{_fn}`"
- # fn = f"{_fn} as `{field.get('fieldname')}`"
- if obj.get('children').get(child_table_field):
- obj['children'][child_table_field].get('columns').append(fn)
- obj['children'][child_table_field].get('_columns').append(_fn)
- else:
- obj['children'][child_table_field] = {
- 'columns':[fn],
- '_columns':[_fn],
- 'info':field.get('child_table')
- }
- return obj
- def create_data(rows, fields, repeat_parent=False):
- print("repeat_parent",repeat_parent)
- obj,index, res_data = fields, 1, []
- table_multiselect = [obj.get('children').get(child_table_name) for child_table_name in obj.get('children') if obj.get('children').get(child_table_name).get('info').get('fieldtype') == "Table MultiSelect"]
- tables = [obj.get('children').get(child_table_name) for child_table_name in obj.get('children') if obj.get('children').get(child_table_name).get('info').get('fieldtype') != "Table MultiSelect"]
+ def export_csv(doc_type, with_query):
+ response = Response(DocTypeInfo.generate_csv(doc_type, with_query), content_type="text/csv")
+ response.http_status_code = 200
+ response.headers["Content-Disposition"] = f"attachment; filename={doc_type.lower()}.csv"
+ return response
- for row in rows:
- row.id = index
- index = index+1
- _rows = []
- for child_table in table_multiselect:
- ct_info = child_table.get('info')
- ct_columns = child_table.get('columns')
- _ct_columns = child_table.get('_columns')
- # print(ct_info.get('options'))
- # records = frappe.db.sql(f"select * from `tab{ct_info.get('options')}` where parent = '{row.name}' and parenttype = '{ct_info.get('parenttype')}'")
- records = frappe.get_list(ct_info.get('options'),fields=ct_columns, filters={'parent':row.name,'parenttype':ct_info.get('parenttype')},ignore_permissions=True)
- if len(_ct_columns):
- k = _ct_columns[0]
- row[f"{ct_info.get('fieldname')}.{k}"] = ",".join([record[k] for record in records])
- _rows.append(row)
- for child_table in tables:
- ct_info = child_table.get('info')
- ct_columns = child_table.get('columns')
- _ct_columns = child_table.get('_columns')
- records = frappe.get_list(ct_info.get('options'),fields=ct_columns, filters={'parent':row.name,'parenttype':ct_info.get('parenttype')},ignore_permissions=True)
- # row[child_table] = records
- for i,record in enumerate(records):
- if len(_rows) < (i+1):
- index = index+1
- if repeat_parent:
- _r = copy.deepcopy(row)
- _r.update({'id':index})
- _rows.append(_r)
- else:
- _rows.append({'id':index})
- for k in _ct_columns:
- # print("data:",ct_info,k)
- _rows[i][f"{ct_info.get('fieldname')}.{k}"] = record.get(k, None)
- res_data.extend(_rows)
- # print("res_data",res_data)
- return res_data
- def write_csv_data(report_doc,fields, fields_info, filters):
- headers = [field.get('label') for field in fields]
- csv_buffer = StringIO()
- csv_writer = csv.writer(csv_buffer)
- csv_writer.writerow(headers)
- yield csv_buffer.getvalue()
- csv_buffer.seek(0)
- csv_buffer.truncate(0)
+ def get_fields_info(fields):
+ obj = {"columns": ["name"], "_columns": [], "children": {}}
+ for field in fields:
+ if field.get("child_table") is None:
+ obj.get("columns").append(f"{field.get('fieldname')} as `{field.get('fieldname')}`")
+ obj.get("_columns").append(field.get("fieldname"))
+ else:
+ child_table_field = field.get("child_table").get("fieldname")
+ _fn = field.get("fieldname").replace(f"{child_table_field}.", "", 1)
+ fn = f"{_fn} as `{_fn}`"
+ # fn = f"{_fn} as `{field.get('fieldname')}`"
+ if obj.get("children").get(child_table_field):
+ obj["children"][child_table_field].get("columns").append(fn)
+ obj["children"][child_table_field].get("_columns").append(_fn)
+ else:
+ obj["children"][child_table_field] = {
+ "columns": [fn],
+ "_columns": [_fn],
+ "info": field.get("child_table"),
+ }
+ return obj
- skip, limit= 0, 100
- while True:
- rows = frappe.get_list(
- report_doc.ref_doctype,
- fields=fields_info.get('columns'),
- filters=filters,
- order_by=report_doc.order_by if report_doc.order_by else None,
- start=skip,
- page_length=limit
- )
- results = DocTypeInfo.create_data(rows, fields_info, report_doc.repeat_parent_data)
- res_data = []
- csv_buffer = StringIO()
- csv_writer = csv.writer(csv_buffer)
- for result in results:
- # res_data.append([f"`{result.get(field.get('fieldname'), '')}`" for field in fields])
- csv_writer.writerow([f"{result.get(field.get('fieldname'), '') if result.get(field.get('fieldname'), '') else ''}" for field in fields])
- yield csv_buffer.getvalue()
- csv_buffer.seek(0)
- csv_buffer.truncate(0)
+ def create_data(rows, fields, repeat_parent=False):
+ print("repeat_parent", repeat_parent)
+ obj, index, res_data = fields, 1, []
+ table_multiselect = [
+ obj.get("children").get(child_table_name)
+ for child_table_name in obj.get("children")
+ if obj.get("children").get(child_table_name).get("info").get("fieldtype") == "Table MultiSelect"
+ ]
+ tables = [
+ obj.get("children").get(child_table_name)
+ for child_table_name in obj.get("children")
+ if obj.get("children").get(child_table_name).get("info").get("fieldtype") != "Table MultiSelect"
+ ]
+
+ for row in rows:
+ row.id = index
+ index = index + 1
+ _rows = []
+ for child_table in table_multiselect:
+ ct_info = child_table.get("info")
+ ct_columns = child_table.get("columns")
+ _ct_columns = child_table.get("_columns")
+ # print(ct_info.get('options'))
+ # records = frappe.db.sql(f"select * from `tab{ct_info.get('options')}` where parent = '{row.name}' and parenttype = '{ct_info.get('parenttype')}'")
+ records = frappe.get_list(
+ ct_info.get("options"),
+ fields=ct_columns,
+ filters={"parent": row.name, "parenttype": ct_info.get("parenttype")},
+ ignore_permissions=True,
+ )
+ if len(_ct_columns):
+ k = _ct_columns[0]
+ row[f"{ct_info.get('fieldname')}.{k}"] = ",".join([record[k] for record in records])
+ _rows.append(row)
+ for child_table in tables:
+ ct_info = child_table.get("info")
+ ct_columns = child_table.get("columns")
+ _ct_columns = child_table.get("_columns")
+ records = frappe.get_list(
+ ct_info.get("options"),
+ fields=ct_columns,
+ filters={"parent": row.name, "parenttype": ct_info.get("parenttype")},
+ ignore_permissions=True,
+ )
+ # row[child_table] = records
+ for i, record in enumerate(records):
+ if len(_rows) < (i + 1):
+ index = index + 1
+ if repeat_parent:
+ _r = copy.deepcopy(row)
+ _r.update({"id": index})
+ _rows.append(_r)
+ else:
+ _rows.append({"id": index})
+ for k in _ct_columns:
+ # print("data:",ct_info,k)
+ _rows[i][f"{ct_info.get('fieldname')}.{k}"] = record.get(k, None)
+ res_data.extend(_rows)
+ # print("res_data",res_data)
+ return res_data
+
+ def write_csv_data(report_doc, fields, fields_info, filters):
+ headers = [field.get("label") for field in fields]
+ csv_buffer = StringIO()
+ csv_writer = csv.writer(csv_buffer)
+ csv_writer.writerow(headers)
+ yield csv_buffer.getvalue()
+ csv_buffer.seek(0)
+ csv_buffer.truncate(0)
+
+ skip, limit = 0, 100
+ while True:
+ rows = frappe.get_list(
+ report_doc.ref_doctype,
+ fields=fields_info.get("columns"),
+ filters=filters,
+ order_by=report_doc.order_by if report_doc.order_by else None,
+ start=skip,
+ page_length=limit,
+ )
+ results = DocTypeInfo.create_data(rows, fields_info, report_doc.repeat_parent_data)
+ csv_buffer = StringIO()
+ csv_writer = csv.writer(csv_buffer)
+ for result in results:
+ # res_data.append([f"`{result.get(field.get('fieldname'), '')}`" for field in fields])
+ csv_writer.writerow(
+ [
+ f"{result.get(field.get('fieldname'), '') if result.get(field.get('fieldname'), '') else ''}"
+ for field in fields
+ ]
+ )
+ yield csv_buffer.getvalue()
+ csv_buffer.seek(0)
+ csv_buffer.truncate(0)
+
+ if len(results) < limit:
+ break
+ skip = skip + limit
+
+ def validate_skip_limit(skip, limit):
+ try:
+ skip = int(skip)
+ limit = int(limit)
+ except (ValueError, TypeError):
+ skip = 0
+ limit = 20
+ return skip, limit
- if len(results) < limit:
- break
- skip = skip + limit
- def validate_skip_limit(skip, limit):
- try:
- skip = int(skip)
- limit = int(limit)
- except (ValueError, TypeError):
- skip = 0
- limit = 20
- return skip, limit
+ def get_data(doc_type, doc_name, filters=None, skip=0, limit=20, csv_export="0", debug=False):
+ # return "doc_name"
+ if filters is None:
+ filters = []
+ report_doc = frappe.get_doc(doc_type, doc_name)
+ fields = DocTypeInfo.prepare_fields(report_doc)
+ fields_info = DocTypeInfo.get_fields_info(fields)
+ skip, limit = DocTypeInfo.validate_skip_limit(skip, limit)
- def get_data(doc_type, doc_name,filters=[], skip=0, limit=20,csv_export='0',debug=False):
- # return "doc_name"
- report_doc = frappe.get_doc(doc_type, doc_name)
- fields = DocTypeInfo.prepare_fields(report_doc)
- fields_info = DocTypeInfo.get_fields_info(fields)
- skip, limit = DocTypeInfo.validate_skip_limit(skip, limit)
+ if report_doc.ref_doctype is not None:
+ if csv_export == "1":
+ response = Response(
+ DocTypeInfo.write_csv_data(report_doc, fields, fields_info, filters),
+ content_type="text/csv",
+ )
+ response.http_status_code = 200
+ response.headers["Content-Disposition"] = f"attachment; filename={doc_type.lower()}.csv"
+ return response
+ else:
+ results, count = [], 0
+ count_res = frappe.get_list(
+ report_doc.ref_doctype, fields=["count(name) as count"], filters=filters
+ )
+ if len(count_res):
+ count = count_res[0].count
+ rows = frappe.get_list(
+ report_doc.ref_doctype,
+ fields=fields_info.get("columns"),
+ filters=filters,
+ order_by=report_doc.order_by if report_doc.order_by else None,
+ start=skip,
+ page_length=limit,
+ )
+ results = DocTypeInfo.create_data(rows, fields_info, report_doc.repeat_parent_data)
+ return {
+ "filters": [
+ {
+ "label": field.get("label"),
+ "name": field.get("label"),
+ "fieldname": field.get("fieldname"),
+ "fieldtype": field.get("fieldtype"),
+ "options": field.get("options"),
+ }
+ for field in report_doc.filters
+ ],
+ "report_doc": report_doc,
+ "fields_info": fields_info,
+ "columns": [
+ {
+ "label": field.get("label"),
+ "name": field.get("label"),
+ "fieldname": field.get("fieldname"),
+ "key": field.get("fieldname"),
+ "fieldtype": field.get("fieldtype"),
+ "options": field.get("options"),
+ }
+ for field in fields
+ ],
+ "data": results,
+ "total_records": count,
+ }
+ else:
+ return "Invalid"
- if report_doc.ref_doctype is not None:
- if csv_export == "1":
- response = Response(DocTypeInfo.write_csv_data(report_doc,fields, fields_info, filters), content_type='text/csv')
- response.http_status_code = 200
- response.headers["Content-Disposition"] = f"attachment; filename={doc_type.lower()}.csv"
- return response
- else:
- results, count = [], 0
- count_res = frappe.get_list(report_doc.ref_doctype,fields=["count(name) as count"],filters=filters)
- if len(count_res):
- count = count_res[0].count
- rows = frappe.get_list(
- report_doc.ref_doctype,
- fields=fields_info.get('columns'),
- filters=filters,
- order_by=report_doc.order_by if report_doc.order_by else None,
- start=skip,
- page_length=limit
- )
- results = DocTypeInfo.create_data(rows, fields_info,report_doc.repeat_parent_data)
- return {
- 'filters':[
- {
- "label":field.get('label'),
- "name":field.get('label'),
- "fieldname":field.get('fieldname'),
- "fieldtype":field.get('fieldtype'),
- "options":field.get('options')
- } for field in report_doc.filters
- ],
- 'report_doc':report_doc,
- 'fields_info':fields_info,
- 'columns':[{
- "label":field.get('label'),
- "name":field.get('label'),
- "fieldname":field.get('fieldname'),
- "key":field.get('fieldname'),
- "fieldtype":field.get('fieldtype'),
- "options":field.get('options')
- } for field in fields
- ],
- 'data':results,
- 'total_records':count
- }
- else:
- return "Invalid"
- def get_data_old(doc_type, doc_name,filters=[], skip=0, limit=20,csv_export='1',debug=False ):
- report_doc = frappe.get_doc(doc_type, doc_name)
- fields = DocTypeInfo.prepare_fields(report_doc)
- # print("fields",fields,report_doc)
- with_query = DocTypeInfo.prepare_base_query(report_doc.ref_doctype,fields,report_doc.filters, filters)
- # print("with_query",with_query)
- # return with_query
- if csv_export != '1':
- count=DocTypeInfo.get_total(with_query, skip)
- results=DocTypeInfo.get_result(with_query, skip, limit)
- return {
- 'filters':[
- {
- "label":field.get('label'),
- "name":field.get('label'),
- "fieldname":field.get('fieldname'),
- "fieldtype":field.get('fieldtype'),
- "options":field.get('options')
- } for field in report_doc.filters
- ],
- 'columns':[{
- "label":field.get('label'),
- "name":field.get('label'),
- "fieldname":field.get('fieldname'),
- "fieldtype":field.get('fieldtype'),
- "options":field.get('options')
- } for field in fields],
- 'data':results,
- 'total_records':count
- }
- else:
- return DocTypeInfo.export_csv(doc_type, with_query)
\ No newline at end of file
+ def get_data_old(doc_type, doc_name, filters=None, skip=0, limit=20, csv_export="1", debug=False):
+ if filters is None:
+ filters = []
+ report_doc = frappe.get_doc(doc_type, doc_name)
+ fields = DocTypeInfo.prepare_fields(report_doc)
+ # print("fields",fields,report_doc)
+ with_query = DocTypeInfo.prepare_base_query(
+ report_doc.ref_doctype, fields, report_doc.filters, filters
+ )
+ # print("with_query",with_query)
+ # return with_query
+ if csv_export != "1":
+ count = DocTypeInfo.get_total(with_query, skip)
+ results = DocTypeInfo.get_result(with_query, skip, limit)
+ return {
+ "filters": [
+ {
+ "label": field.get("label"),
+ "name": field.get("label"),
+ "fieldname": field.get("fieldname"),
+ "fieldtype": field.get("fieldtype"),
+ "options": field.get("options"),
+ }
+ for field in report_doc.filters
+ ],
+ "columns": [
+ {
+ "label": field.get("label"),
+ "name": field.get("label"),
+ "fieldname": field.get("fieldname"),
+ "fieldtype": field.get("fieldtype"),
+ "options": field.get("options"),
+ }
+ for field in fields
+ ],
+ "data": results,
+ "total_records": count,
+ }
+ else:
+ return DocTypeInfo.export_csv(doc_type, with_query)
diff --git a/myojana/sva_report/controllers/get_report_data.py b/myojana/sva_report/controllers/get_report_data.py
index e67a764..c1f9c4b 100644
--- a/myojana/sva_report/controllers/get_report_data.py
+++ b/myojana/sva_report/controllers/get_report_data.py
@@ -2,17 +2,23 @@
# For license information, please see license.txt
import frappe
+
# from sva_report.utils.filter import Filter
# from sva_report.utils.doc_type_info import DocTypeInfo
from myojana.sva_report.controllers.doc_type_info import DocTypeInfo
+
@frappe.whitelist()
-def execute(doc,filters=[],skip=0, limit=10,csv_export=0,debug=None):
- # print("doc",doc)
- res= DocTypeInfo.get_data('SVA Report',doc, filters,skip, limit,csv_export, debug )
- return res
+def execute(doc, filters=None, skip=0, limit=10, csv_export=0, debug=None):
+ # print("doc",doc)
+ if filters is None:
+ filters = []
+ res = DocTypeInfo.get_data("SVA Report", doc, filters, skip, limit, csv_export, debug)
+ return res
+
+
@frappe.whitelist()
-def get_fields(doc, section='0'):
- # res = DocTypeInfo.get_data('SVA Report',doc, filters,skip, limit,csv_export, debug )
- res = DocTypeInfo.get_fields(doc,fields=[], section=section)
- return res
\ No newline at end of file
+def get_fields(doc, section="0"):
+ # res = DocTypeInfo.get_data('SVA Report',doc, filters,skip, limit,csv_export, debug )
+ res = DocTypeInfo.get_fields(doc, fields=[], section=section)
+ return res
diff --git a/myojana/sva_report/controllers/get_report_list.py b/myojana/sva_report/controllers/get_report_list.py
index b0f4937..01a4058 100644
--- a/myojana/sva_report/controllers/get_report_list.py
+++ b/myojana/sva_report/controllers/get_report_list.py
@@ -1,5 +1,6 @@
import frappe
+
@frappe.whitelist()
def get_report_list():
- return frappe.get_list('SVA Report')
+ return frappe.get_list("SVA Report")
diff --git a/myojana/sva_report/doctype/report_list/report_list.js b/myojana/sva_report/doctype/report_list/report_list.js
index 348f237..cf1e4de 100644
--- a/myojana/sva_report/doctype/report_list/report_list.js
+++ b/myojana/sva_report/doctype/report_list/report_list.js
@@ -1,166 +1,164 @@
-
let filters_data;
function fetchAndRenderData(frm, limit, filters) {
- frappe.call({
- method: "myojana.sva_report.controllers.get_report_data.execute",
- args: {
- doc: frm.doc.name,
- limit: limit,
- filters: filters,
- },
- callback: function (response) {
- if (response.message) {
- renderDataTable(response.message);
- filters_data = response.message.filters
- buttion(frm)
- } else {
- console.error("Error fetching data from API.");
- }
- }
- });
+ frappe.call({
+ method: "myojana.sva_report.controllers.get_report_data.execute",
+ args: {
+ doc: frm.doc.name,
+ limit: limit,
+ filters: filters,
+ },
+ callback: function (response) {
+ if (response.message) {
+ renderDataTable(response.message);
+ filters_data = response.message.filters;
+ buttion(frm);
+ } else {
+ console.error("Error fetching data from API.");
+ }
+ },
+ });
}
frappe.ui.form.on("Report List", {
- refresh(frm) {
- // to hide unwanted buttons
- // $('.standard-actions').hide();
- //
-
- if (!frm.is_new() == 1) {
- console.log("frm.is_new()",frm.is_new());
- $('.standard-actions').hide();
- fetchAndRenderData(frm, {});
- DataExportButton(frm)
- }
+ refresh(frm) {
+ // to hide unwanted buttons
+ // $('.standard-actions').hide();
+ //
- frm.add_custom_button('Filter', () => {
- frappe.prompt(
- filter_fields = filters_data?.map(fltr => ({
- fieldname: fltr.fieldname,
- fieldtype: fltr.fieldtype,
- label: fltr.label,
- options: fltr.options,
- default: fltr.default || ''
- })) || [],
- function (values) {
- let appliedFilters = {};
- filter_fields.forEach(filter => {
- appliedFilters[filter.fieldname] = values[filter.fieldname];
- });
- fetchAndRenderData(frm, {}, appliedFilters);
- },
- __('Apply')
- );
- });
+ if (!frm.is_new() == 1) {
+ console.log("frm.is_new()", frm.is_new());
+ $(".standard-actions").hide();
+ fetchAndRenderData(frm, {});
+ DataExportButton(frm);
+ }
- }
+ frm.add_custom_button("Filter", () => {
+ const filter_fields =
+ filters_data?.map((fltr) => ({
+ fieldname: fltr.fieldname,
+ fieldtype: fltr.fieldtype,
+ label: fltr.label,
+ options: fltr.options,
+ default: fltr.default || "",
+ })) || [];
+ frappe.prompt(
+ filter_fields,
+ function (values) {
+ let appliedFilters = {};
+ filter_fields.forEach((filter) => {
+ appliedFilters[filter.fieldname] = values[filter.fieldname];
+ });
+ fetchAndRenderData(frm, {}, appliedFilters);
+ },
+ __("Apply")
+ );
+ });
+ },
});
-
function renderDataTable(e) {
- Total(e.total_records, e.data.length)
- let columns = e.columns.map(function (coloum) {
- return `
${coloum.label} | `
- })
- let data = e.data.map(function (row) {
- let rowData = [];
- for (let column of e.columns) {
- rowData.push(row[column.fieldname]);
- }
- return rowData;
- });
- let datatable = new frappe.DataTable("#list", {
- columns: columns,
- data: data,
- width: '80%',
- });
- datatable.refresh();
+ Total(e.total_records, e.data.length);
+ let columns = e.columns.map(function (coloum) {
+ return `
${coloum.label} | `;
+ });
+ let data = e.data.map(function (row) {
+ let rowData = [];
+ for (let column of e.columns) {
+ rowData.push(row[column.fieldname]);
+ }
+ return rowData;
+ });
+ let datatable = new frappe.DataTable("#list", {
+ columns: columns,
+ data: data,
+ width: "80%",
+ });
+ datatable.refresh();
}
function Total(total_count = 0, page_count = 0) {
- let buttonsHTML = `
+ let buttonsHTML = `
Total esult ${total_count}
`;
- // document.getElementById("total").innerHTML = buttonsHTML;
+ // document.getElementById("total").innerHTML = buttonsHTML;
}
function buttion(frm) {
- let buttonsHTML = `
+ let buttonsHTML = `
`;
- document.getElementById("button").innerHTML = buttonsHTML;
- function removeActiveClass() {
- let buttons = document.querySelectorAll("#button button");
- buttons.forEach(button => {
- button.style.backgroundColor = '';
- button.style.color = '';
- });
- }
+ document.getElementById("button").innerHTML = buttonsHTML;
+ function removeActiveClass() {
+ let buttons = document.querySelectorAll("#button button");
+ buttons.forEach((button) => {
+ button.style.backgroundColor = "";
+ button.style.color = "";
+ });
+ }
- document.getElementById("limit20").addEventListener("click", function () {
- removeActiveClass();
- this.style.backgroundColor = 'rgb(249,248,249)';
- this.style.color = 'black';
- fetchAndRenderData(frm, 20);
- });
- document.getElementById("limit100").addEventListener("click", function () {
- removeActiveClass();
- this.style.backgroundColor = 'rgb(249,248,249)';
- this.style.color = 'black';
- fetchAndRenderData(frm, 100);
- });
- document.getElementById("limit500").addEventListener("click", function () {
- removeActiveClass();
- this.style.backgroundColor = 'rgb(249,248,249)';
- this.style.color = 'black';
- fetchAndRenderData(frm, 500);
- });
- document.getElementById("limit1000").addEventListener("click", function () {
- removeActiveClass();
- this.style.backgroundColor = 'rgb(249,248,249)';
- this.style.color = 'black';
- fetchAndRenderData(frm, 1000);
- });
+ document.getElementById("limit20").addEventListener("click", function () {
+ removeActiveClass();
+ this.style.backgroundColor = "rgb(249,248,249)";
+ this.style.color = "black";
+ fetchAndRenderData(frm, 20);
+ });
+ document.getElementById("limit100").addEventListener("click", function () {
+ removeActiveClass();
+ this.style.backgroundColor = "rgb(249,248,249)";
+ this.style.color = "black";
+ fetchAndRenderData(frm, 100);
+ });
+ document.getElementById("limit500").addEventListener("click", function () {
+ removeActiveClass();
+ this.style.backgroundColor = "rgb(249,248,249)";
+ this.style.color = "black";
+ fetchAndRenderData(frm, 500);
+ });
+ document.getElementById("limit1000").addEventListener("click", function () {
+ removeActiveClass();
+ this.style.backgroundColor = "rgb(249,248,249)";
+ this.style.color = "black";
+ fetchAndRenderData(frm, 1000);
+ });
}
-
function DataExportButton(frm) {
- frm.add_custom_button(__('Export'), function () {
- const a = document.createElement('a');
- a.href = `/api/method/myojana.sva_report.controllers.get_report_data.execute?doc=${frm.doc.name}&csv_export=1`;
- a.target = '_blank'; // Open link in new tab
- a.download = ''; // This attribute triggers the download
- document.body.appendChild(a);
- a.click();
- document.body.removeChild(a);
- });
+ frm.add_custom_button(__("Export"), function () {
+ const a = document.createElement("a");
+ a.href = `/api/method/myojana.sva_report.controllers.get_report_data.execute?doc=${frm.doc.name}&csv_export=1`;
+ a.target = "_blank"; // Open link in new tab
+ a.download = ""; // This attribute triggers the download
+ document.body.appendChild(a);
+ a.click();
+ document.body.removeChild(a);
+ });
}
function downloadTableAsCSV(data, filename) {
- var csv = convertToCSV(data);
- var blob = new Blob([csv], { type: 'text/csv' });
- var link = document.createElement("a");
- link.href = window.URL.createObjectURL(blob);
- link.download = filename;
- document.body.appendChild(link);
- link.click();
+ var csv = convertToCSV(data);
+ var blob = new Blob([csv], { type: "text/csv" });
+ var link = document.createElement("a");
+ link.href = window.URL.createObjectURL(blob);
+ link.download = filename;
+ document.body.appendChild(link);
+ link.click();
}
function convertToCSV(data) {
- var csv = '';
- var headers = Object.keys(data[0]);
- csv += headers.join(',') + '\n';
- data.forEach(function (row) {
- var values = headers.map(function (header) {
- return row[header];
- });
- csv += values.join(',') + '\n';
- });
- return csv;
+ var csv = "";
+ var headers = Object.keys(data[0]);
+ csv += headers.join(",") + "\n";
+ data.forEach(function (row) {
+ var values = headers.map(function (header) {
+ return row[header];
+ });
+ csv += values.join(",") + "\n";
+ });
+ return csv;
}
diff --git a/myojana/sva_report/doctype/sva_report/sva_report.js b/myojana/sva_report/doctype/sva_report/sva_report.js
index d7b20c7..1a8d8cb 100644
--- a/myojana/sva_report/doctype/sva_report/sva_report.js
+++ b/myojana/sva_report/doctype/sva_report/sva_report.js
@@ -1,155 +1,161 @@
// Copyright (c) 2023, Rahul Sah and contributors
// For license information, please see license.txt
-var fields = []
-var checked_data = []
-var new_checked_data = []
+var fields = [];
+var checked_data = [];
+var new_checked_data = [];
// Calling APIs Common function
function callAPI(options) {
- return new Promise((resolve, reject) => {
- frappe.call({
- ...options,
- callback: async function (response) {
- resolve(response?.message || response?.value)
- }
- });
- })
+ return new Promise((resolve, reject) => {
+ frappe.call({
+ ...options,
+ callback: async function (response) {
+ resolve(response?.message || response?.value);
+ },
+ });
+ });
}
async function arrangeFields(fields, checked_data = []) {
- const groupedFields = {};
- // await fields.forEach(field => {
- // const doctype = field.doc_type || 'default';
- // if (!groupedFields[doctype]) groupedFields[doctype] = [];
- // groupedFields[doctype].push(field);
- // });
- // return Object.entries(groupedFields).flatMap(([doctype, fields]) => [
- // { fieldname: `${doctype}_section_break`, fieldtype: "Section Break", label: `${doctype} Details` },
- // ...fields.map(field => {
- // // field.label = `${field.label}${(field?.link_table?.label?' ('+field?.link_table?.label+')':'')}`
- // if (checked_data.length > 0 && checked_data.includes(field.fieldname)) {
- // return {
- // fieldname: field.fieldname, fieldtype: "Check", label: field.label, ft: field.fieldtype, default: 1, onchange: (e) => {
- // if (e.currentTarget.checked) {
- // new_checked_data.push(field.fieldname)
- // } else {
- // new_checked_data = new_checked_data.filter((doc) => doc !== field.fieldname)
- // }
- // console.log(new_checked_data)
- // }
- // }
- // } else {
- // return {
- // fieldname: field.fieldname, fieldtype: "Check", label: field.label, ft: field.fieldtype, default: 0, onchange: (e) => {
- // if (e.currentTarget.checked) {
- // if (!new_checked_data.includes(field.fieldname)) {
- // new_checked_data.push(field.fieldname)
- // }
- // } else {
- // new_checked_data = new_checked_data.filter((doc) => doc !== field.fieldname)
- // }
- // }
- // }
- // }
- // })
- // ]);
- return [...fields.map(field => {
- // field.label = `${field.label}${(field?.link_table?.label?' ('+field?.link_table?.label+')':'')}`
- if(["Section Break",'Tab Break'].includes(field.fieldtype)){
- if(!field.label){
- console.log(field);
- }
- return { fieldname: `${field.fieldname}_section_break`, fieldtype: "Section Break", label: `${field.label ? field.label:''}` };
- }
- return {
- fieldname: field.fieldname,
- fieldtype: "Check",
- label: field.label,
- ft: field.fieldtype,
- default: (checked_data.length > 0 && checked_data.includes(field.fieldname)),
- onchange: (e) => {
- if (e.currentTarget.checked) {
- new_checked_data.push(field.fieldname)
- } else {
- new_checked_data = new_checked_data.filter((doc) => doc !== field.fieldname)
- }
- }
- }
- })]
+ const groupedFields = {};
+ // await fields.forEach(field => {
+ // const doctype = field.doc_type || 'default';
+ // if (!groupedFields[doctype]) groupedFields[doctype] = [];
+ // groupedFields[doctype].push(field);
+ // });
+ // return Object.entries(groupedFields).flatMap(([doctype, fields]) => [
+ // { fieldname: `${doctype}_section_break`, fieldtype: "Section Break", label: `${doctype} Details` },
+ // ...fields.map(field => {
+ // // field.label = `${field.label}${(field?.link_table?.label?' ('+field?.link_table?.label+')':'')}`
+ // if (checked_data.length > 0 && checked_data.includes(field.fieldname)) {
+ // return {
+ // fieldname: field.fieldname, fieldtype: "Check", label: field.label, ft: field.fieldtype, default: 1, onchange: (e) => {
+ // if (e.currentTarget.checked) {
+ // new_checked_data.push(field.fieldname)
+ // } else {
+ // new_checked_data = new_checked_data.filter((doc) => doc !== field.fieldname)
+ // }
+ // console.log(new_checked_data)
+ // }
+ // }
+ // } else {
+ // return {
+ // fieldname: field.fieldname, fieldtype: "Check", label: field.label, ft: field.fieldtype, default: 0, onchange: (e) => {
+ // if (e.currentTarget.checked) {
+ // if (!new_checked_data.includes(field.fieldname)) {
+ // new_checked_data.push(field.fieldname)
+ // }
+ // } else {
+ // new_checked_data = new_checked_data.filter((doc) => doc !== field.fieldname)
+ // }
+ // }
+ // }
+ // }
+ // })
+ // ]);
+ return [
+ ...fields.map((field) => {
+ // field.label = `${field.label}${(field?.link_table?.label?' ('+field?.link_table?.label+')':'')}`
+ if (["Section Break", "Tab Break"].includes(field.fieldtype)) {
+ if (!field.label) {
+ console.log(field);
+ }
+ return {
+ fieldname: `${field.fieldname}_section_break`,
+ fieldtype: "Section Break",
+ label: `${field.label ? field.label : ""}`,
+ };
+ }
+ return {
+ fieldname: field.fieldname,
+ fieldtype: "Check",
+ label: field.label,
+ ft: field.fieldtype,
+ default: checked_data.length > 0 && checked_data.includes(field.fieldname),
+ onchange: (e) => {
+ if (e.currentTarget.checked) {
+ new_checked_data.push(field.fieldname);
+ } else {
+ new_checked_data = new_checked_data.filter(
+ (doc) => doc !== field.fieldname
+ );
+ }
+ },
+ };
+ }),
+ ];
}
frappe.ui.form.on("SVA Report", {
- refresh(frm) {
-
- },
- map_columns: async (frm) => {
- if (!fields.length) {
- fields = await callAPI({
- method: 'myojana.sva_report.controllers.get_report_data.get_fields',
- args: {
- doc: frm.doc.ref_doctype,
- section:'1'
- },
- freeze_message: __("Getting fields..."),
- })
- }
- checked_data = await callAPI({
- method: 'myojana.sva_report.controllers.child_table_crud.get_all_child_doc',
- args: {
- doctype: "Report Column",
- parent: frm.doc.name,
- parentfield: "columns",
- parenttype: "SVA Report",
- },
- freeze_message: __("Getting fields..."),
- })
- if (checked_data.length > 0) {
- new_checked_data = [...checked_data]
- }
- const arrangedFields = await arrangeFields(fields, checked_data);
- let dialog_fields = [...arrangedFields]
- var d = new frappe.ui.Dialog({
- 'title': "Fields",
- 'fields': dialog_fields,
- primary_action: async function (obj) {
- const checked_docs = d?.fields
- ?.filter(field => new_checked_data?.includes(field?.fieldname))
- ?.sort((a, b) => {
- const indexA = new_checked_data.indexOf(a.fieldname);
- const indexB = new_checked_data.indexOf(b.fieldname);
- return indexA - indexB;
- });
- await callAPI({
- method: 'myojana.sva_report.controllers.child_table_crud.delete_all_child_doc',
- args: {
- doctype: "Report Column",
- parent: frm.doc.name,
- parentfield: "columns",
- parenttype: "SVA Report",
- },
- freeze_message: __("Mapping columns..."),
- })
- if (checked_docs.length > 0) {
- await checked_docs?.forEach(async (doc, index) => {
- await callAPI({
- method: 'myojana.sva_report.controllers.child_table_crud.insert_child_doc',
- args: {
- doctype: "Report Column",
- parent: frm.doc.name,
- parentfield: "columns",
- parenttype: "SVA Report",
- fieldname: doc.fieldname,
- label: doc.label,
- fieldtype: doc.ft,
- idx: index + 1
- },
- freeze_message: __("Mapping columns..."),
- })
- });
- }
- d.hide();
- checked_data = []
- new_checked_data = []
- frm.debounced_reload_doc();
- }
- });
- d.show();
- }
+ refresh(frm) {},
+ map_columns: async (frm) => {
+ if (!fields.length) {
+ fields = await callAPI({
+ method: "myojana.sva_report.controllers.get_report_data.get_fields",
+ args: {
+ doc: frm.doc.ref_doctype,
+ section: "1",
+ },
+ freeze_message: __("Getting fields..."),
+ });
+ }
+ checked_data = await callAPI({
+ method: "myojana.sva_report.controllers.child_table_crud.get_all_child_doc",
+ args: {
+ doctype: "Report Column",
+ parent: frm.doc.name,
+ parentfield: "columns",
+ parenttype: "SVA Report",
+ },
+ freeze_message: __("Getting fields..."),
+ });
+ if (checked_data.length > 0) {
+ new_checked_data = [...checked_data];
+ }
+ const arrangedFields = await arrangeFields(fields, checked_data);
+ let dialog_fields = [...arrangedFields];
+ var d = new frappe.ui.Dialog({
+ title: "Fields",
+ fields: dialog_fields,
+ primary_action: async function (obj) {
+ const checked_docs = d?.fields
+ ?.filter((field) => new_checked_data?.includes(field?.fieldname))
+ ?.sort((a, b) => {
+ const indexA = new_checked_data.indexOf(a.fieldname);
+ const indexB = new_checked_data.indexOf(b.fieldname);
+ return indexA - indexB;
+ });
+ await callAPI({
+ method: "myojana.sva_report.controllers.child_table_crud.delete_all_child_doc",
+ args: {
+ doctype: "Report Column",
+ parent: frm.doc.name,
+ parentfield: "columns",
+ parenttype: "SVA Report",
+ },
+ freeze_message: __("Mapping columns..."),
+ });
+ if (checked_docs.length > 0) {
+ await checked_docs?.forEach(async (doc, index) => {
+ await callAPI({
+ method: "myojana.sva_report.controllers.child_table_crud.insert_child_doc",
+ args: {
+ doctype: "Report Column",
+ parent: frm.doc.name,
+ parentfield: "columns",
+ parenttype: "SVA Report",
+ fieldname: doc.fieldname,
+ label: doc.label,
+ fieldtype: doc.ft,
+ idx: index + 1,
+ },
+ freeze_message: __("Mapping columns..."),
+ });
+ });
+ }
+ d.hide();
+ checked_data = [];
+ new_checked_data = [];
+ frm.debounced_reload_doc();
+ },
+ });
+ d.show();
+ },
});
diff --git a/myojana/utils/__init__.py b/myojana/utils/__init__.py
index b6456a1..71352b8 100644
--- a/myojana/utils/__init__.py
+++ b/myojana/utils/__init__.py
@@ -1,2 +1,3 @@
import sys
+
print(sys.path)
diff --git a/myojana/utils/after_install.py b/myojana/utils/after_install.py
index 13d3af2..b72bc62 100644
--- a/myojana/utils/after_install.py
+++ b/myojana/utils/after_install.py
@@ -1,29 +1,31 @@
import frappe
+
+
class AfterInstall:
- def set_favicons():
- update_favicon = """UPDATE tabSingles SET value = "/images/favicon.png" WHERE doctype = "Website Settings" AND field = "favicon";"""
- frappe.db.sql(update_favicon, as_dict=True)
+ def set_favicons():
+ update_favicon = """UPDATE tabSingles SET value = "/images/favicon.png" WHERE doctype = "Website Settings" AND field = "favicon";"""
+ frappe.db.sql(update_favicon, as_dict=True)
- def set_website_logo():
- update_website_logo = """UPDATE tabSingles SET value = "images/mYojana-remove.png" WHERE doctype = "Website Settings" AND field = "app_logo";"""
- frappe.db.sql(update_website_logo, as_dict=True)
+ def set_website_logo():
+ update_website_logo = """UPDATE tabSingles SET value = "images/mYojana-remove.png" WHERE doctype = "Website Settings" AND field = "app_logo";"""
+ frappe.db.sql(update_website_logo, as_dict=True)
- def set_navbar_logo():
- update_app_logo = """UPDATE tabSingles SET value = "/images/favicon.png" WHERE doctype = "Navbar Settings" AND field = "app_logo";"""
- frappe.db.sql(update_app_logo, as_dict=True)
+ def set_navbar_logo():
+ update_app_logo = """UPDATE tabSingles SET value = "/images/favicon.png" WHERE doctype = "Navbar Settings" AND field = "app_logo";"""
+ frappe.db.sql(update_app_logo, as_dict=True)
- def set_splash_image():
- update_splash_image = """UPDATE tabSingles SET value = "/images/mYojana-remove.png" WHERE doctype = "Website Settings" AND field = "splash_image";"""
- frappe.db.sql(update_splash_image, as_dict=True)
+ def set_splash_image():
+ update_splash_image = """UPDATE tabSingles SET value = "/images/mYojana-remove.png" WHERE doctype = "Website Settings" AND field = "splash_image";"""
+ frappe.db.sql(update_splash_image, as_dict=True)
- def set_brand_logo():
- update_website_brand_image = """UPDATE tabSingles SET value = "/images/favicon.png" WHERE doctype = "Website Settings" AND field = "banner_image";"""
- frappe.db.sql(update_website_brand_image, as_dict=True)
+ def set_brand_logo():
+ update_website_brand_image = """UPDATE tabSingles SET value = "/images/favicon.png" WHERE doctype = "Website Settings" AND field = "banner_image";"""
+ frappe.db.sql(update_website_brand_image, as_dict=True)
- def set_app_name():
- set_app_name = """UPDATE tabSingles SET value = "mYojana" WHERE doctype = "Website Settings" AND field = "app_name";"""
- frappe.db.sql(set_app_name, as_dict=True)
+ def set_app_name():
+ set_app_name = """UPDATE tabSingles SET value = "mYojana" WHERE doctype = "Website Settings" AND field = "app_name";"""
+ frappe.db.sql(set_app_name, as_dict=True)
- def set_navbar_setting():
- update_home_page = """UPDATE tabSingles SET value = "/app" WHERE doctype = "Website Settings" AND field = "home_page";"""
- frappe.db.sql(update_home_page, as_dict=True)
+ def set_navbar_setting():
+ update_home_page = """UPDATE tabSingles SET value = "/app" WHERE doctype = "Website Settings" AND field = "home_page";"""
+ frappe.db.sql(update_home_page, as_dict=True)
diff --git a/myojana/utils/cache.py b/myojana/utils/cache.py
index fd8fb7a..d3c4967 100644
--- a/myojana/utils/cache.py
+++ b/myojana/utils/cache.py
@@ -1,71 +1,72 @@
-import frappe
import ast
-class Cache:
- def dict_to_sql_where_clause(conditions, table_name = None, op="AND"):
- """
- Convert a dictionary to an SQL WHERE clause with OR conditions.
+import frappe
+
+
+class Cache:
+ def dict_to_sql_where_clause(conditions, table_name=None, op="AND"):
+ """
+ Convert a dictionary to an SQL WHERE clause with OR conditions.
- :param conditions: A dictionary containing conditions in the form of {'key': ['value1', 'value2', ...], ...}
- :return: A string representing the SQL WHERE clause with OR conditions.
- """
- where_clauses = []
+ :param conditions: A dictionary containing conditions in the form of {'key': ['value1', 'value2', ...], ...}
+ :return: A string representing the SQL WHERE clause with OR conditions.
+ """
+ where_clauses = []
- for key, values in conditions.items():
- # Check if there's only one value for the current key
- if len(values) == 1:
- # Create a condition for the single value
- if table_name:
- where_clauses.append(f"{table_name}.{key} = '{values[0]}'")
- else:
- where_clauses.append(f"{key} = '{values[0]}'")
- else:
- # Create an IN condition for multiple values
- val = [f"'{value}'" for value in values]
- if(table_name):
- in_clause = f"{table_name+'.'+key} IN ({', '.join(val)})"
- else:
- in_clause = f"{key} IN ({', '.join(val)})"
- where_clauses.append(in_clause)
+ for key, values in conditions.items():
+ # Check if there's only one value for the current key
+ if len(values) == 1:
+ # Create a condition for the single value
+ if table_name:
+ where_clauses.append(f"{table_name}.{key} = '{values[0]}'")
+ else:
+ where_clauses.append(f"{key} = '{values[0]}'")
+ else:
+ # Create an IN condition for multiple values
+ val = [f"'{value}'" for value in values]
+ if table_name:
+ in_clause = f"{table_name+'.'+key} IN ({', '.join(val)})"
+ else:
+ in_clause = f"{key} IN ({', '.join(val)})"
+ where_clauses.append(in_clause)
- # Combine all conditions with OR
- where_clause = f" {op} ".join(where_clauses)
+ # Combine all conditions with OR
+ where_clause = f" {op} ".join(where_clauses)
- return where_clause
+ return where_clause
- def get_user_permission(cond_str=True,table=None):
- usr = frappe.session.user
- # getting myojan setting and mapping of state and district
- mapper_docs = frappe.db.sql("""
+ def get_user_permission(cond_str=True, table=None):
+ usr = frappe.session.user
+ # getting myojan setting and mapping of state and district
+ mapper_docs = frappe.db.sql(
+ """
SELECT
doctypes , field_name
FROM `tabSetting Doctype Child`
- """,as_dict=True)
- # print("myojana_setting_child:",myojana_setting_child)
- mapperObj = {}
- for doc in mapper_docs:
- mapperObj[doc.doctypes] = doc.field_name
- # getting the list of user permission list
- permission_list = frappe.db.get_list('User Permission',
- filters={
- 'user': usr
- },
- fields=['allow', 'for_value'],
- ignore_permissions=True
- )
- # print("permission_list",permission_list)
- conditions = {}
- for doc in permission_list:
- if mapperObj[doc.allow] is not None:
- # print(mapperObj[doc.allow])
- if conditions.get(mapperObj[doc.allow], None) is not None:
- conditions[mapperObj[doc.allow]].append(f"{doc.for_value}")
- else:
- conditions[mapperObj[doc.allow]] = [f"{doc.for_value}"]
- new_conditions = {}
- if cond_str:
- new_conditions = Cache.dict_to_sql_where_clause(conditions, table)
- else:
- for field_name in conditions:
- new_conditions[field_name] = ["IN",conditions[field_name]]
- return new_conditions
\ No newline at end of file
+ """,
+ as_dict=True,
+ )
+ # print("myojana_setting_child:",myojana_setting_child)
+ mapperObj = {}
+ for doc in mapper_docs:
+ mapperObj[doc.doctypes] = doc.field_name
+ # getting the list of user permission list
+ permission_list = frappe.db.get_list(
+ "User Permission", filters={"user": usr}, fields=["allow", "for_value"], ignore_permissions=True
+ )
+ # print("permission_list",permission_list)
+ conditions = {}
+ for doc in permission_list:
+ if mapperObj[doc.allow] is not None:
+ # print(mapperObj[doc.allow])
+ if conditions.get(mapperObj[doc.allow], None) is not None:
+ conditions[mapperObj[doc.allow]].append(f"{doc.for_value}")
+ else:
+ conditions[mapperObj[doc.allow]] = [f"{doc.for_value}"]
+ new_conditions = {}
+ if cond_str:
+ new_conditions = Cache.dict_to_sql_where_clause(conditions, table)
+ else:
+ for field_name in conditions:
+ new_conditions[field_name] = ["IN", conditions[field_name]]
+ return new_conditions
diff --git a/myojana/utils/htmltoimg.py b/myojana/utils/htmltoimg.py
index f28e659..612639f 100644
--- a/myojana/utils/htmltoimg.py
+++ b/myojana/utils/htmltoimg.py
@@ -1,17 +1,26 @@
import frappe
import imgkit
+
def create_image(ben_id):
- # Retrieve the document based on the Beneficiary ID
- doc = frappe.get_doc("Beneficiary Profiling", ben_id)
+ # Retrieve the document based on the Beneficiary ID
+ doc = frappe.get_doc("Beneficiary Profiling", ben_id)
- # Get organization details if available
- if doc.custom_which_organization_do_you_want_to_be_part_of or doc.custom_which_organization_are_you_part_of:
- org = doc.custom_which_organization_do_you_want_to_be_part_of or doc.custom_which_organization_are_you_part_of
- org_details = frappe.db.get_value("Org Signature", org, ['logo', 'email', 'signature', 'name'], as_dict=True)
+ # Get organization details if available
+ if (
+ doc.custom_which_organization_do_you_want_to_be_part_of
+ or doc.custom_which_organization_are_you_part_of
+ ):
+ org = (
+ doc.custom_which_organization_do_you_want_to_be_part_of
+ or doc.custom_which_organization_are_you_part_of
+ )
+ org_details = frappe.db.get_value(
+ "Org Signature", org, ["logo", "email", "signature", "name"], as_dict=True
+ )
- # Adjusted HTML and CSS content
- html_content = f'''
+ # Adjusted HTML and CSS content
+ html_content = f"""
@@ -94,7 +103,7 @@ def create_image(ben_id):
Membership Card
-
+
@@ -107,7 +116,7 @@ def create_image(ben_id):
Blood Group: {doc.custom_blood_group}
Location: {doc.address_with_landmark}
-
+
Note: This membership card is issued with your knowledge and consent. If you do not agree, please email at {org_details['email']}
@@ -118,12 +127,12 @@ def create_image(ben_id):
- '''
+ """
- # Convert HTML to image with fixed size
- options = {
- 'width': 447,
- 'height': 273,
- }
+ # Convert HTML to image with fixed size
+ options = {
+ "width": 447,
+ "height": 273,
+ }
- return imgkit.from_string(html_content, 'output_image.png', options=options)
+ return imgkit.from_string(html_content, "output_image.png", options=options)
diff --git a/myojana/utils/misc.py b/myojana/utils/misc.py
index 5ff0c0a..67a3fcc 100644
--- a/myojana/utils/misc.py
+++ b/myojana/utils/misc.py
@@ -1,55 +1,57 @@
import frappe
+
class Misc:
- @staticmethod
- def rules_to_filters(rules, obj=False):
- filters = []
- if rules is not None and len(rules):
- groups = {}
- for rule in rules:
- if groups.get(rule.group) is None:
- groups[rule.group] = [
- [rule.rule_field, rule.operator, f"{rule.data}"]
- ]
- else:
- groups[rule.group].append([rule.rule_field, rule.operator, f"{rule.data}"])
- if obj:
- return groups
- for key in groups.keys():
- filters.append(groups[key])
- return filters
- @staticmethod
- def create_condition(rules=[], queries_groups=False):
- conditions = []
- if rules is not None and len(rules):
- groups = {}
- gIndex = 0
- for rule in rules:
- # if not rule.group:
- # gIndex += 1
- # groups[f"G{gIndex}"] = [f"{rule.rule_field} {rule.operator} '{rule.data}'"]
- if groups.get(rule.group) is None:
- groups[rule.group] = [f"{rule.rule_field} {rule.operator} '{rule.data}'"]
- else:
- groups[rule.group].append(f"{rule.rule_field} {rule.operator} '{rule.data}'")
- for key in groups.keys():
- conditions.append(f"({' AND '.join(groups[key])})")
- if queries_groups:
- return conditions
- return f"({' OR '.join(conditions)})" if len(conditions) else ""
- @staticmethod
- def scheme_rules_to_condition(scheme, queries_groups=False):
- """
- Converts scheme rules into SQL conditions.
+ @staticmethod
+ def rules_to_filters(rules, obj=False):
+ filters = []
+ if rules is not None and len(rules):
+ groups = {}
+ for rule in rules:
+ if groups.get(rule.group) is None:
+ groups[rule.group] = [[rule.rule_field, rule.operator, f"{rule.data}"]]
+ else:
+ groups[rule.group].append([rule.rule_field, rule.operator, f"{rule.data}"])
+ if obj:
+ return groups
+ for key in groups.keys():
+ filters.append(groups[key])
+ return filters
- Args:
- scheme (str): Name of the scheme.
- queries_groups (bool, optional): If True, returns conditions grouped by queries. Defaults to False.
+ @staticmethod
+ def create_condition(rules=None, queries_groups=False):
+ if rules is None:
+ rules = []
+ conditions = []
+ if rules is not None and len(rules):
+ groups = {}
+ for rule in rules:
+ # if not rule.group:
+ # gIndex += 1
+ # groups[f"G{gIndex}"] = [f"{rule.rule_field} {rule.operator} '{rule.data}'"]
+ if groups.get(rule.group) is None:
+ groups[rule.group] = [f"{rule.rule_field} {rule.operator} '{rule.data}'"]
+ else:
+ groups[rule.group].append(f"{rule.rule_field} {rule.operator} '{rule.data}'")
+ for key in groups.keys():
+ conditions.append(f"({' AND '.join(groups[key])})")
+ if queries_groups:
+ return conditions
+ return f"({' OR '.join(conditions)})" if len(conditions) else ""
- Returns:
- str or list: SQL conditions or grouped conditions based on the queries_groups flag.
- """
- sql = f"""
+ @staticmethod
+ def scheme_rules_to_condition(scheme, queries_groups=False):
+ """
+ Converts scheme rules into SQL conditions.
+
+ Args:
+ scheme (str): Name of the scheme.
+ queries_groups (bool, optional): If True, returns conditions grouped by queries. Defaults to False.
+
+ Returns:
+ str or list: SQL conditions or grouped conditions based on the queries_groups flag.
+ """
+ sql = """
select
_tsc.rule_field,
_tsc.operator,
@@ -62,5 +64,5 @@ def scheme_rules_to_condition(scheme, queries_groups=False):
where
_ts.name_of_the_scheme = %s
"""
- rules = frappe.db.sql(sql, (scheme), as_dict=True)
- return Misc.create_condition(rules, queries_groups)
+ rules = frappe.db.sql(sql, (scheme), as_dict=True)
+ return Misc.create_condition(rules, queries_groups)
diff --git a/myojana/utils/report_filter.py b/myojana/utils/report_filter.py
index e459e2d..7606ccb 100644
--- a/myojana/utils/report_filter.py
+++ b/myojana/utils/report_filter.py
@@ -1,54 +1,56 @@
import frappe
+
# from myojana.utils.filter import Filter
from myojana.utils.cache import Cache
+
class ReportFilter:
- def set_report_filters(filters=None, date_column='creation', str=False, table_name=None, role_per_filter=True):
- cond_str = Cache.get_user_permission(True,table_name)
- new_filters = {}
- str_list = []
- if table_name:
- date_column = f"{table_name}.{date_column}"
- if filters is None:
- return new_filters
- if filters.from_date and filters.to_date:
- if str:
- str_list.append(
- f"({date_column} between '{filters.from_date}' AND '{filters.to_date}')")
- else:
- new_filters[date_column] = ["between", [
- filters.from_date, filters.to_date]]
- elif filters.from_date:
- if str:
- str_list.append(f"({date_column} >= '{filters.from_date}')")
- else:
- new_filters[date_column] = [">=", filters.from_date]
- elif filters.to_date:
- if str:
- str_list.append(f"({date_column} <= '{filters.to_date}')")
- else:
- new_filters[date_column] = ["<=", filters.to_date]
+ def set_report_filters(
+ filters=None, date_column="creation", str=False, table_name=None, role_per_filter=True
+ ):
+ cond_str = Cache.get_user_permission(True, table_name)
+ new_filters = {}
+ str_list = []
+ if table_name:
+ date_column = f"{table_name}.{date_column}"
+ if filters is None:
+ return new_filters
+ if filters.from_date and filters.to_date:
+ if str:
+ str_list.append(f"({date_column} between '{filters.from_date}' AND '{filters.to_date}')")
+ else:
+ new_filters[date_column] = ["between", [filters.from_date, filters.to_date]]
+ elif filters.from_date:
+ if str:
+ str_list.append(f"({date_column} >= '{filters.from_date}')")
+ else:
+ new_filters[date_column] = [">=", filters.from_date]
+ elif filters.to_date:
+ if str:
+ str_list.append(f"({date_column} <= '{filters.to_date}')")
+ else:
+ new_filters[date_column] = ["<=", filters.to_date]
- for filter_key in filters:
- if filter_key not in ['from_date', 'to_date']:
- if str:
- if table_name:
- str_list.append(f"({table_name}.{filter_key}='{filters[filter_key]}')")
- else:
- str_list.append(f"({filter_key}='{filters[filter_key]}')")
- else:
- new_filters[filter_key] = filters[filter_key]
+ for filter_key in filters:
+ if filter_key not in ["from_date", "to_date"]:
+ if str:
+ if table_name:
+ str_list.append(f"({table_name}.{filter_key}='{filters[filter_key]}')")
+ else:
+ str_list.append(f"({filter_key}='{filters[filter_key]}')")
+ else:
+ new_filters[filter_key] = filters[filter_key]
- if role_per_filter and ("Administrator" not in frappe.get_roles(frappe.session.user)):
- per_obj = Cache.get_user_permission(False)
- # # query_filter = Filter.set_query_filters(True)
- # csc_key = f"{table_name}.{query_filter[0]}" if table_name else f"{query_filter[0]}"
- if str and len(cond_str) > 0:
- str_list.append(cond_str)
- else:
- ""
- # new_filters[csc_key] = f"'{query_filter[1]}'"
- if str:
- return ' AND '.join(str_list)
- else:
- return new_filters
+ if role_per_filter and ("Administrator" not in frappe.get_roles(frappe.session.user)):
+ Cache.get_user_permission(False)
+ # # query_filter = Filter.set_query_filters(True)
+ # csc_key = f"{table_name}.{query_filter[0]}" if table_name else f"{query_filter[0]}"
+ if str and len(cond_str) > 0:
+ str_list.append(cond_str)
+ else:
+ ""
+ # new_filters[csc_key] = f"'{query_filter[1]}'"
+ if str:
+ return " AND ".join(str_list)
+ else:
+ return new_filters