From 05885ca1849c6f8916c3b1b4074bbcb5a1a953b3 Mon Sep 17 00:00:00 2001 From: creamdory Date: Tue, 5 Sep 2017 17:02:14 +0800 Subject: [PATCH 01/72] Sorting in Production Order BOM Items --- erpnext/manufacturing/doctype/bom/bom.py | 10 ++++++---- .../doctype/production_order/production_order.py | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py index bf5fef536b..e86f1bb1e6 100644 --- a/erpnext/manufacturing/doctype/bom/bom.py +++ b/erpnext/manufacturing/doctype/bom/bom.py @@ -512,6 +512,7 @@ def get_bom_items_as_dict(bom, company, qty=1, fetch_exploded=1, fetch_scrap_ite # Did not use qty_consumed_per_unit in the query, as it leads to rounding loss query = """select + (Select idx from `tabBOM Item` where item_code = bom_item.item_code and parent = %(parent)s ) as idx, bom_item.item_code, item.item_name, sum(bom_item.stock_qty/ifnull(bom.quantity, 1)) * %(qty)s as qty, @@ -531,20 +532,21 @@ def get_bom_items_as_dict(bom, company, qty=1, fetch_exploded=1, fetch_scrap_ite and item.name = bom_item.item_code and is_stock_item = 1 {where_conditions} - group by item_code, stock_uom""" + group by item_code, stock_uom + order by idx""" if fetch_exploded: query = query.format(table="BOM Explosion Item", where_conditions="""and item.is_sub_contracted_item = 0""", select_columns = ", bom_item.source_warehouse") - items = frappe.db.sql(query, { "qty": qty, "bom": bom }, as_dict=True) + items = frappe.db.sql(query, { "parent": bom, "qty": qty, "bom": bom }, as_dict=True) elif fetch_scrap_items: query = query.format(table="BOM Scrap Item", where_conditions="", select_columns="") - items = frappe.db.sql(query, { "qty": qty, "bom": bom }, as_dict=True) + items = frappe.db.sql(query, { "parent": bom, "qty": qty, "bom": bom }, as_dict=True) else: query = query.format(table="BOM Item", where_conditions="", select_columns = ", bom_item.source_warehouse") - items = frappe.db.sql(query, { "qty": qty, "bom": bom }, as_dict=True) + items = frappe.db.sql(query, { "parent": bom, "qty": qty, "bom": bom }, as_dict=True) for item in items: if item_dict.has_key(item.item_code): diff --git a/erpnext/manufacturing/doctype/production_order/production_order.py b/erpnext/manufacturing/doctype/production_order/production_order.py index 5fedc72889..2c246f92c2 100644 --- a/erpnext/manufacturing/doctype/production_order/production_order.py +++ b/erpnext/manufacturing/doctype/production_order/production_order.py @@ -437,7 +437,7 @@ class ProductionOrder(Document): item_dict = get_bom_items_as_dict(self.bom_no, self.company, qty=self.qty, fetch_exploded = self.use_multi_level_bom) - for item in item_dict.values(): + for item in sorted(item_dict.values(), key=lambda d: d['idx']): self.append('required_items', { 'item_code': item.item_code, 'required_qty': item.qty, From f849915c13c6e8b3627595fcd1048d93fc12f05e Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 11 Sep 2017 11:04:38 +0530 Subject: [PATCH 02/72] [fix] label --- erpnext/projects/doctype/timesheet/timesheet.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/projects/doctype/timesheet/timesheet.js b/erpnext/projects/doctype/timesheet/timesheet.js index 62ae1ed62b..ba1414cf2a 100644 --- a/erpnext/projects/doctype/timesheet/timesheet.js +++ b/erpnext/projects/doctype/timesheet/timesheet.js @@ -58,7 +58,7 @@ frappe.ui.form.on("Timesheet", { make_invoice: function(frm) { let dialog = new frappe.ui.Dialog({ - title: __("For Item"), + title: __("Select Item (optional)"), fields: [ {"fieldtype": "Link", "label": __("Item Code"), "fieldname": "item_code", "options":"Item"}, {"fieldtype": "Link", "label": __("Customer"), "fieldname": "customer", "options":"Customer"} From ff667695adbf12ba751efdc277c1a0164ed0d183 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 13 Sep 2017 11:26:49 +0530 Subject: [PATCH 03/72] timeout in setup wizard test --- erpnext/setup/setup_wizard/test_setup_wizard.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/erpnext/setup/setup_wizard/test_setup_wizard.py b/erpnext/setup/setup_wizard/test_setup_wizard.py index 67b6f43d31..740d45a82e 100644 --- a/erpnext/setup/setup_wizard/test_setup_wizard.py +++ b/erpnext/setup/setup_wizard/test_setup_wizard.py @@ -15,16 +15,15 @@ def run_setup_wizard_test(): print('Running Setup Wizard Test...') # Language slide + driver.wait_for_ajax(True) driver.set_select("language", "English (United States)") driver.wait_for_ajax(True) - driver.wait_for('.next-btn', timeout=100) driver.wait_till_clickable(".next-btn").click() # Region slide driver.wait_for_ajax(True) driver.set_select("country", "India") driver.wait_for_ajax(True) - driver.wait_for('.next-btn', timeout=100) driver.wait_till_clickable(".next-btn").click() # Profile slide From f056974bc588dea4c1dc4f0f885fa77e44f4d7b2 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Wed, 13 Sep 2017 12:52:30 +0530 Subject: [PATCH 04/72] [domain] Healthcare (#10664) * Medical module for erpnext * Changes in core for Medical module * patient registration updated * fix - appointment invioce - fields missing * pages- indicator instead of bg-color * Lab Test field renamed service type * Department added Lab Test * procedure name in prescription * fixes sample collection * filter disabled patient * fix patient admission * updated patient age * availability check msg updated * fixes, removed procedure from invoice * sample print renamed * fixes, validation * service desk physician in filter * refactor scheduler * Appointment -field property - set only once = 1 * Appointment - Mark closed and pending buttons removed * Appointment - readonly = 1 if value set * Appointment - availabilty * Appointment - Cancel - info - cancel invoice * Appointment - set pending appointments * Dosage form - new DT * Drug Prescription - Dosage form added * Facility - Floor - removed from Fecility * Floor - removed * Lab Test Template - item creation validation * Procedure - Create Procedure * Procedure Appointment - new DT * Service Unit - Floor reference removed * Zone Fcilities - Unused DT removed * Appointment Desk - fixed * Service Desk - method pointing from procedure changed to procedure_appointment * Consultation print - got featured * Consultation - removed patient refernce to procedure prescription * Procedure Prescription - removed patient refernce * Lab Test - Changed field properties and value * Lab Test - field property changed * Lab Test - methods rewrite - lab test doc creation * Lab Test - create lab test from invoice and consultaion - got changed * Button History changed to Medical Record * Service Desk - Updated * Notification - Procedure Appointment * fix-get procedure prescription * fix field added to test prescription * msgprint on invoice creation * fix data on install * Merge branch erpnext/develop * fixes- minor * Setup wizard - Create Sensitivity * Appointment - Validate and Save if there is no schedule for Physician * Consultation - Button create vital signs and medical record * Review Type - New DocType * Review Detail and Treatment Plan - Childs - Consultation * Patient Medical Record - field Attach doc * Consultation - New Fields * Consultation - Manage new Fields - Medical record add action * Patient Relation - Child DocType - Patient * Patient - Patient Relation added * Patient - collapsible = 1 * Laboratory Settings - fields - message for lab test * Laboratory Settings - get message for lab test * SMS text for lab test and invoice test report * Procedure Stock Detail - Stock detail for Procedure and Template * Template Stage Detail - Stage detail for Procedure Template * Procedure Stage Detail - Stage detail for Procedure * Service Unit - field - warehouse * Scheduler - msg - content changed * Laboratory Settings - defualt - msg content * Invoice Test Report - msg print * Print Format-Changed-Consultation-Invoice Test Report-Lab Test * OP Settings - Expnse Account for Stock Entry in Procedure * Procedure and Procedure Template - Manage Stock Stage and Sample Collection * Procedure Appointment - Manage Stock and Stage * Lab Test - fixed - resource not find * Invoice Test Report - fixed - resource not find * Procedure - doc reload after insert * Patient Medical Record - fixed - refernce missed * Create Vital Signs -on client side * Rename module Medical to Healthcare * Remove In Patient (IP) Feature. * Rename - Procedure to Clinical Procedure * Remove spaces in Naming Series * Rename Duration to Drug Prescription Duration * Duration to Drug Prescription Duration * Merge All Settings to Healthcare Settings * Healthcare settings - import fixed * Procedure related documents are removed * Appointment Desk and Sevrvice Desk are removed * Consultation - minimal * Consultation - minimal * Consultation - minimal - patient detials in collapsible section * Message Print to Alerts * Patient - some fields removed * Patient - create consultation - message print to alerts * Consultation - show patient details updated * Setup wizard - Duration to Drug Prescritpion Duration * Healthcare Settings - patient registration - fee collection * Lab Test - Create Sales Invoice bug fixed * Healthcare menu rearranged * Healthcare Settings - Optimised and Rearragnged * Healthcare Settings - Expense account removed * Receivable account removed from patient * Patient - Optimised and Rearragnged * Removed Referring Physician * Healthcare Settings - bold headings removed * Physician - Patient - Fields are Segregated * Remove Service Unit * Remove - Service Type * Consultation invoice * Lab Test - invoice * Patient - Invoice * Rename Appointment to Patient Appointment * wip * Patient Dashboard, Physician Form cleanup * Dosage renamed to Prescription Dosage * Renamed Drug Prescription Duration to Prescription Duration * Patient Appointment booking modal * Patient Age - calculate by dob * Remove - scheduler * Consultation - Appointment to Patient Appointment * Patient Dashboard - rearranged * Patient Appointment * Removed rer_physician from lab test and consultation * Patient Appontment Changes * Appointment and Consultation - optimized * Patient Appointment - fee validity code optimized * Consultation and Patient Appointment - Invoice validate two side * fix: #13 remove relation to admission * Healthcare - Patient Portal * fix import error * domain Healthcare added on install * Removed - Invoice Test Report * Physician Schedule - menu * Consultation - patient details - re write * New Doctype-Medical Code * Consultation - Daignosis codification * Medical Code - Codification - Settings * Medical Code Standard - Medical Code - Codification - Settings * fix appointment calendar * fix appointment analytics * Menu Medical Code Standard * New Doctype - Medical Code Standard * Set Physician Role insted of IP Physician and OP Physician Role * fixed some json files * Medical code - permission to physician * Unused Childs - Work Schedule and User List - Removed * Label Procedure to Lab Test * Lab Test and Patient - code optimised * Add Item Groups - setup wizard * Healthcare Settings - add Role - Medical Administrator * Healthcare - Demo setup - Make Demo * Fee Validity - Logic Test * Test Fee Validity - Optimised * Healthcare Doctypes - Restricted to Domain Healthcare * Domainify - remove Healthcare Roles - Other Domains * Healthcare doctypes - beta checked * Codacy fixes * Codacy - fixes * Codacy - fixes * Codacy - fixes * Codacy - fixes * Codacy - fixes * Lab Test - print hide =1 for some fields * Consultation - Codification field label to Medical Coding * Codacy fixes - import frappe and etc. * Codacy fixes - import frappe in test_vital_signs * Codacy fixes * Codacy fixes * Codacy fixes and remove delete perm for patient * send_sms - import form frappe * Healthcare Settings * Lab Prescription - Consultation - Test Code - read_only = 0 * Portal fixes * Patient Appointment - filter physician - if has schedule * Physician - IP Charge - Removed * test - files * Web Form - Patient Profile - removed * Role Medical Administrator to Healthcare Administrator * WIP healthcare documentation * Coday - fixes * Travis - fixes * Lab Test Report - menu * Reorder Healthcare settings - group lab config to bottom * Sample Collection - New - allow Sample and patient Selection * Rate - similar behaviour and Label as in Item Standard Selling Rate * Healthcare documentation * Lab Test Samples to Lab Test sample * Commplaints to Complaint * Commplaints to Complaint * Antibiotics to Antibiotic * Appointment Token Number - remove * View - Medical record * Codacy fixes * update healthcare docs * Cleanup Docs - Search, quick entry, trsck change, etc. * [minor] ux changes --- erpnext/buying/doctype/supplier/supplier.py | 2 +- erpnext/config/desktop.py | 7 + erpnext/config/healthcare.py | 157 + erpnext/crm/doctype/lead/lead.py | 2 +- erpnext/demo/data/drug_list.json | 5420 +++++++++++++++++ erpnext/demo/data/patient.json | 27 + erpnext/demo/data/physician.json | 17 + erpnext/demo/demo.py | 4 +- erpnext/demo/domains.py | 3 + erpnext/demo/setup/healthcare.py | 166 + erpnext/demo/setup/setup_data.py | 5 +- .../docs/assets/img/healthcare/._.DS_Store | Bin 0 -> 4096 bytes .../assets/img/healthcare/._appointment_1.png | Bin 0 -> 4096 bytes .../assets/img/healthcare/._appointment_2.png | Bin 0 -> 4096 bytes .../assets/img/healthcare/._appointment_3.png | Bin 0 -> 4096 bytes .../img/healthcare/._consultation_1.png | Bin 0 -> 4096 bytes .../img/healthcare/._consultation_2.png | Bin 0 -> 4096 bytes .../img/healthcare/._consultation_3.png | Bin 0 -> 4096 bytes .../img/healthcare/._consultation_4.png | Bin 0 -> 4096 bytes erpnext/docs/assets/img/healthcare/._home.png | Bin 0 -> 4096 bytes .../assets/img/healthcare/._lab_test_1.png | Bin 0 -> 4096 bytes .../assets/img/healthcare/._lab_test_2.png | Bin 0 -> 4096 bytes .../img/healthcare/._medical_code_1.png | Bin 0 -> 4096 bytes .../img/healthcare/._medical_record_1.png | Bin 0 -> 4096 bytes .../img/healthcare/._medical_record_2.png | Bin 0 -> 4096 bytes .../docs/assets/img/healthcare/._module.png | Bin 0 -> 4096 bytes .../assets/img/healthcare/._patient_1.png | Bin 0 -> 4096 bytes .../assets/img/healthcare/._patient_2.png | Bin 0 -> 4096 bytes .../assets/img/healthcare/._patient_3.png | Bin 0 -> 4096 bytes .../assets/img/healthcare/._physician_1.png | Bin 0 -> 4096 bytes .../assets/img/healthcare/._physician_2.png | Bin 0 -> 4096 bytes .../img/healthcare/._physician_schedule_1.png | Bin 0 -> 4096 bytes .../img/healthcare/._physician_schedule_2.png | Bin 0 -> 4096 bytes .../img/healthcare/._sample_collection_1.png | Bin 0 -> 4096 bytes .../docs/assets/img/healthcare/._vitals_1.png | Bin 0 -> 4096 bytes .../docs/assets/img/healthcare/._vitals_2.png | Bin 0 -> 4096 bytes .../docs/assets/img/healthcare/__init__.py | 0 .../assets/img/healthcare/appointment_1.png | Bin 0 -> 28933 bytes .../assets/img/healthcare/appointment_2.png | Bin 0 -> 65215 bytes .../assets/img/healthcare/appointment_3.png | Bin 0 -> 26449 bytes .../assets/img/healthcare/consultation_1.png | Bin 0 -> 99844 bytes .../assets/img/healthcare/consultation_2.png | Bin 0 -> 24999 bytes .../assets/img/healthcare/consultation_3.png | Bin 0 -> 41110 bytes .../assets/img/healthcare/consultation_4.png | Bin 0 -> 22284 bytes erpnext/docs/assets/img/healthcare/home.png | Bin 0 -> 74576 bytes .../docs/assets/img/healthcare/lab_test_1.png | Bin 0 -> 99741 bytes .../docs/assets/img/healthcare/lab_test_2.png | Bin 0 -> 57253 bytes .../assets/img/healthcare/medical_code_1.png | Bin 0 -> 129815 bytes .../img/healthcare/medical_record_1.png | Bin 0 -> 116501 bytes .../img/healthcare/medical_record_2.png | Bin 0 -> 59399 bytes erpnext/docs/assets/img/healthcare/module.png | Bin 0 -> 112486 bytes .../docs/assets/img/healthcare/patient_1.png | Bin 0 -> 106000 bytes .../docs/assets/img/healthcare/patient_2.png | Bin 0 -> 74471 bytes .../docs/assets/img/healthcare/patient_3.png | Bin 0 -> 60435 bytes .../assets/img/healthcare/physician_1.png | Bin 0 -> 98149 bytes .../assets/img/healthcare/physician_2.png | Bin 0 -> 89931 bytes .../img/healthcare/physician_schedule_1.png | Bin 0 -> 56636 bytes .../img/healthcare/physician_schedule_2.png | Bin 0 -> 72554 bytes .../img/healthcare/sample_collection_1.png | Bin 0 -> 99584 bytes .../docs/assets/img/healthcare/vitals_1.png | Bin 0 -> 87976 bytes .../docs/assets/img/healthcare/vitals_2.png | Bin 0 -> 27743 bytes .../user/manual/en/healthcare/._.DS_Store | Bin 0 -> 4096 bytes .../user/manual/en/healthcare/__init__.py | 0 .../user/manual/en/healthcare/appointment.md | 38 + .../user/manual/en/healthcare/consultation.md | 28 + .../docs/user/manual/en/healthcare/index.md | 13 + .../docs/user/manual/en/healthcare/index.txt | 12 + .../user/manual/en/healthcare/invoicing.md | 8 + .../user/manual/en/healthcare/lab_test.md | 22 + .../manual/en/healthcare/medical_codes.md | 9 + .../manual/en/healthcare/medical_record.md | 13 + .../docs/user/manual/en/healthcare/patient.md | 43 + .../user/manual/en/healthcare/physician.md | 18 + .../en/healthcare/physician_schedule.md | 13 + .../manual/en/healthcare/sample_collection.md | 13 + .../manual/en/healthcare/setup/__init__.py | 0 .../user/manual/en/healthcare/setup/index.md | 7 + .../user/manual/en/healthcare/setup/index.txt | 3 + .../en/healthcare/setup/setup_laboratory.md | 67 + .../en/healthcare/setup/setup_pharmacy.md | 4 + .../en/healthcare/setup/setup_practice.md | 38 + .../user/manual/en/healthcare/vital_signs.md | 13 + erpnext/healthcare/__init__.py | 0 erpnext/healthcare/doctype/__init__.py | 0 .../healthcare/doctype/antibiotic/__init__.py | 0 .../doctype/antibiotic/antibiotic.js | 5 + .../doctype/antibiotic/antibiotic.json | 115 + .../doctype/antibiotic/antibiotic.py | 9 + .../doctype/antibiotic/test_antibiotic.js | 23 + .../doctype/antibiotic/test_antibiotic.py | 8 + .../doctype/appointment_type/__init__.py | 0 .../appointment_type/appointment_type.js | 5 + .../appointment_type/appointment_type.json | 145 + .../appointment_type/appointment_type.py | 9 + .../appointment_type/test_appointment_type.js | 23 + .../appointment_type/test_appointment_type.py | 11 + .../doctype/codification_table/__init__.py | 0 .../codification_table.json | 135 + .../codification_table/codification_table.py | 9 + .../healthcare/doctype/complaint/__init__.py | 0 .../healthcare/doctype/complaint/complaint.js | 5 + .../doctype/complaint/complaint.json | 116 + .../healthcare/doctype/complaint/complaint.py | 9 + .../doctype/complaint/test_complaint.js | 23 + .../doctype/complaint/test_complaint.py | 8 + .../doctype/consultation/__init__.py | 0 .../doctype/consultation/consultation.js | 317 + .../doctype/consultation/consultation.json | 1046 ++++ .../doctype/consultation/consultation.py | 128 + .../consultation/consultation_dashboard.py | 15 + .../doctype/consultation/consultation_list.js | 7 + .../doctype/consultation/test_consultation.js | 23 + .../doctype/consultation/test_consultation.py | 10 + .../healthcare/doctype/diagnosis/__init__.py | 0 .../healthcare/doctype/diagnosis/diagnosis.js | 5 + .../doctype/diagnosis/diagnosis.json | 116 + .../healthcare/doctype/diagnosis/diagnosis.py | 9 + .../doctype/diagnosis/test_diagnosis.js | 23 + .../doctype/diagnosis/test_diagnosis.py | 11 + .../doctype/dosage_form/__init__.py | 0 .../doctype/dosage_form/dosage_form.js | 5 + .../doctype/dosage_form/dosage_form.json | 114 + .../doctype/dosage_form/dosage_form.py | 9 + .../doctype/dosage_form/test_dosage_form.js | 23 + .../doctype/dosage_form/test_dosage_form.py | 9 + .../doctype/dosage_strength/__init__.py | 0 .../dosage_strength/dosage_strength.json | 102 + .../dosage_strength/dosage_strength.py | 9 + .../doctype/drug_prescription/__init__.py | 0 .../drug_prescription/drug_prescription.json | 381 ++ .../drug_prescription/drug_prescription.py | 34 + .../doctype/fee_validity/__init__.py | 0 .../doctype/fee_validity/fee_validity.js | 5 + .../doctype/fee_validity/fee_validity.json | 248 + .../doctype/fee_validity/fee_validity.py | 9 + .../doctype/fee_validity/test_fee_validity.js | 23 + .../doctype/fee_validity/test_fee_validity.py | 54 + erpnext/healthcare/doctype/healthcare.py | 5 + .../doctype/healthcare_settings/__init__.py | 0 .../healthcare_settings.js | 25 + .../healthcare_settings.json | 1073 ++++ .../healthcare_settings.py | 68 + .../test_healthcare_settings.js | 23 + .../doctype/lab_prescription/__init__.py | 0 .../lab_prescription/lab_prescription.json | 223 + .../lab_prescription/lab_prescription.py | 9 + .../healthcare/doctype/lab_test/__init__.py | 0 .../healthcare/doctype/lab_test/lab_test.js | 323 + .../healthcare/doctype/lab_test/lab_test.json | 1470 +++++ .../healthcare/doctype/lab_test/lab_test.py | 295 + .../doctype/lab_test/lab_test_list.js | 15 + .../doctype/lab_test/test_lab_test.js | 23 + .../doctype/lab_test/test_lab_test.py | 10 + .../doctype/lab_test_groups/__init__.py | 0 .../lab_test_groups/lab_test_groups.json | 291 + .../lab_test_groups/lab_test_groups.py | 9 + .../doctype/lab_test_sample/__init__.py | 0 .../lab_test_sample/lab_test_sample.js | 5 + .../lab_test_sample/lab_test_sample.json | 145 + .../lab_test_sample/lab_test_sample.py | 9 + .../lab_test_sample/test_lab_test_sample.js | 23 + .../lab_test_sample/test_lab_test_sample.py | 8 + .../doctype/lab_test_template/__init__.py | 0 .../lab_test_template/lab_test_template.js | 132 + .../lab_test_template/lab_test_template.json | 978 +++ .../lab_test_template/lab_test_template.py | 121 + .../lab_test_template_list.js | 15 + .../test_lab_test_template.js | 23 + .../test_lab_test_template.py | 10 + .../doctype/lab_test_uom/__init__.py | 0 .../doctype/lab_test_uom/lab_test_uom.js | 5 + .../doctype/lab_test_uom/lab_test_uom.json | 145 + .../doctype/lab_test_uom/lab_test_uom.py | 9 + .../doctype/lab_test_uom/test_lab_test_uom.js | 23 + .../doctype/lab_test_uom/test_lab_test_uom.py | 10 + .../doctype/medical_code/__init__.py | 0 .../doctype/medical_code/medical_code.js | 5 + .../doctype/medical_code/medical_code.json | 156 + .../doctype/medical_code/medical_code.py | 10 + .../doctype/medical_code/test_medical_code.js | 23 + .../doctype/medical_code/test_medical_code.py | 8 + .../doctype/medical_code_standard/__init__.py | 0 .../medical_code_standard.js | 5 + .../medical_code_standard.json | 94 + .../medical_code_standard.py | 9 + .../test_medical_code_standard.js | 23 + .../test_medical_code_standard.py | 8 + .../doctype/medical_department/__init__.py | 0 .../medical_department/medical_department.js | 5 + .../medical_department.json | 156 + .../medical_department/medical_department.py | 9 + .../test_medical_department.js | 23 + .../test_medical_department.py | 10 + .../doctype/normal_test_items/__init__.py | 0 .../normal_test_items/normal_test_items.js | 4 + .../normal_test_items/normal_test_items.json | 284 + .../normal_test_items/normal_test_items.py | 9 + .../doctype/normal_test_template/__init__.py | 0 .../normal_test_template.json | 191 + .../normal_test_template.py | 9 + .../healthcare/doctype/patient/__init__.py | 0 erpnext/healthcare/doctype/patient/patient.js | 119 + .../healthcare/doctype/patient/patient.json | 1356 +++++ erpnext/healthcare/doctype/patient/patient.py | 122 + .../doctype/patient/patient_dashboard.py | 18 + .../doctype/patient/test_patient.js | 23 + .../doctype/patient/test_patient.py | 11 + .../doctype/patient_appointment/__init__.py | 0 .../patient_appointment.js | 256 + .../patient_appointment.json | 817 +++ .../patient_appointment.py | 244 + .../patient_appointment_calendar.js | 44 + .../patient_appointment_dashboard.py | 19 + .../patient_appointment_list.js | 6 + .../test_patient_appointment.js | 23 + .../test_patient_appointment.py | 10 + .../patient_medical_record/__init__.py | 0 .../patient_medical_record.js | 5 + .../patient_medical_record.json | 430 ++ .../patient_medical_record.py | 12 + .../test_patient_medical_record.js | 23 + .../test_patient_medical_record.py | 10 + .../doctype/patient_relation/__init__.py | 0 .../patient_relation/patient_relation.json | 134 + .../patient_relation/patient_relation.py | 9 + .../healthcare/doctype/physician/__init__.py | 0 .../healthcare/doctype/physician/physician.js | 73 + .../doctype/physician/physician.json | 891 +++ .../healthcare/doctype/physician/physician.py | 59 + .../doctype/physician/test_physician.js | 23 + .../doctype/physician/test_physician.py | 10 + .../doctype/physician_schedule/__init__.py | 0 .../physician_schedule/physician_schedule.js | 59 + .../physician_schedule.json | 155 + .../physician_schedule/physician_schedule.py | 9 + .../test_physician_schedule.js | 23 + .../test_physician_schedule.py | 8 + .../physician_schedule_time_slot/__init__.py | 0 .../physician_schedule_time_slot.json | 133 + .../physician_schedule_time_slot.py | 9 + .../doctype/prescription_dosage/__init__.py | 0 .../prescription_dosage.js | 5 + .../prescription_dosage.json | 145 + .../prescription_dosage.py | 9 + .../test_prescription_dosage.js | 23 + .../test_prescription_dosage.py | 8 + .../doctype/prescription_duration/__init__.py | 0 .../prescription_duration.js | 5 + .../prescription_duration.json | 145 + .../prescription_duration.py | 72 + .../test_prescription_duration.js | 23 + .../test_prescription_duration.py | 8 + .../doctype/sample_collection/__init__.py | 0 .../sample_collection/sample_collection.js | 40 + .../sample_collection/sample_collection.json | 614 ++ .../sample_collection/sample_collection.py | 9 + .../test_sample_collection.js | 23 + .../test_sample_collection.py | 11 + .../doctype/sensitivity/__init__.py | 0 .../doctype/sensitivity/sensitivity.js | 5 + .../doctype/sensitivity/sensitivity.json | 115 + .../doctype/sensitivity/sensitivity.py | 9 + .../doctype/sensitivity/test_sensitivity.js | 23 + .../doctype/sensitivity/test_sensitivity.py | 10 + .../sensitivity_test_items/__init__.py | 0 .../sensitivity_test_items.json | 103 + .../sensitivity_test_items.py | 9 + .../doctype/special_test_items/__init__.py | 0 .../special_test_items.json | 166 + .../special_test_items/special_test_items.py | 9 + .../doctype/special_test_template/__init__.py | 0 .../special_test_template.json | 72 + .../special_test_template.py | 9 + .../doctype/vital_signs/__init__.py | 0 .../doctype/vital_signs/test_vital_signs.js | 23 + .../doctype/vital_signs/test_vital_signs.py | 10 + .../doctype/vital_signs/vital_signs.js | 49 + .../doctype/vital_signs/vital_signs.json | 813 +++ .../doctype/vital_signs/vital_signs.py | 48 + erpnext/healthcare/page/__init__.py | 1 + .../page/appointment_analytic/__init__.py | 0 .../appointment_analytic.js | 209 + .../appointment_analytic.json | 22 + .../page/medical_record/__init__.py | 1 + .../page/medical_record/medical_record.css | 73 + .../page/medical_record/medical_record.js | 182 + .../page/medical_record/medical_record.json | 23 + .../page/medical_record/medical_record.py | 24 + .../medical_record/medical_record_row.html | 21 + .../page/medical_record/patient_select.html | 5 + erpnext/healthcare/print_format/__init__.py | 0 .../consultation_print/__init__.py | 0 .../consultation_print.json | 22 + .../print_format/lab_test_print/__init__.py | 0 .../lab_test_print/lab_test_print.json | 22 + .../print_format/sample_id_print/__init__.py | 0 .../sample_id_print/sample_id_print.json | 22 + erpnext/healthcare/report/__init__.py | 0 .../report/lab_test_report/__init__.py | 0 .../report/lab_test_report/lab_test_report.js | 32 + .../lab_test_report/lab_test_report.json | 26 + .../report/lab_test_report/lab_test_report.py | 58 + erpnext/healthcare/web_form/__init__.py | 0 .../healthcare/web_form/lab_test/__init__.py | 0 .../healthcare/web_form/lab_test/lab_test.js | 34 + .../web_form/lab_test/lab_test.json | 235 + .../healthcare/web_form/lab_test/lab_test.py | 25 + .../web_form/patient_appointments/__init__.py | 0 .../patient_appointments.js | 3 + .../patient_appointments.json | 111 + .../patient_appointments.py | 25 + .../web_form/prescription/__init__.py | 0 .../web_form/prescription/prescription.js | 3 + .../web_form/prescription/prescription.json | 112 + .../web_form/prescription/prescription.py | 25 + erpnext/hooks.py | 10 +- erpnext/modules.txt | 1 + erpnext/public/js/setup_wizard.js | 6 +- erpnext/regional/india/setup.py | 12 +- erpnext/selling/doctype/customer/customer.py | 2 +- erpnext/setup/doctype/company/company.json | 3112 +++++----- .../doctype/sales_partner/sales_partner.py | 2 +- erpnext/setup/setup_wizard/domainify.py | 22 +- erpnext/setup/setup_wizard/healthcare.py | 281 + .../setup/setup_wizard/install_fixtures.py | 1 + erpnext/setup/setup_wizard/setup_wizard.py | 5 + erpnext/startup/notifications.py | 8 +- erpnext/startup/report_data_map.py | 38 +- .../healthcare/appointment_row_template.html | 23 + .../healthcare/lab_test_row_template.html | 20 + .../healthcare/prescription_row_template.html | 15 + 331 files changed, 27172 insertions(+), 1587 deletions(-) create mode 100644 erpnext/config/healthcare.py create mode 100644 erpnext/demo/data/drug_list.json create mode 100644 erpnext/demo/data/patient.json create mode 100644 erpnext/demo/data/physician.json create mode 100644 erpnext/demo/setup/healthcare.py create mode 100755 erpnext/docs/assets/img/healthcare/._.DS_Store create mode 100755 erpnext/docs/assets/img/healthcare/._appointment_1.png create mode 100755 erpnext/docs/assets/img/healthcare/._appointment_2.png create mode 100755 erpnext/docs/assets/img/healthcare/._appointment_3.png create mode 100755 erpnext/docs/assets/img/healthcare/._consultation_1.png create mode 100755 erpnext/docs/assets/img/healthcare/._consultation_2.png create mode 100755 erpnext/docs/assets/img/healthcare/._consultation_3.png create mode 100755 erpnext/docs/assets/img/healthcare/._consultation_4.png create mode 100755 erpnext/docs/assets/img/healthcare/._home.png create mode 100755 erpnext/docs/assets/img/healthcare/._lab_test_1.png create mode 100755 erpnext/docs/assets/img/healthcare/._lab_test_2.png create mode 100755 erpnext/docs/assets/img/healthcare/._medical_code_1.png create mode 100755 erpnext/docs/assets/img/healthcare/._medical_record_1.png create mode 100755 erpnext/docs/assets/img/healthcare/._medical_record_2.png create mode 100755 erpnext/docs/assets/img/healthcare/._module.png create mode 100755 erpnext/docs/assets/img/healthcare/._patient_1.png create mode 100755 erpnext/docs/assets/img/healthcare/._patient_2.png create mode 100755 erpnext/docs/assets/img/healthcare/._patient_3.png create mode 100755 erpnext/docs/assets/img/healthcare/._physician_1.png create mode 100755 erpnext/docs/assets/img/healthcare/._physician_2.png create mode 100755 erpnext/docs/assets/img/healthcare/._physician_schedule_1.png create mode 100755 erpnext/docs/assets/img/healthcare/._physician_schedule_2.png create mode 100755 erpnext/docs/assets/img/healthcare/._sample_collection_1.png create mode 100755 erpnext/docs/assets/img/healthcare/._vitals_1.png create mode 100755 erpnext/docs/assets/img/healthcare/._vitals_2.png create mode 100755 erpnext/docs/assets/img/healthcare/__init__.py create mode 100755 erpnext/docs/assets/img/healthcare/appointment_1.png create mode 100755 erpnext/docs/assets/img/healthcare/appointment_2.png create mode 100755 erpnext/docs/assets/img/healthcare/appointment_3.png create mode 100755 erpnext/docs/assets/img/healthcare/consultation_1.png create mode 100755 erpnext/docs/assets/img/healthcare/consultation_2.png create mode 100755 erpnext/docs/assets/img/healthcare/consultation_3.png create mode 100755 erpnext/docs/assets/img/healthcare/consultation_4.png create mode 100755 erpnext/docs/assets/img/healthcare/home.png create mode 100755 erpnext/docs/assets/img/healthcare/lab_test_1.png create mode 100755 erpnext/docs/assets/img/healthcare/lab_test_2.png create mode 100755 erpnext/docs/assets/img/healthcare/medical_code_1.png create mode 100755 erpnext/docs/assets/img/healthcare/medical_record_1.png create mode 100755 erpnext/docs/assets/img/healthcare/medical_record_2.png create mode 100755 erpnext/docs/assets/img/healthcare/module.png create mode 100755 erpnext/docs/assets/img/healthcare/patient_1.png create mode 100755 erpnext/docs/assets/img/healthcare/patient_2.png create mode 100755 erpnext/docs/assets/img/healthcare/patient_3.png create mode 100755 erpnext/docs/assets/img/healthcare/physician_1.png create mode 100755 erpnext/docs/assets/img/healthcare/physician_2.png create mode 100755 erpnext/docs/assets/img/healthcare/physician_schedule_1.png create mode 100755 erpnext/docs/assets/img/healthcare/physician_schedule_2.png create mode 100755 erpnext/docs/assets/img/healthcare/sample_collection_1.png create mode 100755 erpnext/docs/assets/img/healthcare/vitals_1.png create mode 100755 erpnext/docs/assets/img/healthcare/vitals_2.png create mode 100755 erpnext/docs/user/manual/en/healthcare/._.DS_Store create mode 100755 erpnext/docs/user/manual/en/healthcare/__init__.py create mode 100755 erpnext/docs/user/manual/en/healthcare/appointment.md create mode 100755 erpnext/docs/user/manual/en/healthcare/consultation.md create mode 100755 erpnext/docs/user/manual/en/healthcare/index.md create mode 100755 erpnext/docs/user/manual/en/healthcare/index.txt create mode 100755 erpnext/docs/user/manual/en/healthcare/invoicing.md create mode 100755 erpnext/docs/user/manual/en/healthcare/lab_test.md create mode 100755 erpnext/docs/user/manual/en/healthcare/medical_codes.md create mode 100755 erpnext/docs/user/manual/en/healthcare/medical_record.md create mode 100755 erpnext/docs/user/manual/en/healthcare/patient.md create mode 100755 erpnext/docs/user/manual/en/healthcare/physician.md create mode 100755 erpnext/docs/user/manual/en/healthcare/physician_schedule.md create mode 100755 erpnext/docs/user/manual/en/healthcare/sample_collection.md create mode 100755 erpnext/docs/user/manual/en/healthcare/setup/__init__.py create mode 100755 erpnext/docs/user/manual/en/healthcare/setup/index.md create mode 100755 erpnext/docs/user/manual/en/healthcare/setup/index.txt create mode 100755 erpnext/docs/user/manual/en/healthcare/setup/setup_laboratory.md create mode 100755 erpnext/docs/user/manual/en/healthcare/setup/setup_pharmacy.md create mode 100755 erpnext/docs/user/manual/en/healthcare/setup/setup_practice.md create mode 100755 erpnext/docs/user/manual/en/healthcare/vital_signs.md create mode 100644 erpnext/healthcare/__init__.py create mode 100644 erpnext/healthcare/doctype/__init__.py create mode 100644 erpnext/healthcare/doctype/antibiotic/__init__.py create mode 100644 erpnext/healthcare/doctype/antibiotic/antibiotic.js create mode 100644 erpnext/healthcare/doctype/antibiotic/antibiotic.json create mode 100644 erpnext/healthcare/doctype/antibiotic/antibiotic.py create mode 100644 erpnext/healthcare/doctype/antibiotic/test_antibiotic.js create mode 100644 erpnext/healthcare/doctype/antibiotic/test_antibiotic.py create mode 100644 erpnext/healthcare/doctype/appointment_type/__init__.py create mode 100644 erpnext/healthcare/doctype/appointment_type/appointment_type.js create mode 100644 erpnext/healthcare/doctype/appointment_type/appointment_type.json create mode 100644 erpnext/healthcare/doctype/appointment_type/appointment_type.py create mode 100644 erpnext/healthcare/doctype/appointment_type/test_appointment_type.js create mode 100644 erpnext/healthcare/doctype/appointment_type/test_appointment_type.py create mode 100644 erpnext/healthcare/doctype/codification_table/__init__.py create mode 100644 erpnext/healthcare/doctype/codification_table/codification_table.json create mode 100644 erpnext/healthcare/doctype/codification_table/codification_table.py create mode 100644 erpnext/healthcare/doctype/complaint/__init__.py create mode 100644 erpnext/healthcare/doctype/complaint/complaint.js create mode 100644 erpnext/healthcare/doctype/complaint/complaint.json create mode 100644 erpnext/healthcare/doctype/complaint/complaint.py create mode 100644 erpnext/healthcare/doctype/complaint/test_complaint.js create mode 100644 erpnext/healthcare/doctype/complaint/test_complaint.py create mode 100644 erpnext/healthcare/doctype/consultation/__init__.py create mode 100644 erpnext/healthcare/doctype/consultation/consultation.js create mode 100644 erpnext/healthcare/doctype/consultation/consultation.json create mode 100755 erpnext/healthcare/doctype/consultation/consultation.py create mode 100644 erpnext/healthcare/doctype/consultation/consultation_dashboard.py create mode 100755 erpnext/healthcare/doctype/consultation/consultation_list.js create mode 100644 erpnext/healthcare/doctype/consultation/test_consultation.js create mode 100644 erpnext/healthcare/doctype/consultation/test_consultation.py create mode 100644 erpnext/healthcare/doctype/diagnosis/__init__.py create mode 100644 erpnext/healthcare/doctype/diagnosis/diagnosis.js create mode 100644 erpnext/healthcare/doctype/diagnosis/diagnosis.json create mode 100644 erpnext/healthcare/doctype/diagnosis/diagnosis.py create mode 100644 erpnext/healthcare/doctype/diagnosis/test_diagnosis.js create mode 100644 erpnext/healthcare/doctype/diagnosis/test_diagnosis.py create mode 100644 erpnext/healthcare/doctype/dosage_form/__init__.py create mode 100644 erpnext/healthcare/doctype/dosage_form/dosage_form.js create mode 100644 erpnext/healthcare/doctype/dosage_form/dosage_form.json create mode 100644 erpnext/healthcare/doctype/dosage_form/dosage_form.py create mode 100644 erpnext/healthcare/doctype/dosage_form/test_dosage_form.js create mode 100644 erpnext/healthcare/doctype/dosage_form/test_dosage_form.py create mode 100644 erpnext/healthcare/doctype/dosage_strength/__init__.py create mode 100644 erpnext/healthcare/doctype/dosage_strength/dosage_strength.json create mode 100644 erpnext/healthcare/doctype/dosage_strength/dosage_strength.py create mode 100644 erpnext/healthcare/doctype/drug_prescription/__init__.py create mode 100644 erpnext/healthcare/doctype/drug_prescription/drug_prescription.json create mode 100755 erpnext/healthcare/doctype/drug_prescription/drug_prescription.py create mode 100644 erpnext/healthcare/doctype/fee_validity/__init__.py create mode 100644 erpnext/healthcare/doctype/fee_validity/fee_validity.js create mode 100644 erpnext/healthcare/doctype/fee_validity/fee_validity.json create mode 100644 erpnext/healthcare/doctype/fee_validity/fee_validity.py create mode 100644 erpnext/healthcare/doctype/fee_validity/test_fee_validity.js create mode 100644 erpnext/healthcare/doctype/fee_validity/test_fee_validity.py create mode 100644 erpnext/healthcare/doctype/healthcare.py create mode 100644 erpnext/healthcare/doctype/healthcare_settings/__init__.py create mode 100644 erpnext/healthcare/doctype/healthcare_settings/healthcare_settings.js create mode 100644 erpnext/healthcare/doctype/healthcare_settings/healthcare_settings.json create mode 100644 erpnext/healthcare/doctype/healthcare_settings/healthcare_settings.py create mode 100644 erpnext/healthcare/doctype/healthcare_settings/test_healthcare_settings.js create mode 100644 erpnext/healthcare/doctype/lab_prescription/__init__.py create mode 100644 erpnext/healthcare/doctype/lab_prescription/lab_prescription.json create mode 100644 erpnext/healthcare/doctype/lab_prescription/lab_prescription.py create mode 100644 erpnext/healthcare/doctype/lab_test/__init__.py create mode 100644 erpnext/healthcare/doctype/lab_test/lab_test.js create mode 100644 erpnext/healthcare/doctype/lab_test/lab_test.json create mode 100644 erpnext/healthcare/doctype/lab_test/lab_test.py create mode 100644 erpnext/healthcare/doctype/lab_test/lab_test_list.js create mode 100644 erpnext/healthcare/doctype/lab_test/test_lab_test.js create mode 100644 erpnext/healthcare/doctype/lab_test/test_lab_test.py create mode 100644 erpnext/healthcare/doctype/lab_test_groups/__init__.py create mode 100644 erpnext/healthcare/doctype/lab_test_groups/lab_test_groups.json create mode 100644 erpnext/healthcare/doctype/lab_test_groups/lab_test_groups.py create mode 100644 erpnext/healthcare/doctype/lab_test_sample/__init__.py create mode 100644 erpnext/healthcare/doctype/lab_test_sample/lab_test_sample.js create mode 100644 erpnext/healthcare/doctype/lab_test_sample/lab_test_sample.json create mode 100644 erpnext/healthcare/doctype/lab_test_sample/lab_test_sample.py create mode 100644 erpnext/healthcare/doctype/lab_test_sample/test_lab_test_sample.js create mode 100644 erpnext/healthcare/doctype/lab_test_sample/test_lab_test_sample.py create mode 100644 erpnext/healthcare/doctype/lab_test_template/__init__.py create mode 100644 erpnext/healthcare/doctype/lab_test_template/lab_test_template.js create mode 100644 erpnext/healthcare/doctype/lab_test_template/lab_test_template.json create mode 100644 erpnext/healthcare/doctype/lab_test_template/lab_test_template.py create mode 100644 erpnext/healthcare/doctype/lab_test_template/lab_test_template_list.js create mode 100644 erpnext/healthcare/doctype/lab_test_template/test_lab_test_template.js create mode 100644 erpnext/healthcare/doctype/lab_test_template/test_lab_test_template.py create mode 100644 erpnext/healthcare/doctype/lab_test_uom/__init__.py create mode 100644 erpnext/healthcare/doctype/lab_test_uom/lab_test_uom.js create mode 100644 erpnext/healthcare/doctype/lab_test_uom/lab_test_uom.json create mode 100644 erpnext/healthcare/doctype/lab_test_uom/lab_test_uom.py create mode 100644 erpnext/healthcare/doctype/lab_test_uom/test_lab_test_uom.js create mode 100644 erpnext/healthcare/doctype/lab_test_uom/test_lab_test_uom.py create mode 100644 erpnext/healthcare/doctype/medical_code/__init__.py create mode 100644 erpnext/healthcare/doctype/medical_code/medical_code.js create mode 100644 erpnext/healthcare/doctype/medical_code/medical_code.json create mode 100644 erpnext/healthcare/doctype/medical_code/medical_code.py create mode 100644 erpnext/healthcare/doctype/medical_code/test_medical_code.js create mode 100644 erpnext/healthcare/doctype/medical_code/test_medical_code.py create mode 100644 erpnext/healthcare/doctype/medical_code_standard/__init__.py create mode 100644 erpnext/healthcare/doctype/medical_code_standard/medical_code_standard.js create mode 100644 erpnext/healthcare/doctype/medical_code_standard/medical_code_standard.json create mode 100644 erpnext/healthcare/doctype/medical_code_standard/medical_code_standard.py create mode 100644 erpnext/healthcare/doctype/medical_code_standard/test_medical_code_standard.js create mode 100644 erpnext/healthcare/doctype/medical_code_standard/test_medical_code_standard.py create mode 100644 erpnext/healthcare/doctype/medical_department/__init__.py create mode 100644 erpnext/healthcare/doctype/medical_department/medical_department.js create mode 100644 erpnext/healthcare/doctype/medical_department/medical_department.json create mode 100644 erpnext/healthcare/doctype/medical_department/medical_department.py create mode 100644 erpnext/healthcare/doctype/medical_department/test_medical_department.js create mode 100644 erpnext/healthcare/doctype/medical_department/test_medical_department.py create mode 100644 erpnext/healthcare/doctype/normal_test_items/__init__.py create mode 100644 erpnext/healthcare/doctype/normal_test_items/normal_test_items.js create mode 100644 erpnext/healthcare/doctype/normal_test_items/normal_test_items.json create mode 100644 erpnext/healthcare/doctype/normal_test_items/normal_test_items.py create mode 100644 erpnext/healthcare/doctype/normal_test_template/__init__.py create mode 100644 erpnext/healthcare/doctype/normal_test_template/normal_test_template.json create mode 100644 erpnext/healthcare/doctype/normal_test_template/normal_test_template.py create mode 100644 erpnext/healthcare/doctype/patient/__init__.py create mode 100644 erpnext/healthcare/doctype/patient/patient.js create mode 100644 erpnext/healthcare/doctype/patient/patient.json create mode 100644 erpnext/healthcare/doctype/patient/patient.py create mode 100644 erpnext/healthcare/doctype/patient/patient_dashboard.py create mode 100644 erpnext/healthcare/doctype/patient/test_patient.js create mode 100644 erpnext/healthcare/doctype/patient/test_patient.py create mode 100644 erpnext/healthcare/doctype/patient_appointment/__init__.py create mode 100644 erpnext/healthcare/doctype/patient_appointment/patient_appointment.js create mode 100644 erpnext/healthcare/doctype/patient_appointment/patient_appointment.json create mode 100755 erpnext/healthcare/doctype/patient_appointment/patient_appointment.py create mode 100644 erpnext/healthcare/doctype/patient_appointment/patient_appointment_calendar.js create mode 100644 erpnext/healthcare/doctype/patient_appointment/patient_appointment_dashboard.py create mode 100644 erpnext/healthcare/doctype/patient_appointment/patient_appointment_list.js create mode 100644 erpnext/healthcare/doctype/patient_appointment/test_patient_appointment.js create mode 100644 erpnext/healthcare/doctype/patient_appointment/test_patient_appointment.py create mode 100644 erpnext/healthcare/doctype/patient_medical_record/__init__.py create mode 100644 erpnext/healthcare/doctype/patient_medical_record/patient_medical_record.js create mode 100644 erpnext/healthcare/doctype/patient_medical_record/patient_medical_record.json create mode 100644 erpnext/healthcare/doctype/patient_medical_record/patient_medical_record.py create mode 100644 erpnext/healthcare/doctype/patient_medical_record/test_patient_medical_record.js create mode 100644 erpnext/healthcare/doctype/patient_medical_record/test_patient_medical_record.py create mode 100644 erpnext/healthcare/doctype/patient_relation/__init__.py create mode 100644 erpnext/healthcare/doctype/patient_relation/patient_relation.json create mode 100644 erpnext/healthcare/doctype/patient_relation/patient_relation.py create mode 100644 erpnext/healthcare/doctype/physician/__init__.py create mode 100755 erpnext/healthcare/doctype/physician/physician.js create mode 100644 erpnext/healthcare/doctype/physician/physician.json create mode 100644 erpnext/healthcare/doctype/physician/physician.py create mode 100644 erpnext/healthcare/doctype/physician/test_physician.js create mode 100644 erpnext/healthcare/doctype/physician/test_physician.py create mode 100644 erpnext/healthcare/doctype/physician_schedule/__init__.py create mode 100644 erpnext/healthcare/doctype/physician_schedule/physician_schedule.js create mode 100644 erpnext/healthcare/doctype/physician_schedule/physician_schedule.json create mode 100644 erpnext/healthcare/doctype/physician_schedule/physician_schedule.py create mode 100644 erpnext/healthcare/doctype/physician_schedule/test_physician_schedule.js create mode 100644 erpnext/healthcare/doctype/physician_schedule/test_physician_schedule.py create mode 100644 erpnext/healthcare/doctype/physician_schedule_time_slot/__init__.py create mode 100644 erpnext/healthcare/doctype/physician_schedule_time_slot/physician_schedule_time_slot.json create mode 100644 erpnext/healthcare/doctype/physician_schedule_time_slot/physician_schedule_time_slot.py create mode 100644 erpnext/healthcare/doctype/prescription_dosage/__init__.py create mode 100644 erpnext/healthcare/doctype/prescription_dosage/prescription_dosage.js create mode 100644 erpnext/healthcare/doctype/prescription_dosage/prescription_dosage.json create mode 100644 erpnext/healthcare/doctype/prescription_dosage/prescription_dosage.py create mode 100644 erpnext/healthcare/doctype/prescription_dosage/test_prescription_dosage.js create mode 100644 erpnext/healthcare/doctype/prescription_dosage/test_prescription_dosage.py create mode 100644 erpnext/healthcare/doctype/prescription_duration/__init__.py create mode 100644 erpnext/healthcare/doctype/prescription_duration/prescription_duration.js create mode 100644 erpnext/healthcare/doctype/prescription_duration/prescription_duration.json create mode 100644 erpnext/healthcare/doctype/prescription_duration/prescription_duration.py create mode 100644 erpnext/healthcare/doctype/prescription_duration/test_prescription_duration.js create mode 100644 erpnext/healthcare/doctype/prescription_duration/test_prescription_duration.py create mode 100644 erpnext/healthcare/doctype/sample_collection/__init__.py create mode 100644 erpnext/healthcare/doctype/sample_collection/sample_collection.js create mode 100644 erpnext/healthcare/doctype/sample_collection/sample_collection.json create mode 100644 erpnext/healthcare/doctype/sample_collection/sample_collection.py create mode 100644 erpnext/healthcare/doctype/sample_collection/test_sample_collection.js create mode 100644 erpnext/healthcare/doctype/sample_collection/test_sample_collection.py create mode 100644 erpnext/healthcare/doctype/sensitivity/__init__.py create mode 100644 erpnext/healthcare/doctype/sensitivity/sensitivity.js create mode 100644 erpnext/healthcare/doctype/sensitivity/sensitivity.json create mode 100644 erpnext/healthcare/doctype/sensitivity/sensitivity.py create mode 100644 erpnext/healthcare/doctype/sensitivity/test_sensitivity.js create mode 100644 erpnext/healthcare/doctype/sensitivity/test_sensitivity.py create mode 100644 erpnext/healthcare/doctype/sensitivity_test_items/__init__.py create mode 100644 erpnext/healthcare/doctype/sensitivity_test_items/sensitivity_test_items.json create mode 100644 erpnext/healthcare/doctype/sensitivity_test_items/sensitivity_test_items.py create mode 100644 erpnext/healthcare/doctype/special_test_items/__init__.py create mode 100644 erpnext/healthcare/doctype/special_test_items/special_test_items.json create mode 100644 erpnext/healthcare/doctype/special_test_items/special_test_items.py create mode 100644 erpnext/healthcare/doctype/special_test_template/__init__.py create mode 100644 erpnext/healthcare/doctype/special_test_template/special_test_template.json create mode 100644 erpnext/healthcare/doctype/special_test_template/special_test_template.py create mode 100644 erpnext/healthcare/doctype/vital_signs/__init__.py create mode 100644 erpnext/healthcare/doctype/vital_signs/test_vital_signs.js create mode 100644 erpnext/healthcare/doctype/vital_signs/test_vital_signs.py create mode 100644 erpnext/healthcare/doctype/vital_signs/vital_signs.js create mode 100644 erpnext/healthcare/doctype/vital_signs/vital_signs.json create mode 100644 erpnext/healthcare/doctype/vital_signs/vital_signs.py create mode 100644 erpnext/healthcare/page/__init__.py create mode 100644 erpnext/healthcare/page/appointment_analytic/__init__.py create mode 100644 erpnext/healthcare/page/appointment_analytic/appointment_analytic.js create mode 100644 erpnext/healthcare/page/appointment_analytic/appointment_analytic.json create mode 100644 erpnext/healthcare/page/medical_record/__init__.py create mode 100644 erpnext/healthcare/page/medical_record/medical_record.css create mode 100644 erpnext/healthcare/page/medical_record/medical_record.js create mode 100644 erpnext/healthcare/page/medical_record/medical_record.json create mode 100644 erpnext/healthcare/page/medical_record/medical_record.py create mode 100644 erpnext/healthcare/page/medical_record/medical_record_row.html create mode 100644 erpnext/healthcare/page/medical_record/patient_select.html create mode 100644 erpnext/healthcare/print_format/__init__.py create mode 100644 erpnext/healthcare/print_format/consultation_print/__init__.py create mode 100644 erpnext/healthcare/print_format/consultation_print/consultation_print.json create mode 100644 erpnext/healthcare/print_format/lab_test_print/__init__.py create mode 100644 erpnext/healthcare/print_format/lab_test_print/lab_test_print.json create mode 100644 erpnext/healthcare/print_format/sample_id_print/__init__.py create mode 100644 erpnext/healthcare/print_format/sample_id_print/sample_id_print.json create mode 100644 erpnext/healthcare/report/__init__.py create mode 100644 erpnext/healthcare/report/lab_test_report/__init__.py create mode 100644 erpnext/healthcare/report/lab_test_report/lab_test_report.js create mode 100644 erpnext/healthcare/report/lab_test_report/lab_test_report.json create mode 100644 erpnext/healthcare/report/lab_test_report/lab_test_report.py create mode 100644 erpnext/healthcare/web_form/__init__.py create mode 100644 erpnext/healthcare/web_form/lab_test/__init__.py create mode 100644 erpnext/healthcare/web_form/lab_test/lab_test.js create mode 100644 erpnext/healthcare/web_form/lab_test/lab_test.json create mode 100644 erpnext/healthcare/web_form/lab_test/lab_test.py create mode 100644 erpnext/healthcare/web_form/patient_appointments/__init__.py create mode 100644 erpnext/healthcare/web_form/patient_appointments/patient_appointments.js create mode 100644 erpnext/healthcare/web_form/patient_appointments/patient_appointments.json create mode 100644 erpnext/healthcare/web_form/patient_appointments/patient_appointments.py create mode 100644 erpnext/healthcare/web_form/prescription/__init__.py create mode 100644 erpnext/healthcare/web_form/prescription/prescription.js create mode 100644 erpnext/healthcare/web_form/prescription/prescription.json create mode 100644 erpnext/healthcare/web_form/prescription/prescription.py create mode 100644 erpnext/setup/setup_wizard/healthcare.py create mode 100644 erpnext/templates/includes/healthcare/appointment_row_template.html create mode 100644 erpnext/templates/includes/healthcare/lab_test_row_template.html create mode 100644 erpnext/templates/includes/healthcare/prescription_row_template.html diff --git a/erpnext/buying/doctype/supplier/supplier.py b/erpnext/buying/doctype/supplier/supplier.py index b2b90637b6..c715fbd2a6 100644 --- a/erpnext/buying/doctype/supplier/supplier.py +++ b/erpnext/buying/doctype/supplier/supplier.py @@ -16,7 +16,7 @@ class Supplier(TransactionBase): def onload(self): """Load address and contacts in `__onload`""" - load_address_and_contact(self, "supplier") + load_address_and_contact(self) self.load_dashboard_info() def load_dashboard_info(self): diff --git a/erpnext/config/desktop.py b/erpnext/config/desktop.py index 029ef74740..ef1ff103fa 100644 --- a/erpnext/config/desktop.py +++ b/erpnext/config/desktop.py @@ -261,5 +261,12 @@ def get_data(): "icon": "octicon octicon-mortar-board", "type": "module", "label": _("Schools") + }, + { + "module_name": "Healthcare", + "color": "#FF888B", + "icon": "octicon octicon-plus", + "type": "module", + "label": _("Healthcare") } ] diff --git a/erpnext/config/healthcare.py b/erpnext/config/healthcare.py new file mode 100644 index 0000000000..f4bf4f7bd2 --- /dev/null +++ b/erpnext/config/healthcare.py @@ -0,0 +1,157 @@ +from __future__ import unicode_literals +from frappe import _ + +def get_data(): + + return [ + { + "label": _("Consultation"), + "icon": "icon-star", + "items": [ + { + "type": "doctype", + "name": "Patient Appointment", + "description": _("Patient Appointment"), + }, + { + "type": "doctype", + "name": "Consultation", + "label": _("Consultation"), + }, + { + "type": "doctype", + "name": "Vital Signs", + "label": _("Vital Signs"), + "description": _("Record Patient Vitals"), + }, + { + "type": "page", + "name": "medical_record", + "label": _("Patient Medical Record"), + }, + { + "type": "page", + "name": "appointment-analytic", + "label": _("Appointment Analytics"), + } + ] + }, + { + "label": _("Laboratory"), + "icon": "icon-list", + "items": [ + { + "type": "doctype", + "name": "Lab Test", + "description": _("Results"), + }, + { + "type": "doctype", + "name": "Sample Collection", + "label": _("Sample Collection"), + }, + { + "type": "report", + "name": "Lab Test Report", + "is_query_report": True + } + ] + }, + { + "label": _("Masters"), + "icon": "icon-list", + "items": [ + { + "type": "doctype", + "name": "Patient", + "label": _("Patient"), + }, + { + "type": "doctype", + "name": "Physician", + "label": "Physician", + }, + { + "type": "doctype", + "name": "Physician Schedule", + "label": _("Physician Schedule"), + }, + { + "type": "doctype", + "name": "Medical Code Standard", + "label": _("Medical Code Standard"), + }, + { + "type": "doctype", + "name": "Medical Code", + "label": _("Medical Code"), + } + ] + }, + { + "label": _("Setup"), + "icon": "icon-cog", + "items": [ + { + "type": "doctype", + "name": "Healthcare Settings", + "label": _("Healthcare Settings"), + }, + { + "type": "doctype", + "name": "Medical Department", + "label": "Medical Department" + }, + { + "type": "doctype", + "name": "Appointment Type", + "description": _("Appointment Type Master"), + }, + { + "type": "doctype", + "name": "Prescription Dosage", + "description": _("Prescription Dosage") + }, + { + "type": "doctype", + "name": "Prescription Duration", + "description": _("Prescription Period") + }, + { + "type": "doctype", + "name": "Complaint", + "description": _("Complaint") + }, + { + "type": "doctype", + "name": "Diagnosis", + "description": _("Diagnosis") + }, + { + "type": "doctype", + "name": "Lab Test Sample", + "description": _("Test Sample Master."), + }, + { + "type": "doctype", + "name": "Lab Test UOM", + "description": _("Lab Test UOM.") + }, + { + "type": "doctype", + "name": "Antibiotic", + "description": _("Antibiotic.") + }, + { + "type": "doctype", + "name": "Sensitivity", + "description": _("Sensitivity Naming.") + }, + { + "type": "doctype", + "name": "Lab Test Template", + "description": _("Lab Test Configurations.") + } + ] + } + ] diff --git a/erpnext/crm/doctype/lead/lead.py b/erpnext/crm/doctype/lead/lead.py index a05bacd3f6..eb6e8763e1 100644 --- a/erpnext/crm/doctype/lead/lead.py +++ b/erpnext/crm/doctype/lead/lead.py @@ -20,7 +20,7 @@ class Lead(SellingController): def onload(self): customer = frappe.db.get_value("Customer", {"lead_name": self.name}) self.get("__onload").is_customer = customer - load_address_and_contact(self, "lead") + load_address_and_contact(self) def validate(self): self._prev = frappe._dict({ diff --git a/erpnext/demo/data/drug_list.json b/erpnext/demo/data/drug_list.json new file mode 100644 index 0000000000..51b029c1dd --- /dev/null +++ b/erpnext/demo/data/drug_list.json @@ -0,0 +1,5420 @@ +[ + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Atocopherol", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Atocopherol", + "item_group": "Drug", + "item_name": "Atocopherol", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:16.577151", + "name": "Atocopherol", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Abacavir", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Abacavir", + "item_group": "Drug", + "item_name": "Abacavir", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:16.678257", + "name": "Abacavir", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Abciximab", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Abciximab", + "item_group": "Drug", + "item_name": "Abciximab", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:16.695413", + "name": "Abciximab", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Acacia", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Acacia", + "item_group": "Drug", + "item_name": "Acacia", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:16.797774", + "name": "Acacia", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Acamprosate", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Acamprosate", + "item_group": "Drug", + "item_name": "Acamprosate", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:16.826952", + "name": "Acamprosate", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Acarbose", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Acarbose", + "item_group": "Drug", + "item_name": "Acarbose", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:16.843890", + "name": "Acarbose", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Acebrofylline", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Acebrofylline", + "item_group": "Drug", + "item_name": "Acebrofylline", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:16.969984", + "name": "Acebrofylline", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Acebrofylline (SR)", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Acebrofylline (SR)", + "item_group": "Drug", + "item_name": "Acebrofylline (SR)", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:16.987354", + "name": "Acebrofylline (SR)", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Aceclofenac", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Aceclofenac", + "item_group": "Drug", + "item_name": "Aceclofenac", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.004369", + "name": "Aceclofenac", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Ash", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Ash", + "item_group": "Drug", + "item_name": "Ash", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.021192", + "name": "Ash", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Asparaginase", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Asparaginase", + "item_group": "Drug", + "item_name": "Asparaginase", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.038058", + "name": "Asparaginase", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Aspartame", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Aspartame", + "item_group": "Drug", + "item_name": "Aspartame", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.054463", + "name": "Aspartame", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Aspartic Acid", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Aspartic Acid", + "item_group": "Drug", + "item_name": "Aspartic Acid", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.071001", + "name": "Aspartic Acid", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Bleomycin", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Bleomycin", + "item_group": "Drug", + "item_name": "Bleomycin", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.087170", + "name": "Bleomycin", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Bleomycin Sulphate", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Bleomycin Sulphate", + "item_group": "Drug", + "item_name": "Bleomycin Sulphate", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.103691", + "name": "Bleomycin Sulphate", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Blue cap contains", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Blue cap contains", + "item_group": "Drug", + "item_name": "Blue cap contains", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.120040", + "name": "Blue cap contains", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Boran", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Boran", + "item_group": "Drug", + "item_name": "Boran", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.135964", + "name": "Boran", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Borax", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Borax", + "item_group": "Drug", + "item_name": "Borax", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.152575", + "name": "Borax", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Chlorbutanol", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Chlorbutanol", + "item_group": "Drug", + "item_name": "Chlorbutanol", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.168998", + "name": "Chlorbutanol", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Chlorbutol", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Chlorbutol", + "item_group": "Drug", + "item_name": "Chlorbutol", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.185316", + "name": "Chlorbutol", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Chlordiazepoxide", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Chlordiazepoxide", + "item_group": "Drug", + "item_name": "Chlordiazepoxide", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.208361", + "name": "Chlordiazepoxide", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Chlordiazepoxide and Clidinium Bromide", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Chlordiazepoxide and Clidinium Bromide", + "item_group": "Drug", + "item_name": "Chlordiazepoxide and Clidinium Bromide", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.224341", + "name": "Chlordiazepoxide and Clidinium Bromide", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Chlorhexidine", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Chlorhexidine", + "item_group": "Drug", + "item_name": "Chlorhexidine", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.240634", + "name": "Chlorhexidine", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Chlorhexidine 40%", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Chlorhexidine 40%", + "item_group": "Drug", + "item_name": "Chlorhexidine 40%", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.256922", + "name": "Chlorhexidine 40%", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Chlorhexidine Acetate", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Chlorhexidine Acetate", + "item_group": "Drug", + "item_name": "Chlorhexidine Acetate", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.274789", + "name": "Chlorhexidine Acetate", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Chlorhexidine Gluconate", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Chlorhexidine Gluconate", + "item_group": "Drug", + "item_name": "Chlorhexidine Gluconate", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.295371", + "name": "Chlorhexidine Gluconate", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Chlorhexidine HCL", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Chlorhexidine HCL", + "item_group": "Drug", + "item_name": "Chlorhexidine HCL", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.312916", + "name": "Chlorhexidine HCL", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Chlorhexidine Hydrochloride", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Chlorhexidine Hydrochloride", + "item_group": "Drug", + "item_name": "Chlorhexidine Hydrochloride", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.329570", + "name": "Chlorhexidine Hydrochloride", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Chloride", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Chloride", + "item_group": "Drug", + "item_name": "Chloride", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.346088", + "name": "Chloride", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Fosfomycin Tromethamine", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Fosfomycin Tromethamine", + "item_group": "Drug", + "item_name": "Fosfomycin Tromethamine", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.362777", + "name": "Fosfomycin Tromethamine", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Fosinopril", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Fosinopril", + "item_group": "Drug", + "item_name": "Fosinopril", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.379465", + "name": "Fosinopril", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Iodochlorhydroxyquinoline", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Iodochlorhydroxyquinoline", + "item_group": "Drug", + "item_name": "Iodochlorhydroxyquinoline", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.396068", + "name": "Iodochlorhydroxyquinoline", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Iodochlorohydroxyquinoline", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Iodochlorohydroxyquinoline", + "item_group": "Drug", + "item_name": "Iodochlorohydroxyquinoline", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.412734", + "name": "Iodochlorohydroxyquinoline", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Ipratropium", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Ipratropium", + "item_group": "Drug", + "item_name": "Ipratropium", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.429333", + "name": "Ipratropium", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Mebeverine hydrochloride", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Mebeverine hydrochloride", + "item_group": "Drug", + "item_name": "Mebeverine hydrochloride", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.445814", + "name": "Mebeverine hydrochloride", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Mecetronium ethylsulphate", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Mecetronium ethylsulphate", + "item_group": "Drug", + "item_name": "Mecetronium ethylsulphate", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.461696", + "name": "Mecetronium ethylsulphate", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Meclizine", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Meclizine", + "item_group": "Drug", + "item_name": "Meclizine", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.478020", + "name": "Meclizine", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Oxaprozin", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Oxaprozin", + "item_group": "Drug", + "item_name": "Oxaprozin", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.496221", + "name": "Oxaprozin", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Oxazepam", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Oxazepam", + "item_group": "Drug", + "item_name": "Oxazepam", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.511933", + "name": "Oxazepam", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Oxcarbazepine", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Oxcarbazepine", + "item_group": "Drug", + "item_name": "Oxcarbazepine", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.528472", + "name": "Oxcarbazepine", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Oxetacaine", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Oxetacaine", + "item_group": "Drug", + "item_name": "Oxetacaine", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.544177", + "name": "Oxetacaine", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Oxethazaine", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Oxethazaine", + "item_group": "Drug", + "item_name": "Oxethazaine", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.560193", + "name": "Oxethazaine", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Suxamethonium Chloride", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Suxamethonium Chloride", + "item_group": "Drug", + "item_name": "Suxamethonium Chloride", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.576447", + "name": "Suxamethonium Chloride", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Tacrolimus", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Tacrolimus", + "item_group": "Drug", + "item_name": "Tacrolimus", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.593481", + "name": "Tacrolimus", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Ubiquinol", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Ubiquinol", + "item_group": "Drug", + "item_name": "Ubiquinol", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.609930", + "name": "Ubiquinol", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Vitamin B12", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Vitamin B12", + "item_group": "Drug", + "item_name": "Vitamin B12", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.626225", + "name": "Vitamin B12", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Vitamin B1Hydrochloride", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Vitamin B1Hydrochloride", + "item_group": "Drug", + "item_name": "Vitamin B1Hydrochloride", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.642423", + "name": "Vitamin B1Hydrochloride", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Vitamin B1Monohydrate", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Vitamin B1Monohydrate", + "item_group": "Drug", + "item_name": "Vitamin B1Monohydrate", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.658946", + "name": "Vitamin B1Monohydrate", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Vitamin B2", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Vitamin B2", + "item_group": "Drug", + "item_name": "Vitamin B2", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.675234", + "name": "Vitamin B2", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Vitamin B3", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Vitamin B3", + "item_group": "Drug", + "item_name": "Vitamin B3", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.691598", + "name": "Vitamin B3", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Vitamin D4", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Vitamin D4", + "item_group": "Drug", + "item_name": "Vitamin D4", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.707840", + "name": "Vitamin D4", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Vitamin E", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Vitamin E", + "item_group": "Drug", + "item_name": "Vitamin E", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.723859", + "name": "Vitamin E", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Wheat Germ Oil", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Wheat Germ Oil", + "item_group": "Drug", + "item_name": "Wheat Germ Oil", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.739829", + "name": "Wheat Germ Oil", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Wheatgrass extr", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Wheatgrass extr", + "item_group": "Drug", + "item_name": "Wheatgrass extr", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.757695", + "name": "Wheatgrass extr", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Whey Protein", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Whey Protein", + "item_group": "Drug", + "item_name": "Whey Protein", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.774098", + "name": "Whey Protein", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Xylometazoline", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Xylometazoline", + "item_group": "Drug", + "item_name": "Xylometazoline", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.790224", + "name": "Xylometazoline", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Xylometazoline Hydrochloride", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Xylometazoline Hydrochloride", + "item_group": "Drug", + "item_name": "Xylometazoline Hydrochloride", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.806359", + "name": "Xylometazoline Hydrochloride", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Yeast", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Yeast", + "item_group": "Drug", + "item_name": "Yeast", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.823305", + "name": "Yeast", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Yellow Fever Vaccine", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Yellow Fever Vaccine", + "item_group": "Drug", + "item_name": "Yellow Fever Vaccine", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.840250", + "name": "Yellow Fever Vaccine", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Zafirlukast", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Zafirlukast", + "item_group": "Drug", + "item_name": "Zafirlukast", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.856856", + "name": "Zafirlukast", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Zaleplon", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Zaleplon", + "item_group": "Drug", + "item_name": "Zaleplon", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.873287", + "name": "Zaleplon", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Zaltoprofen", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Zaltoprofen", + "item_group": "Drug", + "item_name": "Zaltoprofen", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.889263", + "name": "Zaltoprofen", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + }, + { + "asset_category": null, + "attributes": [], + "barcode": null, + "brand": null, + "buying_cost_center": null, + "country_of_origin": null, + "create_new_batch": 0, + "customer_code": "", + "customer_items": [], + "customs_tariff_number": null, + "default_bom": null, + "default_material_request_type": null, + "default_supplier": null, + "default_warehouse": null, + "delivered_by_supplier": 0, + "description": "Zanamivir", + "disabled": 0, + "docstatus": 0, + "doctype": "Item", + "end_of_life": null, + "expense_account": null, + "gst_hsn_code": null, + "has_batch_no": 0, + "has_serial_no": 0, + "has_variants": 0, + "image": null, + "income_account": null, + "inspection_required_before_delivery": 0, + "inspection_required_before_purchase": 0, + "is_fixed_asset": 0, + "is_purchase_item": 1, + "is_sales_item": 1, + "is_stock_item": 1, + "is_sub_contracted_item": 0, + "item_code": "Zanamivir", + "item_group": "Drug", + "item_name": "Zanamivir", + "last_purchase_rate": 0.0, + "lead_time_days": 0, + "manufacturer": null, + "manufacturer_part_no": null, + "max_discount": 0.0, + "min_order_qty": 0.0, + "modified": "2017-07-06 12:53:17.905022", + "name": "Zanamivir", + "naming_series": null, + "net_weight": 0.0, + "opening_stock": 0.0, + "publish_in_hub": 1, + "quality_parameters": [], + "reorder_levels": [], + "route": null, + "safety_stock": 0.0, + "selling_cost_center": null, + "serial_no_series": null, + "show_in_website": 0, + "show_variant_in_website": 0, + "slideshow": null, + "standard_rate": 0.0, + "stock_uom": "Nos", + "supplier_items": [], + "synced_with_hub": 0, + "taxes": [], + "thumbnail": null, + "tolerance": 0.0, + "total_projected_qty": 0.0, + "uoms": [ + { + "conversion_factor": 1.0, + "uom": "Nos" + } + ], + "valuation_method": null, + "valuation_rate": 0.0, + "variant_based_on": null, + "variant_of": null, + "warranty_period": null, + "web_long_description": null, + "website_image": null, + "website_item_groups": [], + "website_specifications": [], + "website_warehouse": null, + "weight_uom": null, + "weightage": 0 + } +] diff --git a/erpnext/demo/data/patient.json b/erpnext/demo/data/patient.json new file mode 100644 index 0000000000..6d95a20202 --- /dev/null +++ b/erpnext/demo/data/patient.json @@ -0,0 +1,27 @@ +[ + { + "patient_name": "lila", + "gender": "Female" + }, + { + "patient_name": "charline", + "gender": "Female" + }, + { + "patient_name": "soren", + "last_name": "le gall", + "gender": "Male" + }, + { + "patient_name": "fanny", + "gender": "Female" + }, + { + "patient_name": "julie", + "gender": "Female" + }, + { + "patient_name": "louka", + "gender": "Male" + } +] diff --git a/erpnext/demo/data/physician.json b/erpnext/demo/data/physician.json new file mode 100644 index 0000000000..3afea993e6 --- /dev/null +++ b/erpnext/demo/data/physician.json @@ -0,0 +1,17 @@ +[ + { + "doctype": "Physician", + "first_name": "Eddie Jessup", + "department": "Pathology" + }, + { + "doctype": "Physician", + "first_name": "Deepshi Garg", + "department": "ENT" + }, + { + "doctype": "Physician", + "first_name": "Amit Jain", + "department": "Microbiology" + } +] diff --git a/erpnext/demo/demo.py b/erpnext/demo/demo.py index 9fde2646c8..35256b580f 100644 --- a/erpnext/demo/demo.py +++ b/erpnext/demo/demo.py @@ -4,7 +4,7 @@ import frappe, sys import erpnext import frappe.utils from erpnext.demo.user import hr, sales, purchase, manufacturing, stock, accounts, projects, fixed_asset, schools -from erpnext.demo.setup import education, manufacture, setup_data +from erpnext.demo.setup import education, manufacture, setup_data, healthcare """ Make a demo @@ -30,6 +30,8 @@ def make(domain='Manufacturing', days=100): manufacture.setup_data() elif domain== 'Education': education.setup_data() + elif domain== 'Healthcare': + healthcare.setup_data() site = frappe.local.site frappe.destroy() diff --git a/erpnext/demo/domains.py b/erpnext/demo/domains.py index 5743e27bf2..456eb5df32 100644 --- a/erpnext/demo/domains.py +++ b/erpnext/demo/domains.py @@ -15,5 +15,8 @@ data = { }, 'Education': { 'company_name': 'Whitmore College' + }, + 'Healthcare': { + 'company_name': 'ABC Hospital Ltd.' } } \ No newline at end of file diff --git a/erpnext/demo/setup/healthcare.py b/erpnext/demo/setup/healthcare.py new file mode 100644 index 0000000000..d645e309f8 --- /dev/null +++ b/erpnext/demo/setup/healthcare.py @@ -0,0 +1,166 @@ +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# License: GNU General Public License v3. See license.txt + +import frappe, json +from frappe.utils.make_random import get_random +import datetime +from erpnext.demo.setup.setup_data import import_json +from frappe.utils import getdate +from erpnext.healthcare.doctype.lab_test.lab_test import create_test_from_template + +def setup_data(): + frappe.flags.mute_emails = True + make_masters() + make_patient() + make_lab_test() + make_consulation() + make_appointment() + consulation_on_appointment() + lab_test_on_consultation() + frappe.db.commit() + frappe.clear_cache() + +def make_masters(): + import_json("Physician") + import_drug() + frappe.db.commit() + +def make_patient(): + file_path = get_json_path("Patient") + with open(file_path, "r") as open_file: + patient_data = json.loads(open_file.read()) + count = 1 + + for d in enumerate(patient_data): + patient = frappe.new_doc("Patient") + patient.patient_name = d[1]['patient_name'].title() + patient.sex = d[1]['gender'] + patient.blood_group = "A Positive" + patient.date_of_birth = datetime.datetime(1990, 3, 25) + patient.email_id = d[1]['patient_name'] + "_" + patient.date_of_birth.strftime('%m/%d/%Y') + "@example.com" + if count <5: + patient.insert() + frappe.db.commit() + count+=1 + +def make_appointment(): + i = 1 + while i <= 4: + physician = get_random("Physician") + department = frappe.get_value("Physician", physician, "department") + patient = get_random("Patient") + patient_sex = frappe.get_value("Patient", patient, "sex") + appointment = frappe.new_doc("Patient Appointment") + startDate = datetime.datetime.now() + for x in random_date(startDate,0): + appointment_datetime = x + appointment.appointment_datetime = appointment_datetime + appointment.appointment_time = appointment_datetime + appointment.appointment_date = appointment_datetime + appointment.patient = patient + appointment.patient_sex = patient_sex + appointment.physician = physician + appointment.department = department + appointment.save(ignore_permissions = True) + i += 1 + +def make_consulation(): + for i in xrange(3): + physician = get_random("Physician") + department = frappe.get_value("Physician", physician, "department") + patient = get_random("Patient") + patient_sex = frappe.get_value("Patient", patient, "sex") + consultation = set_consultation(patient, patient_sex, physician, department, getdate(), i) + consultation.save(ignore_permissions=True) + +def consulation_on_appointment(): + for i in xrange(3): + appointment = get_random("Patient Appointment") + appointment = frappe.get_doc("Patient Appointment",appointment) + consultation = set_consultation(appointment.patient, appointment.patient_sex, appointment.physician, appointment.department, appointment.appointment_date, i) + consultation.appointment = appointment.name + consultation.save(ignore_permissions=True) + +def set_consultation(patient, patient_sex, physician, department, consultation_date, i): + consultation = frappe.new_doc("Consultation") + consultation.patient = patient + consultation.patient_sex = patient_sex + consultation.physician = physician + consultation.visit_department = department + consultation.consultation_date = consultation_date + if i > 2 and patient_sex=='Female': + consultation.symptoms = "Having chest pains for the last week." + consultation.diagnosis = """This patient's description of dull, aching, + exertion related substernal chest pain is suggestive of ischemic + cardiac origin. Her findings of a FH of early ASCVD, hypertension, + and early surgical menopause are pertinent risk factors for development + of coronary artery disease. """ + else: + consultation = append_drug_rx(consultation) + consultation = append_test_rx(consultation) + return consultation + +def make_lab_test(): + physician = get_random("Physician") + patient = get_random("Patient") + patient_sex = frappe.get_value("Patient", patient, "sex") + template = get_random("Lab Test Template") + set_lab_test(patient, patient_sex, physician, template) + +def lab_test_on_consultation(): + i = 1 + while i <= 2: + test_rx = get_random("Lab Prescription", filters={'test_created': 0}) + test_rx = frappe.get_doc("Lab Prescription", test_rx) + consultation = frappe.get_doc("Consultation", test_rx.parent) + set_lab_test(consultation.patient, consultation.patient_sex, consultation.physician, test_rx.test_code, test_rx.name) + i += 1 + +def set_lab_test(patient, patient_sex, physician, template, rx=None): + lab_test = frappe.new_doc("Lab Test") + lab_test.physician = physician + lab_test.patient = patient + lab_test.patient_sex = patient_sex + lab_test.template = template + lab_test.prescription = rx + create_test_from_template(lab_test) + +def append_test_rx(consultation): + i = 1 + while i <= 2: + test_rx = consultation.append("test_prescription") + test_rx.test_code = get_random("Lab Test Template") + i += 1 + return consultation + +def append_drug_rx(consultation): + i = 1 + while i <= 3: + drug = get_random("Item", filters={"item_group":"Drug"}) + drug = frappe.get_doc("Item", drug) + drug_rx = consultation.append("drug_prescription") + drug_rx.drug_code = drug.item_code + drug_rx.drug_name = drug.item_name + drug_rx.dosage = get_random("Prescription Dosage") + drug_rx.period = get_random("Prescription Duration") + i += 1 + return consultation + +def random_date(start,l): + current = start + while l >= 0: + curr = current + datetime.timedelta(minutes=60) + yield curr + l-=1 + +def import_drug(): + frappe.flags.in_import = True + data = json.loads(open(frappe.get_app_path('erpnext', 'demo', 'data', 'drug_list.json')).read()) + for d in data: + doc = frappe.new_doc("Item") + doc.update(d) + doc.insert() + frappe.flags.in_import = False + +def get_json_path(doctype): + return frappe.get_app_path('erpnext', 'demo', 'data', frappe.scrub(doctype) + '.json') diff --git a/erpnext/demo/setup/setup_data.py b/erpnext/demo/setup/setup_data.py index cec425ce6b..c4df777c88 100644 --- a/erpnext/demo/setup/setup_data.py +++ b/erpnext/demo/setup/setup_data.py @@ -184,7 +184,8 @@ def setup_user_roles(): user.add_roles('HR User', 'HR Manager', 'Accounts User', 'Accounts Manager', 'Stock User', 'Stock Manager', 'Sales User', 'Sales Manager', 'Purchase User', 'Purchase Manager', 'Projects User', 'Manufacturing User', 'Manufacturing Manager', - 'Support Team', 'Academics User') + 'Support Team', 'Academics User', 'Physician', 'Healthcare Administrator', 'Laboratory User', + 'Nursing User', 'Patient') if not frappe.db.get_global('demo_hr_user'): user = frappe.get_doc('User', 'CharmaineGaudreau@example.com') @@ -387,5 +388,3 @@ def import_json(doctype, submit=False, values=None): frappe.db.commit() frappe.flags.in_import = False - - diff --git a/erpnext/docs/assets/img/healthcare/._.DS_Store b/erpnext/docs/assets/img/healthcare/._.DS_Store new file mode 100755 index 0000000000000000000000000000000000000000..77c0a115d2ca07b2d8d3842e72196eeefae74559 GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIk*Y|peR=07!nf1 z;KaKTqJyCVtD;fC(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@RpmGQ>0?h+q zFpvw$$ShVUN-fSWElN&RNXswER>;gNNzE(C%+E{A$*EMxNlhzJNXkjf%LaCJp}K}N Ph3bE}S7aFE{{II6j1wJ} literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/healthcare/._appointment_1.png b/erpnext/docs/assets/img/healthcare/._appointment_1.png new file mode 100755 index 0000000000000000000000000000000000000000..9185da5b7ce43e762b008921c74d1e4a2d1d72db GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUpMX1Yitw+A$;~ zh{1{XEL2AiP?tQK8djhfP@F-Gfk8AmKUXiYpdcqzudp<+C^4@jGcOe=#kdGaXaNyI zJ~y=_F(t7i(JI^5#j_+e*Rwb{xhOR?&pEN6q_ha62?!X^0EsZ5!*T0F(dC|#pOlyr zl$u-u)Ccr2lM;|NU|`T8Qh!Kg0oZ1yAfUcT1_pEN`g{_TQgh-fORCBz1#ApW6Zt+=eXiCl`#K^0&$Wu5Pd16IS9)CC5`XN0oX5BP4cGGb z?fTc)ZP(^2Aei_&_sI=b)j5lw__GQtPw~zCGGqBfGs|_}`)3$`wYoGv|8IJFF}t;% zB#N^}Iin#k8UmvsFd71*Aut*OqaiRF0;3@?8UmvsfGq?-9VK{YNiHNKvsj@hwK%`D zC^=OjEx#yRAv3Qe71-^}&r8h7sZ_{GO)F7I%1O-22KI%qnK#tLQ2h^gy$plg|Nj62 C)waU` literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/healthcare/._appointment_2.png b/erpnext/docs/assets/img/healthcare/._appointment_2.png new file mode 100755 index 0000000000000000000000000000000000000000..901903ac3bf0dd95def3e8a0dd0c264873f6fafa GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUpMX1Yitw+A$;~ zh{1{XGE_$oP?tQK8djhfP@F-Gfk8AmKUXiYpdcqzudp<+C^4@jGcOe=#kdGaXaNyI zJ~y=_F(t7i(JI^5#j_+e*Rwb{xhOR?&pEN6q_ha62?!X^0EsZ5!*T0F(dC|#pOlyr zl$u-u)Ccr2lM;|NU|`T8Qh!Kg0oZ1yAfUcT1_pEN`g{_TQgh-fORCBzGp2>Jp6f4gypy1Dvr6vlp7_gm<|kR4D(~4k?|Ryq6Jl=XnpUEal#`g34eSeJGjFJgq52>0dKm_}|NjB+ CH@H0j literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/healthcare/._appointment_3.png b/erpnext/docs/assets/img/healthcare/._appointment_3.png new file mode 100755 index 0000000000000000000000000000000000000000..acac3260799b5826d4f6f349758b0f6591336efd GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUpMX1Yitw+A$;~ zh{1{XDpW@gP?tQK8djhfP@F-Gfk8AmKUXiYpdcqzudp<+C^4@jGcOe=#kdGaXaNyI zJ~y=_F(t7i(JI^5#j_+e*Rwb{xhOR?&pEN6q_ha62?!X^0EsZ5!*T0F(dC|#pOlyr zl$u-u)Ccr2lM;|NU|`T8Qh!Kg0oZ1yAfUcT1_pEN`g{_TQgh-fORCBzYq=ew=kWl literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/healthcare/._consultation_1.png b/erpnext/docs/assets/img/healthcare/._consultation_1.png new file mode 100755 index 0000000000000000000000000000000000000000..26693f4852506df640af77c74450e0c2e32d14a9 GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUpMX1Yitw+A$;~ zh{1{X8dOIQP?tWM8djhfP@F-Gfk8AmKUXiYpdcqzudp<+C^4@jGcOe=#kdGaXaNyI zJ~y=_F(t7i(JI^5#j_+e*Rwb{xhOR?&pEN6q_ha62?!X^0EsZ5!*T0F(dC|#pOlyr zl$u-u)Ccr2lM;|NU|`T8Qh!Kg0oZ1yAfUcX1_pEN`g{_TQgh-fORCBzc@ZT~u6*XRC{P#qU>zMLQ4|%kSoTxcgKhImBn})<&B&YN?jNhr z}kmc0h6FC}%VTMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1VAAG z>L|fGOL8F@nZ*i4sm1xFMaiiOY57Ij3YmE&slaY$eqLfuPNhOlYFddxQchxCHn1-Y S(m&Jzs{i4>kztVg{~rJj_r1#i literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/healthcare/._consultation_2.png b/erpnext/docs/assets/img/healthcare/._consultation_2.png new file mode 100755 index 0000000000000000000000000000000000000000..ddb28b028294b4352d4ae60f81767b0795d0e1e1 GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUpMX1Yitw+A$;~ zh{1{XFjPkmP?tWM8djhfP@F-Gfk8AmKUXiYpdcqzudp<+C^4@jGcOe=#kdGaXaNyI zJ~y=_F(t7i(JI^5#j_+e*Rwb{xhOR?&pEN6q_ha62?!X^0EsZ5!*T0F(dC|#pOlyr zl$u-u)Ccr2lM;|NU|`T8Qh!Kg0oZ1yAfUcX1_pEN`g{_TQgh-fORCBz3o}luewWg|`TaxCM4^6*gNM6+X70awsq6X962m8ZYw!Jjl38HE zB`grjI-8xXqmlLRG=?XgAKwP_iQYfAkg5Cw2OHnt(wY2oR(-J#?PTwqy@OMx;!fJX zs!LT4$sN{{f}V6(R+#R^5K#rdU0$*Bry`9;|ZnRz9tz;0)LUSdv8r9w_>T8TnZPGVj*urG{i R($M6g`XBBG83wuk{{axYzjy!u literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/healthcare/._consultation_3.png b/erpnext/docs/assets/img/healthcare/._consultation_3.png new file mode 100755 index 0000000000000000000000000000000000000000..75615ee82cf9d391f0bfa3a1fd7d4064b8ddbffa GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUpMX1Yitw+A$;~ zh{1{XC{#xeP?tQK8djhfP@F-Gfk8AmKUXiYpdcqzudp<+C^4@jGcOe=#kdGaXaNyI zJ~y=_F(t7i(JI^5#j_+e*Rwb{xhOR?&pEN6q_ha62?!X^0EsZ5!*T0F(dC|#pOlyr zl$u-u)Ccr2lM;|NU|`T8Qh!Kg0oZ1yAfUcT1_pEN`g{_TQgh-fORCBzj&q-7ZrA>P-%MP&b!J$1(cM22-D3jh8<=`;mepJA#s8Fn`(R<; zs|QDJBt0tFGke+94xPYz2a>doK3DGTK6SNxS|m@M;&j!QlcJxP>$$SuxLvW;BT!tF z7sXkloY4>%4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@Rz!n0ajuO1HBo~sAS*%c$TAW{6 zl$@%NmS2>ukeOGK3hZ{~=OyOkR4U}8rj;lp$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUpMX1Yitw+A$;~ zh{1{XI8;XuP?tQK8djhfP@F-Gfk8AmKUXiYpdcqzudp<+C^4@jGcOe=#kdGaXaNyI zJ~y=_F(t7i(JI^5#j_+e*Rwb{xhOR?&pEN6q_ha62?!X^0EsZ5!*T0F(dC|#pOlyr zl$u-u)Ccr2lM;|NU|`T8Qh!Kg0oZ1yAfUcT1_pEN`g{_TQgh-fORCBzS^j5oW#25D8Gl1$I;YnrkJDFrzRzjvc$Qt8=h^>cO7gS&%jTPh zv*z6PZ=Y)Vb)iyR^R+#R^5K#rdU0 z$*Bry`9;|ZnRz9tz;0)LUSdv8r9w_>T8TnZPGVj*urG|wyrCwB>VLTFWf$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUpMX1Yitw+A$;~ zh{1{XBvi)^pe}PXHEcjJpg4mV1A}OCey(0(K|xNcUSVlsQDR<6W?m{#it!wf;9y`- zM98P7<`tLZ7p3au7iFdwFlswbQWRT+x3@nVS zO)V{xQcVn#tpkcu%Q92Ttv&K{Q}qh+(vu2uGK)(L3^;+|2Lg;hJHY@(L%9r`FqKOf znV4CW54bjfWt1I)VT_4$pdxLc_yWcVub8|Bn1wKv6~c#;hA>mZ$}{s)^2-Uig8$Qo z{f8gD&iY(A`Br`C4&~=bJ}EI@HXWapy36cBrJ#4i<&4RX@>%>YXMa3a`tsK{_qn1I z)u+6+_+oHV;FZRiBil1lUQUsg{3vly>e$MXD_5t#o*QrC8~^J0lr4q(A_}9MV}4%j zn=5+dZV}vxqm0oI7!85Z5Eu=C(GVC7fzc2c4S~@R7!85p83LeA54__e7m|@#tWcC% zoL^d$oT`wPUzDwonOBku>~`koCFbN*D&(Z5l_(_TB<5uU`@+K^L{R+?_mK>P-2eXo Dun^Zq literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/healthcare/._lab_test_1.png b/erpnext/docs/assets/img/healthcare/._lab_test_1.png new file mode 100755 index 0000000000000000000000000000000000000000..36be754257cf83c2a1fb93e28ff21af8f6159da3 GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUpMX1Yitw+A$;~ zh{1{X22@86P?tQK8djhfP@F-Gfk8AmKUXiYpdcqzudp<+C^4@jGcOe=#kdGaXaNyI zJ~y=_F(t7i(JI^5#j_+e*Rwb{xhOR?&pEN6q_ha62?!X^0EsZ5!*T0F(dC|#pOlyr zl$u-u)Ccr2lM;|NU|`T8Qh!Kg0oZ1yAfUcT1_pEN`g{_TQgh-fORCBz9rrC5+?Kr5fBDWmw9TV#|0Qw74UT_htnFuhoo{MnfBN#Je=76K z{&CmUPCh*2+QVSSCm9>3Y%=s+5W7O%e8M}PZOpDWY7-AV`opO9l*x&QEiXgu&yBfv zcAz+GlrtIvqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0@y+T)KP+WmgGV*GK&?8Qj7CT zi;`0n((;S46*BWmQi0vh{Jg}RoJxh9)U*$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUpMX1Yitw+A$;~ zh{1{X7F0(MP?tQK8djhfP@F-Gfk8AmKUXiYpdcqzudp<+C^4@jGcOe=#kdGaXaNyI zJ~y=_F(t7i(JI^5#j_+e*Rwb{xhOR?&pEN6q_ha62?!X^0EsZ5!*T0F(dC|#pOlyr zl$u-u)Ccr2lM;|NU|`T8Qh!Kg0oZ1yAfUcT1_pEN`g{_TQgh-fORCBzA%Z=hPc+jC}%VTMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1h9nwsG|h$EXjprWELwFr55Lx z7A2=Dq~#Z7D`e)CqyoF0`FV*sIh6`Isc9t&NjZsm*}%RqHuHv>7^?r_u9snu`~M#R D$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUpMX1Yitw+A$;~ zh{1{X4pc`EP?tQK8djhfP@F-Gfk8AmKUXiYpdcqzudp<+C^4@jGcOe=#kdGaXaNyI zJ~y=_F(t7i(JI^5#j_+e*Rwb{xhOR?&pEN6q_ha62?!X^0EsZ5!*T0F(dC|#pOlyr zl$u-u)Ccr2lM;|NU|`T8Qh!Kg0oZ1yAfUcT1_pEN`g{_TQgh-fORCBzEOYH+bpEr<6n&r6zS{Q?tL%o>JzIW}tI5=1#iuiP_rK zO<@ZCfj-l#Qg|-47yId~J@7&1<)LD^`1+W`Ip^m~Mf=Gp&k$YSBxtWV*(&>GPK#bH zinB&JqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3^-Ed)RvC3t5^E+iwfSfMDjIKQ+g zIaMJozbIQFGp{5S*zL^EOU%isRLDt9D^W$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUpMX1Yitw+A$;~ zh{1{X9#lsUP?tQK8djhfP@F-Gfk8AmKUXiYpdcqzudp<+C^4@jGcOe=#kdGaXaNyI zJ~y=_F(t7i(JI^5#j_+e*Rwb{xhOR?&pEN6q_ha62?!X^0EsZ5!*T0F(dC|#pOlyr zl$u-u)Ccr2lM;|NU|`T8Qh!Kg0oZ1yAfUcT1_pEN`g{_TQgh-fORCBz6>^$q^(=C${vO)rD!i_rtNLIBf9a~9=UqKQ4XhR2%)eg|w%zU! zx#z!w(D6^RTBK~nL)LeBnp~gDo$-Ffo4GcpBHr^!IHaX8b8}k@-|>7nJL1uryeVbC z#5W2?Ltr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnix=2!J|D@XnH4NJeI{LQ!gQerZv1 zszO?RQMN*6UP&sj+nJx2n3GefkdvBLqL7r6n3oOg3llJUNJyjlAMRus2D$(L0e6nF AV*mgE literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/healthcare/._medical_record_2.png b/erpnext/docs/assets/img/healthcare/._medical_record_2.png new file mode 100755 index 0000000000000000000000000000000000000000..89916673154f61816a7bba2033a2a07485dd6724 GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUpMX1Yitw+A$;~ zh{1{X0aQm1P?tWM8djhfP@F-Gfk8AmKUXiYpdcqzudp<+C^4@jGcOe=#kdGaXaNyI zJ~y=_F(t7i(JI^5#j_+e*Rwb{xhOR?&pEN6q_ha62?!X^0EsZ5!*T0F(dC|#pOlyr zl$u-u)Ccr2lM;|NU|`T8Qh!Kg0oZ1yAfUcX1_pEN`g{_TQgh-fORCBz@})Y0b)|ZV=eSO$Tz@nBRMwWHLQa9rFFn6Kigy)XC3r=uDtqdq z)dzpx`xxWNdnV+_lIwXz5ig!T)qPU#8|i;ML9gqP_LhD61z(m`%T3rb<;A5LG1t6O z-qqJ0DBf3m-1MP(b$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUpMX1Yitw+A$;~ zh{1^$s2Z%J2dGOGO${qh3@FYZ#=sz&oS&2B(#7C zA)lLCl9-ZMl4zCf>*86Gn(J8{oLrQen&+HYP*Pe1(gXyIXMltc(BZiCq3CkY$xlkm z2}(^a0qO(#m`MUi8!#~F5UD?;vH)x|lLt^=CIf>xc6~mHNvS#Ul_gc>naP#uS(#-O zSy}1kiRQ-UDS4)q$*BxEnFa)PdR2CfY3zAw=nI?5dlfzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4FTj30Ckk$oh7-D zjLc$%qSWI2(xT*4g|z&lY=z9cl2l-~Ge0jeC#O;&CpE1^At@&@FB{kwMmA@tvQhmH L_k|3D-2eXoa+kFH literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/healthcare/._patient_1.png b/erpnext/docs/assets/img/healthcare/._patient_1.png new file mode 100755 index 0000000000000000000000000000000000000000..589703e587ccbb607d50ea8f95a47a28f9bd5519 GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUpMX1Yitw+A$;~ zh{1{X2~zNzsZCZkvu@eR^k2RJ`~1t*M<%>Lpp13;w4~eQ^J}X2!akm;N>^ zS-gIB@s_4et>>ps2W$#XT)Qx9k*(y33BP;8zFxZd@xZ)2X>I3UNth;{_4e6t<@YP! z8jqN?-dU0h$;d2LC`v8PFD*(=RY=P(%2vqCD@g@*JM;4rb8;#ba#GVu6q0fh^Rj_` TVUYfz4p99M_l*pL-2eXobFRgG literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/healthcare/._patient_2.png b/erpnext/docs/assets/img/healthcare/._patient_2.png new file mode 100755 index 0000000000000000000000000000000000000000..0ac360ae142814a07959e77b6cbb5869f155be9a GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUpMX1Yitw+A$;~ zh{1{X8B|9PP?tQK8djhfP@F-Gfk8AmKUXiYpdcqzudp<+C^4@jGcOe=#kdGaXaNyI zJ~y=_F(t7i(JI^5#j_+e*Rwb{xhOR?&pEN6q_ha62?!X^0EsZ5!*T0F(dC|#pOlyr zl$u-u)Ccr2lM;|NU|`T8Qh!Kg0oZ1yAfUcT1_pEN`g{_TQgh-fORCBz@e@89eW{X2Y&pTbxb)-a6H{N$ms+8^DunG};?}P=?`KNL|fGOL8F@nZ*i4sm1xF zMaiiOY57Ij3YmE&slaY$eqLfuPNhOlYFddxQchxCHn1;@&Ag!|hU$N~>tz_^{{II6 DM)S7h literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/healthcare/._patient_3.png b/erpnext/docs/assets/img/healthcare/._patient_3.png new file mode 100755 index 0000000000000000000000000000000000000000..d8e0ed2cc85e22ca41e0849c8eeb1780f10aef61 GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUpMX1Yitw+A$;~ zh{1{X1yn~5P?tTL8djhfP@F-Gfk8AmKUXiYpdcqzudp<+C^4@jGcOe=#kdGaXaNyI zJ~y=_F(t7i(JI^5#j_+e*Rwb{xhOR?&pEN6q_ha62?!X^0EsZ5!*T0F(dC|#pOlyr zl$u-u)Ccr2lM;|NU|`T8Qh!Kg0oZ1yAfUcV1_pEN`g{_TQgh-fORCB4Xp!;Qp++^%dL|Nax#lc3=B9qfaU`M zBO`=nfYDGc11C)75=JIw7Ucsz5DDc2AP)h7vcpsbD5FaQ%;4Y^lZUVnrUGLI1sK9i z4J*&gOUW-MzR}4RUT)OLdr|tE+RCC#qsDq!i_dd#+aJxrK=!clJRl%{9y3g`r z*A{(t$aZ7AyV*zj_T2Sr7innx*fnqWRQYYs!ewH^JL_al8_4%0dCs2rk-4{E(ITn) z*C&UCUl+|kdE(>u-NuQ#mpwY>sP`@Vx|7GZeS6x9U7wssarP)@Gz3ONU^E0qLtr!n zMnhmU1V%$(Gz3ONU}S~>sG|h$EXjprWELwFr55Lx7A2=Dq~#Z7D`e)CqyoF0`FV*s hIh6`Isc9t&NjZsm*}%T=a0oF}|HFMG!yxznKLA9(%CP_d literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/healthcare/._physician_1.png b/erpnext/docs/assets/img/healthcare/._physician_1.png new file mode 100755 index 0000000000000000000000000000000000000000..bf7889bc997497b18ae4c004062a31a367fc0d98 GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUpMX1Yitw+A$;~ zh{1{X6;wwLP?tWM8djhfP@F-Gfk8AmKUXiYpdcqzudp<+C^4@jGcOe=#kdGaXaNyI zJ~y=_F(t7i(JI^5#j_+e*Rwb{xhOR?&pEN6q_ha62?!X^0EsZ5!*T0F(dC|#pOlyr zl$u-u)Ccr2lM;|NU|`T8Qh!Kg0oZ1yAfUcX1_pEN`g{_TQgh-fORCBzm0GU5t3F#@vYE0jfIX%ET(O|}#h{w&1^;)gkX-k#<86DbQ2Hgo zPZ{4H&Of^Tr_;`9`5zmFoOX9GnP2-X;5D1G`^nPQS@)-6 zE^FtyzVA6cDVfDxbA>!BE}}SdlrtIvqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0-z88 zb(G+pCApA{%wmP2)Z+ZoqU2PCwEUuMh0MH?RA9F=KQA#Sr&1v&HLXM;DJL;68`u{H S=^yF<)&Fqc$S}zL{|^B0_`gj6 literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/healthcare/._physician_2.png b/erpnext/docs/assets/img/healthcare/._physician_2.png new file mode 100755 index 0000000000000000000000000000000000000000..a726f9a85ba8a938095d233424b221524da67959 GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUpMX1Yitw+A$;~ zh{1{X4OB-DP?tTL8djhfP@F-Gfk8AmKUXiYpdcqzudp<+C^4@jGcOe=#kdGaXaNyI zJ~y=_F(t7i(JI^5#j_+e*Rwb{xhOR?&pEN6q_ha62?!X^0EsZ5!*T0F(dC|#pOlyr zl$u-u)Ccr2lM;|NU|`T8Qh!Kg0oZ1yAfUcV1_pEN`g{_TQgh-fORCB<4Xp!;Qp++^%dL|Nax#lc3=B9qfaU`M zBO`=nfYDGc11C)75=JIw7Ucsz5DDc2AP)h7vcpsbD5FaQ%;4Y^lZUVnrUGLI1sK9i z4J*&gOUW-Mzcc)DLw`a$v-;*yat>--68xfIn=Zj3uray547hXSYEsrrO|M|G) z{?ijHHm=&XfSV`a*n}zWHruX#p5goX-F&@c@9yqaG<7p*Da|crpZJ|;pIaw$U(rT= zt&g`JCvXKg>7Vz1{2|@bL{mkvm*eG}P}dZz%|#)HnJ;IfID3>c8UmvsFd71*Aut*O zqaiRF0;3@?8UmvsFfu~`)KP+WmgGV*GK&?8Qj7CTi;`0n((;S46*BWmQi0vh{Jg}R hoJxh9)U*cA%8dX3 literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/healthcare/._physician_schedule_1.png b/erpnext/docs/assets/img/healthcare/._physician_schedule_1.png new file mode 100755 index 0000000000000000000000000000000000000000..6dba9d58aad12c4c06a24d71ee28c381ad2a1974 GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUpMX1Yitw+A$;~ zh{1{X9aKjTP?tQK8djhfP@F-Gfk8AmKUXiYpdcqzudp<+C^4@jGcOe=#kdGaXaNyI zJ~y=_F(t7i(JI^5#j_+e*Rwb{xhOR?&pEN6q_ha62?!X^0EsZ5!*T0F(dC|#pOlyr zl$u-u)Ccr2lM;|NU|`T8Qh!Kg0oZ1yAfUcT1_pEN`g{_TQgh-fORCBz7k}LnSbOAK=l#X9-%=M%yMEs4qm#qod13Eb>(^XcSDB%p;&?c& z^b&`8???BHj9->r6AP+6R*B9zvf6)EiIThP{b+^!nU^-7pU!?xJoH?(l$5{>si0Y0 zQYg+E<&1{FXb6mkz-S1JhQMeDjE2By2#kinXb6mk0JabSb(G+pCApA{%wmP2)Z+Zo zqU2PCwEUuMh0MH?RA9F=KQA#Sr&1v&HLXM;DJL;68`u}dX5LT}L-jx0^)d`{|NjF3 D+kUoq literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/healthcare/._physician_schedule_2.png b/erpnext/docs/assets/img/healthcare/._physician_schedule_2.png new file mode 100755 index 0000000000000000000000000000000000000000..02eec95ea6cd14770b24dd0e79c09fdbf4f272f4 GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUpMX1Yitw+A$;~ zh{1{X15`&3P?tQK8djhfP@F-Gfk8AmKUXiYpdcqzudp<+C^4@jGcOe=#kdGaXaNyI zJ~y=_F(t7i(JI^5#j_+e*Rwb{xhOR?&pEN6q_ha62?!X^0EsZ5!*T0F(dC|#pOlyr zl$u-u)Ccr2lM;|NU|`T8Qh!Kg0oZ1yAfUcT1_pEN`g{_TQgh-fORCBz`N7v6o3Ge~pGwuypWPg9ti93SaH#Aut*OqaiRF0;3@?8UmvsFd71*Aut*Oqai>b1V9}ncxOp2BqOs}p(wRDzqBYh zRUs|EC|e;juOt=N?aa?h%*m-#$Vp8rQAo;3%*zJ$g$WovB&1RO4|lQ*gWUiB0F@lE A@Bjb+ literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/healthcare/._sample_collection_1.png b/erpnext/docs/assets/img/healthcare/._sample_collection_1.png new file mode 100755 index 0000000000000000000000000000000000000000..c72cbf7759ef2f4859d81095e23df4bcf68b43f9 GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUpMX1Yitw+A$;~ zh{1{X6I4eJP?tQK8djhfP@F-Gfk8AmKUXiYpdcqzudp<+C^4@jGcOe=#kdGaXaNyI zJ~y=_F(t7i(JI^5#j_+e*Rwb{xhOR?&pEN6q_ha62?!X^0EsZ5!*T0F(dC|#pOlyr zl$u-u)Ccr2lM;|NU|`T8Qh!Kg0oZ1yAfUcT1_pEN`g{_TQgh-fORCBAQmg}tQp++^%dL|Nax#lc3=B9qfaU`M zBO`=nfYDGc11C)75=JIw7Ucsz5DDc2AP)h7vcpsbD5FaQ%;4Y^lZUVnrUGLI1sK9i z4J*&gOUW-Mz9IDra|Nl=az0{O$_g~!NVy^k*hMB7lov?nhiF?r(?fMfD4*OMa zIBq}7+wAswm$~S{I_ru{{s}GetKOTodd*76-((i;l*{ov<=6Euwx{FVFRY7VGV0uG zj^eCQ&S(gXhQMeDjE2By2#kinXb6mkz-S1JhQMeDU<(0IM+x3pk_*YmELJE=EzU13 zN={Ws%P-1S$jmEA1$I00^AdA%Div~4(@GSQauV~hfqh|Y<_$G5RR6 literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/healthcare/._vitals_1.png b/erpnext/docs/assets/img/healthcare/._vitals_1.png new file mode 100755 index 0000000000000000000000000000000000000000..cae923b68cd2cfddd009fc509c2bbedde96b2142 GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUpMX1Yitw+A$;~ zh{1{X3sgrBP?tQK8djhfP@F-Gfk8AmKUXiYpdcqzudp<+C^4@jGcOe=#kdGaXaNyI zJ~y=_F(t7i(JI^5#j_+e*Rwb{xhOR?&pEN6q_ha62?!X^0EsZ5!*T0F(dC|#pOlyr zl$u-u)Ccr2lM;|NU|`T8Qh!Kg0oZ1yAfUcT1_pEN`g{_TQgh-fORCBzzT4J(ShCxs`N4|rjhgZL?`DRodt6Q1^967Rhuhpkl8R3SRL|fGOL8F@nZ*i4sm1xF zMaiiOY57Ij3YmE&slaY$eqLfuPNhOlYFddxQchxCHn1;@&Ag!|hU$N~>tz_^{{II6 D&)&F} literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/healthcare/._vitals_2.png b/erpnext/docs/assets/img/healthcare/._vitals_2.png new file mode 100755 index 0000000000000000000000000000000000000000..77846b9a1c76ebc9055dbc2f582cec2843568da7 GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUpMX1Yitw+A$;~ zh{1{X8&pRRP?tQK8djhfP@F-Gfk8AmKUXiYpdcqzudp<+C^4@jGcOe=#kdGaXaNyI zJ~y=_F(t7i(JI^5#j_+e*Rwb{xhOR?&pEN6q_ha62?!X^0EsZ5!*T0F(dC|#pOlyr zl$u-u)Ccr2lM;|NU|`T8Qh!Kg0oZ1yAfUcT1_pEN`g{_TQgh-fORCBzvp=1FX7zSK%eT-*?E_A$TGv}xTkV`GqsiCyo=qa@x7*_7x7+_a z?<-i-QjmA!W2^iUp|)4Ae;?{hX*MeqsA_t+g+uB1!S5H3%YELq?)T?}%&WmGj-C-& z(1_x!QO;-xjE2By2#kinXb6mkz-S1JhQMeDjE2By2w)2VP)7;gS&|FM$ShVUN-fSW zElN&RNXswER>;gNNd5q6tLJn$ z5)9018cR`8MJZ8HGDSx_pry4L42)(_f)=7Gj!aVJK^V&mqwhSM>2be^-cpOaK8eBq z?EfB13=_U3xA*?^0MCy@(o5>hoAN50TI8W4NXpzrR0~`xZ?76e)9c~dS82f z`d*TM7q!q%G%i<^!b$1?kwmEPFjd_X283SagdR$Z}^4_@e#%(P7a;s(I07( z(U#_0+Y92xIiN()tj%^F9o$zi5$7hp3pv%&vDjb63$O2$a;Pj*W#N@fMq*ux%j zm0MeSsIZkh8Z*IIcfB?qb_O|jJQ5LWzc8u@=X}3Qc87If!O8I|My!mCl2v$@+(bnz z|IzgIWyt)p)Aiv4MC;LsU&qmt)^myxuftEhZz~$oS@HVbB{TqUN{=b5C()2|qc{yYCRK3nTt)8ma++De3!llkgD7zqu~bywRdo#L+*gfi$Xa(* z&YTY$;@~Gp7QiF)qr4^?=N9gw_^Kc;E-WRYMC^Y)(}B<1!DIc+I&^=0xi-cWX7UJP~5S%9~=ihHNZdxQc9S=fL?D*w-)$ z-KgJ~sk*3HP<{R1B7LyO#4--%Cij)Z`5YWih9>!nEufqn@jLNJz=v!k8uU4|{Q$=t z?_wNYv?-BSIj+Tot%w4_;yF!Y92|)EACy>#!EmQvjjQ>~VF|m`tFiYG5WC0iU#25$ zcK6!9U4UuoT0DAoMa%!(@581NjF@mu4!lw=4O%>w72n`9+|b-yWhF$#pknDs4^_n4 z5z%7S$rn~wkz(w52xGOOcBy$8$cQhVD$vX_E{J) zu-GP($-+?)s)UwwbC}qY-vZ%IpMC1BHR`R|`QG8&A8Z&`gIKdZL$!ytXR^obN)poJ z@H5|mw|SqNjR`L)lD-?TQn~ir0lPWN9WIl!>LXXL*9zrP%GEn>feuum(5!FF<19Zy ze^`uL7abQ#<@3m@$W4fxh5|nT!xF>P)73*DVVoa10~?bs`1cv-lIoX{;6GrB#2G4N zWBx$y{fPRp?PJqNG2WLMI2l+O)OtjEB#TbUB!AbRCy<4-#faxhjT`;x*YuT!q#Z}ndM>Su}2g~^3p5PtD47jm31$4k#%u(o0@^mTFnhD z_stmg20wjAo}Ee_b057qRXsjC2A`fBryh$RCmt>R%2+j7o7hBMNWY7iMAvzPou z1yNdhgKnX2*}^LiEDwz9yc4%y8n~*sUvWxt^=UriFygY~^5Ja8=f~g055{NGU?<2W zOvKN}ca}<)!56C*M-;P_%@rT0>?`Rhsc7VtW@x0Tzf!tX63Tgy4HWB(lZz`-Ua+ii3uBty!bw9RETgr_Ag;}4QEvq`k7 zln*mHsyjM;BOmeu@L0=r*{B8Zk6)vbPrO;idWM>C19NjZjH^TqxgRwq?508$~J zAe(S1tOJ$;2Y_5))(!OyiQz1*Bke1#NiDE;sZOEhh4#1>k9LA~dtG8}p|;yh7iS_T z0w=SLm<^@1PE+7M-aKk!XDxQqr^Ys`=!T{`=DNp~?5*ng)hNokye50Y|8b@}ynbn$c}^-lHr7k(`&FOW1lwWuu2^V^d!kpM_e`D9&*mRVOzc2f3v z_TC;e4DBw-S7sRTRe7+x$F(!x8hY#c?D!-O%nu~|@-RSM#_p)|755eM&AL0kkG@tw z+=BmwDEoW|egjb+VH+M7UJh{=;nnj|#R!^$_$u-Za%xe$cTFLgXnLqlXdsmSklT+< z5-}9-C_O2!Dcr;aqdrFsMiG31gbR`g$TZ|az6rDHv)a@!dJk#u=FUwGN|!Vm(zz6a62ow??Zi=cd2r5xkJR!KX2<{TrFQ}$E8Am!2X>T4%_4_3t3vg8#=#5T z*$7rr)+shj7YDkXWll|}nUMC2TY^g+(qaLNZIykHZ}Cla zi$O)_dhAVJBkXWMRR27Q8`=(}M^fs{$ zVEVVz!C)@J8j`^HC;GBq&e73W2&`*Pzol?Xw)rks26HC*<~v$xkP$Z#i3CFS##qa1 z1n}!dqE{cd3bFDEsJonLD6rc(0ud+^wmG(OQAx{~=ij1p6k$xGk@zkVbyUIWf57K2`|-P8V%XO(da2RRX|9I~$5Ltvc@h_psfau9iU6+`SWCsLtrqnH;cz*zC$aAH zCqXD`JFf1Fm66auxr&w|O`=z&QD#tQQleF3R1wHguT(SgWLr@^-j1b%SOv1{1F+2F ztm<~7AW0c~6JwJzz7N2Om7viicxDMbe2Z9XG!VV5-L|{4ORZDGr~THSXh{cmnI-zC zI%Z9zOCDZs7lIc77Fn~Rj}OTbM$bl~rx34$Ekf|JB7}Unz3;X9B{#RuHy4>(^*P&l zZ+Q12S6^?=EX)VE?XNW)4pBvU&+w&i;|lJdj&H=Bys+Gu*qk>geH_e0ySCyhI+5FI z`}Jiyx-tvpQ@?M!)`qTwPKCaX&Ly@m%))oZao7PTf-Xc!qVSKlT?_V9{2}4*?%yBw zBN^KonK(E$+g*{QI?myI5XvANk6nuFPGXIsO;R1=?>dQ-OJDqy=YNXD72BVBNoLRq zqcoFRq2mgXIIimUP<52wg3s9q}Ac)n7$9T$o(afp4(a|eFFVQFB+3fg; z)U?)IP!I0f&D4IutzPsHpS1zU0Yz76RTyInl zg1MLKM47Kw@k;Q-!c(I<O^tjEwryvEI>RIG2RYpqe6 z$59;NNm1Z!AoehTT{MzuTSio_%}=Sd=E2$2*mB@;Zxv{mH*mdDDEdm9*|(+K)6DL4 zP2D(6p06P9*G}L_1Jl&55m#xO!IJ6DRHs-=hF8(U!J^j$MySsqhQJLwDc}V^;WzXW z{$t-%fbM;{+piv{xmPF58TxNKD&3vTtyeRCa-ZL?hqXwhlw@z0M%w|Kh1z_0j;Hsg zuk311^AYC6uBMCD%gW*_&WjNCgr6r<&dOsoV;GUMZ_#j|?{*a_y`R+QK+lNA>RITz zS(9w`y1M6RtiP-O^pV=x<{SIj+ZWf+P;??y05;du);z3j2O9i(<1pZub`s;^c8YtP z^=b>tn}UPoeYTSw-QLH#!XvDZ@by7*6r8JwqIK$ zm_u(jMo7Iqwt)Kgt0od`QB=QFP;;Zmr$2n%%H8@|{5e!vI%O2O-*E_KH%`Ckr9zU% zQt6FjaD(`Lxl4s;hR=PJ(*T+VK~gH12}jr4N$W=1+sTbSXSk-lc}=WnrJ=eK#FgA8 z>S=r7xE$WT=%=x#KX^~=qm03R+mEPAf`M@@kV3j7^c667_3m-~X!ndY%`NIM+FLVO zkke_mY~t(I&5hjyhHbmy6b!csivJKR3=se;9ns%{(b3oXSyvR2e;k!Rj|_}6BZ_e5 zOTQ5eK|}v^VlQDpbI^MXhL=JN*@|13lOKP1E*rUO5?%yfb~V@w-J$gcu?ZvOMUl;3 z@^Qdc1XJZ<PnCy z>ppABy;vgmC@Xo&kxSj%X0w*8llRnTCB^L$d2Juo6CzpSMm#-5QctK`9r;CUE;-)gP1o^&lquyze%thbHo!XAVofF-{d8&ZRN!) zCvLyd!_d&4aQphAXhU{`fC$Vxna<_<@uAq}A;^TT-wt;cPly4)+@@!1aC|zsI9RzO z0}yMFI*$(~-b7=n*7x>mso|+`F>mXiTAbFdV!p7r2woPnZ~EoyVxZzT-L=*|P;_O^ zn-`+*?YGYg;g?S)Q*ibEHX7;&>zClSo<{#L!oFOK*-?B0@@O%e@}l$&g`vkpLlL2N zM_eW6`Hn38fi70|ksgdp_%-Lq;p+Jv^1y6l%tSuXREYLFnLL4Uk1g9XesL7hJ{%Jg z6J$;HJ$-9t^iOr)i2EW}#Ew|6bU64qkU4tlQ|pV6>OaDNeUm}BD4L5^6Q>{85hN0s zlc5xS%=tMl>NA|A6F7x|fuW(?vpmn*VUJ;tk%%On#r#ExQH7%SY zoDh6l5IU;YCz?+`!aH8=VpS!6kBx{uiET_`ja{TFVyY_5E-WrEEw;|96$QLw)M*!A zi`^(~9Bh=#IBj*hNqw#rEZX;z%Ce9d+yJe7X_W688jw29l4d;dq$Pl6wO;+ zM)Ro(T)Lxqe7gA-!{?)M?*gX`*A{3=!$fZW?$y@{%2JA?yu}imnskS@wX8#BNm=>U z#5;O1dH`jGkSGni!|0fP(B2mx14nC&$xSBWAEWa=&DY<(I~+vT9a7&}jZ22vT23K* zdzkhf(Pm5l)EK6C05f$SF5c%F1l9!oX|8&2ba_3*3a)+26z0AAALKJZ!_#_gtC<`6 zgEpCb_m@9Ni_d)ast9ISzjHX>mn^fhC|~HF_LgbfF407`d$=97Uwi|b_SWzBU#Hw> zy?U%oUc5d3sr%SeatIRQ#*6pkWjuIL>pXK1GdaKNyODvTj(NV*g{c|zCU#08gdiL1 zHELN`$B|MqVT%}2o~|NKF{s$iLaH946<*+@QJ1EPBP&Mr`|@Xv@VDsHpJciPzJ6L| zKeDp~TQH4>k0oNwAoXw0Y)OaReIxKhxRHMj3g-Im6BtkuU@CeusQc9z%+{~nyYW@t z@Nh%&r|Q~W_tZ#6pGo&nRQWmJVGU08*YjKo@Y@gKBbg30O2;B$5|Y3N)td$|^{ko4 z=MNFNZ)@{VRa;es%1|wutu{btwkA`@KPskm*s9sfxe8g4xqN`OmJaiSbDrN4jS=^T zh?;oXod%pHoU)c3#y{;;Y_M^M=a%!_x{ssHAGK%R!qCr-#1I4Ec|f*F0^>$Dhu2CtnULpZ(aXU3DBd znGC-fTuPuW`&t%1)i*T@NNCUlX-rQGQ7LL!u3hSr zf#}sFKOevJCp1dy+_g>zM8Kpsw?x@e%iZ5y9@0M|VAS-EyXJqLfq{WTuvFD_)|8Xw zHL8@269*Fug&+zU85zH$DUetBz4+hh&?f;33ukA0US?)DH#a6Xb|yPV zb7oc^9v)^EHfA<9M(7)iP9C<-M(&KZPLxlJ{Leb?&74deE$y8x?QF?@uWMv%=i)3t zLGgQ||NVQS)6CuS|8}x<`g<(s0hxb~FtakTF#p>$XG`G!pJ~5Go~Hdd*VA_VzZc_G zv~)MK)_QMgV`l3FB~6fpV`kNG91xHIW zD3^ZoLXef8`Tz0T-}m{Me>3Vo822QVKfgl7B8bAz{J$a=L{TeH*M@-+hLL(NqUsL2 zw}|MCiIg$$~y}ND*w$o?xjD&$hBJ=;Ri*Pp_JQ&4w zmF8c@{G(AYSx(1M6`HXAZ^i$;L%}06RIf&r__r}{Re%4KXnptAf7?^B8V0uRgC2MI zf06S0aU~B*j`!Ku37h{s#os*xJ|G|^kPV_gzZa;~?6isq5rbyg;;LU5Df z*Y|;nLjTQ5bL6Wmmyge&%ojF-OX;uQT06u^O368MHqZTDn8A^62MWSX?04b6{>A#1 z*NTpAlDvQvvWKv|C42hmJZUHmH?Hnz!efwuAK&~*v^0JJV3ix+ZMupX{KIm32I(a9 zFPeG;!83<4?7##nn`^fSf~Pl+jisO$DK1tfHKNe%777- zOdC4u&g3^RjtZYkag%nHZ;e=+GH-F@&-44sU0koDdLpCqsm-4URw_lojpdr9=jv*F zozvbfKc?=}EJqU!@-JQ`D;}JMZy%N*vEz;?CD*>(v+vqjv z(2B(F%(WF=H!dj&r&Qn?PIW^q<+lKWP}9dBp5Z&z?-mK#5X?1jHB+hLXW6JKE0;D} zYiHUKahRw}5A=ighdMNXMV}@Mq6E0DCc@Qj8f?wc!lUZ@$JBjOPRFrTl*3imo&k?${-;~!Q+ zXxqRzHcKs{GKq(fYrQ!-y3_3I#s|=;jgN>KuTHnZlUdN|lS#T*r5t)R`czeM9Zn%* zzlk%@(-ZWLnVWXRVL?xH1TQoycvY}YEY+UvUIflLvkZKZnVJSZzuZyj-kEA^{}636 zm9Di+Kb!FR)n8MiX@g-0586t|!+R@t-PrOyOjGh=5#{{)X3+4nj96I_1bE?CJn(&W zhxlcoA$>4}PEyCbT2lKg3t>03(!)0$XN6chFKsXKDC;jP);Ek`m80thoeS5gpY#fsSy5CV z_yy#cS>57(FkvIhGQcm?^J2S9CU>{g0oFwQkS!wRz&C|;(&!O4tMVI8iAa&Ul^w9r z#cD#CTE38dZ4Rv${b?<;S5PjY;odoT)lo{YYiGZ0P z@#G18y(}N2(32$=O9qVHwBET*TiSb;$`kSBp9@t^L=Sbw`|Zc>s4zcrCl@qBsWx|` zmepgn$o2qrjDG^^x+Wu{>3U1qowL*}&iwW3D+};Q$r)*+Em%i9u)D!A7fDfL)rliT zzAdoI7oY&-#D)&{Y$i)JgYNCNv!7l<>-;aeqLR&)JGMs(QeDbROdbdTz-lY=)F1a& zH0+Erz9Ios!meNCllj2Fsl$g}HOUm7g1V3=dqF@lrP?VXZKCHdY|{>YPFHG#>cj_R z?3L3ij|&6-DmCxxTrg2j=>zYv)&~oqYp>-r0QLnX{kAhJu{%j7Ab_%Z=kb?fk@z`< zvj&_zamUzyJ*hNp7Xh#Uo{|TygUJxFy!H{u3`0r7{e1z&QJhfy(RAdd1(?jEI^jL< zvoTr48~gd5x`W+GQ}tOLc99t&I_(7fko=x*o`$(kX$J76*0|298D2(o-BW~f*X&|e z;p4QOlK7;)yE4EoEhChtx68Q`T2iQCw#@+;~5W;`PH zVp@GW1Yomc&A8zG4zLSQ9RhBU!)%n%@o{dhGAR>1sZ0meN@npYh`6W|iA)g>R_HcS z((m%!W6L0tRrW&#MZM{O@vW30xeFzDU{7ckR4f)!sNL#aS2!w|*LKh>3?Y3CQ@=QZ z5U?M81p3zLR?S8Kh@aDCQQWU6GH*2o@f^1-oNqGMHMKCtqdjrU4ry{SrmW5C;U`)u zyIWHm>~Nc2?x!7|BF}YV#I_`3@LmPeD+y4~D;a~4ZYx4{BCiT$Rfd3 zUV_1PZ^DSxyn%O%HgB18Qy}sG7};7kkX0>1rav=*7nfD|w|Mazku?3SEctiIUUq!6Ea z7+h<38k14S**8`v$^9qlD)PY7-EL0j#wQ!8$D?mz3TIEk`T9oHB7Bh*yxmSMsEmE_ zw5BRv009a*K;aXUk&`qRFxBA)c!bH`7RsYi~Q4N)PDUJ-1!@{Pf#&g z%I>B^@%}B|t7b#t2gfFh|fVe8U&|CsaFGu**FBy@(=V?q~+6ZZ5BmZy3{_u!nX ztUN)dGGT%GTj~5UP~Z`s)38y)`oon3wXWr=U^pV* zga(gZLw@60iYnU(uq=%q%BEDg3VO9%iXLs=g$|8l!nSRG;)t{@3% z6hNG8^e{Qi=~Bu$H`fraX3+Vd@ta8jgKuK)#n46Sei-1|4luOi^I#rn1@t&j?-^=k zq>{rAd0%wG@kT+0U5`$tgjESldn;0pzp?WQ2^%ZdQuG8m5gWbwqv!#H=SS!p$(ZJRWKi8Z1o|_B5Wssk7>Q}2K#m;U4T&*rU zafL+OCcDn^&F1Tn%?9o^2O^Q*=Pb^I!{@DbY3DrT1x7lSPGv`Wy4qEAy>#Vt={FX* z*^^KX0iEylh~jF0_3nL3@6#f6<9x!d-At{eXXpF=Qh%YjnGS{D;Kmb`A^5M2xvOUT zM+cEGW_`sJ?lMPsd45oB5&21g(C{oD!E=9g2&XWeW3-C5Sc0jvAkuC*mjuJx%auy6 zM5|2y$M7ov!^*;Ji1D)5`wWRk>d~-dhr0T`Agpj_V!7E%p~W%dk9ZqWE+L7eDY?E% zJe?#0>gt2O_m^Qc1gD?t{8-}>t=4)3PA5kQ|LC6;Q%t>D+{0P3pipXOmfqQ2o8N?( zi(_Bb9c}Hhx#>4h&p7uf=Ms9e8L80pbZtCgr+HfAVdCe;{v;kl^+eCnhN@o@fAk@n z8y2d;@}Z|t&kYO+#TzMS?XjD@a&WV7k2t*t_ls{aAKKI{n-(FX*k?My1O50Gm3kx= zi&uO2conwTBX=gWANBoyoOc{0#aFN|cGo65!~sBqKCVA!lEk-154m>}Ef4NP75L89e{`|qO||O*sM1iYxbiiR zIL0E6>`3e(wE(YCz~>XAe5$v!v;e@e()4@`41!J@eu=c)us{KyhU2a7XP&HG&CJCY zZcAOdHLahc6f0M6_q1%+b?q{lj-Edmlq1w8)X|G^pcdnSaFB6DD(A6k=JRE>cq7u~ zc~@b_bpjtv0$0QC;!)e#LqyZrv4jwf(JhfZL4|fni57f#bfU-svxEVtd3s z<@5V5ek~)BoSRisS4ppSH7lFvm}QnH0X^b#9*7H}U5NVh2} zs#!L4HkTWc4jf9fGB;N8rsb{os>?9E!fjt@GH`A8&ZeKhBWA0q-WOtU>41I;dINCu zEjUS8cEw?Un_z$X8YQ>B5fu~fK zKg!>RFFGg=Fb0Em&Pq~mz=vwn>2iz50k(JZ&NkIaXD`&`==;aB&K3frK^6FE;@lQ6(cYuSSN2~4J6wl&lddw#8Jo!S~DV@4>_F3_}a~B`$4-N)j zJd4#|hhCG`d^E3J zAb+z*>_MkW>gmI9xX|jJ(==*ZS%5$}fU`+#WLzNSvw>l@tnOgT6lvj5-u|`u&RkPk zy;Ts-&zK(Yp5U5v?aFMYML_#uxx`#imRpv3YFSicPnGIzs`}eVfa$j&PdDk22!IBb zvhc{vj-dKjRM9SDF?!TfuvHX+drNdrR}4@Mgn^qF<@$Qd79-O(g~w0`-eMG4?8M zfUZu`iXU^o!o{a17kUC;@W;eWwQn9)Z`!vln;#M_`b>KF;xd-aMATDsM4Z^S&z_$? zRjd5D;G5r05bjKd`9~vvxi~<)+1MT3_ap6m@JCLZT`kGQ1vf2IgBcTP!yIl7+KVRF zmUu?a)@)VG;{+Ih^_;+mY&%Zx%1DS%ou5~Pnr$)@kwZa->uP%yD1$hTuY@P=aSy!g z7dn?>x{s*8?@f9e0j%V=$+<8+W^10e$jr?7iLNr3I?c`w>UAslMiuRcYotjF!pz^iZiSJ=8)(R1=ntmoFRET}TYWK@CZz#CI|LIwbe z=NM$bKDBs+XfJf;B{I$LF_(P`rB_VuIo=CCYP!I{!|{$d5z2s~-yt_(g%0h%oga(?Y|x z&#wxTNM@w`UK12Zyz1YskdOe`M5DR@Z!zXhXm`bS4kt zZtyHdUCY+Pfae{7xd0)AH_!~Ab2fE4L8^)!*Q$Owe>Rul<8%__Hcl$uveY(MF?E0G zIj9!wQCTQI)u~8%)7+=jX5}{pvS^sGt}JxV)i)2gd;bT2b+y55-UB%gIRoafgtIx| z2%GkmH(eQJ;(ARi_gm*Vjx;^i4HU!CiNl-9kSiAzV-cROLt3FPm)F-4I&DVS;HP951ufm&{Y}AoGz(Nl*sjSCdx3|ZrMy;TA z`uQGLotKq?HPl7AnlT9(brrkr4EJMe;I6Q%9^n-$1de0y#s%oBAV zhx$*3Ce4WX@)wN@iGu0T#^$t>ji1rl&z3|PU#NG^eu)HMqLdfh+epba2tN@nw?0rC zUJ(KRhqfu*E}{BDf@Ugn+@&eusZuRPvWg?3>(ML3;8JxZvE&fsk9enHT~?rqJA_xK zOW5alDhNgYQ)m5+Q#JHao?z>LkbD25Zy!Joa{MTij4w}O1de9R60f7I!WS1gC z^H3{|h>L&AjN{9oDXimqfjxX_lD|PD!QkM}?$)W@(jUK3c(x~!=33l8)2)>%6a^aP z=Wv1)n0N%`S07DDw;31z2)bAr4svB0sq%zyp%nU4LyJ}(?_$|7kFWxQl^R^GG;^b} zcza~oNn19Ye;0*{_uwF4HfZkHM-56pfovT1XH6~D7U}5;^TID^_sac@sJVY< zn!jEl*>g`;dSGYBN=`;SJC>G``$tZzXy{Kt`E~DjVD)Gzs}UAmsBIZPMGJS%k52R{ z5ukyk*Gv=;$4!WGGDmektO~E2|B3~r0uBxm5?egiu;-_i-NJ$OhkpSm*wunDM>+Xl zn@feBf6RFM>WJAxS((D$e-zb}WFj}ZQ$-gT{9_`6AXbjgQgRuBqEgzC(jbfvt+pN| zl5ff;cpGMHc-JWGhv*g=4a1=_+8qw|-dHG@EV`KcO+1IjzCUFleX`SEoWpnaaX$j@ z-h_017?yFA4vvp4JZijm7Oe`#U8b>ma*Z$nPA|y}UFE$^#k>09f2cTb%~%$2MXPrf z=19whP7Iz4ZAD^R5(s@s_yD$x#}PWE?S7_XAD7wc@?K)9T*JK@Tv|BWE9znrE&RcZ zgrx}SkKwSPTm{j!f^@DCZ?>-*<-!FviZa`IX(!>q6sc28COM{0<^Th0_q*5kJ3v9z zL6!lWstKtSjo<}1XnO4^+BN9k8-H>wsCT@ex(@Al+%fMZ8CK2XBnDKQqh1p)7bht@#RxVXjlG9Y|h?Cr6p(Aa5RHP21GNXGt+F zwF07v()Hc*)0#I3(^mPu_e_ctM+DMQLgiT(@HB&9M^u)I`6h?C~E z-ln?#WDfS{BL=ERuV>yGMnk9|Dxm#wE+Nt+KMR5LUAw*}#pzO7;GRy$orH~0V(HNh zBgfWfrV-ZTg;W{aCvjrZ1i*lj6JWyLAd$srkcny?Jo9Y<#$O{!=_FQ7qCbl70BwgB zYJD37b=_oPb3}jwwH0&r+*2vc>oFY<*V#CD`INhfTX}$x$y^!g-btRk0t4^D25Px$ zt)d2_P4tX<$orv)={tM_t8-Y|LK&T)tc4tpL&hH>*zLD2o6y!CkGv(-Y%FQ#*q1|B znpzJX7rtc$A*M&^A#@$`4u<zq-h&_*+Fsdh_%fgLE3>;??V;t`Cv@-@ z8gEr~--yG&((Ahz4ok}!tkolx%)jG8ZyVD;TfPx*_n6?d%@@Z0t{jYeR+`hOr)@Ft zO2_5h@Y#@pL+PwXbvYq(V4JJP;)jSkgOp>RXz3Y^~DV!DHXY8M^DK^Hl;GbrAP zFx()Y3Ew-%Mf!FxtCEyf;_TX7XiHdnq&u}_|#eQtLBca4IU6C{HX@;IAFa69!h{)$q3d zVCKTN1L+>}Y~9F75-|{O*KI2suY9KB z+nH)z^`o*}TBqjxqD;&zeV=9){VyaGS^9_1WkT}s_jzbe5f~186JdWqu z)N)7kCLw}%wpA}xUN)?^sR5DU`~ZstGrHE`1+P$*^~l)Lnn`)i3{)e%4l9@sFlo$Xv(btk~uu9nO;I%S-!!+Huu z&c&k3m2>rmfraf2vm+XHQV~ow5L_9q-A`tAIgHNp1;?J|16J+Fb*F}D`hiou@QW8( zWl0D@$tQ4AJ^Zvz6Q3JAO>VTE7^L?JuRv89UxHNE^~(=Aq~Qr&qZm7x1C4%ZGjgv{Z@L`Up7y zuClSC^MbDuANgpZJxfQ=L^$wF(qlZ=t?1%Y+>d{sP3Pxp7OW*z$zq8qyh4PaJnU(F zy07zw(3#L%y&6ona6_her!LyvTUe$fJ63U}E&03B4~4Uv@F=9u>Ruf+B|R`(d$Su* zAz;&8v7V30yljq)svdM&})HZ7vm%(m%o$n6S&M-{*uP3COh}U0sX)5-=D_-D_W?h($-h!4f;0}s1C)CW(ky}PaFIn zFoNC*H{d|wBO^0?#=rHiXnv;+wS%!3|FUVeHp)>v*vdm|8wYNkIwmtSCk{C*TqvVB zezN|gEcEl=Y$rhY39qZt^UI=#xINaJMKE+DP$K`PMK}maweYy+9j`8Wg8OAvxZ@V4 z7=^#^HFADI5$HBE&`Og_wj%9)sd(h+U=^D*)D1(Kkqr;0rPWC*NUk-1L8Lgp5sABE zA5WIF8Q0wZy?D-Qu|5``vL&|XbTIx;qfb#epuC*H>vLdJfB)ykCbmM8H&qcDL7e1@ zQV8h%8P$PiE>^*q3}yM#p}^m`KQUl>HFfP>3pI-JC&Uwn0mge?Y ze=HCT{{33T>}7Q#IW(tG!JRTgd0GCn#PLLtSvhduIun^-BQFt24!2oH7KV35@ zAw1$IMGZ}NC4bTf=*LUY4jET}{|6m4Konc4M&#~$`hUatbdpevk07G*KhFO@GX&wO z-yH-%C3eMMnEDSX7n4D?2KujrfPd)AU-eQG?dr7Rh*O73OARMf_oz}%C$xp z%aXs>jVA0#<}MNA=}FE$LW-ClMC4>%-VI7ZQnj)yOG-Fs4UQ^I_sMXdNHoLd?y&55 zU_16n(bUSUxJ(Z7G_-KeG%@pyt5F$U5>n!mg>~W8D*)ZGIa@tCYN)kkV zvu{vTkOrY;c;qrLJD|aT64B8Y|D<54QMZpTp_P&onq?c0XxhF0h)}#9?u5S zi^jr?y1z)P1wpf?+|htkJ4Cnvv-z?B-_xy6=LXnATaj@cQ>I`C8kA_uj~{LwVpiRB zY1bc>^?jdFaW7&=Tk}z%b9Hs#rqlc}hfDBAWQbaC8+?9F)jRJ+`@6s@n*zWk((b=2 zD+zGxET}NYC8^XK+So~~%yCS1-n`bU!Z2Qwo`L)Pmk!&g_$)$g|4lQ{X_D{0V|C#h(k zFX5OI%HD)c;O!PqAx$TG9!bd647KWC%BB|wfjbW( zb*8+|gfh(foa;v!0qkRQ)9Lx59@1HPu|0hjg?cS6KiMPqJU?};A71lIfBDmOK8omC z(!@Tq@(H||8r9IZpuS&Q-1c01zR8#(q0wH7n3+~07Y;$ovr}|F;g!pBj|P^zJsQL#nEwXOfyyonBIU3Da9&3L2%85p2=p>sT;C z9A*2wR=?K8+b(pfQX*rA78>;#?1;dJzBhJT^(8ke&vSPUma)O)Ty{}tgG5e`9Ia)Q z4j|3BndK#=qf&8EWObZh<9VDnWyP~Xr|0ES&*{UXcPV82!49&mB4l;gGlKmPEJe6$y)(w$5f^sSU7F!1K`jVt%}eX{ycbT=gfU zWoN=60y$eCFQ~@v$D+;N#6|R~!st|aX9~WRj?hGL)HEokqrvWY&n=C8EHUo$U-&el zmn|=git9X4;AdF8>pHM@W4fcvSADVZs8^J#p3sA6(I;@ZHQ|=D6Kp%(LNKluXD(C- zgczLnw9>6^^f$N;3EtP3D=d22+1O~d%Cm|-W~b#kP2v5tpIT-3S=zrmS+TfBAbSUj z^IhWA%%DnJho18x%+)4Dbor7;+JCERCueI~N^Qls;iz_h?8 zgaS$4@~mNOSnbQLofnC-mOEQtWm2~$qJ77)`2K&@eP>itThy%}C`CX8EGVFG1?kdz zQB;)PdsFG5s1SNbM4EIYp$h?|By^+(EY#2pA<|IBAm&En=u1B1Lv89)zKk|BLX*Ia@$3TlmWX}0X=qPMK z-dKX+IZHDMGrOCAA1LCtuER&q7 zXeTOXHfj;Q&-AU?753qv#kaa?X)R7Bu>A%>y*X-n#sNEQeeFZu8q@CTbGv3cjgNK) zD@>7Vy4{^SHUlEH^ASEB>wyq)D+g&l`>Ek4c;npx2`{2=@jhd7TzU+oQ`_ay?9%^E zWkF-GyyX2BS&S5@sAM?V!*j~yQM27J&Is0XFV(5bVbJ4-Uf8LHQSV07=dj-GV3i9U z2{kNk$;m@9`#)N|z)SU0W6VyyJ(=>T!cwvd8}x^DVO^Xv>7*)C8+Iwo{yO;3W84A& z&b4PO7m3N@O~!loiYCblvzAYcfV-2EQ%NIJ;a<4A^qMxWN9$JvBC8)ocn)vfj8Q|O zd^6+_UQCJAai8qR>~_ODP}-&N8YfLzTx(zN`TVsEu5UI^>eq;ldEV1&7Sp>g>5v<3 zCG!|^d5S!>iRXE>M)WWj8N@yDf^(G`^ATDwrTSlWGR8GSSObA zRu&(2a;l9uUG)NDyFkQtx}RBip~+~y@%YvpyI?Tq# zrM{Z<#%$zf+voe;18Q&QHYjeub*okrQIB_{ zD%R4M-Lc)tj}p!+c2ARJlsv$f@i!Zh2~5d*DZEaMuQ5x=ybxwz{qFkJ2I{_-repru8|*cayO2m?o7Mpz!djLnu8sC&b;33TcJ|) zQn@%Ju4U{&Vy|ndEVo#TjT>DR}XT=a6XaE=<6#Dj!rbXiEe{A}_BjUNCsRB0lp&1D13pK_E~&SM};z zv!+&p#X0I_QNhgPTq{4~p%zt|nVF=+e9)MD?XpE^y1_)@S+~qjcu|!gf^}3QbH@u> zTx?cQTgMr9nAb_@-CPBLu{ik;E)+?JR4HjNN9hYONGG{2D^0ed0*ktE~O;O`GF{clt{+8BE0fYAQl9bAnwhS%e>rGQtLU{)Bfa#Qpjf zk@rImn&mX3+0P$#9|S&wp6m4Z<2;i!HVH^{9^=Wc39(S!5~_^D+`}sQfo2rNlzy3d z32&Qh9Wm_of?r?^{FR6BX1R|P+KDSA54{!!2J5!;f~|2kZ2_9>=C2GGz4kTCK`f|# zjpPDr!3WFNF^3!Rp1+ZR(udnDe;IfpvonBs;L?No{%y|U39)8q(!FPY;ULDj0Keir zsfa!-WjI^|hx2(B$X#-sp$$E9_b?juz5~#e2xHrwp9%1P1)&Fhy`s)Su;C9`&Kykf z;oXBD`6I}Hyhj3;itOJ4W5s^}#^kp0KYyb=mg#|38=k^u4ypAc&B}!WIkkirp|_9R zJ^bVb7C<|t2N%NsEuy|21F$J)`C|_9j7NfPxkf#p)$R6#oCEF0A8lU)(nq>1Y-bM~ z*U>Tf5$2CXxWof9;(wAvAj-D4WsHMYP=016b{jb>>scOr#tH!)OPXDe){mB3aPMV!{cdP((uEx zY;d3VuCLYTKttr*#zLjMqHf+`vrGTS-i-tg?+_V7-@b2ceRaVdeQ)&mz;E>AYk?TF z%BXWC`O$H(*jZKjAwAUkRjXr zEDy+YL^;8V=s_Efx;qZj|!U)pR0b2wwybB-jx&_6UD(g~H#iD%u}En{}M^3ii**v>FUs0=p1 z2VpC>a_CAoO62Z2hpS&xxc7X`9WForM{`%yGYK#+KDqsL9viW*s|^YRadFsvP-PIr zZAcZQS@E!vJQ1^yXLM45i&F?FaMI6nsIE=L8?}7+Sa?aYmg*vWFY@x#&11sftQ|K{ z>s)OUBF^Vq2~_-%#hFHLP9@mwsmVZ$F>N%QmEBuDlPbo9U_I$N*Ws~N{xyl*n<`AV z7~@5I+L?ruLoDO@OZ!NSryv@&?S9Oe7k#@;Ky|jU?KVu@t{^ouvS|N{^+y=Q>`pGt zOx8up^#}9h1$2iN@we%yV~du?z6VidJOpz7ion+`&o%A~QHbLm^;ZfgIqG( z(?yqRutkbj$`8Q!uRWB(KtU+k%zuFVewG;X3k6(TGE4mQNf6*CyLq@u>uovSSP=<@ z-0#lDvSf-KwPxB^1M*k4E6mk_^xMxWNHO*R1{j4eDG6zsmV?Cs^Lbz_32$wTBUYYX z&Staxn?ca_0M?4m-q}yT`uF=m01Xh5!T)bPxz9OvTmo1(^qfaoWQrnSeg52St$e5H zE@ZU6xPhUdiF@CaUb*e#9(8DPEosLQVWrhEltk%t_mtGIo6;vS#g0jaqM_Q64Aa}$ z$5VffUY^wdP8(~dHTRx9baQ#7#KW-$mVAs<3IH(qFEi}!dyvMzF4wrT+RX5(kk7gB zN!Tw$v-}JwGCkDFL?^`;wl16hA8KV#h1^z&+pQHj$-uS&lqJPhP=g7&!$cF1KOqO^ zF-<-D)L$HNfE}PD(zHak2WA%5=h40leXCJ3?a z6>qXxv})XjmI(};6ewTAIhFhB)zO`Pqgs#SsOcS;Y*`r2sJOIwz4se=!PwpN8?$+> zn!B6fqT5K}ZM5>s)lPIpllnf8bH34|Wgj92L4yhJ_NqW^#;dMdK_Kk?lu%MaK z7UmS$9>RR*w0IOkH&_SSf$~K1JcM-l4^3a4__us8WaNh0NCZtYCe6 z?*+vTcWytNG2|iJ+=u60&h4$d;Xi9@es4cOqcfg}`YFHi*1Iy%BVa=pxbZ>y|N@ZN64^IiAR!b=Mw7S>Vt+(i$spj0l)Ic2wE zZmVI7PUzEgAE`~4#?G4L&^-P%_w43dlPraiOvx6B{YYlFkQ1M)QBi{d173B1_>13# zRo?fnOn$fG5n^P*uaBAB%rEmwFL4g=lv;*}KY=wz&APb;zI$n5k6v#{DQjr%j>PPb zxYjd4_|0e+Y!cV|*}LR0F%Cv4*Vg^yks(WQb)?N+_T0eBV zV<5!nf*4I*DIIkm*>-BDjLNGjyFKDDCTI1kn%n&+t@+D!b7}%m^^Tp^d19G=#+iHX zqB|F2mi88WHykz8ThwMTC0X;d6X%sbnaB^(#pjJbB5$b}0p}>S+=Vw(wR9glcFv1% z7C`+Pc!06Xy#HM{vdlUPd_ip3!*Kw)@s3^AZn|H`bJ77@6bH~eb>p8#6dvu}kSEW5 zNg(TuTfVM$PV4%sG2AFGBe#Nm?{S=7h<}gxK1uBeCKMOo&oL_UgR1C3UlbipD;u_G zuo1Pm^;TgXXVv0^;>};1Ui|@a;RD?VecI0eRTN1@jdE30>5e^5h2Li7QXB_E73y-7 zho+kGh-S-}n6vKd__ufocZn^j8zHk*0^u`D0~s*a*-Myek1h#|%mDc5&m7hoH~F(V z?GeGV4pt@75)b{Ez}UwjmAexH;(kO{*B!@XCgIIzjMY>wK}g$ogXpFVb5XM`CuvOI zJn1hN-$2J@)j+UxTVMBi=1$Zqb>CA1FP%)P|H?faswFZv(Cakhw3OmiWw>%_Q04t$ zo$euMP>%sp;sy5{W&uc^>ra1yVMWc$Zzp9XtaP(v~iHKQvtqJkKQ`Fp+_S&^ zDqkjJ^{I5?w~OfeUxySX^PGo%#EH(UY9lU83l+chDe2Noe#Z3~MTQ%rvsQO(M2D|; zj_nLhFV@wR1xk)u3dj~(N-p&*T~f#^Fu={fm4L2Qbjp^A3})PA^V>}1)33CPT3poS z!ewh3mkp>U8vzxj!$^H}Db2Yp=#Q*DR|MKzs;nan{Z;A+LQ{tmSIc4(KzDwM2kHJP zUWV;|lfH~AI@g@mGl7uFFs-UD9CPgO8r+6A@ZPuy4`!3u+-oTSd!Z~T!i+4fqQ$NK zM?5-7yU0Ppsc)j#r=JxGJRSK`J(m>vw8Acz<5Da|{)fvQm$Jm6AD^k7!oRA? zXqD5FAK667yJjk-Gh~j#_41s9I*f^OFKy&<6@6R{>Z=SA1}TT73f)R|^0}=h_2Xo) zn{Zjj`~o%AQmmjB3Vfrxqu;H$+Ub3{YQ)@_;q-QJ`x!%pmmOmzPDAs)9qv@c&hAO;YM8|R;vE;fw6a%?)LjAwpgrC|LnzFa+Yz;ZzI5BoX_h)SoVz3lEbDv<2b zYm5zGUd+Q<0`1<|qSr8a8uDx1b$5leTU5JpE$-eH7F_~WpZms_k~f1<11%_9_b6NG zLVX0SP>hBR`?6srSot+FYAA3RgCCeK)3I zcm_2u9I_!(8YMFzqnEYdY~`A=apicKG}0!OY39J{?E# zI)h4pvXH|KOMv?BO5=57sHviM0!5<8SNvp%7wl-=nUVja6JDzl6oz>FfnfMV%@Hc$!qVh%UCcO=B|N1eksZ`Fmi@iw>U0)yAV^f(g1_l)>?1w45|y^GLaMe$Muu7(hx z6V~d{*py7$fDk8be(HVvx7l1JXd{^NozghY)0FTOM-=(3_xu=+AflmTzp$A zXNAH6#qE*#VFENsQ#X~vZZ%es3RHkT+DnUV@{U;Udnq#)eV(DPN$q8)kty6ZQuBKG z9d%CHqJ3C5rXwG=(DyBOKa-r1mRko4Va(Z5%_ED$_qpEPzgs-qpss)C6A1?ePc6~Kjlq(}?R_u?X zk{&M-llnZ9+|uMAA|mlt8b^tA3N)3z6qSY7o)oFVjh46hbD z#~jkRo`RI~FB16-^DL98Ij-kt!Rrk2fxQrk-%KHCLt6 zHSJny%@+2=jYP6JgqiNE)p(i-%jLe})%h@<+*cM_mc?G>^M>XTs|$L`t6JIwv-*co zRX;(fqB+iBa9ZvPLT+_0Qo`KI%fwS-O^O{#?WM`LZ(Tl{ltnFgalQa+)_+2QovNX@ zvH^;Nj_ywRr^+}iz4H9Nga+3Q1T%O)(eiP$%Be55$@N*BreXV@UiK<)^J5SucYwTe zXWC5I&ADqK^k%@Pwu&<0F9}gPwR(uMKud|uR1Ta9p03A0@6y%XrI$ZMP7M)Q3f6s59=4QF`vBezfa(RD8nC_4|8lI{It9ZI1NC!AHbS$x*qV z9XhsSa@3gp6w4Y^^!79L^1!oa>({@{NqjdnFG~En(G~8*$uq@b^7+P1XETrX^{Wjp zR-ewUP@d9@Yre_maJ<5PNHg*^gJP|o?cmpR6HKn{g4f!HkLQJ^(iF;fOh=60V^siX zOR~!du=@M+nD4WRn}L;=IhUq#k74Z*F0_v*7+sKiyEs+XSi{_A&|plQ6*8?MS=MY; z;x5ftUxy5q^T!Lex-wPrSBh)M7kWrpmHzL%XQqs0D{OA4A+x`cpnMHvjF`JjbGY`_ z3*ie-H&KFjT(N8W-!lwjbba5ze0yopz8dcwkZ2VXm@QZ3T)wUecs(~^%HEGQo>JX> zp>}=u^K>B;5%&9Hn z!ho5x*{QIW`vJr>vD$6oEwIx*UWGfnbr=Iv;+#j z)}xKXMKpMKk#r22=7#z$fciO=Fu76EY-LXkz9f5`o#JBC@1Ki`vawNi4$g*S>!ZA* zL6K$dj50BAs5c{o(V~*K^xdD3rnMPRtE_@vE8$Ln20!UMy(}8gkenLOK)m+k-x`2J zXb7BW1H{>O0s>e38x4qKMqJRrR*|K8Y5jW1QP+7EB3>@;>LQe(SsS)zHVcc&R^QS* z%bV6&$fjqu=^RB{jbd$!Je&fVcCebT;1q-sD!ZH}*Du3l#XA16d1RX3G6Gt&6P-E) zt;XblWFx)i8Ls)@p`&|yFKYYdQzK4+7E0uT`%mdu?Vj@ya7w02k=`l@IAMlSPp^|v zI5}vR<=Ve401{MVA)^Xczn6iehMT-rLn#Y_=u5s2JT%g5t{TBYBk+9llv zaf8-7kDo48c}}C>+X-ZQ@$**Ob=)9o5X4pB^y@wu$27YJsif}o98BxCo z&jS*rQHvm8kN;=#$~cYxtl@Xf@dV#%LPkWlTX}BFk?5d_U?vj zXh^Z|SnWm&e!ssQDVyUqFTdcjCHM;ZR>%MO?&O(|(l{FF{TJ06pX|Z4rnw;@!c|Uf z<)gVt;CIA^RA@7&(IV?yY1nrwM7|n)i1w11l;(LK%T-x-2^`l{3<~*5jK2>gW*i_l6LBd0>a2Xv9?CBg2urvYKFS zv{IC8P7@8JqG#|<(tRubntRUcKDevm0S)uB?tfGV0&G5@iysnCkOSo0dFltccu6mM z1Vs@x-yW}8R^!cYWcbb&av`zW;fD4XxY6nGwy!d&wpKYXh`Gk&%{by=Yh|062oEUC zFT>-7T$e*?wd(oWwWBXcHwOEx1Tpaf62Tf`hDbMo;`~Kd1G=+jm+|4o(#L7jG^X{*10bYDo`V;eo*M zDgjc&L|@LpA%-5*uf9i`$-MxJS_Bx$-CMj)%s1g5JScHE3>i6Q^hncvY>Mh)TID!5*v@85Dr@%MpwfqZT~I{b&xj|n0A!Ez}f ze}~P#ui6R0fwH~D-};jW2ZkblE&*nC1c)Ebh9x1%%_bs%-*=sl2L80~Sb+Y1zl+=+ z&#}NSSLFPU5fPJ+o&I%^M$;D8-B3F<6nDA6UzW@8ennKh6HgeF~ mEC2WN4{2HcKY2ytG2xJP=43M4mxPmu@840q4Zmd`_`d+7AUrSt literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/healthcare/appointment_2.png b/erpnext/docs/assets/img/healthcare/appointment_2.png new file mode 100755 index 0000000000000000000000000000000000000000..104a919748b9a10eb857f987d6e06a6399eb3a37 GIT binary patch literal 65215 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

yho%=q8iE`#m&7cb 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 literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/healthcare/consultation_4.png b/erpnext/docs/assets/img/healthcare/consultation_4.png new file mode 100755 index 0000000000000000000000000000000000000000..3f9817ca4e0a1c72f843bffefd07eea5021da5da GIT binary patch literal 22284 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 z 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 literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/healthcare/lab_test_1.png b/erpnext/docs/assets/img/healthcare/lab_test_1.png new file mode 100755 index 0000000000000000000000000000000000000000..b2ddbeb3245174b554fa3bc1019154b1c53950a2 GIT binary patch literal 99741 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

ARgG49RZ>zS)HV?uR8qky|AC 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 G!~XzgaCm(H literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/healthcare/medical_code_1.png b/erpnext/docs/assets/img/healthcare/medical_code_1.png new file mode 100755 index 0000000000000000000000000000000000000000..4497e5a2d4342a3d64414090ef1baa115ba5b7d2 GIT binary patch literal 129815 zcmZ^}V_;>$wk{eQ9iwC0wryv{9VaWcZQJVDc849?X2-U5d*j@*&pq$WUp1@7H(0Z( z=BN>&q#%h1hYJS+0)i+lC8h!b0x<~!0%i*X^|z5tLEj zpVb)#a!D@)&X*6VMWpZ;6~R*1*a#){^6@c!Ym6;)woSb1qVv`D=|?a33CipXBIFA5 z_z-skFL{jtGK1%Bj-G0EtQDML9LoE)tt#nj03<-sIKZW5hz5d^Se4mJe`JDUIoWdTMN$)hi<61Vy zo_yQD*|qM(?<0fQE`GKc>5t`gN|7Pu zvV5++9pB&}X5T#wK{%{S)0)*A5B18(V=EH-lu=G2OkfYRiab7tixS>0bI)){;vK2o zeaJJIj3CF#sCOg%7(LO@xe-Xdx<|n84(Nw$SVEl6=uzMc9fBI6taM67&s7Szcn1&1t@=avF=;Rj+a!(fbY#W z-|0pApdrEv+h;l~Y?|0_mm~?uo1g%9ZoHtO+g(58>xQ(Ps;D(?k&y+1U9fMJKo9)l zwTZVuOq|bjNqpmW?Yz>F(}&aD(o55sC#dW}uQ;oKmL94s)va-M|D1Gr#0n(y)`QjlZNOxDN@A{ki&4;M6+B%y(ImL z3KBxn!pivm4=dd`Jl)*D0buyW>~=%E3CO|=%I;*3Dd=wy=U*cII2YS2^<5*b;(xCA z346G#-b;Y|c;E<*KbVL*1JSNQjfeuGC1J}zZSs-j{K;34vi*5iA|~9KU?jOH{Wpog zO@egoA@HD!cgV`Xn)6X~!K(AooP*YPK(Rp-```x{DS9cH;C=ncVFK;Hq5KHtBKDO+ zPYg{aLX^T{38*559>Kp22+W6}LRv$-2yiU$E<@)*TolGCa4q}Z0nHyOQP4WW#s>Wn zsLX^v0e08_qmHi%^n0&H9oji0bl2@9tHB739u0L3zI7d7;KId{J2>b2ur^tb)?ShMi0W&RzwvTQz~7=EvG6!FMJnn7HAfc8ljP` z5w;Y;5zGT zYYnd`0e=87fkwcvRfc-R#*ZIIrksYzhSNrZ(*h&iy?v7f(hc|)!DUeGrB6ekGinB7`m-(W^LMS&Fvp;$o2+*e5b(gq;9yb$?nu{?r$dUZf`Pg zByLi#xAt>(jrZn{;CFe4mIpZ}rzdL16?X-P{BphuK`Q+NgwloTg=%}Nh~o0w4YPMF z`+WPzi5-Z|3*-tY3N-th`f>XM`iFzPg3ZOB#erh3QQ2r73^Jq@#JF?-GEYfoVL9Ci zbzq)WeMrNXM50OoRNMZ)32L48=FkfIevjk|#f zsmhVFh{nnF88@JNzG#UNjnd_#)~dwwMDtE1jb;^Qqh_2F%!e9>l9PGb*MMj31?>qy zg-(gqBVbmW8;}C%YD{e?0l2O7a-?!VaxmJ6+mHfvT7xby*Wp`w8qiv!S~{)bnp+zg z8^3n)kL%WVV@VqeTaCN+kSRq=e=9I%lV|T`d+B29^68!GV(P}|-RTW)>~E@U5VSe9 zt8T3G*%L4juoK+z%DLigGw+t4W?XQelV3KEpKU4BTxDsbUL`BeC%`uKE2b(FkcMQ|->FQ`e}%H;Nvzuos1hK`Iu2pET-I1{XLZTkcB zC^e9r8>c{$Nfa>0hVOD9Uyyk3E z3yb!P`%6{XFYc-{<`8_q%Izl91NjMqI@?@F^)G94NH;T^C9 z^zYlbyhl$}rcGnUk7~p9xo0Ofyz?Qgq=6YWh_?9FPIg`!wyRt71)H

X)ah3Vl-z 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¥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 TEHIQ!N4<2ljkGE>9i#sXV{fN6 literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/healthcare/module.png b/erpnext/docs/assets/img/healthcare/module.png new file mode 100755 index 0000000000000000000000000000000000000000..c795df15bcd73aa0e03ddd384d27f1c8efa6bbe6 GIT binary patch literal 112486 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 literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/healthcare/patient_1.png b/erpnext/docs/assets/img/healthcare/patient_1.png new file mode 100755 index 0000000000000000000000000000000000000000..03728aff62d0f39e36fa62da69f079e85425c787 GIT binary patch literal 106000 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

5?2z~kx2-Ytf8mO z+*Mlx0~!ksVJSxquv%RBOx3wF2j@&3OBhPXsH4e98XK?PXT5EgPtHfE#tt6MQ_qOz z!ClGs*SLvNWX;Me&L6l9xUQv@mZgvu5KS8_DMLQktNo48lxjb%d{J!Q$LV8b<4;CR zA*9l!wp@g_heZ)%YVK}k`_%4wmt3vcSqRu0-FB!YI8#}ie7BPSTlQteGiOMIyyf{x_(R4yQ(=kXL_OANKCJjo|LT2OIuSnGvSwd1MN*6;+N6EUt<<}v&vSnw zK-UWkv=u42!R3#hd^xXAlk4`S^@t{}-?ee8>0mD=?A*~)WR~6gmOYFu1%x@8wwXD! zJ`NBW*%{`eWcZ!H0Bpk)zBaL^c>YeR_?WcK>fQ^7Bw^Rveu9UN`Ub0tQG({T%4$5; zlpAZ7rRKz|DN)^Ibc&7jMQjzaQ|Xj5UpulNR9TveR{F?aFCx>WNItp`lYF5DNjXwH zIJCtMBq0PDfJcV!cjkCrd@fvrQQ0lmVy3XTVaukOpeHU~Z*5q`W>2wko6wRmAW z31>VK_qx~pzBt4oOHxzZpu})x20l@mx#qrOHozTRZuQ<{W-GtB&%;l&0_Cnk+*`)q zd#A#zbR!@7V0V&v*05eyhh~kLq5iU>2SVm zS780m{@lgD$w*+FV!P}N)T5=S8`*c%J->uS=x8KvXj1Ibhf%fhw3RXL&#?7~G4L=Q z_|@&siuDO&)snh%eU*#Xj<6NCnKpcHxAp@a9Fl7EnPhb6>**a1Zo*p1?My|hg}u`o zcfh92MV{uq39r3;>kgj0Th_5S0zXXF*tA8PJ6}0gh*R0ll+`eE7^ri-XN=t|Z68l;*tZqcaPfC9JqYIVA25%#@0z?H z@6cJ}(RN7Q5PDc3a{$`b*;2YL;SFQ!=t-%#4|FdI&&1vOi7JBZ>Lp|d>8&rtJaThU zTU|GPpk|96!OjoYa?Ggs!{|jC#2%~^Rd8vQnx+jN%*BI0mb;}A|s?yH_X;BoJN$b zCYPPAHm8I8fs}7_V`#;glTtcQ{Du-<+^Vm7=7|w?FOB`}Y$T)hPl3OVosfwcLL_y5EC; zv^{<{laP}+&yUq-~_504hD#h1z7UH#jriJQXw|-v?R^sK;7ZW-9-%b2p z{-sGh-_&va!1DVPf2FU9$m%EzvtQTjM fo3c;gmz_73T#0;?>95Y<|H;cJOBX$P{`!9b`r}-@ literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/healthcare/patient_3.png b/erpnext/docs/assets/img/healthcare/patient_3.png new file mode 100755 index 0000000000000000000000000000000000000000..738ce2ccbd581174fc00b79d437edbb1fe324f40 GIT binary patch literal 60435 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 literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/healthcare/physician_1.png b/erpnext/docs/assets/img/healthcare/physician_1.png new file mode 100755 index 0000000000000000000000000000000000000000..f5705151cc82b0b6044ff485bb12875b1d0bd996 GIT binary patch literal 98149 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 literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/healthcare/physician_2.png b/erpnext/docs/assets/img/healthcare/physician_2.png new file mode 100755 index 0000000000000000000000000000000000000000..7b3d1edf3a448827d5d46a58c1b098ff815d23b2 GIT binary patch literal 89931 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 literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/healthcare/physician_schedule_1.png b/erpnext/docs/assets/img/healthcare/physician_schedule_1.png new file mode 100755 index 0000000000000000000000000000000000000000..a9102e249377dc71242c629c2af8c88ea1cbed15 GIT binary patch literal 56636 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 literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/healthcare/physician_schedule_2.png b/erpnext/docs/assets/img/healthcare/physician_schedule_2.png new file mode 100755 index 0000000000000000000000000000000000000000..d9105688ff45f4a03bbd0b61c1d75f7b8ab1d507 GIT binary patch literal 72554 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 literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/healthcare/sample_collection_1.png b/erpnext/docs/assets/img/healthcare/sample_collection_1.png new file mode 100755 index 0000000000000000000000000000000000000000..76238474ccfd82d55e4eefb16c582539e43640e2 GIT binary patch literal 99584 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ÆsKms-fld?zh$ z>s6^~cTKAYG>%r;gotVyvBPDBKw}@vFc=x{XzWy;Sa=u!Y0kym$<2-dR2mk(9Z$=q zXz4tJ%^y)*`h%TYN~9w7>U5f5Vi|EQkoncM*m}nFm0!c*J8=?t+@;_JT+?aCUN{PV z#6hn72)Q=mQFN}VK2I4hTg+v2!~B@15#=e-Woy0_f;vDmV4rp|oko-TU;}XHa(#yg zs9f8voh#W@e|+3Fd{Kj5_=i{}{sJZTdBBrtw(rDxI@;QG)Ya0YfvAUbUT19sl>JKO z%XM`bJA=g@2WJF_o`nZ8v8guTaD~%M*L>u-O*c^PoN`k}_Q~Z$%;z`^E`h`^Zq~e7 zFF7DiNNbgn82p{EuWUx!suAK~khc4g>ccphqBv6(V@9f!>}Lh~P4%0b#8auvV?D?D`LPC+#08jayV&Ihk! zIz%NIuJt~}5H`ohS#Hd!#p(6e-x60z=iy^hC69`^7iB{!xw`(4D~p3kF)eM`@#*?+ z;4Q=(?H{8f4;tuHtD?xvw%B%poM5pXy!W37TJ}}axgJ|O31u)=7463wCC!{BV_k&A za|<;1J?N);p2S&OpvZZ6;c-bj9>0ftq>Bg&mxH^UDCl%OVbUzdtCn6=_)goBC$X0c zbG29fewRbFr3`b~ezEDuR&@(oi@OxhX|@SCL63emH6F_=_sSVn4BzNI7(}B7IJ>)M9k6RgcwoeQ+TI@U zdmcJpd6f9XKbGt4oeJ^~VJS_(tMAy3h>wG|NC?*ThLf8~@2nszy^JIZ*k$-eSbc4q z%EVbxVoG>N^}Rv=aOPFo!?``}bY82!QZjIrNz=Y`R6Q|>sLRd_7__yY;_;s(5#5b4 zEqC~vIR2Z0zXUgxG4z2w8FMdc>cM}0ZZuB?WNzS9WMFTVM3T6UK$I(M2+IT{#0y39 zfsY$iZO1=cjDQXRhD1uorR%{bL>@FuF7nBgS3yY@I|vWyjZ=~80vG7$$wG;3!9zm& zQSuQtyb>-|K$DkOOcrkI9XjU5CB!doYJWpPeE3f5xEm@%P|mnTa`fj4km zq8ZUhSdkx?+PY@$mgS1MSRh0v?Dnc~Fd2K9)gi{Hv4rt<1D!ecqPLoe zmJPQqfsE8*4gvZ6h>kDf@+vuukftOnY&5Q^OhsWuHsIkL>Ou2?i3RzxnkjR#!r0Y) zY7eAotRwZj#|bCp==d0q1RyPc&|J}hQh9&5EDl;Xu7G&jQWE9Ju5rPV?@MMXomAwB ze$&~EX5t?@DOs8(FMGy)mv*U|1Ch9!4FM-8Sq2UJ&G>6EC~ltU%s4Af%i<)8rvhPc zXlQ=@>X7q7xM0FubR4{K`w~rd)vd!VSwwzO(1nyu&M%!_e(`IVXw$##P`LP3R8pPT zsb#jFKu2I3QnF^3^@M;6;ZINBu-@?r{WWJas~DZ|kukC88r1wkA_&%SCI`Ne`+4$sPvN z>68Csy!-F_#{BR5M$;K@Rx6E^6kt{N)N~B>`co)&_oa1`#ny-HWzXaEd5vHDq??M* zCuT^AxqY6qE@HI#$#5oVyGs*<0qFzH!& z;WxiJCof!L1*%ziFV1y?xaXWti@DVrX<*9kJC93j)P?5P5w6a!aLcs7T@R!zvShCKqboxvnn zy&qFmIup^8>OrcQYv~u@jnS-JX!K@FaVQ8+K)Z5@;jnhx@`Ux({&|}!k!><(O(|fQ z7aedttg6}NW#hK6vm24*)y`3@l4+IUdwQ|A zMz)&Bt=a-??Ny_D9#lz0H(Q`z>QWPHs%WChU={`fZ}H*SsCgv^far+tIK-ooj#h#63I> zJHIq9NCJQLOg>Knij1JhvUv(9r2lSFE(N=#w-w#2_MG)9ceuS&c*mJF$bs}m<$O4# z{HK^4gAQuVd{G!C0d874Zv30YGPM$3y?n>*)B!#7gR=Tg$oi8dGQf1;ZBT{F zcrl@Px=qXv7Oute_c8l}DH0V)2%-fBExT5ZY-vm@vFz%KwSDC%vsN9e$)*~zrpub@ z_ltM=XyQSs>JHcvmKs(Tz0x0*uH!VD#kpTPWR~Ztp~)GX74Gr_^X5HiQ+ zoa8fqH_yx@Kt*e4=~NSoWQ=FArZ!^rUTNgljI2_h;G(a@vK*`GOHD|8hgUD5vVtF( zrsk)wL(e5@XoN$5p4rt7$HD$4aYhrP-~OVxT9ynCF-cpcOe?qYvtC0iFKHEeIunBt z7*x?{J&%-3gG=sGR9X#-kcmMpn-d$Qx?Iy}8Yn)!i37xCCtj(V)SkF`G(l*H8V1lG zq+iWrxVo(Y>qEbWGEXbEw4M}osNC{A8WMr%| zGl^i+x>R(x-r?LxF$M=mbEh9$TX-Okt~c8%TYuZ9)DOzc(&$pa$hQaH&abND8qhzg z>NGf{n2{o5rW*T_=0z7xrpE+2^POd-t>_n4BeUcpe22 zp}dq!Te7<;i|lDs$0n}TcKzipAoPrFVHDUU>xynpSG}jJ8AB;NL~!6xR2_V>)PjCsf0>nNY$uUO(J5i*)wmG;F83{XDgzbAS5x!v zR%@fixPi^^<40ejYa4b{jcnb4v4@p`5EtJ)2uh{oCKfPc)a%Pugp?GwBJq=*_)=UL z;+ZqK)XXj~!_{mf5}H1b4LcB3)*3E{W{9pgq|2rO}gYLLYs z_r1Nf7s&)}$wUzWS)-$evYQQuL(QH&hg{GvJ@aex{ATkUWBndpD3)g;gm#HDY3MwM zr?twDm)Bg=SztLG=Pn*I{@Gxoz!`WqtTsI11Vw3viawMnLXwzMF6dDfF}|QrbQy%d zWKf+UQj~y74-DisMpmZOSlkq?swOo{O-vqZANPey&^6Q6Q?Q0|k~P~&v+hY5e^V%4zxVca9aQAz&32SvVb zY;FV#B1JZ<6wM(ARVF~k*ntpk^w5}yMCGc0g@qP2*U08DWFMg*ZRr6IMJeTOFqHX$ zvIAtI9gMk>(xwE;UTdnehZCvL!`>V&Fmmx=TQv%~NE-#p@t{+xQZ1FXPst=VDqx_M zBhk~5vMS>`P}>ox-%QM5n@31$t2~c65Y+312Np<0*5@CYew!rE70(=zuFX|<8)1J? z&P$V$lTCtHFmn$1vYsG}MrUS0SAap-Rd8dE{Vryd!&f(czIU_Y<0XZS+Yc-F^-%nH_<9VrQI| zG5kvL*oA^j8o#CGASGTD!zA4z-V`~JvI?#d;IK9Wyk9oZ7YhVf=k$0Kv| zeByPyL*Qi5Z@C$-yr0H+%UNrLJ~2fkYhhFZS^V6Y8>b{ft6_90d4E&9G{{~FfuL1L zDXS)w^w?+^48z(e(74@FjYOK1^rJsIt_*5d|7lcNjbIQdf7+sMRY}>9^XfaobIv?+ z&*we2k7)>;l*b*V7JT=ekVTn!#!9_3Lb*U2d7=t?GgGN)RTv zA(i6jMy0E9ru(e;>BVN^s`laMxjdr$v{3i|Vec(t>&lj`(U@X8cI=q#nAwh*nVFfH znVFfHnH@88%*+roGcz;2-KXz4eY!jS^rRi5Q ztxFE8tn+w=2S*nSLx=awDpB^Qr8$it-wP}mLJqUhOIqrZ+3IH`-}yAEI2tMN5xB&k zP7gu3rCWb8390G31ydRJ>};}h@bt)h$NG_0{ZKQq;rxz<T0&(u&6+?}(()cBM{G z;^t+p#Wb3^+gvmEFOPEkH38EPW~deJN3Jb$R+LLBP{6$diYa^apr2py1gnUo;K~}) zCDwduX#@LjbTgl7A@1Jn8PXd30=|ZAI52{r1k)TGjl%K8E-KSC3?rtXgB;5Yigr(7 zkcp~XB|%MaxVb@d1I=k>F%d9(qrpgKri0IJ%$Y@q$jL=f+Z5ifZ+R<)Ua@8ZzLPzsEt%a*{{h*R>Exb zMUnTK;Zvi}OwE$5=N)l>@-nQkR0P+EHM3q*o2Le=k(v%qj>NTIGPHF>Rfri0cdubkZb=4fW()S~h zH&3_T2serIbU%H+M7i=CQuJzEt)I%e#pgYaK&Mr%IQy9o8YS%*R?=iTVOwn8_6%L^ z7*D&az#AMyk~vlCc~&zp6hnx_^vHaF*tTR4I^3DSWC#Ib0F#Z{1pYO1U#eCn8g(xj zaAtQ%8&NARVW-j>f$$Batl$8K>!m;)2XBw4G>M8JQjoJr*HuNhBrW%U7!oAh=YV(ZD zlufQYImFzj(M2raOJQU;=1ObvIvaxJ-qwC1pN6SbXG1$q-rB^?3Z%k!Ck71BIks~w z$t%z42KHz14x4^mf5>-v+beyPnfK}4ZUbDWdO7__b1lvphN(bVr#Jye$1A-{%S+`t z2NIY2BqD-^dkpKiC?+hvvC5b%aGRcmnK0kS+QMo| zQMhXQm4i~L@O4+Ydk5Rcz0O}KYBsFxttPP64T!5W@pPg#INKjukmX|m0Ja4G0pJJ7 zbW7kR`MGci|3R1!nGHw7t}J@4i6=8G!Av%VEi~I@FI5Ym^;2WafY~{pAfm@L>**VD zFxVE;c?;A#h3}G?Ra?-ZTy1nrqU{k`H@t{8JRF1w2ZECpmr(e;I~tid-WPP>XX#cYT-{`FrxuP+<&pQiHLwwatY3{J(@qH zG%w0&U!z520uE|Cz62}zE-9V&4=i&DbZaxM9pP(z1h6+B@NrtW)m~Q?UI=sEn*c=T zUiwn;Fe{m~if~^!m+6?!LjrBc#Ny_{T43_DKbY0R+A9dbQ4ujFnMsk)j#WT_9txAW zqsc*V#E1Z!B$p^TCS3D96pF8HhT(>5+c&8?^&)>Em21mG6iLW8&y3^ap8&YW|3gf+ z9<{S7rfZ6S9l#oEeWvnorXk|DvfT{uY1&KW&M$~u*~g02>9g&25q=dmACen!!?79APKTr!lXJ8m=nkkcE8IWp(EGwz%KtY`{6-eH zx;SF!@Nhi@fbZPXKqQB3A}U;3R?a6VTJ!FU#tUGE$8jquA}_VyLy#Y@`5$(6ZAv{N z!b$vgfGDxcp{e0rUZ3aIs+f8E2anpPS`w$D2=q5r`q$mnx&c=3xv1aRZtw>Ob@+`{ zsEcSOdbzQVi{tIZeSrmg$cvMj7A9QwDEiencq^e0W~ifvmPWMpvEm|t?nS(HQ;9!g z{YIkv{py53D1tW&uAl^u)n{sxwj5*cwod`11aw+M)-}}UoLD zivHiS3x0Ja&w!E?Nc_JG;r-)#xdrtlTGD?h_n#Guh{DI)(k8Cq)|~kt1OedT`=QVU z1{gUn_AfI2`=hueFyb`P{iD(GU+v)Eoqgo-)?LEUrup^{opkOHano4XW_dMa{)4F6 zUjUE$`G17~nA86)NbC)*y8n7SH|)O{pC0fRwn43~t`_D!$Y~mKbAKS;;ubLt@rBYh%t70^(jjji_Q+%X7($cVun?qOL~bcknN;oWT_*bhKo7WFBB?V@3*v@ z1N-o8Wazdd9^|;B?7JJg4CQ-EV!R%ZFU(#0UmQae7Zz3`%qZ(OGMC!|`f}np97u^D zNLd|lRN#NnWOQdIgt#KE#N_4d-RJXV;(+LarOIAj!mlNaQA$EI7Oj~qbN@Yq{9EsZ zwRyi78=queAe&?oi$a=~jBU@#h@)2;MgEu9{Ihj4?*bG(!*+)}`kySJ6&|(lnaFwD zl58ysww(mzrAz|_5jiTQb{`L)v&l%;?Q?_GT7;`T@FbnhP|e}boQ0};KMRt>12m0y zBDP2z=wi7VYBxdTZlQEtHW<$upvv}oq=9AcszgN`MugIeHkkS5qy19NVJl`6pN69z z<@YI9_X`7D?au+_V9D+FgqH0(pAGr%SATBiD=<`YRf8`_DVFlFpe$nT^WJZ1{n}qK zuYwYdT4uVvJHwuNZL^Z*n&#&eMxjdoUcz6bG z2Ufn5VX3!3;BxkWA1*3-zk6O}UAkvx* zr=!-Q-q%znr|ptWWV}$L)>|41qYFfZZrSGukO*J-$VKZN zvfa*+T-9K&z*eG9Yim*K4ZDHya6RT856kPG{pDqfyimvs8|w1G>YTSV^;5|YMZ~k^ zP%e&onMPwdPXlzD=W-t9#xu|SgP4!6PUmz{n@E71?We70PhaenGV(R^g|`#Ehq+p< zBbUUsz^v9L;CHucdnL3U5vc0!=d}sO<}2P_+Ltrf^{&_*ZF&@|9@ukdXtj)-iT93y z>Zc4X-3r`XSbU4yvm~2Gr?)N2`D@{Vq^Z9rAf-S$ zs{K$`1gHHN#F2Y3!cY7K$y+6+GbZ=41%KaKa?-zA{Mw(|>P|dA-w4;OiIn#q@j?}JMrSS!nYu=xJ7cS85>;(<0W6FRpXjQ6h5BVxEPSJM4>z)C_CJ{=1 zE5xXy5OLJx{-(4P>hP*3o_??rg`?X%2+beNfvk19EG zt-EOjmndSaq4_Pq_+J-77&o6BT}@&B=H|2I>E-)y*th^7>q^t}*rTrgS>4#3p9f?8 z!ffU7z|8n!cs5eQ>kSg?VYWrrmv%^97pMJF7$Wn{gCz4c>&wfH=CwDpo2(-E=Hfc| zXA(;-{>mmQ&?t7@E_ozUf)8>C#Pf&>c3Rf`X39aURXEq?JQ$W<7p&~B<@5Fvd#WV( z)Uc$ZbhZ=Qi7*RpPY3IxB25x=aAqC%j_fIgZWd1y9h+~n??-MDbXqRVuO(dTCpB-t zhMSvS$~#EUzHaTI;fv1p|9a*3mi`2+kv!_jW#01_BuIu z4`K`|sm2~|Fwy3bj;GD1P}0MWlMGzh&+jqMinx3_I(~rkEy?P}FrQy3Fte?;Wy%kA zl{-5ui&(VB6MBBLY&B(xjrjb4F}BdQi(o!fI(?)ck>WdBIxZ-g4ws{(5cJ6K4G+Vx z77~yL`CxvIo8Do+No{w+_M`2LK=j_cr@xiVx`#eW0t~&q^IUT^XeuAAec;5yh%J&2 z$UP<)=JL-cI=bl`fb>nQ3`W6i4#pE5z@?`8v1VSv{jX9L3 zJ;FtKr2}^dFnIb{Qv@?E#q>+&XTCNWxYWp8Xa4+SV^{*nx$5WB94}8?{jYd}Zvue0ty7DJ`Gw%Z?ugX$q@+9y>~FXf&fnfH+uf`M0-Mniw}%Qddl0;qIEPqYG|e9p{^V3Y zN@T-Sb~N+((<6+lH=veIr28gbAvo_QNY$qZ!3dF+EHBwSO#8K!C8t)~Jww*jG34g( zWl>H^uLmDBBl{2Z<1%ohAc{>mIXNZF0*cCAPD8fome-j>WP=nT=<_ z$Y*t4SDx68HL(8Bt0l@epimAUnaBVu4VJPBh3oY;())bHPC(eZm3F`4U#gfD^wdB3 zt*=E^s_oJQc48abg1dNnz<^Yrte30<$*dk6yIU$tH40wOeU0)>sx3IGp>jZq@MKfS zD=O;BUX97EFX^GjN{cTfhi_5r^2JJv-zTO)s90}9EEh6GH{tSXg7xC*j?(=>k{HXQ zKT;Ib7}-dUihA2;WYt#cz?`n#rUf!baCVoN`W>T|XprM68w@Hp9SGN_>E4n~QS|9N zMERbhuzq>Cp2u0d-An08*hbI-Dyg^~5(py0qPtP4xTaTD@``n2aD>Fn*R%Oh^5;ia z#?tbFxmN}O)*?7r%Wfm`9+!%AsOk>ui*Fe$-3}^xbLpg>jvqhwbPLp~6DrI%m<|Bu zrMN}D&SCz?KfB}+eS{(N?koH(z%OyTwt8* zAohb4(yvMb!xK^21)*WA$A&L=D1Z`eT&~!ZqB7^%tQS{g%e$-b<}+2NNG}gu?hGz-L~c;^+Mnogzw@*I0g!02rHW3R3EhYy2854imb z`yyTm?vPs&q9becm`@Nzp(h2Np;IDDDODp!s8j;LEmb}l4AdWU2LvvZ2~fKzC*JaC zf~KGLIrdU1hm@j73~WJB4g?HceSN+5`ze_7>OYUgMqarxrtGn8pqx&JptSBxnY%Ol zJnmOQnX%BQ){nVI+H`v)kj&&%T*va+m^0EZp=2_n$dm@(WzV)ugAtfa&+y;101#^T zDZ3x1^RMtA5=;~=J!ah0!G=C~jvPO9Gptbd9eb?=fsGh7so`39zU&2E&LqJ#9i=LC z22E^Lw7mI#r4XcBQ+;=OIjM%N+IS+P$vXvkIZ^BAg!>^5C_J}$eqPS^-DapxX{-L8 zF?;;W{0d=sL|(t81WDT-8**7Xk#FKm$yu$W`+l{gMQt~W7=^N9pxRl8BvkK~op`jE ztP>G}WlNubGlB-h5aagdfNvFd04TWj5Iodb^H6vJ!m2Q;~>Q#%3_jJZ2)hd-^EPAFR)xT7cVN01F7prz3Y}qax99QV1jmHylY3 z@g5PjXj(wwpV@f_pmHZcQF%EXPxWZedH@>!9v$nf!Z&p#B?jv_95dKoSz+3ACOCUm%h|&ruQ!6b zRp$aOHXN;nNQO`5yD<_)QIbx8gK8otV@$FPWHb3x_GzQhIII+>^=cj|Cqkgk<%dV#}wdc@+0L&4tkU}lhs8CZ0#uKJDX}kqCRT_^| zuB~Jh$#b{UobQ9h ze0uKRU(D3)x&$7MCcMJsG5BQKs-_I9159;G6uD{z68*2RlHP9vl58#&=AU2QlRDbi z;|o4hNTh*uBpzlo@Y9{SGJ{HmZrqx|&8aKu+*va3bd0bB7&bO61-!ddVRpDwAVjgx zP|kVKO4!%Cjny`K%@FBeI^Pi9svUIet)F*dXB~Ei{a6)FKZ=iGZDxQgXPEF=Z>=OJ zX}NfQKkeObuFfhw2yx9eIYlV9QCo8cvkB_a*lS`CYTP;;6LO`$PJ`8;vDH$$y~T~2@iPp)9+oNi5;SxHQo`PlVk`SW#ld4aSOI98?wpR?{)UBA-H z`FHnEStImYywBgA4+@>OP`I3t1!}swy*%G#Py4w>g0hTa*#9^X{MXj@g0C|+(rh9l zG^sJ8(`dP2$ScICL3ij8MO#2JoKA*-QXM&hf(>>f*#gEeEwrj_C30~DIoGt%tqoAc zObz5}xCHL73fF2KWyw`vrP#*vlhT?-5k)C?ZO|GrR@M%!XcgNEkcBRrGkRMC+?WKlSQo zc4igTNCe_r$aqom=UF+gYjiGBPUPvDsmt9i^|Buu<{g)T=+bEM{$g*Nvh25mX+=NY zc-)_ET7=uKl?Fo=aD7uU-6pH`Y^|YT)xA8Twpi7PK5qE{HzC}?_%i{-kU|1-+{8d#?m zWse9M6ZTW)tu30SJBOO%+$m$PDMU=@C{Nj~xS>dA`){&s_R`LAg=t-wE~ehi$0e9`1u; z@M?YalRy`iPpE^2aOP#o`mW7WzV?@@C>e%5p_k;gq|0U5c`(7aLYWrw2}5NVb~{{q z@6WSHD=ktq^Aa;A0#B@2bmKWx-#BU}d8^^b$(-7*29SXE*o>RGGpmFb)?p|T9ejV3=gjFN@6z&TVhZs# zPlZg5Fe4rd3Jz8)iDN8D)rnT2V`rZmO4A5>Ey;jKJLK)NSs$vkwfssKWEzB&tEKKH z9|u-wlQJai_5vsql+{ND^~}jYBW$mwp4c&s;QOet6ZoB#YUjU17dE22mxk=F&sfP- ze?Sb`hy*9R)AdH5c+~h`ffQ@_ncDuAiU1X-n$Zq-;I%sqH zEfz@;%@$1H7Spn(gg(MJ*3?)xH4joCcTd@k7oc>C zuPOUAEHZL?qUlNY}e5?iu4U! z*Ic%Y>;)coxjGQ0tF&=f@@n}e3Xq?A33Wpf33JcA%8z-?gg;oaNohc7Fz0_P7izKI zPN<3D&IQ440N;w7g)h*E666zqNGn)duRwvz*E^#rs}}W1wH9fQb3BhAv7|~?lKwrV&n)1|t-{4;s#%pD zC0u?IrRL=;@}H`Ag+C{fUo)CfE?>vAMAW$S$R`w8pqgkfVDrzu&_;!r4;5L_+v5C>ULvx2H`{tt!EeGkQVdkMh7%Hw2}s zx#D(?lhFmESy0FAn0O3edW-HfMF-?(F^zAo>b=x**}=wGAhbs06s_fmS=iz6G;#3# zJ6_Tld%FZfuBvV7_Q;9;=ZPkTY1M3|46$jjn`5nxa6RL^sjhS9RPKA^%AD&yO!Md6 zV<`LC&d)+MxIn$Blss=A_3m0h-5ahUG~dZ#N@-gzx}HnMhLV#ij#fhg9FvO2l%ua1Vd#7~zFM~X?a`V-WvQJSur4VFf89FdZD=u1P@BKJL=Ioj{ygf0`fjtDhx>$CKVr%*Hc11<3kf0*vX zf3vIGIBc>yg?>3mTJKx$qoO6_lUfV zDn(EpJtD`$7KpGlg}_{IKJAO%)q<%t!g9Q+pRV_pj-_{2m~jX!zg1|ueO43?`>C5o z?mBN4lOgVa5^9h{)!&fhsJBj>R!v2Ti3VR^G_;tKCXouEgrwh_B+nyf{iq`1e0Tk6 z=X5pfsxmmaz}4noNko6d>U=mMli~Nbm*|c!=TL|*_Rv$!aW4I;^>@Jrkw@|rDe6VE zG6~7$9P8PGS8J-q%ozla=}opmG`VrQSKYX}WRVoWkhu_cM&h+}#0Em0RJ|>Sqj9@XzqlG4~TA z>Cb`QQZf@FgU(x!M9JB{y+7M}gjjfdM;BixYsu^_74&T)bXIiSrB`1lW2-uR54XxK zrTC$8m)3&JNTUJ;SR+@&C|{_H+~>3DUWmU`3UThQ-JUO4he^;kYWst=$o|-ls?Lj; zsMFhq0!mIL>i9sj#w<(Vo3i<}`QqBkWOh!@PaLG2?qzm=560c1_6+VTl6SNtHKj%YN{Q^@M*I?lK4Qw}g96;RvfWvNZI z4!bb%8ep`ySE~sfhbw7M=UeBewdKovSwDtG=!vp-&b_bQ>aU*e&&@*Vn0frlS06av z0;)s0t*3@xb=K{aZ_80Kc7aj6ULjxHPwnUL+o(LT?>TS3A3r<2-F&l5E^#{gO+$Y& zU+AB?P=;SrzmP&jd@EhlwraVkRyUjbuWD}q*Vj)B6r`+IPa>Dc?JuaDvFslaP+*^< zf;{6mh*4Y=oY@cOdin%;ZqCD}mQ>cSC*T~s%sOhUQd$m%si6T;GprfMY1mlD$Y7=@ z@YWsS{_#mgMj;Gk-YQlDeHB>jylw<#Vu0n!tE!^Qkc8P!f`w*F$i%dwg(9iUf=5)= zdsz=2BS9gUVYPI7x<;R*WP*VCds}MqJ+ftsQ_z6@pd!Z5b%R>#Lr&Ib8DY6yf$e^9 ztNu7j88hOu_9HFp_j#qzOG_}#mkhhO4@R@?cJHRJHh=(=0I<3>;aS#QuGrx6O^a2| z!NHg^85zpliAoSL6H2pBaIjN?oUmLb0H|?$V2mMEur5wZLxgMtbKpP4>B2dHYdr1b zdw-Ty2sYCAKtx@nf*#4}b8X_~-ZIe9(T^VWd>ha3D2hL|VAzMjK9P~-C2x0`knoe} ze;}aVgp?LPb_n&5+BX-J$<%t*8p4HJcUO0W&>+9Q2-@sMS&7`o`qp>a!C1B$xiPeU zIOmwTxOVYMtdXb__-;M*4fj0r-37Rh$pgxY;gIEN1&(1?wDrlZ=j%9$3$sZCdwSMY zP0!xu?z6fx{|4@#B>x|F1AuR%3%ur-SJ(uMub3VLW)bZYY(+BF!%^1uRH<@P7tpky zgT0XvAqA@@OedOVGuxrNy8TX2`{dCStn#pCmDT5@`286IG%yaC_WnJn@(prb#bWgE zT%~u5ti#7CvjZEgePtlH2A^ZK_a$alukiSA#I=((6HtN#<9eo z4&Q#4VmqEYx{qGcjPu3x+4R`}C1rA9g@Y87fiSQ z`(q~)kmU8vSU~$Pu=*Xb4FLdQ1_j>rFW~&~(c20Dle=9G)vwhL@I`01?Bu-wf2@D* zBke;U{kr;r*e`(l{YRRB=(P)O4){Oz@c>|Yj4`1+{S%oa+8YH>r&Ck-;J;`)f03sh zV6E5x3&n3^@P7sh>T|Z#^IZ|xzghGj)CDVGpw+F`wnM;qHZ>L`iH-YR-RPyV!(7Ur z;w`^vGJprjoURlMMprvv5XLfQr=H2EnEJPG{cgelqDXeKBWqEu_&;>*V*{XxEj6)Q zl+pi##&sUzaMPUHOB<#9MT`FPaXS{k_p)(WQa1UgPNsjOFCAu&)BeKf|0O7Zr3G+h zS9R4>|7rCvH-&zHPNsP>4E{;)!^MF2Y*fsC4Tbg;!a)_=#=()Glhb{^kxj`5P*BiL zL{x8_+CzCHmc8MeWX3&7NV30d#ea7UKe2%b^A|BSUIp|XAP}Uxzpv&1xU&k<+w>D~ z?M2DIEUMdifB+~jYhM`EslO*hb9$rUME>`Y{B1CUL7D6Af;R+77JvJqg+C>p;h#eq zf8aoU39#F=hy7%VzZ?zyzGkL|SU|Ua5ymy|zn^|JY0Syd8J*d)pGHO5wFB|Bu}M`H z`PK0FctS3ST?PeV2|Xxz`7iGYxbRnY(!sugcXzzesatx1!LnabR(PGLxI1Vj1CkW5 zvAnM5oq?3L!Ih-YtqmLSsWzU3ygMr2iJj*b*g(+N9`Db$zteVxN-OK}c`vcnWg`hc ze)4>Lr|ipC(<|lSX+u*n@klz+NE$lj8>t)ecw2P+g?+_HE; zwDk#FKYq|zl5c&C1~DmVepn8wx^=CS7*kQEXBH*`7dAe@8iFHCtLrj5UD}x4BedD+ zgo`(!964Revv`Gfj-He)h}N1ce3wN%m!WeiM0Eag98YK+0gRaa0gQwj=##Yfe{S`m zfIv)JmmndOee$ZQa!Oo^=5p#gKFqH1Ffe=&D{wh`us}Jwbw?7w@F}`hqp{nogov~g zEO+F%%rZ34p$^d54L2Z}`9Wpsf~F0<8glOSS*X#+B1S5-smTE7P24=ZG4(P3sGiQY zhjW(k+Vn)B4DfnQ#q*AE^?;IGw~5Fi)!r5EdDN5T8jNGF#lV)D^KwtCY~A)5Ty&6^ zqc#XGh4e#up4u&tHl1&w&tAnD9){ux#DsN^&2wDHAlgO zJ&m8Q3E!xNv)Yr}r9QQUO$-ocyEJARpXgO3!X-7LYM#D)OjWv}b@GNq28tA~6~2i1 z4;cT!#ivlSv+o?Nj+=Sz1Zw(Omo;iP%}4Uo>>#f()>8ZOD4_|LZ$5lqDR25`ansqd zH2Uf7bbJiz+lWc$M(DDaMfU_aZ$0h!8z*+DS6b9+j%lkJ`P+*v(zp>K{j{0H?Q(Eu zBl!05I{eQDIdFOUiteD-j&1>qhxBmquton#y2u>c;{p=Y)=%ecELerK=#+{1Q7vM1 zLv|NIxX$OxT+%Xvr3xb+$a&y*{pTfZjSabGo$~w%7Jg?LFL3l`?i5AdHOa+ zCPr}arOL>hnUqaUp1JYWAP%e!Jj?J*mwiGY7jDU#N+mEH)1`9{yL9E9<8pr}#=o(M z<^yg0dFLPn{d7r%irx|Wkmt1p@j_D+yW6aNXPsacDMIqui#!>21~a_!iE-*llXG67 zmBoN5mo-74Cvxq<luYr3b3nGhrD%0#Mf751+Q?tUjp12wl>{ zeL=vp6l0>26u54Xvv_ht>Z<0DE;f|YeuGnoj_XuX_HgGQ!d^>r1Jyyovq7Tjq6)L2 zY|}>Ig?S5wlw%yMPTVPvvXBGmP#?*TuJ_2ih)YQbyARa1R`fI3BkO&=60sWeS2X*U z9t|OcRy^Oh$!667%-}MeTvS73EL5tkdYJUw<8`Zau*Q?H6(V_l zH;`7&JSIoFNOW9WvpQ(--^Tv$F}_UFvhcP4`yRWLhwm_2k8dQz#jv0$r`iwPL&>dLNA;}Rj0DAjPYf*Dka0NdKs9FIY+ zZ`V&r((aAp%zK0d4P{ph8FKGW?B)42+wBKzKRB$&x9Z*WKEXX1v!fLlNkj@9ZI#Y; z;M~nAU~o0bEU_bBWa2w<)Q2C{8hR9Aq^|INesq?2s;5@{T757uZ|kKYo~ zU&w4%$Pyw?Cz0B$i7qY%gK92&L?`8jdYT*>Bgitv#o>Zck!8XfWcily!RILXTo04r`-UhY*945p?P z=>2|LlOIjb#(I|i1rdb4!XCSeJ}K827i7@$;nGPxBuUXfs~1JXO|QE^njbTr0{>ia zgF75S^ie@DKvY&k9wSyhO`Numeh+Wlf7N$VzxO=Lk@s3k34g7P`kT_N5NSdXX@ocH zg!tbc8Q|Y>gdh=%pMgas9-#u<=qIcZRbmX!_2e&@!!eg&wT#>DlhA=$p|3d@H|L9R zt6Z>66Xy5r6)iQfnc*Uq2+3JwV_0^;U`B zhTW8=x;(jsZXgOBqe)YXZCGg(dQ* zCC-0P^dX1ZSk7Ca>4%K#8FNJ-2_S0-oq!Co@`lmA!8^K&Rn* z70&QMm%?W!wP*lehL7rudJDrE;l(<+2y%(1LB^fOyZFEhTZ=><_P3|}4PQo|baZh# zL7k^1j|KFUY`w2~)FaKA{?2)!mV~%hcbL5kADd(0;ar4ZJNp0?ujH=AQHRhy2Z-zm zT(%7wMSMkRR9*J2i5w;#9kBP#T72n@d}(%rv?iPPZ9$1q0^$us+_vC#Xt7~Pnfi?( zf&1~<70@G`e2yW90{T{B99J7ml5WV>iay1?t%gWY&ew2=Bow<6i!5bcDLY_;*HdI{ zN0Tg{E02V+*M7zXX&>-m8?u;$+O_)Cd=X6tX4}8YKF!8t8>G&(cxJq4)PjZLYw3Xk zlF2RHG%WpPy2ArOA)=7xpiQe<%i?M@Z0A{et!t{%t2h63(iFD!xILH!#B^&a*5#m9 z5v)z$EpB|_x}mZGTQ*7b)y;vga_TPlM-_?$*BgjkLy(@jUQnIEEma_m$NuKjh(`6v zEgl5MEm8q_wJM8t(nKgq=WdsdfJSDc8*stLTln=0iFf*TOYQd2`?F_fn9a zA+AaL6_bY_{M+%NDK3g#TOm|A+*M1Splib1!RB|R2NA~uymeQlPKSZ#nwR~Xw_-nu zf4XmfNTN+t*Stvp|G`(AW`^jk0g+W{v`0m@Ifm3%0v85o-?z`HRRt_anHUKPdzg(r&K zQ!roL;#CybWR}govsnaFn&S?74@xbTp@9)t0 zkYEVEuum4v-|(TEU=NQ}1fn2@gjh5Iq8~w10BLCTxaz6rj`g3=2Tdcw%^PJ01Xny! zP>+;ANAc^#i9CS!!cDmJEHvHZ?9P#N$fJk>+98=SBd_?8G9jz}R(I8nga^yL+& z1M9uB5gzoE*d;~60+VcdEFG)|DWNg#FeqIJaP|#FZ9Hh>L?li}!@dz}Y=q*ecAj1I zEgxu#Vv;P6>;wjB&{#Zw50mk3SpCeo_G9xzm+JGk$Ql=eAK7Hqy&w2uBOADkDV{9s z1bn7wS*axV;!TG>_l5n)PL79C_Y1|}o5;Io^#Vdl{Rain!rA{gZM!RgA94x$)(lcE zHY2#wo&ld9yO=!pA*n2xO11!4!!`DU+yf-2#)aR24@Y7IEwz}@r-u%v$+=si#PW{d ztw(}N7L`f|!$q8^Z>{#*vLwEriOMvq6ieOg+q$WHwWe&pQ;v{Yf!RAQM%vU`_T-(7 z6m1v>A$&6uNRj<24VmP4-ZNhGLh9@I(eIPtYJbD4&fqa}nS|7-mMB<@yzFvi_nNif z@>+S5LCZ;Oa*7BT@EGZ2jd>wB2D<%OIMvr?-RsoXV2UHlp#qnb?a(Dg4r=4xz7Z$s z9DB>16=FGBprpTSGJo^H&JAF;)-U)>uJ7w%3*Y9yxgB%7E@{rHwT4rEC;UK&vai%d z32t{zv0d_w-YS4`8JOm2d+~zuv|NL3jK|kXlJH1(YGnV*#U)cR!GMdrm2cM75-v2n zw4LNTWd5-Fb&qV>q~m^H^k&9nbM)8ZL{AlNtU61XFJfM8krfhRqMUB_sCSjAb-)FQ3U&12xCTc$y{gPWyR( zbX#snOTuis9NPG5%*62J)-xJdT~t@m?ocH8+t^xxWgE0omaOqv4eU1OGhBcX%!a&F zU;O8(p=;MpMs)fBiNEi>cbI+l-(qfN?vIY{#GA9v##27{E9X8B4W3)P#PVISo#cMIELmuY>KMN z>LH@STf%T^nd@CT^H?dj`SHCO0y)~j2fxs7Q%ey{FXiupv#7LT^7fMICsd%4Nqu)Q z=;6haa|3KrLXQ;frmU?(H6rP&ngR~=Ig%8_;-i$+jp=42a7i_-!*zRHM%#?by3pl^ zUrrm_U|5RgBm;aL5}5YGTF9?%>=G1)YNUT&&ire7?wrQGc$o&gU8im;v#00`_eS6G zx|JQxX-@R-Q+X#o!XR2#-HL4l2?&U3)QQR!4p`}R&N$SsoDSk34={^fYGEF@bhauC zE5*sDUw9_OY;H%yK{Wj7nmqDl{=fGK@b=N$ps3;_Hihw+zx4fx&ho!4%D$;2iv91; z|Dx;v|Dm&$r>1y00V-2(06uQO6v!X4t>~_@orCuubiFvDqBgu`8HuEiDmZST(R;J( zEnL)F)b34uw5#3?ovhhRac*reg9L8W7`pR_=%_;TNuxA;cC7J%721$|`0Vd5fOm+C z=yW|riotG&1pAhh;hmPFWJAY_yE;c8pw-s}QuyVP3jLY-Io*=)2aOppmJa-X`J4=#C=VO($hOI+$`1b9ncbQH`u}G7PE~9FM+2M^=zKozP-q1^( znn*GuBm~`edMML7VtuSPJqu-f6)=wt7OP{7Pm|tT`&%Tb$58-sRzug|cOkeNY_}%dq&W#UBNXQawj+(m4&MYW%7M)^n4)N2aefYyx~GJS52q-92UfahGE-3#TVuDrviz@n4~PJJ2MA4)Sqrm`r{klyQ1%bI){)gg=@H^*3yr5}z4#ZhmwQtivB z;>T0gMjo^%`HYYRS}zqpj~vLN$t#7r3QhS^qwRj_o%^Q1gtYO_#?4aaavf4*q5jOC zDeT1UTs|avz-#7sstsLzfg2@3g7$!O+-?L1?T{5*fgXnoEaayYMxWMo(_=X#A47AS z%m^ekSjoETt-QTAi;hi_?oiVxC@X4o>wGwSHVc{lO~HM)LJLL6Yu)@hWa#th?sbnTNp`O$&Iru^*g1#URK zGEbwo$IH*6IH07rgm=2wKL18MSx$hlV69x*WI1qVEK`AMySOXRi0q<$QQ^NLl`B#f z_ouy=^9gV<9$Hk}Tac{I%V)IDvPCQKG_Hqa3r%LtC zY_!EUR%STK;Di7fr|-PMdQ(QE{=&AN7WiI27L_5_-m5O(72UXuSGkF7XnzvbW5LN? z$*M%1?c@}$UIly_N~E-vxDExj5y}e&)hWTKwR{K0>gfszwC#qY^Ez+5di}{4xTU9{ zw8=&rD3G$*XZ+m5-&Hw^(+aw$Y<5~^gZpWKHA6YL0$);Rs&3xe;7!PR`w5iXcFi#inwEc-~X?^II zxnc?vT# zWM)Tz8hNQU7KWCsuS+B0EytUxj6f1WF}Z`qp%i?2_o&)@6WNRhI;VO#wtQdpZdzhUoI4io=405hIMK6qKg0HwdF!7%X%ZwInZV}vOm zVe5{sB-^`V^B?STsWx8xeDhRBd9~{(*fQ_&rRo)099~?`WN>HlK(QO=wxV;z7+btV z3-N4R^FYg(rU9dcva2q4?n+G2DsVVpF6U`PLVAi6*{);dn@>^JacRR)-v7hiJBH`EHDSX|8Z~TeG-_-cjcucib%%G1#%XNZwvEQNZQFX&?!BL5 z@8{X?pYQ$q{Y&mkYh5#IX4X09%#{TOy{H^1RfC8&g_k6w<*NbF`;asROxZwmnZ=~$ zRr3STJQyb$8t5~rckSeB5*n=M`ZS&Gu|cHSm5}x_gV@)0=I)cCzC2p@A+WbPmSX8s$4947-!HvuBNl_e zJ|wGsRVckQDg3qsyd-6TsHCQ`8+DN!dbF^!vZphV* zY&;ei<>*6}tmK>d)4S-gyUx!;&eCdzH%CCRvh*CAU5EgrKgE@{cc^fiQInH*J)7DY z_O*tnmd2!gC)-pTN~l5A2{DDp0(%l9wo>RcjwF~gbgeOu1G5gyl*4s6ng`+(y*KLW zwFG;Ld`%{fw1?W!D*3u?3s-Q0(Xs8FE^0AL(j*w8R_89@T!h6s9D2Q1yF0J#;{RO{rF0pn9fXJkqTD zsIuYm&2bQ^|9Lh0p-kYJo~_M{nMIKd#Np7E2xND(-?l)No47%{m;4;qma&7qTj8`~ zLhb2%vl3Sz#d?Kwm-G);*#`h+-$*n8fWr{!&u2u>as;*cnyuI3dqwSUW|f%{jZt;5 z&SvJwGECcb^@&;-i(l~9N{~JaOrASjBiuviG3nnBjT|j|P4i=0O=Qr3YM(`qMS$7s z+leQDI!m38A2@5*mG737sI~!M#xfxjx8wE{0<+^%^0kV{5p7b;*wnEoGI&n~M#yb6 zl$SKA6JW{I2b6f)6BxK=rrXe!rJX?@(Sk+Z!hL%4d9f0VYc-Zn^xnGB!O~UPga)ou zK^J@B6a=JtUH}PRT&iObE>~z{e6n@L51zasAn;E zdl7aoXEZ};y!dG$&p1SF%iqmn?-GuxdQ|k)z>C*((>B;=^LJ%~v6(>yHKJu*tS=nn zZ}RbX15+z4m-0*d%4#`cd(M6k(OFwDQp-H;2Q2_gsep5WphKsv{>n%y%AOIPX<7yx6B!C0)VeH^ow)s1ij=A>qyb#IsT=Z@z{5rYIu z&N`#K8{XjpO$|v*Mo!D1y?)bzgnypfeIq_t6Yl%)nzF>;4m9VCI?+=%8Ctm?q;2c)w~1%)93f`2xkWE63&lhK5L zIx+EzPDUDd3PE`i7|{7QvA;fEQD2O!<}}q~$FX1;$WC(2K85N6lP2$MTsZics6Ewm_DRP)%DxzC=^Gx#h(k9j2tIbV2Iff-DO56f*_a~X<6FsV}}*uo1ft}#iVTB z;FZc+Z5jTI>jL)dgLJ2Z)}R_?dE9nr}~H6_U7BxZWo4!p%Qr*rpUESIi5BwuAp{n84o7)tDLRKX1CAjxyQlsag`Vg zROk@Z%G>wp&Yx7sl_J58H8rop#!Zz-EQY)BqadQA&3@LzQJ0=w0)_Z3Xg#w;z$b~qHZr_vMPGE0%n+>I1z7k|i;WU2@vjUxy23V<9%y`KCb-G9=E^2p--EJ)l zw75>iQ)v5kk{FrNPk3tvW;v2u0q~l`GBum*S7Z38>^22_G4e+w#ybR)566bpyudMX zA?DETvCCJ#jhMpH}oC zKOb+HM&`IW9I2Ud7^99@-nb!dg7kcxm&>-?}Ra!)_@&M=0RQ$PN%BMGQev)?44+aCVIlR*Q z_-16PI+8P@E71nAuKR*V5ouEek}8;DGfEcBIaE68laB3nM|;$pz2*yOv{~b^Dc9XH z{AODtSq#7`lW-YC+d>T_YWS9#rzL(`-2J-INNIIZ z;GH@gNEpVxwh_sdrolPWRLC`0XCXY*+I`0%7b}BX3xSNh4dW%w+;ZlxIcwH`!-U0ncWVZ(!7vqMS;x%lsQ>~$cO^|N%>ss2 zj&bvawNy=Mp&5kLz~@9#frMCduB?IMK4wyQM9s^jc6**?@n+Tju}#e##o#6B=1ldU zIH9d44*f7=Lr|#I^_eJqHp!`|hZwjWm1o|S?b5C?CY&K$wt>yw`>CRVnrA+MMx)EV zI$80t;&t9|%yr&>C{4iNSdMJYs>)BoLGB-)?$Tg z6j%^3&Eae{@t3ig~J`klOrm=&-xS$71?h?qm$glzZHqEB7S|CFN_DE&Nh&Fz2cInN| z@)~OM-e#a-$XGTKUFqv|}P=zQmtc8|((aqC(7u0R(JKhpA_=UMS zdFrODq{f}(bLf{jdre_Q_VgY~?s5L3qh>5!$KHd)<5ml20&0&2(!Is(Gj6RCi<+vd zpBtGlY{o?owOh_x!XJy2%{-ZI<$+tx11a=yJD;kZXQS?^B;dQp)SC=bHHUN_9JEH< z0;5M>h91ma%x#*Gi2LFzU+uMlbd?&o>}?;|DlOaW>qee(5_Rv)P-_S$ZdNrb8}J+C zZS==RqZ1}#6KvW_3M_c*CI68!(UQR2<*xXWDZQ0R14aPRFcBPuXWP>%( zxHC!GbUVj!;q}Fs+Q~<1^3f@mV#RU-QMziU#l+|as02j(6(JXQ`V9xgY~nPtz`~F8 zDeCnMhtcq}=JcmnOK>pZjXqCSOhyy+_7ofvaO?<_Dzd2A3>T`AUhCHcJod+#ylL)0 zwbp>J6gQBsbV`O}k>S5a$%W*ZcX3&y*2!?S7SUcV`%7nUQNrc)oG#`{PX3=5}1LqnkeHY4vGFl!oSY@l_Lsw1ILhbncMBLL+bLQ;%`9-yp-vD%O$kR$+-SC0ZV}#D}wxCYV zx?-VJ!L{W1yJIV2&11`rIaHBosw0X9!U}_P1l95bs5LoyK{+Ht=w+ahcqg%$yA}cFWF7D^Y)Pi(;7KFjL1IP zQ-W%zIx#Gb;{IKHzmsR4M+9d~9`3`4>j`(rFyp|V(o?3Z&;S?GwUE;=&>mUI7w0A? z9}Fvl!EffxHt2L(Kl@btH&_+<+*YB$U{k)++WQV%_W1z2nuyjA(yb>mp&sstf?qbm z?Vncm-x4lFV}&`q_MsR7UyEqPUsSXPkG|K!QFe%d0<7NSWUp)% zp})iZOptCt(yxfWiBQ|Ia~VPQ`EhOLEi7h&JdDye_`jrnZ9v(- z=_eL>&=x0Of!pZaJm~Q+Q^6eT$P55sIA+qAxBZdcVgI8}zn4;&27w6JWa+WG*R>q#S$}i`6xJ%# zVxA>`b_(~mEbnq&O;IV8a+`S)3!iwi{=~CT?O+3u&X2US(n-vpM7_)yxP}Ud6PuRX zpK3%9k@0_ota^le{7{0aDZXKVsimB&rUHvOhOcFY#^)sg!X}pBY0J`e%8UPPKKFhv zSWDGGe8)mOFy@mPLk5!&#fA=Cgjwxcq8LkWT9>PdOzV=VYGSq>;3ff(cD3{*_3w+{ z2Q1QGoI3-8E7V|9cDc(t72@H8M#Jf86w z7Zz_0TVbg%T_uRZN=%lhQ$KtD=|emU9lTWDuE1`p)S4CnKep#h&sN9YOcUo$;pV#c zxh>Xv2u_r4X*-J+)x`t3DoFQ28dg%eZ6Sj?f@(A8w*mw=2v+7el$$eiws)Ji@B&R} zX4OyAIxxPV z`q<`m-8w&mKVZu`j4i&U9@|4-f!)S+5l{yT5ZHM#{9n3O_KwmJ)|+xOufbG)C1#px z6Qh0Z?ugmM)W{?I1017L%tzHV~N<5Bi@}oZSYVpiXlBjVSkvEWvK7zmO&HtpUYR z9V~UH?`87akiGnWQEJ=U&>a(b+jau5KR!Jw^dbE(apm_ktSmion1?S{mJQ&cw_HI` zmyP~qovw{T(Z$~wYpPLzr^dgtM7f^ySt}@Sr+PQq{QnhlKxC2l?Kp zxpz4K#c=qG(87oI=FkQSQL6rp9Q^Bc9ZWos|Cd>W3%%XB5~|z$e?;@gICSYkM*lA( zdK>rmj%q3adhGw6(4U?bLvqvhzuxVCJroFH`!TcjaOm&*!j2 zi6-$F$bz!k87adt!iv@%KJIG60t;gVrzcXOxGNx6%Q!rrZFccbdP5k*&xNrV~_)rY%QaeX&RCINz4TLY!-PBnb6e@oXtVKbS7_ zo48Ny?LSVkmi>{k8e)(iP#fZAb-tyRt_g=(K)SfuRRKKIPX55!Ia~ym$Wj>mRCxEL zh8yEV2*>)M9sDQfHh)Ybvs^>C8;3!xmv^D}k3WLTvuv;p!SY=W*=k)HO?Epp`f08b zqPnQevh^_D+f5r-+2U`gck|2bLXbL46vs3rQeVzI-RA5mV8h>9XTzChe)H6nDMT-h z`zvdLxYozS14qW^=})06a8WaIbVS^loAbr|!GyauO-3MRU|Y7&4x}j7qVt-Vb8BQ1 z{+P(K1KgKuIytV*`uZn0n24A$4LRr_8rauUpon6jDrmhO4vhQK53-UWM;u-cc2fh3p z@6)`%+V>6+)Tp>BQ($vvmp40@r!G1>Z2gErp#`xbjd*9#4SiIH^O()i<@_i8ZnXZL zx5?-o^7rMu_AV6J_dSFF&E8`TM5q=!tTu?0D9iB{xxRk9H&EEi!G%TS7}{Vw6X-TK zC=$5$b5|}~KuIwiL%lQ-Rjy1x&J8RfIDuIdhh}|2P4f%D&aH*q^iie9tZW)|>wVt~ zrLb95Qp<{VC}r488B1jP5^jSv$OP@AGZ^}x#_%mRffuJTD~`m+P^=+6 zOyd!ow1%AgIA$84-9*B9qI=$)Mg?gSMrx)lQePmh6iItG{Y_PoYwc^?*93L#zn;V; z?b-JcCmNme@e;CvrV}2KVULRb2^PRY6X-)}`e68Vs|I!_w#@HBqMb_7EbV2%(Pk4m zx!S~%Mqy!AGHF>e`%hE6h6wZKp#nVBxWH3MK!C&5Hp2^9z<$M9n~1}o#o>JF1rN08 z5oPGf$lml$}=(o>H@Q^#rNOMMdM=(9`fP0_wxt&@{fre<+4k%<1rbtHkScm2S9}%N|5_Kl z{g-zCOLz%luGr{-GY(=!>GcYao7&)Ukq-;!1MNQMKhb+)NVu z+|@_{0oLPAPe;h%`LLJL95NBnVDY|FG?@-;y*tjO`+`5l{mgRzg>RDvdGoaZxexAA zpye*LQ2LU2x?PAfS>DNoiFAJj=i-AxoJs$%$RBU8eG^r*-k!hobw9wg)k$7avo_HA zm@{b5o@Z|{ho+fu^y_qEo7M0#LbpLYFq7qq13l5++-JjK^b?&Gd8^h9IspAjkg@@p z>^}@x8R@kK4`S|y1GTr(jZi*UFENm0Da%sutG{MPXmp_0NNe3PKx%lkd z+&)JpNK6BJ9kI}+q&rp|eP<(^v!hmVUBf>H$#;Vy3fr5@>%A=xRU<3;SV;!TJF1DW zi>}>4nezr9Ne9FwozBg7b-eKC2$qmodH%V{Zvm@(+?^e&##_m|8!}zzf!@*uK@AIK zB<+mWZ|#0|yHW~~m3Vlx+_I_ewH@Vlz!%|3Q9IreY<~~lwZ*mz$#J%C_pRu+)mpb@6sROB@5i@tDF5_bZ`0 z3m7z$aj25+{sJS~8Hv^c(YPBk4`Pa-+LEBWy|GoFJ;!kSf`XKU5K+#W7Y*14 z`zU3*g4olww)Z+dE*z)@42o(9wgW~S(^mfx)V%zf(-y5d%6*l=;vCsu3rhZtJsL!F z6wd?ZHsr}?;tW=w7kWZ9cDqGCy%?lM0|_d1iV1HoYQ z05^2y;Jb0?=A88Y=z2pNJaysFU9Ofy!j&gaH52ms?lf4(3mBA_=^H(rIf_2#!e0vf zv^eeD`-#ztP4mR0G;$wJSsFjbLS-91%BJg@8)}6PmHWZxs(fXMl96PwFhp-<3=d4Clhr^L0esVD57*Gb@K!1!bB{i%iotQ zL^5=$D#pARsD_T7N>)> z_{8K(i~pJ?GuAn}a{A+3_e2lH-nBCbl@5xJ7!eO&0x(E!zCSW4EKH)Em=(T{t$Xu9 zC|#%wX@-iXo1*W6=gT0_H=;vFd&fXMXan@G$nkG`5E)Sdk+-V!R(FlfOG+IEq2SIe zJBw=ff)5mqiRId$G8EToT<=$<5<;Eaiu%-H(aLxeaOTdA1EnZ;zbzYCR5!2S@(RnY zX%0DSNntCI%RQE?N))^!rPc{H;0^OkTR5133Sy=1X=Fb&b|Q30=F>N)QAq#-BAoQJ8LW5)(xC_{4kqo zypRF8Gnx?WYnz)+_1*;fpyD(0Fk=^r3kauvo_C8B{Ol5$c~#=dw_Jl<*^9re zh%;4in=f?3CA!*h$Iiy8;>~xeKK>$v!nxD?AauM_G+AMqmnAfUL-HhT5Yq<5m}}88 zZKw@Ff;80r9sCH+IYTF~2-LFQ5YTI~_`W9SQ&=|$kjQD33}*CP`df=r>!Cl`?FZy) z@pRZ*JeS@qUJTZ0ezF*^bJseiXHmy8Pa3NFpyhU$84~Q%Rl~fulEb-hjTcxEWN-Rh zH9WH2OLR8Mn*cVc3B5o1e(|i7e4I;(ZS%%J-LS{s8sT5W7bZsF-ESCHaO1BS(!n04 zEWgzgGWQ5To|@V)h=}LR=QQk_esqyah4E*L*@mX+uNk61VJ0Bl%Crx5XJ)oQ3~wTT zd5qTdlc<$kECZj@R1IDn%yn+9b+VWK(O5){{`0J`z z_%BTO%VolA%6;_3@r>AQmdPPH3rrFFdCuWu$x#Sl{A&%nse(Nnv??eUpfflPp>-6d zg0Np<*?l>!{M<-AfQ3VO>?Fjb2F?zXc@384oWJMB)dC99v};gZzYRAXwGXL7lorfs z_8VjH3Kn|cOENvz(}p_he_&SY<$o5%TXh= zI~)Gt(3ko~W29QmKriweuGZHJ^mKLXyZtWWNej6hgIpKU+W9_&5A!>U<)419yKwRL z=quK#!>K57*AQ3vi$C`u49JcXWnl?5)J>;@h#gGKKdP4N@1cxyOD*i*OQ4r@*aJUH zt_sID6TBlaAeQwl&7y0~0-MT2_}cSC;M3JotR6d&r?EJL7Z(}{?|8bs^ z!-P}*ghl3=iLHxq`zwo?HpbaAMsHpg??``=LNr)$syR|rAC>UCTQO6cR;&Eigb&t2>1+DSF^HpOcGgy_Y=>`1;x>l z!iCaU4d^#6cby1InrEZz!>Ytd`jHq^$d@3TPe9K0F8WikoF??=0?77Ur#3>Zg z(w!deL5>d1_CeNdM*NoG*&cZ6)Zu2-)6;{c622bW{_0!LzFtnJEpJ$`K|0K2&FUmr z{rGjnV=JJO<1EwULpnmN%a;;^3N=Joep-=+cZu}$_Z&|9xVsyvGHqf)&YTvt1(h#S z1jD&xH2;l~{lXFgz!=i|0G#(OA)5Kiw7F;ALF33*S zaw0qhE%gm-S71r{X1P8vjA7expcB_|Cj~y%_2;6B}Rq5W^#P5!zr+}R$-1usB8C~0; zukO2D!&B8Pqw%U>H|Gc+Vm(`z^O#a{`z(O0?>;pwA~`jVaZ=CWYj$z z$$qgxf5d|b3Pi9+IK9YM>;F9bNVZvGJLj@S1sHH4a0!bv9?K>?*;O{}u|1@BT`J?d zhsQu4qmW?TsH~=~>V0&g$#KU|P-|HFl}lUW2V;0_dm`9A$M_Xx-hK?|uIzY!u4lJk zuCxHxUGE;UEu~_UN~7n|-ZZ^rZPPD;QGI2&;JpR6A6`K;mXWB!@i+nCXn5;zn9%UK z8~)bWjow3%@(^1{Zx0RjfDzNk+}2GF6WIgDci}$r)qi>wf)vz!n)`}X=vcXY=nobq+=ll(Wuo>b z%SdmJ+sj0Z^>%I8!AKl{?#gir*}N9>lvwlt>Ev-%eYNUn4MRF~k1X6vxQ99hnN!oQ z#wD#;A1u2smK^ABh#|@N^>Ox@?qF0kedV1w&a@-pU*57)IfOu}00!?{;7nMZt~JntP;Z|$niC$P zqbs{+&|bu-Jmk{#fOiUFw)^#$o=iZUC7PIs*1zq59H&4T&cr27NCq;+S_a5AbIb76 z*)jE0k|&j^oT##%VBwvvB`+YFBz-H%6grzos*X=N4Yr ztih2p+5Cnn&Vr#aMoTI`WRv^2TG45sSjb{36{-kpUCKlqbQgYzS63y?#AfvX;aK0!%z;F1@_b;wPjmlCqBB7mFb$!twQ1O=7<( zCeFC;dmq!QSqE`9&R~faEuK)jo+-btFB-_K)4Ph)Q?EH_2_XsJ(aym1yRs;2gN)>I z^Lr*VBB{!L$gCR}CxuA7z;t>Y{Ui}``>0uXwLmbX1nE!REdzP-j5jWifd6a9sISz% zqobva@RjG6&LfDVPo|Ha;qzVt7|_gkPW)+ad%x`tw0)d!Rp>#DHV&~QZOM=UMp(M7 zx~Smu-)z1rr!P0B()I37u&?+G2dV5WO4!9l7(diScb|DUdhDCvB-SCRa5RT;eP;dU z9Xkk)KaA}gdr{)pdjURnzPuj*t>MW_YcJ%#VUJK!j5cmmgJ`9sUgLLp1Ds13323q7 z=#u(vSi<$dJL!zJxJn$P8iB(4Yw|diH`CzMkRienhaBmk1WC7$1F=tg=aFf{cxsAS zPR?MuRn4`{S1U|UI<`Qy_n6mL!;cs>FARaz(0ps@&QQEHczV1kKLlfE3CbYi+3X2S z(dEj%7-))v(Nq_U~o}_o{I{?-+~S3&%}v z=RL^J2X^-NUb=Rr9IWQ46%-ZW6XTn4f#g9D~68~Vv^3h*<;uPpbN%?s}P1~H~GI1{gM zeaB0NlGcKe`FYoqOeBW0)&@7S3h=WG$aC~N(_q}k-kOYkPu#)C-k+f#dOB64Vt1d^ z41hVXcSr78HO&oa99V*@ch#?R*KEm%C#ZU-cp+6E?4W<8yf;G>;95i|P-`)H=~&bI zB*tB1!#PFmWpCN5!H}}d1%vNeA0*O4bPIc)VzNd-uJ8~L?y1z5l$Giw(SY=c1_DA=@lT671C(@v4)+{S}sxQ za;0PQ#peLsA^@7x94@yu|Wv?9LRJgxL@@)s@zB46P-Ywl)TNx z0m_Cep0u8@SiZys9O|sO-X}j*g<$5he3l|wxH4hYmCO9=$-5CO(aG7*u&JJurgAO4 z_4&6=fa{5!cj1Udy!WaI*-iy=&juuEt{@F|9Hf@;lc9}q8V$3p?dk~>&DPO)qTW}! z{_N$d+0yLKZV@C9v4cXLZaZ5M2(d6G$uJ=m<~2M$c+Vf)s63f!t~-TY*)39lZR&kT z>?rHUMm(!|=eu$(v=!*^#-2>qOXNC3xVez7G;a;`G%S11d98M|WpYrccYf8gd%CRnt)e1T*f?l?y+e(OMUsfZDV20h{RWYi3eYb>|Br zIA$94e{7dW)A^>fgHxSU5AVWd7Q4D=@Gfv8V5Uqtc_j49Y zKuiIaHFY>!u{$VIZMVyrWydxBxGl7e;d}b81w9^}NI_?Z`CN`KVDio<@#A#+R0MM$ zue zRY42|-HQLqN5qe^wJ_+ruiU#!E)DIdARlP%*uig?Y*TmHN1gDsQ(fA2)iTc%n$cqD z(=NkTN8=b~)+W_*+jr*`>XEp>SBJ6n3LP~}tWkgXPFxH+e~7EhB3@OY4W+X{lgTmG z!;(&(W&y&TvmOr$Chj9-?8f)fpH9DaJDfg)mp!?o30E_$uk=ang0Zr)PUeK;fmjZA z%pO>~o*((hUb78r)J}wcE*V=1S)xqKfnN_&SuGF#WysERGI@N4Gwku5@_gap4J^=oW!?8ta-;F<4R z=*Nc(9shD&(uJhFr&uzyiBWSY%%LjEp5EasHVyt&B`b+!ONZ`Z#Yw zqiv$SaTG@Mvu#|IC1BAorK<3na4Ui5r!%VqOhFALJ2ff6@*|pieyuTd z_zz>!+PKG9IinAX4ax^vaiQC<3;9@1q3+`9IrBRg2lTQ%q3V=+akxDZDDSyKlhk!3 z(g}x#zoX_VFAm&gWZ|ikl@tvOi1Bz}^5{Jf5t}ixSU#grw$^`t8UmFFA9~Ui8(a@c zKtS*d+pkTwbRwLF9+m_;T%6|Dx=O^vs(B>RV}{3C2|~bi>^+_crElApR{8M3C%3$V zrLPO3D2l69Zn>=6IvB(KR49kxCsDqe4HntxMTYN^5^?mVDsAh@PJ6af5#oGY&GpFU zN%wK;fD?r7l#lz}gIl+NhO0o)1NKBl9Maix6Iz1{g7{z?=f@@qm<6f&yt)O3QPsgV z64r(tamwCGz{C#LdCZ$)v=755KE*xnNa%m~6%rLvrrUj{cVn}IISNV`m81_Dl^3EL zj$UyM_!&>MqjaovN-7h!ymqn3iTbT^0p2#xg8&qLAz;~7E#`k2xeC*@$P|$&6 zD?AGS6$5J{h|mOfXK6?dl(YNnbXvVfC5e2q$mAM2oGFF4HM;J$oFv_F1i=KvuyHxo zLVlJeQ`Dp*cgc#|Wqq*Q^4osoX}Nn-v^Dd4P8KmU())x<4@!Fade@(0vsxB}Dj8hI z7B!=*$%_v=mJ7;g#SEV#Rf-TGcEZ30vOa_bXohxbE8lQ6!#`!=%MS)v9q@=`c`kQ&F^m6j6||LKJ@I8t{Z1l^WT zNS!gE)f!_W>@Do0vcu$gf4EcY&5-}15%vtnnO#1pLL8V^D>%Tfo~!JfCVLDLdo%Lj zFg&u#VFaA1SySez{gT!*_Tdx5kS0@XQmKeB0!g~!`o{@%y2KAT$wttB8e50r7K}E9TEhAp8D~9_;V*K#r=UW7l+*8jC`zO4^aUf&~?7GvS#cNUx;su z^P=N`&QK=Rcf=j@U{Z^u+j}&00%8>|pgkD?bG}Z$w&*mf8H||F-r8_ z$uKzi zeg)kak1QcOXDsa1^#i)cneb6X;HF^$4E5{5%%?B7Nk`ds`&{lU_!$>xLyqJS9ap`Dbk;%rb|F`pfBST58odO==hT14Vc9f^V-Zh zuDX{aU{3jYU~FX@O}A2>vI#L)9WQtR-1*aD35sHH*30e3id#vsr6~i}ZLy5S;w23ALjkk8hOY@{YhWO7E0 z#5s0NpW%RQF4UIlOEl`*@ zBS0oA0di^EQ&_1np{iW0Fj#$-Wu&{Gh)`27RpKzOetQ(;o5p3C$UHz1eske^UtS2G zP1vwR_tpcLzAEgdU=T+X27}}MYCo)MY*;-|EmmE{sj;XUKD>K+r@{2`&(h|^!te0f z?jTUGXM&WxlQP)6lkp}Ud+sjpmZr4B_f^}B+XBa&p00bvDa)qdv;1R)kO#mi1afuv zbv_sAC2Wfau~CQb1odvM+^LGfz^2@Tc22Lv-kTCw^xYvY1gFJ%J`amTq8ZNwRhP^6 zkSfG(ubNTMFA3oH@aEpUedy-%t?<`l?HphO&SCdGgK)C54cqmly#o3K|HN^1@rWt^ zLD@obn|`!=Ol(G-q;HK?#nN;QbuPA5THb2!VN}^k9vz{@+Z1D`GgI_&{Kot%FKZ! zIeJpusd5nto%uWU0<))IAbt7?nES1c+CeE>>>H5Jl-(ZT^W|y}X^KFJjI40xas{G5 zW7`|cik@3!`RHgHlJ@x0B}boKZJ$h@_h(~POkD}Wm3V9;RgpaEFYxS5aSmkLryIVp z<-o&~W#+%RBdmx7XROuMOXyZ5m(PCdlgyV^E;%k~AnXm|bplTHn5FQ8#3EP-?YpZ(gyHcgRcn7dLb$dA{J6d`+>_h}PR)<5)p8r!yiCbH9SK=027&)V^8N@K*y*Q@Yq5JeSk z*g6gy`H^vxO_78Y0;9T%R=wjVci*)JiuH{8%a0q0eyrk_%XQfVuDwo@}%kSYKKiLhP^9n{7#&5SPb$ z`;z2FkC~0sa^aJq({o!!l*F#?4aa4GC&2N!z%vHahWS||aJljAGm1dLQI{RMaQn@o z-ZvgHA2rwZl) z&mOZYtnf7pc=geKXE{w>HQz+&>)K@r`WpHaTvktT=dt^=@dpQqpz|$q*;`OJpoe+i zX&Gx#pYFmiGy^aAk!bp-S9;SvT4;N_52~oYITz)6o_-IN?Jn84uX5$4zci1m9gtdc zhrI>{R>P-<_WPt?zy2*#%;%}0@Rk|TxNN*E{mZ^i*-Eo~gVCZczDt@$@;{5*lQH5_^yMNT;Rg4c#Hs%NxO$!5eZ;*2?T9NyE=vGA^&hVUyw5(HUf4>7J1CUxt zvjLU3-G8S^%jUhc!<#1m43qW0^M2D~}&*w+6I=Kt?0 zQfhp&+0v!N2>tu_#_Ok$4v!w_-Z^OGcTaIqC`1b3O;g9Q#&kg(^XFtKZ$VYjM}+U;u>%bqMc=t!2b?3jHn9 z5j2T?bF_satD(%pq^WD1V`zO(|91wzUc!Mux)}H*!-l)?R);wld^0)%kP*C2eByj~ zqeRpbS^b`EZKFfg(LSU-${W=Bd^WB8NEbpgiPfKn6Pxn}r?b8Qd91$#?6Gwd^m zL@>em8XJTjTZM;=3H!YN=Ou*Uf6cYpbF>`QuygLCc)3F-9=t$Fi3tI_MW6J9O z+i%8rV2%nU6Fl^%A>XP2St{-kZLHHA8m4cxxi{G4J0l@s3#r(UVIi&8(M7y=OcV~oNR@&>+QEqV@^BE#w1R5k+c7Ywy%n+YgwWV?hqij6WoHkg$VBM zt{ZpP0Kp0F7TjHfTX1)GclWoGkaKhH&HH-e{V>)5_S#+DT~)JYRabu)C{QQf!1Ry` zOK((kr|#V2`nZhL4yHfg8ArQUs(XfLo5X+)qCh)7i-;W*3klLmIdX0E`gp$3^5UDP zX<@!pi5f@E2Wgj=HZC~lC#*GkvY}mnHyUYl;0a#IFOFea8ks=9seTP&vRqc;Y`eW{ZRL8!^bv&bfG;37w_>-hdY9p)>|M>f z)Vo7pt0VV&X9`HG)7L(k+Vii!4)=Tw&ZOr8BSqP?j%JKbo3Gv|uoMdM7q01NSQ}BC zDFlSLklVG#_GOfvL}AQNRQ4h&8sPQh2ex7U8a6sq4|+Ee>oJp)xOZx0o0e zpD`_t^}i^~q%Mg47A796r6M$gX+GKcxBDS}K%Prbagw;0plK#Xx_Aae0-E44=Fn7u zV(_tfQFu#Jyg+|4|K3X!lBfE2UGiL?)_KjARriCrpq6O)Mng_bU?&TweUni>?Tt74 zei-j8sroc3v8Hp$0$yb+(0oUhCaH~rUKCw6#hqoWQcS|q%P`NmJmO_o=6I*TQew@l z&k%z>UYv>6;AG-bW}1PyJjso*hJ2Rs1uH?2uy z1>K|&GdrCXPg$)5Phza^T?avGYMU#0w1L8@tC2Vc{b< zzA45gote>$Id#l+T}lyk=?14wgEeb+e7ddm)l>N*oSgav%MS}FU#zkF6gqqP&G3fX zo1I&k<#HAC`t`6Y^vUT&w%>GwF*(OH!@Bx91cTq30 z5ypf06OuG}Oz(MfS#oI0W0SCyLk4zNVmvU&i+3fT2ByE6ps^N2aGqmxijct`cPzZ~ zDYJE9<`w>|aJB8`ePR@cg1}_7mcl{dMxFf9>dA7wXpxF`N+EA2iec1G?6VX(4uxDb zJC~6S8h;qq5l-NB=bZS?`iGrOCkFJOSm9DJWm~-CbJUgD%c$~$lp+CoJ6nsW)IQlh zog4K-lbQTjYQK3l?6({B?kd(cf9QRh7kHq};7WH$^RiqDt95aKq-rp>J-PR{{2Rh5 zl?zs_tJ5m>aXQd9d68=J)TpSxy`j`QucZgY80<~ssGjH?+s;wYfsp~U+55!JF^abu zP25d3!+lDI@*Z)N{crg5J`JeNCyBK(*TIu zA3@%pZo23OIz!4?d9Vo8?sDDNK81q2@BmlLeDy)Ydmms!j=#I7Nk{ODX$GPiOE<6b zx6Q?=elGuVuwE)K>#OG<(%c+#DZ>ruI-q0?#anGz!XcAp>+k`HDgGWggGOsfAp?LZ zVzRvi61uiBrX1v|J(}51c77JdR2fZ6etP<9m7`*=6{cK>`n$s{nFx%CUCW=|kDX^1 z!*&|`pWIwAdqkkyZ~u7G92&L35$P*Sd9p z2gA#Ns^X=qmczP)YVfCmB#e9(BqQv9H~B7MWgep;{EG)dlT%JOvF;5o_k}q)1xV$h zS((WSnVJmw6jf{bwk~6_C4m^h;s@HyqA@a>nb=R)9()Hc{yFN&Uj;ln zSHOyf`e%JpnjfgMA&dh^m(1AtNzKm6=6afacfXKOmvLpRR)WH2KyDSgw*0pO>7K9e zdy) zM7!{l-h69xaHLy_y@j5kD(=iY!8PNFJrELjl6r&+!8jp=h8-E+0@!)-*D?F~a5gVbvieuOoFS?QN6WtXLX;ceQV~+N?2G`NeA$vLs{mmd}3z| z+*rGbhEuB0qgCiuFFp-FY-%d!L&LdD{-6;6l5=?=kVG1{`Dr)>rBjqMxV941cuB#t z_F(Vire4?NxTx2=?subAFDeLNxF&*s_}dl$(L9j5hpDaH^EZCyg*K;KdL3NXmqp!{ zMXC}Pdulp|)=u_;&}D*-M%7-0Ck{~Xk~>pOLMkGospfn=sx)r&R4j*?>1^BE7#T~c zoEkfo;7iCM$Tr&cr}z4)G)+8y+V8t08MRxT_oZr>yK{xpcWI6XQNH!b)|~v)a+w9~ zdci|K&zLM5c+tte?6Qymv9m2q`A~0}!Y_yCrK-+fZ@!6+`F@49)}=Q8Yq~rMC0)b= zqBHw0VA$(@FKyGNR)l{uD<=KE}8P4tG@kyg-drRPrHNQf}DwN#T*Ci^^f4{Kj zM@+={BPNO$?LqxROaBNPuZw^Ra#!T5%=`P5|8nO1kw1vmd{N{6))lwr<>}7*d>JcX zF!yJ``WykZ&=L=KcpGzkcHQ!zHyb>=-s`PRZ2IKnueh4m{4D@Ww&~-bc&vgQ$d)YK z^7k@SdGb|_e~j^;@AHC0Gg7H=(wGmskv^d^a-HYwcO`uFmd(oVkVyAr@T@59=oMng z(luj|QWc`A!(rFvM4$WG>oUi`zik$F{(Wv(D`ti)(6Vw z<*zrQFR>gDkBtJ#u7)}YvXSI`^vG*yJMT12`NdT5zj0o6$TFq2u0MKF^z!;2G}wR5 zQk8^1B>J$G+GS|*Eo|aMd7Isl#?MK!aVZ(;S;av zyTUMi3Xb_z4O@&xtz>2N@Y^Lti13k>>UQ;acoRa0vIm(Vrt}(=N1xnH)h@wZ>C9Wd zQ$G18>B6A+jj6OycE-h4Y(*ef>DJuPhIXgE*VaaUd`R7hF?)M3r*pmhHs(t04;?Ua z1%=OKX##X%|DeEX(ZKtWoG_&dZYEg$Jxx-^2CZ@D>ZOaMCHhVJJ%*H3(kVr0GIT12 zi#!auxvTMXSUc9cTCXl zX$bc`>uo3)G)m9E(VliAy0%Vd{g}w1{XM+tSbEX1>aCztfR$Zk$4tL*)Ko|2y0sV6 z8SkD}0*a6>{Qyn-v%>|N=V5k;eoX~z!vp1C+zycN=;aA)txV8dAwv-p?T(ok?UYeI z)j`hd>=>`#$Tcvq9^<0li=+@1oIGorJJ2a77a;o11Zr+r4s6;&DFJ(m{L z1>1al_fe=Xr@dEM|E79cf}jd3#9aCE2n8~>CgjA?Cw&5`9mPoEw7u5ut(A96@9(|r z*zH?UZ3x_C+cb%;_wIL$aHiEzM2`og!#c#zj*sukj(6|q7gJ_oXw|EHTxz$yPznOC zKP|h%WV$)o!F7d6@_)YL=m5A07NJ=EU8mA0;pQh_NgVbsKI|F?<9P@wPl=Tr*1nOO zaYf`B^=5dwfi@OL53AW~@^+%u(a#>ZJ2{M!0uOPA96C1(NCKlixrejRnZa5<-0^77 zlrSIOSzy5z+~~v^ay?^6!5Tp|o3B`&G{oK%nUX$};Vp8a*8F>Hnh?=)^hhl#%b89! z)M><@^0r=+lf8AJ&h;y|t~768pdLPm1Do7*7MihGtD%LvU!=s_xW|rn&}Y3}h83x; zu_&&IXE#)02kUYh=@ykX8~GQXIb6ZdmK-lW3fHBAPNA_!gn!0Y_bzTo<@#-(b3MGg ziT4f>FFaiFpD(18iuNq1IPV8|W-)kp&=N?Sy!htKlPTeCbgBy&;b;){9GJu(V^t?~ zuI%rMEl|*P7&j3WC}~LPyiSDAr1a(CHcqKH<&v3zsUVpARZ=rqNqBTovljoH2 zhm@BzX*Q-r6SAO+=G*f`QW|g*yPFu5z5rjz14y5@3tQ{950@q%g=MKwEjZ%OdiB&q zSjpK`or23tdtM50 z@#X4ldjW2OKQ)=z#0#`#^1HELrnuvBST=ux{~OS#NU^05KAsEC)yz(1`(5FSN}Dkx zRUq5rS9R1ZgDxb?DwHw<=aAoBTf3(FO%FEH>Gnn-pkyOuAxts#7L$^d%IYg8MW@a4 zA~W0lAYE_KHgA51nLn6VIC z{b2BWv%zVWoDn%|;|7`FpKhHI>|J>xplTy54EB2AsDSpOa3572joLFZ>`%wR2k&P-r6`5!j z=!j@1Y)A3VWK^1*IqO_7bjIJof!HWY&Lp@#GA^5Q&LJ)!uND>hYdb z{$pM??KYJEoEHUEEj;ti1PAro3-|W>(9qsM^QMwSv!_PC)e+~ATBNeX3 zpz1~`HK?N5#H-Rp;}PBie--N8y#pp`EAw2Rg*4Qh;Htu}{pHC6H@;a67}{#D|3f~h zG%Glvn!(;6R6mL2;3o{!fN}9N23}rxb@ewt+E*voZn}u3U+y#O)8wgnhR_ZIGv|q8 zUIb4!D0Gj@A=A3E@M)|lec3ou+TjPm^Ut^Z7|DPpd8P@gOQgX62e|ToMWaWO*)+L> zpMOr)Ryb~^@R-78-mI3zZmpHQtSJ}cJ=}FP(#P>cr$b9gZ=iyTT%PX7cv&o=6J7#2 z>K9CqK7e8p-`^q^n1G*ak5`B^X!lDxepJ*Sp@Xr`R>xR+3oW%J2@x_+J@`WT))4A5 z{Ga~H|5o~9HbB1l5ORIJ*VA|uVSHgs+4T6vI&sP`s_oJCPMfkks7OuO<=Sn;|F-={ zp!=K3N9){#|Cxw?OgHf3x@bVKU#7t^`R}gYzr%&J#UH`6gEfBm-xRu?-O zzO@|i!a~so^rGtAgfldy{u6OB94J@iJ5PU&1&z4KfWBjX&)7&xHyB14y7rMFq?B7g zZBk6A4hBKx>F6jR0A47XnU2@pXa$IoqofsbMgf+V7DPMAQgM-V`ZeL@15Tor473<2 zv~HdS@!!8wmvMFjC}=0z*@mI$ti%7ElhdYalM`+FlTZ0)0b%7d|0g+i_TI_>l$b50 zICBIruC#q=+UfNTwqYK4MkmVMl5(KKuWHT;xrknOk{(9aSk!#gohC5i)VBC|98K%0 z>0z7MlDW$c5L)@5S_%nvGWy+K1=ws;smuz=TTrYejt~lWz7o%hlhPw0%7W_Xw2Vio zZj0EQEoY__&FbTrgwx4Bwih`R1o6SKM4_-{=Q@_|hyskC@JwIRk`KdJcFVyw?|b}a znHXVpfM38^SKGz4q>?>7Sn)vOyVT?mJQqam`Ei)-bp;}hr9TLaKZKVPO@o0LgSFhw zt!#;465()#^j&anCoLt=NSKgJ$jw?Fd*j}kixv4&&pdv@9G3VKh0_*QAYLbH#E83q@f)Ocfb~;yJ$?@R5ji zjX&?CCe_C8TmqOCL>aSagbMW#-1WeBS6b3a^Mi%`mdpGVqi z^d;E~MF_woxJP_(%p4LA31xf`jrFFedzI9yO@&v?Fsi0z3E6uL3h6Z(p5?|egYm{B z(%YUpX+0_#m~3_KN~oo-9Vucgl?%+kyoZOZOqm}&z1MkjG82toNn9_cS36e}2iSdO zH@h?2wpnVVKU@gYMCv4za3>-5w+aguAP*x$eMc+U!uHRi{6`I?mTSlfNLw@t@B|e`eL^PKxqpI8YURvBylOQRhc!Axoc6fs;e` ziilnaR3i&=o9kng9R{s%drnY|Dq<1%SdyxJ2Y;&L`-Azgh*x-!5@sR6??q8w3Cj&A zut}1B2uKG{dFw+@e5`7!)*x72s}PzRjYbNXl2ZDezC$?woxaoCCjsH4`xIxQm)d6ow#UKj?#$`xd~axQoh zLN!A=jc@AfM8gmK8-)hme2EvRCu`+<{UZjq=(!3y`;U5YRELEi|LNqm2Zo(56oQ zMiu0o1hn5qQ)uajTPyP=UrkvMHnX$CnMZk8^q1^inZ@eWb_Xh6v0rPg z0vVZY7g;rZ8o5TKRh5n1fv=6w6YSxt{qJShKkQtt*Uz9HVU#Hk z`qd^znw+=Z;b4fiLO;qnCG9-!xr}DD2w>Nv31LyYut1F zfv*01ivH$fr0jz^6N|1U6 z&;R>*U{5}_|21|$zaMyj1Xv>_o{K};R~P5q5k-S(5p@iCHzx5A*eDnwMY0ooqs;EX z3c=Bf^M6rK1iCc9G4{AIg!RjtLDg&C#+PPosjYKJ{wgADn>nvn`t_Lsb1-J#D#xm; z1|rfwQr{@uoHJdYnuyX|KZ>5)6%gBu823Mo-3i&6BVx#ww`G`KhdCmbEVx08rMe?< zlt1_!v9*}psBu@VqGS(h26DK4%cnT+Y8cE>fCQC|yKRrs)9^#j|lN&W$LIi|bn^c0L-zA!9fo zp0F#@X$xHmwAA4&KHXKYryPahql9y9O$&^wc}F&>jjA*%mzm&IAI^si6vR$Y@iF}! z@V*ewPu%LkQ!Oms;Wgzbt~>z^96W64v#^kw8Y+nk;-j1PqQRLvCGlloLQHLZ{+GpP=2 z9`^%0BI)*3BTQS|DxXG82GSjTCo&D<4K-DL_z0MX^XOH6KXg(Dyv2 z;EsAb4^O`G(*296QspkLvDs$IoP*G2_eX-@Bk=c+#weQvwV&dcIJW273(AFOO@guN zX3N!aFvO8;-bf4f;g5;96F2dt6<&1%JQ9OK+5M*QT@e~QLOas$iK4rVxm@V5q`B-> zML6(1P<(wqTwi&_s8&N%Sp=>4Kq)W&Suy0UBb}H zub-R0@5ecqGg>JvZWQnYo4qzufkE@AX~^b@SSBbl z&#>8496sfUuUxEcq>D1K8cWt*s~CKA_{5zinGX%$Fh=`ct>_}oWzO8lXM+6=sWB<0 z)$-lMXKKWjhe+p`XiXE9qH*yGnt=LAD|!RIC&HvYvnF@?0rhxaxzUs>f*?ChZWv9> z@GmiBA)84fvt9e?BH?0KVFTap&)Ow9K)kSg{yNsQ7*KJY{>ltlE@Vn|Zsc1M`ywU; z;C+4;;nmusoThl8lnC9yoxNNgC6AbAijSani=HBLVq*sAB&#ixcGuU9<>qm~Dj8@b zO8$C7-mBZ#>(fTQwVSKh&U-ZXc4S?rlHD@%ES| zQA52x{l9YO|HQT};xNnsTC?$uck-Xg){ZCuI~x;tS9z#Xd$|N{R*PFy>a@%IVP`?@2<-##r7t0gdh=Y`pMG7lld#YTO?N=>*OD3=#;FQ{& zTdhjm6ENV#&TI$C8cZ|qCM~-r8!2iu^+Qs<&T*=X&whv%<*`#+Sk^Z%TDa5A*9!Om z&-VwEl4`kmRA|&hU)C%ssL6S@MJzqCb3ZryYDs}8W}=GYQH-|(GO7FWY3zG6O-rsX zgq=QC1@ay=X!j4(Uu$^aht_jNXPjNT&fo_pvO**$?G-EisPq2`ui(7eM03g>yB~z4 zbE2SB?BF}Ue;&qJdR=s6ksIWq4nwEe>l5T)Q_DVn-VZl4;>%brsUl z{#rmf!WLe%iBE&Cs1p}=InXcuRYzzsXo0}baoJNyxl$sg7Dn?Yh(cZ9b1-D!zz%h2 z_XHZPFXT2&Ua{?6;A}K3y4PvG(P)4%o|@C#xSUIi6g(+r#qW+q-y&j?^dDYa7~$Ku zx4i^IJecz(ShH~SlgIzU^=!p2DYVuUjKU`Ll7ZX20fU0FO+RlvmtkdlJ$rl-O1AsO zUKm*C>0lNGPV>Drv{jyBn!{DQr&r@hkE*vOY5a5*HF8RkExR+ja=BeN`9*TLlO@3= ziKdqzzu`PjF15<{v9oy_f8@w1lvbg(%QfZUx~dL!pCf)%Hk=`dz$j~^WxZ?=e0My0 znv4{c@02-%&ylVca;;zOf|aKYeM-ta(qXT?2LX81=$htI*XmRy*UObR;)@)#1$4jW@CZ0UAWDDx#I5+hyLfE zlnQy%c=(1yID_7~RKI4-e!0+4?Q^(l{GM*kgsQtYof)Sf#pER7Ts59zL!4`I%cLoceqxZq=bwmkH zU4%e>{Z#yAG_^(N$4rf}_6lF_?-5x}a2B;3y^3B`eLWp)ebsAH*@)`zW(n7{;3b5T z&!_hAO=#YmOT)nGt5pTtvKUVQC4$D2r?-B_X9QVre?WK!TNwCBzi)^XN2C zwPRnXX0sIUbmW9KcyMrqxyQ_Ij4!^|}?bgWXh@;m&sO zH7S&pJfwngmOJ5;_W0|sBMV^LD;l1X8G$F;4=YAQS=SmoVO2LGbF5CwMcHP)#$$eO zc@w@$8WPZ`e8UrzfgR4TN_hVupJXpGTg=kl9tQu;(^asp;w#Q$l_{T&jI*v%+9hcQ z4a?NCnQu<#A3;-#SmolR3QOvJ6Y6Z1xY5M&04xo=sy7EwYCeWC4eRSTPuVz&TT(uq zuAM^gwkJrspI$I3z$NY=Xs}Nb$QuE3YirPbI%(X-U&MK9UAP+cFx6=2C(1$D`(T@& zr_ng4Gtnkqt7lV9khPk3%1<+@_QA<4RErNLvuE_Hhw6L5&NX7rH2Dz-+^EG=pO012 zSHG);(#nAJ>Ev`V=AI}B7y7X&M&OR*rwn#J42&UB#eVhf(#JWO{x~~~)4{G)f43fr z((xrU6H_s_qZj074)B6A`8H+FGDVq;IdZ&>st04DY*;sng{wYy!OS}{-qcEUj&&;a zH?d{on>ik5=1tFJ+pY%x5zPuki&7_a1{UScC_-fwXQr0|2v5?+V~ncQ38JDxWB#EX zmNCZoDGlli4ralQV|SHJlmiW={Qg&jHB_Kig;4I6h`U3(J<=;9jJhq( zUZnE@E5jwN_Z}V^$*q-<6-c*LQ`)j>+_p|w$8}#7Z_G=wolkz-9!&6S_FM)v(#bEN zA^a`r>`?xp?{x>7DrOxi74<HX=sszUvBXO`eU7Hy zG}ydp!V8&R4$=ynE_pPuNQN;+5~J8J(IG*UIc1mRH@M65kY1w+;>zC6i*!tG-K+fB zsF1c_JPDo|4F1<>T78utomZ61V5bv3-}Om}?MM5t_-B-Df3CA1pkHrlGFsX9Y{g3? zqB226?4eU6C~6Plh(1-BoE2MCdg#-uG7)y)SjTrY=lp2&iFFcNq!Q-k_aoIhUcOU#Q0G7R3??wtL*GrJU!kZ2Q{%ptODy(`re}OpM8m z9v{yNLiB6zVR{V`ZU9$f7DC*`gZN=gjDoiO;vT2g?Pt?_!QQ+3TKigw2mjY%#0Fnlz}y6Q3ZB{oPX%1|2R*GGI!eL1qk5>c*mZGcHo#aQ>x07KItFsxE>xdF zV{kI($)SdR(TYm-2bT__o*X7`N6Bh-t6zHuh^~IrhO8B^{y;nMi+KUnqDPKMhima}ncC2Du}!N}?|>9gbTf zWq@WEb(kzqT95&L_}spHJlS&xf5$Sh@}o@!%XtgSD{9?@o=2)9i%FLJQw;}kgGm}` ze-6vaL0v#&zO|m_2}_;Fo<+H=s5C4(?Tl~CYcef0sT+lj>iiC~pL08039-L=2cQiw zW4X=Mm;QO%13x%!((;b>9-Q~S_3)CMR3EpO=jgl6EY7vmo)b094{NEUKf&m95I@?L zP*EV`qLMh60&ud;3l<+_I2`3SzBidbT@~x9Q&jl5mrL(lVg>iWXQ~SZB>u!kX=Tu* z`YO70GKJ(omTNff_1y$JPgE~EQx=Ppie|Dv{4>7e_gd0OBSFHb5FN?L$_Y;Geb!P! zo1^J>L-{Hi(A8oEq_`D8n11nQIjy-a#_U2<_ji>HKZrd4QK$l~@$*dtM%bWi9LI0R z_?MOcNN@c4n8pdrzsU;*82=NO{F~Gw1pfJC=#NnKUyuK9WEGHpGZA0_5^R>bUaJu@ zn4%>M>_oE9quZ6{-?GHPy+FKh?CABUqGTZ6GQlq|Sx^5irN#mByJ%)txMijXc_6W_ zy{{e5nWtT#N;^lzY&;H_%giNd;a4F=G5zG0G0yDF3Kh1G+eMw&?>JENISBy z>HaHQE2m2MrdjGhLiPY&>^Zrd3k8x@kYgRTDq{moT$-47;r_A)&v8XHf1YiQ_SB$> z4Fl27?KmFkX>B2MD6M8f2c#Sa2I72v+1CGJ2$#`;S=a;g#$#@?zw@#Qz@AA8HcUTy zCjDh2)P4Zcoedw}a7+GQGVFh(qS?s9BU1vob$uCa524S`n9cgT{cbFD++>KHC7iH^ z5a4seYl{~rr>u7Kn`oX>&cmgkAK%egi?dlJSCDfrT-#-6mq3R}{1h62sHH*kUG7=j ztJ*Ax)3RNp=I$v)GeTQTFOR1)CtGW<@<H{U9){#$JqcG){(>!mL8ibTXzt$8?u5M<9dpE%X2~^&_8s6Jpof%{&TvemVOi* zEUj|mLr}bMAV5gBNkw+FyvLj$>sFkzWQ9Fz;>j=ON=PCpR?uc>)1v<_*_myo-xIv+ zE^O0C^6~Y$hq7($qg8M3+H(ZEtbqQVrxKKDbFdo`zMcAvuk+NRxwEFPxl8bDOGj!1 z{TtUELm_+Agku0MEHYjr#N8Nt$Q7=V&987$5qQ3|K+zl@$S0Sg*8*MhvCTxaAzbyx z`CyP=`CfkGh68Lidm+^T?%D+wyvq zON5T^f`%(6$V8{m6a>;oPY6~-Lu;KQc;Xk-&Eh=-@ncZhq%LKS?Im&7vpU=;GM{oc zp1P=>*Y$eC{8bwS(O3NTeL=|F zR0Q~~jN>b$HOr~E>T9PRHg@&pz~$q+lY5)Bms%#T92(E)vk6+b&YC_AWj?jqyskVG zS*QZHC=zPZmAq_q2x9#VSGrQw{gQwe%)`y9GGyrWjkN^a$;GCTUS2o8Z@i?~M?uN6 zDawN++B=uNM?-=y5BgjCY%BPBPqhMrby7ulNy=czH98IDydRbBvz!puSN8HBK>MxVe_*O&iiEtg@eb7{L`K6z@T4G^VxBoa4r2d&c6} z@6$-OxHDqiJ&~H~yrsi$gE8Un`hVq$(K%e2d}rn#?eVIF=gtp&)bk4}xsH$&5v%Jx z>?7N5l5_C5S-}@?qHBNfQFz12wN|W(lU_iH)@5+_@pLfO^=>Y*TdFHsqZRgCD7784 z*4PuTFA_;OIYC*Q)PQi^KH0ILt-toUgH~omUQT%}g~qowo0t zwS=|=_LZ*5>?!5@`99U~#=KD3B7z1?pzyq#6aJ2bvW)FL9LkGQSy+qt@}ik(+{PLv z@v}df--^IF_P5jVr*@8uW$Qr;qpkUGOYgZk%LwT1^Y=Z#PGHM-lA3R>b#bo{x;u#8 znk*O&IijDAKz_x?4x04MIT>gmFxjETPx(cGw;X~~Em7|m2eK7QX-kkXo{B6lYlR|c zyfe!AqaEo@!s_=?ktt+dAN}HfP<(Q@*dsr^0Sxl4{APusRYXYduZL>8`c%yh|~v zRAzf24$Y5DocXlX)@7@iu4xB6aBp}S1qRTq1U291t+j&m9h(7;91+)d@B7p;IZ?p{T#QJ^4w36^7YXK?f>w2<(wLvN#H8@VOzm zO_;6?8}<;K9QvVsPMyIpt27-QJzR3kY#5yfpm-0=MVdetuy@we~0eDU0H51#Oiy3zsnrs?yrkv`q*I>bIBsmW`VtBAt zLF3MqyiRe~N0rFJ8Sbsc>a}TDWZLX=->?Z*tNuLbc-rZ!RDJ`$h?Qj?G3jP=vS{Nr z!3N^jePU(%a#8)q*-SjLE8F%c#irKuiW}&Wge&9t=gu$tGW?G_=J%pqBW|C$-Lu*P znAG|y|5)E!mWvdWZzOR3hL>5 z%iLF`x$Iq zOJCzodSy(*)xw$>R1tLYNU>lyBE4N9=+S#D;F9V^Z}e&8@Vn}W1wf59JM-4qT`vyU zFU;J(IW_+%L*4~-)(+?H4(pK?nT&b6f&$M%ORFlppw5*Zy~DW&+Q5I4EuDd|Ya-G0 z>wrb6EXbMJtVDrgqe&GWGx{3@(7>#nD?uEuEdyWGl<5u96h=FchR;fM$VhN<=HWBb zK#7LvR^k|H!Ep8ZHm;MEzU^U+>EDzkCF`~eX1^JdSk_>&}Gmg&N?h(eqquj z2V^YdK^+#Z=l0x^8E|6u=l5Yyt2chb_guS`ry+U3*xI+at62#(Sb^ZD%#6;!#u%-Qd zK<<_YG!!5I*pf=YN7tt-G#Y8r+(^4#(?D-i7?z+iW?AZ-11sjOv6aDhPZVOfDN0}| zTttj=(H&JQt=Y+y5hNu_r;HPM7%%3`EV8;PX8~9AE{8(>2hp>7Z=IsP>^ykktm2K> zX?8(T;a(Brs=@YwZcPNGtQH)N0cxm$apID@K8RZ?KEB$Pta*35`SqxN(G8no%P%C_ z8?>AA&-F$ws1#R{O^x!!*%y?wMR9A`C^|!J6;o31bkji>f`g*;v`Wt58@UVheiy*5 z0wTpfx(YPt1~}`!u~V$K#XfFF8o?ZH{TiLhv_gb(u{ z94|0Kwr+dF=54N;o=A8gr?u>9}+N0k$}8(cxM^Mj2OfN z5e)Em{|cIwJ`Hee)+2^zG>Aj-o2$035_@m?LX|}9LgiCsKWDQdZC0age3HQqqcOjU z3F5c=^%TvWv-+E~UI3Z(BcIC^sHVKr*4-0z&mf)viU26gm8$0pNO)MC_v!3PSt_9_ zkCKn}M?U3YH=M-hS!|Mc>^ zn_>4;#pI%}{UNYvuqp4*-iOOs08h<@#z@uK+|U^fDqDft*i&14yFn^e$Yft(wDTaB z=D|S=*@jBdfI7oDX-{1{mKb4pDDJL@tAqsJYEbhS1f>jg*wR zN}vfnUx3z>drCr#?GqU+Dt=x6X1^JizJsbWp3`4gS$Z4Cm<)y%A4{8aQ^DEMq#0w< z4%JsRb=x*DPZde<7%H!Oh{Ipn|!^szC@i(6xsJ#MiA00BPjv`IXH0cGGZb(#aFb3Gx>=V+2-@O}Q1@?_^A+zG`9q2VFydZ(;Q&EJ0T6C%FDPnG5LJAf7Cked7_<_;8&n=+ z7tCv@L+i?P6;&yddh@jA;(S4lL~*^!`|wzl)f?h0;^A&s|54mcEun$GFKi)ahe=~h z)LHeZ(W#<7fn{hjjBdQ4Su?*m^J)t2Oj9}|PZCC!nN-i$iE&dD)@_Hpo~c|3N1R|P zUZUxIP!L;_Nn>NeaIXcw@pg62d54^GbZ5YM&y8u`Y`Nl6wt>1ko1;<0(E`zQm77uF z@gubuK?;lHLkig$p>OQcRP&oU!R8cgbQfxesd_*=6=|IB>yIQIlx`c`0}KazyhF~| zyYG2Ws^kj#Is6)rWfyRqCJG6zVyd?i_?MW5sK;#v_cou@(% z;d|?VG(IgzFc!DU+;~-{j6*w56k8z&!XvnyNB%KRMk0BkLb$JKv7kctHg4oi74`}( zDD=FiCrpNV0S$h>m2B#`q&vO1`oQ<$L!N$e>k8-+LqGqn`(yD3(H7SSop@!i0aPKl zBR1tH)+7I2z*8!X1fTk8g7@RW()r0sTR#76ExE=hFq>43sqh6Anv&8U!mBX&Zn{x(wmAckJ+ubhz16?mXPg z>e+WElG}$ieUnfu*nBlfN05`+pPa>}p_yB=nIL~&^eV#0TeD)}^~h@WZjDXg`BOg_ z=;n~}7B9DD;O2vAJ%=+U3P~M4AYagr7uY!ZuTMO2YTJ$G?DK?5-{vn_WwH-aKl~ z^3+WQtSFqZpYDWFFyu!L9;%e+yXc3C%NJI)V8eJJQdurv8;9VI^4dfMiD2Ir*G89# zz}a=)elz1WwMVGR{yZt3<$F^;b%en9dJ=TcouVq+>^rE2Pc0>pmgL`oW7?Y%b=Yx?0l5ELB))OE7fS1U})I<07p9=rJWx-YE%*K zo>mu|!c{G(PT(ePlY^97)6+Fqpu9dEL128i*>h>c&Sz8dhSnlCm8EaOZED(Sd|+Xe z=g@|6uf^97yQe-cZ_Q4$6bb}r{xrR+YXw=Zf@doZHZRN4T`v~EuzOtq`z738+sOdZ8X%GPs(07l+tJyMue73 z%x?5mP4e!RWJ2K+huZ`0A%{gZG3fVdY>W8(6zn#=(pL^G$_g&W=SwH~h=_jfc}r?I zrPidF#R2R$x)3E)d_q$(FjMOUPbybDk$GTuNZWD=%8Z>W!=BP>ERMFO2mSI#I2I*T ziH*{S%zZ~&n?1KpH1qR&;$lafvbtMV$@0!>$#9!W{)KfAzqA(4OBYu67gu^+Q< zdRg+g!|un`XFWJ%)*_+CxmF7p34XbzBI@B3k9XCEb8Pw3!&8!MDo3=kywl*l*dicr z!AG#mwfTT+{Zmfhk0R2SyoAb>7enY~MPxt*^M_OLQa~-;KMf38$)oVS zpncVoo#){&#Ph_}f`Dx5FZ>_czB8<;rE6Oeq#Z$2K)Q;8fb=FER6uE=B|vB@ozScF zqKHyOKzfr70i=W$nhhm%0ttjFN()VaP(phHSa{Cy`}zIJwYk`{_sp6#tK4(1*(X>P z52y8Ca&+Ji8Wv8R=I)tWW3I#2p-SH|r*&}`&5*(Wb>rcm4xT5+Df1+R*T#aWs~!O~ z-lI`TB|r#uacw%Y1wA$7<5)P3*=DSCXYDb@L$cW`sV(GSz5mjIpI1(*OwD%i=}}>&k5V4$(KAaOy$HE7WSh&z zumeqyi`(*)|5se)jg8v9THhLO&cLVtTr3`nJ&lmM>gmyLTcS}(vDoiOZ;Xnz;+T7) z2iJba>g|$z4(_47{)HcA4atLtWS*5!$te_OLuOvu;PXG48BlMvg3ZI|f2zhY)in)Vycao${ePM#B)D6Ou859Qh(q~pc-mMh&atp`>AO*JIL zqH-K}Sz`D@p;s}E4AI;U2+#LI|H(snI!$M)&f&Yo9JN3|UDR8m4XQ|m28oyo2 z+7|;M5%IZ~N^~-;n^ehR6Nj7~WnowDQKS`Fi`xNw`7)!+T zAI&FB^&;Pd@Y|{isBYzw0lm!D8oT%2+^4mj^U-rZF7HX!N~t?P?z~%-dK;5wLAUKm zH(Si|Dd!T;eY%3Tx8bwzqD~=1sA;dmUuE%ACk7g&wUwbBlXgs0ONBx@G9Qs#NEGK7 zpsE{^Qt#<9(6^Se%Y@dpEQFyN+urv#8*)x1K16*MX)blf78iqYQ_dEqZM}M?cEaof zJ0rNd71$!BFm5eOitvRe?`F`lO3iK0Qpg;5_oKhDgJhJIX9(Nh22{eM$!XVLKQP{a z5sFHEIT_petqt4HDX0bZ*G-~9ir5c&mF%pU*$aijagkzx1-EG4aP=lYn@z^t`;YA% zGy%BC<%b+$D2<@{)utc}+&OJ*@Bz_71v*3dMYZ*9*4s}%mwVTEolt1&nj z92CXT^0_L?LvfaxsHV0h#7qiiyUI1?)5Y#Tc+t=2-PsV>ke7t}mUd8Z_LU2EtbE$3 z<;rZOGR0Zc>ge}=L_ptb$|O-vilJg=#vjDy*=gAi4Cu%b(Z>W0n<-OI?(7e|G*b7U z~BD?u0I}ATote2O_*&lmk{%SvxTukx^H>3VEEdWI>IbSWwl3fAae51(|dqqmPB8FzYstq)nZ# zZQX#&6-zc8UXJjMsvWD6ZOeA<*{cDoK;OG*WnWpaf{)%PaZ-W$GD{I{Z8~e0D(%Oj zFZOgosYh;)XUHlFFE0*NOn*L1BLn40X$xF=7BY8p3<<$gFG(r`xKbQ2swA5^vo!Z* z$$rDZTTt>&^X}T4YOAZWdv7SgaACc+SS22euMMwWx|pxC_IuWg#rmtAz6vNV`!RR5 z8A=3gug@FSTA#!#oqGo%K-#$CXn0@MSGRP@Pix5CjVNuXX_Odr$i4qHJ6Rw$Jbqs_>eOIMDzMxsvZLZ9e78?|*#M5Ux?rY_5-7aPvRfmkDtnqkp zB!6p*APSZd7flMr0ybGel#Di9SsW)W-Xt!I$(J#h9vgT+vY_HpWxr~|(#EChgifzt z-h=l`RXtyBR8Q(m@tnJ(QRwIBD`26EyIX_7jap$T>y0*=lFmM;8NDwPVu1NRC7aeX zslER}VdWoau|@yA#`8}LYhdX3+%zA4?gwiExSC}cN+Vx`S%&LOV|&Dfnx#h5!Z(Ih zD}dDgp}w=%02hl*J{E#2zeXS)*V`=YwlOkJQC*@lXF+3lmE&jD^p-yeCW};r78SvY zIF1s69x5XBk*wh?Ws&Cu=qE@1$Cj(5tyO00_#AnTSJ#zH<=~fUgL|5`)rghud20-p zaiJ09qZcr=ug|R$Og4>hZrq;J$lc!1T`BPAzF7gF6i+XQw5h8OjIkKPzW4@iy@KbL z=CYzD-9JrXziB?o*?#YF$2{)VsgC_V?owORBAfS9`Fu2AriXoFcWw`48@^!9Qm~YP znPC!uw&>!Qs~D%NNHvAJr8=P{?@dA<2_{AUG0~Qa@TnZqNG6bL+vC#rYm-n;w=&wh z!r32R@q?|J9=%kGV1#z*Y1j-+4oDgXd_#=B+`5I}uAIM>sdRNcwvQUpn^6N#F!;_~ ztTp~}00AwSX&SPYkpR~}%3hz|gy`Smw+Lu7R94Smj#RAV9w~;`aWCUM9C_UKJ~O0s z)p&qr`{pV!6<#$e-fLRREz%|XZn<=&a``6DPh9}HfQsdY%%ZLN+cA!^ObZ|db4Q;K z!*5xbaC=eE)438y@fX1m-#5o}zRY7G_BC$VyFaRE+&NAxs>4YFY%S_oyCAHbi)XS} z9n;z>bq$b_%T9PFHT;Di*LRI~#QUvUz#L~labken?gaeng4~^_#PqYHkqN*B@jGU% z*KB8E>{Xb>F}r7KSCjL*G{TtDbH2a;%oQL0b(zEVrgC>VMs?ZozxODUkc zlnAnaOGmKQ&jNSf;)_a?NZp5YZWd#UG`;G)bjCh#E{74Zj5Ps=k)@z`UHw|le#`h0 zs&`u?q{Chdn`s;36YEjfNznHWTW~3&TFT}P1FqVCQP3E~mNt@6@;xT@12Mo+xccyQ zU|hhy{{>A z2!l&Qq@IcL$r-HvcFCvjgv_pdfq{42EzUx1%zSzb{e~8-!R~RqwSeGBn35@*Y+fbF zUcFWA7AW;7>X0`i-&8EhU{Hej1tfbR*4|)29sOMc84JLXC(j9A^Sn3^^svk+#fu|v zD{hI3A4vaWj3OFqH-?{2GKjrkqu9D5*#-n%ZqAgCPwF)R`B`v;ZqMgaOwCO5WEOj^ z!17-r2p$P5*j}8pZELo>vSjvkSakWv`i6-K?XaiAJnNVz)FidfwDep8Zigg3$@L$O z7pR-O%7@d1F$xq#Vp0=NpRH9VmZa`~?6>RgvZ`W#Gb#J~n6t|?GjcK-iZgr|KO(1g za{^qV?3APVA&$U*~YCa8& z8Q7w2c6&92lVA@z=*Jbe65Q%?gzV_EzFod7S?iv$!v56y4X%ca{3u2dJMUzj<5dsi zTR>)1r)oDPHR(G|y%zJW&`|DteCo;-W{U7A(UV1Leh=v;y7>t}u}lEcWL2?$_QTWW z@8yU@XA8W`xL2Lpr9~Gk+S}&`cW$!F13_mGKQ>2+Y$B_|F4n=EjaOy8&#&m@p!_O( zydY#ss=)#!TuzmABWcrL$ZWRV1&TlWg0J_zjpV^CafU8ldZ3dl z5p`r53@HSJN_gE1nSzGZE;%FEUHr-w=EX~0#_%JMI#8a6{0WXN z-)bqI&T+JGBWl47jb+Pfiym7xL3Rjgc55^hZJ-^|KBOa|p<_~tp2|sCU=4_0FX9`_ zzUf0UuEnCU*|~CTY+hD&wv<#vq#v`CKf^II2gqykjD8d~Dts?{f&Yc=sQ9uYH2rdN z(#sOX6m=O;^SjA7^QF3co={j_ap_F{)@!J@X061Mi5#q@Yp&6L@w+7FcCAkaPT2d~ zX>-h(~j5fG9rh6%1l(&3y2JiFGCcACu|&_aaSB!i4g5IQxVK*d?`3`E2OsYp7ApU20}@JGiTs zmxP;}dx76GD&NA|Y5eADNbJ{Yx7wK4X$^mN?>NO1LEJ$IIo%?UH$N4h^qh6~_5r#n z^@45yMj2E^wI-#YchL1=U<+RRQ$44F>5Bfwb?tT%vb_Ibs+pN@2Gcc=3qtdd^Ces&8S6vo6YOpxW%6%J{4uB*m3dDdu{T-TO=6!$dZUXkmf?JJLFp6=#? z4xVZ7`tz6?x7)jAWmM~j3u;6<2wW4Kf)?Pt9N1!iLo>NBcQqi(v)W>q?8|skF~C33 zjp?xy_DBM{6mbyr>$>D-tnL&QuaSUeS(7lJEj?3rFKY@P>ZMv7WyqxU)p8z}z*+2} z4^`q=<=7uo*?m8<(dfb7^MQVP{u7s<^fsSu+rF0;Pf<$E2Eg}=dMsyGv5{X2XnenB z&POTov5pD8B%N)Ud_6vYev#gEAa4YFqnSxYl`=pURZF7I>u&QXcIz=yZ zs~O!dd&V?r%|3h$Ygnw-csaT9dvn~kHjMuMyjw8K;dsS?1S6q7l_yAi_Ih)zx?H-b zDQCm=heXUK%Y#2ve4X~X%=&YdyWz>3!DD#mu(&z{SChT8>HTfn-7Pe-qaaspH=p)y zc)*?2eVh%B+}&n*#dHpqOIhWDz1ex!`ldDe`On^;C~`s~kPYJv&?lPbZ>B(qteUr} zuSI(+w{ft>HP7ovy%2L=ha}5*1@3gx-&gg=RkW@8$UNHMkDrjSD?(XttHbc=Ss(JJ zXRVO2-}DlT_VLZGRZAt~*6%KQ4jEJKy{F2Nk)5eYj=7L+1{v!g38BOdG6G4+u z{_9l{E%scR-g7xDcj2zs_l)SR>Z=nuM_Gln=0ve*MzYy+d>wg?fpc+7?Sib}yjxl9_NkejwK&zaR zu!+~(56&*QkJWBc0U9W;RmL*X68U5pr+@~v2D81`imnlhTt!s>y(tah8QpB$i08|N zrtMIwp0C0j$$se-9P(=+qF3!lR6Qx5*Suw60`k-(BzP}*H&$8gi#pin`grNL&-rDL zxxNtm!V@o3Z?LNRC3}RbqwSY{KLm4`v?1h$Arg%k+#z1&h(hPgK)< zUmnqu!;d@86+U+cd)vXP4FhO?!Y=YHbf2q;guZeVx%B12gdGSBM6bK~6)U2$f(ov3 z_|IL2TkM|8bQX!?ZF`XcRo#O%!{5Ttv;HRRb+4a7f*ELG*M|LWN3pr*ukCH)AGPuA z&cg4lG`py^%ZXjCeZhrY1VSt9m(e{>7>WoVyII_Q7~3WUCTtM&xT_}+X7c&_&Thno z(ww+QCHl@F6ovic41A>QGYWC`NvfgwBG7cvZgSH!z~jEtI`juDL7=iyY{sZ@9%`Hs z@U8~;u5$VbDPT=aj<;U{LTnIy9=tNfVLz6ZJMrwT_oHbwbq#^u7Q_YXGlIn$dwW2$ z&V{tc`FnSwLoIFW0(3m@zw~eZekvq6)B1}b&sl>sFlHb7((cHL{&P|(Z}cAv48c`$ z2emY9q{t`ZID>J!!bd5^Nn%^dJBo^^!6~-kZdNalnbj0irSChrZd1-Pz91xH%B0PT zR6Eq>r7^7$`!rpSrf@=qi=@T<3>$CvhtJlbiDdzsd&p$mq_n+IOnv^|^2QXcP?23@ zFM18vJV10llu5?tDLzrG-L-2-q4|VzB-JDA%`8<*GW`PDyO1i7>lio`xwUaSg~(^ihA&xmFLMUai<| zhRF`dP^epmEtt|l-=qxH%%tuzGA2M7g!63VYvJRdOC?SHulLY;C$|qnER1gE-o8(b zO|0%wp7PV%cG6$pNIo$OEc*Upx^eSWQchBV*S=7RE%Ct1fYe-C29qtd>keJ-Onp#a zxnq#qFNUbTduP<`sdtX+<`ncs&yq$*#P3hN2d`(S!rZ#}`}e7vb+sR5F%~tueDN)= z4~LH-iz%y9riM&<0G#koLtCWol?kU;ZI|lBboBVezOLoaGhU3h1Y*-;Fq?HCv9VM< z^uEE!n>&#j=|ve`cdJkN3uo-T8uQ%)mVn=AAjgxk3gx_j8T-~vbRAoyyamvaRg6r% zYl%!`v;Dn&rn2YRhmOMjG66^D)h#@>=@>MB;j@fKSH!qR6`G~8=(>#S2yut)waUH0 z6uBg;V3i-!_cB}?S^qg(6vt5cP1-%zTW~v2w!)H@?vAH;d=4BfTkQR!g*FYwQ*+BM z1k>OPPa?<1jp4W40Ndm$jOR)?O?T3&Gd=^gD;UZLA17!_|zpIp+2*qt{mH zXNs-L9G0Y~wp0N8nhSxoMf3Aq#$R)XcFVNF#E;ylD#48&Vr##`Z$kKY_M%`Hl&u=; z%JMnGR?ZlS@HcPwUPXfEp(`{|^sw2Fday?8O!AyvZH^`&`^ThS9pMrSlx=QLR(40a z45ms73Du#qV&hdGmGYfPz5r^N7l6n^$?|Pq8&F33+8` zz%(E1lnvz!DC*T}|9Qp|8cSECX>(t+4wN$%%%zi2Ce+*T;bzFtGShxcy={y}(htI^ z!ZJ<05rXRJ#qdYBaRkH-9X*}6`YZsodjWXfZTr)5H?T*iY%T#w`Ut~^e*PGAwa?}o z0tRWD2fI9oGx71N=l1cmYugtL>N$I6;R_WjD}G`o*{aJEkt#R4m4lc!*w9TL-mkwl zbV!VG5+>FcUbMW9JWWK_&!Y)iHu26T<=!2|kMj0+KJqj{#C zUgH<;_TM%$>wwgrjuLoKsY8jwzs9L_HWaLx4X>^9PY<(yWlf#f)qmoRX&cRzDC2wK z^(46U40Z1kZXPzaV_4}DNo8DxQi<%X$xs);HJ6#*7|QDiF9dI~?OT$rvTiMHDk<9z zl_Z6p+i{-b(%D*2QqDE-N|DuzEsVhv!O!&8ZeCx#@$BuAKgqiANo6E1cfUw+o_cQb zqg#pTnrfqC{rUYKYxbG4^j?mMTEDF6hQ`)G3tKcoT+}n9O#p8Yi6fTI4vo^${VacG ziPbzq`?g&2!2VN;%EN7@%ud4Y3~Ks=2qCk>QEu{dfK9g|yyO!%9`fR>EcuVJgPKrz zwXm_o*b+Sx!y>P;(#md$t3SAQu@>F>`F*aK2fP<8b8qvk!4dYWV%QiH#^uKQO=)f0 z%C(javH*I2Nj=q>?idD7i$3|r@6+8PEvtG8E7AM6D{(x$`Y?GP5b#xG-&g)!qgbXS zkj>PM4oM5S`z@HUCbuA#tCiIyYnu}nuC)>ubysD~<*GLK81jtuwJ*W8L>*AlooY}S zm3C8)+P3)ziE~UKFQwc_cRkE(cV0KF7ys@&Zl!GehwWue>SiH52FC^m)ZLVPmE<5D zlODNFfs?mlCpnr6==;WcmQhK87!IEV1D_>>-QjLdJ$3iUd+CLqd+mN5+xgA!@dD;D zUowS6NB0q_M?}04-yo?b!MSO1)o?;8L`Os#m4W(vd3X3VmSg?~cVT0ybFAX$pP0Ei zEgAVrSjWhRS7q~iM#*L2B&aIYfRBlsM%517dP^UT;uEp()(-_uq$;oIr+LP0n;MKB zXlbcOGeRDaQo8aZBxUyBTvr@G2hpL>PV0oReW}2)adp5J)Ml7w;r3Qe?dmrLIEuXO zYw-|>t>gSgb0OUU@Kux0;y#)UeqJCm+|;W>0PZ6xv{`@U=L8Roq9gk!f#LIjQk$t3 z$1{}v3iX*9^gYOp?nq|JNFjv=rozl2ixgS3rQTHAMcd%;NZe>Ox?*lu~#{W80@ zpk3UuZr*K#!&w@@R>!>9Z=p^|lK8SGPB#?fQZ@?!s3~;q#N~`Py))j0=FV=B|3F~s zG1?KfVgG}; z)M=nXqv&c9d67(g)#|?KEQ9ddFpanESZ#9kUm^{KXl%$uwtKj(`FIdDI{3U*e2TzH_F>L z#C`9`7wun-Ta1uls+xQRfK$D*5&it=(Cq#%`eRfR2p~p=b!SwcvH|Suy5Ypw8!0rF z`$M-~fY3)=0-96?@0+FDq&+YcSzA7fDspkQi-Par8d#|7GjF{}{n)3nBF5Akg4vkT zv_2+P5A1zVA!|fA1u51UX%bN8ouj>7js{w&@Yzn0np#hpQe!`IDgmQ4SHrcm#ck&6 z+Fz3ArOADzib+#xwhOk2LEO|Udhy_tImuf-gI#{{$eWY6k%jzD)_k#@8KHQ!m9_ST z7~%J+I+;X`_;a&Xtvy?$k231wWB*VMoMK6KB;B z@1+h3Lj6N!cQs^x?na$=UBuhh^k~td@ho~KoSx)gLXn7OTQ|r_^&Bk z+cF&}?N3&Qn2S0>Pueb-=XvLuiXcV#v39MBQ&OWoqn|oQG=3>s^dRdk0uFXkT~E_ET(Fy^f$okKOIkUvC^zrae&n}( zVkvXguW9uOs!Yy|=R;J3UiXMuo(Dcj%R=H))dJGYve~_U;EMo{nRBb4a8XJ4(sHl5 z#pBymc7SBWxsmM8!5wjJ#*l>hg81I6$~DB1(c-wImL$09Dg$y>wS)p4aF%~Ap zdAVRgrE^5$_gcoGGkOjs{C98tr14Sc6L^6tGOyX)uka!rWM8XZWben!-|FEzn7TmT z`;m7miEIpp5=3juo~yqA-qSxDNIwCKWX@;%6EoGX_us;@`05*@)2uCCIXQ=kfN*h@V3iK-^w1k8|z z66v17YOK2HY0HdPWM&R7Q0P8G_iIT3&^OPljOW9csPFyA?tDz`ZF{!|R5I$K9(J*4 z5X(IR6#Ic(>b`+w14vob+(1{HSHCbRKvZ)5?1a;P-#JZ)qHfXQaII-i^1J|fW!T13 z80z2q4;7LQCGT;B8G-?qt_#Sc5~K)hrU#L&mtp!Xoc${RJJh=pJzUS4a-22Y_k?yv zKe~bwl{WSRchh4YuFIa+ACA!~rJ+_w#%-Qmb?Wf-t9FX?U~TK|`PStz^lYg&Z1H?q zD4tcA`ov(aU?u1E5xxcOv0UG&6q*=RL1kc%Q%I8hE0W}d00R>AEjNkP+EBXnXR?!T-VxvxI>skP;q>}WQ4eLqyHKe0)yjNpdcS*W8}V^j{Izxh?Er*AJH(A)O43L{^cfb3R95Rm*~8a;w4_``btT-2!5lTNJLX zd4$eG7f>WFkK}mYR+eeJ=s_%`L522YoxK{n!|ab?xxWTrOtQ4un&Yvkz$0b?(#{b& zzfD1QrqJKTk_QCSn>f0%jv@g5)7N8;=*9p0{1YeHi`tKedh6>hsgl<~iiaGP|9v=3M zKy0S^7p#5sXO9|z^xXO63e%AV|5s;-k((_42}BNFkePHqq$XDsJ2r9$nIMYz_?uJp zy;1P6xTKiuNv4v}m7^za2A+5;!dCk%mFV|-2= z8yl`4zGeW%XRu*w!e7mWuk|q%!Ec&H%NjLmFr{b#2+@uOef1Zw(VisDi-&^^Vxs@v z{DWH(bf(a%yZBA*ho%0WlZ{i~Ju@DHrxlHPuUBnsM22f6ywUX8)?T7D{#oVJ=1h znEET{sT{6sX^`;#o`T}GXi{VEKSxX~rw~s^Y^8HZbwHJdPpEXJ9>D`xr!oJ8c0sh? z35PF=kNajzExoyAs=aR_Q&io^A4V%*%x`c~WZrb~n@gQrtM4pBKW9`R*q(Xp&z?k; z{w4cQr&+M##?RA=!$AQTJ+W))Ww;tM`YE?3wjUD9>)`>9+*_Yk|Ba&*i*Nzhe4KX8 zi^~v$?rM{Jj%I6(1qoP1iP^~(o1D7s?zVAnic6Cml;Q^!OOvdc;xUeV273D=8!_)* zlg`MJlTF%fZLRX;b$oVb3V=tNPxI4ys@6TtCriu;P%Rl|$$E>}b+F$N*-Cktt>DDG z%ukq#?cDe0HtANCe1#nb4yLaVnV3kE?5?cKSo-nXdX(V~RosX_gB)oknwnO{ytwRX zYgD6MVqC66g40jkd6*0G^;7D7d>W!}URMp>S1Sgf5|G7jcs{Ao8s{%E^gYvhJg|k} z;x#11nw?kAGzVT%^n|_B4+@Kl0M+zhvd2~2q;ZL$($SL4rriPl0!>4de_kg8%B_dO zSkezPT(blM=|`Ma3Q089gYo0yN(aNs;%DCsnKW-jcqe&e8z+JH=T4`&;|o>q)T%kO z$?3|}lNcEOv>Lt|Eu6tNXo|27w=O1TxJh^JA~Pd2u>g^^i8H@X|6A)%5Otn);=c8j zObLK@_<m?<;5wOvoJ7ZU@nsRORx?INjNc}Fx^!$a%KyXQO0 zA1UQ}JuW}o(3%h?!i@tR-y$I;G&VI8g-DCv3!cE*)O2|2CNYWARY`TBvg=t|JGVi` z2OsAXE*H{#?2R$2UyzYGy&eY@ip*Jv2-nv1R0MsjWu_2XRay-nnI}yc`e+P%TV4+& z;cha-J%c^Fi)=Db9rS)^RhP8ZTd6#nt64NpraOapO*`G+5fr`!g40&ageUes`XzJV zfy|#j-i8g~xWuThTspRw+rvl{L%uP@-Xc~q>HuP0y(+b&TLdlU;GVj-l~6ip7#WiD z4(=JN64n@OL1oZARuth3L=Ak06iPdbd(!copt~?BnhY&RO%0U75XnhH2174c)QiKu z1DB>~k1T8k4PhaJ4NW3r=aTFVWZaKwFo-Bk#1^|NB+Ol`qnYzGu`mYSw4;)QR*BDW zSAlGph|WWC+KFxM9_Z7JHTe5!Tp15~%Q>806#_g`wfyhJcm=*4uR{Mr#gwMM|G1`z z$<5I~p@vXNP)Lami%V-VWn<$9+C6kEyANJG*XgyaS>qY#Keo#nE2L zWWA4(I&n3=m9j=Itz-1(gO!>T7XPm{RgnmKy1^JTbkIhqMwEa+Af5&GL zIfw|D6UT%yOc7&4y`v6Wd(Re8c`DfB)XtI5X;CIV@cf3mMjAPUoo3UG(8#>5YwxAE zT<7xVasAn`wBy-6IztwbYE1o{rER|E@|oD#B=;YclA8u`YQkj1@pwc_}lF>X!)&8j0BUD7PG-?pru$k&n(&Eyo z0Z7RD`ek93r3J6mo6Z16ImEJ;F*PTW$$1W9{v10{3dsc(26V>+BjI zCLTLZWG9dUkp`taXo@&bnEbU|3vq2)i=&CFy?k>1aukj6yAJ&K2QGx~kl%2-&5G6; z$@LrDTKd*b?ZBUW!NYq4m0K+GkOHt+Q__RkAaLk^SGEzFh6_^D z-fi#D4q>>5N-nI0stJx>F|1U<9vjGSU8oHq@tr(LObDVF#om-jjyi|>ag`?KUrp<* zH+S?DeNX4JG3(%%@Jhmcr$fR=N}wg{@~-#LFe>^zC$i{D#q-B%#vHepSZGY#Q_uWG zF$i^oR}w9amE_9uuN;L)<|I9Y+6PmgnqB`|^30e&N_OnZTCIgM&r8fBnE9^(cqWY4 z*U}se3DTrKHqnbbnni23;qEI&O&1u8Y0O?;IFD(PdHsv*^M`HvJ5(gJNG`20^#-Q6 zG{R|KTg~h$A{32kt}6WmJo?kMO6HZg8|ru62P z=#r(o7+;{w8u2nLjk_#1<%n%S&`wq&wN*Q6cg#@)dZan5L9$%JI2RRM(7O(Md^@-B zjO%?p65z5W<N@wQm`r|}!AxV4#Oa~Z z9g$-@bMnSPCL3KSO8&+igJ^*6GYRPcREmmKx|Q+u^`F@X6;Xs5gw!qhc-I7jzMs6O z!f@Xuf~_p>i9n~feSCFVa)~T?RwV7$i$A+FLVU0_N^G8dEIrATAZp+LaZg6VQ9UyB z%qFSS!s{-Vr+K2EUPvFwz6y4N9f<)a;{Vw0v(|YnFTOpp`FLyBCFXXw8slX`wZz9} zg9j>vYIlV%ozM`wpYzu9ijeYPv=i!&Hx81Yj0osmcxP(!wumIT5}_k-Rjbl;+f-$O zoS65;Ri2~X+H(>z!9}}5hGWK#j^YVqWwp8g1H%@g#?n1G;EUFm$=g1Z3~fI-m`oH- zrVh7_ij;mYGx-T`;+@;?Y29T=xPDngd%l)aWQP>jV}khA!dEfyesY=7y{^BRZo+N` zfo&xrc;>e%A5+lHFhag&TK6*buSIVu1hz56^&#V*SJtNeL<2uAs=(uBO^5l3y?xh~1pcA3DZ{u6%5ip`ONgoq}3+UukIjoi?#6HFc=nugK zEcnE}SJ0pJ4%C9PiXx85qlf6^e02Qm=hF3Nx(n<-XOoODvOF)3mhf8%$IQ*|;Yl7O z;!$44v$V%n&M(o*lU^V!=#%^u#(%S;vxx*1lbm+X())G)pJji7h((jIB1s#ryZzey zKmPViGXfE9J`o*aax4h`<<}2-9Bjk#{dLc^znIscr~{zF%!JyGp$F8UhwO>;dzPIqc+{k<>kv@e(R~1 z>WI=CEx#uA*vu0|$9fR2#7m}iHf35^h_0H*I)9G18;)E>DsfdqB3KDEzajI%RF-jK zaE&9b;r})#JBUzd)F{a*?A8Y;O5-=$T1fy{SoK z43YJ1K}?8H^M9vG+xnoxV4Eu8cwBRS84K|3gXoLyPDbrT5)$ud{^GXt7bi5wYxPI9 zTx)LK>bTIG>KhMSTwo2KwH<<1d+0M=I z&w(Gr__>$NWuOW~c?Lm_SZPgRoeG%ss%0Y#oyNYEWrJNT5Eqv^W}<(uO9!))85DU2 z=yHN`;Uc4fs9Ynz)lPBjkc^7wh?b9wRVNQ?nt%rXnTxr>FDXcfL%0&|I%*4pDp&BJuM@jhP#5!AG74YgibJG_XtZ< z{ann+Klbj}RSm%m`=9@-psn))0i{W(4p&YlB3Z7312i(E`86nxH9nAMP}C*D;$}A@ z!4vrN6cNmQ&9sng?te=fY&rpAC3`2*joSCiRQmUS4_?nkdns``oBkE@Z+6Stk1&Q3 zN0rF`4*vv^EVsNsr!xPI{J&ZkJi+3D$Kx3PHeSu4^9>W(grWGZy>kKo_mzaBD)pRcBGsw%7me8&4x@>9UtJYo4}?7 zvp=7r&Hk661V$6A{%S8}yUpLUw5o~ViBRIX|KBFGg_m=J8>sN05I#IMT;g`6^qq8C zqi&B1Y;?rdcCGP@ox{=)0f;#+kAtIz#xbM$8-%#DoS55fy+zEg;VU%N;}enSWcrVT z(#4(RS!?H3zD76*|7C%EWfemOd2RGKRF%Rl>rL##>{|;r<_yu+is013eSc%mw6VxK zmnwWL3&JD5-9`f?Ilkn4%58a+{Q}dswDK(be7=+k6DQp#!6_|2mVAl_Mf$I;|AA@_ zRYHV|P&~}>{D6SaNqZA+0eh7s5AOI}jvq6N74g!iXBjEiT3)UnbffhL-D&G)aa$d8 zs5ftvFp}7=dbGtF?-jLP=ULPwE>q`DWCKd;I+xa6SM<7POodfc*NpVz_2o?kUXv=L z&{Ez0;e19ZbpeMjpCEBSGpk)kf|O|Ou#O>($7OWT51RYt;G@J>oifhcdNigutP%2( z0K=NiM9=T>y07l*vn|QwwYLd|iF~cmSl$8$NO@>!C>JP2FcibLL&Xg|6;RHEy)#`e zjR2em^Hy%F+Dyrmo<$KSc z=5ApwpC9qp_PSv2GQq z#3bbMgmCyp$14#_w_wn|O(e?UCNyiDr6ZcUj+G>xS5LGVznK3(Hfy-`oN<^VN+cP5_-qp*@$$JWo{=--wcqY)TmV{fI} zNj3r^`bgi+Wg5gN)xmPNSbD40CvWbf!A6pNvfD~{JopEWL6Mpf`XFWsQ?VypB0IDx zX=!1wja$lx1J4c_-g{hMuUx+kxXR0vzLjdY{bie~K% zn>$yaS{UlKcDGtayW}P$+StlOA8?J+LvK20(c5Q=W?SC@T(rJ4SafFQR9xJk4qBTU z@}vGM#|^yzZqGW-Dva{(l{lgDnz+~^wMzKgCQp~^(n39a=V%ymdrqu2Px5?H&+yExr{52n;dqc`uua-m_kcc$#m?`@ zC*K~d->s@dt=$cPFc#{NRx`&=e!^~Xom!MUZ*~fY`lKBHh1t?Va0@?2I?iGRAZIye zl<6sM0xBOGO@*O$h@j4neDTSb3?KV7Tcx%}sP=cU569hfsKOiC*WX&(i7=s9UNHGu zlE7#41x3lNDTmBQG^O~O6kcCWp3^nG#_^AC&bWLea~i+i+3}c1H04Ki!@uluRXxG< zfjDz-5j*Id^qEBgjfLAo6b;{INw!%K_5>LFkt{bVs5UMR>ZsUTcO=AT-wLs0%%kv_ zk0e>Li9wkZ-ZjW=T);nFFDfnDm~|HV`ffqjQg6P<>P}K2@=hyr%m9G=d-!ar6AMTw zO2=>UTsmx6P2K-3>KgzeS~JbDK>+zso~{~?cSg1rg6u(4v?P)Ze#O=K#w8BdZ#49J zd|hTPacK9n{lW%F5(;AUMjIzfC)=bC1RgPee><(;ej{jDn^4#Zrb_EAuOh;+>B>AU zzWFs1#9GiZE_2bsNG0AKcI&ZpcK!;#vEcS==`Y2n2N9inO=h^sxILHnTJtk~+&sks zfR+vqbiz!3ChO7{CyS6RL>ZZun^pJs+SWa4D{6(+Dg)5NyaGH=y=vM6_cLw?NX@Q% zAY#L^e^^6URQS4rj2e`$B&*5LS-N|n2QhiPb~KUmg^6qfD7@L>M$dJUJ7@Y`D@lts z!RdWn%t*r5wSZc^-n9Vt!14;KpNF&k&Q7YLPOJujKgECv(U5DvC>uY^Xf1fS4r_=8%4LCt`!OT^-1}D6Ur`88ew?wTANVX z*seA%!rn*aU{vTSCjqUoPwB-u=gKc> z*`gdEImvL1nIFw_#cR^E^wZYE^uwLy7e79!53gSZI*9MshK#LL@Xfk7r1P1l_SRdp zS6x$9@fLV1-H{p7WC+A?f{Si*@?jvbI_O?}V5sy=ehv1Ns3Fgwa!&1ykdp?E7nvc)R6y^Ox@HF?A!97wt0?eg>^HcNR~ z>ml{V=QmHc9acy`THE<%irMepI;`{@C6tC1NF)%BXHf|F_$ftF?S5BU(YC{<2|K3H zr|Pvjp|WH78++EMcww%QM|lF=o$9TC|B1meBM-L&#EMdE2?Yflls^k7o7+lI_NCA_ zpIPm%$wBUbM^C;XWCxYDNnQd9qh{_9*JbA#->Sgu^DsG-pc@RR?_>Pl|(XzlqorXy|lOe@ej+lxl6 z7I|s3;FG6TNqruqcbRZo(?(Xjyh7`P0^2scqd@w{_;463MwDK$u>3X%;Dq`;+aRlY zDlc#S>>V@!M>w_!e~LMXmm|B6vs-jn1hCVK3yn&G=yd|>eUt+5Ew zWS9@yq_O7fvr=^~-+J`g@{iKyt(vK4oCc5btRC`99%%$ed*>6X+OV1v}_iK1`#_{EG_q-8n*|8 zvOel+Jh|S#Gze5U79`h}ZK8wG2$_^IMD>)VzeHjzIC{wo?kiqIcD zYcVhHxScE=^ikMljo)jgYUW`^6v!0l|J?2KnBhW>9%^P#w%ufawM5(EHoSyz9^pgp zD6vM}t7Rc}T}9P>t}@)-bJt2#p7&^~rd9i4G9%*WtDN6{u=c@54C?%IJGKHQ+4(9xUj5g=I4x zlfs7`ne&EmDTVOp*#h%~^JNFn#)A2eHY7(o>D?Ee3^0%ZZ5^^uC7-KO;I6;D(=Ux6 zxLsmOweWbGuAGW=)7<}S=DOdS%C`152#PX_iUg&Oml04}EPyoef)oKk2!s+sl}_j( zbVLOeL`0fE5?BvkZ({;(vQnScwxLu4GtUICSNhr!%{;7$ zgT?SZxrL|BCDS^B%Ox%NggVV4ZebbnxA^#)^84>>Q+o?sY1$nO!5kF_n~Qap0i)L) zCx$=3P`+>EI;INIiQ#?@*p1vA97{3GB$L_pU>6#-wDWjrKS{1x@P)YS0J7{sk;ix- z4o|MB_=7+pS}EcTDlHwXEGbSC`EB9jT`Pv1Wv`K#bXys?Zf%!tdu6&;s+a&Gej~V? z@ixs4qvFsRlym3C90kviS^*fP-}U9=d0!+w;-2 zJR^Rv=g||h0SDd-YHhfu7h1RC@4b3YwV#;=MVGgt3r-t+iEls|m}RSLL3ny}OC5K# z;m5eSwCe5({Q%N`t&`YBu2kuph{W7iD#I_++cmczD;$Mft#K>jaW{`yx`p7${+Em3 z)TDl;?K3fKIPIX?9KT7C_?3|p^Z<@EXOO`}9DpbtsNE!80=D9l^{fphxIJSf&&!*6 zp$m6YnpKHQx4A`3BRZ@&llTx{`bFv`cIz34dm{FDqOqm+FRNAeJi;Vl-i#_(MU31MNgv=aJ}gXF-7clh*!A>EwSPxzq9Rq8>4NCfcur@1rWljSPI;bw&YG=VSD5UmavwXXOYzRrZh9T6hF%BkmY`9}Fjl zFEy0&Q@o}=pWY4$8lI-sK9;}wEj{qv0@bMC8jv$iZQ&~T+&67}(cYCRhk~JEWL9L= z7c&@ob+HO2$r;3RY%)b`$Kt@ui3ZY_2ac&?A*R(u3u=~8dT{x+3r|)nUd=sw8qzsH z+;xs!lxtKEn|o8WTV_y6KT3@m~(VRcrk@OO{!P)yAWme+?mjg8aA2!I3q%R zd*vqms1nsaS|?{X^wzpPE}hKiAzLkvk6F}`GAg>It}ayag5^s`*loqYw))|gBQVuq zqnv2Y^TmOwkA`?#rK88{>2&CEm7D4&XMtIFdsHwGO#-8VUh&hWSit|Fl7u#s@qE0YrCm6*fG#`wbgGwj6SIW!Uz}dH+{~9KQqr`Je;nOY=d9j--)>=40YI!9PyVrxMHu82E zO2V%4ByBNE3^$*XUqH8ZPw5Lh@an^_*qYvXj|nFzOQsJ;nViPLQQ<_49Sa$#ZaKdQ zZ%+;wo|?%#$E1Soi{#yzE8o31! zbJM?$qbjXKpl%K5##TPH98=^19Y4LezU(>xFA5b%OHC<%_RMoBGWC2X`oecEu%|{2 zoCRLGG^TL(%|{YuJ!s&RH~=ZGA+{8XEZ7WLQ1zdL-7T z<6T_1(oH@oG4zOv2Sicll+x!zDlgBvZ-`ogSwZsD{}6AkJxXIZOQ*H6#ws4CIy)m?jM1RNJ}-?;QIPwPK~A z%|nbK>hO9Y|I%a85f$TT^oM$&4EOQSCtT5x3!Q`At!q5~o1ZDhx(nFF0ug&wr)^EW`F8WdSwCOH7Px=<;gkOv5;qG-vOD8E=}FSd92Q~* zg)M5h!hRRYKQeQDBgfRMgOkeGHo<96?K5&&h!?d3dK(j;>8)tA2W@pCL0{^L9@OZ? zP_D~S;7N5D(Lm~-#j43rN9qGlf_$cB^x{3=4wxthVFEm{vTZxkU6x1m} zCK0lQ5`y!&c4jjrkgiX%__hS@w`8Hsy|F=`1wk`g_a%i zm46*QZ?DBA{AHz4{>>p<)MTc1>&u#eD7|h{)tIxOyIRyiu>(-G=&dxys}ZoZ&vUc` zsPNO!3Ey)urisTg$&74yc+jiH=7Hj3wom$(gDuMIFYa$l?W5|lPaQE%hN0^eygFK? zgO#pW%4T$eSVASWwR48Ol+S&gYgcvE-E~~jPD-3#Z>))+{Ttu)n9HP1=|ZX30L;qSA&Gy@S=+J-QyFYztj@2MqR$Ka1RJkm3I0EG` zh5nauedXRBsR?e=i{$36O+}RuZ!$*R>-BInQ1RMy;%XTMoN-R*j;xl7E>FD;_ zp`U=NxW}Vv$o}FHU{<%4@>`bI3-E4mHCVs(LVMe2l_cB=k`z9dbu>UM$;U}iLeNJXam@ry1Q>hi?zmjPvy_S_H%E2LX#Og{+BB9-V+}sF#1o^u&b+<^@c;mXf>tBfg2JfF z$f#u{nulasjxaAT>d1N3vgcSp&{L-zgGnU!DnZ~>afxoJ6i~Gey7MOFrYBykR<&0l z$}{C8BDZ&Nghm+0>~8I~QO}nN&6#>c#UTf!$rPV77yX*qp`pkDaD9>OaRlov1+Wf9 zXl+PbovZ|G{kQz)d(=gPV?9q4*HSDY&nEkdtyE+qLTc1{Bzig7*F%@{6s3IesgL3q zNpGFB8-Xl2$IR&cHbkJ(uEGs~}r5XD1clW93E{BOyVu{f$ zD+Lb+coBStT-+Ivk2<(hP5=~6U~EdB&;6>qF1*sn-~9$EU1$wN;A!+GVQWt}*~PiB zdFG5%J?GuULweo&B+A)Wj&QSB5yDfBd|k*>(iRslo>*MnvTXHgXrcSZjHSsb2PIqk zRc*s4l>;hY>VCmi=j*Y2cB_Sv>30m%n2r{y*pQAk1S8Dy^hk*j_I`Uu(6vKi`1cD0 z1fp~~vSbWxWCkv-K1%Xa&88>A$_RdH1q~V3Aars`LzOvfefn)YGTq6Dun65U&V@4j zpV60zTLlCve)GwOq(GXx6Rpjq6;5!!P3PQ=J5b^)tLE43AqNQFu1x-onN957sRr=c zI!<9kDz*oX5w=S%3nx6a;=Co@)cLIuYC{$B9oK}yTTH?}rF)v)44P{SVull!gP>kb z<%|91WOb+PYIFHDDoAYUBhUI@HF)1N=s#ge<1^Pd<%Z^Go$Za!=Y#;>zEN2ruo2gE z?R2zn1x8H@C*gVdX-G!AYU>kGLhUOMD>Ho-1&RgLcTmp91XCuEb~LajO*m+Z8w_`~ zc?33tIoX=u$Xi^aygr3>$iQf(KU`6V%uR@{dn;e)u&JsIB`DX#l zwc4xV&Sr@*rJ0S#rki88%L5a%QB@OQK=BGLz0?~~PiJeffpOEz+S|_9bCG}qUEAJC zjReOz|E3SX)yJql+s#xZul2mZ8Wc~+&;q0BjF*%33qaFrizyCzFoIYYQ9E?PJu2gg zL;580iSZzHE=w)ggD9FY{Vt2+^*Af&h8x35OQdf%18p(W#Anz8$*bqQj#EZh+Abex z5%t*LsrVvUejyrN0;jb&XLC)_uYm|2^4b!AlpjQ6GfMIZ0*|;>v#4`HBTtd&*9$I) zlWA``9k~XZ(*YRh>YB)jRE2cwwX$8XOndHcF4OEVhvI1E zgvN(B9sPD;7~iy^>zjO+%pDK@Umn@k+2jNr$S(k`<|M7pTZS$j<>|KfA&tGo_UJta_v$f^|3%6 zYd^cXNl^*ptN%VF|Y__6gUI zU%v}X8u?)X{{3Xosb7q9{&kA{?X`a}P|2Y50F}=Yy!@%RWa%FxE9Tf{MR=ea+k(q4Qtt5Ujaq{d9f%(MW#-GWY`UyMjMI z#oa-P-J$@@V*4sAssqsbgln@Cuv+5G5T=Jj!UF?D>5d3wr5oXV*cxWQ;E;h40bl&` zFC|JU7XX;8eLxL=ffBr&CBm-%4eloiT$mZFuhXO7zz3ks29J|*dpqjF9i$Jj*{%ul~>ahvj6pKL`Y z*WQkMXb83M5ga!h!lh~5@`ICNb@aIvmSx%?rx84`2TV~0ht)+Mdyk=KBqZ^H$nG)Z z6-bhgb#=_Uk!G9*e|YMh4eSTNC`ksE{Kp^sgvOS9uoD`mW!+RPWX_K8SW)|Ihq+A?%l)z#E=d!p=7Sp-VCYVlp-kPdx>FT}>OCABU$6`My*%KNU%Upv z4uG-qg*KsY+@76RI$Zilx?6f_I>RKnJ>U&nm9>S35@Y#~AuWJ)FS_BBvz2rA4>pb_ zv_W+wtMCQ>C&INkD>GWWNF_cI1OEkqk&?*oA7k{Fu#Fw3x0~-}jUOj&Ek{oZ&m|hv zZa>xG)41iHYVDtLY!vF3tz`IY56JURECJ%}DJ zr`285$kl?+Wd-(9`s%vR+U_x}ui6ZR`S~1IYD34bqYJlF>u?`jdbM+QTClhO!g*iX$h6 zCga11qcH|l5rB>2+y?~agOkIq!(0V87I>E-bHXeMpcS~5VReA)6s@5T0f`IkS*&}9yob(OZlWYRC_HNz&dZpk7^$R>v01)A?F923( zAcsjtu;d#5g%Vy^sHgxYA5tc{=%EbOFfCNZun2955F^4=1TxzYZkJhO>diyFAYSBr4(M?$82Ov@L>w{@GEMl!C0PPBZw_fCnFWD|aMM83h|~zxY}K&k z2-aZMpqBJ!?kk%0w5Asty8eG9{O4Oa7J|cOJi|E za^tqi+i-)>giwX(x$uO^^l|m!)#=x0hunw^i3AHSCH4h@63-GZX(eK8iD+ZNdoq)R z3UM}xgGq8z15+YXzGI%rrODQGGW9y@eQH!{0_t|^80s(T#wub}6jiikohp;674?x- zd22&!RBHq4ur=Cxn8q)|6B9OlIQXoa>>|t#o?uoA)cWH>i5Ihm)5t0#PiRuzCWAbB;V}KOuk}8zy71HMk%+%GSG6}S4 zzSKbpbIB3$<;fnTQe;;6Sae>p&(+vj+0EJ|+LfDV9ta+AZ$D$&pfIQWlaol6xw|D}l?D%c9E|E7!}em97+Y6qMA8Dst4a zRM8Y(6!;3hrGrEUWDoL(b!4JT3QRLiOOFdvGgYgWNveCAOqzw7FPckRBJ7}6Rl97o z#l*v^oHWg()%aJ$UXriVbMtXEY87vCy6d`od}F?U2mBTY7YOP@69N&cFlgKhOh{FT zoP#k+uFtpwJn%(IjA)c7AG1;-SioO!Drq#WFdZ{xn`AgvJr~?w2W(RZKP}b z+08$#+t`aGYAk9s>NJU5h0%d>g0X@e3Hu0c6^kbnB=RJBBXkqtjZKUlkHw5yj^xGVk!mhn9^_}x zWw5EI9%U(|lO?pZ+uU&9dTn^kgP?^-b7Q!QTwO{dPf1T=&oIt(CdJ6POxtYKvUeN4 zZlwUFC{-#@-dW6L-fOCAig0dxT!&tdo{bL6fXsNy*m-HYJ{#SilAOWZv1)nIX7yoZ z`B>w<@*#UEdQp0QIUzquKCHsM<+JBgBWR^}d&}SH`v^mZL&4LWfSSDEt8#7I2Y(hH zOxP>(6tjBBxKFwtfwG3wjD^7FvcLRrxH))%RDqO3okJZ$i9yjqYfTAH#-`Aqg`xG) zG*w@A4m=T_jtFu5x$lGgihLmRkUP%(bcuAdJZxG!OO>o2@29j@@m>nEOgrZ?W1e1I zvR^t}uF8&K=Tg0p-_R=6Ra2W$@_WVhroG;D4l*0yFLE&2@K}2&&05WLr1OVzK;zYY zY-jf#J6D`BiJ3U54cFzEo80uy2eFi}&ai>8#j$d-^V+ms+g>Qxn)6nhTmUfeWagTGGiORBN%X?gZdERO0aCvDtyUKEdzSi!kbZULb zUG94Rz{Hq( zjSI^O6U+7B#lpJ7%fN)e`g-U7ew&YaOiND#(`D$U^qzX?xQ{u^Dq(1@x3Y`bdG2!Z zelgs%`&{@)f0;nizzfHNBzq&fC`m5iER`t*-VFk!G0ZkYjjmGx|^n3(Mytom}ooNM;S|r zRjFJ`v)Z$=QZT0UIH2?w#AT<4_it|mfZqbt#|7|D^<{clrzAJ$IZ|ICA#_W(8I`F7 zcoZTYg{cTJV8_N41Ia(0ZAS;0L~p@H3uG%nC@LoFbtWf7>S7K8Axb%8K0|@RtEAf? zfn_d*TY&1=0&)XaQ=o%e1!Z*TUdYoz#f_2r7x0#4OhvxjP9JxgxRW<)!G)$z2{! zjY$n9ug(UjXONqn)PdB-#3(AVB-3Kj`R=jNwFSlpj=K%A(HKCvHbTNZp({W2+Z=vR4sCm(R zKJ4CK8YAK-r%xwabRD{^U7YWnmoa%AfrZnyEKlq9ki--wX|N4_yIOYY32aOoG^RA z#IYlTZF@KENx8!!1;2!EM!*ei4U8Nd+w5L(Gac8F1Nm~W<`TAJ`qCI;DbkcDxO?xD zWU{xSiu@lC*b+uEU-0#M02F3*Ps?uo$pt2bxpfOg@9P)cFhn&VI8Z!fKx9NrNF+>n zQAAb5pE}op9W}R>tXC=)Xtz=;ld7-^TZML(duQdh#HZBI1HD} zwoIJ*S{%IsbW(kyf33|;ORQ+DhYX+`yf0l9f9S+baLIZeyANGH-m~5%5HKbAy?5VV zJlDdm;-O<2BT>s46naB>V6G#oV&|gop_ZeHL}tcz%hH73#i_&$48n}$NrZ2hB#tJs z=Q>kx__W$U%8idK#x@C^5n#Y(42PSUU#U!}u99`>F^ByCn9-i$@4>&%N^Zvu=*3Oq z=ur3K9I(?Wl<694TdOq`F_%Sq5*B;wiF}VCl}_i{R$^CaauaDBc(As%v|oFCSqAAB zjlJ!b2%%}x`L;Xn$3?9S%6HqutZx=#q5TxI39y@8#^XKYblVv`b`^ z=bu%?*_pQSb^37Jtz53W+BH1<23Z$*T`4`PtW2(cDh0XZ2TdnhlSOEQGaz6(C1-}c z=q*(cUeslV&51)8*zA2j5O4E({bFuu`fQ2{CUdqKWO^ile*3!>-AfctnyG85-!ycY z>Kzh0j5%iA$9uRvpxou5og#P>G824i7|S}NwzI^DKZ@rjtP@=k5Ya)6!H%m;kddoX zLXy*xKT)le{jT7w94i|*C&G-$%+RD=S6rvs0Clc#MtY=vdV4y7d54}sFUIUlAI&h7 z*2~mk;M3nTDmN9W!)&x|8LNL1Bm^0@UF_~7*qWP@SUd}R&`DEVk!Q1U3;ckJbK*+m zp6XitvwidDH0Rhz#FQ-VBlkt>o()DH(j7q^2^ptKMnLIZC{oa;pLn1|yp;pqt%ftjJM56bNIl+;Yy+`g>(WR8{- z+vTAylQoTx{+G_fQ(X87lH+MSZ;w+`-LE|(F~(TZLnWxfSb~+n{?o$K{j$VxMahgA zh!MvL$crT1Qbf5lwe5;`$IxccuPT>np&XyDSf?=cOWpA=G9N`arjHRYZCp6GH=YccUvbY51ci^_%m)Ax6~Z#dg7{Urc)BS`-V1^{dpglsT>a~elq>tDUG z;QmRZ{v1*O&NPtxxrlz#aJ>5d**ISOENvmeaMXx=)cNwK@QcBRo;wDv>R8XAFTKt7 ze4j8wA&mSWMX~s6FI>!k)uE(Ca0MH4N$9H45TvkU9iny4>c6akp1EBi$$}q-Rd#g` zLT>wBp?tkBn-*z8P9IzehA)LZXBhI4? zgYzMB5MWZ45XmC`kk3(RP^3`c;2Y6YQjn3+)#g{8Rw0-C0fTs(vJ^V!WAQZV5TjsNKMDMd7jCsIP4pYa3Fc1xEk^>6 z1i_kptCysvr5C4+sQvK(b#qtB2l{jAvGg$}_9W+GHk)hkcbUz1h!N$89m*OiA2kbI zr;e@O-NWM6c+I&Ki%7G?Q*tQI2@GwWuD4fvJx8^RS?9>o){15=-Lv^~=nk)a>!GiU zo|4~6??K;K>8lxMQJAi`-xb3$w`@AToU8ZXOt>GQUy9#R7S;DO(@q0?ciFp@N4v?A z7m;r`02Mq8qyU*a*d77LD1>AnWrFk%)g%N~f5EN8E9fW0*jh~d!f))QFikPs4I+-!QYUuj%yFm7aW z&<)E<-ezwUK#o9sz?~tmP+n2wQS*`AXcq{zsiO(e3HJ#tX$%Qlq@}dA75OD)#l~gU zMGZnMf;3uPq6Z1b6)oc};yDi;PVbqZ8lghN`=k~nbd$}0-+ZZ6U0Fj~-`MH3q&eNX zRoQ#SR@IkoSiHn>Df7Iz!+1o!55{x(sC~HrDFSr{S&-8bmV{nY@zHa%hFd(L#hIVk@M(J+_3m~MIC97o zw44)y9LaLkA=c*f5Gj81t(4pF9{HBd zwVGPd>DGE*9?Rp-Z zG#+ZY8hOk3%0v5UNZD53&YGuK!>XA?Y>oL!)g}+FVdFhD6=ZFGnZ(B>j35nHt1D1a%6z36R!Hz0{j6> z7A4ik(;v0RbZciZX-+#AIh%^G3O;hSdMX+5If&^A@-7Q%70Nd16BJM$U@Y`LuHA1q z$vC1pblfkie{(FpuYB;?w=|tIY}7XqTlK{9eE_6<2wF%uNfIbJo$FAqa3>HUCT{wz z{N6lCwr1jy7#Lkh(oh7Y+@Z`@31!}9d29t^YqWGXU%jHmSjSYwR>ALpO**f-INnnGBQC zsp8G2qJ|+K!{wBJELN?h^T3fBx;nf^It7K2MxRDh6Wx;D+|o+ryyzCGP1PyuM^yZA zAhWW)y&>r)yF;`!<5_o0U-k3lzj81~utGKynv=VQrQ(_Uv%f&Kwc=r?+m+&z#>q=h z@M*AeIAF0Ccb8{7S>>znIpMhcRr!&9)oQa7a^moChWR`aZ2%V z{ zN|BY7REm`qm5O-c9il&$K~~R&bv8>hKz3VutSy<$*XPR()ei_<{m`82@BY=l4FnJi zWp!tD8EH-?3=T6Y`!zdZ#20B(2Azf&6%X9Ik98*5u9PIn%{f34vBJO77F zM~MHgCC*kngz7T#_(FD$CipD0%(V1`ypZ_#_}q@hrkskxqW^*a{lr6P?(A&ONk`}A z=0@wrL~G}0M#sRx!9hpQNXN)X^LGV}lZUOdfjf<@6Vbng{2w{OCQe3<7WU2-cDDHc z$Tcvub8+S&B>YFw|GoZgr-{48e`&IH`j1HZ(uf7Wx;{S&DF7PxNDQe1 zY#^Wxus0UMHwZ`%8H@)2ght2H_trNuq8|;j)<|>NDe@A{O!(GwnIW+tmTEBe`rVo< zmYG{~&gr|PwDt9@ruWv=;^rI_04(nRzl?l1z#U$%wxIuo{TIehq>m4Vh!6OGM!+0_ zywZ;U@iMEki%X0w;AF}_*iebyl@&Atg1+#mSWHt`?&yDr!*GCjvK!cZIa8^L01)y2 z8rkeXlI$1f4Fm+Fm;%GSNNV&_gnwlR2*8`OY00ao!RhJoL7E5c4iOXc107`ft7+w~ zS@X-vqPgB&i+a3`w%JO_KKK3c;7wwl z`HTJ4n>`PlT$YE87xrg=UP+X@QPalU)=I=l3X7AID=tdUzlX11FbDw^8z?9M&UFMN z2`mW!qPOzqnAPsOzr}`#3q~-){^rj@Ob6%g=ffFdY!AZ!4aFXUyb=pVHcT8&++Qcy z8GskjT`HuhZkjX|6cr-eGyY~LksQ@w_#vM{W|LPfm3AHbT)EdSwtVm2k0cQ8oK_x=DYLDuoB=hM+Rgz4ot z+I0K+$Uf_T=4_ZNpd(aNhCM10oXd7kx?XudYg{VAfzl52Z+r_7;1-_v;Fi- zuWQTPsuiD^xGWEO(}xhEsik=U9i5!2Y<~4#*wIYmZ^ix3v3mtPT;+azQ3_>d_fv@^ zBeUi6UasYef)bOvq@iE|axN`1DlQ{xtt^~(-+nNN@VAKV>3h)o8n9oICnE^+9m>y< z#PUe~drYE91CCQsk#T5*WOQ&4_YdN8IROd!`ie9TC8j&ERJGWkOM9j6mPL^?Z9oTw z!wkjc&~>iJX)6Ntq!ASffxr$etSW^BG_VjG6cJ>(`~fv`szwd+!2WJz)NbnkvNqp= zcqepyy?Z}{$hV2t$V4SAv;-A7HQ7oey8|c_rQ}_7^-~A|>DXhpMMG2HvY{UxBLeKpDuUnpJN1mmSkN?CRJ7Ag>NwVTlpi1fU z8yyG%4K3`o&L2q;(8>t~Ruy1@lq|YNF3uKHtk{P}5uuq3?gn9~wUDGB|Ll}ZD2*H7{e=vm8_EWg(w5e}q$N&4-CHjoiS6<8SbQ7tP8{2Lgx+O)%Z{T_pN^O0h)QB2#K znRnxfL^?*M?NbX)f9{iMC}e8YXi-xupeQCMTvAfN@HU>fQs7DU={rX~&k87d?sd6! zT2Q(tFa@M@XU9KinP2-gXCnUWO<~+92)Sy)abT22Z(~ps_r@n#~eC0c!Dk+wx~;T z-J`AtHiGHc=q)-OkdpKBLEm4xi|jmFDgcW%F-dmXFbjme4aWWP=TGUkP+9p&d|sij^!%*rkc z^b|HgvB+s>K$->+CC0yDCxEIOj{&yV70J;SgtgloX$h~)D_`tZXd4nToa(tN%0`A} z%`F5)T(ANS_YsgbZkL3s>;f|@Th%P1G%tP52xp?-32wmb z(P`A2S@QB`qU*#u>`Ymd@oHN&Ier;?faX>eVkRCCng>epxD*y08xCc4h!krX;ios+ zXLdjG8SCruX?hTi1nA`y4)m*&Wi>To+X=4Hnc30!98Uc)tcNMA_=HRydJJ}DL!L(O ztvh;gzryZs4>s&XHOGO?knZoH?)>aNrL;$z4*DNb*NX=HEo>1PxPom zX(jOS{Ikx$U$;LIlT|;19Uf)Z25s@{_a&bt@%<^^ixN`_QgaL{v(~zSQ>DI`R8BUS zO3^P0GpP0(9sGxv;h3Z6N`#BDXLzsUj%sCQl#l0^B9j;6cZ?Zoj zHQ@8LVo%MBMJN=U`Y<#t9qo0=LBc0DqqEUrzuF`eF5c{JsD!1_JGC`ySf;s7!0=K*qlr_Xy zHoh2Z+rvLNEJC!Xr$*JmwV|N065cXxi!MYM506u&(_@orx|jh&@7h|}(vAgzv=6^; z6;$4W`(!w01P&=6XblX6Qy3=K%1xCyt8W=3#}AHpu(j{m=eRg@d=Qu3hAs?TkyTC0 zyquvA#n?}&lrb4FmyUkr9!B?~o2r_;SQ!>?o2<%;&&!K#;{rn;u8(feir+B|;-Bi6rxkd0K-n1gbP}BNKG`mjtVv++M8!cd1 z23JvOIcNAJ5}b@yG=6c-@1m3CTnu-Pbr{-*9(mYipDxo}W_!)gZx4)UBzURnH!s#d zw73k2_k%w;B0?zMPULV%U|3P!4Wg>Y0cThQkE!1?cXcf+)69K2MuCKi6a$c_%hqe_ zqpqg{)>G&HflLo2nPQL11(;Oml7LTa4ixw$DKEbTU?q%vP9-zn$y-)gB_LL|85HbV z)X@SnjE~2>*hBX ze3`Lu*ou9Ed$qKob46o*{Vdd!4feE8SXxX4UGSABD`Z<)-Hi^GVs8r9-flveYr@%G zSbhk=yO|J0TF*L>&Vd2iT59oS;>m=lR5+)u9cft!$aInu6dmhr{n-J`D5!t@8NyD+ zgqTzP#7?MWBlIhgK_-_Zxn8)20D*~6>rO;rEoL19A>mZy5~DL^>l2n0GtPP7Uh!-bzjNUPQEY|llrn}LF4>}zzECISXi)7pr$BA|z*1aeRHtU0*#@k)hVgt2 z+1=TKLtkP!_>IcXbf$KUhp;K?{<>tm(i%0KJA}I9HpeJ5R$o%HT07a%g@)6kAzT;i z=Q+V2Ey7$Z$zyKvI<8y6w9{Uj6Q>B%>zbT4n?@{U1q$oWOEGLyOKf-GvKGG* zn*oE+W5Dq#F&|%R7Ei|Y?rQ?q_NMCLbzccx)SPwmSk{0swT3GzBhh2g1td32eAlEL z*F~Mj7j6@kyefwI%2j{j!x5N1T(wGAz3mG^a+4+kt>9FMR4I|-*LP=T-O0ktok@fb zzQojUgGeJh5lRzFn$g9x-Jy*sQx#*|NU8L&2;*olJ1wI4;O{a~Z;yOfrnK5Yj)QW4)u0otnV+!xkS%Tvl{C8U?y}Xhlh%G%^x(X%HCg&NCa$`Ijk>Hb>sb! ze`Z>ZynJ(@R~gcISul^H|lrBjTnV{-Lm|rV$eG2@7XPxJ3&nud4$=YMdX0 zEQ0|XA{0+1861n+?pT*(b|E#WP$zbaYExEOg4FXPA{3rgTnTY>(33Yyq9~X%tlv}* z8-TGH&CMnz4AGwL%yLlH)*%i*(lY8A%&~jdzeWL6Ok0Fv-P)Ck!YlyZp+fswU{X^jXsAm- z!vcbnw1h|@@8?8%%_iY9@?sYWIdnCjc2QE}=?Wq}7oD&$5BCHOn^sVr%~DxAYmh`D zo4%&XI;0014FlgnF^Y)=#0x-3Lb zAKXyrb5Jb>T$ESx4U zy$&-5pT}WZlF(1m_r>zIpp*{gZyuO#a5$t3jA}g`vF9HP3k%UAxj}&a3>XR!bwPuy8Y;iz`Xyme%g=yeOuV$#bG?4$T}+0pX0Xq&hw} zJLw3sDN+PNXoK*y9kI%C#3z~@a2Pi)QAYsuV>1zf1lPlCl83q1HCbfU!=geeB#HBk z(sqDazXm-~MF>!+`{(PWdCqT_ru4(yKQL2anIiFtWXzQyAFkmf>BQiP4@;Id1KT!w zgj8SL!L6+Mh4mN$nJP+UucxR4y3|`Osp6V%7Mer*7CS9D`+OgS9CKFkbcHHHVfQOG z{bE*bMZ&%r<&H3Qs;EVWv$)pb;9?DiMsQDr&sd0)bslWPkMcF)ndTyl?W4l2sZx)A{7J$Ys3B=>>6DAcP@dts|Y zE3NtA;=)>43OdO_E9;-PK~ba~iDRi#)@Hu=U?Jei-K_;%+Ocul+W{B0+Nas=iwF32 zUky^ezgA=c=Vw4tRRNV~7qtv6ZM1YS5;xTp6)+lg8UQdnS}cq4ChgC{obb7)+Q$FLxb_eaIlUBES);g zHVV~csbO$pWp?tlL7AY3`{ElP3+N>~;+j(+?k`CCp2NVzGJ2tSx#cy-inb9SBIsqW z=SbGv#CBICz#z*8Gr5*FTvZxB0?^J0Em!N&I*vlPsCkjdd`Yi;6vJS6pnD%HlbGEp zMXH=X|9+r$C)5XzL7<|k3^!9T>>{BUETodG$&nb3lrEV}i5yauwggQang=sHFe0br z*O0*?L3tpC^66?}JD$^Z_f3 zNpa+<5ULF4RISgwfQ%hTHvSSN<;({Hs~nW1Y$%;!{fSqXPAQN0UN2^Z?6v_hS7Kx9 z8f+}#9GgK8(kSmZ($h94ip{KAN6tk>K|_whpy==s&@Kby7-BI;{-MPb%cD0g9X`7{ zBj+#H<7O0bMmmGc35yyEoD2o$As{s_#@EEe#WNoO^vKA{NzK1wb%hkFXATNCQ$SKg zAX@&`j1vXf=hsak4L$=^U_2ycbt-vL9A*V6p~^rf}Eyx#~dzsR%^dwstjq5O`TfFM>sqd_E|tg2&!WcQ@IC= zcRQ4s;H3`H-;iEr^M)DsOA^=;=^4*PEU~SIg2!3?;|e|TcsCWQK}2|bK$9crXQWaCTkUv{=B4i*fMwMd`E&o5~We5abFhRkvyF1|@q{g)jNleOyD+i%ic z#-XBkv`*hupK=MdRV1!zDmEM+4Ziag9y^g5aq{o@rPOuQBi6^z|;2+4)Z>LJ0R!L;_;*`hr^U~*L z04RuBJKafDRVr(=qE~*pQJxI99=oiL$F-F5l_xY3O{Yd+pp@p4Tajw7$OXI_H}^Ex zohzw?7;8Ri6z8?-jJ8TgTbn0(aic}jsD+}|(CQ-?PRTcdR*c^Xsn1I!w#q7Z!#GZA zdO6DPEf*DI)jn{N8^R8Ql_om!{LV#bD0oF5{Fc|3Y0)BGg+sl(SuPmB4uYWvi_|Bx zC*-$1I$rT-!PYJ>k$Ji{hGx^b!FKd)2Yzg+`B#&N+60{LEpXzaMg*6p>mb<4zUW&} z$Flx5bg$&DU?ax{i>ZzUb+xSoPAvNpfOOciD7w#4CqR1kv*PY*yD;@zopb5tQ(3Qa zFbR=JccUd17>cI?0gPtBx6)6a4*mZ9+Sv_=afpr;qS3H(&Z5587%@-DP-NLsYB>3n zRtDIDoJKIG;awpx$outuLdM^^g)I`KNrD<0o0r0PJWE(AncWx8RT?B&D4E4S+_7fE z)vum2e2KCk?wyyCi{=$Q=JsU{Z|<`5F^-mmTta6n+c_*aQl1P7s=TuE9SZ#N=UGuj zpjh!qsSjTXAV@wGw7obS$*MsXp|CKSl~BODV8WTlg{%-vNIZR$MR_9dmmxR3Mi-2}C_IR!1QgJmhhYBTL24yPB%7cK`wA>ODVe=Xks&9)d z0=)NNM==bJ0O0Hp6HepwWQMc0O>k&ve)-UV-C~TOlND98(I{iB6157A<25Pp+t}+Y zO}F2X+uAbqfE+U62cGL@IP@QjN(#|jR`krex1_7Or3)e>U0a4}nY;?$NzKtw$$39e z1c_1lYmr<}wrf{X8we?+3y!}}owrDLmsvTT@npW;pwQ3U);OL6 zObwSxcY`z8mIj^8pel(WKBK63krF(9Gq{X5H2FD<{TUUN1fWpIW)nzNO=_SQ<6nA) zdO6#!PA(y&_>n$ryzU=1t*L8rkgYtiQ~AG{KMau)MkOH@sY7huMP?HQ-`29Ci1w5B z56Y51PGI0J`ZbJrZxih$v_Q38N?rxL1P7bAP-+-ZMD^1#l(ot(L#WJjh0v2XoiHz5 ztvWHnOy&SkNJ%FoWrX0Tn}WO#=ykBeRMXVu{QKY+rby6nG4#g5XGV-V^NsF{(1>Ocuc>+DU z#pOn2krtYPk`Ke>GmFj%Pp&qd>NX!f;p9?|c>nb!4)T1Xfv5oV~uX0Yu zkDcp`lqWBYgFHXSPUA#y7`Nnaaf!mgyAx81NCd?q{arE|lq9f8qP%b4d@p-M5iV?m z7LQ%enk8=Fi;H{2>{8mJ-N9_d5{9@);?YJy*-(vhNnUtk7H4hZS=a_#MnASFc1KlG zwT%73ENRYY1!wd8?&2!GvDDWM9xv?MSD#LZs(Vhbt_Hy`IeDg_iAE_kWS32#hzbiC zrtn#zGL|eZm3RIo$c(YrrV&}ms&29*5mY858d0fotP`8R)FVf#X?@exm8*xt@%Xd0 z6#01%8azlAQ5npSJ~%QR(Esim9=UoZf1n(x>qCWEbh3*UEYDGtS==QF%mN$+*-Dua zxxQrN5NWG%TPD3dz=0aCm|>C5bF%)U%UAC^IXyeAq13LvA3{vT)34Xcec_b+Se<>~ zGR25QNG%Ns&9CT~m|9Vo4-nI^UP^RYIu{SY1^elyN@f_lwdC!i=(A34d-_wAqX}2rvnaCM`pR#@xbYFkv%@oxB^CZ$~Z0 zLTW!}Mw?NgT+KcvwwS|tKucE{Y=NAz@57QC_KAa=e+H5oJy1 zJ#{_b88RD)g_&EsRI?P6q# z`e};sl7vt21x1z1iJZJFPk(&-aKDkyVnlWcY>F1G7ZpvFcKW>EZRPe|{JhZ|G;mvic`I_FpZ@-BsY^httGi(%0W45f45d z!bm4i%~LwJYTZ&pZ<5L0i;Jv8oFt0CC=R!}+OS%Sz{KPa)CpOFfuGG^DK3s8&nRRxn4@;Gp%IiGXO%wB-ejZ*1jU;QK#v$@n7Bns;wbqH zRZPoI>S&HFTmp4JvR!FGLP0tl$P7tJLq#ipML2jFcOwt!HC8A~9EuGm8fH zH)x6w)|3~6hQM-r(yLjP*ev=j@+hrH+TTa?p;0C3RR?J`1eoT@m%~}ibGA`T!1ewVNjFmYEHxVeSc?k{OLXm zic{eFkj_5FRLnVI$KGpYRwjD6DB5pb*I7Nw8ri&bws3>Zd~h?YeobwP49T@@C9nuQ z?wKIS<$yvT3>6~B6rM-Q6n-i?;65+#0Tm+>3GL=~f?&OY6ce>aay?2G=NsI`yfZpx zNRPT}b<>PDHW!E>Z3s0`EHr|Ca0kZLmgO**b8;Cv*JhFaM67zx@U{ga&8{|Wk&I`0 zwGUWFS2EbG+(9?D^vt9yB;?Wg+u*vlZ5sRYHU~{akj()qXVOw*8{fQ3|CX%RMh)j5 z-K2ksgkZ8_rWan+O^)o_h=<}xJJWtE`FmrB+zS`~s(R&quCF=MXJv=azrx!}%JIL_P zpT!}}Dzp!P@9aqJ@F*`+>}A&;l_@?(H?n)cE ziWc|SU#I~zG+7e*UH_3Wuf+NN(XWuU$&JuR{0bsQp!HC1x&X{@#oM3oXQfmi`#S7Z zxo}rJA>8#$bB#A(FZ|YuKgbWAaFddn6AEbXO+~|iAhyEWJ6c>SZVp%es}L!{nnI|4 z&_aMZnN&LZ^68dRFuDqT9lyK4QCS5>G?Pj%+90KJ!IsDb8(KyxwT=dvO}a!77x0*mhK(ffdv?C$(mD( z3YX;Y(k^GTeebzugAx}Gg`2^)dJ?e{Xq)?J^Ytq-lokN~@2!Hh$u7luxXP&daVGJP=W<-h&)OuPp|GXb{{1Z}-&o_h>50-|-0?ha z-|wVcs!?@Ijk0UFDuWvveo>u5Fet~-^Sh_uRq9VcJ+#@XdTTp$#t`2azpHI#a{@?%cXGYra=3qEveA0LSf(qc7qN*E_YNAoo!0did4<3TXMKFXSS**%IG z4_gtu+e?AYqSpB=z!Y!#JfhEV`~TQ`%b+;3u3b1-fZzltI0OmqE+M!EcXubadvFLL zxQF2GPGgO`ySuwXf1Sz9^FHs)r0V;1s!r9Z>T0^1TlQYE_uALG_PPO9cj(gLwGwIU zl4+BgZ|tK|@S?BL8?q;&!rPIDvW#))pNBMt;7@)}ka*qp7etGNrPL3(wn@vU!V)6ce6381{7DEml0T zIP&;o@1p#C(6IvhSh=)$f$r7h6xH4#gILm#LCPZ0PR~eX zOr3m^v=}w!P3w3%w6IGfQ}Klc7_~u$CZbBwPn~pqDbbd%K`lf!_ZVVElAmhS#6`tK z^`@(-Ijy^uns4{<*Ej0mRZE-Yp{pJ4txcjrPGZLu9wG%kqFD^4zI`Wtjl`~mmC!HQ zJeC+gxlmdAItOOU3?Z^}(=~5@iZVRl4oEg5diFF+?SS`m6(@fG&FQ_fIKf~V^Zng@ zC+DEMqqD}Aop4zKGSrk#|732tR8kLWJ8VC2VPg=BZAX&nv>3BKJ3silyJl)liMN~GT?T0Zm}JIo|D9ob5X)=%N%G*OHudL+ z>$xwwqg%CgJKJX=ru~%4HMEGCo~Z;QN<-;v+}9kMc_J?r*hGW|pFEaski2|(o!yS9 zCj|{+^+|rrfd4>bOYuQp7Dhi*wA4kjQC-OjjJimP!CvoR65J>a`Ss(-F51=5`I^2(ioa4E`Vzh_uj?l;;`kvH}*A@jYG_D9lUp@I_q6SL5b`oA_++ zg`U}_p&0qW@Hn=0;sErad#<#XNl>wWvi$@>(A5P61^SF(J{BTf!!LJFy?Vw)tA#8#dRS6++<734aI=Cw6Bw zct+-H9GB(T^c+R04(XRHmx}g$kabtt0|DlmnVAKJ)S-cA6!mfyUgGX>7I#ubZpVt&EVMT2Zu zYimdlQb(>$Kq>Xzgj~|h4H^D_ktsXLQSk{VCfFJ9w#R-_gY_2C;l7wZtwWkC`S&jj z_^U2-WY~A_D*LcrTvs{-PEq`aZT#zl-$#l}EWW+3L0qET`C!f}BABKrOs1E@WoQPA zNOEPi%@=5aNL`>BO*#;Nw|+k06_d*QY52Xe4vkzK2h{(jvx3>FZM(1G*zv|@7rEDA zeo|n6U2fFv&bShNjY=&@)j~)^l zCMY42NoI0F^B2{^YgP4ulKCxz9pPbPf-Z3Yy^Ksx|6*Sy*x=;tY&9e(L z%cULuW|w<@UAsClzdUwi9cSY8A0o5(suHEVyu#GxGo9Z+|3~C!0pr z)@CQ~wQvy5tu(`k9$hNvtl3i2$KJF-fx366S{hP zy7r^Jzn2!~M*B~ycDnDU??hPW(rZ?W8Sv0x3|vY$J$V*Q7bf3c9;^x))q@ewI<|EKkT zyF~&tReI!rjcNA(2>&lS`Jc0=aNDQ}JIY&viT_25{%@9ZTRqw81fBk3O)}E&y7H6Z zzFIvbBxr#C7k&JHH-y;lOu~14?)K27Hu>L~&fc6tA2NZQ+`O5cje~cm?tGw>vrA=Gpu@_ z;u+{$dVMbvaP&@@+4}P|{b#aSk4LGd>b{&eGc-dY~sknI-7G6W6XfCfG0G07M5yC73V5gtu*3hc*h{bsz<|xiMOZTA%MAd>LG_yY1G`N9s3r?jxo%2;}#f{#o3}$RT2`HSLVAcNb@#v>{f|b8Z zA>&FES~=v?P3D8`CmzI>bGurjiCW}yZ~+?ikXs}1nD12vbl>xg?8a_S&g!=xgWMoT zcDacdQEm?_FrUJya$9cu0(^Y?bnXs_1Q1v{UY&kNA67D34jsCCJD6^%I#P_4s4-uY zKib>-d@-efc&w|}Oe2YSB{*IQcBmRrPTKIxQzX1ZnSrEqY@ZP=5y3^a^1)iB)vog%qa}@n6gh#|={F z{BKPC>hzSAK%5rPcm^eg?q#fJ&(`iY6-xl-7#v*1coYP$& z{EB-yA=kZ7!NuCegPhFQ!wUy=Bkr#Uw7rOQG*7upM+i5Y+m~@uNmpWrb?Db;ur@8O z`heXnPKitc-NHv26{cusKpocqCU;Ul^OwAi0Rn{%+-EZkji?+wMDNO8 zeNaommGhqF>l*B~J!hf>6L>tguk-Apw5@P0W|AdQ)(<)<*12h45D*AzO|zz^r;ScP z_FBCclA!wl5RzA-Q84u2-Ylcz^LMva`2o>~y9ei#XI0v{_Vs0nhJN3k_$&Kp$0F-q z^Ll4{D#H1~aOpCydRUj?8%C#zY82ZB+y(6>gD93*tO^wb1cca=bv@l@{G3DoFq1db zMJ~C00JO6Pb`IM0eIY=ksq(njH2i z%AqZF>hY6?Q{OYXJ!85akF;|hH2IXDECr)8eHl=?us80f_V>@!n4%6R$s93&!}|7S zHrk(i?}ZN(so`5aN$0Q-D-|UStSoizAyka;L5zxF#daDm_52%S$9?h=>$iIVs37G} z$l^^;hKz>8#m@`0(l;jp{`1|=5=YVCbb)kw@lG~2<0+_;LBNRub;VH*G(-Bh!Y8K} zZOKq4>L;jZ&4y+VwJ%;Z5J&}+W5s!6C)mRZvB!)*yH`kI!}7?@vz?ZvZ~-VEvZ>haccSsWJ8f{iXy0*^;;*YE^xom9Uz^jSGv7bAwD&Wn)2T#=FWnHf zALs-{@?hmPIrn{-d-ke@NLakHTm({U#f~u&gOvCDgvA@s6c7^Cv?{?7z z_PuYnki1>@off(fl8p-)nC%Gg(Y4K zu+wc(6g@Ik6$-x|_C5?Fe5Us!;@B&!p`q! z>eA?Gj5HgR`{wa zS&NmwG;HTuMn9QPpvsWGxp-nu_UZZ)?I+RR$)P6$?QXZsmH2$%%t5{uuL1TjEAGTlf?8gSUJbx#0}rJm ziMthsfzK6NXFzcvX zvAasPj|`FG4bl9m^f|9~iXWxj#9Bzg0m`}gLDi~Y99AN(xU?FAEr%}P;390v^&U8N zyV0FZDES4OpbP|WYu2HTkt>T{Bp6O(%a*Pvxd#vL4L9~p*QWy0=zkV*zv3Lf3aQNX z3EAd~CWKgQ=+)L>|MGjEh+ANdcSt3N+XjNk;sqH(y5>ZvnD+!kcp|IxYdZa-V0LKP zi;0?OIDu3``slcmdDNOVqKSZ}(}#>+rZVUCWsj{yGbs8Iye35Df$ncxbBjeM9ZqO4 z^%pWvB#$)@K0z?HeBo}%2IIP7VQQC?UN-&-#izGza(3;PuGI-%etBIh@xq86n^`mE zN-7r-h)MnkTV1_VgV-+XdZ93}ERNx2k9$AdbB;hr_>GN0M$Zr z`8;3}R_?g9%Mk*#^MczgA|`12igSoI_DV{vu(Vw`j_V!iJLU(@)^syEE;O$izZHAI z=q`D)ZzBosg+`1_evs9EWz{Ya2ogvS>!Bzb?(}bPU^29L`<0Xc%dxca5-=4uL*!h- zUN}CaeI>l;bcU!V<+65z(rR!+0PCd>gVNe{*_clT>_6NQ=m|?&qnfRLdDB$#@_vwr zLvM=3z}SpGB;jx;k$e3s59l?>dF&0>c;E==&Ra>W|l^5f3SLv95a2R*7v6S|HP)e+cpj*S9S`%M+^JS@9q5v#)hrZvbKF2!fb>v)e{ygtBN9Hi9of>NMoXRGm;jj6A&*P^?J1;hc0rj4i-IEwEgh_%Q8 z?l)rd_%g-2!kt+h{hsmUu^_4iob~T+T?%VSIgB?ZO*PLlz`vfE&z2FHT~Aa}yVlW6M42y|9sqFf6 zNHA%-&fI+KTa<8VSXgl_gI075z)sMud1b2YLz%8#MS!_&xMN1Y=xfSKqA2IlE|=cz z;8OZc1bv*z_ydnq2I+klo6n+SL-tny4h!|O*)B#Y7BZ{ zPxPgNviTp$|6zJkdix4crKx!chC#4Rr!zaWx0X5_qy{3$=;4(a-aWqY1Zl3jBrM0S z)ryFCdOptw9VQYk_ioW19*+Ym-lZ0p zL{pzhHycXCDx6+m`{d8(2B)f?7I8##wqD(_a_q$`X#~P)I2ZsMyo+E=>_u&Dtb^E$ zm`gDa7{ttM#-~z49kgH5xSVi)mov4bYZG%uqf}5&H_yUrLRK-?%zZ3NHJF(+zDQM+ zK7!}-#>r!_dkuBdD6>?px4@&B+C$suJeGOxK&ZE}TOOw9S*JJH`m%{%r|7A~$2Ezi zn`Q!j>f8GnCHWk`OWx@uS5*9hoh833pH>vrkxvyz_G%(bIu8Tc^^fa3#*K$XUQGuI#&Mfiq$6!l$E1mx-yTdh&w1?ZMdcuvFPaCm6&)!muq>-OvVy<6(H(oA zDtl_H!B!EY_o3DCR=qsX)eO)sdwLV=ahLDFa1v0!Ci*+2i7pR+FT_azig3iQ`pd^_L`WW}ds`b?3W`?Y2(qUvPF3Msw~ETX;l z`c52Jx<;dq@;rki{5qxqXO}NhQzj#kh{8@-;W2|7jV$sQ=(Tsl!@kW*cN- zWr;-3`S8X0GmT3dc1t!t2FRVZ05&b?=C2Q-X6qf1nE3{wX+b7sMNBHwrYN6(qOf zLv-LmAZTM#pmsQ0vKu9^L&){PgrTctgtjYMTDf;bz`up3&TzqWokccxso^~nVZ)P< z^nE61FB+&zVD~n|y|01qv6YMT>o&E$ecnXjaK*|Ki~akE2UV{HxjEeHS0qVlY$&cq zb*%y}2Y8EbeQ2c9*oX$=Gs2B`QmKmq+&R}Sg=OzR+oyfEK6QcX;XO0@6Z@)YS;+<& z`}scPdMb@JpA)&+2yW{q=iXlBzDGzKrt2X*VmYo3Kkb=_|9;v=@`k>*bGYPT>qaq% zLuVz5#itcjB*V*ph9DgNl9L(El(rYEoeqTy7GcaSQ`#WA{Ic40mVXLnI+%=pcrW_UPNBkk7ti4BtxT-4 zK=}>Rb9ya|Cc$p2Lu z5SMsX67B~O$OERZ+jOlxB#_(>M9K>2Bs$>^haBFVl8C6itJ{b_;otA~5EnyXs9<7- zVA(DN1bvxHHY?x_;YfFXGjigr2D2YdF_?JJ5Ti1*KB`l@p}Jf|^OBlO>YB?vU$y#q zilodV!f^%He}G6cGHT`dRkW?+WdUJEO4aNAle;`$gk#S)(Z$Kz-m9T2>2_G)6sX%P zno_{%Gz4Jw?shKB>-OnhfwiAjZiqVF)6pyyPkvdi^9Qs5tMXoaoY(1H`1vf4;bteLv#yJ|H&e48NeUbwj z<@y}Q!HP)5J=0sdHlwjq$-^z9l6rU-h7`D>9Hc8YBm*uym;qTY_kBO%IA4vs+7g8- ztpjZ~@4q9FeoSI*i$Rn`tYlQnu0 zfSW1lPaMvx@sa(CF(}do71JC+ECEba;5Lk0F30RSL_bq51GWK|U}{s1>xb9l?$_FC z)yz_3FkgCs0$t$(sgc9Z*3W4ySpWcnqP)^~F91XyLmaiS=G0^#)|RwYu2XLBnKZy+|+TN~W?2z3_qbiQP3~)FQXCQ30j-ZC`OeQawMiSZh!yd#Y!Ah)tcz}j=U81KW5pqf8+Sx2cbTdq^7Rb&G zKWW?~y~UlEnm8B&{e7LzC<e8s{t?(s+=a+h5-LF2Q|K|PvtNuE|ax@US=f}PQW*Tm`Er{E@- zfXZ`VCG!EQ@N8YNj8h~}WWW^h<6&5PSkbnbTcM97q1&Xj$Y6mQi9xrWuy2!;$A!LU z>PG+GvOrlkS)F#k)`hY1P{TxEAI9L|Cm@P#5vI?>8A1KpbkpVuGH-)$oyLBODyo5j zwudmJ)}pq@RmpAW-mrFVq)(>}3jH|0ZryOwc0I@7+iw{Cj??3$N{*tv-=W{x^~e#m zrJNK4@3BuhNk3i?WPN`ow>-6Alc_1(?gFmg=#tZ3<<-J!nZJfZaY;OdS?eHL%v3+( z%C(klJbkIe%qL1P0|?hEeWS_?yXep1|8C^flI-*-FQ2cci(MY zhK?Vt#Jt)g+wy}ROKU+aCeK9I_+fGboOoiSrHNRdWKGVk-4nZ`i3yo3K`~d35j$30kAOlbP9q5(AgJ%sdWdEz;KEPgNGd=$X2s_D~&eSt1AX^#Ly1c>Na3TzfZc-siPUPP2h zp(`>kt2>nOK1l*}q-bJfjHKnT0A|d1Auy zZh}$)yx?0ox#s2HuYLzKosZ*l>93otq6fZqU;yvpRhxr(NygcxTp%G;)W+?Do?t0Et zGOH zXKn(&_kj$j>k>t87_#79Y29h`QaX&dm`=b0V%J@rZn)U7hM`>RYZq@9Oog42Hs$b2 z)cG-A?Sp9p;Z{xcO8;%QIjGwZgruORA1DCR6X8ujkR=0{*r;w0H>nb#)g;eRe^0=p zJU%!<5u?pJ-~*%jRF8h6RR{O_F{ONC$!C=!4?NOKoJA?CMyHk4<(wkGq5E0f)*wfP z9oC@dy<-6QzF2AiSkA20ey~G8KFCu*X0oy4V#53v>6$@zUsubBQR3&V&B*B<+)nQ} zT+2lFS|rlPbbhOXi3T0R^DYZ>LLIx_(;Honx8%~LFOUHW2DaM^(j=s({nKUV$QY6i z?Adw=lUyIs{Vz&2$KRRot4OIX1o^mWsW`n=$<8 zKC91{YYa>G@^@JSn3e)yF>LSa-uQdavab@Z)h>Bp<&zjw=+v7RvIJ3^@)0(IRO^qH zDNn~$625R>^y&y)ivNNohJ=_+I$-@Amy{nc6z`4kCLpCU1J2iwN_=)|3V@mw)c9_Vc1;3gV6 zZs+HlvyQZPsn7G(X=f10Fq%K?G(bB(JuvD~hF5RMsr3897l)|5(BQv7qO)hxTlwNUdLQ&i;WF3*QKg7Kn%; z5q3O2A+UCw9Ji=7vu4AAdVpiwR;loNh2f;2hZC7ixuFJx@DVAI(EK7aH6TExfMpZ% z2GZpz%N;ZMRiVv5`i}i_i{+IGrFPI&+0wWouj32c?!2kRFs!Op zn{05Aozag*Y!UlssDED%68kZI&;u5-lT+NfT8GmVHdZ{#a2#MTm`N~%wj)@0LKfoS z&CPTiLSuL+gq@NnbI}+eRy^S1Z&h{aMSQU6KV!6Qe_*b03}{&|0x;=cd8rcj<)1KO z+H`v%uSq-S45u*}bR^NV>mdsLXrXQS@cj3<6D%Ka!A4ZHxp;rAknH$^P}WC{{v`TQ?T6j^SFqI#A2Y9I}`TwU;mNX+?HMy>(XKo+QB zT?1eJZ>IH;tmt8;WHR6G(v%=o6sg&5HKOI5F<-z};s~96yh{xX+M(-lyP!mBkDiyX zeu?leVgc7{6an*4ctp7Ur~VGC{{<6qUctF$c{C`ZkXnBD9m#_o9!zFQdFogB9nB%) z1(@bQ_9908zqt?p{W(JBCu_$9P^tVcvBMuE8!|yK-33n22r310AI!8vws1O9zcUfR(A7MdzBjs&CYJy7>EWKNSC(StFzLWk-8h;~-*?s@%cOQSKBmdhCz<2eXLCbXA zcGB*C^-t2puU4f}fn7!x!#rLX%rk_8)HbuV4zNb0PWp@1)|}?sxLp%{DKcUrBvk}l z7<1KrT6(CgXoO@d(bk!Hsgn4|sFUdf`T02;2YeAh$N=I|^&phz8hp0$?^TN9nttW* z>S~R4Sm==foXdQDAk!0>=I`7yo*-LAj0;*IacpLUKh?`%JyztgsJ+?r*o;1|zLxD= zo`ckdo6?DcVyEY*;<%b)jcXYj*}Mh*w+&~etmN$h?GPBIA4H(vpkhKBPaDvNwT?8o z$OtOKTl^S3IrutXbHl@Xva{5*+yZ!TTbcQU-E^&FxG;PZ!!=ZGjUA=85*G{?qsw9_ zPfU!0)F0JeA#de#gY-j|g-Dgf#MomtA__u)d=MciZe5+~59zj5QI0xip~K>P5a8km ze6R4l`m{;;xvv%N&62|l!<1S>&F-p)BO(jF;E{g66_5>*5_PG57@z)`tM!wlQQ*kY z%^p%5tUX&Z&ItyvQRSwfF8IDtk6p9_!@^Tqhu%7AJh}||4RF;T{n6YZxyLbkNwuP> znF!$R!)CzSz5eG&s!PHMF7&UPCC($hYW!BOW>x1zSdDa|qL7Mc;M2yKLlv@zcYf!t zbi*w!DkNH)32Mi>LItw`0`P86Fo8F->&Jj|{GpWC?8dQ^sr)bl!PLAHn#Z+vB3G5} zJma?9ABJ|?1zjB7I4Xb@X|P8Wj(|;SRgbhKptKt0K1WU>uJd?{e|cnjHKQkwi?_Kl zxmr!BdcYAdSXT}@U}i;;i{w$gR%>F&DmF(Qc$Hpa_cCH*vM#v%!E>fso^yUYF$8o! zY;s7Obi$_H)*RG}*A#RzymW&X4g1TFJOf_vjd*4gn8CmgYD0cpMgX zmd}rEhMsPU(0M2k&=L3KWw8EorzWS1De8qoyrI`yyGJvm<3yxhD%y@l;29&>wtws+ zD_{kE&l24yUe_5u$5cx)scZM&M%b}${%GSJC)S>9u-QY60%?4L%NxPozDT~6SKQ?R ztN=fK467&QSRXE{mqyM1YpSbSldYalT%%j9fvq{kxoXLKNgux9=v;#fgC~8#v;2C( zK)RxFJ(XG)Si|L2f>f)Q%lAhwf8g=WWz91Fa_GUA5cb`lndlILxI#6~g19Pf69kBW zkq>0zajjAWE-!aZ>VY_6kW({8(nprLg!n?8dlQ@siwL0GAhk5|4M9GtPl|`?slGm- z3w_pQ{4U1pvrxKZb-UVOS&gaAob>AzXx%&$LVoqi}+kgUU-qGTT> zR96l$ef2TH*q0>&>dMwx1~+Nie80Y=PW8n342erWVfRes?B#{g!erhXUh}>7p0V_@ z;7;=Mm}3=M&K4V-#uvZKOo&t}5WI3pqxQ@@sS41eHo1uj2}M5k7A$gaXRstk6zq_T zU18(PBW7BY7{s1KPSvQEJX>OSA*}cu9J|teMw$gWMri1EjGW_S;V+41?>#>d-ybgu zYA^Vj6x|!LxqM$c*G5} zr3rt*rZ5>a{>mo&;;>~u;yzwX=JtE>OJRF;HD#P&{FX_ujVUHlVZ>r${?DH$qEf7PQipEIb3`clpupudRSQ@&``l#md7j&!b2 zRD^`NqiM~hCaT$xD6C5@?Q5O0T{3%=hpKH>gD!w*>|sX} zZf4#|zA2c>l5p~Sa1QMkX7{liA19M`x?jtV3^KtHmJCaDybq8L(Z1*-rK$v9L9z=D z32#FXP1?6!M+%<5@@#gCab^@CLCqjE6D*>5ot9@K%^9EIiq+JAyq^S}qo)liZ+}O~ zPM$X)KWh0^ljhYDuN|k9(^6&T^|$6oS+yt>4iigQ1t=7Qn?0;VRf>Kow<{BV0+98= zE1As;zyoHXq2%c@9-Dv!&Ab2z-kPtIYH}G53TS)MrZH4Sj}nuko3;KPL2{i;evZ{& zE2+$+id}c;{q4ze@cz4-a?do0cPyX!L_OC|m1U|1?|+Ui(>(b49GjGb1??^gcXzMK>?wJ_Id`EfvVWik>%%I?x_TNp2ktxU z&+D;#rXMFX$Zwzv-)Q0-w_DF??W$Syu4j3Y#TQEg3&KPli3#A(-yb*cezmOqp;rxR zj-T6X>1?2UPt zL%#dh>oR~2-+D=0!^4vr5vZ^zVe+wrG!?Oi zaUb%7cX1lpTc)#-T9iESXpl48ou$13XP5V*`*5P}LO%|ZbrRej$eE569##hRqAfw` zDLs^P+klRGjxvxHs|h4;5$s~7FL`NJXR_FE#M zV2As|Q_Vb^`?-|;@M>*iTHiXfDhf(ykuNK8Or1PzL~k|z2$%c1_FUo)V9cqN96TuO zNw?kF`uge_jg;6LeXSeCMG1vrLqazDim%UfY6*R5~Gu#VJ6y3s}7h9?tS`Qga2S42BnBfs>Z^qIGP^1RX zgw9b*Yop1Ebz8nj^{l&jlODPih6A_9Y#1gqd1mQS9}DvOWbA7#EygTjsI1%NcvlV= z{=`L2&422#(ar1){2&sfBrn1%EWbfwjx1(YQZ`cvc`w)-57Emt;>MzHI=F5VOW;XE z2JP8Q)k7;9=`yT(3$guEc1lD5r|t^X#g{w7xIrQIY~poHtl~BzcGEU)tEtpFQL&yZ zY3r14F=6|7Z@r1yGtrw5Z?^Zh`KX{F&a?Jgtp?bOQ*6Iw<$E*smVYb~3JtoqL%JHx z4n|A8)d{Sc1nbsxKo zM&fg)+FQKAHk2IHRP*;)-gUziSFXiszNYh5dpL0U_+2Heb>;I!u;uB{n*5`^Cc8p7 z`>LD>)+O)m`;EI;P8Ai139*G5+PsA_kzs^{+vnTW?8uOh6HL8NLCW{G0UF94?-?zg zHMdEocJ|Y%^Uf6`E7U65h+q%!))*8?x>_p-MXASywXtU3=2THTF3+3!%h2l{n!D5W zPBzZ~*K9M1o;FArgTh>11vUZ@^wWmDBQ+o zq72+kCmVwm;TkYs4U7yHbH>V933`$iT9{YDrAa++zr6_;^E4wqKcA|I{Zy>W0dyFV8lGcfV?}+%~hxnXXLtvvbTkJgXepLK=)d{$gMovm+K^w=5B0*b%|Z*eG8}R;!9q>Ru`pYZz7D zQf$$psYUPvsm(9Mh{t)T6A>9 z8)~Zt1?_7ZsUrAUwnNoXH9Eldfpa{`SI(Dc^uXPe*Iun}3Db2}3~cyGbe06x=gZL~ z`l#2_=o%s-!d$d@T5liUeVe`^W~N8OH6Kq1rI7rPDgnSUk^F*@mf!3urz75H0L3w4 zIFn9fKLK>mBo(K`3&JQk$R=T%$%kgxD(b|Qa?m$#2yxK%b7j-Sr9<9N-zVjBG{Rt< z1qpus5yrVwLQtK$_z2IeU$L7APFu7Sn5$j{;Lo<~Pqj{lr#N_Kl$YmXKpjbppotro#r5pjS9ns&De_Se}j|!h+kfCVT$YRCXYW4 z0W!1lx=}U@P!5~cmkB;hfWMU!?@&`WdeI_l`z}sZRG)rSDPYha=026$9l{1wNW`id z%`}0oIVbQ9T)LJNPji{N94Y2YFl>_UharaCj!h!rr=|-CvS~XMkJi>KAX3bog?Gyb zKGYZZ%j)6FUdppoJuLeyF}_RL#q`rnA}OV;36oM@r78J|K3Wypq-w+w#ZG9cR^pSQ|?a} zmlZ^cJ&fx+KI$X~`UW0u-98v>Nm!3fw~hJCrvWxrJiVk?SjZb*oRmpT*B$}Rj-yH* zl;P(ArJucNQ5z7l$9z_FuP_ulHd}2B0{3p{^rwMpSPv}y;4q9iE))R2;7lv(>pEkt z7VrC1xjURU<$l~ik#ZHsXgXdN#Lyvj;BlIetvs7U=SDpt++0c6Q0pe1<_t?pF{Ga-Bk<*6ai zS{NV60ikrw19YQXy~HYR4tSF1NZ`ZITCM3PYa8EHG7#FwRx6o4)&GLpR^LHCZwpY| zhA~xxquA9xI4v8C?yrXtlv0nW3hKr=OjlUEZM&y6pS~3nT(I zz+==awm9jyAnZvhU3-gVaePSQlCG;KD zR90BU2^Qa^;5cciP}DSTF*2n;%M8rm?8Zm-+)h+>YFixtiV6~~AuYBnwh|6Y1nNGi4~ zeyST*9Iw*Hk?PjNmy|<^&AB}KVHWy6guc7bcC%Y?+xDRO{oTH~3Eql2 zdfl&`ex81UzL)Ch{yT=_b+g-&7vHYUuRZoPl|V|iQV#xCOkS6`&;-{}(!)gZ)PiQ-Y2e2%4xJ7>oEy^1$%A&)Whi3^2?lgQ zRekxlX+I$+&#ymmf=YEW4EVu_HZ7&&JVoKEK{OU}2fxJcsYOaMluK2SEG%*rrkd;y z|6$6yzJ;c(tQRW7WU`NmqQ*~`XdV28bm?_NZ?9jx;~Ozq9Fzu&>$DjzP(;K-jp5Ku zJ+nV4DR1_oI>Pur$h35NEh6n7yTRFCkV;#4txNE1XCzQf{~QfvI4VN`LM5F&t(_WB!X-So`F zBL=?=gclWuh-gM`@gL_#wpraoFI!zq z8G_HPF*d`7A4G#x!Nu#$N_O~BVfOYX9N26GtpxgUUoiLTkjylkci`7X`%_W9+6OV) z+Pi(GFw@p~=IZc&$;te&?Qj}w3Mp4_Ga-Jb$5u%&_*+(sc=T&}`)6V$(Fq))nzX>1 z{VTfs6Z|a$??49EoDgpMCH#NBo1}r09qP7_c>l1oKU=k01kP04SqzNQ|Hi2O)WLh& zt)^3aU;e^c{`r1O1Gd=zCyJjo^M9Wx98!GSM^H94HXNGJtJ8mZeh_))J>`_#kcu7= zm*%EA{U6}CF9&4Rl7M^FkZSbM@={xg|Htc}TWyGsz{CEjH6(;6StT}k z_DKvb$MIt4X>YzQzVyK_XV7tl6!L=ziGrKBr_8p$wgHcEt*3c-@5Fx&A`W3c#}J2C z$wRYqO(}`t)n+VUr_zMnZ|}l*o%7^^@Ap?aca?&ojsKj&+EwLOJ&@HP(l-4R1|^3| z=HI#Z$j^EUrV_Dk|Cv($<~rblJ5=c{@w%>juvi}o+T^GT;V4N*o5uYIdT2yln7A*cOx7Txr& z(Ko>RDh$o^P@6q70{^>)gYU`f(;KhX<|N>w{ds$mlBEOZ5s|Gi@;r& zcV>jF1=} zU~P)2kCCmvKW#RH#!shT*!endAv#pC!RcJ3`i`EN1lFgn0S>;lcDLCZVui^11HhRT zx`?BsrwBJjQ5xU6taC=pwu2-fDw34T^PkC z^AfyN<1VI@P*d|AvP95h=B_Gt)&=U)(7E2s1i^K4mS*rog&n9g*BC-6Sf7bDrJP>1 z;yD%=3Bk`^7tO@r9(%4B+q8t8L~9A(A-o zHITy2f4qOP*W!pKag%`euAxDKh<~8su|rO?)0v3ZfA?zTk*CgBhT2obSuNLVc)656 zKiBkq!WHBKL%Z!=7!}h5~=_-Xv&H8sWx1~id7Du6 z$T}B0_u-dvLQ7zp;udLYq~1{c&}@SfR|gMX1-ODaD+O;OiN6|||AmU)PLr*Hln$}1 zveN3kulMX#nbTwhy#w*9S6jTpBOR4F4Qi=xj`2hm2(8O7*Jx3Byqk~?NKXtvNh)5T z0PaI>;tq8??%I|XT!2OsjxfhT`NM&t-Ic?>l}$VrN0>N8$A#)jW_2x6z;-ZBMH8L+ zywe)3J`=yI3t2pjOXlT)A*o4$o=|6Kz-{p%Dfeesedmorv!l{Z4$@R0ttOq*a>!Ig zv|aHb=ltQF<=w7NvRuXoO;0BN=Oc{>?b7Z$n>G6MZ#V8&mW}oDoN(c!`Y~^|zrSeQ zTzj3u!f84ox!h&DOzrL5kp#JFDi{K{d+c9xKze=HeBiVgy>_Z!2Px22x*FT}21Gbia=O`_=)~t29hH}IsJISK5kIHTD z%*t3qQRT3uFyg$*9>TQbOF#_NA4Ao9MxW>#mP?QOSw@xtkCp^F7|BeNnHW`A9x0Q0 zbZZl5S4?hl&1m|KXXe&=^|Tsy!Jt>~!jktHoK|c%R{m{&xuqcP0*jL2shFxjsXbh` zE_n}H;aIo!SAXPQ3lSDJjt0+nMDDfS^OPDuqToj=CEcevPRKmO6(3{L@QGZtP_&-I zy%-XFM;7~YEwkLf7|BDvv&|Q+1z+$EQcsza^9AYUow>96`+~=;PgYUa8p>2X&D-Sd ze(GszXJej)Xu4F+^^Mdkx#SFC4Az*PSEQafkh~9lzMxa8RBNA0G8i`1+fH2xC5t_J zQ@*=q80}wjo-66HjnffXanh5(UM_FKVfg`%1f0fp{o~$IXkFPvk;N^YU%(=Wh54$~ zfjtLQ_z`M1j1&61DbS6WCeLU?Eh4RQ!sCxE^>a9$leox^tl8N>rwLWTf*}cVNGm@k zNmW|8{04&jQ$8P3Tx$%dc|`}VW7Id!mxTmCz$RjEOU5PHjpj|rG(+5#>3@!Jp-0Qf1U>#DLA>K;kN!RFWK; z1KG`7eUJWO@;j@4wk&XUoeUgq=euy+6i1gWOY9B@Q6!`33-1FW*LY`_;>dk6ndaE> zd8fYW<`}fOsox^R#6j&A)>bjzn!!A5@pzQI-fTp05+)08HA48f4#c5S$Xe;4 z0C!ia+M65>4PUD05tW|EY=4K?fnWatIRH`=7(kl`fTFd;tNOHVLk(l58?@1a)tc58>D*619*9$4|RJD-hv z%wNttV&zuh*kB-$mOVdkWFc*3YAj)gL_d2caQ>VYMwPUYa6A7%T4095-=rfl#VGS& z0c;l~p&@K1gzoimL&1I-^5C%n!qm#7>JgUnKK;X1oXlxVAkX4%=1u=@ev2I7(6Y+D zS@T>n3Cp*p9~UA(eld^T^9!FqK&?OUvjqMZag5Sg%Mx@a@#W7KK&MNBG%G5Tnld$H zohqKGFyS-}y+ZbU@VH*Vn5N*MkUYx59F#SoJ17uU0U$DHJwQMlIg&8H4lW-QW&CQQ zlQm&i&9#t?S}C+du@U(KF(|M2dIxw7+`qw%ud2IX1)fRM5MCW3uI_Jxv?~zutUl%h z-W(;Z6{Ldq_VEK(42{RBBgH&#pA`G|7%cNhRM?ONF;T4ra=Cryy*yNFLVgTuJc2Y) zMGsD2g^9aYk{oCE4Erva;EsTvifc6oD&~JPGCLjU13t|c;{SQ*!5@Ivn^GTA?jHo7 zxnAUSKD(`*v91$?drydl%+3V@-j%o$Io#TTG?}cR7=|r*H;SuGPA9)DdSMXI*NMeB z=K(9q9BD9xNguG15D6br7A1e$n@pzhF~Umq<1U=Im^VMm{7+;ra+c-MD@P+|SOO#^yB08IuGe7)Sv>;jp+3Z(6xE+=|X zE+p9r&C}24s9p2Is{L>!r5w6-nIw*8C68e7!7D#%BWk#i3+1+P>k46(4_NSU&zX-H z7TXV9on|A3s~J@crAs_9$LiSh?-Mo}I0EONtQHY-I-M_ZTi6RyjiJocxV<3QWKuNd zsx2E(1&-eP`7S!MHzr-@hiVts z)$1c*rzh|@ib&_VTfH2AYbE$68PI9lvw>p~MF0mC?%T_>#rw2(9PKd3v|MfeooAm3 zFq!?&+T7$r_$g=opyYQ`K4zYc%;K(fn|Ixl2*Q@AAP0zFCGm?I!ysM+$n(wsZETZA z_?Gi4NKHT)hoyq@PIKhUrs)TYwl0S7FmzB70o6XMd>`_##E-lD#`d(2cBdl6;-ANA zi!n6{Gm!$zjibrJxe!+zE)2=;x0tJ}5p!FdM8~UWam$x!uT<35n}}q1dIkq{y6f?w zO6e@D{04zMMlz96@-=ukk4X%dM?F*=9zm z9C<`X_5Er%Jbf?#bGXXd%WFtXIS@~ z?2zJ<2Ae$>Td52XHc(3p2@>oO)3L(jd{F%~hdP{DB?MecM`&`}Sp5U36r+~A$@ppb z$jBG8ItN=Z6p>zi>kg=oKX2Y;Hb!cWL$t8aSZsag5Jpnd1iGCT!cKXKS4M7fwLiu3 zAr!;Nj5byysGF^I9%s$t2SIxH$QQa#b}JryipbRYxD`}wI}7@UW^n0a-rpG55nZLb z5S>VRvg*Lpg0!vLG8VeUL~2LujMBAvZxrR({X}wchO<6IMm8H$0p`;*%sI5~W|9r&?5%fMX%F&4&I4xU>K@CBqy6`T&ss`U9GF#&&?H_kr> zZBKp0T~6!lYyXh6z zda)Yi;DOqk=#SI%3Gov1(A&KwluGDU66^I?JVn?s6(>5NHwZ*jLeknGld zXV^09?GJ;QRt|FHEzrkZ{l#8izb2AHpoJ?oeR5Np3r#49q)lCXD?>!pv)rnAePc6M zXzsvir&VDUrs9H3)CaZZO`+IMxY%iFMfo81kG4+*`}WZGg1-QI9}raSU1zxo#iS&mzG95AO_Y(&OPeALYWefaK{!AKi#0_YS{fsch-h_l7fAn7 z$(PcD!7E0Dg)txZS1f=TFT)ci?2!^E65U>|8GaKf*zb2#+!_=LI?`;L#&IOvPfOFM zv*U&KAuGOFNeK4p5YmCPQPVcq%i~%fxeafQu?Aynkoh`M;@zLy#J@fmuzBwHNiLy! zikh28q&I2q#HKemb+4Z!f}fvoOBQ9~6A0-RyTF}8YEsXtRE>4?oV50t{n&W^PPy&P z;cpM|C7(OGMgu}B6C*poQF+cz{OO>H0!Y{-hmc&1bL(z#Y>|wG#TRC{sq$0T9F(ob z)HKSJM@dGC}UudHmmPa1Sx(pmya-!YlyPa_j}9KDGG?*{B2pc7!}m9jo~ zeV3aTthBgaAr7%*h%9cRjNN#&Sd3#^BHWv|L)WBl7pZ;XB`RzgVvN<4;Ivs=9fa^` z2$L(3nF8BngQaQtreHd75A`#&W0R;W4lj`DfcI(h+xHn5F73D-n0%=-C*AgUkioeobyA@Mnrk&f-_OUTzS`>sTXdK z_LH42)N$0R5Js0a>EpSG!af0Hk1lZ{us+zGv*=zg1+7?Dct7vl3Hf8VJ^JI~Bd8zj zFhsVazwhYF!8|D$SV4GBrj|gNG?Db|9=F~3NUeacu6qiX2+W?x6r=MPqUl;MsF*WV zhvI?O!9v_S>Ad#>wy_z8TKLz?O*495;fA5mySjTE1^p(CBCp9)?Z@MgLRjuaSaFeX(z@s z5|2gveNuS8`q@u2Ts9`vHsm!D^IwacB}s8*Y^@np5%xF9j3&e?@$^W+gD|YEQ7Bqr zcVcwrvlJM!GB|L;E);DThMKmvBu%HlJdO42^;vw_mfYraA*(ic_au`g_w(Qd5m1rG z{aysC*)UKKPKAF$X1bz6;Qh5>O`v)<=E1g!{-Pnw5X4M_3mRgd#c9f&)d9=#ETZz6 zKbBevN%-eY=bCxq`FG8CeK~N}7Ov9KWgt|yd+&sa=JE~CDJ3wng>FMkNt)%)AXDNd z)H0kyGS~0;4`RFNKJah3xb!R2rf%p!F|_U1N5Z-rTTvjIL{Dlnn9qIIfv5Pgaobr( zU=6y}0Hdc0vGU8m|El~C7y=nBfc}bm%Z~8&Qe*!PeV2l6aXt?&8tJ&5v_o-t@O-9v zTVNq-62Z9T{$r{$5n1hbK5flAXVZ#r(Xrd~OF|LfP6f}fmkA?pmpx}`aU-v>I+5-_ zt<9wk)Yixl#+v^E5lD~z1tMT*?}#tN93K0olDMvK@EH+{*;(jQFWypjf5(%?v55Y> z6c3LCw5RS;Sx67-M1ZniKix^x&Rt0FEMa8i_V*tT{5CtGgWrQ3qfhGSNkbOT`Ax+k z-mZmb$~{CeAY7zzxQDLvRo|nA5^Zvo!?Or@3$#L{78x=Ges;w2-Q-pqT#aVuFGKH* z?gS|_R%e*&usUfUx;_=NMD4Vamq z;#E}p0M>)7+r2FMF*FPXPn+VsrNQyrsL6hO9V^73C4}P|Eb+A=yr24YNJNGEI&MX# z%=_NBi_SD!{^a-`A%Qn`@gN1uxV#YeN9#YXeMhjtwfO{u`x^)Bwg}(#mUt(j&$bX) zcUKD)2B)Q0z!poTK1Ahf`EraVTML}Vw94R_U`V~wj%dqqq!2P(5Ht^Gn{kn(tAC1_(!R9hU&)dFk$N9_{XIKITRQc zWhqhUCnhqbw@miy)Cy-yCKrTJRXOZZD&+=k-MoDQma`!+O4zAP*;fVnE*&ivYm^TT z6F%~(xzdx15^dV0W9`|k{uo9gNH2`j9Tt!krpznnth$Qt4jfi)p)|y7Bmvr=fpoUJ ztATK1$mEt2HHC?%ncUby4`%@ve!fII2;ZmJjjq1wJboIghwjg^YD!_Fy;k$75?#z! zdQ_?mNxM~PW>nWL5d8ET{rk&A1s7?%RNVnr5tR!DIFDlSG)91N7-sJ#RzNPX$%j4; zLAQWn6(6^&hsbHl7q_sTM_vD!~V=sVG*_~ zC!)u|GTZBJl~3x>UrWm3*(wOWTQCr2)R5jDp7UPlt->3fITQ2fx8OA;61lR!VsU-Q zEWcco$LKtopst3lwSnrgQXD)M;)mqCm-6xX5FbWHCbcwGnS3E%JKHiYnInSeDl*S9 zT2u8v{+aOeFones!v;t2NO*lJ(7}6=JNf}(9zq@dABoLBRB>^?NU+P{gRI33m`+Sp zBR*G|5k3%D$EI}aN~1*}Hev(m_nTavF=@_+$mdYY2j5xX^Y|#4*_I@*{?yx+$CGQW z2D0n!Hy_4aG#Bvq2e^!|1IZFT?26$(v zcvh^W>0)&BA8;L>wc`82266hCfpqG&x_Y@$I7u*xsF8IuE(M`<)W+;t(!Nz_*KGB<6Q=AKq}mED`QdQ!$cuPgVsqJyOQopY7a?&dwPHp zTk{PMUa6bT=qp1S4yfi_7~L>Rp|2uJdm!~s{j>UAmgs&M2aP?fsB=*{k8dvalgP`1 zU8%0ghp@BfIcFJk{d`Yvxizg^9YeNv{R%1-OK2E!6=yb#e@bT%&6TFE8)eJ6(0HNf zteqxBEQ2`QK*d<=2%W^~35nESWnpa0xn|f_>24n;jJYDEWGzM1);i}->8z!&5nXAT zTeCiuRen{LMZjepihJxLCvtXLs9&#}>Z&|fjA3i{L)s9Y|1N|sBYZIDNkgoJSf>!; z9PcIhNEzeO0;NrR*j}U0d|QE+E(8`a*pfuzXvUeuiD*gS4Iu zX05n4qUylTe1ULPiw~A)Glz?FWgCB$Ywu_aaf8EMjQJF|qEy0d9La{8){4h_&k>kl zy2kHpf)9>WB<~{}BHVxna;fB0#1f*nyj7nqVXO;$O z%98Zu0D+N_NioAk-bg>U?1&f2!EDo~Ov;a{U|rMpW3=D9mw$NIn>3!tHR+VRa-hn+WAnt7%AKhSxx(u^4!S41AoIf$veu!o;SQiNpfiRV2>foB(1{F|QBl{q77u^BFRM(BDjb{Yw$A5r^yUO{ab0K)XWK$Y?k zI!Prcd49QzkP6U&5mB)rA%(Ja6S*xkuNu+~?A!SjV0Bvmn%Do?-GIXFWtIIeVo6z` z(YWT`7TWJN72&w;+itWLMe8@Gl6X|fyM5;>g5iFS-|8E11p_iNsQyh?x%z{yQbFu% zy;H4LQ>5YedUgR|t$1#dmC@pj>BZD)(=x67$y=!?0O2T&Xl)35VS zIMNtEYx0U5Y*TJs#O~})-sEu@EGGHlnsj6{xjg6HR|#p49XLHOOy1_mz?5BKtFQ%9 zT+lrk^46OuOH1^p6#n-<^xSExl?MY-Mye_PlF=hV85O9G7+FK=<&s3D8uB_RS({JO zI!ixZi7q>OJEzQ)a#Q^Uw1wfTJ8JCb$a|)}*)eb8bdcSHl;SrQrIn(D$?>OnuMHZ zN#pm0>QN;OnFPFuEsw1D)Ouv&z;PRHDtgG$-V~nhpJ>Dj4PV9kT3>x^oZRjy`kbQ> z^uK^RYR*97>)GdP6y8h60<6r!n#+bKqvv^y#1x>b-2P4abbsg1oQj8 zFWeJ~INHiEBsw2B1g>-u3MTUQ`EnoL<;(-C#2CtMM`>VyRuY=tq#L`|)M$0p{ZeUU#Og5-a3$WN7>RFwmUfOS#KXCGpL)(cL=dbBI{imXM%3V2Je@GV3xN* zjy~)o7;(Y)^3GEuKuYB=mW!Q^$YpEpTF%<_@%)w$Tw;s) znCV>6Y!&oV<8}I79|t`7!8EN}ShWQEC{TE6v~P+gLu_n|0yobS&xRf$E*IT94j05l zVX3B7LWryyikeJ`oe-;`3IXNejQ21%!S<~L{sOZ?ib{6?euXZ=Dy~V`dsB4HIss)r z{d7@BDe!jt^>hj|{O|d++GlFLz3*w8RMCc7p&zHO(r;~%81a3K!6`*byb{E%|Dl|0 z)!T0I;e|B;VVO@gcm3m2O}j^(qo|%<^qiAkBZ+N7f39LsW>W}5_X;rnQ2e2OsA zcFPPw!%6KoT0ai*1q$WG+W%)*LiFn@TbvIRDAZji_9{(+ z3ugSBR)=B0JEFRZgax+)9J!^vEk{mW;iF`cHEmbe}Yh(cke(^&&SOr-)c1V)%ZY$gJ+C6=biB#Ww7U zA3-Kr%ccPC($zLjdQ3DjmCe83K_sgC+AATmZTTA`KJWvM6A4auuiq#5`R4T8Ofz+n|AC!Rw zig!briM)>)xVMe9bXID0UDv%J0DwnO6iGi)Cuu)6nvO@1e><@k@!RvT3YjQECiKN~ z_jgQr@ya?KB8IVX;&f8rlL_aMhxPEUt0q89t}ppCJZ1^oScdf)-z#wbTFb96yEbsa&xZIhAd9#m z7a5g}NQ0NSN!0-YlHTLWf`#@H5EZ)9^?h^(PV}BnS7^kgE`DJL@QMWXA9|Ha*H$*U zMOQ|@;n&I#0lZN`YqTmOa%P9Kg*)ic0zSUiWp3ARo#m(BS)YRe&ay)57)|)3tUg9` z&qCs5uBlFkP;owg%)aFC3lir0qEv-m#^diNSzfVdi2=Fjg}i6X-yJVjK0b-4KdVU? ze+~W%ir>YmXtJ{9a4>g{XVzfvF9BtAWs#0+!PK0CIJovx#t~rXgzxU9FR@7@H#T>In%AF6OCNFRkkEc#t$; zw{M)lHxygT%0j_7;-9<*DRWvTFg;>I;Jt3B+;uksc}*JRE)Ff>!usk+dH?qRpm6XF zhJn{B0wx8~nOy{&tc%T%!R49*f`wsKeZ1e8Zo9_dUyv94D41wf%E)+@QC8ts7Fzk zPvKztmI!Ngq9#e+Q50BCex)Df(g>xy=l5^q{iN@yVRa1fEAk$R@{8V}X4D~D8phYJ z(5W=dXJ;-_v#Wt8qj#7On+6EBlY6&1EdVG!WkysB6Eun8QyzyCWF`y0R^x#1R0AJH($a~+T+XK8b~N@uJ!7crSCW5oHQ*|TRuWHkt^Ad>3W(BTf< zL-*(izOSHUjVZ8)K{uf|8?qPdYMV4n-NHl=!7Pe+bZ;afrYTq8^Q9LG0Qv*eoZDwX zdm{S~xp1(|a*B7Q=Hjv$`!z7!J{M79Lty*OCZ~5h5{ZP;yzoGuhv6UnTJu9h|kyOUeunO+!qV2RV3qO5!-C^Rm1)CINlYBCUEsg$)}Q>9oP`|> zfRT1Y(V6hh`?<@3g@!~$7!PPf=FBHV%xX&=x`%^MG1%;{ft zY}}^K>DT^#WIy+xAP0u3T+JKneuQLh|BwU@Y(-*yyCUm%fC%SHX;Z~!8S&sjZ1h(c zv6Pd3Vxh7L!jqfoLGe~dbd*#e)`K|8H-c0gZxg);H~`2_@BH>sP|<2;D>6cx6@b?a zcDIo+OVox7L&fxYFG%amEn3625WtI@M9@?Lb6l+ComFQKU*hntRT0*+WbVtw%q*nc z+E!c>L9Bnspxyo`bqy$+n=)?X;oe$Qg6U?3eM$bUVogAA0tpM$v#B)c2Xi(4!~j}n zq-cz`z1rFzM(U$K$X(wlZxB4zTMveyAMo#{suBZ$V78hKQEyF=e|D{(4blb);D%;r z@paO3abv3M*!u@$nVmhZpY%nTkgG@JKB_C?cf>brLyC6p)9PfeWj*Ps@&Doly~uPT z9OyJ}g3}c%BzCOG+X+{kRgu|rK59Eg6uxf>xJmiIxK%G!B)WsB0JD<_=Uy3NN9Adv z>@M=r=u*q9tr(zlt%;KIRhlN+<@^AN3r^xf@us>UgOdX-azYZaKlTeTN-!t-1uVbd zOWTM*?XQ=vz~Bsl0mw)yIM9?-ulJk2I!AD)ppj);ht0=SN%n6_f%V$;JBe^lWrR0$CP8IO-B8J&vE=SEJl)<#3Ys7$%zv`xr;*ph*}h zuaYsA0vl~1h<=Vl=sBoZ>iXvTby&Eqyg)3j+>e)nuw#|!H(vLK9}J&DF*r-T%6mJq zo<#pWBYSFw!pB$j7UBiPjzj$g0LPExYeNpSbFF>%=;B4~{RLO#TT!|k0uhj;m}q~@ z*XC859CPz}A~oI89j(Zw>f|$ACH8SM;fwDjAUam+y`P1>Sg}20q^eAA6Quac8VlG0 zScD@K7Hx=4QNuMc$Y8eYmig1HgR{-IOXfq~^V6b~0T3+dxIKp4(KhcIIqd?>aAu9G zaSHY<6coxHF7Zq9k^d6de}LPq!vUz<`Wd6DcwpxccRvwHBkU{+gCj+#)31oFwDlj= zuh!?bLCqG>+cTz<)pX%L6;g3a)-e5~jQ5kuLCl)=%t;W1?{l1M)Unrnz=ta5mU)r^ z!7pv=V@CN%m!@YBu9+w|zo#-+>+j~Ni(C-VnZzwCM9Amr1O{Zf3!!Nwq`~n+gs#F8 zYf(!jEAX=c*U&3<>o11LFZx>jOZKt_6DB25AWl(i<{tbIjoOhJtuJ44tWP#13hmug zF?*NIDEPAYQ;$s|0giDNU>qTzZ&Sij zkz_n4q;zL@SZZIUD%n5Z&)1ad>N;hamYxA$tJ>6y4#IAFZBsQi;X;GE=sKl{~X!5~2Z2!CZAxPuNG+$>`?uc&2qfs9NsIIZ%Mw1uLO zcV8ilQA9fRSfqC$qSd#x^D_qqmpdZ#?V3ct?}t^?v2v9Mas2{|3FDQ;UKu}mpO0)$<4DV{8Yky#h1 zw^+3Fooa0*tQ*eJg9ZLw^-@6g%I8vq@eEd|DpcH-C@n#XMM27xri4c7JCHpSGn>a)qsFTPyQ5!Ge=53Nf1 zb&AbHJwpMfV{G!~zD;t}@bir1Y(9cM+&4B~;i)R##KNQxfnwIMKWTl+XgR{cJrAf? za0mIe@SkLA*3oUt54qm;M(l?Ga?l9aD{~DZwTp(88r0N>#>+nG{cN(TfW?mbwdT#` z;Y`e`=}bY|EQx zXC;IGO;rR~wy~+|MDcq!d!wNpFkWacD$WT!Fc1$fG&M_eHprnijQ!xgvpyW$dtb4X zw&lw@KfTpqb^1zW4aRrB#9igP)n6M(n7fyIH?2>LfZhcsy|z7{dRdQU*stfkJQ5uY z`27cLR$K_l3g(2-uPg?HJG%~ya7sbKK%7Dvl%&_30TFt?!SHQ#c+^JaD@wv>u%a|` zodKz-i|_8^5!!=(kE_NUa8GY&|lWz@6o@F$t_IRiBB0APF3RD|E(y}Gi(+N!|fKz!&! zD-DS>`2M0Vd;*>r5uFsE5lIDzlHE!zk>6ju9$v>WzAc0ZP4AtpvZTR%m66uCX?KMG z^9O&Qd1HITzNC4JEoxU({nsP^D6tC%2tDQ^7bN%(&f`zN0{%(F3*bM3fw}ON1@(vI z`(2LO1z;)X3V=( zMX%J5*SmjS+b&+V4NkJ2Kh5=jUh^%i{ZBw#E2p2RN&m@T`j?=L;{=$o_!cKRIQxgmBRFPiBlzkGnL0cUluWvdRm6I^uD$GxeHnrzlM!k%TR&e z&c*xT41V8A$$Ng142f$VL0q-PtYV5z4mChR~UR`mat+70bX#PZ2S_tm&=dd z`F%uD_`)n|f>qsZ1Z*xvJBI#5{qB;pMguH0988s?{tDaWwx@#oh_Qg??C2kW3?Sbv zJx)w2X*(GHf?~7m8FP^inNtT`D{G2n)D&7+0zEwr`;OY1LmSd06LZZ6uLbi{lSoXd zp|dz+IPA+~x2Jd4yMeC!TXv|=p(}9<@Fb{5x>T{oeKWAPdz5?ObzI_P^#SwqK zkcE32{h#^w8Fb`4C>KD#0pN`#XeUp??Bf-`P}7q?Q>-JS!eUV-vX}Z;xL)x>4$$N) z#Grg{7#BE=9Y0j6$Jp*GzrKLvqx#WN0sn4D7UPRIYQxK;0M5MxUGv4C*~N8^=>NaZ0MHR>Fn9QH1^--)Bt{>34h|p@VlN@-bS^w~b#1 z26%)dsQRGLKZ{=1*#^1&cg>}w064uVDLB>uVVLq7cc&{?Hd4ZyA_4<(BBcNXHfFsu zcvi`KqRnf@rQ!XStiRt+r{9rn3~#|l-Au6(%$Sw^;v4`&K zyt7uD2bMvLQSnnf0|rgAB)U}m3B+=8;=08`Jq@~clJiDw32W@9dX+0dNQs^3*}G^{ zM~o;HhCGfF6W1_%0#jql!67XY8sCryk%rS`Wx6Q{Y4X&;Y(M1ICfM(zBrl_92VGqo z&x2PW2FNR7pH-fX(2?`9QXJ-)pmHDO9L^-A>vVrVS#E}!lt0qEZO{>LH2aqf{k3q} zSpXtTd?!|%wEflwQBo9Ih@7D{aP8~mBYpDH1BW=cNA$Y^LCrZ7X~+<_-t zHJgSJQIo=oS~Yz$H4WKziA3Tn%MSOH(1~EGN7mJRHITSgHj~=JwYb;?D_9;3%8WSb zh!DtQ3^XpSv8``^&Ju^1w)?-kx8PapCfwE-Z^*95wl;ckkj7r%l%$wZ-q-(k+oHC9 zaoi3CkpSibA&kVDqJ#xAP>{!&I+p=xO#V4Tws1?~@O!co-$9hJfU@iyUNj600gDk( z(pFf2QAlHJHV}?LPr+Q#2ruf0Skv0@d1EGfGoQU?0YtaI;<7YwI{}6ROyETKQgy+( zil?gp5Ig0GMz{V6*RjgMs{ZPBh;Udcrx&dM3)QV>{?IV5LayIJ~OcETP zfYxE@GQYnP%!MnO7*PJw}0X&NKx1b{M^-0S>l4bO$FR??exWfZJNZM7wr@E+@mYR^<2GU)&2xRYckqAkOdnYyw|IRSo*o-8MH4{ZPKNxDLT7pw&!kSPQNGb zl7_KS>8kE_sH%=~FHU&QeTF$+*A!a5WHGjWZ6J@u@kFNzpeFeNe*E0t8bU-iSl>cO7sin~v}42-Ca=dZY4EYj}s0!QcDNo?0=s6rac zr}CdQ-kOI!{079WesoZ@%~9`xdjp6!)q}^(g~JTm7tm;Syhp#P!}s^eSK z=c5Q$&^eD*fidP!GEa_lXsqijS6Buq713^3pFM&7OdXAlkKUZsTTBYE=F%Eo6nWU4 zzS9B~*UD1!k*u?KyVtH(pf_*Mf0$4L#-jzAAckn(KE=PHfqYdfBVmxEmk*68Ouy21 zzo^x&&i&6i*zp0swvv^2XbDVxA!g&_1MVr$tnG^jhRKWivxhySdih+?X}^V+00bVn z1R7y1qYJIeCr%+5!vlS1CY55Dh1L-D?*+xbZ&~Wj&@uVd?WABqL*s+P{RSA_z`wne zB6i}Yy~B*RTp!|q=nr%HYvRXIys&BK`q3wuP=cep^u|7AG5k{S0euw-x?#Q;@*sGB z^Veo~06fv@PeLekZ@%37w-xMB&+oqOv?b>>s`Q`L^s4&-0vQ3+OKb1JjQ{Q*uXnZ( z0dmv2u-Sm(S5N(^1igN4vj#-yJz(k3ll))0p>^PkpI}n0D&{{s^Q)q`!UEvdU!iMO z692De*7LWynZ*nLB3p+4X&32CAc~GC` z1qr9E(O(^yjE=w~*0(LM+w*m_H6-_(Z*E7^FEoT ztwDd6lV0^Y6#(tk5QAQkK1wnmL=^;T5l(Ba6o4Dr;^&uOK3~+!(0ysii4=?km6c3u zmfAs{Yrr3&BT{?-9g&;fTLmaZ4FzGytL^t100K~Husdo){vF9*qYqHv?NI^ZJjDld z9AIL#k@9LY%R~|Z{Tc*!Dp-lf$i3X(tLbH+Rt#U1d{jq~|7EM3@Bqx6D;_2)GJu!i z57qvk&nNT%vyB6iBj*(h^rs2&`q@4mU}-p|C&otq9RcM36#BEt|7^kTAV7c^u`7WU zg~&D>X7!;ijc#4pX8q6F$6`qZ4d*V$Zc2K5Fu?EmW#A>dSWt7PnEA-Af{7O89Q)3* zQZIH{9~bUrQdwoUk9P`6tP97YOOp1Rm$W0`O8re)9Yri~VbR+hf&v1Fi9tPoRLv%B zH%={~G5+{c!%W>IZ>Mos?Yhs@{4ePRWSt1dl`lJhr|~%nk17Cj~@i;1hR<&FBdnR&iH~SlK6!$ z9OW{UuvErl-(MfRDYZS|ENaRYW-wO?LM1IRSPmC1xa1?HGY_8{6qWamG_|g7p<>Ps zj1FZWrI03*ADHe6e@JeUPGSJGAMg?>s_xn7cA1119kg2T*b!KroB1oJS~EozPirXT4ewOcUF{@| zT^sodkrt-%&p?Y+k_rtRz7_3wM%8?6Rg7K7Ohu`bpAT7*=^T?ZGN@5?7^f#=Q+1eC zEO6K<*H-vl;fez&U^p=YHaz|rj?dyirfMXlysZihlFHzp^6*{C2MNH*)xiC`iJf@1 zV=i{#vi5C*D2k7$N*C*P$qyY(-qJEe?S#6KSk~US(idbn#Ba66mC8eYYE~zGe9h%&?<}Z<$&Y1$pN3 zwnfK=q&C-Bb0OtNly)IXC#_TSCeu*_cbz`u4vEbHWx&P7hXH}nxQHc_TvQi%TdviV zNN%OPPG`|~?QDHPRv)#ve^>kjdNNS?v|~yB*W?AvU>8{AbO-a|nt58Um>Hc-g_ZrT zRqclJJboL5>8fLyW)33L2-qZ@s{#6I4w>7|4~gFqGg;0fvl8{cm1K;z;HOD$e>$2H zaBEJJYkWLkZ*|UCL^6tErc_moq)7h0oTPvT{=2pdb?h5+#mC`b^gjo^4Z-3m9RuN^ z^f2%AZZ;?W&SF@%RibIiOfh>d`TgC&INDLoO%Ti7QVEiQQV{rO@-^=L{U zqh0Zoyi4IjsqKDPBCa4>?SQ0;Ow<(R*YViz_m{amcD{PWGil^{$+y%u{=Yi=GuM09 zi`1G6I;c+qZ#?A5Ev|&}x3+YeBb1u@D%1tNNZ?wSGDPF(j%j-D(`Vw$KZUO=x{$Rc=Y5m7q z{j2XhkjOuu9K3%Q$?<1>uQJKKZ3O|_p3(k3BmwW2koxzfN#m`jJ{5A@!T+n)52bI~ zE8FMoCeZ(C#;fT2)wGrO;D80w-lh}UCV}LKOv7_{c*xrvUj_A2Rs;GYbE^2zHvC@$ zjy;0q@#6`7pd7I3KX?3Ko}6MbIEWk7_$@fofRl!awypPMDKW(pF*%JaxX2QfmDF`* ziP3&NE)Kk_hmXwgn`cjukc15UYMO=5JEc{Fa72I*gZ?TmIt9gaTsNQ0vV53(+47Z8^(J>gUOd4+0! zXnVZyp}zsH$r?z1U*|Eaz3{6Qc%pWt=asMOL{Eh7oDvs-RFiQoR}at~_YBsL#F9E_eZySFK6b9Q7> zzZ(47Z6o?`OBXr&)*KS0r6v!IP%ob1x1rJ+QjtY6K>e-rg{ zQy2KCl3mT}_g?JcEP4FBw$Gx=@>T2vs?3eb-$wRM4~u&&J~^5h-cKEwbvuw={4DXB zle2G}5AnD?b^2_|iBv z*c&^3;9O(*(d}geWy?$H(89u!>CUOo8!P!g@1w98r2>L>q{p_C@{SLWq%33_o{lNd zE}jCwR2iYVkT~aK{r0isugC^AQSNaEq&mcpMw92hh{mz-2A=B~a4(Tl3;MDE&y9g6RFJ6%j+=!pc=XnWM<%3bWi~kkzG3H#&zY+OSuB z_{Qr{bK)}ozAQ6_qX=T+=`g*ZJuzjx{-~I<_>fKf>d7~B#Y$1&FInaj@2(14@iLPh zk@D(Y1#M7^t7aUdRa$bJy4Trgi%B?g&4o+$!y~HfU9Ea;k2?W$y$27(Qsq3EZKGx7 z!gu$jq;`X_*)~~cJ7eLzteZ_Ot|DyFxwZ1*^56a+%1%tq;M217!GLt}yZ5>Y^e$PH z(JHdV?@#n7l`^J@h~~I4lewHlmYSv+%uS+>FT;;*xO7XVhJx%W4pbb;r?2h&d;-Yk z>^35dIKuk|l(THC#~-G{mHkPub}e&EQig)hjrxud#t!OtUvQ>=w}PGi0+8HcznJwD|-WlQLT> z+M&%wMX~T2s}0LmSk~E;pcPvNGuc#C$z}G4PwpX{M?KsGw6I<&7&B7JRG<~p2v`@Q zaH-QNQSBA!8Fe1u@5?7XRvlMGsH>N-pI>s;<&=uo8XYzmwyY(R+L%1^CpT_SdLPUx zRoWM{6G|Uh#?b zLL`|x3C5JI{os0(fUD_>b@{^HFI@%{DsgDvhHkFsAc{Mq$0}->=8(%n(64hCE123cD_8yM%GTk;MqxmQ45EHA9n>EK1$8B~C?+eP$83y%=zDvs! z^`G30xP{PPKdKm$wq|tpQti50X9f4OFj5lT_v-5R@0le_3U)G!PK#nR-Fyzm>)q`w zRF~fR`n*hdxIjkCoQ_qXyl}2}Sl}RJv#gbLn2j2bn%|$>Pk%XBTgA??6Z-MWb@M=6 zByi%EPFJc=##AA?cyBF}l)P{{&!6sMONfmN&vO`nZ45pHKgF!2z4T}yFS~|ojCbul z>g-c)kU8(^zMwT@n;%B~OW;zg06#o8pivHHCxc?2XaOsId$P}lMIxVcQ;f*jla{9l z+fq*G3pF-=V&M=PnD8WlVRb%9LOrZl^sla(TAa*IoW7u@hUt+mJ!dlClZ;)F_x?ge zFlWM`j4MFO(Os`)KKeG%Urq)oH@jbtq~xxGbKX@%G+=C^9*%)?D0qWe0GML1!RoQX z_LxlaAc|Zx*rf>XzD16^-a1gf@kotiytv^r|D4UUFB_{H(M<|1QK7`9k}~PgPG+gl zM3~9p0A{AO0My=ch#YYAv9gQBd4m`NmVApU)V5CcTz8!S26za7mCwsuGW+-AkBYS1JhO<15GI?9hma7pvqAJCQjXF>yM#p=XhT6N1o*v#=tgWZwOBEP-N49} zZ|U)x9uIy26DyETy#$U7o13n#1ri^{4E#`>5%_Qp8 z;44Bc673Z>URduNP92?0MEW*+7>Jlm(UeYVtZBZUv0ahWa#4N!qaAlLB&CQYo`x~y zW7KkIai{2HG^1x$r8RH+mhwySj-zUWwQpm>8oxsif;d@o0!o|iqF!j>sP`W ziTC#?cgrlIPHe4>8|G9!S&Ab?4?!V|6(|KzWEX?s#)$Aj*6&I+CnwK7wnAY{Qx8=O z$R8kHz%m3Ure~k`?9S!$JPv1yx##bnt!zOild|Vw5Qz5mCl~$bGoCAVX-#g88S-3X zt94l)dPt09l5Mczo`13ne{L>UL@H4qPtRnEqGyrLw_JQ?*_uyPw-*N>X(#oxjprE~ zT^?MM5dS~+-ZQGHt$Xx7BB+QR1(BvAAYG()Pyq!2=_NF!mxSJ%SWu}dz4zV;A@rgG zQW9!_BtTGvKtkw60wHg#&++`v9q;{c$GG>y^D$X_@73m7dzRmtyPu^pz)%w(K@ZO!67 z#8PCGhfdr@8TD5*N4-9^s`ho?vx``wlCpXg41L%Lcrm#-OECt37D1B%*uYRxpQkO+ z?zee65Ukm+z>N0ZJz{1bdq>uhi*;b7liU5ZwapGG@#z)KOZ*5UYC#i@xE4>Z)efyP zq2N8Uay6ePv<+&Lq*v=&)1%>$JPb*AZ>NHmX#dZw!}K|(G2sz{M$Z`*CGhT(H$|+r z9nnLnjz%dJ&$3Lug2?@&DCc}PbQNvwMJ&s24$*jPU<_}=#8jT77jyY zTPyZYX;ShW!YAu=pJP`Xhj5WuI?j+>xoq5|Sc8hqqEA~&-UsbgCh1sD3jiIThJVRQ z0^(yakuZ?Z;01r>G^l!1;4k{UMg#Quj(xBXMBJ*xv4U**>D7H0m`U`NoAGcl`o&i;BYp4xqX4Lo{p-fM_>ZNc7W z%b19{Cba1t?8C?5*LC0K{4z8PLK8vSn=i}6!3&&@7gl&Xe+^oYQ6>6UKuiWP#s&RJ zw&3kYaS|McVlW2ZrMjHA8&1BLtQ>PiPYCrec6n|PKllV1w+d3Wj+qZK<6|9efJ0?&aV=Y0YTgbFkOs95DIyo_O0QZ}wK8 zNWCVZ6~H}p{V`ZhX~RN&B>MAHqHgtE=IfFRr3nt&A0q}8&4qi9r96*~a}IsUo@Okm zOGTTpE~D2#@keyXip5R5A5?#`Zm;(oII!&8N&w$gvG#nhnq#Ifp^3-m+K6)qRejjo z@o|CD(^My$>^6DwydDki-toH;Ac8@jg|V+av_cPbM&FyfNPke(La|9RArfMe57w)*tmgy=xoG{!Vi zzle$S(H=57_Th=0?#*s#)q3?v`Y3ykTQV(B1Z|_n-P4}Fk_Vc_!o3-TOwZKrRWCe) zDc0VI1-!@zYT9|;sRniyA400>%SVpP&5M#egVI`MO)63%x$u4WH7+44-oBoFq$6a* z6bf-!&ubTebHoV?t8~_t@12u)7(E@(4MMVDOZa4*${fixhK4I*CaeA988eE;8qZ<4 z2$mHWhXfPo@O4d3tL?jHRZ`_1D^i$ME3t z%=#uO1(fu3_ao7gzJS}8m1lgOJ)(*|lB>aWvxsG<|HRlj>&Unp{q-xW=$)jG?M!E; zch7%(iuq-dwLhSEjl|;u66>z4>QGX1GvyAi{(p%RDL3s@dRro7w;)8sJ_RDZm9D++@JBtIceF1crCh z2^siFLj7|T-douBl_%C^Anu_rE2V?aeiJ#d9P zCMIQX%(|Kh;5p+xjGW|$UBWWmewCds$x>-VD%H6l6VH}g_8c5<)NCQaKPbW1u;R64 zvwI@wBD}%21&Xs%7(b2$Twg&7bnmHeA`jjW3)wO*V4Fi}rlppGZ4j4&(}cOBAz5WD zvCTUj(wu0&l9y-KQ31E^l))^WcBYn@MV}nj$qqSs@<|qgZP;g?Xx*r&5#Sp`cfgqK zVVOBl$X3$M^~;N7`I6Sty!u3S*boc#8DA-?@(bf$2*EQLqn7)n34%kYd~fyP#&Nvw>GG z+24*k2Yjn-l`d!6j1;^@*zSxW>}oa%jb3*%ZLHyv`9xJIRCiV~?*&G)-x(9aVmOzp zqK|yq>Vp(`?XWGIZI5Pi>Ugfs$*6~z%;_yHToTvgJ~0HOH3mh__d}&8Wph0)!0D$h zc`eU?f;PwLuC%rY-guuYLN)m0Y7D-{i4-a;c9Gk#rLoltju)JFkx^(;1B`UM{x_^^`j}Ra*XOS7tWrIyqp< zZ#1VdJOUL^t^KM&cS#%Avg?hfgAVhgq(7Vjfwu|<+^IT?Q({MpO5+83d)&--bSlmJ z+(lMKVvf1Q%iXS2r11{+qbP&k+eL8X8!P&9iwniQBOr@?R}~9X(tx?F zz;(+dzIh}O)9Rd^xY4A3IOlD=jhB?6r&@fBzziO!z4(f5nIF-whd!%fmL8Z{emY1D z*Vi!i!2g5on*$96QB{XWUDr~p9lPsly^lbGjFDP&&md+ajH)h3fvJ;?o|^$p`XjA3 zu8En`7Q-(V4SyQ(5onit2XYb|dx0hw;J2sOc@xYrvuPV`gzR2+@ghX)om}V+xQ71d zlAkL!BM>xQYJcA5x8pfAJ8fnK5W3;beAXRq8MyH`_iq{ea3FKQ*W`0oaJNGlF77XksiNUIem+s!6O zr9(X$&}r-puWPX3Qio)GUTKWr9CG6`+r~*MLto>D>X6CXpZMi!1NwLo%lw1egah%3 z$U+N#&x)m|iDyAK2Dylv=Gd&;!}I*Zaq8PM8w43=r@Wgt%Y*_42+;8<+!71p=HeS0 z3(qV*&fW}>e6U%UHE3+qG>LNYBV&@W>PAsq+ctA~plS;O4O~ z=h8xO(7~+E-qH%onPMI*wnea(Pot`8KCI5JP-=idSI7qUN;t`Kk=sVA3LwA26YzFJ zt+yr%`6ib^mf1z=0^rs-UrAz3hI8h7Rs?6#qHX1~vQB?16bEa~2L72#tlW-Ey17rQ z*+>FJ!7Mvmiw*)TUFl=jaZgy}Mz%H*W1HGCAmkB-ZTH}#jFw6Th*ZNOT*SNRYWz|L zVbPf&!2!{A8}iu@l^(U_&)A32rAv38d5M$2-w4-)<~qEJuuwJQAtRInQ`u z-r6YDVZ>U*F^3>t#8yK|SX*csGVOm~VRuhpTa;I(LN4dUx^olk_^XH@weuB;?m>u$Z+VMGynyfsxiWswE)839x2=KXm2*6v-p72srR67gh<>CyMtjX~W) z%91}g%yteSbVcQQVxBzOFl ztvN(eM4n%AY{RW?$`&N+wU|F?2ULGHw|j>rJ271H(EF+ca~w;WmR4xq49RR9;Mv|v z*odQH8DS_3=-rraWMhJt{umHhrsg#Sf7;Ex;e=`2mTYf$6*h@8jHQV|lo=5)$Uhji zN>p%-qwgl{eT`yvIMfQi-BiBSQn4I5F!h0zi`q~Um?r0^;RoZ7Fv!GQ-^rioVa;T|^+pg(~j=}%=>ql_l zyW{>wu6s9c%BZM_^F)z-)1&-G*B z9}ZV*rbDcLgc*N{o8seSyGY89h0Mp}xlNEQ$NT-G!+zk}Yc9=fW>V$lnQVr)$?nT* z3-ytm{^WFMt$crb@@PfQK-*B=XB^u`kQnpPN9pEK)cL>P=if!+us-F%haq-Fj8spR zFTb-*H8%5b$6gnDFOkdVQ)bA%+*BSu&)FNjRkUec-P#nW6|OOy6CV*TAvitWIPVx_ z;i|^S$L^$OQeaS#RQZZSwP<;aDPA;k#B*x2BjWUVDfhJCW}=u4O1@Y-5k56orhiXO zA9DP-n%GS-okXof2VAO)gP%@rG^#OiL;HKUtViU<(n%Mr1y@X zOAGl>j%-D#+>Uwk{FGP#_?*BSRcs84ZjesNr3zCWLf$w;`k+9w?*350^F>WToejAl zk1Rbf#W&>2ff)m8wUO9sFYL7WE0ER@Cg3fmhw$Jo2?JoX0%wlhTpcleq3@bccZ&a7riA}T&|Q@X?V|J zLrf~?7ND}$evIf-d!>)oOhfle9mVw+Vi;i%qkS99*_T>ij9l#PgX_R<$H0!nUQI7b z9o{_Ha{_uN*Z#*}6EA+{mbN>+|>3BtD$2lRO4eWCyg7EdY^G8;6nwA^fDX#cGO{D@qICSIik*z<4b9;3Q#(LS=I z4*Ggle{Agixm@kmSJrivzdSMC9(IMUW*40_=@8mL1+f#!02Ov3eng1m-3anKl!R@)JA zOnHLwgfBy}xxsnEp^1ekPP;I5-E)bBx~zpnO(ynyY(yt0j@evyA!(M;D1LpRKt%Gva5{r~ver?vUL(zYS1s z^+8_JO!wc!y=4~qdJ?062i42%0h|XQUVNH`}_gZRzhpwMqeXzu9#LEHW zz}l2q4gnYxd)tN9xwOq6|4;}U6=Eo;$2&3RE%v=55p}aq+l_^v?5*kV4HVKR-_Dko z#s>)7AppJ1Hu%G+%tX)P!N~=7z(0I*Jd)eMh4qZSqlIAjZqGc1RDd+cG zFiP$p+JlhVj4IioFQPXs@T}s@+_AJ4ostGAW1+$-JN|q~Lnl|LG7_rmox17>brbhP zU0`J%aZ9yDzDY-EOY4XDhGfev^hZa8S5r=12XvTY#~$cTTZ7rdEa!ljTMTuSnSv&&&!Rm}f^=p8mEYxBo?d@kHjp;mAnb_nnJ^-WcvO zZSnR68<^W>$d$5mUwN!(M5XCk*4;_vxGZ6Hgy6iPFpBX58JQN%KB4${qN-%y(>f~y zT$hU@f@BIeqB6a__ZEl(BJX=KJu*wua<`i@Q55j<$IJScfIbsYT;+GZd5XgGFbdr8 z+tu275id@^q|A6;^I$tFQvto6a8-qicZf`L_!En!$uB$O=O)v^qqyqqy3GtxvAj!n z=gxBpkEJ=wJ3M}68~I20|1rw%?`651roNo-*|i*uRW%cU2!)q9eY^A!sU;g|ZQ{9Zc{>$v_MfvWYFC4QP`%`fC~@}H-Uy4dk- zEI8Et#V4u4bi zJ$HsB|D6BtyTRX@^Gm3HKlIoM2MS?xyD`9l*kCs z^YE1V?BD%gur5kw^?CIp2NyV!yW(o76m`{XAZ$#>yp z)GLGG1?rs*9^UYf<LT`L?!7WE@WX z%i3z+I8VWJWyN~v{&?VzS}pHV%xGqvse4vu6tix(qjSQ#1z3glpu-howlU45zGt~D zY+`=0PvO~+h9Mk@@=+AII?o`cYtt%IJe39`BVd*p9u$GaDR39t=^+Qr)LaTOEv?x* zsik%I`0qZ3Ug0|_l^fo7I~$+j4owAx+#=G8yhEkdd;TUd};& zd>V7yn?v%8JLD=IS`trP!!7bbk5WAJo`*PSD6B`A)B~Jg0~q?7vSTg4+uimXdw@7r z8Kdhao?l|kDCwl*5B$tjgyKO%9fYRQx&u}qJUlUlS#Q_(*>D%iADUmhpC^wtEHD<& z5PvR`ky5JfI#UF?V~aOrc0W%Tfa2EOf=paBK!HM6G*ZPY2Ft2jVnzz~#%uQ!qDz~R zJ=e@5#>+-amd;y5PfK42Os}Mm*Ibp-@i1s{zvbV667S18w;H7~E zLXfLA*?WS1Y;U;yT?=u2{!W09@l?#txfnFVE}J?lR(t>vW2 zHa6V{VLhtS$>lKAo8QYkj>MYn8LFjoGE=gY@3+Sv5tp&Fq^-a57!;uUGr zR(p-}7v_x?9s2!on3O76p7xxFS7dN7O+(sL=I4hJT4U5ihw;c#f<5C$U z)kpS1$WBytq^xFxN1BmsQ!jseNj9t3 z+^$_8A7R$*<#i)Z zL_jTz0!p?9;aJEbtvb1Z^%z^2uBN_2amfY5S>L6;>R7|(d<&5Aq?Ki{Pc)C2K zZ??d31I@fSq7O!RlG5ss79x|o9vQY%*Sz9kIU%CGtzm^KXl#u4|izZqR1|I)I5l@n4&M7 zuslS^AQ{V)r$Rt_=;%(HEu=b(5yBg@KZkE$Fw-xGc`_x60bB&raRsGKUYeYzKa18? z-^V1XDeNLlIHw^%FWO6hklWn7m&6{g0VR4P^}P{FM)-qZ-%5D?H}&mNBLBreyOwKsqz8PNREz7PtxCqxGV$e)$2TB)*a zt)tLmTWJR3E7<)vRwY_$`tRe_OVT$RgR3RYKus|dPFi_4Hy9kICO!LLiQ8*mU-<`a zJy9dv5*Bf3olZ*q)K;`pzr|BS6jhEIOXG~#BwCZp?IeRy+e8G$~Wk6K9kiz*IxybFgeJ9q}hAR;~z-Ks4)=GPMO^w zCHi_Ue!Rl!&eba`U1_G82L*Jk*gRCeP38^(cIhHmmnk6SN<45SQYl$FduKO z)|^dm46fYc@ql>SHlrp*8JbXHh0gV2aBwFGcZahwEcsIauus)o%oF;<7L3?Jhx_zcR zbxW-;eZuclL0-x7i&9>vY9@WYM0=ePFM^!^ZD2KzNsWKC%+t!^x?6T26+T24Fm@yO z!e`Us27jH-@?_Kvw8YcOt&R(nlbeVxWezW2msbG%O6!5aoQU}duN{}gT{;Pe?wH0> z&PGSldEILf})U>_fOzIZO znRCp1jPZbpx{ zE0k4WcxQ_?#R}SP#w%ZRT0yP|^`)m*V-2VGDL6gEekk;XAwOoe@q)uHJhdb&q7bq* z6IEz0j(@l1ByG+3@m{P*{3VH7hNoA?5<8*s8FIH{A2|UTx&`SLAbeM)4T`POb_Imh zG&J>lKNh`qNN1ASQSZ~!Gs-zmw{Rbd-bw=)rh7|VvqLRK3rqWKW*rcUM0P$TZvO`v ztgBSqg$9aj1#UHDYa3)veoTb9rGcOT`tE;A*^eT@sO!pI(8=aD>vsznd=MM1t(rD;057Y5S zpCl|NIn3eF`%jotL|wvkfGU~?hDY_bKjamguU9eMBDa#VH1$<^ede#}Ur1bdYc{Uh z5L)Ct)uK}X@CrRqUZF5Kv@4^eD_EY<>Nd-A=I1do7D+ISuq6$&8hqrz@Sr&-W+$%5 zVe*7Px`gJq<^@~`+ZOCyb;|*#L1{2Vxy>l);luna9-HYSQ{pwR?rjn0BfbOrLz!*$ zMYX#J=nbkDK4dxfk^{WLKBEossnhhHO{0TD*R?yvi_>OwWgjTSC2a|XxYQ(-I{62x z0GdrauaoOhTpDAM9~dsMPC8kM-BH-SY0j&)G!mUV9w%xO#&AD;@YNHNv@>|hzs{4_ zym)^@qZhnk9zR}dg>~2=<*i${MwK?DNDFCsbcy3$r^|4{1D=C@ojj3G>P5JtYZwna zsD|eZ^2UK;Doo!3_Kugf&_f z*E4>+QkSA~hesGGapdjWZb$1{(nu*I9kfD8fo&49_BtV7G$e$EuwL#DcuLjm)o3hW zBh*Kb)&52mju%nZr#m&7E>J_S2>nBeD>lwD$VOx#N`ZED*Urz2szMed*dk> zH?4SBw3NGXuTc&LxC*=WQ9WWP)7wm^fqOh86;KdN#>4Gm#gvU6U#3h+riS{YrO6k9 zmR?fxtu`Ymq*||Dr-gIE{V3SmlGAybLLKojk9jdYS3NsL@FV~$rYtkTUIMh<0;RV)8Ytn2p zmY(i0>Ta#KWNeApO!bmlZtYKML3wW$TuR_-s+{#0x9?N4+y3b6*C!7~3WyCqlV+_W zT31%v*)=dGHT2%)9fpmm&~?R|ytb+hb^vd1p~P14BPzHUbWCYpVD^~pS3&qxBuPOU z|A@JH?MnG1-eBY48_~%)Ddl#OxR6E9U)?GLf&z|gO_jNwC9VX3ny#dcg_i~u4II-* zBc=Sui%k&ge(&9}l;q+L^N26_?!*R$eUgQ4o8j0ducu<`m!@DQ44E?l-lISHQ}JVm zJDzW~`KxZEef`)!)VNhiQ{q2a(J$N)!goAf_0g7oyiC_h%ObpY_}zU%t+CwBVPU?# z(WQF056-4Cw=w9gO62iN5)r^j&*HX?tM5!cMLeq=+r5>kYkS`#(>VS+Svj@m{_LEJ z7seLp%Z7GVEUx%kdvjiJSc~yq;i<$0Fz}@R$_nPeBu79}8;$Z4D?xK7)ptqH;L^qx zfpz$_oTUWRocKstPgmnf2C2n;UA1`Wp016~4DK2!Y_Oez$>4J800jH-w22j1J)N_j z9ncr^f<=hW12ecX|A9|u>wpVFCDn5^0t7@lmo;QF|v||B&*?6XX zp$HCyn-EB9h!0T)y6=NnkuKNx?JN!D*Xfbm z{ZzU$o;{NUK!qo&pI`W85Y8azJomWCrIlyID4w$pp20Cx#fM}U`?<~mPx~FW{BmzW z$@IQVZ#hs+MB5j5Y0b+#H}9bUr8xwfhMVA&zO)>@|-O2azZOq7Rp*1;O=Hz~Nc zacr7mhD(oWegCbn;dFZLCA$`RH1SnP%!*+u^Ws8H53CI=SXXJtS7?^5l<-m#`x${8 zu9yb}G0FwMg{e0ZmMcqqE!*~V*ke`_x}yDws3d~v(q7{CBf0XJis;bup%_9*qnn8Z zy8KnT)@a0OoChAQ7}?G>CRw_JE92<$Oqko$D3W#T1tw@MQPVY3_eL0&M8(U5CI;pdNpHMBIn;;%#h2p+_fAHhx(6 zSsDy<;O#BL`bfqfvhY?TqGTD#{QiR=Gl4X?d-H`syjg>lh}JA*u>~48*IejlC9vt# z6tGkdmrdKqX|8_&hzLS|)-Av#Zg(HYL}jNhN{?l{H(LDI*Y>%;3MP~|=3(bwo61)-iLx870`CTn&cC# z>Z_jVW428*5qh|VRx_ps;r!^xG`iau9k1mg8u-=P#dKJTE%e@)=|mx+Q&TRZ)ibZ= z0@mNVqYGvtccoWQRrUJ23fGpitV0lZzrP0l%V&O8sXbmt5&wg#E9%p>P1kB8<_+j> zb{UVgrmD+~96^1NnarTm!)w=(8A`{xy-J**#!^-SHy(mkf~quo;QGEFj`<0+y_{gP z<@74;1Dov1Uz5f!mbYQf)*f$@2j%bI8S5f?2eiI*Q8A(fv+6vYUz^({ALItMEitqC z7|%Ep!^KR*fX$y}^NAycc2A=5!-qi_`8B0+b+%WtOQ8?!QYQhMfmiO(jhbLRS&Kuf zUIryUM(_@9nBf+ieRF2Gbtb~@loOEykaxQ(Jpn$Ro^3D|w1N)#{O8?AX6`R9=6dqY zhB7;^uB;7sJ4V0<$vYjRf`Xv%vuDG-OEFo8$*qQlRw7#+m5KEt^=TxxSDN;VVVBZX zcC|toxL;mi#+)s4ANCStn54yZkEw7M(KmZ;TP>_zW!<%)I46?JcgA6QxVuf|-e`~+ zExe$~rki#o`J;ou=ENcqrZ55SVME~Nqxw)*P$Ng@lAuzDGP0kYx4LCwJ~$XYKf~k$ z$17^d;Dd~1V`N;=&Lv>9AxBeK?*0^gSA+ARmgx4z$|IUpvb=T;;^mr&37FwbCd_NXm5{&0Ri|ug)hS=h)`RLnC!FB>3|Rk5A0SZ#b;J z1bG5pL^u&_#`~r!61&V|d@MRCkm(cZLdu6m^h;Yf$1sRQwD)3!hc}(g4kv{djOcWL zf-;60!d03sJC8OzZQ2^L5ULMNUN-h=j@CdpH+_|(q_XX0gA{!_5CftQAP4^0DiqN2 zd7IoIY152uIqCsy>rqfW$)$0*-!-6j-Lo{K*-F%<=Z;?mqa#%Aaa-ADjy&1{nq%U` zGUtjPIcvQxlTr0z1ye0PhD?-SlF_gHnszVSuGQ1YqD=X6E^O0tC^?$wslGm%C^z@! zHEuFEKs5wx_gT!>#1oOB>?3&Hm%+(uPN#=PUkqBbj^jzcu{R?HWPL7e1^y0rew2tP zw$e(B4;$tX7g=*5W=pBji*OwZM5e(A7nB0{!~?UINxU0Kv#D{l?@ zGFsmUAKB^&;xLyj@19Af*W>RcPh(;jAv=$9&v_JXPQ6k~OHAHzKB_KZyP1 zu<71S2K|gNvb4K~7hB9Fw&{`3w%}a#ZBCAR_vH1lrc2ufNNt1hc>MlU_Y^Y_Fh zy>cCQMkmKwny3}@*MPx6;rSr&dgGCfrmX<5#?%{lH9*Lag>qaqHSx8(qvrB|hB~soU5t$tquVv;)pUynm6ZOCLIXG z+I~4+d0<^IL0%QuEdQI-Y-oxjp)SEFiJgdbQqWNEfi|DgifNGGfjBqZw0x&onOIZx zv2|^r^^NP|eFVU=r-hA8tR-fv`jvWuMPT>EMbG^uT?|X}w+s*vIV*TF{YcAls6j)U z)kv*B%6<;J5`X(l=I5q+0+Jeb7HT3cD%^_p;^c&iAOMdS8pecc* z`bPztD@|oUv|!V$qztDHL>SIwIlu`%@R=WwQa25!d3RM{;p;94hO!^h@clI(@7=7j3)=XNowj#>tD zpJqxz)1$O|&7>@_KIvoKWE{00&^$A$RNrm{HWXMRaEZnZ5wW%5>{+$ri=r)K;5unfjH~8 z+^{TEk(-blk;pT<6ddHyc&kk$0883wxiGx_ZkG7Sh~?XPep$ZT;?Qvt zE8aD>9=lBmz7rSs0D%KW?w3X@iAfDKa>Pf==PwvF8x(9f=h^#k>03Jawgtf6ue$)D z`vEL;^Df}P&yU{Y2c{jdY0PlwK$wgQm0z7Wno(_{=K_J+?;Y#;(EE-1bxi7T=#2>p zWv&Tmzr2@Q3(*%uv26(A0q{N3Y4*lUnRxDl0s<7gHK5Sv=cr3eZ5NQ?EpQ>78NOQ2 z5GB2;;JvtCt4~ywXlH4zO!TUR;cE9>I40#!cscn9b?^8YCRybt2Bt2lbIMP8=%!-G z4U`Yts=rgJb*c)KKYdlF_$uZ_l$QN$%i(KH$HufLeCUa4REw0bgvBX zUBpu75*wezioX-gJ3KIeb2`v$d~IX&SZJB)@U>4SoLpTv+g7tdbJ^mr6XIefgV%#m zH<289(uu){!j<`S8k5M8-awTn(a!#`_p~`-{O$Ws(U>>0;7Uns7dY~b;w#V~|LW(4 z{kkmUZV92yEAP!)8d=%hnMsR=vx@Eox%uoN&bvn{ux)i{EQMEKXb$RU+;T7!({bu&-*L% z3?;sKtG$Zp&xifI_Q`kP^IxjFMFAk_4!yViWm^96>|+_iNB-XE--XAnP*4}@6RE#c z{6FfXbnN24)O1Giza9HyF#kJae@e;!Bcd4gwtXdpyq7(imN>>hNsknj^5lO5{YCO1XR7?V%-{7C%s$8x&pN;P%Z4(^n&N`X|KyL6rX&#lK~^)EmAa0~*4Du}Vt z{%ED|St>aic$!^?RHg>p?z}pNW)RnOf#+{4bpiY{2h*mM9PN+)ea)$|DUs&`ihp*4 zsdLyTl$}&45TvE4M#(+(lFF_!&Jm(=)zz;fdFe_*X|iJ4SZ4G$j5FxX2{ z@QE8|sMDD2G-t|kN>oG&?(0!fD)AMMSvChp1#;?~|J#9r_A`vGf@NBf8#SAQqm}Ke@~iKcjuw{V&Ax5()&VKn*wNA#@M1{B05a+;QY66cYa4bKtQP zw?Zkr?bE6;y?-bImXfq5x?ZtQ)=8zQTnGLens`i|!qyp?Ui&w_E7y?FCa7BMVN z@ylz+lN8i2G*M`VXWXKW!Txheru|0$oseAt6uD9cQMbklOkt@UCS~GXOe#W56Nj|h z3IM8`pIVQRpdm(FQ@k}>%&dFT23HHeA6HJvnL@c$S6hM4SH`D~;kP2G(PKF-2j{Ny z-NNk0q)U%8#ErH|_Z9b%G1DzwDqiz`Y-C8^oJ>-x@cg5v9Tz=LUO6L3OYNSTCz0$a zGL^n;e=`Sxn@*lGjuJ&7T9HsbLWN1VcV6u_Dl$W3dH%>#D2dGD?f zisYMB0nwNRzSolX6u$OI&lT=bzJXdIz{q9)UTEAtja)P{p}VJ+0udis0Xmv)1(B@H z+ix|xef0p!OBjccmq*lYszSzDhWBK8wLTN(^>yb%``UJ1xf*(_3U< z;Q{l!RvFxWskK-wiv?dR%=D8vAsp;EGKkseAB^$E2amrXAM-m?9A~O$?}{9?;GHh_ z7#S=5nCYn|+Ga*2RrcYIAtqI^QxFVm%hL=}39+MBuQ){@k{EI3yD6;-A{u7yeO!f? znr-DLMs0|D;~Sh>F9g}X>NI($jmgIPQa(J>TK9JAokivNMuBMn;t+6>4>(b!Q*0jd zR_Fe3&xqyrCIszS{NY}jK=7hic^|vewnVWnnvwV=hLhMikQp0$;EuFLh>_Otd_+L% z%Nq3uORXnER~$_0eQU)t%XG$@l{ItvxkjT|UB*WB2lg=P7Ya+#sJh{%<6tM^x$vjs z%nMcvl-P`6lS}yY)N1q1`yuI_bKd5--c!jRj1#7VcWg9-@4au_*sCqBzk^W5$Kz!_ z_{d`ZrU!o0zL(D~q^`RT2!79*d79f&S1g$+9ksS74B3mIK4-TLTx|^TS%|o|o|p0^ zp)dWa%oToNF<2QlAA+!V!KSZiMECwWkJ7zmQJ7G#7yyJbcu|=$LyX;@)6oUK?VlU{ zG)j;WT?i=DOfcXBE}K|H#Y`Oi)Pw(|j|+J=tC^ z%|*om*sZls{<=$RA&{@0@EU7CKZ|HGlRLa3v@IX&psWHtWma{{7LH2x z;L0@^m3d$K>9Z6hzkm4c6B?5&71q)dtt?(MyzHP-+L9(yb|6_TMARY`x-{BhVnOAq z^T|}>rb8o)Sz*+rZb{n>dBH(XW#xYTi_*;8KMa%5H$1Cf$)BR{3;9!y<{mztbVt{u z?f@4hRibc^51%CHbsZKw-ez&In8CG_A1k5hG|OJ+G}~=alE(|1Omt56xQCVNmJdCd zp;^fV3s6!QxwQ4B!O(aw2y6#}0i^G3ar44#3W3sYb-HvJ8Ot%fxgy;7JX+dD?^1If z`aBQr61GoQXtEu%KZqkGOhjzw9ivIS{kocAWW(lr3oRRc?2GA!hW0~u7FQ2Q#2ILS z9%D*wAeFn`kBq#(Y^M*cl6UbQ)WetxHPE2eEfS-dR6`jonXNfH?D4B#n_y^EzzlW8^u2hu@0I`p=i zJ^ucP6Mp?I{oZj?p2ND+W2vaMwP0*bZ@$#QGecKC+au!x23kW=%rK?oj+w*z_+^&z zlx6+J19uy^z|BPwj63Ywh%6Ib?I%^TQrlM~fXKYjc)405pYbW%Q-}FdF^G3br)dt# zx;1dOMih2K3t7f1pVuoR{t1!W*h|kV+{pkF9~obI z^7}tp6tna1n`AB#Z{;7P3>OFvS_r{f3(c{KI&Fo|K5wB#Am3+scnbs15OY4hJW!ordCE$ z=Hdj?rnE-~e{qSaIyUt~Hn_HU$vL&4GVSbU^MJKLFqe9&rm4Z+t&LhOy8$uabTh)D z%k(6m-Xz2+EF=TeiQ#@m^J&G|lEca{lGq6kQ<@HZN{ZiGW#lCn zM8;iD`RXW02Xqtx*PNT|z0YphWqiKJ+p9JiX)mXy)^kJaTu^O$piTa0Ed{yXoEa*a zv;RXcpUI|qG*2GSVtcN+a17PK`^{wkLbYsdlTuj(=s!$*Q&st)>0w3A{G<=#R?{m2 zX*GwRz5AUq=!gA(=h&U0(U`NJG`RoqKKZ^OJ-Yk&i}8t*4B3Ak5C7526P1+Z{b{S< zXBPTDcd(1+F8eXueyUvbZ|3=XKE-us-xh~|9A^LCqRU~_cQZN%Ezf@I&OdF<_SNIB zWtq)gO#YO-A637+LRo>rqDIgDr%^>2m}aVL17YK-V}CUBr+enV-K603|0iaXNb3t= z)(5pH!bo=9*X@4NuwGckJ_~ytf zsV`p-O;ZBiV=D)p7OHI|0mJA;iPY^PqWl%=aM>GU?V*R8&1ITZQ`H@hOuYZT2tw`Y z>%E<0f}yizjZY4XV6)2SoBh_eZ>QamHu0SG2Dmzm{ah25sVKs8^|5B`u@CW-L<>%= zutp>sQR^`jUy*`im(}HWK{)vbkaTQhk9E%Jq`b8;KVsysM_fxpdFBN_4rqB>7-7eA@E8Ss%Yi7V}*ty=seQS5uzZ{ z#_@S&SX-W+Gh%ufqlT(N_=+ya#hOJ&fwtm(#Q)dccSbdtcI}Rc0s|_7h@upgj(|h2 z5-HMqGjx$6T}tRxMM0_{LrOYgn6?+NJ4!0WfxS?jE`&Yzcm z;VF0B<+|?u?A^lG)TXNoxo4@8(8-x*^Xa3xrvSI|ghEZbV`c4+a&mu-IF!nj#$t&`>ISIdFz+ZYNwwLE5nYQ+6C6|QD8wQ-_% zgRPkP^kvgJ3MnA_(!~~4yYV{Xqf>z-X*i!`gAk)6s!LQyH9Fea)zowE}=-niUlS)jE1nd`ridMI>z)Afz?AE#>lQ8yq(FtA0UO0nBpZq*1}FG_}e z|A1_kDS_VGf(vyWn%!{bk;`^v^)`0F8s1R~!2S^m9+Ms)J5bo}mbKx?{2+&O#?1Owk#`d!r#sa8uuFjtUI} z+jKTE6FIEsZ%pc#7iX1fg{7<%F$nh5>jLEt&sHdXJbA^E8}s4@vxA*i;IeX*%yL8;9pd0mjmj$-Oh$dc&G}f4$SJyerH% zv@oY=-0NItZXV}c*XP*J-m@3zYGD1EgG~nfXjYcTs=292V|~)>obTPaE;`=Rl|^jY zExMQ3iubGT;=C6FN>zfMlh_@ZAo36bA9~LQ)7ARWKM2%sm_%DbU%5?J|L`3)>yA^W zqvhs|X69@kta>ncJrY)>39HH0Xj#6_gu7}T%oVM}(@4t>P3P+5HYylPeILxV*BPE& zeSze|R8E?Mw{fA}F>@QCp;{~by)zx9FAt3_pura3#&vNFKFE!}7E-)c>AiVYW%us+o^of3IB47^tHzA(cVJ6ofUJv!c9atwrsVpqufHENS265JSkiwq?~0k zb&FS9D>7y4%$9Z8$W@oKkfN&>4?n{HgP@%Yw0s*U8?;Ftbn28BHufnxf0ElGTtgR% z?Smq7W3!2hru1P&)9TsPO@1xvd)uY5&pbQR^$M#UxE@5rRWp}2u9=rbeawh!>&-tK zBai7K39w;8u`G=XzRkszwA&dYS$3asG2gS~CZ&BmB@noh9=5We@V$$zN#uu?P+hx) zS8G*Z^X|M2yrNo?bVel(Y{y&VyZzX3k={txt2c*#CMAsig_emWLpKwj&R~giW$Bc` z_jap(*UCL24sgo0T*9r;4<6NQUinkVKVBBTbU1V^)LBgYl3-r;`(|sG>~0UFqzEhe z6sEyJ)yzz>IZvB>=rNR>}D)Sg+VK zFqY6~kpjX+cvM0NL`D)R7V_@XO)bLr+I2u-JPld4Cb(^lw|a$!GJ-wQ|6_h9bZWu4 z30nGv8H=3F$)ih)PyJq;tg_{MV{8B62Us<#wCmu9Jj=nT!!5OH&A^qf%rR#l*v9nF zwT|()wqoiOjVo`gtxI(8QjR*A+n~Fo=eqsm*4(D~rsB+-pKQp)3l9u*F{>}wx~q>M zzmSY7L}FL5F{YY<~vX=vc8Xj(E$ zD0Ug|Y6f(ZUlE+}sCHQzL~@cS!2RJK9j)A(DrkX?Ooj$G!I*UY_24@r@WH*-xSN~# zYdZ<5hN}6U5_jj+zvOztC7eKmv)#El=N#Ce&N8;U{^W-xGC*3SPudDI>FAzHF~kx| zYKr+RAbn~RX*jguT~jy#UQ2{>#)dtXC@J=gxH!@mk(eXXlKxGzz_>TUPzN#w_9;Re z%v&jtMNyD`cI4>vt{A|$D4wGgprWc^G&hSsw}x;y*S}x3U^{3bq0iXQicJe|_w)_O z8tlZ5gyzVP2Z_vyI`%VuqUcg{lwNSyH=t_eEB7r(57m6v6iqAPq60A;*L7Nf_gOZF#|aj0g2u!E`ES$Na)5^+o_iuv|YuOaBBo7Hg5zq ze%GqgTlHN@(iO;{ItqRn;<4a-mmli4KVM33?FD|u!!ph)(U#zbid(CpKPwYRa_`8| zCBH`SDapLye!Vn+qt%&*qW08!%iX{S-*#&se!QI5sR%K)+OX_h3v)(3sIKr0@Gh)V zvcAoPDo^FHYNe?j;pE?-)G}aABOXv<>f?AEd zwA)6vp{l<B`6$N93&olzPIeZ|H^ zot`p}8r3!NdrM*QY3FRNt>$}$tnE7*bDn9-(N?c8tQEvSW^}V1Z3+Y&xZKXG!1!b( zJUpMue?to`NZqp1?3uDKZ#AUpkevY497bPA$M`RJQ(TG?)tB)02_G1A9H{+EIl#G2 z)~{^VRuNVKlF;WxgH_>olrWeicNYrAyc6_v{b3J9Y zkRmIhD@UhTGFb&^QnMF-xFgZ=Q0#-x4xfq_*c7pK%P%?Y-Eyiz zUdGJWgoSW$abEnR@qkm%wP$WvjzOb_D_@;P7AJ7t-fskUox%v*1W8jWUUFD-)fTDJ zDf2*WUNG047D`rd zL!5}vlYeq+^d1Hsjo8 z(Y6=#^pKaz8?rI4g}lfw?Ep?}z!l058|Qqw&A+cq-AZ($D-jPrLQp2Dq<4Ubr~|_9 z2W8|z4amLZ#l*|n#?`qh&bb!LWw*z|7rY31lFjiH+rQx$IVC~C<^cz9o9PeP5Qd9a z?h(wBjg1ox7T6N5!Sha_MQM25kRT?wLXCv@r)PQ$gar&!F?a}64HN;OL^_3t# zIQ=7($VWfr`uNLBH~s6x2@L5XxO5CPRWL%RW_ZqXLgu1@XZ2?fU-pn{a%#%)?)P#v z?UbI*4A!POI?Vd%FvoB*xy3`gN`8)@-N`rfY=~@Fz=0FJcIe1O5QB7bN!};aFfY%lJ1r06D^h{fl}KdHbOY{HeQQ`U|!$g!oTjsDhC9S z0tRuDocuTI>klddApL)z{O=6?AMb<$&LIUkHC0trTeqi^hY0%dWObjM}?R7`=-a? zHV*ppl;{XD5jwlol=!b?Lr(}PzOX5QfxXVqG^aDXnuXUNV`wb8z30rIM@sA>)lcow zy45r{-qs&<{%qJ$ZclO|f?fWLM9<`?$%Bgg_Zk^(`mRiHbQFBQds6*LvDKNwq_X6H z1wbC7!yK6auRQNXbnAbxWPq5Fr2)$CU03RF#jy;}&FOxTxBO301wN_J0FK<$tTm`l zb_UQLAOpN-n?0P$`!7BFck@zg0ISE!pY^-sDhzpeRuBE80eBPNbs|ID zkpa*J7U+ky(9~}ex~Sp#Kn3OLqiCk%iYJHz-~%1`6I>4IljGMwCaieVk;V-9t?7sX zX0MD!MdUcee>BoNZ-5TH(1@-8;%y7gRON;tYS7E%V_sbyIOYYZ>sPa+B)5Oe@h!RD zXTNl$mj6+R#F_w~`quxFEMRy0gowOo_d9j$#B~NMW!$)D4(zrS(6m0V z?R>+YT21{DTJ-5oOIqEvPvdro>#2F`qH747wblH)qkH8(qCQI=_SQS;ZID&WUc?19 zTRaEWwXpBPli3Cr*&LhLMkR%3HO*d_SM)+Xq+A##+Q|01^<{A%H!O}b(BLKGY(Ji` zl)MseZ{22tt_Nh2f4dGvlw6}ikd7wJ8*~P5t7yaX=asqmwV>GpjFlRiXDnX9X0DEK7f;El{m2_sALwN%9+8Ay=6=iIAzp!L&w`O31Ya2&Lzp^gR!-Z$WI8az%Ii^#yTHctS zUdYsSTzY88*BH^9_zsdy&DO$MEQpyl(~kO>2uovhejqg_?*m!=IB%U3%LU8BEW?_O ztCga6;rZDW$-FGBQ?VVzCOtgjFlf3n)8J%TzpC&nIwM z85Yp65%N8Smx%}+FD{b{ZPv1)P$*wX>L4Y}5LqG&hZya}-MMCI-gJHrF^wU0*aNLJ zZr+U`o>!C;UP(_|f9e`zq>&=etb$C+fI{2U5C_Shc5G4XF^MsmD=Y~9kuhu$56eAt zM)*uGDONd($FPw4b{9gphgp7Nq4D``e#5HN=~g~YAN#oUV%^6RZcsFw=Uxluws!lb z8JoB&w-PIQ{`8pM>UPflyJfoLCcBRK&Ppi#X+m;h)jIKe&M23H=068l)0#;I`5q2y zvdh_Gwr19ijFov{T52X8Mg#Zl`d8D=56WSlZt)`5!pw22I~o%jjrvrUF7vkV3Z>xx zh2*Mj2gi$Of80pm`O}g^q8iLp={jYQt(eki5f8SqkXO=eeIAfr4w+1kd!wTz)I*1M zm}<{$w$^mWqLH1jx@Z4U#ShPL;kIcf{A>`l8YQYp33ixQf*6~o`WjnrC!J@g7^$HIcwm+wb})3du-AohMx4ccb@j=y3eb=KPH zg;&_-k^1-yn4(1W@;>fv=?QaB7!8M?HT+B8avkHcaKj4t+-T3aWLC^0TY{%>m<9=X ztD?X)X+miuTVAqI3hUr=EsATPDq>t;XL_76h0Tguxv>{7!3JKi6V0Ge4X_tWZYxRu z$xBVo#_v4!EnrZNV_WBqjI)UC(a|=_!d4_Www{U$G46sX7Ak*sddj} zmX|{vIUZs7re@f+b>gN>gFE>+4H2SVy+yd32m#+K9iF9vn>}&j(|1(qpG3^Sgk#@` zqf#^Tj;JT*m66+4&41N4A+;kdrqoM)NV3}O7rFOaIC(Wro1Yf-&hJluGQelN+@ykp zi!gy@6aJKnAg$8>;2B5}5o6s*zrnUMVRMP~YB&8hE(PPe=M)Bi%;mwUsq6!-*qOVQ z*#_`UN-rHI2Wy2=X^b1;={%x7;U)CZEZc>);;#Bhx=`mJ`Pd%aFGG;|udbS<$~>IT zCb8e`7mp|PyYdjw#P_@XI}HgFpZnYFYAIu_><%i_=cih{b&E4MYfu=aA*H`clzSxg2B^S%%#8A#n{S>?5yN&RoAJI^%Ahd1`h1Kg9tC! zqVE}=mmdCT$86D}^5fBooNi^h{$7dwHlG2)$=xiVfIY!l!-%<;&nEW3*L2+Iu`}{C zr}8VMLd)%OGjp@J9h*45_8Lm;7=Li#i&wWi{Z=LrlW=i!Zh9rmdvndvtnU1|My~9N z<(#`XYx`w~4vm24Z9~K5F;>h5#r*vmQZMbw2Y=9|STQ3j=fwA1#Rl|Q(B}3P2kVNw zqgleKb{R}tiyw8#=;Qh<_b3v_@iDx~1_XCOl}8qO{yA3Nz&+S2Lg-&{&#j@wCs zOXQAxU36SFh7`LBm^{I?db9|haB*t?XyWy~1OO;G!gQ+cRB-&b()m7mWbRW**zIfC zag@6ogxB~LuVGp{P$LbVej}IdxN35qTIwLa8FW}hKT?o)PPB~^whS8p^GjjF-&nWI zhs2k7hi3^#hC1~}GcKdF3L)Lsh9(pQn~Rpd+&bMyC;{$VrqG5=zITrH?M+t}65e3t zHCN_hH!E1HcxL(P%)*?F*3~VJRg2-r+CCdGDgy<<CEG}THCN7}HVl(_W;v;8Vtd@W=O^O5OGUU$)GPty?A3pS*mA2>VvE5i@Z8FH~ zfs#*?*8U`C%%d4TmKH7`ge~Zzm>Nw?SN!>t?iB|4guS14TQN7W7pJa#_@SBO`a3i z_icGR4<+pf&Tk0GBX4?yzcTBM5M96L%tBZCXEWY0j9?vd;(#RQ#MQs!7=4-DA+cG7qtE=u&)99rJKcfF@@tts=d6dOo<$=48%AMfC#w1Xm zDe>ieJ=q_&k6*;-{oChePytk2!&F@dC!s00j=x6j!2HW4fPLZI`J-vn5!_5mUv`~u zH&Gc}CaL*3-$KsDy~Br&wL3?+rN};+*7n39_#{B1U=%+A_yZu0@)cpix#>j zVZj$%_<%;p6wk8!cu?mX`KV2C{TZ!S;;%aFrwBh^1g0dM&io<>#F;zSn)a94PsC|Q zu->8kzual$Y()mOUVe6jbi)33Z2C9I`n4J$13Y6eGo0r9>p%Y%wPE5&F;dxxkH5R- z$ce{|FQKi!Lq5-M0T-`}H=khe4x6tp#-k!SBaz=OY&dZ7$tvsblCqLx@et0_ed@RQ zZvO$`{~hEpfPc7n|BqL)E}HrY6JusZ#zd2#H0jZH5qs}1F442{PtAAo@IU;NpQp$I ze23b7PXrB2Kk^9DGE5Wx2Qea-7!8sQA z3Gd`^pjQ+Ct@U3X=Kli^12Q#OdjT+9b&I6#_CQUuF9^+2F}hCgQaXji{6Uj` zA5ULDETuP8LtqqpLj>(Kk$xUtb7Q0HcAALK$Ij;aHcx4^oeHu_q0sQe*A&rS5tIFR$Kbez zRc8dU-Lle00*0`JTOxGNh-UBys2SVq;x>t#=dPVYtSbj*+X@%Ihx1_AYroO1Y4GBA7}TSD~qQo6VNTo?5lk&_B) zQN2`D1?0bY&H6l`EXOZKlfm&a)fW)?;jTDM+?T8M~|~e=}kRW;_F4f9E3ONznm117ZX&%1FWm zez!dTH%(GJx~cFK_Oo-_Dyvcq2K#_9#`(LnoA+LQfPXTXcV9pdNyb#fPlwm%(A0!a`XUYy%r zs&dJg>D}Luc#K8Ozy1u8I5E0^!fwes3HryjOI2qQxT+SD20Q%@+F{$32P?I!7*^x_ zl6kI(sridy#~TKD;|~to9Mg1(rISE5DTqCFDpcaAG3@=s!A&f<)_v%$UJAGM&ErP{ zKkg6d)^2O}t(psoN-o<96|~#0MSQ(*bX(flW6+9tD(W zivVI079$C!IxkxTX~v3MjpiyrE9+}C#^)$`Mw6bcNAf#eIX=j`XM}PI;&PLpcH|Sq zyMt~4^3F=wQOJiqc;fGOFdZaf2QR%~(`jUU)2;z0GhO-CnUyB>{4r5AF(X}7P3YOU z9l;f;1_pc7&8!W0uD*YRmn%9M27SM^kck8WtZPk%uHUla-k9-$s-a8CrRjd^6}mK@ zpQSGtrq39VkW5ca1#b(H911kU-7{wu5_-H6dz_=iWedcr>Nb$?W>8T0;zI|y(Pcky zLmgC{`2(H%Ia^ZSxmx?djRPK-XXzOXk>|Mq3+xVeiP3*pH(=rdx~Vo-d?YUnP(Prb z!PSEqgk5W~peQ6AWy1AqlhwkE zqi;bS9BN!225WFkA8HS_K?`#wLri71i>|+-dH+@=_!+p#VG^yep})Ow!B^sYMgL`d uLsd9e+aDZ@12yMY?|wkloZntMI8|lsEH$j%W%38`CoiKSohNDX^nU=LsIAig literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/healthcare/vitals_2.png b/erpnext/docs/assets/img/healthcare/vitals_2.png new file mode 100755 index 0000000000000000000000000000000000000000..3e2129ae35829f1994aaf1939ece695bd3700219 GIT binary patch literal 27743 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 HfzST{1r4Yz literal 0 HcmV?d00001 diff --git a/erpnext/docs/user/manual/en/healthcare/._.DS_Store b/erpnext/docs/user/manual/en/healthcare/._.DS_Store new file mode 100755 index 0000000000000000000000000000000000000000..ed70b669b54ac83288363a8522c2f94462a3573a GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIk*Y|peR=07!nf1 zaEEyzL Healthcare > Patient Appointment > New Patient Appointment + +You can book appointments for a registered Patient by searching and selecting the Patient field. You can search the Patient by Patient ID, Name, Email or Mobile number. You can also register a new Patient from the Appointment screen by selecting "Create a new patient" in the Patient field. + +ERPNext Healthcare + +If you have a front desk executive to manage your appointments, you can configure a user role to have access to Patient Appointment so that she can do the bookings by selecting the Physician whom the Patient wish to consult and the date for booking. "Check Availability" button will pop up all the available time slots with status indicators for the date. She can select a time slot and "Book" the Appointment for the Patient. + +ERPNext Healthcare + +After Booking, the scheduled time of the Appointment and duration will be updated and seved in the document. + +ERPNext Healthcare + +You can configure ERPNext to send an SMS alert to the Patient about the booking confirmation or a reminder on the day of Appointment by doing necessary configurations in - + +> Healthcare > Healthcare Settings > Out Patient SMS Alerts + +The screen also allows the executive to select a Referring Physician so that you can track the source the appointment. + +### Actions + * Billing: If you collect the consultation fee while booking the Appointment itself you can do so by using the "Create > Invoice" button. This will take you to the ERPNext Accounts Sales Invoice screen. + + * Vital Signs: "Create > Vital Signs" button will take you to the new Vital Signs screen to record the vitals of the Patient. + + * Consultation: From the Appointment screen you can directly create a Consultation to record the details of patient encounter. + + * View Patient Medical Record. + +> Note: User should have privileges (User Role) to view the buttons + +A Patient can also book an appointment with a Physician by checking the Physician's availability directly through the **ERPNext Portal**. + +{next} diff --git a/erpnext/docs/user/manual/en/healthcare/consultation.md b/erpnext/docs/user/manual/en/healthcare/consultation.md new file mode 100755 index 0000000000..a98713bcb5 --- /dev/null +++ b/erpnext/docs/user/manual/en/healthcare/consultation.md @@ -0,0 +1,28 @@ +# Consultation +ERPNext Healthcare allows you to record Patient encounters through the Consultation document. You can create a Consultation based on a previously booked Appointment or directly by creating a new Consultation +>Healthcare > Consultation > Consultation + +If you are creating the Consultation document from an Appointment, Patient and other related data will automatically be populated else you can search the Patient by name, email phone number etc. The Patient Details section will list the latest Vital Signs record of the patient and other information captured in the Patient screen. + +ERPNext Healthcare + +### Assessment + +Encounter Impression section allows you to select (or create new) Complaints and your assessment based on the presented complaints. You can opt to include the captured data in Consultation print by selecting the "In Print" flag + +ERPNext Healthcare + +### Prescriptions + +You can prescribe medicines in the Drug Prescription section by selecting the drug codes (Stock Item) and appropriate dosages. If you are not managing Stock and Items are not configured, you can simply enter the Medicine name and strength in the Strength field which will printed. + +Prescribing a laboratory investigation is similar and if you have Lab Tests configured, you can select from the list. Or key in the Lab Test name to be printed as part of the Prescription. + +ERPNext Healthcare + +### Medical Coding +You can also attach one or more Medical Codes to designate the Diagnosis in the Medical Coding Section. You will have to select the Medical Code Standard you wish to encode the diagnosis and then select the Code by searching the Code itself or the Code Description. + +ERPNext Healthcare + +{next} diff --git a/erpnext/docs/user/manual/en/healthcare/index.md b/erpnext/docs/user/manual/en/healthcare/index.md new file mode 100755 index 0000000000..85e3b6fec8 --- /dev/null +++ b/erpnext/docs/user/manual/en/healthcare/index.md @@ -0,0 +1,13 @@ +# Healthcare + +ERPNext Healthcare helps you manage your Clinic or Practice efficiently by scheduling **Appointments** and recording **Patient Encounters** (Consultations). You can easily pull out a **Patient's Health Record** anytime to review all the history of treatments assisting you in providing effective, high quality care. + +ERPNext Healthcare + +Patients can view various documents relevant to them and book Appointments via the **ERPNext Portal**. The healthcare module is integrated with **Accounts** and **Human Resources** modules, helping you in **Billing**, **Payroll Management** etc. and benefit from other rich features of ERPNext. You can configure the **Selling** and **Stock** modules manage your Pharmacy. + +ERPNext Healthcare also includes features for effectively managing the functions of an associated **Laboratory** by helping you record **Sample Collection**, emailing and printing **Lab Test** results etc. ERPNext Healthcare allows you to upload **Medical Code Standards** like **ICD10** and attach to Consultations. + +### Topics + +{index} diff --git a/erpnext/docs/user/manual/en/healthcare/index.txt b/erpnext/docs/user/manual/en/healthcare/index.txt new file mode 100755 index 0000000000..471d91d5c9 --- /dev/null +++ b/erpnext/docs/user/manual/en/healthcare/index.txt @@ -0,0 +1,12 @@ +patient +appointment +vital_signs +consultation +medical_record +sample_collection +lab_test +invoicing +physician +physician_schedule +medical_codes +setup diff --git a/erpnext/docs/user/manual/en/healthcare/invoicing.md b/erpnext/docs/user/manual/en/healthcare/invoicing.md new file mode 100755 index 0000000000..bc9dead49f --- /dev/null +++ b/erpnext/docs/user/manual/en/healthcare/invoicing.md @@ -0,0 +1,8 @@ +# Invoicing +Billing is an integral part of any undertaking and ERPNext Healthcare achieves this by making use of the ERPNext Accounts module. + +> Note: All transactions of a Patient is booked against the Customer which it is linked to. + +All ERPNext Healthcare documents which require Invoicing will have buttons which would take you to the Sales Invoice with the Items configured for the service. You can then proceed by following the ERPNExt Accounts module workflows. Please note that your User account should have appropriate privileges to access the Accounts documents. + +{next} diff --git a/erpnext/docs/user/manual/en/healthcare/lab_test.md b/erpnext/docs/user/manual/en/healthcare/lab_test.md new file mode 100755 index 0000000000..bdf0cfcee3 --- /dev/null +++ b/erpnext/docs/user/manual/en/healthcare/lab_test.md @@ -0,0 +1,22 @@ +# Lab Test + +ERPNext Healthcare allows you to manage a clinical laboratory efficiently by allowing you to enter Lab Tests and print or email test results, manage samples collected, create Invoice etc. ERPNext Healthcare comes pre-packed with some sample tests, you can reconfigure Lab Test Templates for each Test and its result format or crate new ones. You can do this in +>Healthcare > Setup > Lab Text Templates + +Once you have all necessary Lab Test Templates configured, you can start creating Lab Tests by selecting a Test Template every time you create a Test. To create a new Lab Test +>Healthcare > Laboratory > Lab Test > New Lab Test + +ERPNext Healthcare + +You can record the test results in the Lab Test document as the results gets ready. + +ERPNext Healthcare + +> Note: To create Sample Collection documents for every Lab Test, check "Manage Sample Collection" flag in Healthcare Settings and select Sample in the Lab Test Template + +In many Laboratories, approval of Lab Tests is a must before printing and submitting the document. ERPNext Healthcare allows you to create Users with Role "Lab Test Approver" for this. You will also have to enable this in +>Healthcare Settings > Laboratory Settings > Require Lab Test Approval + +This will ensure that emailing or printing of Lab Tests can only be done after Approval of the Lab Test by the Lab Test Approver. + +{next} diff --git a/erpnext/docs/user/manual/en/healthcare/medical_codes.md b/erpnext/docs/user/manual/en/healthcare/medical_codes.md new file mode 100755 index 0000000000..c0997b1ebe --- /dev/null +++ b/erpnext/docs/user/manual/en/healthcare/medical_codes.md @@ -0,0 +1,9 @@ +# Medical Code Standards +Medical Coding are in many countries required for regulatory compliance and many of the Medical Insurance companies do that pricing based on Medical Code standards. ERPNext Healthcare offers support, however limited, to encode diagnosis and assessments recorded as part of Consultation. This can be done if you configure the Medical Code Standard and related Medical Codes - this is easily done by data import as the code data tends to be quite large. You can create as many Medical Code Standards you wish +> Healthcare > Masters > Medical Code Standard + +Medical Code Standard document is used to name the Code Standard and act as a container for all the medical codes which are standardized under it. Medical Codes and descriptions can then be imported to the Medical Code document, after ensuring that you set the Medical Code Standard field to the appropriate Standard name. + +ERPNext Healthcare + +{next} diff --git a/erpnext/docs/user/manual/en/healthcare/medical_record.md b/erpnext/docs/user/manual/en/healthcare/medical_record.md new file mode 100755 index 0000000000..9d2697d600 --- /dev/null +++ b/erpnext/docs/user/manual/en/healthcare/medical_record.md @@ -0,0 +1,13 @@ +# Patient Medical Record +The maintenance of complete and accurate medical records is a requirement of healthcare providers and is critical in rendering effective, high quality care. ERPNext Healthcare allows you to draw up the treatment history of a Patient anytime by merely selecting the Patient. "Medical Record" button is available in various screens so that you can easily switch to the Medical Record page to view the patient history. + +Medical Record automatically keeps track of all Consultations, recorded Vital Signs, Lab Investigations etc. Complaints, Diagnosis etc. captured as part of consultation are easily viewable but to look at the details of other documents, links are provided. + +ERPNext Healthcare + +##### Adding notes manually to Medical Record +In the Patient screen Create > Medical Record will allow you to record notes to the Medical Record manually. You can also attach files when doing this, and the Medical Record will display links to the attached file along side the notes. Create > Medical Record button is also made available in the Consultation screen + +ERPNext Healthcare + +{next} diff --git a/erpnext/docs/user/manual/en/healthcare/patient.md b/erpnext/docs/user/manual/en/healthcare/patient.md new file mode 100755 index 0000000000..ed6810e88f --- /dev/null +++ b/erpnext/docs/user/manual/en/healthcare/patient.md @@ -0,0 +1,43 @@ +# Patient + +In ERPNext Healthcare, the Patient document corresponds any individual who is the recipient of healthcare services you provide. For every ERPNext Healthcare document, it is important to have a Patient associated with it. You can create a new Patient from +> Healthcare > Masters > Patient > New Patient + +ERPNext Healthcare + +The Patient document holds most details that are required to identify and qualify a patient. You can enter as much information available while creating the Patient. All information in the patient document is presented on the Consultation screen for easy lookup and you can always update this information. Other data like observations, vital signs etc. are not part of the Patient document. These could be recorded during patient encounters and will be available as part of the Patient Medical Record. + +ERPNext Healthcare + +### Patient as a Customer + +ERPNext Accounts makes use of "Customer" document for booking all transactions. So, you may want to associate every Patient to be associated with a Customer in ERPNext. By default, ERPNext Healthcare creates a Customer alongside a Patient and links to it - every transaction against a Patient is booked against the associated Customer. If, for some reason you do not intend to use the ERPNext Accounts module you can turn this behavior off by unchecking this flag +>Healthcare > Setup > Healthcare Settings > Manage Customer + +In many cases, you may want to associate multiple Patients to a single Customer against whom you want to book the transactions. For instance, a Veterinarian would require the care services provided to different pets of an individual invoiced against a single Customer. + +ERPNext Healthcare + +The Patient Relation section of the Patient allows you to select how a Patient is related to another Patient in the system. This is optional, but will be quite handy if you want to use ERPNext in a fertility clinic, for example. + +### Registration Fee +Many clinical facilities collect a registration fee during Registration. You can turn this feature on and set the registration fee amount by checking this flag +> Healthcare > Setup > Healthcare Settings > Collect Fee for Patient Registration + +If you have this enabled, all new Patients you create will by default be in Disabled mode and will be enabled only after Invoicing the Registration Fee. To create Invoice and record the payment receipt, you can use the "Invoice Patient Registration" button in the Patient document. + +> Note: For all ERPNext Healthcare documents, "Disabled" Patients are filtered out. + +### Grant access to Patient Portal +ERPNext Healthcare allows you to create a portal user associated with a Patient by simply entering the user email id. A welcome email will be sent to the Patient email address to "Complete" registration. + +### Actions +From the Patient document, the following links are enabled + +* Vital Signs: "Create > Vital Signs" button will take you to the new Vital Signs screen to record the vitals of the Patient. + +* View Patient Medical Record. + +* Consultation: You can directly create a new Consultation to record the details of patient encounter. + +> Note: User should have privileges (User Role) to view the buttons diff --git a/erpnext/docs/user/manual/en/healthcare/physician.md b/erpnext/docs/user/manual/en/healthcare/physician.md new file mode 100755 index 0000000000..7b7995bcd9 --- /dev/null +++ b/erpnext/docs/user/manual/en/healthcare/physician.md @@ -0,0 +1,18 @@ +# Physician +ERPNext Healthcare allows you to create multiple physicians and optionally link to a User with appropriate Roles. You can create a Physician here - +>Healthcare > Masters > Physician + +Linking a User to the Physician makes the system populate the Physician field in all documents to the Physician associated with the logged in User. +>Note: You should also relate the User to an Employee to utilize the various features of Human Resources module. + +ERPNext Healthcare + +### Scheduling and Availability +Each Physician can have a "Physician Schedule" and a "Time per Appointment" on the basis of which, the scheduler will book Appointments. Also, you can select appropriate Income Accounts for a Physician to book all Consultation charges into separate accounts. + +ERPNext Healthcare + +### Referring Physicians +You may also want to manage a list of Doctors who refers Patients to your facility. You can manage such data in the Physician document itself by leaving out the User link. + +{next} diff --git a/erpnext/docs/user/manual/en/healthcare/physician_schedule.md b/erpnext/docs/user/manual/en/healthcare/physician_schedule.md new file mode 100755 index 0000000000..0da7896014 --- /dev/null +++ b/erpnext/docs/user/manual/en/healthcare/physician_schedule.md @@ -0,0 +1,13 @@ +# Physician Schedule +Physician Schedule will help you to configure the availability and work hours of Physicians. You can then select an applicable schedule for each Physician. + +You can create Physician Schedule from - +> Healthcare > Masters > Physician Schedule + +ERPNext Healthcare + +After naming the schedule you can use the "Add Time Slots" button to create time slots for each day of the week. These time slots will then be displayed while checking the availability of a Physician when booking an Appointment. + +ERPNext Healthcare + +{next} diff --git a/erpnext/docs/user/manual/en/healthcare/sample_collection.md b/erpnext/docs/user/manual/en/healthcare/sample_collection.md new file mode 100755 index 0000000000..3473dafd10 --- /dev/null +++ b/erpnext/docs/user/manual/en/healthcare/sample_collection.md @@ -0,0 +1,13 @@ +# Sample Collection +It's critical for a Laboratory to manage collected samples and you may want to ID the sample, print stickers etc. ERPNext Healthcare "Sample Collection" document helps you to easily manage the sample collection process by creating a sample collection document for every Lab Test automatically. You will have to turn on the flag in Healthcare Settings to enable this feature. +> Healthcare Settings > Laboratory Settings > Manage Sample Collection + +ERPNext Healthcare + +> Note: You will have to select a Sample in the Lab Test Template for the system to automatically create a Sample Collection document + +You will have to enter the sample collected date and time to Submit the document signaling that the sample is collected. + +Printing on sample identification tags is also possible. By default a sample sticker print template is made available, but you can always create a custom Print Format by using "Customize" button in the print preview. + +{next} diff --git a/erpnext/docs/user/manual/en/healthcare/setup/__init__.py b/erpnext/docs/user/manual/en/healthcare/setup/__init__.py new file mode 100755 index 0000000000..e69de29bb2 diff --git a/erpnext/docs/user/manual/en/healthcare/setup/index.md b/erpnext/docs/user/manual/en/healthcare/setup/index.md new file mode 100755 index 0000000000..721f521eda --- /dev/null +++ b/erpnext/docs/user/manual/en/healthcare/setup/index.md @@ -0,0 +1,7 @@ +# Setup + +Once you setup ERPNext (Company, Chart Of Accounts etc.), you can start with setting up your domain. To setup Healthcare module, User should have Healthcare Admin Role enabled. You can configure each of the departments as detailed in the Topics below. + +### Topics + +{index} diff --git a/erpnext/docs/user/manual/en/healthcare/setup/index.txt b/erpnext/docs/user/manual/en/healthcare/setup/index.txt new file mode 100755 index 0000000000..f2423811ec --- /dev/null +++ b/erpnext/docs/user/manual/en/healthcare/setup/index.txt @@ -0,0 +1,3 @@ +Setting up Practice Management +Setting up Laboratory +Setting up Pharmacy (Stock) diff --git a/erpnext/docs/user/manual/en/healthcare/setup/setup_laboratory.md b/erpnext/docs/user/manual/en/healthcare/setup/setup_laboratory.md new file mode 100755 index 0000000000..93e53b8a8e --- /dev/null +++ b/erpnext/docs/user/manual/en/healthcare/setup/setup_laboratory.md @@ -0,0 +1,67 @@ +# Laboratory + +If you wish to use features of Laboratory, you can create Users with "Laboratory User". Lab Tests, Sample Collection etc. are only visible to users with this Role enabled. + +### Laboratory Settings +> Healthcare > Setup > Healthcare Settings > Laboratory Settings + +* Manage Sample Collection - If this flag is enabled, every time you create a Lab Test, a Sample Collection document will be created. + +* Require Lab Test Approval - Turning this on will restrict printing and emailing of Lab Tests only if the documents are in Approved status. You can use this flag to ensure that every Test result leaves your facility after verification. + +* Enable the third option if you want the name and designation of the Employee associated with the User who submits the document to be printed in the Lab Test Report. + +##### SMS Alerts +You can configure ERPNext Healthcare to alert Patients via SMS when the Lab Test result gets ready (Submit) and when you Email the result. You an configure the templates for the SMS as registered with your provider here. +> Healthcare > Setup > Healthcare Settings > Laboratory SMS Alerts + + +### Lab Test Templates +Whenever you create a new Lab Test, the Lab Test document is loaded based on the template configured for that particular test. This means, you will have to have separate templates configured for each Lab Test. + +Here's how you can configure various types of templates. +> Healthcare > Setup > Lab Test Template > New Lab Test Template + +After providing the Name for the Test you will have to select a Code and Item group for creating the mapped Item. ERPNext Healthcare maps every Lab Test (every other billable healthcare service) to an Item with "Maintain Stock" set to false. This way, the Accounts Module will invoice the Item and you can see the Sales related reports of Selling Module. You can also set selling rate of the Lab Test here - this will update the Selling Price List. + +> The Standard Selling Rate field behaves similar to the Item Standard Selling Rate, updating this will not update the Selling Price List + +The Is Billable flag in Lab Test Template creates the Item, but as Disabled. Likewise, unchecking this flag will Enable the Item. + +###### Result Format +Following are the result formats available in ERPNext Healthcare + +* Single - select this format for results which require only a single input, result UOM and normal value +* Compound - allows you to configure results which require multiple input fields with corresponding event names, result UOMs and normal values +* Descriptive - this format is helpful for results which have multiple result components and corresponding result entry fields. +* Grouped - You can group test templates which are already configured and combine as a single test. For such templates select "Grouped". +* No Result - Select this if you don not need to enter or manage test result. Also, no Lab Test document will be created. e.g., Sub Tests for Grouped results. + +###### Normal values +For Single and Compound result formats, you can set the normal values. + +###### Sample +You will have to select the Sample required for the test. You can also mention the quantity of sample that needs to be collected. These details will be used when creating the Sample Collection document for the Lab Test. + +### Medical Department +To organize your clinic into departments, you can create multiple Medical Departments. You can select appropriate departments in Lab Test Template and will be included in the Lab Test result print. +> Healthcare > Setup > Medical Department > New Medical Department + +### Lab Test Sample +You can create various masters for Samples that are to be collected for a Lab Test. +> Healthcare > Setup > Lab Test Sample > New Lab Test Sample + + +### Lab Test UOM +You can create various masters for Unit of Measures to be used in Lab Test document. +> Healthcare > Setup > Lab Test UOM > New Lab Test UOM + +### Antibiotic +You can create masters for a list of Antibiotics. +> Healthcare > Setup > Antibiotic > New Antibiotic + +### Sensitivity +You can create masters for a list of Sensitivity to various Antibiotics. +> Healthcare > Setup > Sensitivity > New Sensitivity + +{next} diff --git a/erpnext/docs/user/manual/en/healthcare/setup/setup_pharmacy.md b/erpnext/docs/user/manual/en/healthcare/setup/setup_pharmacy.md new file mode 100755 index 0000000000..7f9c719937 --- /dev/null +++ b/erpnext/docs/user/manual/en/healthcare/setup/setup_pharmacy.md @@ -0,0 +1,4 @@ +# Pharmacy +ERPNext Healthcare do not have a Pharmacy module - but you can configure the Stock module to manage your stock and Accounts and Buying modules for Billing and Purchases. The stock module allows you to configure Items with serial numbers and Batches. Expiry dates can be set if you turn on the "Has Batch No" check. You can also configure the auto reorder levels if required. + +{next} diff --git a/erpnext/docs/user/manual/en/healthcare/setup/setup_practice.md b/erpnext/docs/user/manual/en/healthcare/setup/setup_practice.md new file mode 100755 index 0000000000..81604826a4 --- /dev/null +++ b/erpnext/docs/user/manual/en/healthcare/setup/setup_practice.md @@ -0,0 +1,38 @@ +# Clinic / Practice +Configuring ERPNext Healthcare for your practice is simple. +> Healthcare > Setup > Healthcare Settings > Out Patient Settings + +By default Patient document uses the patient name as the name, but you can opt to use a naming series if required. + +The "Manage Customer" option will enable the system to create and link a Customer whenever a new Patient is created. This Customer is used while booking all transactions. + +Here, you can also select the default Medical Code Standard to use. + +###### Collect Fee for Patient Registration +If you enable this, all new Patients you create will by default be in Disabled mode and will be enabled only after Invoicing the Registration Fee. To create Invoice and record the payment receipt, you can use the "Invoice Patient Registration" button in the Patient document. Also note that all ERPNext Healthcare documents, "Disabled" Patients are filtered out. You can set the registration fee to be collected here. + +###### Consultation Fee validity +Many healthcare facilities do not charge for follow up consultations within a time period after the first visit. You can configure the number of free visits allowed as well as the time period for free consultations here. + +### Medical Department +To organize your clinic into departments, you can create multiple Medical Departments. +> Healthcare > Setup > Medical Department > New Medical Department + +### Appointment Type +You can create masters for various type of Appointments. This is optional and not considered while appointment scheduling. +> Healthcare > Setup > Appointment Type > New Appointment Type + +### Prescription Dosage & Duration +You can configure different dosages to be used while prescribing medication to patients. You can name the Prescription dosage in anyway you want (for example, BID or I-0-I), and then set the strength of the drug and the times at which it should be administered. +> Healthcare > Setup > Prescription Dosage > New Prescription Dosage + +> Healthcare > Setup > Prescription Duration > New Prescription Duration + +### Complaint and Diagnosis +To ease the data entry while recording the encounter impression, ERPNext Healthcare allows you to save each of the Complaint / Diagnosis data you enter, from the Consultation screen itself. This way, the database keeps building a list of all complaints and diagnosis you entered. Later on, every time you start keying in, you will be able to select the previously entered word / sentence from the search field. You can also configure the masters manually. + +> Healthcare > Setup > Complaints > New Complaint + +> Healthcare > Setup > Diagnosis > New Diagnosis + +{next} diff --git a/erpnext/docs/user/manual/en/healthcare/vital_signs.md b/erpnext/docs/user/manual/en/healthcare/vital_signs.md new file mode 100755 index 0000000000..21b25d96d1 --- /dev/null +++ b/erpnext/docs/user/manual/en/healthcare/vital_signs.md @@ -0,0 +1,13 @@ +# Vital Signs +ERPNext Healthcare allows you to record Vital Signs of Patients and manage this information as part of the Patient's health record. You can create a new document and record Vital Signs of a Patient from most of the Healthcare documents or directly by +> Healthcare > Consultation > Vital Signs > New Vital Signs + +ERPNext Healthcare + +You can select the Patient for whom you are recording the vitals and start by entering each of the fields. Normal values or ranges are provided for ease of assessment. Also present is an auto BMI calculator. + +ERPNext Healthcare + +All recorded Vital Signs are made available in the Patient Medical Record and the last recorded Vital Sign is displayed on the left hand side pane for easy review. + +{next} diff --git a/erpnext/healthcare/__init__.py b/erpnext/healthcare/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/__init__.py b/erpnext/healthcare/doctype/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/antibiotic/__init__.py b/erpnext/healthcare/doctype/antibiotic/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/antibiotic/antibiotic.js b/erpnext/healthcare/doctype/antibiotic/antibiotic.js new file mode 100644 index 0000000000..42e6adb603 --- /dev/null +++ b/erpnext/healthcare/doctype/antibiotic/antibiotic.js @@ -0,0 +1,5 @@ +// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Antibiotic', { +}); diff --git a/erpnext/healthcare/doctype/antibiotic/antibiotic.json b/erpnext/healthcare/doctype/antibiotic/antibiotic.json new file mode 100644 index 0000000000..d481036ee6 --- /dev/null +++ b/erpnext/healthcare/doctype/antibiotic/antibiotic.json @@ -0,0 +1,115 @@ +{ + "allow_copy": 1, + "allow_guest_to_view": 0, + "allow_import": 1, + "allow_rename": 1, + "autoname": "field:antibiotic_name", + "beta": 1, + "creation": "2016-02-23 11:11:30.749731", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Setup", + "editable_grid": 0, + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "antibiotic_name", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Antibiotic Name", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2017-08-31 13:44:43.199657", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Antibiotic", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Healthcare Administrator", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Laboratory User", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 0 + } + ], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "search_fields": "antibiotic_name", + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "antibiotic_name", + "track_changes": 0, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/antibiotic/antibiotic.py b/erpnext/healthcare/doctype/antibiotic/antibiotic.py new file mode 100644 index 0000000000..8236c8ab73 --- /dev/null +++ b/erpnext/healthcare/doctype/antibiotic/antibiotic.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document + +class Antibiotic(Document): + pass diff --git a/erpnext/healthcare/doctype/antibiotic/test_antibiotic.js b/erpnext/healthcare/doctype/antibiotic/test_antibiotic.js new file mode 100644 index 0000000000..b92103d750 --- /dev/null +++ b/erpnext/healthcare/doctype/antibiotic/test_antibiotic.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Antibiotic", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially([ + // insert a new Antibiotic + () => frappe.tests.make('Antibiotic', [ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/healthcare/doctype/antibiotic/test_antibiotic.py b/erpnext/healthcare/doctype/antibiotic/test_antibiotic.py new file mode 100644 index 0000000000..6ac4f4f9fc --- /dev/null +++ b/erpnext/healthcare/doctype/antibiotic/test_antibiotic.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors +# See license.txt +from __future__ import unicode_literals +import unittest + +class TestAntibiotic(unittest.TestCase): + pass diff --git a/erpnext/healthcare/doctype/appointment_type/__init__.py b/erpnext/healthcare/doctype/appointment_type/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/appointment_type/appointment_type.js b/erpnext/healthcare/doctype/appointment_type/appointment_type.js new file mode 100644 index 0000000000..15916a5134 --- /dev/null +++ b/erpnext/healthcare/doctype/appointment_type/appointment_type.js @@ -0,0 +1,5 @@ +// Copyright (c) 2016, ESS LLP and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Appointment Type', { +}); diff --git a/erpnext/healthcare/doctype/appointment_type/appointment_type.json b/erpnext/healthcare/doctype/appointment_type/appointment_type.json new file mode 100644 index 0000000000..4b34892ffd --- /dev/null +++ b/erpnext/healthcare/doctype/appointment_type/appointment_type.json @@ -0,0 +1,145 @@ +{ + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 1, + "autoname": "field:appointment_type", + "beta": 1, + "creation": "2016-07-22 11:52:34.953019", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Setup", + "editable_grid": 0, + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "appointment_type", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Type", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 1, + "collapsible": 0, + "columns": 0, + "fieldname": "ip", + "fieldtype": "Check", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Is Inpatient", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2017-08-31 13:46:57.142289", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Appointment Type", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Healthcare Administrator", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Physician", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + } + ], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "search_fields": "appointment_type", + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "", + "track_changes": 0, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/appointment_type/appointment_type.py b/erpnext/healthcare/doctype/appointment_type/appointment_type.py new file mode 100644 index 0000000000..1dacffab35 --- /dev/null +++ b/erpnext/healthcare/doctype/appointment_type/appointment_type.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS LLP and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document + +class AppointmentType(Document): + pass diff --git a/erpnext/healthcare/doctype/appointment_type/test_appointment_type.js b/erpnext/healthcare/doctype/appointment_type/test_appointment_type.js new file mode 100644 index 0000000000..93274e55c7 --- /dev/null +++ b/erpnext/healthcare/doctype/appointment_type/test_appointment_type.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Appointment Type", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially([ + // insert a new Appointment Type + () => frappe.tests.make('Appointment Type', [ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/healthcare/doctype/appointment_type/test_appointment_type.py b/erpnext/healthcare/doctype/appointment_type/test_appointment_type.py new file mode 100644 index 0000000000..04452e470e --- /dev/null +++ b/erpnext/healthcare/doctype/appointment_type/test_appointment_type.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS LLP and Contributors +# See license.txt +from __future__ import unicode_literals + +import unittest + +# test_records = frappe.get_test_records('Appointment Type') + +class TestAppointmentType(unittest.TestCase): + pass diff --git a/erpnext/healthcare/doctype/codification_table/__init__.py b/erpnext/healthcare/doctype/codification_table/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/codification_table/codification_table.json b/erpnext/healthcare/doctype/codification_table/codification_table.json new file mode 100644 index 0000000000..c4117782ff --- /dev/null +++ b/erpnext/healthcare/doctype/codification_table/codification_table.json @@ -0,0 +1,135 @@ +{ + "allow_copy": 1, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 1, + "creation": "2017-06-22 13:09:23.159579", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "medical_code", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Medical Code", + "length": 0, + "no_copy": 0, + "options": "Medical Code", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "code", + "fieldtype": "Read Only", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Code", + "length": 0, + "no_copy": 0, + "options": "medical_code.code", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "description", + "fieldtype": "Read Only", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Description", + "length": 0, + "no_copy": 0, + "options": "medical_code.description", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "max_attachments": 0, + "modified": "2017-08-31 14:06:50.281545", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Codification Table", + "name_case": "", + "owner": "Administrator", + "permissions": [], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/codification_table/codification_table.py b/erpnext/healthcare/doctype/codification_table/codification_table.py new file mode 100644 index 0000000000..ae29c03bbb --- /dev/null +++ b/erpnext/healthcare/doctype/codification_table/codification_table.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document + +class CodificationTable(Document): + pass diff --git a/erpnext/healthcare/doctype/complaint/__init__.py b/erpnext/healthcare/doctype/complaint/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/complaint/complaint.js b/erpnext/healthcare/doctype/complaint/complaint.js new file mode 100644 index 0000000000..5a2d219fe3 --- /dev/null +++ b/erpnext/healthcare/doctype/complaint/complaint.js @@ -0,0 +1,5 @@ +// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Complaint', { +}); diff --git a/erpnext/healthcare/doctype/complaint/complaint.json b/erpnext/healthcare/doctype/complaint/complaint.json new file mode 100644 index 0000000000..0899a39971 --- /dev/null +++ b/erpnext/healthcare/doctype/complaint/complaint.json @@ -0,0 +1,116 @@ +{ + "allow_copy": 1, + "allow_guest_to_view": 0, + "allow_import": 1, + "allow_rename": 1, + "autoname": "field:complaints", + "beta": 1, + "creation": "2017-02-15 12:25:28.045267", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "complaints", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Complaints", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2017-08-31 13:44:31.848346", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Complaint", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Healthcare Administrator", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Physician", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + } + ], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "search_fields": "complaints", + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "complaints", + "track_changes": 0, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/complaint/complaint.py b/erpnext/healthcare/doctype/complaint/complaint.py new file mode 100644 index 0000000000..717f9dbb4a --- /dev/null +++ b/erpnext/healthcare/doctype/complaint/complaint.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document + +class Complaint(Document): + pass diff --git a/erpnext/healthcare/doctype/complaint/test_complaint.js b/erpnext/healthcare/doctype/complaint/test_complaint.js new file mode 100644 index 0000000000..9ff44d8da4 --- /dev/null +++ b/erpnext/healthcare/doctype/complaint/test_complaint.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Complaint", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially([ + // insert a new Complaint + () => frappe.tests.make('Complaint', [ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/healthcare/doctype/complaint/test_complaint.py b/erpnext/healthcare/doctype/complaint/test_complaint.py new file mode 100644 index 0000000000..2b9273a967 --- /dev/null +++ b/erpnext/healthcare/doctype/complaint/test_complaint.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors +# See license.txt +from __future__ import unicode_literals +import unittest + +class TestComplaint(unittest.TestCase): + pass diff --git a/erpnext/healthcare/doctype/consultation/__init__.py b/erpnext/healthcare/doctype/consultation/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/consultation/consultation.js b/erpnext/healthcare/doctype/consultation/consultation.js new file mode 100644 index 0000000000..15a1c7f234 --- /dev/null +++ b/erpnext/healthcare/doctype/consultation/consultation.js @@ -0,0 +1,317 @@ +// Copyright (c) 2016, ESS LLP and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Consultation', { + setup: function(frm) { + frm.get_field('drug_prescription').grid.editable_fields = [ + {fieldname: 'drug_code', columns: 2}, + {fieldname: 'drug_name', columns: 2}, + {fieldname: 'dosage', columns: 2}, + {fieldname: 'period', columns: 2} + ]; + frm.get_field('test_prescription').grid.editable_fields = [ + {fieldname: 'test_code', columns: 2}, + {fieldname: 'test_name', columns: 4}, + {fieldname: 'test_comment', columns: 4} + ]; + }, + onload: function(frm){ + if(frm.doc.patient){ + frappe.call({ + "method": "erpnext.healthcare.doctype.patient.patient.get_patient_detail", + args: { + patient: frm.doc.patient + }, + callback: function (data) { + var age = null; + if(data.message.dob){ + age = calculate_age(data.message.dob); + } + frappe.model.set_value(frm.doctype,frm.docname, "patient_age", age); + show_details(data.message); + } + }); + } + }, + refresh: function(frm) { + refresh_field('drug_prescription'); + refresh_field('test_prescription'); + + frm.add_custom_button(__('Medical Record'), function() { + if (frm.doc.patient) { + frappe.route_options = {"patient": frm.doc.patient}; + frappe.set_route("medical_record"); + } else { + frappe.msgprint("Please select Patient"); + } + },"View"); + frm.add_custom_button(__('Vital Signs'), function() { + btn_create_vital_signs(frm); + },"Create"); + frm.add_custom_button(__('Medical Record'), function() { + create_medical_record(frm); + },"Create"); + + frm.set_query("patient", function () { + return { + filters: {"disabled": 0} + }; + }); + frm.set_query("drug_code", "drug_prescription", function() { + return { + filters: { + is_stock_item:'1' + } + }; + }); + frm.set_query("test_code", "test_prescription", function() { + return { + filters: { + is_billable:'1' + } + }; + }); + frm.set_query("medical_code", "codification_table", function() { + return { + filters: { + medical_code_standard: frappe.defaults.get_default("default_medical_code_standard") + } + }; + }); + frm.set_query("appointment", function() { + return { + filters: { + // Scheduled filter for demo ... + status:['in',["Open","Scheduled"]] + } + }; + }); + if(!frm.doc.__islocal && !frm.doc.invoice && (frappe.user.has_role("Accounts User"))){ + frm.add_custom_button(__('Invoice'), function() { + btn_invoice_consultation(frm); + },__("Create")); + } + frm.set_df_property("appointment", "read_only", frm.doc.__islocal ? 0:1); + frm.set_df_property("patient", "read_only", frm.doc.__islocal ? 0:1); + frm.set_df_property("patient_age", "read_only", frm.doc.__islocal ? 0:1); + frm.set_df_property("patient_sex", "read_only", frm.doc.__islocal ? 0:1); + frm.set_df_property("type", "read_only", frm.doc.__islocal ? 0:1); + frm.set_df_property("physician", "read_only", frm.doc.__islocal ? 0:1); + frm.set_df_property("visit_department", "read_only", frm.doc.__islocal ? 0:1); + frm.set_df_property("consultation_date", "read_only", frm.doc.__islocal ? 0:1); + frm.set_df_property("consultation_time", "read_only", frm.doc.__islocal ? 0:1); + } +}); + +var btn_invoice_consultation = function(frm){ + var doc = frm.doc; + frappe.call({ + method: + "erpnext.healthcare.doctype.consultation.consultation.create_invoice", + args: {company: doc.company, patient: doc.patient, physician: doc.physician, consultation_id: doc.name }, + callback: function(data){ + if(!data.exc){ + if(data.message){ + frappe.set_route("Form", "Sales Invoice", data.message); + } + cur_frm.reload_doc(); + } + } + }); +}; + +var create_medical_record = function (frm) { + if(!frm.doc.patient){ + frappe.throw("Please select patient"); + } + frappe.route_options = { + "patient": frm.doc.patient, + "status": "Open", + "reference_doctype": "Patient Medical Record", + "reference_owner": frm.doc.owner + }; + frappe.new_doc("Patient Medical Record"); +}; + +var btn_create_vital_signs = function (frm) { + if(!frm.doc.patient){ + frappe.throw("Please select patient"); + } + frappe.route_options = { + "patient": frm.doc.patient, + }; + frappe.new_doc("Vital Signs"); +}; + +var show_details = function(data){ + var personal_details = ""; + var age = null; + if(data.dob){ + age = calculate_age(data.dob); + personal_details += "
Age : " + age; + } + if(data.sex) personal_details += "
Gender : " + data.sex; + if(data.blood_group) personal_details += "
Blood group : " + data.blood_group; + if(data.occupation) personal_details += "
Occupation : " + data.occupation; + if(data.email) personal_details += "
Email : " + data.email; + if(data.mobile) personal_details += "
Mobile : " + data.mobile; + + if(personal_details){ + personal_details = "

"; + } + + var details = ""; + if(data.allergies) details += "

Allergies : "+ data.allergies; + if(data.medication) details += "
Medication : "+ data.medication; + if(data.alcohol_current_use) details += "

Alcohol use : "+ data.alcohol_current_use; + if(data.alcohol_past_use) details += "
Alcohol past use : "+ data.alcohol_past_use; + if(data.tobacco_current_use) details += "
Tobacco use : "+ data.tobacco_current_use; + if(data.tobacco_past_use) details += "
Tobacco past use : "+ data.tobacco_past_use; + if(data.medical_history) details += "

Medical history : "+ data.medical_history; + if(data.surgical_history) details += "
Surgical history : "+ data.surgical_history; + if(data.surrounding_factors) details += "

Occupational hazards : "+ data.surrounding_factors; + if(data.other_risk_factors) details += "
Other risk factors : " + data.other_risk_factors; + if(data.patient_details) details += "

More info : " + data.patient_details; + + if(details){ + details = "

Patient Details" + details + "
"; + } + + var vitals = ""; + if(data.temperature) vitals += "
Temperature : " + data.temperature; + if(data.pulse) vitals += ", Pulse : " + data.pulse; + if(data.respiratory_rate) vitals += ", Respiratory Rate : " + data.respiratory_rate; + if(data.bp) vitals += ", BP : " + data.bp; + if(data.bmi) vitals += "
BMI : " + data.bmi; + if(data.nutrition_note) vitals += " (" + data.nutrition_note + ")"; + if(data.height) vitals += ", Height : " + data.height; + if(data.weight) vitals += ", Weight : " + data.weight; + if(data.signs_date) vitals += "
Date : " + data.signs_date; + + if(vitals){ + vitals = "

Vital Signs" + vitals + "
"; + } + details = personal_details + vitals + details; + cur_frm.fields_dict.patient_details_html.$wrapper.html(details); +}; + +frappe.ui.form.on("Consultation", "appointment", function(frm){ + if(frm.doc.appointment){ + frappe.call({ + "method": "frappe.client.get", + args: { + doctype: "Patient Appointment", + name: frm.doc.appointment + }, + callback: function (data) { + frappe.model.set_value(frm.doctype,frm.docname, "patient", data.message.patient); + frappe.model.set_value(frm.doctype,frm.docname, "type", data.message.appointment_type); + frappe.model.set_value(frm.doctype,frm.docname, "physician", data.message.physician); + frappe.model.set_value(frm.doctype,frm.docname, "invoice", data.message.sales_invoice); + } + }); + } +}); + +frappe.ui.form.on("Consultation", "physician", function(frm) { + if(frm.doc.physician){ + frappe.call({ + "method": "frappe.client.get", + args: { + doctype: "Physician", + name: frm.doc.physician + }, + callback: function (data) { + frappe.model.set_value(frm.doctype,frm.docname, "visit_department",data.message.department); + } + }); + } +}); + +frappe.ui.form.on("Consultation", "symptoms_select", function(frm) { + if(frm.doc.symptoms_select){ + var symptoms = null; + if(frm.doc.symptoms) + symptoms = frm.doc.symptoms + "\n" +frm.doc.symptoms_select; + else + symptoms = frm.doc.symptoms_select; + frappe.model.set_value(frm.doctype,frm.docname, "symptoms", symptoms); + frappe.model.set_value(frm.doctype,frm.docname, "symptoms_select", null); + } +}); +frappe.ui.form.on("Consultation", "diagnosis_select", function(frm) { + if(frm.doc.diagnosis_select){ + var diagnosis = null; + if(frm.doc.diagnosis) + diagnosis = frm.doc.diagnosis + "\n" +frm.doc.diagnosis_select; + else + diagnosis = frm.doc.diagnosis_select; + frappe.model.set_value(frm.doctype,frm.docname, "diagnosis", diagnosis); + frappe.model.set_value(frm.doctype,frm.docname, "diagnosis_select", null); + } +}); + +frappe.ui.form.on("Consultation", "patient", function(frm) { + if(frm.doc.patient){ + frappe.call({ + "method": "erpnext.healthcare.doctype.patient.patient.get_patient_detail", + args: { + patient: frm.doc.patient + }, + callback: function (data) { + var age = ""; + if(data.message.dob){ + age = calculate_age(data.message.dob); + } + frappe.model.set_value(frm.doctype,frm.docname, "patient_age", age); + frappe.model.set_value(frm.doctype,frm.docname, "patient_sex", data.message.sex); + if(frm.doc.__islocal) show_details(data.message); + } + }); + } +}); + +frappe.ui.form.on("Drug Prescription", { + drug_code: function(frm, cdt, cdn) { + var child = locals[cdt][cdn]; + if(child.drug_code){ + frappe.call({ + "method": "frappe.client.get", + args: { + doctype: "Item", + name: child.drug_code, + }, + callback: function (data) { + frappe.model.set_value(cdt, cdn, 'drug_name',data.message.item_name); + } + }); + } + }, + dosage: function(frm, cdt, cdn){ + frappe.model.set_value(cdt, cdn, 'update_schedule', 1); + var child = locals[cdt][cdn]; + if(child.dosage){ + frappe.model.set_value(cdt, cdn, 'in_every', 'Day'); + frappe.model.set_value(cdt, cdn, 'interval', 1); + } + }, + period: function(frm, cdt, cdn){ + frappe.model.set_value(cdt, cdn, 'update_schedule', 1); + }, + in_every: function(frm, cdt, cdn){ + frappe.model.set_value(cdt, cdn, 'update_schedule', 1); + var child = locals[cdt][cdn]; + if(child.in_every == "Hour"){ + frappe.model.set_value(cdt, cdn, 'dosage', null); + } + } +}); + + +var calculate_age = function(birth) { + var ageMS = Date.parse(Date()) - Date.parse(birth); + var age = new Date(); + age.setTime(ageMS); + var years = age.getFullYear() - 1970; + return years + " Year(s) " + age.getMonth() + " Month(s) " + age.getDate() + " Day(s)"; +}; diff --git a/erpnext/healthcare/doctype/consultation/consultation.json b/erpnext/healthcare/doctype/consultation/consultation.json new file mode 100644 index 0000000000..70482cba55 --- /dev/null +++ b/erpnext/healthcare/doctype/consultation/consultation.json @@ -0,0 +1,1046 @@ +{ + "allow_copy": 1, + "allow_guest_to_view": 0, + "allow_import": 1, + "allow_rename": 0, + "autoname": "naming_series:", + "beta": 1, + "creation": "2016-04-21 10:53:44.637684", + "custom": 0, + "default_print_format": "", + "docstatus": 0, + "doctype": "DocType", + "document_type": "Document", + "editable_grid": 1, + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_1", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "naming_series", + "fieldtype": "Select", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Series", + "length": 0, + "no_copy": 0, + "options": "C-", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "", + "fieldname": "appointment", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Appointment", + "length": 0, + "no_copy": 0, + "options": "Patient Appointment", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 1, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "type", + "fieldtype": "Link", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Type", + "length": 0, + "no_copy": 0, + "options": "Appointment Type", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "patient", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Patient", + "length": 0, + "no_copy": 0, + "options": "Patient", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 1, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "patient_age", + "fieldtype": "Data", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Age", + "length": 0, + "no_copy": 0, + "options": "", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "patient_sex", + "fieldtype": "Select", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Gender", + "length": 0, + "no_copy": 0, + "options": "\nMale\nFemale", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "physician", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Doctor", + "length": 0, + "no_copy": 0, + "options": "Physician", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "company", + "fieldtype": "Link", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Company", + "length": 0, + "no_copy": 0, + "options": "Company", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_6", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "visit_department", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Department", + "length": 0, + "no_copy": 0, + "options": "Medical Department", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "Today", + "fieldname": "consultation_date", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Consultation Date", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "", + "fieldname": "consultation_time", + "fieldtype": "Time", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Consultation Time", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "invoice", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Invoice", + "length": 0, + "no_copy": 0, + "options": "Sales Invoice", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "patient_details", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Patient Details", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "patient_details_html", + "fieldtype": "HTML", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "sb_symptoms", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Encounter Impression", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "symptoms_select", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Complaints", + "length": 0, + "no_copy": 0, + "options": "Complaint", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "symptoms", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "0", + "fieldname": "symptoms_in_print", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "In print", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "physical_examination", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "", + "fieldname": "diagnosis_select", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Diagnosis", + "length": 0, + "no_copy": 0, + "options": "Diagnosis", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "", + "fieldname": "diagnosis", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "1", + "depends_on": "", + "fieldname": "diagnosis_in_print", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "In print", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "codification", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Medical Coding", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "codification_table", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Medical Coding", + "length": 0, + "no_copy": 0, + "options": "Codification Table", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "sb_drug_prescription", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Drug Prescription", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "drug_prescription", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Drug Prescription", + "length": 0, + "no_copy": 0, + "options": "Drug Prescription", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "sb_test_prescription", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Investigations", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "test_prescription", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Investigations", + "length": 0, + "no_copy": 0, + "options": "Lab Prescription", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "consultation_comment", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Review Details", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "amended_from", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Amended From", + "length": 0, + "no_copy": 1, + "options": "Consultation", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 1, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2017-08-31 14:24:59.935498", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Consultation", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 1, + "apply_user_permissions": 0, + "cancel": 1, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Physician", + "set_user_permissions": 0, + "share": 1, + "submit": 1, + "write": 1 + } + ], + "quick_entry": 0, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "search_fields": "patient, physician, visit_department", + "show_name_in_global_search": 1, + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "patient", + "track_changes": 1, + "track_seen": 1 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/consultation/consultation.py b/erpnext/healthcare/doctype/consultation/consultation.py new file mode 100755 index 0000000000..b8155b9b49 --- /dev/null +++ b/erpnext/healthcare/doctype/consultation/consultation.py @@ -0,0 +1,128 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS LLP and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe import _ +from frappe.model.document import Document +from frappe.utils import getdate +import json +from erpnext.healthcare.doctype.healthcare_settings.healthcare_settings import get_receivable_account,get_income_account + +class Consultation(Document): + def on_update(self): + if(self.appointment): + frappe.db.set_value("Patient Appointment",self.appointment,"status","Closed") + update_consultation_to_medical_record(self) + + def after_insert(self): + insert_consultation_to_medical_record(self) + + def on_submit(self): + if not self.diagnosis or not self.symptoms: + frappe.throw("Diagnosis and Complaints cannot be left blank") + + physician = frappe.get_doc("Physician",self.physician) + if(frappe.session.user != physician.user_id): + frappe.throw(_("You don't have permission to submit")) + +def set_sales_invoice_fields(company, patient): + sales_invoice = frappe.new_doc("Sales Invoice") + sales_invoice.customer = frappe.get_value("Patient", patient, "customer") + # patient is custom field in sales inv. + sales_invoice.due_date = getdate() + sales_invoice.is_pos = '0' + sales_invoice.debit_to = get_receivable_account(company) + + return sales_invoice + +def create_sales_invoice_item_lines(item, sales_invoice): + sales_invoice_line = sales_invoice.append("items") + sales_invoice_line.item_code = item.item_code + sales_invoice_line.item_name = item.item_name + sales_invoice_line.qty = 1.0 + sales_invoice_line.description = item.description + return sales_invoice_line + +@frappe.whitelist() +def create_drug_invoice(company, patient, prescriptions): + list_ids = json.loads(prescriptions) + if not (company or patient or prescriptions): + return False + + sales_invoice = set_sales_invoice_fields(company, patient) + sales_invoice.update_stock = 1 + + for line_id in list_ids: + line_obj = frappe.get_doc("Drug Prescription", line_id) + if line_obj: + if(line_obj.drug_code): + item = frappe.get_doc("Item", line_obj.drug_code) + sales_invoice_line = create_sales_invoice_item_lines(item, sales_invoice) + sales_invoice_line.qty = line_obj.get_quantity() + #income_account and cost_center in itemlines - by set_missing_values() + sales_invoice.set_missing_values() + return sales_invoice.as_dict() + +@frappe.whitelist() +def create_invoice(company, patient, physician, consultation_id): + if not consultation_id: + return False + sales_invoice = frappe.new_doc("Sales Invoice") + sales_invoice.customer = frappe.get_value("Patient", patient, "customer") + sales_invoice.due_date = getdate() + sales_invoice.is_pos = '0' + sales_invoice.debit_to = get_receivable_account(company) + + create_invoice_items(physician, sales_invoice, company) + + sales_invoice.save(ignore_permissions=True) + frappe.db.sql(_("""update tabConsultation set invoice='{0}' where name='{1}'""").format(sales_invoice.name, consultation_id)) + appointment = frappe.db.get_value("Consultation", consultation_id, "appointment") + if appointment: + frappe.db.set_value("Patient Appointment", appointment, "sales_invoice", sales_invoice.name) + return sales_invoice.name + +def create_invoice_items(physician, invoice, company): + item_line = invoice.append("items") + item_line.item_name = "Consulting Charges" + item_line.description = "Consulting Charges: " + physician + item_line.qty = 1 + item_line.uom = "Nos" + item_line.conversion_factor = 1 + item_line.income_account = get_income_account(physician,company) + op_consulting_charge = frappe.get_value("Physician",physician,"op_consulting_charge") + if op_consulting_charge: + item_line.rate = op_consulting_charge + item_line.amount = op_consulting_charge + return invoice + +def insert_consultation_to_medical_record(doc): + subject = set_subject_field(doc) + medical_record = frappe.new_doc("Patient Medical Record") + medical_record.patient = doc.patient + medical_record.subject = subject + medical_record.status = "Open" + medical_record.communication_date = doc.consultation_date + medical_record.reference_doctype = "Consultation" + medical_record.reference_name = doc.name + medical_record.reference_owner = doc.owner + medical_record.save(ignore_permissions=True) + +def update_consultation_to_medical_record(consultation): + medical_record_id = frappe.db.sql("select name from `tabPatient Medical Record` where reference_name=%s",(consultation.name)) + if(medical_record_id[0][0]): + subject = set_subject_field(consultation) + frappe.db.set_value("Patient Medical Record",medical_record_id[0][0],"subject",subject) + +def set_subject_field(consultation): + subject = "No Diagnosis " + if(consultation.diagnosis): + subject = "Diagnosis: \n"+ str(consultation.diagnosis)+". " + if(consultation.drug_prescription): + subject +="\nDrug(s) Prescribed. " + if(consultation.test_prescription): + subject += " Test(s) Prescribed." + + return subject diff --git a/erpnext/healthcare/doctype/consultation/consultation_dashboard.py b/erpnext/healthcare/doctype/consultation/consultation_dashboard.py new file mode 100644 index 0000000000..61708919f6 --- /dev/null +++ b/erpnext/healthcare/doctype/consultation/consultation_dashboard.py @@ -0,0 +1,15 @@ +from frappe import _ + +def get_data(): + return { + 'fieldname': 'consultation', + 'non_standard_fieldnames': { + 'Patient Medical Record': 'reference_name' + }, + 'transactions': [ + { + 'label': _('Records'), + 'items': ['Vital Signs', 'Patient Medical Record'] + }, + ] + } diff --git a/erpnext/healthcare/doctype/consultation/consultation_list.js b/erpnext/healthcare/doctype/consultation/consultation_list.js new file mode 100755 index 0000000000..ea3906db7e --- /dev/null +++ b/erpnext/healthcare/doctype/consultation/consultation_list.js @@ -0,0 +1,7 @@ +/* +(c) ESS 2015-16 +*/ +frappe.listview_settings['Consultation'] = { + filters:[["docstatus","!=","1"]] +}; + diff --git a/erpnext/healthcare/doctype/consultation/test_consultation.js b/erpnext/healthcare/doctype/consultation/test_consultation.js new file mode 100644 index 0000000000..803e73c381 --- /dev/null +++ b/erpnext/healthcare/doctype/consultation/test_consultation.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Consultation", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially([ + // insert a new Consultation + () => frappe.tests.make('Consultation', [ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/healthcare/doctype/consultation/test_consultation.py b/erpnext/healthcare/doctype/consultation/test_consultation.py new file mode 100644 index 0000000000..24dc011c36 --- /dev/null +++ b/erpnext/healthcare/doctype/consultation/test_consultation.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS LLP and Contributors +# See license.txt +from __future__ import unicode_literals +import unittest + +# test_records = frappe.get_test_records('Consultation') + +class TestConsultation(unittest.TestCase): + pass diff --git a/erpnext/healthcare/doctype/diagnosis/__init__.py b/erpnext/healthcare/doctype/diagnosis/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/diagnosis/diagnosis.js b/erpnext/healthcare/doctype/diagnosis/diagnosis.js new file mode 100644 index 0000000000..fb2557face --- /dev/null +++ b/erpnext/healthcare/doctype/diagnosis/diagnosis.js @@ -0,0 +1,5 @@ +// Copyright (c) 2016, ESS LLP and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Diagnosis', { +}); diff --git a/erpnext/healthcare/doctype/diagnosis/diagnosis.json b/erpnext/healthcare/doctype/diagnosis/diagnosis.json new file mode 100644 index 0000000000..b14ce9491c --- /dev/null +++ b/erpnext/healthcare/doctype/diagnosis/diagnosis.json @@ -0,0 +1,116 @@ +{ + "allow_copy": 1, + "allow_guest_to_view": 0, + "allow_import": 1, + "allow_rename": 1, + "autoname": "field:diagnosis", + "beta": 1, + "creation": "2017-02-15 12:23:59.341108", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "diagnosis", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Diagnosis", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2017-08-31 13:40:09.731904", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Diagnosis", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Healthcare Administrator", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Physician", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + } + ], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "search_fields": "diagnosis", + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "diagnosis", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/diagnosis/diagnosis.py b/erpnext/healthcare/doctype/diagnosis/diagnosis.py new file mode 100644 index 0000000000..f56e79062a --- /dev/null +++ b/erpnext/healthcare/doctype/diagnosis/diagnosis.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS LLP and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document + +class Diagnosis(Document): + pass diff --git a/erpnext/healthcare/doctype/diagnosis/test_diagnosis.js b/erpnext/healthcare/doctype/diagnosis/test_diagnosis.js new file mode 100644 index 0000000000..cacfef5b17 --- /dev/null +++ b/erpnext/healthcare/doctype/diagnosis/test_diagnosis.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Diagnosis", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially([ + // insert a new Diagnosis + () => frappe.tests.make('Diagnosis', [ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/healthcare/doctype/diagnosis/test_diagnosis.py b/erpnext/healthcare/doctype/diagnosis/test_diagnosis.py new file mode 100644 index 0000000000..c79164db37 --- /dev/null +++ b/erpnext/healthcare/doctype/diagnosis/test_diagnosis.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS LLP and Contributors +# See license.txt +from __future__ import unicode_literals + +import unittest + +# test_records = frappe.get_test_records('Diagnosis') + +class TestDiagnosis(unittest.TestCase): + pass diff --git a/erpnext/healthcare/doctype/dosage_form/__init__.py b/erpnext/healthcare/doctype/dosage_form/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/dosage_form/dosage_form.js b/erpnext/healthcare/doctype/dosage_form/dosage_form.js new file mode 100644 index 0000000000..60e96969f6 --- /dev/null +++ b/erpnext/healthcare/doctype/dosage_form/dosage_form.js @@ -0,0 +1,5 @@ +// Copyright (c) 2017, ESS LLP and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Dosage Form', { +}); diff --git a/erpnext/healthcare/doctype/dosage_form/dosage_form.json b/erpnext/healthcare/doctype/dosage_form/dosage_form.json new file mode 100644 index 0000000000..1de0e937d9 --- /dev/null +++ b/erpnext/healthcare/doctype/dosage_form/dosage_form.json @@ -0,0 +1,114 @@ +{ + "allow_copy": 1, + "allow_guest_to_view": 0, + "allow_import": 1, + "allow_rename": 1, + "autoname": "field:dosage_form", + "beta": 1, + "creation": "2017-04-08 12:04:33.987972", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "dosage_form", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Dosage Form", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2017-08-31 13:40:19.973532", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Dosage Form", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Physician", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Healthcare Administrator", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + } + ], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/dosage_form/dosage_form.py b/erpnext/healthcare/doctype/dosage_form/dosage_form.py new file mode 100644 index 0000000000..046af08094 --- /dev/null +++ b/erpnext/healthcare/doctype/dosage_form/dosage_form.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, ESS LLP and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document + +class DosageForm(Document): + pass diff --git a/erpnext/healthcare/doctype/dosage_form/test_dosage_form.js b/erpnext/healthcare/doctype/dosage_form/test_dosage_form.js new file mode 100644 index 0000000000..ba54ab16fa --- /dev/null +++ b/erpnext/healthcare/doctype/dosage_form/test_dosage_form.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Dosage Form", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially([ + // insert a new Dosage Form + () => frappe.tests.make('Dosage Form', [ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/healthcare/doctype/dosage_form/test_dosage_form.py b/erpnext/healthcare/doctype/dosage_form/test_dosage_form.py new file mode 100644 index 0000000000..81cfcf6f7d --- /dev/null +++ b/erpnext/healthcare/doctype/dosage_form/test_dosage_form.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, ESS LLP and Contributors +# See license.txt +from __future__ import unicode_literals + +import unittest + +class TestDosageForm(unittest.TestCase): + pass diff --git a/erpnext/healthcare/doctype/dosage_strength/__init__.py b/erpnext/healthcare/doctype/dosage_strength/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/dosage_strength/dosage_strength.json b/erpnext/healthcare/doctype/dosage_strength/dosage_strength.json new file mode 100644 index 0000000000..da4f1a7964 --- /dev/null +++ b/erpnext/healthcare/doctype/dosage_strength/dosage_strength.json @@ -0,0 +1,102 @@ +{ + "allow_copy": 1, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 1, + "creation": "2017-02-14 15:40:14.385707", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "strength", + "fieldtype": "Float", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Strength", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "strength_time", + "fieldtype": "Time", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Time", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "max_attachments": 0, + "modified": "2017-08-31 14:11:59.874645", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Dosage Strength", + "name_case": "", + "owner": "Administrator", + "permissions": [], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 0, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/dosage_strength/dosage_strength.py b/erpnext/healthcare/doctype/dosage_strength/dosage_strength.py new file mode 100644 index 0000000000..e36a0160cf --- /dev/null +++ b/erpnext/healthcare/doctype/dosage_strength/dosage_strength.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS LLP and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document + +class DosageStrength(Document): + pass diff --git a/erpnext/healthcare/doctype/drug_prescription/__init__.py b/erpnext/healthcare/doctype/drug_prescription/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/drug_prescription/drug_prescription.json b/erpnext/healthcare/doctype/drug_prescription/drug_prescription.json new file mode 100644 index 0000000000..c96df228c2 --- /dev/null +++ b/erpnext/healthcare/doctype/drug_prescription/drug_prescription.json @@ -0,0 +1,381 @@ +{ + "allow_copy": 1, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 1, + "creation": "2016-09-16 16:41:45.533374", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Document", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "drug_code", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Drug Code", + "length": 0, + "no_copy": 0, + "options": "Item", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "drug_name", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Description/Strength", + "length": 0, + "no_copy": 0, + "options": "", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "dosage", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Dosage", + "length": 0, + "no_copy": 0, + "options": "Prescription Dosage", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "period", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Period", + "length": 0, + "no_copy": 0, + "options": "Prescription Duration", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "dosage_form", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Dosage Form", + "length": 0, + "no_copy": 0, + "options": "Dosage Form", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_7", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "comment", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Comment", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "0", + "fieldname": "use_interval", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Dosage by time interval", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "use_interval", + "fieldname": "interval", + "fieldtype": "Int", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Interval", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "use_interval", + "fieldname": "in_every", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Interval UOM", + "length": 0, + "no_copy": 0, + "options": "\nHour\nDay", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "1", + "fieldname": "update_schedule", + "fieldtype": "Check", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Update Schedule", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "max_attachments": 0, + "modified": "2017-08-31 13:59:48.222282", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Drug Prescription", + "name_case": "", + "owner": "Administrator", + "permissions": [], + "quick_entry": 0, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 0, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/drug_prescription/drug_prescription.py b/erpnext/healthcare/doctype/drug_prescription/drug_prescription.py new file mode 100755 index 0000000000..0d99198fde --- /dev/null +++ b/erpnext/healthcare/doctype/drug_prescription/drug_prescription.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS LLP and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.document import Document + +class DrugPrescription(Document): + def get_quantity(self): + quantity = 0 + dosage = None + period = None + + if(self.dosage): + dosage = frappe.get_doc("Prescription Dosage",self.dosage) + for item in dosage.dosage_strength: + quantity += item.strength + if(self.period and self.interval): + period = frappe.get_doc("Prescription Duration",self.period) + if(self.interval < period.get_days()): + quantity = quantity*(period.get_days()/self.interval) + + elif(self.interval and self.in_every and self.period): + period = frappe.get_doc("Prescription Duration",self.period) + interval_in = self.in_every + if(interval_in == 'Day' and (self.interval < period.get_days())): + quantity = period.get_days()/self.interval + elif(interval_in == 'Hour' and (self.interval < period.get_hours())): + quantity = period.get_hours()/self.interval + if quantity > 0: + return quantity + else: + return 1 diff --git a/erpnext/healthcare/doctype/fee_validity/__init__.py b/erpnext/healthcare/doctype/fee_validity/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/fee_validity/fee_validity.js b/erpnext/healthcare/doctype/fee_validity/fee_validity.js new file mode 100644 index 0000000000..7ea2213619 --- /dev/null +++ b/erpnext/healthcare/doctype/fee_validity/fee_validity.js @@ -0,0 +1,5 @@ +// Copyright (c) 2016, ESS LLP and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Fee Validity', { +}); diff --git a/erpnext/healthcare/doctype/fee_validity/fee_validity.json b/erpnext/healthcare/doctype/fee_validity/fee_validity.json new file mode 100644 index 0000000000..4bbd20b9ba --- /dev/null +++ b/erpnext/healthcare/doctype/fee_validity/fee_validity.json @@ -0,0 +1,248 @@ +{ + "allow_copy": 1, + "allow_guest_to_view": 0, + "allow_import": 1, + "allow_rename": 0, + "beta": 1, + "creation": "2017-01-05 10:56:29.564806", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Setup", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "physician", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Physician", + "length": 0, + "no_copy": 0, + "options": "Physician", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "patient", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Patient", + "length": 0, + "no_copy": 0, + "options": "Patient", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "max_visit", + "fieldtype": "Int", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Max number of visit", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "visited", + "fieldtype": "Int", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Visited yet", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "valid_till", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Valid till", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "ref_invoice", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Reference Inv", + "length": 0, + "no_copy": 0, + "options": "Sales Invoice", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2017-08-31 13:36:52.108407", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Fee Validity", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Healthcare Administrator", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + } + ], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "search_fields": "physician,patient", + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "physician", + "track_changes": 0, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/fee_validity/fee_validity.py b/erpnext/healthcare/doctype/fee_validity/fee_validity.py new file mode 100644 index 0000000000..53a17417ce --- /dev/null +++ b/erpnext/healthcare/doctype/fee_validity/fee_validity.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS LLP and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document + +class FeeValidity(Document): + pass diff --git a/erpnext/healthcare/doctype/fee_validity/test_fee_validity.js b/erpnext/healthcare/doctype/fee_validity/test_fee_validity.js new file mode 100644 index 0000000000..0ebb97438c --- /dev/null +++ b/erpnext/healthcare/doctype/fee_validity/test_fee_validity.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Fee Validity", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially([ + // insert a new Fee Validity + () => frappe.tests.make('Fee Validity', [ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/healthcare/doctype/fee_validity/test_fee_validity.py b/erpnext/healthcare/doctype/fee_validity/test_fee_validity.py new file mode 100644 index 0000000000..2345872983 --- /dev/null +++ b/erpnext/healthcare/doctype/fee_validity/test_fee_validity.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS LLP and Contributors +# See license.txt +from __future__ import unicode_literals + +import frappe +import unittest +from erpnext.healthcare.doctype.patient_appointment.patient_appointment import create_invoice +from frappe.utils.make_random import get_random +from frappe.utils import nowdate, add_days +# test_records = frappe.get_test_records('Fee Validity') + +class TestFeeValidity(unittest.TestCase): + def test_fee_validity(self): + patient = get_random("Patient") + physician = get_random("Physician") + + if not patient: + patient = frappe.new_doc("Patient") + patient.patient_name = "Test Patient" + patient.sex = "Male" + patient.save(ignore_permissions = True) + patient = patient.name + + if not physician: + physician = frappe.new_doc("Physician") + physician.first_name= "Amit Jain" + physician.save(ignore_permissions = True) + physician = physician.name + + frappe.db.set_value("Healthcare Settings", None, "max_visit", 2) + frappe.db.set_value("Healthcare Settings", None, "valid_days", 7) + + appointment = create_appointment(patient, physician, nowdate()) + invoice = frappe.db.get_value("Patient Appointment", appointment.name, "sales_invoice") + self.assertEqual(invoice, None) + create_invoice(frappe.defaults.get_global_default("company"), physician, patient, appointment.name, appointment.appointment_date) + appointment = create_appointment(patient, physician, add_days(nowdate(), 4)) + invoice = frappe.db.get_value("Patient Appointment", appointment.name, "sales_invoice") + self.assertTrue(invoice) + appointment = create_appointment(patient, physician, add_days(nowdate(), 5)) + invoice = frappe.db.get_value("Patient Appointment", appointment.name, "sales_invoice") + self.assertEqual(invoice, None) + appointment = create_appointment(patient, physician, add_days(nowdate(), 10)) + invoice = frappe.db.get_value("Patient Appointment", appointment.name, "sales_invoice") + self.assertEqual(invoice, None) + +def create_appointment(patient, physician, appointment_date): + appointment = frappe.new_doc("Patient Appointment") + appointment.patient = patient + appointment.physician = physician + appointment.appointment_date = appointment_date + appointment.save(ignore_permissions = True) + return appointment diff --git a/erpnext/healthcare/doctype/healthcare.py b/erpnext/healthcare/doctype/healthcare.py new file mode 100644 index 0000000000..6fd2015fa2 --- /dev/null +++ b/erpnext/healthcare/doctype/healthcare.py @@ -0,0 +1,5 @@ +from __future__ import unicode_literals + +def get_data(): + + return [] diff --git a/erpnext/healthcare/doctype/healthcare_settings/__init__.py b/erpnext/healthcare/doctype/healthcare_settings/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/healthcare_settings/healthcare_settings.js b/erpnext/healthcare/doctype/healthcare_settings/healthcare_settings.js new file mode 100644 index 0000000000..75b0584f1f --- /dev/null +++ b/erpnext/healthcare/doctype/healthcare_settings/healthcare_settings.js @@ -0,0 +1,25 @@ +// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Healthcare Settings', { + setup: function(frm) { + frm.set_query('account', 'receivable_account', function(doc, cdt, cdn) { + var d = locals[cdt][cdn]; + return { + filters: { + 'account_type': 'Receivable', + 'company': d.company, + } + }; + }); + frm.set_query('account', 'income_account', function(doc, cdt, cdn) { + var d = locals[cdt][cdn]; + return { + filters: { + 'root_type': 'Income', + 'company': d.company, + } + }; + }); + } +}); diff --git a/erpnext/healthcare/doctype/healthcare_settings/healthcare_settings.json b/erpnext/healthcare/doctype/healthcare_settings/healthcare_settings.json new file mode 100644 index 0000000000..8681641fde --- /dev/null +++ b/erpnext/healthcare/doctype/healthcare_settings/healthcare_settings.json @@ -0,0 +1,1073 @@ +{ + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 1, + "creation": "2017-05-09 11:26:22.337760", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "sb_op_settings", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Out Patient Settings", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "patient_master_name", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Patient Name By", + "length": 0, + "no_copy": 0, + "options": "Patient Name\nNaming Series", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "1", + "description": "If checked, a customer will be created, mapped to Patient.\nPatient Invoices will be created against this Customer. You can also select existing Customer while creating Patient.", + "fieldname": "manage_customer", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Manage Customer", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "default_medical_code_standard", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Default Medical Code Standard", + "length": 0, + "no_copy": 0, + "options": "Medical Code Standard", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_9", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "collect_registration_fee", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Collect Fee for Patient Registration", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "collect_registration_fee", + "fieldname": "registration_fee", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Registration Fee", + "length": 0, + "no_copy": 0, + "options": "Currency", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "max_visit", + "fieldtype": "Int", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Consultations in valid days", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "valid_days", + "fieldtype": "Int", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Valid number of days", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "out_patient_sms_alerts", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Out Patient SMS Alerts", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "reg_sms", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Patient Registration", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "Hello {{doc.patient}}, Thank you for registering with {{doc.company}}. Your ID is {{doc.id}} . Please note this ID for future reference. \nThank You, Get well soon!", + "depends_on": "reg_sms", + "fieldname": "reg_msg", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Registration Message", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "app_con", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Appointment Confirmation", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "Hello {{doc.patient}}, You have scheduled an appointment with {{doc.physician}} by {{doc.start_dt}} at {{doc.company}}.\nThank you, Good day!", + "depends_on": "app_con", + "fieldname": "app_con_msg", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Confirmation Message", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "app_con", + "description": "Do not confirm if appointment is created for the same day", + "fieldname": "no_con", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Avoid Confirmation", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_16", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "app_rem", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Appointment Reminder", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "Hello {{doc.patient}}, You have an appointment with {{doc.physician}} by {{doc.appointment_time}} at {{doc.company}}.\nThank you, Good day!\n", + "depends_on": "app_rem", + "fieldname": "app_rem_msg", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Reminder Message", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "app_rem", + "fieldname": "rem_before", + "fieldtype": "Time", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Remind Before", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "description": "Default income accounts to be used if not set in Physician to book Consultation charges.", + "fieldname": "sb_in_ac", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Income Account", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "income_account", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Income Account", + "length": 0, + "no_copy": 0, + "options": "Party Account", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "description": "Default receivable accounts to be used if not set in Patient to book Consultation charges.", + "fieldname": "sb_r_ac", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Receivable Account", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "receivable_account", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Receivable Account", + "length": 0, + "no_copy": 0, + "options": "Party Account", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "sb_lab_settings", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Laboratory Settings", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "Create documents for sample collection", + "fieldname": "require_sample_collection", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Manage Sample Collection", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "require_test_result_approval", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Require Lab Test Approval", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_34", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "1", + "fieldname": "employee_name_and_designation_in_print", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Employee name and designation in print", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:doc.employee_name_and_designation_in_print == '0'\n", + "fieldname": "custom_signature_in_print", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Custom Signature in Print", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "laboratory_sms_alerts", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Laboratory SMS Alerts", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "Hello {{doc.patient}}, Your {{doc.test_name}} result is ready with {{doc.company }}. \nThank You, Good day!", + "fieldname": "sms_printed", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Result Printed", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_28", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "Hello {{doc.patient}}, Your {{doc.test_name}} result has been emailed to {{doc.email}}. \n{{doc.company }}. \nThank You, Good day!", + "fieldname": "sms_emailed", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Result Emailed", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 1, + "istable": 0, + "max_attachments": 0, + "modified": "2017-08-31 13:25:48.193218", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Healthcare Settings", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "Healthcare Administrator", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + } + ], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/healthcare_settings/healthcare_settings.py b/erpnext/healthcare/doctype/healthcare_settings/healthcare_settings.py new file mode 100644 index 0000000000..7206e4b58c --- /dev/null +++ b/erpnext/healthcare/doctype/healthcare_settings/healthcare_settings.py @@ -0,0 +1,68 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.document import Document +from frappe.core.doctype.sms_settings.sms_settings import send_sms +import json + +class HealthcareSettings(Document): + def validate(self): + for key in ["collect_registration_fee","manage_customer","patient_master_name", + "require_test_result_approval","require_sample_collection", "default_medical_code_standard"]: + frappe.db.set_default(key, self.get(key, "")) + if(self.collect_registration_fee): + if self.registration_fee <= 0 : + frappe.throw("Registration fee can not be Zero") + +@frappe.whitelist() +def get_sms_text(doc): + sms_text = {} + doc = frappe.get_doc("Lab Test",doc) + #doc = json.loads(doc) + context = {"doc": doc, "alert": doc, "comments": None} + emailed = frappe.db.get_value("Healthcare Settings", None, "sms_emailed") + sms_text['emailed'] = frappe.render_template(emailed, context) + printed = frappe.db.get_value("Healthcare Settings", None, "sms_printed") + sms_text['printed'] = frappe.render_template(printed, context) + return sms_text + +def send_registration_sms(doc): + if (frappe.db.get_value("Healthcare Settings", None, "reg_sms")=='1'): + if doc.mobile: + context = {"doc": doc, "alert": doc, "comments": None} + if doc.get("_comments"): + context["comments"] = json.loads(doc.get("_comments")) + messages = frappe.db.get_value("Healthcare Settings", None, "reg_msg") + messages = frappe.render_template(messages, context) + number = [doc.mobile] + send_sms(number,messages) + else: + frappe.msgprint(doc.name + " Has no mobile number to send registration SMS", alert=True) + + +def get_receivable_account(company): + receivable_account = get_account(None, "receivable_account", "Healthcare Settings", company) + if receivable_account: + return receivable_account + return frappe.db.get_value("Company", company, "default_receivable_account") + +def get_income_account(physician, company): + if(physician): + income_account = get_account("Physician", None, physician, company) + if income_account: + return income_account + income_account = get_account(None, "income_account", "Healthcare Settings", company) + if income_account: + return income_account + return frappe.db.get_value("Company", company, "default_income_account") + +def get_account(parent_type, parent_field, parent, company): + if(parent_type): + return frappe.db.get_value("Party Account", + {"parenttype": parent_type, "parent": parent, "company": company}, "account") + if(parent_field): + return frappe.db.get_value("Party Account", + {"parentfield": parent_field, "parent": parent, "company": company}, "account") diff --git a/erpnext/healthcare/doctype/healthcare_settings/test_healthcare_settings.js b/erpnext/healthcare/doctype/healthcare_settings/test_healthcare_settings.js new file mode 100644 index 0000000000..ca10925e59 --- /dev/null +++ b/erpnext/healthcare/doctype/healthcare_settings/test_healthcare_settings.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Healthcare Settings", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially([ + // insert a new Healthcare Settings + () => frappe.tests.make('Healthcare Settings', [ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/healthcare/doctype/lab_prescription/__init__.py b/erpnext/healthcare/doctype/lab_prescription/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/lab_prescription/lab_prescription.json b/erpnext/healthcare/doctype/lab_prescription/lab_prescription.json new file mode 100644 index 0000000000..2d1a8d6b25 --- /dev/null +++ b/erpnext/healthcare/doctype/lab_prescription/lab_prescription.json @@ -0,0 +1,223 @@ +{ + "allow_copy": 1, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 1, + "creation": "2016-09-16 16:53:06.882970", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Document", + "editable_grid": 1, + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "test_code", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Test Code", + "length": 0, + "no_copy": 0, + "options": "Lab Test Template", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "test_name", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Test", + "length": 0, + "no_copy": 0, + "options": "test_code.test_name", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "invoice", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Invoice", + "length": 0, + "no_copy": 0, + "options": "Sales Invoice", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_4", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "test_comment", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Comments", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "test_created", + "fieldtype": "Check", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Test Created", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "max_attachments": 0, + "modified": "2017-08-31 13:47:22.789095", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Lab Prescription", + "name_case": "", + "owner": "Administrator", + "permissions": [], + "quick_entry": 0, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 0, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/lab_prescription/lab_prescription.py b/erpnext/healthcare/doctype/lab_prescription/lab_prescription.py new file mode 100644 index 0000000000..b788a0db7e --- /dev/null +++ b/erpnext/healthcare/doctype/lab_prescription/lab_prescription.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS LLP and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document + +class LabPrescription(Document): + pass diff --git a/erpnext/healthcare/doctype/lab_test/__init__.py b/erpnext/healthcare/doctype/lab_test/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/lab_test/lab_test.js b/erpnext/healthcare/doctype/lab_test/lab_test.js new file mode 100644 index 0000000000..2a453cd898 --- /dev/null +++ b/erpnext/healthcare/doctype/lab_test/lab_test.js @@ -0,0 +1,323 @@ +// Copyright (c) 2016, ESS and contributors +// For license information, please see license.txt + +cur_frm.cscript.custom_refresh = function(doc) { + cur_frm.toggle_display("sb_sensitivity", doc.sensitivity_toggle=="1"); + cur_frm.toggle_display("sb_special", doc.special_toggle=="1"); + cur_frm.toggle_display("sb_normal", doc.normal_toggle=="1"); +}; + +frappe.ui.form.on('Lab Test', { + setup: function(frm) { + frm.get_field('normal_test_items').grid.editable_fields = [ + {fieldname: 'test_name', columns: 3}, + {fieldname: 'test_event', columns: 2}, + {fieldname: 'result_value', columns: 2}, + {fieldname: 'test_uom', columns: 1}, + {fieldname: 'normal_range', columns: 2} + ]; + frm.get_field('special_test_items').grid.editable_fields = [ + {fieldname: 'test_particulars', columns: 3}, + {fieldname: 'result_value', columns: 7} + ]; + }, + refresh : function(frm){ + refresh_field('normal_test_items'); + refresh_field('special_test_items'); + if(!frm.doc.__islocal && !frm.doc.invoice && frappe.user.has_role("Accounts User")){ + frm.add_custom_button(__('Make Invoice'), function() { + make_invoice(frm); + }); + } + if(frm.doc.__islocal){ + frm.add_custom_button(__('Get from Consultation'), function () { + get_lab_test_prescribed(frm); + }); + } + if(frm.doc.docstatus==1 && frm.doc.status!='Approved' && frm.doc.status!='Rejected' && frappe.defaults.get_default("require_test_result_approval") && frappe.user.has_role("LabTest Approver")){ + frm.add_custom_button(__('Approve'), function() { + status_update(1,frm); + }); + frm.add_custom_button(__('Reject'), function() { + status_update(0,frm); + }); + } + if(frm.doc.docstatus==1 && frm.doc.sms_sent==0){ + frm.add_custom_button(__('Send SMS'), function() { + frappe.call({ + method: "erpnext.healthcare.doctype.healthcare_settings.healthcare_settings.get_sms_text", + args:{doc: frm.doc.name}, + callback: function(r) { + if(!r.exc) { + var emailed = r.message.emailed; + var printed = r.message.printed; + make_dialog(frm, emailed, printed); + } + } + }); + }); + } + + }, + onload: function (frm) { + frm.add_fetch("physician", "department", "department"); + if(frm.doc.employee){ + frappe.call({ + method: "frappe.client.get", + args:{ + doctype: "Employee", + name: frm.doc.employee + }, + callback: function(arg){ + frappe.model.set_value(frm.doctype,frm.docname,"employee_name", arg.message.employee_name); + frappe.model.set_value(frm.doctype,frm.docname,"employee_designation", arg.message.designation); + } + }); + } + } +}); + +frappe.ui.form.on("Lab Test", "patient", function(frm) { + if(frm.doc.patient){ + frappe.call({ + "method": "erpnext.healthcare.doctype.patient.patient.get_patient_detail", + args: { + patient: frm.doc.patient + }, + callback: function (data) { + var age = null; + if(data.message.dob){ + age = calculate_age(data.message.dob); + } + frappe.model.set_value(frm.doctype,frm.docname, "patient_age", age); + frappe.model.set_value(frm.doctype,frm.docname, "patient_sex", data.message.sex); + frappe.model.set_value(frm.doctype,frm.docname, "email", data.message.email); + frappe.model.set_value(frm.doctype,frm.docname, "mobile", data.message.mobile); + frappe.model.set_value(frm.doctype,frm.docname, "report_preference", data.message.report_preference); + } + }); + } +}); + +frappe.ui.form.on('Normal Test Items', { + normal_test_items_remove: function() { + frappe.msgprint("Not permitted, configure Lab Test Template as required"); + cur_frm.reload_doc(); + } +}); + +frappe.ui.form.on('Special Test Items', { + special_test_items_remove: function() { + frappe.msgprint("Not permitted, configure Lab Test Template as required"); + cur_frm.reload_doc(); + } +}); + +var status_update = function(approve,frm){ + var doc = frm.doc; + var status = null; + if(approve == 1){ + status = "Approved"; + } + else { + status = "Rejected"; + } + frappe.call({ + method: "erpnext.healthcare.doctype.lab_test.lab_test.update_status", + args: {status: status, name: doc.name}, + callback: function(){ + cur_frm.reload_doc(); + } + }); +}; + +var get_lab_test_prescribed = function(frm){ + if(frm.doc.patient){ + frappe.call({ + method: "erpnext.healthcare.doctype.lab_test.lab_test.get_lab_test_prescribed", + args: {patient: frm.doc.patient}, + callback: function(r){ + show_lab_tests(frm, r.message); + } + }); + } + else{ + frappe.msgprint("Please select Patient to get Lab Tests"); + } +}; + +var show_lab_tests = function(frm, result){ + var d = new frappe.ui.Dialog({ + title: __("Lab Test Prescriptions"), + fields: [ + { + fieldtype: "HTML", fieldname: "lab_test" + } + ] + }); + var html_field = d.fields_dict.lab_test.$wrapper; + html_field.empty(); + $.each(result, function(x, y){ + var row = $(repl('
', {name:y[0], lab_test: y[1], consultation:y[2], invoice:y[3], physician:y[4], date:y[5]})).appendTo(html_field); + row.find("a").click(function() { + frm.doc.template = $(this).attr("data-lab-test"); + frm.doc.prescription = $(this).attr("data-name"); + frm.doc.physician = $(this).attr("data-physician"); + frm.set_df_property("template", "read_only", 1); + frm.set_df_property("patient", "read_only", 1); + frm.set_df_property("physician", "read_only", 1); + if($(this).attr("data-invoice") != 'null'){ + frm.doc.invoice = $(this).attr("data-invoice"); + refresh_field("invoice"); + }else { + frm.doc.invoice = ""; + refresh_field("invoice"); + } + + refresh_field("template"); + d.hide(); + return false; + }); + }); + if(!result){ + var msg = "There are no Lab Test prescribed for "+frm.doc.patient; + $(repl('
%(msg)s
', {msg: msg})).appendTo(html_field); + } + d.show(); +}; + +var make_invoice = function(frm){ + var doc = frm.doc; + frappe.call({ + method: "erpnext.healthcare.doctype.lab_test.lab_test.create_invoice", + args: {company:doc.company, patient:doc.patient, lab_tests: [doc.name], prescriptions:[]}, + callback: function(r){ + if(!r.exc){ + if(r.message){ + /* frappe.show_alert(__('Sales Invoice {0} created', + ['' + r.message+ ''])); */ + frappe.set_route("Form", "Sales Invoice", r.message); + } + cur_frm.reload_doc(); + } + } + }); +}; + +cur_frm.cscript.custom_before_submit = function(doc) { + if(doc.normal_test_items){ + for(let result in doc.normal_test_items){ + if(!doc.normal_test_items[result].result_value && doc.normal_test_items[result].require_result_value == 1){ + frappe.msgprint("Please input all required Result Value(s)"); + throw("Error"); + } + } + } + if(doc.special_test_items){ + for(let result in doc.special_test_items){ + if(!doc.special_test_items[result].result_value && doc.special_test_items[result].require_result_value == 1){ + frappe.msgprint("Please input all required Result Value(s)"); + throw("Error"); + } + } + } +}; + +var make_dialog = function(frm, emailed, printed) { + var number = frm.doc.mobile; + + var dialog = new frappe.ui.Dialog({ + title: 'Send SMS', + width: 400, + fields: [ + {fieldname:'sms_type', fieldtype:'Select', label:'Type', options: + ['Emailed','Printed']}, + {fieldname:'number', fieldtype:'Data', label:'Mobile Number', reqd:1}, + {fieldname:'messages_label', fieldtype:'HTML'}, + {fieldname:'messages', fieldtype:'HTML', reqd:1} + ], + primary_action_label: __("Send"), + primary_action : function(){ + var values = dialog.fields_dict; + if(!values){ + return; + } + send_sms(values,frm); + dialog.hide(); + } + }); + if(frm.doc.report_preference == "Email"){ + dialog.set_values({ + 'sms_type': "Emailed", + 'number': number + }); + dialog.fields_dict.messages_label.html("Message".bold()); + dialog.fields_dict.messages.html(emailed); + }else{ + dialog.set_values({ + 'sms_type': "Printed", + 'number': number + }); + dialog.fields_dict.messages_label.html("Message".bold()); + dialog.fields_dict.messages.html(printed); + } + var fd = dialog.fields_dict; + $(fd.sms_type.input).change(function(){ + if(dialog.get_value('sms_type') == 'Emailed'){ + dialog.set_values({ + 'number': number + }); + fd.messages_label.html("Message".bold()); + fd.messages.html(emailed); + }else{ + dialog.set_values({ + 'number': number + }); + fd.messages_label.html("Message".bold()); + fd.messages.html(printed); + } + }); + dialog.show(); +}; + +var send_sms = function(v,frm){ + var doc = frm.doc; + var number = v.number.last_value; + var messages = v.messages.wrapper.innerText; + frappe.call({ + method: "frappe.core.doctype.sms_settings.sms_settings.send_sms", + args: { + receiver_list: [number], + msg: messages + }, + callback: function(r) { + if(r.exc) {frappe.msgprint(r.exc); return; } + else{ + frappe.call({ + method: "erpnext.healthcare.doctype.lab_test.lab_test.update_lab_test_print_sms_email_status", + args: {print_sms_email: "sms_sent", name: doc.name}, + callback: function(){ + cur_frm.reload_doc(); + } + }); + } + } + }); +}; + +var calculate_age = function(birth) { + var ageMS = Date.parse(Date()) - Date.parse(birth); + var age = new Date(); + age.setTime(ageMS); + var years = age.getFullYear() - 1970; + return years + " Year(s) " + age.getMonth() + " Month(s) " + age.getDate() + " Day(s)"; +}; diff --git a/erpnext/healthcare/doctype/lab_test/lab_test.json b/erpnext/healthcare/doctype/lab_test/lab_test.json new file mode 100644 index 0000000000..93e40ccb71 --- /dev/null +++ b/erpnext/healthcare/doctype/lab_test/lab_test.json @@ -0,0 +1,1470 @@ +{ + "allow_copy": 1, + "allow_guest_to_view": 0, + "allow_import": 1, + "allow_rename": 0, + "autoname": "naming_series:", + "beta": 1, + "creation": "2016-03-29 17:34:47.509094", + "custom": 0, + "default_print_format": "", + "docstatus": 0, + "doctype": "DocType", + "document_type": "Document", + "editable_grid": 0, + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "naming_series", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Series", + "length": 0, + "no_copy": 0, + "options": "LP-", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "invoice", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Invoice", + "length": 0, + "no_copy": 0, + "options": "Sales Invoice", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 1, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "patient", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Patient", + "length": 0, + "no_copy": 0, + "options": "Patient", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 1, + "set_only_once": 1, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "patient_name", + "fieldtype": "Data", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Patient Name", + "length": 0, + "no_copy": 0, + "options": "patient.patient_name", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "patient_age", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Age", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "patient_sex", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Gender", + "length": 0, + "no_copy": 0, + "options": "\nMale\nFemale", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 1, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "physician", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Doctor", + "length": 0, + "no_copy": 0, + "options": "Physician", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "email", + "fieldtype": "Data", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Email", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "mobile", + "fieldtype": "Data", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Mobile", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "company", + "fieldtype": "Link", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Company", + "length": 0, + "no_copy": 0, + "options": "Company", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "c_b", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "department", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Department", + "length": 0, + "no_copy": 0, + "options": "Medical Department", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "status", + "fieldtype": "Select", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Status", + "length": 0, + "no_copy": 0, + "options": "Draft\nCompleted\nApproved\nRejected\nCancelled", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "submitted_date", + "fieldtype": "Datetime", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Submitted Date", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "approved_date", + "fieldtype": "Datetime", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Approved Date", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "sample", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Sample ID", + "length": 0, + "no_copy": 0, + "options": "Sample Collection", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "", + "fieldname": "result_date", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Result Date", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 1, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "", + "fieldname": "employee", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Lab Technician", + "length": 0, + "no_copy": 0, + "options": "Employee", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "employee_name", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Technician Name", + "length": 0, + "no_copy": 0, + "options": "employee.employee_name", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "employee_designation", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Designation", + "length": 0, + "no_copy": 0, + "options": "employee.designation", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "user", + "fieldtype": "Link", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "User", + "length": 0, + "no_copy": 0, + "options": "User", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "report_preference", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Report Preference", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "sb_first", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "test_name", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Test Name", + "length": 0, + "no_copy": 1, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_26", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "template", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Test Template", + "length": 0, + "no_copy": 0, + "options": "Lab Test Template", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 1, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "test_group", + "fieldtype": "Link", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Test Group", + "length": 0, + "no_copy": 0, + "options": "Item Group", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "sb_normal", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "normal_test_items", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "options": "Normal Test Items", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "sb_special", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "special_test_items", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "options": "Special Test Items", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "sb_sensitivity", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "sensitivity_test_items", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "options": "Sensitivity Test Items", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "sb_comments", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "test_comment", + "fieldtype": "Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Comments", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "sb_customresult", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Custom Result", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "custom_result", + "fieldtype": "Text Editor", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Custom Result", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "0", + "fieldname": "email_sent", + "fieldtype": "Check", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "0", + "fieldname": "sms_sent", + "fieldtype": "Check", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "0", + "fieldname": "printed", + "fieldtype": "Check", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "0", + "fieldname": "normal_toggle", + "fieldtype": "Check", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "0", + "fieldname": "special_toggle", + "fieldtype": "Check", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "0", + "fieldname": "sensitivity_toggle", + "fieldtype": "Check", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "amended_from", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Amended From", + "length": 0, + "no_copy": 1, + "options": "Lab Test", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "prescription", + "fieldtype": "Link", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Prescription", + "length": 0, + "no_copy": 0, + "options": "Lab Prescription", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "icon": "", + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 1, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2017-08-31 13:52:14.180774", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Lab Test", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 1, + "apply_user_permissions": 0, + "cancel": 1, + "create": 1, + "delete": 0, + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Laboratory User", + "set_user_permissions": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "LabTest Approver", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Physician", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + } + ], + "quick_entry": 0, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "search_fields": "patient,invoice,physician,test_name,sample", + "show_name_in_global_search": 1, + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "patient", + "track_changes": 1, + "track_seen": 1 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/lab_test/lab_test.py b/erpnext/healthcare/doctype/lab_test/lab_test.py new file mode 100644 index 0000000000..0daf9cba73 --- /dev/null +++ b/erpnext/healthcare/doctype/lab_test/lab_test.py @@ -0,0 +1,295 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.document import Document +import json +from frappe.utils import getdate +from erpnext.healthcare.doctype.healthcare_settings.healthcare_settings import get_receivable_account +from frappe import _ + +class LabTest(Document): + def on_submit(self): + frappe.db.set_value(self.doctype,self.name,"submitted_date", getdate()) + insert_lab_test_to_medical_record(self) + frappe.db.set_value("Lab Test", self.name, "status", "Completed") + + def on_cancel(self): + delete_lab_test_from_medical_record(self) + frappe.db.set_value("Lab Test", self.name, "status", "Cancelled") + self.reload() + + def on_update(self): + if(self.sensitivity_test_items): + sensitivity = sorted(self.sensitivity_test_items, key=lambda x: x.antibiotic_sensitivity) + for i, item in enumerate(sensitivity): + item.idx = i+1 + self.sensitivity_test_items = sensitivity + + def after_insert(self): + if(self.prescription): + frappe.db.set_value("Lab Prescription", self.prescription, "test_created", 1) + if not self.test_name and self.template: + self.load_test_from_template() + self.reload() + + def load_test_from_template(self): + lab_test = self + create_test_from_template(lab_test) + self.reload() + +def create_test_from_template(lab_test): + template = frappe.get_doc("Lab Test Template", lab_test.template) + patient = frappe.get_doc("Patient", lab_test.patient) + + lab_test.test_name = template.test_name + lab_test.result_date = getdate() + lab_test.department = template.department + lab_test.test_group = template.test_group + + lab_test = create_sample_collection(lab_test, template, patient, None) + lab_test = load_result_format(lab_test, template, None, None) + +@frappe.whitelist() +def update_status(status, name): + frappe.db.sql("""update `tabLab Test` set status=%s, approved_date=%s where name = %s""", (status, getdate(), name)) + +@frappe.whitelist() +def update_lab_test_print_sms_email_status(print_sms_email, name): + frappe.db.set_value("Lab Test",name,print_sms_email,1) + +def create_lab_test_doc(invoice, consultation, patient, template): + #create Test Result for template, copy vals from Invoice + lab_test = frappe.new_doc("Lab Test") + if(invoice): + lab_test.invoice = invoice + if(consultation): + lab_test.physician = consultation.physician + lab_test.patient = patient.name + lab_test.patient_age = patient.get_age() + lab_test.patient_sex = patient.sex + lab_test.email = patient.email + lab_test.mobile = patient.mobile + lab_test.department = template.department + lab_test.test_name = template.test_name + lab_test.template = template.name + lab_test.test_group = template.test_group + lab_test.result_date = getdate() + lab_test.report_preference = patient.report_preference + return lab_test + +def create_normals(template, lab_test): + lab_test.normal_toggle = "1" + normal = lab_test.append("normal_test_items") + normal.test_name = template.test_name + normal.test_uom = template.test_uom + normal.normal_range = template.test_normal_range + normal.require_result_value = 1 + normal.template = template.name + +def create_compounds(template, lab_test, is_group): + lab_test.normal_toggle = "1" + for normal_test_template in template.normal_test_templates: + normal = lab_test.append("normal_test_items") + if is_group: + normal.test_event = normal_test_template.test_event + else: + normal.test_name = normal_test_template.test_event + + normal.test_uom = normal_test_template.test_uom + normal.normal_range = normal_test_template.normal_range + normal.require_result_value = 1 + normal.template = template.name + +def create_specials(template, lab_test): + lab_test.special_toggle = "1" + if(template.sensitivity): + lab_test.sensitivity_toggle = "1" + for special_test_template in template.special_test_template: + special = lab_test.append("special_test_items") + special.test_particulars = special_test_template.particulars + special.require_result_value = 1 + special.template = template.name + +def create_sample_doc(template, patient, invoice): + if(template.sample): + sample_exist = frappe.db.exists({ + "doctype": "Sample Collection", + "patient": patient.name, + "docstatus": 0, + "sample": template.sample}) + if sample_exist : + #Update Sample Collection by adding quantity + sample_collection = frappe.get_doc("Sample Collection",sample_exist[0][0]) + quantity = int(sample_collection.sample_quantity)+int(template.sample_quantity) + if(template.sample_collection_details): + sample_collection_details = sample_collection.sample_collection_details+"\n==============\n"+"Test :"+template.test_name+"\n"+"Collection Detials:\n\t"+template.sample_collection_details + frappe.db.set_value("Sample Collection", sample_collection.name, "sample_collection_details",sample_collection_details) + frappe.db.set_value("Sample Collection", sample_collection.name, "sample_quantity",quantity) + + else: + #create Sample Collection for template, copy vals from Invoice + sample_collection = frappe.new_doc("Sample Collection") + if(invoice): + sample_collection.invoice = invoice + sample_collection.patient = patient.name + sample_collection.patient_age = patient.get_age() + sample_collection.patient_sex = patient.sex + sample_collection.sample = template.sample + sample_collection.sample_uom = template.sample_uom + sample_collection.sample_quantity = template.sample_quantity + if(template.sample_collection_details): + sample_collection.sample_collection_details = "Test :"+template.test_name+"\n"+"Collection Detials:\n\t"+template.sample_collection_details + sample_collection.save(ignore_permissions=True) + + return sample_collection + +@frappe.whitelist() +def create_lab_test_from_desk(patient, template, prescription, invoice=None): + lab_test_exist = frappe.db.exists({ + "doctype": "Lab Test", + "prescription": prescription + }) + if lab_test_exist: + return + template = frappe.get_doc("Lab Test Template", template) + #skip the loop if there is no test_template for Item + if not (template): + return + patient = frappe.get_doc("Patient", patient) + consultation_id = frappe.get_value("Lab Prescription", prescription, "parent") + consultation = frappe.get_doc("Consultation", consultation_id) + lab_test = create_lab_test(patient, template, prescription, consultation, invoice) + return lab_test.name + +def create_sample_collection(lab_test, template, patient, invoice): + if(frappe.db.get_value("Healthcare Settings", None, "require_sample_collection") == "1"): + sample_collection = create_sample_doc(template, patient, invoice) + if(sample_collection): + lab_test.sample = sample_collection.name + return lab_test + +def load_result_format(lab_test, template, prescription, invoice): + if(template.test_template_type == 'Single'): + create_normals(template, lab_test) + elif(template.test_template_type == 'Compound'): + create_compounds(template, lab_test, False) + elif(template.test_template_type == 'Descriptive'): + create_specials(template, lab_test) + elif(template.test_template_type == 'Grouped'): + #iterate for each template in the group and create one result for all. + for test_group in template.test_groups: + #template_in_group = None + if(test_group.test_template): + template_in_group = frappe.get_doc("Lab Test Template", + test_group.test_template) + if(template_in_group): + if(template_in_group.test_template_type == 'Single'): + create_normals(template_in_group, lab_test) + elif(template_in_group.test_template_type == 'Compound'): + normal_heading = lab_test.append("normal_test_items") + normal_heading.test_name = template_in_group.test_name + normal_heading.require_result_value = 0 + normal_heading.template = template_in_group.name + create_compounds(template_in_group, lab_test, True) + elif(template_in_group.test_template_type == 'Descriptive'): + special_heading = lab_test.append("special_test_items") + special_heading.test_name = template_in_group.test_name + special_heading.require_result_value = 0 + special_heading.template = template_in_group.name + create_specials(template_in_group, lab_test) + else: + normal = lab_test.append("normal_test_items") + normal.test_name = test_group.group_event + normal.test_uom = test_group.group_test_uom + normal.normal_range = test_group.group_test_normal_range + normal.require_result_value = 1 + normal.template = template.name + if(template.test_template_type != 'No Result'): + if(prescription): + lab_test.prescription = prescription + if(invoice): + frappe.db.set_value("Lab Prescription", prescription, "invoice", invoice) + lab_test.save(ignore_permissions=True) # insert the result + return lab_test + +def create_lab_test(patient, template, prescription, consultation, invoice): + lab_test = create_lab_test_doc(invoice, consultation, patient, template) + lab_test = create_sample_collection(lab_test, template, patient, invoice) + lab_test = load_result_format(lab_test, template, prescription, invoice) + return lab_test + +@frappe.whitelist() +def get_employee_by_user_id(user_id): + emp_id = frappe.db.get_value("Employee",{"user_id":user_id}) + employee = frappe.get_doc("Employee",emp_id) + return employee + +def insert_lab_test_to_medical_record(doc): + subject = str(doc.test_name) + if(doc.test_comment): + subject += ", \n"+str(doc.test_comment) + medical_record = frappe.new_doc("Patient Medical Record") + medical_record.patient = doc.patient + medical_record.subject = subject + medical_record.status = "Open" + medical_record.communication_date = doc.result_date + medical_record.reference_doctype = "Lab Test" + medical_record.reference_name = doc.name + medical_record.reference_owner = doc.owner + medical_record.save(ignore_permissions=True) + +def delete_lab_test_from_medical_record(self): + medical_record_id = frappe.db.sql("select name from `tabPatient Medical Record` where reference_name=%s",(self.name)) + + if(medical_record_id[0][0]): + frappe.delete_doc("Patient Medical Record", medical_record_id[0][0]) + +def create_item_line(test_code, sales_invoice): + if test_code: + item = frappe.get_doc("Item", test_code) + if item: + if not item.disabled: + sales_invoice_line = sales_invoice.append("items") + sales_invoice_line.item_code = item.item_code + sales_invoice_line.item_name = item.item_name + sales_invoice_line.qty = 1.0 + sales_invoice_line.description = item.description + +@frappe.whitelist() +def create_invoice(company, patient, lab_tests, prescriptions): + test_ids = json.loads(lab_tests) + line_ids = json.loads(prescriptions) + if not test_ids and not line_ids: + return + sales_invoice = frappe.new_doc("Sales Invoice") + sales_invoice.customer = frappe.get_value("Patient", patient, "customer") + sales_invoice.due_date = getdate() + sales_invoice.is_pos = '0' + sales_invoice.debit_to = get_receivable_account(company) + for line in line_ids: + test_code = frappe.get_value("Lab Prescription", line, "test_code") + create_item_line(test_code, sales_invoice) + for test in test_ids: + template = frappe.get_value("Lab Test", test, "template") + test_code = frappe.get_value("Lab Test Template", template, "item") + create_item_line(test_code, sales_invoice) + sales_invoice.set_missing_values() + sales_invoice.save() + #set invoice in lab test + for test in test_ids: + frappe.db.set_value("Lab Test", test, "invoice", sales_invoice.name) + prescription = frappe.db.get_value("Lab Test", test, "prescription") + if prescription: + frappe.db.set_value("Lab Prescription", prescription, "invoice", sales_invoice.name) + #set invoice in prescription + for line in line_ids: + frappe.db.set_value("Lab Prescription", line, "invoice", sales_invoice.name) + return sales_invoice.name + +@frappe.whitelist() +def get_lab_test_prescribed(patient): + return frappe.db.sql(_("""select cp.name, cp.test_code, cp.parent, cp.invoice, ct.physician, ct.consultation_date from tabConsultation ct, + `tabLab Prescription` cp where ct.patient='{0}' and cp.parent=ct.name and cp.test_created=0""").format(patient)) diff --git a/erpnext/healthcare/doctype/lab_test/lab_test_list.js b/erpnext/healthcare/doctype/lab_test/lab_test_list.js new file mode 100644 index 0000000000..c36c115f99 --- /dev/null +++ b/erpnext/healthcare/doctype/lab_test/lab_test_list.js @@ -0,0 +1,15 @@ +/* +(c) ESS 2015-16 +*/ +frappe.listview_settings['Lab Test'] = { + add_fields: ["name", "status", "invoice"], + filters:[["docstatus","=","0"]], + get_indicator: function(doc) { + if(doc.status=="Approved"){ + return [__("Approved"), "green", "status,=,Approved"]; + } + if(doc.status=="Rejected"){ + return [__("Rejected"), "yellow", "status,=,Rejected"]; + } + } +}; diff --git a/erpnext/healthcare/doctype/lab_test/test_lab_test.js b/erpnext/healthcare/doctype/lab_test/test_lab_test.js new file mode 100644 index 0000000000..57cb22b269 --- /dev/null +++ b/erpnext/healthcare/doctype/lab_test/test_lab_test.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Lab Test", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially([ + // insert a new Lab Test + () => frappe.tests.make('Lab Test', [ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/healthcare/doctype/lab_test/test_lab_test.py b/erpnext/healthcare/doctype/lab_test/test_lab_test.py new file mode 100644 index 0000000000..4131ad99b7 --- /dev/null +++ b/erpnext/healthcare/doctype/lab_test/test_lab_test.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS LLP and Contributors +# See license.txt +from __future__ import unicode_literals +import unittest + +# test_records = frappe.get_test_records('Lab Test') + +class TestLabTest(unittest.TestCase): + pass diff --git a/erpnext/healthcare/doctype/lab_test_groups/__init__.py b/erpnext/healthcare/doctype/lab_test_groups/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/lab_test_groups/lab_test_groups.json b/erpnext/healthcare/doctype/lab_test_groups/lab_test_groups.json new file mode 100644 index 0000000000..d5607f0561 --- /dev/null +++ b/erpnext/healthcare/doctype/lab_test_groups/lab_test_groups.json @@ -0,0 +1,291 @@ +{ + "allow_copy": 1, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 1, + "creation": "2016-03-29 17:37:29.913583", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Setup", + "editable_grid": 0, + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "Add Test", + "depends_on": "", + "fieldname": "template_or_new_line", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "", + "length": 0, + "no_copy": 0, + "options": "Add Test\nAdd new line", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:doc.template_or_new_line == 'Add Test'", + "fieldname": "test_template", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Test Name", + "length": 0, + "no_copy": 0, + "options": "Lab Test Template", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "test_rate", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Rate", + "length": 0, + "no_copy": 0, + "options": "test_template.test_rate", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "test_description", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Description", + "length": 0, + "no_copy": 0, + "options": "test_template.test_description", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:doc.template_or_new_line == 'Add new line'", + "fieldname": "group_event", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Event", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:doc.template_or_new_line =='Add new line'", + "fieldname": "group_test_uom", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "UOM", + "length": 0, + "no_copy": 0, + "options": "Lab Test UOM", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:doc.template_or_new_line == 'Add new line'", + "fieldname": "group_test_normal_range", + "fieldtype": "Long Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Normal Range", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_8", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "max_attachments": 0, + "modified": "2017-08-31 14:07:35.188661", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Lab Test Groups", + "name_case": "", + "owner": "Administrator", + "permissions": [], + "quick_entry": 0, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 0, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/lab_test_groups/lab_test_groups.py b/erpnext/healthcare/doctype/lab_test_groups/lab_test_groups.py new file mode 100644 index 0000000000..c67531c179 --- /dev/null +++ b/erpnext/healthcare/doctype/lab_test_groups/lab_test_groups.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document + +class LabTestGroups(Document): + pass diff --git a/erpnext/healthcare/doctype/lab_test_sample/__init__.py b/erpnext/healthcare/doctype/lab_test_sample/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/lab_test_sample/lab_test_sample.js b/erpnext/healthcare/doctype/lab_test_sample/lab_test_sample.js new file mode 100644 index 0000000000..a5f4b4de99 --- /dev/null +++ b/erpnext/healthcare/doctype/lab_test_sample/lab_test_sample.js @@ -0,0 +1,5 @@ +// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Lab Test Sample', { +}); diff --git a/erpnext/healthcare/doctype/lab_test_sample/lab_test_sample.json b/erpnext/healthcare/doctype/lab_test_sample/lab_test_sample.json new file mode 100644 index 0000000000..46c04c696e --- /dev/null +++ b/erpnext/healthcare/doctype/lab_test_sample/lab_test_sample.json @@ -0,0 +1,145 @@ +{ + "allow_copy": 1, + "allow_guest_to_view": 0, + "allow_import": 1, + "allow_rename": 1, + "autoname": "field:sample", + "beta": 1, + "creation": "2016-04-04 17:35:44.823951", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Setup", + "editable_grid": 0, + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "sample", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Sample", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 1, + "collapsible": 0, + "columns": 0, + "fieldname": "sample_uom", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "UOM", + "length": 0, + "no_copy": 0, + "options": "", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2017-08-31 13:46:22.508908", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Lab Test Sample", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Healthcare Administrator", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Laboratory User", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 0 + } + ], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "sample", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/lab_test_sample/lab_test_sample.py b/erpnext/healthcare/doctype/lab_test_sample/lab_test_sample.py new file mode 100644 index 0000000000..4c66b7276b --- /dev/null +++ b/erpnext/healthcare/doctype/lab_test_sample/lab_test_sample.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document + +class LabTestSample(Document): + pass diff --git a/erpnext/healthcare/doctype/lab_test_sample/test_lab_test_sample.js b/erpnext/healthcare/doctype/lab_test_sample/test_lab_test_sample.js new file mode 100644 index 0000000000..ace60de752 --- /dev/null +++ b/erpnext/healthcare/doctype/lab_test_sample/test_lab_test_sample.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Lab Test Sample", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially([ + // insert a new Lab Test Sample + () => frappe.tests.make('Lab Test Sample', [ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/healthcare/doctype/lab_test_sample/test_lab_test_sample.py b/erpnext/healthcare/doctype/lab_test_sample/test_lab_test_sample.py new file mode 100644 index 0000000000..2bc56bd324 --- /dev/null +++ b/erpnext/healthcare/doctype/lab_test_sample/test_lab_test_sample.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors +# See license.txt +from __future__ import unicode_literals +import unittest + +class TestLabTestSample(unittest.TestCase): + pass diff --git a/erpnext/healthcare/doctype/lab_test_template/__init__.py b/erpnext/healthcare/doctype/lab_test_template/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/lab_test_template/lab_test_template.js b/erpnext/healthcare/doctype/lab_test_template/lab_test_template.js new file mode 100644 index 0000000000..a8202982d9 --- /dev/null +++ b/erpnext/healthcare/doctype/lab_test_template/lab_test_template.js @@ -0,0 +1,132 @@ +// Copyright (c) 2016, ESS +// License: ESS license.txt + +frappe.ui.form.on("Lab Test Template",{ + test_name: function(frm) { + if(!frm.doc.test_code) + frm.set_value("test_code", frm.doc.test_name); + if(!frm.doc.test_description) + frm.set_value("test_description", frm.doc.test_name); + }, + refresh : function(frm){ + // Restrict Special, Grouped type templates in Child TestGroups + frm.set_query("test_template", "test_groups", function() { + return { + filters: { + test_template_type:['in',['Single','Compound']] + } + }; + }); + } +}); + +cur_frm.cscript.custom_refresh = function(doc) { + cur_frm.set_df_property("test_code", "read_only", doc.__islocal ? 0 : 1); + + if(!doc.__islocal) { + cur_frm.add_custom_button(__('Change Template Code'), function() { + change_template_code(cur_frm,doc); + } ); + if(doc.disabled == 1){ + cur_frm.add_custom_button(__('Enable Template'), function() { + enable_template(cur_frm); + } ); + } + else{ + cur_frm.add_custom_button(__('Disable Template'), function() { + disable_template(cur_frm); + } ); + } + } +}; + +var disable_template = function(frm){ + var doc = frm.doc; + frappe.call({ + method: "erpnext.healthcare.doctype.lab_test_template.lab_test_template.disable_enable_test_template", + args: {status: 1, name: doc.name, is_billable: doc.is_billable}, + callback: function(){ + cur_frm.reload_doc(); + } + }); +}; + +var enable_template = function(frm){ + var doc = frm.doc; + frappe.call({ + method: "erpnext.healthcare.doctype.lab_test_template.lab_test_template.disable_enable_test_template", + args: {status: 0, name: doc.name, is_billable: doc.is_billable}, + callback: function(){ + cur_frm.reload_doc(); + } + }); +}; + + +var change_template_code = function(frm,doc){ + var d = new frappe.ui.Dialog({ + title:__("Change Template Code"), + fields:[ + { + "fieldtype": "Data", + "label": "Test Template Code", + "fieldname": "Test Code", + reqd:1 + }, + { + "fieldtype": "Button", + "label": __("Change Code"), + click: function() { + var values = d.get_values(); + if(!values) + return; + change_test_code_from_template(values["Test Code"],doc); + d.hide(); + } + } + ] + }); + d.show(); + d.set_values({ + 'Test Code': doc.test_code + }); + + var change_test_code_from_template = function(test_code,doc){ + frappe.call({ + "method": "erpnext.healthcare.doctype.lab_test_template.lab_test_template.change_test_code_from_template", + "args": {test_code: test_code, doc: doc}, + callback: function (data) { + frappe.set_route("Form", "Lab Test Template", data.message); + } + }); + }; +}; + +frappe.ui.form.on("Lab Test Template", "test_name", function(frm){ + + frm.doc.change_in_item = 1; + +}); +frappe.ui.form.on("Lab Test Template", "test_rate", function(frm){ + + frm.doc.change_in_item = 1; + +}); +frappe.ui.form.on("Lab Test Template", "test_group", function(frm){ + + frm.doc.change_in_item = 1; + +}); +frappe.ui.form.on("Lab Test Template", "test_description", function(frm){ + + frm.doc.change_in_item = 1; + +}); + +frappe.ui.form.on("Lab Test Groups", "template_or_new_line", function (frm, cdt, cdn) { + var child = locals[cdt][cdn]; + if(child.template_or_new_line =="Add new line"){ + frappe.model.set_value(cdt, cdn, 'test_template', ""); + frappe.model.set_value(cdt, cdn, 'test_description', ""); + } +}); diff --git a/erpnext/healthcare/doctype/lab_test_template/lab_test_template.json b/erpnext/healthcare/doctype/lab_test_template/lab_test_template.json new file mode 100644 index 0000000000..9e692d5418 --- /dev/null +++ b/erpnext/healthcare/doctype/lab_test_template/lab_test_template.json @@ -0,0 +1,978 @@ +{ + "allow_copy": 1, + "allow_guest_to_view": 0, + "allow_import": 1, + "allow_rename": 1, + "autoname": "field:test_code", + "beta": 1, + "creation": "2016-03-29 17:35:36.761223", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 0, + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "test_name", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Test Name", + "length": 0, + "no_copy": 1, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 1, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "item", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Item", + "length": 0, + "no_copy": 1, + "options": "Item", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "test_code", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Item Code", + "length": 0, + "no_copy": 1, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 1, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "", + "fieldname": "test_group", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Item Group", + "length": 0, + "no_copy": 0, + "options": "Item Group", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "department", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Department", + "length": 0, + "no_copy": 0, + "options": "Medical Department", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_3", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "", + "description": "Single for results which require only a single input, result UOM and normal value \n
\nCompound for results which require multiple input fields with corresponding event names, result UOMs and normal values\n
\nDescriptive for tests which have multiple result components and corresponding result entry fields. \n
\nGrouped for test templates which are a group of other test templates.\n
\nNo Result for tests with no results. Also, no Lab Test is created. e.g.. Sub Tests for Grouped results.", + "fieldname": "test_template_type", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Result Format", + "length": 0, + "no_copy": 0, + "options": "\nSingle\nCompound\nDescriptive\nGrouped\nNo Result", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "1", + "depends_on": "eval:doc.test_template_type != 'Grouped'", + "description": "If unchecked, the item wont be appear in Sales Invoice, but can be used in group test creation. ", + "fieldname": "is_billable", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Is billable", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:doc.is_billable == 1", + "description": "This value is updated in the Default Sales Price List.", + "fieldname": "test_rate", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Standard Selling Rate", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": "", + "columns": 0, + "depends_on": "eval:doc.test_template_type == 'Single'", + "fieldname": "section_break_normal", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Lab Routine", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "test_uom", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "UOM", + "length": 0, + "no_copy": 0, + "options": "Lab Test UOM", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "test_normal_range", + "fieldtype": "Long Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Normal Range", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_10", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "collapsible_depends_on": "", + "columns": 0, + "depends_on": "eval:doc.test_template_type == 'Compound'", + "fieldname": "section_break_compound", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Compound", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "normal_test_templates", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "options": "Normal Test Template", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:doc.test_template_type == 'Descriptive'", + "fieldname": "section_break_special", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Special", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "0", + "fieldname": "sensitivity", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Sensitivity", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "special_test_template", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "options": "Special Test Template", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:doc.test_template_type == 'Grouped'", + "fieldname": "section_break_group", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Group", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "test_groups", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "", + "length": 0, + "no_copy": 0, + "options": "Lab Test Groups", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_description", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "test_description", + "fieldtype": "Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Description", + "length": 0, + "no_copy": 1, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "sb_sample_collection", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Sample Collection", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "sample", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Sample", + "length": 0, + "no_copy": 0, + "options": "Lab Test Sample", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "sample_uom", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "UOM", + "length": 0, + "no_copy": 0, + "options": "sample.sample_uom", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "0", + "fieldname": "sample_quantity", + "fieldtype": "Float", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Quantity", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "sample_collection_details", + "fieldtype": "Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Collection Details", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "0", + "fieldname": "change_in_item", + "fieldtype": "Check", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Change In Item", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "0", + "fieldname": "disabled", + "fieldtype": "Check", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "disabled", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2017-08-31 13:45:27.655822", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Lab Test Template", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Healthcare Administrator", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Laboratory User", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 0 + } + ], + "quick_entry": 0, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "search_fields": "test_code,test_name,test_template_type", + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "test_name", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/lab_test_template/lab_test_template.py b/erpnext/healthcare/doctype/lab_test_template/lab_test_template.py new file mode 100644 index 0000000000..bb0ead62cf --- /dev/null +++ b/erpnext/healthcare/doctype/lab_test_template/lab_test_template.py @@ -0,0 +1,121 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe, json +from frappe.model.document import Document +from frappe import _ + +class LabTestTemplate(Document): + def on_update(self): + #Item and Price List update --> if (change_in_item) + if(self.change_in_item and self.is_billable == 1 and self.item): + updating_item(self) + if not item_price_exist(self): + if(self.test_rate != 0.0): + price_list_name = frappe.db.get_value("Price List", {"selling": 1}) + if(self.test_rate): + make_item_price(self.test_code, price_list_name, self.test_rate) + else: + make_item_price(self.test_code, price_list_name, 0.0) + + frappe.db.set_value(self.doctype,self.name,"change_in_item",0) + elif(self.is_billable == 0 and self.item): + frappe.db.set_value("Item",self.item,"disabled",1) + self.reload() + + def after_insert(self): + if not self.item: + create_item_from_template(self) + + #Call before delete the template + def on_trash(self): + # remove template refernce from item and disable item + if(self.item): + try: + frappe.delete_doc("Item",self.item) + except Exception: + frappe.throw("""Not permitted. Please disable the Test Template""") + +def item_price_exist(doc): + item_price = frappe.db.exists({ + "doctype": "Item Price", + "item_code": doc.test_code}) + if(item_price): + return True + else: + return False + +def updating_item(self): + frappe.db.sql("""update `tabItem` set item_name=%s, item_group=%s, disabled=0, standard_rate=%s, + description=%s, modified=NOW() where item_code=%s""", + (self.test_name, self.test_group , self.test_rate, self.test_description, self.item)) + +def create_item_from_template(doc): + if(doc.is_billable == 1): + disabled = 0 + else: + disabled = 1 + #insert item + item = frappe.get_doc({ + "doctype": "Item", + "item_code": doc.test_code, + "item_name":doc.test_name, + "item_group": doc.test_group, + "description":doc.test_description, + "is_sales_item": 1, + "is_service_item": 1, + "is_purchase_item": 0, + "is_stock_item": 0, + "show_in_website": 0, + "is_pro_applicable": 0, + "disabled": disabled, + "stock_uom": "Unit" + }).insert(ignore_permissions=True) + + #insert item price + #get item price list to insert item price + if(doc.test_rate != 0.0): + price_list_name = frappe.db.get_value("Price List", {"selling": 1}) + if(doc.test_rate): + make_item_price(item.name, price_list_name, doc.test_rate) + item.standard_rate = doc.test_rate + else: + make_item_price(item.name, price_list_name, 0.0) + item.standard_rate = 0.0 + item.save(ignore_permissions = True) + #Set item to the template + frappe.db.set_value("Lab Test Template", doc.name, "item", item.name) + + doc.reload() #refresh the doc after insert. + +def make_item_price(item, price_list_name, item_price): + frappe.get_doc({ + "doctype": "Item Price", + "price_list": price_list_name, + "item_code": item, + "price_list_rate": item_price + }).insert(ignore_permissions=True) + +@frappe.whitelist() +def change_test_code_from_template(test_code, doc): + args = json.loads(doc) + doc = frappe._dict(args) + + item_exist = frappe.db.exists({ + "doctype": "Item", + "item_code": test_code}) + if(item_exist): + frappe.throw(_("Code {0} already exist").format(test_code)) + else: + frappe.rename_doc("Item", doc.name, test_code, ignore_permissions = True) + frappe.db.set_value("Lab Test Template",doc.name,"test_code",test_code) + frappe.rename_doc("Lab Test Template", doc.name, test_code, ignore_permissions = True) + return test_code + +@frappe.whitelist() +def disable_enable_test_template(status, name, is_billable): + frappe.db.set_value("Lab Test Template",name,"disabled",status) + if(is_billable == 1): + frappe.db.set_value("Item",name,"disabled",status) diff --git a/erpnext/healthcare/doctype/lab_test_template/lab_test_template_list.js b/erpnext/healthcare/doctype/lab_test_template/lab_test_template_list.js new file mode 100644 index 0000000000..26f55c33b8 --- /dev/null +++ b/erpnext/healthcare/doctype/lab_test_template/lab_test_template_list.js @@ -0,0 +1,15 @@ +/* +(c) ESS 2015-16 +*/ +frappe.listview_settings['Lab Test Template'] = { + add_fields: ["test_name", "test_code", "test_rate"], + filters:[["disabled","=",0]], + /* get_indicator: function(doc) { + if(doc.disabled==1){ + return [__("Disabled"), "red", "disabled,=,Disabled"]; + } + if(doc.disabled==0){ + return [__("Enabled"), "green", "disabled,=,0"]; + } + } */ +}; diff --git a/erpnext/healthcare/doctype/lab_test_template/test_lab_test_template.js b/erpnext/healthcare/doctype/lab_test_template/test_lab_test_template.js new file mode 100644 index 0000000000..7c2ec8c348 --- /dev/null +++ b/erpnext/healthcare/doctype/lab_test_template/test_lab_test_template.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Lab Test Template", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially([ + // insert a new Lab Test Template + () => frappe.tests.make('Lab Test Template', [ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/healthcare/doctype/lab_test_template/test_lab_test_template.py b/erpnext/healthcare/doctype/lab_test_template/test_lab_test_template.py new file mode 100644 index 0000000000..4c9f55a839 --- /dev/null +++ b/erpnext/healthcare/doctype/lab_test_template/test_lab_test_template.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS and Contributors +# See license.txt +from __future__ import unicode_literals +import unittest + +# test_records = frappe.get_test_records('Lab Test Template') + +class TestLabTestTemplate(unittest.TestCase): + pass diff --git a/erpnext/healthcare/doctype/lab_test_uom/__init__.py b/erpnext/healthcare/doctype/lab_test_uom/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/lab_test_uom/lab_test_uom.js b/erpnext/healthcare/doctype/lab_test_uom/lab_test_uom.js new file mode 100644 index 0000000000..2107e79c0f --- /dev/null +++ b/erpnext/healthcare/doctype/lab_test_uom/lab_test_uom.js @@ -0,0 +1,5 @@ +// Copyright (c) 2016, ESS and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Lab Test UOM', { +}); diff --git a/erpnext/healthcare/doctype/lab_test_uom/lab_test_uom.json b/erpnext/healthcare/doctype/lab_test_uom/lab_test_uom.json new file mode 100644 index 0000000000..daa533dfa6 --- /dev/null +++ b/erpnext/healthcare/doctype/lab_test_uom/lab_test_uom.json @@ -0,0 +1,145 @@ +{ + "allow_copy": 1, + "allow_guest_to_view": 0, + "allow_import": 1, + "allow_rename": 1, + "autoname": "field:test_uom", + "beta": 1, + "creation": "2016-03-29 17:28:08.630148", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Setup", + "editable_grid": 0, + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "test_uom", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Test UOM", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "uom_description", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Description", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2017-08-31 13:41:40.186676", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Lab Test UOM", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Healthcare Administrator", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Laboratory User", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 0 + } + ], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "search_fields": "test_uom", + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "test_uom", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/lab_test_uom/lab_test_uom.py b/erpnext/healthcare/doctype/lab_test_uom/lab_test_uom.py new file mode 100644 index 0000000000..7ce8d2d1c8 --- /dev/null +++ b/erpnext/healthcare/doctype/lab_test_uom/lab_test_uom.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document + +class LabTestUOM(Document): + pass diff --git a/erpnext/healthcare/doctype/lab_test_uom/test_lab_test_uom.js b/erpnext/healthcare/doctype/lab_test_uom/test_lab_test_uom.js new file mode 100644 index 0000000000..1328dda282 --- /dev/null +++ b/erpnext/healthcare/doctype/lab_test_uom/test_lab_test_uom.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Lab Test UOM", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially([ + // insert a new Lab Test UOM + () => frappe.tests.make('Lab Test UOM', [ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/healthcare/doctype/lab_test_uom/test_lab_test_uom.py b/erpnext/healthcare/doctype/lab_test_uom/test_lab_test_uom.py new file mode 100644 index 0000000000..0b3f516497 --- /dev/null +++ b/erpnext/healthcare/doctype/lab_test_uom/test_lab_test_uom.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS and Contributors +# See license.txt +from __future__ import unicode_literals +import unittest + +# test_records = frappe.get_test_records('Lab Test UOM') + +class TestLabTestUOM(unittest.TestCase): + pass diff --git a/erpnext/healthcare/doctype/medical_code/__init__.py b/erpnext/healthcare/doctype/medical_code/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/medical_code/medical_code.js b/erpnext/healthcare/doctype/medical_code/medical_code.js new file mode 100644 index 0000000000..0422d77435 --- /dev/null +++ b/erpnext/healthcare/doctype/medical_code/medical_code.js @@ -0,0 +1,5 @@ +// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Medical Code', { +}); diff --git a/erpnext/healthcare/doctype/medical_code/medical_code.json b/erpnext/healthcare/doctype/medical_code/medical_code.json new file mode 100644 index 0000000000..71a2278b07 --- /dev/null +++ b/erpnext/healthcare/doctype/medical_code/medical_code.json @@ -0,0 +1,156 @@ +{ + "allow_copy": 1, + "allow_guest_to_view": 0, + "allow_import": 1, + "allow_rename": 1, + "beta": 1, + "creation": "2017-06-21 13:02:56.122897", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "medical_code_standard", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Medical Code Standard", + "length": 0, + "no_copy": 0, + "options": "Medical Code Standard", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "code", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Code", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 1, + "collapsible": 0, + "columns": 0, + "fieldname": "description", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Description", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2017-08-31 14:01:18.817484", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Medical Code", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Physician", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + } + ], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "search_fields": "code, description", + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/medical_code/medical_code.py b/erpnext/healthcare/doctype/medical_code/medical_code.py new file mode 100644 index 0000000000..0deaac38ca --- /dev/null +++ b/erpnext/healthcare/doctype/medical_code/medical_code.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document + +class MedicalCode(Document): + def autoname(self): + self.name = self.medical_code_standard+" "+self.code diff --git a/erpnext/healthcare/doctype/medical_code/test_medical_code.js b/erpnext/healthcare/doctype/medical_code/test_medical_code.js new file mode 100644 index 0000000000..8cc7c40025 --- /dev/null +++ b/erpnext/healthcare/doctype/medical_code/test_medical_code.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Medical Code", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially([ + // insert a new Medical Code + () => frappe.tests.make('Medical Code', [ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/healthcare/doctype/medical_code/test_medical_code.py b/erpnext/healthcare/doctype/medical_code/test_medical_code.py new file mode 100644 index 0000000000..b1e0402790 --- /dev/null +++ b/erpnext/healthcare/doctype/medical_code/test_medical_code.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors +# See license.txt +from __future__ import unicode_literals +import unittest + +class TestMedicalCode(unittest.TestCase): + pass diff --git a/erpnext/healthcare/doctype/medical_code_standard/__init__.py b/erpnext/healthcare/doctype/medical_code_standard/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/medical_code_standard/medical_code_standard.js b/erpnext/healthcare/doctype/medical_code_standard/medical_code_standard.js new file mode 100644 index 0000000000..4bf6d3ea16 --- /dev/null +++ b/erpnext/healthcare/doctype/medical_code_standard/medical_code_standard.js @@ -0,0 +1,5 @@ +// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Medical Code Standard', { +}); diff --git a/erpnext/healthcare/doctype/medical_code_standard/medical_code_standard.json b/erpnext/healthcare/doctype/medical_code_standard/medical_code_standard.json new file mode 100644 index 0000000000..886938d12f --- /dev/null +++ b/erpnext/healthcare/doctype/medical_code_standard/medical_code_standard.json @@ -0,0 +1,94 @@ +{ + "allow_copy": 1, + "allow_guest_to_view": 0, + "allow_import": 1, + "allow_rename": 1, + "autoname": "field:medical_code", + "beta": 1, + "creation": "2017-06-21 13:07:00.463176", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "medical_code", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Medical Code", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2017-08-31 14:15:40.820693", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Medical Code Standard", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Physician", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + } + ], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/medical_code_standard/medical_code_standard.py b/erpnext/healthcare/doctype/medical_code_standard/medical_code_standard.py new file mode 100644 index 0000000000..7b2731c1de --- /dev/null +++ b/erpnext/healthcare/doctype/medical_code_standard/medical_code_standard.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document + +class MedicalCodeStandard(Document): + pass diff --git a/erpnext/healthcare/doctype/medical_code_standard/test_medical_code_standard.js b/erpnext/healthcare/doctype/medical_code_standard/test_medical_code_standard.js new file mode 100644 index 0000000000..6ab6d531df --- /dev/null +++ b/erpnext/healthcare/doctype/medical_code_standard/test_medical_code_standard.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Medical Code Standard", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially([ + // insert a new Medical Code Standard + () => frappe.tests.make('Medical Code Standard', [ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/healthcare/doctype/medical_code_standard/test_medical_code_standard.py b/erpnext/healthcare/doctype/medical_code_standard/test_medical_code_standard.py new file mode 100644 index 0000000000..fde095d809 --- /dev/null +++ b/erpnext/healthcare/doctype/medical_code_standard/test_medical_code_standard.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors +# See license.txt +from __future__ import unicode_literals +import unittest + +class TestMedicalCodeStandard(unittest.TestCase): + pass diff --git a/erpnext/healthcare/doctype/medical_department/__init__.py b/erpnext/healthcare/doctype/medical_department/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/medical_department/medical_department.js b/erpnext/healthcare/doctype/medical_department/medical_department.js new file mode 100644 index 0000000000..25aeeb85e2 --- /dev/null +++ b/erpnext/healthcare/doctype/medical_department/medical_department.js @@ -0,0 +1,5 @@ +// Copyright (c) 2016, ESS LLP and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Medical Department', { +}); diff --git a/erpnext/healthcare/doctype/medical_department/medical_department.json b/erpnext/healthcare/doctype/medical_department/medical_department.json new file mode 100644 index 0000000000..40f14caf72 --- /dev/null +++ b/erpnext/healthcare/doctype/medical_department/medical_department.json @@ -0,0 +1,156 @@ +{ + "allow_copy": 1, + "allow_guest_to_view": 0, + "allow_import": 1, + "allow_rename": 1, + "autoname": "field:department", + "beta": 1, + "creation": "2017-02-27 13:38:30.806362", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "department", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Department", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2017-08-31 13:41:59.611698", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Medical Department", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Physician", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Nursing User", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Laboratory User", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Healthcare Administrator", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + } + ], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "search_fields": "department", + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "department", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/medical_department/medical_department.py b/erpnext/healthcare/doctype/medical_department/medical_department.py new file mode 100644 index 0000000000..0f2d4fc5f9 --- /dev/null +++ b/erpnext/healthcare/doctype/medical_department/medical_department.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS LLP and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document + +class MedicalDepartment(Document): + pass diff --git a/erpnext/healthcare/doctype/medical_department/test_medical_department.js b/erpnext/healthcare/doctype/medical_department/test_medical_department.js new file mode 100644 index 0000000000..fdf49718dc --- /dev/null +++ b/erpnext/healthcare/doctype/medical_department/test_medical_department.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Medical Department", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially([ + // insert a new Medical Department + () => frappe.tests.make('Medical Department', [ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/healthcare/doctype/medical_department/test_medical_department.py b/erpnext/healthcare/doctype/medical_department/test_medical_department.py new file mode 100644 index 0000000000..543750a7e7 --- /dev/null +++ b/erpnext/healthcare/doctype/medical_department/test_medical_department.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS LLP and Contributors +# See license.txt +from __future__ import unicode_literals +import unittest + +# test_records = frappe.get_test_records('Medical Department') + +class TestMedicalDepartment(unittest.TestCase): + pass diff --git a/erpnext/healthcare/doctype/normal_test_items/__init__.py b/erpnext/healthcare/doctype/normal_test_items/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/normal_test_items/normal_test_items.js b/erpnext/healthcare/doctype/normal_test_items/normal_test_items.js new file mode 100644 index 0000000000..0371ddd5c9 --- /dev/null +++ b/erpnext/healthcare/doctype/normal_test_items/normal_test_items.js @@ -0,0 +1,4 @@ +// Copyright (c) 2016, ESS +// License: ESS license.txt + + diff --git a/erpnext/healthcare/doctype/normal_test_items/normal_test_items.json b/erpnext/healthcare/doctype/normal_test_items/normal_test_items.json new file mode 100644 index 0000000000..9e754a74dc --- /dev/null +++ b/erpnext/healthcare/doctype/normal_test_items/normal_test_items.json @@ -0,0 +1,284 @@ +{ + "allow_copy": 1, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 1, + "creation": "2016-02-22 15:06:08.295224", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Document", + "editable_grid": 1, + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "test_name", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Test Name", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "test_event", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Event", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:doc.require_result_value == 1 ", + "fieldname": "result_value", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Result Value", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "test_uom", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "UOM", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "normal_range", + "fieldtype": "Long Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Normal Range", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "test_comment", + "fieldtype": "Data", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Comment", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "0", + "fieldname": "require_result_value", + "fieldtype": "Check", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Require Result Value", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "template", + "fieldtype": "Link", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Template", + "length": 0, + "no_copy": 0, + "options": "Lab Test Template", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "max_attachments": 0, + "modified": "2017-08-31 13:59:33.202695", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Normal Test Items", + "name_case": "", + "owner": "Administrator", + "permissions": [], + "quick_entry": 0, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 0, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/normal_test_items/normal_test_items.py b/erpnext/healthcare/doctype/normal_test_items/normal_test_items.py new file mode 100644 index 0000000000..a0069d7252 --- /dev/null +++ b/erpnext/healthcare/doctype/normal_test_items/normal_test_items.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document + +class NormalTestItems(Document): + pass diff --git a/erpnext/healthcare/doctype/normal_test_template/__init__.py b/erpnext/healthcare/doctype/normal_test_template/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/normal_test_template/normal_test_template.json b/erpnext/healthcare/doctype/normal_test_template/normal_test_template.json new file mode 100644 index 0000000000..ef5abd5652 --- /dev/null +++ b/erpnext/healthcare/doctype/normal_test_template/normal_test_template.json @@ -0,0 +1,191 @@ +{ + "allow_copy": 1, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 1, + "creation": "2016-02-22 16:09:54.310628", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Setup", + "editable_grid": 1, + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "heading_text", + "fieldtype": "Heading", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Test", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "test_event", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Event", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "test_uom", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "UOM", + "length": 0, + "no_copy": 0, + "options": "Lab Test UOM", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "normal_range", + "fieldtype": "Long Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Normal Range", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_5", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "max_attachments": 0, + "modified": "2017-08-31 14:07:11.277187", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Normal Test Template", + "name_case": "", + "owner": "Administrator", + "permissions": [], + "quick_entry": 0, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 0, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/normal_test_template/normal_test_template.py b/erpnext/healthcare/doctype/normal_test_template/normal_test_template.py new file mode 100644 index 0000000000..bc2c991484 --- /dev/null +++ b/erpnext/healthcare/doctype/normal_test_template/normal_test_template.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document + +class NormalTestTemplate(Document): + pass diff --git a/erpnext/healthcare/doctype/patient/__init__.py b/erpnext/healthcare/doctype/patient/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/patient/patient.js b/erpnext/healthcare/doctype/patient/patient.js new file mode 100644 index 0000000000..57e5eef8d9 --- /dev/null +++ b/erpnext/healthcare/doctype/patient/patient.js @@ -0,0 +1,119 @@ +// Copyright (c) 2016, ESS LLP and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Patient', { + refresh: function (frm) { + frm.set_query("patient", "patient_relation", function () { + return { + filters: [ + ["Patient", "name", "!=", frm.doc.name] + ] + }; + }); + if (frappe.defaults.get_default("patient_master_name") != "Naming Series") { + frm.toggle_display("naming_series", false); + } else { + erpnext.toggle_naming_series(); + } + if (frappe.defaults.get_default("collect_registration_fee") && frm.doc.disabled == 1) { + frm.add_custom_button(__('Invoice Patient Registration'), function () { + btn_invoice_registration(frm); + }); + } + if (frm.doc.patient_name && frappe.user.has_role("Physician")) { + frm.add_custom_button(__('Medical Record'), function () { + frappe.route_options = { "patient": frm.doc.name }; + frappe.set_route("medical_record"); + },"View"); + } + if (!frm.doc.__islocal && (frappe.user.has_role("Nursing User") || frappe.user.has_role("Physician"))) { + frm.add_custom_button(__('Vital Signs'), function () { + btn_create_vital_signs(frm); + }, "Create"); + frm.add_custom_button(__('Medical Record'), function () { + create_medical_record(frm); + }, "Create"); + frm.add_custom_button(__('Consultation'), function () { + btn_create_consultation(frm); + }, "Create"); + } + }, + onload: function (frm) { + if(!frm.doc.dob){ + $(frm.fields_dict['age_html'].wrapper).html("Age not specified"); + } + if(frm.doc.dob){ + $(frm.fields_dict['age_html'].wrapper).html("AGE : " + get_age(frm.doc.dob)); + } + } +}); + +frappe.ui.form.on("Patient", "dob", function(frm) { + if(frm.doc.dob){ + var today = new Date(); + var birthDate = new Date(frm.doc.dob); + if(today < birthDate){ + frappe.msgprint("Please select a valid Date"); + frappe.model.set_value(frm.doctype,frm.docname, "dob", ""); + } + else{ + var age_str = get_age(frm.doc.dob); + $(frm.fields_dict['age_html'].wrapper).html("AGE : " + age_str); + } + } +}); + +var create_medical_record = function (frm) { + frappe.route_options = { + "patient": frm.doc.name, + "status": "Open", + "reference_doctype": "Patient Medical Record", + "reference_owner": frm.doc.owner + }; + frappe.new_doc("Patient Medical Record"); +}; + +var get_age = function (birth) { + var ageMS = Date.parse(Date()) - Date.parse(birth); + var age = new Date(); + age.setTime(ageMS); + var years = age.getFullYear() - 1970; + return years + " Year(s) " + age.getMonth() + " Month(s) " + age.getDate() + " Day(s)"; +}; + +var btn_create_vital_signs = function (frm) { + if (!frm.doc.name) { + frappe.throw("Please save the patient first"); + } + frappe.route_options = { + "patient": frm.doc.name, + }; + frappe.new_doc("Vital Signs"); +}; + +var btn_create_consultation = function (frm) { + if (!frm.doc.name) { + frappe.throw("Please save the patient first"); + } + frappe.route_options = { + "patient": frm.doc.name, + }; + frappe.new_doc("Consultation"); +}; + +var btn_invoice_registration = function (frm) { + frappe.call({ + doc: frm.doc, + method: "invoice_patient_registration", + callback: function(data){ + if(!data.exc){ + if(data.message.invoice){ + /* frappe.show_alert(__('Sales Invoice {0} created', + ['' + data.message.invoice+ ''])); */ + frappe.set_route("Form", "Sales Invoice", data.message.invoice); + } + cur_frm.reload_doc(); + } + } + }); +}; diff --git a/erpnext/healthcare/doctype/patient/patient.json b/erpnext/healthcare/doctype/patient/patient.json new file mode 100644 index 0000000000..f5ce458f7d --- /dev/null +++ b/erpnext/healthcare/doctype/patient/patient.json @@ -0,0 +1,1356 @@ +{ + "allow_copy": 1, + "allow_guest_to_view": 0, + "allow_import": 1, + "allow_rename": 0, + "autoname": "naming_series:", + "beta": 1, + "creation": "2017-01-23 14:03:49.084370", + "custom": 0, + "description": "Patient", + "docstatus": 0, + "doctype": "DocType", + "document_type": "Document", + "editable_grid": 0, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "basic_info", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Patient Demographics", + "length": 0, + "no_copy": 0, + "oldfieldtype": "Section Break", + "options": "fa fa-user", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "naming_series", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Patient ID", + "length": 0, + "no_copy": 0, + "options": "PID-", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 1, + "collapsible": 0, + "columns": 0, + "fieldname": "patient_name", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 1, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Full Name", + "length": 0, + "no_copy": 1, + "oldfieldtype": "Data", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 1, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "sex", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Gender", + "length": 0, + "no_copy": 0, + "options": "\nMale\nFemale", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "blood_group", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Blood Group", + "length": 0, + "no_copy": 0, + "options": "\nA Positive\nA Negative\nAB Positive\nAB Negative\nB Positive\nB Negative\nO Positive\nO Negative", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "dob", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "DOB", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "age_html", + "fieldtype": "HTML", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Age", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "Active", + "fieldname": "status", + "fieldtype": "Select", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Status", + "length": 0, + "no_copy": 0, + "options": "Active\nDormant\nOpen", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "image", + "fieldtype": "Attach Image", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Image", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0, + "width": "50%" + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_14", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "customer", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Customer", + "length": 0, + "no_copy": 0, + "options": "Customer", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 1, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "company", + "fieldtype": "Link", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Company", + "length": 0, + "no_copy": 0, + "options": "Company", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "report_preference", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Report Preference", + "length": 0, + "no_copy": 0, + "options": "\nEmail\nPrint", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "mobile", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Mobile", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "email", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Email", + "length": 0, + "no_copy": 0, + "options": "Email", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "phone", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 1, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Phone", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "0", + "fieldname": "disabled", + "fieldtype": "Check", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Disabled", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "sb_relation", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Patient Relation", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "patient_relation", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Patient Relation", + "length": 0, + "no_copy": 0, + "options": "Patient Relation", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "allergy_medical_and_surgical_history", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Allergies, Medical and Surgical History", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "allergies", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Allergies", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "medication", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Medication", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_20", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "medical_history", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Medical History", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "surgical_history", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Surgical History", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "personal_and_social_history", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Personal and Social History", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "occupation", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Occupation", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_25", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "marital_status", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Marital Status", + "length": 0, + "no_copy": 0, + "options": "Single\nMarried\nDivorced\nWidow", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "risk_factors", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Risk Factors", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "tobacco_past_use", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Tobacco Past Use", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "tobacco_current_use", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Tobacco Current Use", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "alcohol_past_use", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Alcohol Past Use", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "alcohol_current_use", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Alcohol Current Use", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_32", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "surrounding_factors", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Occupational Hazards and Environmental Factors", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "other_risk_factors", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Other Risk Factors", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "collapsible_depends_on": "patient_details", + "columns": 0, + "fieldname": "more_info", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "More Information", + "length": 0, + "no_copy": 0, + "oldfieldtype": "Section Break", + "options": "fa fa-file-text", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "Additional information regarding the patient", + "fieldname": "patient_details", + "fieldtype": "Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Patient Details", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "ac_sb", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Account Details", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "default_currency", + "fieldtype": "Link", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Default Currency", + "length": 0, + "no_copy": 0, + "options": "Currency", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "icon": "fa fa-user", + "idx": 0, + "image_field": "image", + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 50, + "modified": "2017-08-31 13:50:25.474398", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Patient", + "name_case": "Title Case", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Physician", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Laboratory User", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Nursing User", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + } + ], + "quick_entry": 0, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "search_fields": "patient_name,mobile,email,phone", + "show_name_in_global_search": 1, + "sort_field": "modified", + "sort_order": "ASC", + "title_field": "patient_name", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/patient/patient.py b/erpnext/healthcare/doctype/patient/patient.py new file mode 100644 index 0000000000..98526cc027 --- /dev/null +++ b/erpnext/healthcare/doctype/patient/patient.py @@ -0,0 +1,122 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS LLP and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe import _ +from frappe.model.document import Document +from frappe.utils import cint, cstr, getdate +import dateutil +from frappe.model.naming import make_autoname +from erpnext.healthcare.doctype.healthcare_settings.healthcare_settings import get_receivable_account,get_income_account,send_registration_sms + +class Patient(Document): + def after_insert(self): + if(frappe.db.get_value("Healthcare Settings", None, "manage_customer") == '1' and not self.customer): + create_customer(self) + if(frappe.db.get_value("Healthcare Settings", None, "collect_registration_fee") == '1'): + frappe.db.set_value("Patient", self.name, "disabled", 1) + else: + send_registration_sms(self) + self.reload() + + def on_update(self): + self.add_as_website_user() + + def add_as_website_user(self): + if(self.email): + if not frappe.db.exists ("User", self.email): + user = frappe.get_doc({ + "doctype": "User", + "first_name": self.patient_name, + "email": self.email, + "user_type": "Website User" + }) + user.flags.no_welcome_email = True + user.flags.ignore_permissions = True + user.add_roles("Patient") + + def autoname(self): + patient_master_name = frappe.defaults.get_global_default('patient_master_name') + if patient_master_name == 'Patient Name': + self.name = self.get_patient_name() + else: + if not self.naming_series: + frappe.throw(_("Series is mandatory"), frappe.MandatoryError) + + self.name = make_autoname(self.naming_series+'.#####') + + def get_patient_name(self): + name = self.patient_name + if frappe.db.get_value("Patient", name): + count = frappe.db.sql("""select ifnull(MAX(CAST(SUBSTRING_INDEX(name, ' ', -1) AS UNSIGNED)), 0) from tabPatient + where name like %s""", "%{0} - %".format(name), as_list=1)[0][0] + count = cint(count) + 1 + return "{0} - {1}".format(name, cstr(count)) + + return name + + def get_age(self): + age_str = "" + if self.dob: + born = getdate(self.dob) + age = dateutil.relativedelta.relativedelta(getdate(), born) + age_str = str(age.years) + " year(s) " + str(age.months) + " month(s) " + str(age.days) + " day(s)" + return age_str + + def invoice_patient_registration(self): + frappe.db.set_value("Patient", self.name, "disabled", 0) + send_registration_sms(self) + if(frappe.get_value("Healthcare Settings", None, "registration_fee")>0): + sales_invoice = make_invoice(self.name, self.company) + sales_invoice.save(ignore_permissions=True) + return {'invoice': sales_invoice.name} + +def create_customer(doc): + customer_group = frappe.get_value("Selling Settings", None, "customer_group") + territory = frappe.get_value("Selling Settings", None, "territory") + if not (customer_group and territory): + customer_group = "Commercial" + territory = "Rest Of The World" + frappe.msgprint(_("Please set default customer group and territory in Selling Settings"), alert=True) + customer = frappe.get_doc({"doctype": "Customer", + "customer_name": doc.name, + "customer_group": customer_group, + "territory" : territory, + "customer_type": "Individual" + }).insert(ignore_permissions=True) + frappe.db.set_value("Patient", doc.name, "customer", customer.name) + frappe.msgprint(_("Customer {0} is created.").format(customer.name), alert=True) + +def make_invoice(patient, company): + sales_invoice = frappe.new_doc("Sales Invoice") + sales_invoice.customer = frappe.get_value("Patient", patient, "customer") + sales_invoice.due_date = getdate() + sales_invoice.company = company + sales_invoice.is_pos = '0' + sales_invoice.debit_to = get_receivable_account(company) + + item_line = sales_invoice.append("items") + item_line.item_name = "Registeration Fee" + item_line.description = "Registeration Fee" + item_line.qty = 1 + item_line.uom = "Nos" + item_line.conversion_factor = 1 + item_line.income_account = get_income_account(None, company) + item_line.rate = frappe.get_value("Healthcare Settings", None, "registration_fee") + item_line.amount = item_line.rate + sales_invoice.set_missing_values() + return sales_invoice + +@frappe.whitelist() +def get_patient_detail(patient, company=None): + patient_dict = frappe.db.sql(_("""select * from tabPatient where name='{0}'""").format(patient), as_dict=1) + if not patient_dict: + frappe.throw("Patient not found") + vital_sign = frappe.db.sql(_("""select * from `tabVital Signs` where patient='{0}' order by signs_date desc limit 1""").format(patient), as_dict=1) + + details = patient_dict[0] + if vital_sign: + details.update(vital_sign[0]) + return details diff --git a/erpnext/healthcare/doctype/patient/patient_dashboard.py b/erpnext/healthcare/doctype/patient/patient_dashboard.py new file mode 100644 index 0000000000..cb98f0dcf4 --- /dev/null +++ b/erpnext/healthcare/doctype/patient/patient_dashboard.py @@ -0,0 +1,18 @@ +from frappe import _ + +def get_data(): + return { + 'heatmap': True, + 'heatmap_message': _('This is based on transactions against this Patient. See timeline below for details'), + 'fieldname': 'patient', + 'transactions': [ + { + 'label': _('Appointments and Consultations'), + 'items': ['Patient Appointment', 'Consultation'] + }, + { + 'label': _('Lab Tests'), + 'items': ['Lab Test'] + } + ] + } diff --git a/erpnext/healthcare/doctype/patient/test_patient.js b/erpnext/healthcare/doctype/patient/test_patient.js new file mode 100644 index 0000000000..e1d9ecbd24 --- /dev/null +++ b/erpnext/healthcare/doctype/patient/test_patient.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Patient", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially('Patient', [ + // insert a new Patient + () => frappe.tests.make([ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/healthcare/doctype/patient/test_patient.py b/erpnext/healthcare/doctype/patient/test_patient.py new file mode 100644 index 0000000000..aebaa6b989 --- /dev/null +++ b/erpnext/healthcare/doctype/patient/test_patient.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS LLP and Contributors +# See license.txt +from __future__ import unicode_literals + +import unittest + +# test_records = frappe.get_test_records('Patient') + +class TestPatient(unittest.TestCase): + pass diff --git a/erpnext/healthcare/doctype/patient_appointment/__init__.py b/erpnext/healthcare/doctype/patient_appointment/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/patient_appointment/patient_appointment.js b/erpnext/healthcare/doctype/patient_appointment/patient_appointment.js new file mode 100644 index 0000000000..86b18842cb --- /dev/null +++ b/erpnext/healthcare/doctype/patient_appointment/patient_appointment.js @@ -0,0 +1,256 @@ +// Copyright (c) 2016, ESS LLP and contributors +// For license information, please see license.txt +frappe.provide("erpnext.queries"); +frappe.ui.form.on('Patient Appointment', { + setup: function(frm) { + frm.custom_make_buttons = { + 'Sales Invoice': 'Invoice', + 'Vital Signs': 'Vital Signs', + 'Consultation': 'Consultation' + }; + }, + refresh: function(frm) { + frm.set_query("patient", function () { + return { + filters: {"disabled": 0} + }; + }); + if(frm.doc.patient){ + frm.add_custom_button(__('Medical Record'), function() { + frappe.route_options = {"patient": frm.doc.patient}; + frappe.set_route("medical_record"); + },__("View")); + } + if(frm.doc.status == "Open"){ + frm.add_custom_button(__('Cancel'), function() { + btn_update_status(frm, "Cancelled"); + }); + } + if(frm.doc.status == "Scheduled" && !frm.doc.__islocal){ + frm.add_custom_button(__('Cancel'), function() { + btn_update_status(frm, "Cancelled"); + }); + } + if(frm.doc.status == "Pending"){ + frm.add_custom_button(__('Set Open'), function() { + btn_update_status(frm, "Open"); + }); + frm.add_custom_button(__('Cancel'), function() { + btn_update_status(frm, "Cancelled"); + }); + } + + frm.add_custom_button(__("Consultation"),function(){ + btn_create_consultation(frm); + },"Create"); + + frm.add_custom_button(__('Vital Signs'), function() { + btn_create_vital_signs(frm); + },"Create"); + + if(!frm.doc.__islocal){ + if(frm.doc.sales_invoice && frappe.user.has_role("Accounts User")){ + frm.add_custom_button(__('Invoice'), function() { + frappe.set_route("Form", "Sales Invoice", frm.doc.sales_invoice); + },__("View") ); + } + else if(frm.doc.status != "Cancelled" && frappe.user.has_role("Accounts User")){ + frm.add_custom_button(__('Invoice'), function() { + btn_invoice_consultation(frm); + },__("Create")); + } + } + }, + check_availability: function(frm) { + var { physician, appointment_date } = frm.doc; + if(!(physician && appointment_date)) { + frappe.throw(__("Please select Physician and Date")); + } + + // show booking modal + frm.call({ + method: 'get_availability_data', + args: { + physician: physician, + date: appointment_date + }, + callback: (r) => { + // console.log(r); + var data = r.message; + if(data.available_slots.length > 0) { + show_availability(data); + } else { + show_empty_state(); + } + } + }); + + function show_empty_state() { + frappe.msgprint({ + title: __('Not Available'), + message: __("Physician {0} not available on {1}", [physician.bold(), appointment_date.bold()]), + indicator: 'red' + }); + } + + function show_availability(data) { + var d = new frappe.ui.Dialog({ + title: __("Available slots"), + fields: [{ fieldtype: 'HTML', fieldname: 'available_slots'}], + primary_action_label: __("Book"), + primary_action: function() { + // book slot + frm.set_value('appointment_time', selected_slot); + frm.set_value('duration', data.time_per_appointment); + d.hide(); + frm.save(); + } + }); + var $wrapper = d.fields_dict.available_slots.$wrapper; + var selected_slot = null; + + // disable dialog action initially + d.get_primary_btn().attr('disabled', true); + + // make buttons for each slot + var slot_html = data.available_slots.map(slot => { + return ``; + }).join(""); + + $wrapper + .css('margin-bottom', 0) + .addClass('text-center') + .html(slot_html); + + // disable buttons for which appointments are booked + data.appointments.map(slot => { + if(slot.status == "Scheduled" || slot.status == "Open" || slot.status == "Closed"){ + $wrapper + .find(`button[data-name="${slot.appointment_time}"]`) + .attr('disabled', true); + } + }); + + // blue button when clicked + $wrapper.on('click', 'button', function() { + var $btn = $(this); + $wrapper.find('button').removeClass('btn-primary'); + $btn.addClass('btn-primary'); + selected_slot = $btn.attr('data-name'); + + // enable dialog action + d.get_primary_btn().attr('disabled', null); + }); + + d.show(); + } + }, + onload:function(frm){ + if(frm.is_new()) { + frm.set_value("appointment_time", null); + frm.disable_save(); + } + }, +}); + +var btn_create_consultation = function(frm){ + var doc = frm.doc; + frappe.call({ + method:"erpnext.healthcare.doctype.patient_appointment.patient_appointment.create_consultation", + args: {appointment: doc.name}, + callback: function(data){ + if(!data.exc){ + var doclist = frappe.model.sync(data.message); + frappe.set_route("Form", doclist[0].doctype, doclist[0].name); + } + } + }); +}; + +var btn_create_vital_signs = function (frm) { + if(!frm.doc.patient){ + frappe.throw("Please select patient"); + } + frappe.route_options = { + "patient": frm.doc.patient, + }; + frappe.new_doc("Vital Signs"); +}; + +var btn_update_status = function(frm, status){ + var doc = frm.doc; + frappe.call({ + method: + "erpnext.healthcare.doctype.patient_appointment.patient_appointment.update_status", + args: {appointmentId: doc.name, status:status}, + callback: function(data){ + if(!data.exc){ + cur_frm.reload_doc(); + } + } + }); +}; + +var btn_invoice_consultation = function(frm){ + var doc = frm.doc; + frappe.call({ + method: + "erpnext.healthcare.doctype.patient_appointment.patient_appointment.create_invoice", + args: {company: doc.company, physician:doc.physician, patient: doc.patient, + appointment_id: doc.name, appointment_date:doc.appointment_date }, + callback: function(data){ + if(!data.exc){ + if(data.message){ + frappe.set_route("Form", "Sales Invoice", data.message); + } + cur_frm.reload_doc(); + } + } + }); +}; + +frappe.ui.form.on("Patient Appointment", "physician", function(frm) { + if(frm.doc.physician){ + frappe.call({ + "method": "frappe.client.get", + args: { + doctype: "Physician", + name: frm.doc.physician + }, + callback: function (data) { + frappe.model.set_value(frm.doctype,frm.docname, "department",data.message.department); + } + }); + } +}); + +frappe.ui.form.on("Patient Appointment", "patient", function(frm) { + if(frm.doc.patient){ + frappe.call({ + "method": "frappe.client.get", + args: { + doctype: "Patient", + name: frm.doc.patient + }, + callback: function (data) { + var age = null; + if(data.message.dob){ + age = calculate_age(data.message.dob); + } + frappe.model.set_value(frm.doctype,frm.docname, "patient_age", age); + } + }); + } +}); + +var calculate_age = function(birth) { + var ageMS = Date.parse(Date()) - Date.parse(birth); + var age = new Date(); + age.setTime(ageMS); + var years = age.getFullYear() - 1970; + return years + " Year(s) " + age.getMonth() + " Month(s) " + age.getDate() + " Day(s)"; +}; diff --git a/erpnext/healthcare/doctype/patient_appointment/patient_appointment.json b/erpnext/healthcare/doctype/patient_appointment/patient_appointment.json new file mode 100644 index 0000000000..9520e7766b --- /dev/null +++ b/erpnext/healthcare/doctype/patient_appointment/patient_appointment.json @@ -0,0 +1,817 @@ +{ + "allow_copy": 1, + "allow_guest_to_view": 0, + "allow_import": 1, + "allow_rename": 0, + "autoname": "OP-.######", + "beta": 1, + "creation": "2017-05-04 11:52:40.941507", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Document", + "editable_grid": 0, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "patient", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Patient", + "length": 0, + "no_copy": 0, + "options": "Patient", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 1, + "set_only_once": 1, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "physician", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Physician", + "length": 0, + "no_copy": 0, + "options": "Physician", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 1, + "set_only_once": 1, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "appointment_date", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Date", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 1, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:doc.__islocal", + "fieldname": "check_availability", + "fieldtype": "Button", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Check availability", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_1", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "Scheduled", + "fieldname": "status", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Status", + "length": 0, + "no_copy": 0, + "options": "\nScheduled\nOpen\nClosed\nPending\nCancelled", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 1, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "appointment_type", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Type", + "length": 0, + "no_copy": 0, + "options": "Appointment Type", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 1, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_1", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "appointment_time", + "fieldtype": "Time", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Time", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 1, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "In Minutes", + "fieldname": "duration", + "fieldtype": "Int", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Duration", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "appointment_datetime", + "fieldtype": "Datetime", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Date TIme", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 1, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_2", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "department", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Department", + "length": 0, + "no_copy": 0, + "options": "Medical Department", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 1, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "sales_invoice", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Sales Invoice", + "length": 0, + "no_copy": 0, + "options": "Sales Invoice", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_2", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "patient_details", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Patient Details", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "patient", + "fieldname": "patient_name", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Patient Name", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "patient_sex", + "fieldtype": "Data", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Gender", + "length": 0, + "no_copy": 0, + "options": "patient.sex", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "patient_age", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Patient Age", + "length": 0, + "no_copy": 0, + "options": "", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "company", + "fieldtype": "Link", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Company", + "length": 0, + "no_copy": 0, + "options": "Company", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "section_break_3", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "More Info", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "notes", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Notes", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "referring_physician", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Referring Physician", + "length": 0, + "no_copy": 0, + "options": "Physician", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 1, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "0", + "fieldname": "reminded", + "fieldtype": "Check", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Reminded", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2017-08-31 13:27:39.208298", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Patient Appointment", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Healthcare Administrator", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Physician", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + } + ], + "quick_entry": 0, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "search_fields": "patient, physician, appointment_datetime,department", + "show_name_in_global_search": 1, + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "patient", + "track_changes": 1, + "track_seen": 1 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py b/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py new file mode 100755 index 0000000000..eab2f2d004 --- /dev/null +++ b/erpnext/healthcare/doctype/patient_appointment/patient_appointment.py @@ -0,0 +1,244 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS LLP and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.document import Document +import json +from frappe.utils import getdate +from frappe import _ +import datetime +from frappe.core.doctype.sms_settings.sms_settings import send_sms +from erpnext.healthcare.doctype.healthcare_settings.healthcare_settings import get_receivable_account,get_income_account + +class PatientAppointment(Document): + def on_update(self): + today = datetime.date.today() + appointment_date = getdate(self.appointment_date) + #If appointment created for today set as open + if(today == appointment_date): + frappe.db.set_value("Patient Appointment",self.name,"status","Open") + self.reload() + + def after_insert(self): + #Check fee validity exists + appointment = self + validity_exist = validity_exists(appointment.physician, appointment.patient) + if validity_exist : + fee_validity = frappe.get_doc("Fee Validity",validity_exist[0][0]) + #Check if the validity is valid + appointment_date = getdate(appointment.appointment_date) + if((fee_validity.valid_till >= appointment_date) and (fee_validity.visited < fee_validity.max_visit)): + visited = fee_validity.visited + 1 + frappe.db.set_value("Fee Validity",fee_validity.name,"visited",visited) + if(fee_validity.ref_invoice): + frappe.db.set_value("Patient Appointment",appointment.name,"sales_invoice",fee_validity.ref_invoice) + frappe.msgprint(_("{0} has fee validity till {1}").format(appointment.patient, fee_validity.valid_till)) + confirm_sms(self) + +def appointment_cancel(appointmentId): + appointment = frappe.get_doc("Patient Appointment",appointmentId) + #If invoice --> fee_validity update with -1 visit + if (appointment.sales_invoice): + validity = frappe.db.exists({"doctype": "Fee Validity","ref_invoice": appointment.sales_invoice}) + if(validity): + fee_validity = frappe.get_doc("Fee Validity",validity[0][0]) + visited = fee_validity.visited - 1 + frappe.db.set_value("Fee Validity",fee_validity.name,"visited",visited) + if visited <= 0: + frappe.msgprint(_("Appointment cancelled, Please review and cancel the invoice {0}".format(appointment.sales_invoice))) + else: + frappe.msgprint(_("Appointment cancelled")) + +@frappe.whitelist() +def get_availability_data(date, physician): + # get availability data of 'physician' on 'date' + date = getdate(date) + weekday = date.strftime("%A") + + available_slots = [] + # get physicians schedule + physician_schedule_name = frappe.db.get_value("Physician", physician, "physician_schedule") + physician_schedule = frappe.get_doc("Physician Schedule", physician_schedule_name) + time_per_appointment = frappe.db.get_value("Physician", physician, "time_per_appointment") + + for t in physician_schedule.time_slots: + if weekday == t.day: + available_slots.append(t) + + # if physician not available return + if not available_slots: + # TODO: return available slots in nearby dates + frappe.throw(_("Physician not available on {0}").format(weekday)) + + # if physician on leave return + + # if holiday return + # if is_holiday(weekday): + + # get appointments on that day for physician + appointments = frappe.get_all( + "Patient Appointment", + filters={"physician": physician, "appointment_date": date}, + fields=["name", "appointment_time", "duration", "status"]) + + return { + "available_slots": available_slots, + "appointments": appointments, + "time_per_appointment": time_per_appointment + } + +@frappe.whitelist() +def update_status(appointmentId, status): + frappe.db.set_value("Patient Appointment",appointmentId,"status",status) + if(status=="Cancelled"): + appointment_cancel(appointmentId) + +@frappe.whitelist() +def set_open_appointments(): + today = getdate() + frappe.db.sql("""update `tabPatient Appointment` set status='Open' where status = 'Scheduled' and appointment_date = %s""",(today)) + +@frappe.whitelist() +def set_pending_appointments(): + today = getdate() + frappe.db.sql("""update `tabPatient Appointment` set status='Pending' where status in ('Scheduled','Open') and appointment_date < %s""",(today)) + +def confirm_sms(doc): + if (frappe.db.get_value("Healthcare Settings", None, "app_con")=='1'): + message = frappe.db.get_value("Healthcare Settings", None, "app_con_msg") + send_message(doc, message) + +@frappe.whitelist() +def create_invoice(company, physician, patient, appointment_id, appointment_date): + if not appointment_id: + return False + sales_invoice = frappe.new_doc("Sales Invoice") + sales_invoice.customer = frappe.get_value("Patient", patient, "customer") + sales_invoice.appointment = appointment_id + sales_invoice.due_date = getdate() + sales_invoice.is_pos = '0' + sales_invoice.debit_to = get_receivable_account(company) + + fee_validity = get_fee_validity(physician, patient, appointment_date) + create_invoice_items(appointment_id, physician, company, sales_invoice) + + sales_invoice.save(ignore_permissions=True) + frappe.db.sql(_("""update `tabPatient Appointment` set sales_invoice='{0}' where name='{1}'""").format(sales_invoice.name, appointment_id)) + frappe.db.set_value("Fee Validity", fee_validity.name, "ref_invoice", sales_invoice.name) + consultation = frappe.db.exists({ + "doctype": "Consultation", + "appointment": appointment_id}) + if consultation: + frappe.db.set_value("Consultation", consultation[0][0], "invoice", sales_invoice.name) + return sales_invoice.name + +def get_fee_validity(physician, patient, date): + validity_exist = validity_exists(physician, patient) + if validity_exist : + fee_validity = frappe.get_doc("Fee Validity",validity_exist[0][0]) + fee_validity = update_fee_validity(fee_validity, date) + else: + fee_validity = create_fee_validity(physician, patient, date) + return fee_validity + +def validity_exists(physician, patient): + return frappe.db.exists({ + "doctype": "Fee Validity", + "physician": physician, + "patient": patient}) + +def update_fee_validity(fee_validity, date): + max_visit = frappe.db.get_value("Healthcare Settings", None, "max_visit") + valid_days = frappe.db.get_value("Healthcare Settings", None, "valid_days") + if not valid_days: + valid_days = 1 + if not max_visit: + max_visit = 1 + date = getdate(date) + valid_till = date + datetime.timedelta(days=int(valid_days)) + fee_validity.max_visit = max_visit + fee_validity.visited = 1 + fee_validity.valid_till = valid_till + fee_validity.save(ignore_permissions=True) + return fee_validity + +def create_fee_validity(physician, patient, date): + fee_validity = frappe.new_doc("Fee Validity") + fee_validity.physician = physician + fee_validity.patient = patient + fee_validity = update_fee_validity(fee_validity, date) + return fee_validity + +def create_invoice_items(appointment_id, physician, company, invoice): + item_line = invoice.append("items") + item_line.item_name = "Consulting Charges" + item_line.description = "Consulting Charges: " + physician + item_line.qty = 1 + item_line.uom = "Nos" + item_line.conversion_factor = 1 + item_line.income_account = get_income_account(physician,company) + op_consulting_charge = frappe.db.get_value("Physician", physician, "op_consulting_charge") + if op_consulting_charge: + item_line.rate = op_consulting_charge + item_line.amount = op_consulting_charge + return invoice + +@frappe.whitelist() +def create_consultation(appointment): + appointment = frappe.get_doc("Patient Appointment",appointment) + consultation = frappe.new_doc("Consultation") + consultation.appointment = appointment.name + consultation.patient = appointment.patient + consultation.physician = appointment.physician + consultation.visit_department = appointment.department + consultation.patient_sex = appointment.patient_sex + consultation.consultation_date = appointment.appointment_date + if appointment.sales_invoice: + consultation.invoice = appointment.sales_invoice + return consultation.as_dict() + +def remind_appointment(): + if (frappe.db.get_value("Healthcare Settings", None, "app_rem")=='1'): + rem_before = datetime.datetime.strptime(frappe.get_value("Healthcare Settings", None, "rem_before"), "%H:%M:%S") + rem_dt = datetime.datetime.now() + datetime.timedelta(hours = rem_before.hour, minutes=rem_before.minute, seconds= rem_before.second) + + appointment_list = frappe.db.sql("select name from `tabPatient Appointment` where start_dt between %s and %s and reminded = 0 ", (datetime.datetime.now(), rem_dt)) + + for i in range (0,len(appointment_list)): + doc = frappe.get_doc("Patient Appointment", appointment_list[i][0]) + message = frappe.db.get_value("Healthcare Settings", None, "app_rem_msg") + send_message(doc, message) + frappe.db.set_value("Patient Appointment",doc.name,"reminded",1) + +def send_message(doc, message): + patient = frappe.get_doc("Patient",doc.patient) + if(patient.mobile): + context = {"doc": doc, "alert": doc, "comments": None} + if doc.get("_comments"): + context["comments"] = json.loads(doc.get("_comments")) + #jinja to string convertion happens here + message = frappe.render_template(message, context) + number = [patient.mobile] + send_sms(number,message) + +@frappe.whitelist() +def get_events(start, end, filters=None): + """Returns events for Gantt / Calendar view rendering. + + :param start: Start date-time. + :param end: End date-time. + :param filters: Filters (JSON). + """ + from frappe.desk.calendar import get_event_conditions + conditions = get_event_conditions("Patient Appointment", filters) + data = frappe.db.sql("""select name, patient, physician, status, + duration, timestamp(appointment_date, appointment_time) as + 'start' from `tabPatient Appointment` where + (appointment_date between %(start)s and %(end)s) + and docstatus < 2 {conditions}""".format(conditions=conditions), + {"start": start, "end": end}, as_dict=True, update={"allDay": 0}) + for item in data: + item.end = item.start + datetime.timedelta(minutes = item.duration) + return data diff --git a/erpnext/healthcare/doctype/patient_appointment/patient_appointment_calendar.js b/erpnext/healthcare/doctype/patient_appointment/patient_appointment_calendar.js new file mode 100644 index 0000000000..bfb53b83b8 --- /dev/null +++ b/erpnext/healthcare/doctype/patient_appointment/patient_appointment_calendar.js @@ -0,0 +1,44 @@ + +frappe.views.calendar["Patient Appointment"] = { + field_map: { + "start": "start", + "end": "end", + "id": "name", + "title": "patient", + "allDay": "allDay" + }, + gantt: true, + get_events_method: "erpnext.healthcare.doctype.patient_appointment.patient_appointment.get_events", + filters: [ + { + 'fieldtype': 'Link', + 'fieldname': 'physician', + 'options': 'Physician', + 'label': __('Physician') + }, + { + 'fieldtype': 'Link', + 'fieldname': 'patient', + 'options': 'Patient', + 'label': __('Patient') + }, + { + 'fieldtype': 'Link', + 'fieldname': 'appointment_type', + 'options': 'Appointment Type', + 'label': __('Appointment Type') + }, + { + 'fieldtype': 'Link', + 'fieldname': 'department', + 'options': 'Medical Department', + 'label': __('Department') + }, + { + 'fieldtype': 'Select', + 'fieldname': 'status', + 'options': 'Scheduled\nOpen\nClosed\nPending', + 'label': __('Status') + } + ] +}; diff --git a/erpnext/healthcare/doctype/patient_appointment/patient_appointment_dashboard.py b/erpnext/healthcare/doctype/patient_appointment/patient_appointment_dashboard.py new file mode 100644 index 0000000000..1862915cfc --- /dev/null +++ b/erpnext/healthcare/doctype/patient_appointment/patient_appointment_dashboard.py @@ -0,0 +1,19 @@ +from frappe import _ + +def get_data(): + return { + 'fieldname': 'appointment', + 'non_standard_fieldnames': { + 'Patient Medical Record': 'reference_name' + }, + 'transactions': [ + { + 'label': _('Consultations'), + 'items': ['Consultation', 'Vital Signs', 'Patient Medical Record'] + }, + { + 'label': _('Billing'), + 'items': ['Sales Invoice'] + } + ] + } diff --git a/erpnext/healthcare/doctype/patient_appointment/patient_appointment_list.js b/erpnext/healthcare/doctype/patient_appointment/patient_appointment_list.js new file mode 100644 index 0000000000..701cb69806 --- /dev/null +++ b/erpnext/healthcare/doctype/patient_appointment/patient_appointment_list.js @@ -0,0 +1,6 @@ +/* +(c) ESS 2015-16 +*/ +frappe.listview_settings['Patient Appointment'] = { + filters: [["status", "=", "Open"]], +}; diff --git a/erpnext/healthcare/doctype/patient_appointment/test_patient_appointment.js b/erpnext/healthcare/doctype/patient_appointment/test_patient_appointment.js new file mode 100644 index 0000000000..71fc177845 --- /dev/null +++ b/erpnext/healthcare/doctype/patient_appointment/test_patient_appointment.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Patient Appointment", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially([ + // insert a new Patient Appointment + () => frappe.tests.make('Patient Appointment', [ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/healthcare/doctype/patient_appointment/test_patient_appointment.py b/erpnext/healthcare/doctype/patient_appointment/test_patient_appointment.py new file mode 100644 index 0000000000..3536a5f951 --- /dev/null +++ b/erpnext/healthcare/doctype/patient_appointment/test_patient_appointment.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS LLP and Contributors +# See license.txt +from __future__ import unicode_literals +import unittest + +# test_records = frappe.get_test_records('Patient Appointment') + +class TestPatientAppointment(unittest.TestCase): + pass diff --git a/erpnext/healthcare/doctype/patient_medical_record/__init__.py b/erpnext/healthcare/doctype/patient_medical_record/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/patient_medical_record/patient_medical_record.js b/erpnext/healthcare/doctype/patient_medical_record/patient_medical_record.js new file mode 100644 index 0000000000..93ff70e643 --- /dev/null +++ b/erpnext/healthcare/doctype/patient_medical_record/patient_medical_record.js @@ -0,0 +1,5 @@ +// Copyright (c) 2016, ESS LLP and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Patient Medical Record', { +}); diff --git a/erpnext/healthcare/doctype/patient_medical_record/patient_medical_record.json b/erpnext/healthcare/doctype/patient_medical_record/patient_medical_record.json new file mode 100644 index 0000000000..06149230e6 --- /dev/null +++ b/erpnext/healthcare/doctype/patient_medical_record/patient_medical_record.json @@ -0,0 +1,430 @@ +{ + "allow_copy": 1, + "allow_guest_to_view": 0, + "allow_import": 1, + "allow_rename": 0, + "autoname": "naming_series:", + "beta": 1, + "creation": "2016-06-09 11:30:44.972056", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Setup", + "editable_grid": 0, + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "naming_series", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Series", + "length": 0, + "no_copy": 0, + "options": "PMR-", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "patient", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Patient", + "length": 0, + "no_copy": 0, + "options": "Patient", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 1, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_2", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "attach", + "fieldtype": "Attach", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_4", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "subject", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Subject", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "status", + "fieldtype": "Select", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Status", + "length": 0, + "no_copy": 0, + "options": "Open\nClose", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "Today", + "fieldname": "communication_date", + "fieldtype": "Date", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Datetime", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "reference_doctype", + "fieldtype": "Link", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Reference DocType", + "length": 0, + "no_copy": 0, + "options": "DocType", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 1, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "reference_name", + "fieldtype": "Dynamic Link", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Reference Name", + "length": 0, + "no_copy": 0, + "options": "reference_doctype", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "reference_owner", + "fieldtype": "Data", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Reference Owner", + "length": 0, + "no_copy": 0, + "options": "reference_name.owner", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "__user", + "fieldname": "user", + "fieldtype": "Link", + "hidden": 1, + "ignore_user_permissions": 1, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "User", + "length": 0, + "no_copy": 0, + "options": "User", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 1, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2017-09-04 14:29:48.679751", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Patient Medical Record", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Physician", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + } + ], + "quick_entry": 0, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "search_fields": "patient, subject, communication_date, reference_doctype, reference_name", + "show_name_in_global_search": 1, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1, + "track_seen": 1 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/patient_medical_record/patient_medical_record.py b/erpnext/healthcare/doctype/patient_medical_record/patient_medical_record.py new file mode 100644 index 0000000000..35e42bd6bd --- /dev/null +++ b/erpnext/healthcare/doctype/patient_medical_record/patient_medical_record.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS LLP and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.document import Document + +class PatientMedicalRecord(Document): + def after_insert(self): + if self.reference_doctype == "Patient Medical Record" : + frappe.db.set_value("Patient Medical Record", self.name, "reference_name", self.name) diff --git a/erpnext/healthcare/doctype/patient_medical_record/test_patient_medical_record.js b/erpnext/healthcare/doctype/patient_medical_record/test_patient_medical_record.js new file mode 100644 index 0000000000..66dda09e25 --- /dev/null +++ b/erpnext/healthcare/doctype/patient_medical_record/test_patient_medical_record.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Patient Medical Record", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially([ + // insert a new Patient Medical Record + () => frappe.tests.make('Patient Medical Record', [ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/healthcare/doctype/patient_medical_record/test_patient_medical_record.py b/erpnext/healthcare/doctype/patient_medical_record/test_patient_medical_record.py new file mode 100644 index 0000000000..460774a7ec --- /dev/null +++ b/erpnext/healthcare/doctype/patient_medical_record/test_patient_medical_record.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS LLP and Contributors +# See license.txt +from __future__ import unicode_literals +import unittest + +# test_records = frappe.get_test_records('Patient Medical Record') + +class TestPatientMedicalRecord(unittest.TestCase): + pass diff --git a/erpnext/healthcare/doctype/patient_relation/__init__.py b/erpnext/healthcare/doctype/patient_relation/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/patient_relation/patient_relation.json b/erpnext/healthcare/doctype/patient_relation/patient_relation.json new file mode 100644 index 0000000000..e97e1b24c0 --- /dev/null +++ b/erpnext/healthcare/doctype/patient_relation/patient_relation.json @@ -0,0 +1,134 @@ +{ + "allow_copy": 1, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 1, + "creation": "2017-04-26 15:40:11.561855", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "relation", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Relation", + "length": 0, + "no_copy": 0, + "options": "\nFather\nMother\nSpouse\nSiblings\nFamily", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "patient", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Patient", + "length": 0, + "no_copy": 0, + "options": "Patient", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "description", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Description", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "max_attachments": 0, + "modified": "2017-08-31 14:13:37.497114", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Patient Relation", + "name_case": "", + "owner": "Administrator", + "permissions": [], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/patient_relation/patient_relation.py b/erpnext/healthcare/doctype/patient_relation/patient_relation.py new file mode 100644 index 0000000000..150b96200d --- /dev/null +++ b/erpnext/healthcare/doctype/patient_relation/patient_relation.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, ESS LLP and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document + +class PatientRelation(Document): + pass diff --git a/erpnext/healthcare/doctype/physician/__init__.py b/erpnext/healthcare/doctype/physician/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/physician/physician.js b/erpnext/healthcare/doctype/physician/physician.js new file mode 100755 index 0000000000..37389fe36a --- /dev/null +++ b/erpnext/healthcare/doctype/physician/physician.js @@ -0,0 +1,73 @@ +// Copyright (c) 2016, ESS LLP and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Physician', { + setup: function(frm) { + frm.set_query('account', 'accounts', function(doc, cdt, cdn) { + var d = locals[cdt][cdn]; + return { + filters: { + 'root_type': 'Income', + 'company': d.company, + } + }; + }); + }, + refresh: function(frm) { + frappe.dynamic_link = {doc: frm.doc, fieldname: 'name', doctype: 'Physician'}; + if(!frm.is_new()) { + frappe.contacts.render_address_and_contact(frm); + } + } +}); + +frappe.ui.form.on("Physician", "user_id",function(frm) { + if(frm.doc.user_id){ + frappe.call({ + "method": "frappe.client.get", + args: { + doctype: "User", + name: frm.doc.user_id + }, + callback: function (data) { + if(!frm.doc.employee){ + frappe.model.get_value('Employee', {'user_id': frm.doc.user_id}, 'name', + function(data) { + if(data) + frappe.model.set_value(frm.doctype,frm.docname, "employee", data.name); + }); + } + if(!frm.doc.first_name) + frappe.model.set_value(frm.doctype,frm.docname, "first_name", data.message.first_name); + if(!frm.doc.middle_name) + frappe.model.set_value(frm.doctype,frm.docname, "middle_name", data.message.middle_name); + if(!frm.doc.last_name) + frappe.model.set_value(frm.doctype,frm.docname, "last_name", data.message.last_name); + if(!frm.doc.mobile_phone) + frappe.model.set_value(frm.doctype,frm.docname, "mobile_phone", data.message.phone); + } + }); + } +}); + +frappe.ui.form.on("Physician", "employee", function(frm) { + if(frm.doc.employee){ + frappe.call({ + "method": "frappe.client.get", + args: { + doctype: "Employee", + name: frm.doc.employee + }, + callback: function (data) { + if(!frm.doc.designation) + frappe.model.set_value(frm.doctype,frm.docname, "designation", data.message.designation); + if(!frm.doc.first_name) + frappe.model.set_value(frm.doctype,frm.docname, "first_name", data.message.employee_name); + if(!frm.doc.mobile_phone) + frappe.model.set_value(frm.doctype,frm.docname, "mobile_phone", data.message.cell_number); + if(!frm.doc.address) + frappe.model.set_value(frm.doctype,frm.docname, "address", data.message.current_address); + } + }); + } +}); diff --git a/erpnext/healthcare/doctype/physician/physician.json b/erpnext/healthcare/doctype/physician/physician.json new file mode 100644 index 0000000000..565653b89c --- /dev/null +++ b/erpnext/healthcare/doctype/physician/physician.json @@ -0,0 +1,891 @@ +{ + "allow_copy": 1, + "allow_guest_to_view": 0, + "allow_import": 1, + "allow_rename": 1, + "autoname": "", + "beta": 1, + "creation": "2016-02-23 11:20:53.565119", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Setup", + "editable_grid": 0, + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "first_name", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "First Name", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "middle_name", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Middle Name (Optional)", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "last_name", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Last Name", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "image", + "fieldtype": "Attach Image", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Image", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "employee", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Employee", + "length": 0, + "no_copy": 0, + "options": "Employee", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "user_id", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "User", + "length": 0, + "no_copy": 0, + "options": "User", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "designation", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Designation", + "length": 0, + "no_copy": 0, + "options": "Designation", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "department", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Department", + "length": 0, + "no_copy": 0, + "options": "Medical Department", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_7", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "hospital", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Hospital", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "mobile_phone", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Mobile", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "residence_phone", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Phone (R)", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "office_phone", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Phone (Office)", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "appointments", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Appointments", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 1, + "collapsible": 0, + "columns": 0, + "fieldname": "physician_schedule", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Physician Schedule", + "length": 0, + "no_copy": 0, + "options": "Physician Schedule", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_17", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "time_per_appointment", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Time per Appointment", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "charges", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Charges", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "op_consulting_charge", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "OP Consulting Charge", + "length": 0, + "no_copy": 0, + "options": "Currency", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "contacts_and_address", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Contacts and Address", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "address_html", + "fieldtype": "HTML", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Address HTML", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_19", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "contact_html", + "fieldtype": "HTML", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Contact HTML", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "account_details", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Account Details", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "accounts", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Income Account", + "length": 0, + "no_copy": 0, + "options": "Party Account", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "default_currency", + "fieldtype": "Link", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Default Currency", + "length": 0, + "no_copy": 0, + "options": "Currency", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_field": "image", + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2017-08-31 13:51:28.975120", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Physician", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 0, + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Laboratory User", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Physician", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Nursing User", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + } + ], + "quick_entry": 0, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "search_fields": "first_name,mobile_phone,office_phone", + "show_name_in_global_search": 1, + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "first_name", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/physician/physician.py b/erpnext/healthcare/doctype/physician/physician.py new file mode 100644 index 0000000000..8680d5d127 --- /dev/null +++ b/erpnext/healthcare/doctype/physician/physician.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS LLP and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.document import Document +from frappe import throw, _ +from frappe.utils import cstr +from erpnext.accounts.party import validate_party_accounts +from frappe.contacts.address_and_contact import load_address_and_contact, delete_contact_and_address + +class Physician(Document): + def onload(self): + load_address_and_contact(self) + + def autoname(self): + # physician first_name and last_name + self.name = " ".join(filter(None, + [cstr(self.get(f)).strip() for f in ["first_name","middle_name","last_name"]])) + + def validate(self): + validate_party_accounts(self) + if self.user_id: + self.validate_for_enabled_user_id() + self.validate_duplicate_user_id() + existing_user_id = frappe.db.get_value("Physician", self.name, "user_id") + if(self.user_id != existing_user_id): + frappe.permissions.remove_user_permission( + "Physician", self.name, existing_user_id) + + + else: + existing_user_id = frappe.db.get_value("Physician", self.name, "user_id") + if existing_user_id: + frappe.permissions.remove_user_permission( + "Physician", self.name, existing_user_id) + + def on_update(self): + if self.user_id: + frappe.permissions.add_user_permission("Physician", self.name, self.user_id) + + + def validate_for_enabled_user_id(self): + enabled = frappe.db.get_value("User", self.user_id, "enabled") + if enabled is None: + frappe.throw(_("User {0} does not exist").format(self.user_id)) + if enabled == 0: + frappe.throw(_("User {0} is disabled").format(self.user_id)) + + def validate_duplicate_user_id(self): + physician = frappe.db.sql_list("""select name from `tabPhysician` where + user_id=%s and name!=%s""", (self.user_id, self.name)) + if physician: + throw(_("User {0} is already assigned to Physician {1}").format( + self.user_id, physician[0]), frappe.DuplicateEntryError) + + def on_trash(self): + delete_contact_and_address('Physician', self.name) diff --git a/erpnext/healthcare/doctype/physician/test_physician.js b/erpnext/healthcare/doctype/physician/test_physician.js new file mode 100644 index 0000000000..43750acaac --- /dev/null +++ b/erpnext/healthcare/doctype/physician/test_physician.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Physician", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially([ + // insert a new Physician + () => frappe.tests.make('Physician', [ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/healthcare/doctype/physician/test_physician.py b/erpnext/healthcare/doctype/physician/test_physician.py new file mode 100644 index 0000000000..b6ea92cc72 --- /dev/null +++ b/erpnext/healthcare/doctype/physician/test_physician.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS LLP and Contributors +# See license.txt +from __future__ import unicode_literals +import unittest + +# test_records = frappe.get_test_records('Physician') + +class TestPhysician(unittest.TestCase): + pass diff --git a/erpnext/healthcare/doctype/physician_schedule/__init__.py b/erpnext/healthcare/doctype/physician_schedule/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/physician_schedule/physician_schedule.js b/erpnext/healthcare/doctype/physician_schedule/physician_schedule.js new file mode 100644 index 0000000000..e198d35fd3 --- /dev/null +++ b/erpnext/healthcare/doctype/physician_schedule/physician_schedule.js @@ -0,0 +1,59 @@ +// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Physician Schedule', { + refresh: function(frm) { + frm.add_custom_button(__('Add Time Slots'), () => { + var d = new frappe.ui.Dialog({ + fields: [ + {fieldname: 'day', label: __('Day'), fieldtype:'Select', + options:[ + {value:'Sunday', label:__('Sunday')}, + {value:'Monday', label:__('Monday')}, + {value:'Tuesday', label:__('Tuesday')}, + {value:'Wednesday', label:__('Wednesday')}, + {value:'Thursday', label:__('Thursday')}, + {value:'Friday', label:__('Friday')}, + {value:'Saturday', label:__('Saturday')}, + ], reqd: 1, 'default': 'Monday'}, + {fieldname: 'from_time', label:__('From'), fieldtype:'Time', + 'default': '09:00:00', reqd: 1}, + {fieldname: 'to_time', label:__('To'), fieldtype:'Time', + 'default': '12:00:00', reqd: 1}, + {fieldname: 'duration', label:__('Appointment Duration (mins)'), + fieldtype:'Int', 'default': 15, reqd: 1}, + ], + primary_action_label: __('Add Timeslots'), + primary_action: () => { + var values = d.get_values(); + if(values) { + let cur_time = moment(values.from_time, 'HH:mm:ss'); + let end_time = moment(values.to_time, 'HH:mm:ss'); + + + while(cur_time < end_time) { + let to_time = cur_time.clone().add(values.duration, 'minutes'); + if(to_time < end_time) { + + // add a new timeslot + frm.add_child('time_slots', { + from_time: cur_time.format('HH:mm:ss'), + to_time: to_time.format('HH:mm:ss'), + day: values.day + }); + } + cur_time = to_time; + } + + frm.refresh_field('time_slots'); + frappe.show_alert({ + message:__('Time slots added'), + indicator:'green' + }); + } + }, + }); + d.show(); + }); + } +}); diff --git a/erpnext/healthcare/doctype/physician_schedule/physician_schedule.json b/erpnext/healthcare/doctype/physician_schedule/physician_schedule.json new file mode 100644 index 0000000000..bd8e539c53 --- /dev/null +++ b/erpnext/healthcare/doctype/physician_schedule/physician_schedule.json @@ -0,0 +1,155 @@ +{ + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 1, + "allow_rename": 1, + "autoname": "field:schedule_name", + "beta": 1, + "creation": "2017-05-03 17:28:03.926787", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "schedule_name", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Schedule Name", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "time_slots", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Time Slots", + "length": 0, + "no_copy": 0, + "options": "Physician Schedule Time Slot", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "disabled", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Disabled", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2017-08-31 13:42:26.713507", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Physician Schedule", + "name_case": "", + "owner": "rmehta@gmail.com", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Healthcare Administrator", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + } + ], + "quick_entry": 0, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "show_name_in_global_search": 1, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/physician_schedule/physician_schedule.py b/erpnext/healthcare/doctype/physician_schedule/physician_schedule.py new file mode 100644 index 0000000000..5cbdd126a9 --- /dev/null +++ b/erpnext/healthcare/doctype/physician_schedule/physician_schedule.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document + +class PhysicianSchedule(Document): + pass diff --git a/erpnext/healthcare/doctype/physician_schedule/test_physician_schedule.js b/erpnext/healthcare/doctype/physician_schedule/test_physician_schedule.js new file mode 100644 index 0000000000..c397f18398 --- /dev/null +++ b/erpnext/healthcare/doctype/physician_schedule/test_physician_schedule.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Physician Schedule", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially([ + // insert a new Physician Schedule + () => frappe.tests.make('Physician Schedule', [ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/healthcare/doctype/physician_schedule/test_physician_schedule.py b/erpnext/healthcare/doctype/physician_schedule/test_physician_schedule.py new file mode 100644 index 0000000000..ece357882a --- /dev/null +++ b/erpnext/healthcare/doctype/physician_schedule/test_physician_schedule.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors +# See license.txt +from __future__ import unicode_literals +import unittest + +class TestPhysicianSchedule(unittest.TestCase): + pass diff --git a/erpnext/healthcare/doctype/physician_schedule_time_slot/__init__.py b/erpnext/healthcare/doctype/physician_schedule_time_slot/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/physician_schedule_time_slot/physician_schedule_time_slot.json b/erpnext/healthcare/doctype/physician_schedule_time_slot/physician_schedule_time_slot.json new file mode 100644 index 0000000000..8aece2bf95 --- /dev/null +++ b/erpnext/healthcare/doctype/physician_schedule_time_slot/physician_schedule_time_slot.json @@ -0,0 +1,133 @@ +{ + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 1, + "creation": "2017-05-03 17:27:07.466088", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "day", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Day", + "length": 0, + "no_copy": 0, + "options": "Sunday\nMonday\nTuesday\nWednesday\nThursday\nFriday\nSaturday", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "from_time", + "fieldtype": "Time", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "From Time", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "to_time", + "fieldtype": "Time", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "To Time", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "max_attachments": 0, + "modified": "2017-07-12 14:28:01.985998", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Physician Schedule Time Slot", + "name_case": "", + "owner": "rmehta@gmail.com", + "permissions": [], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/physician_schedule_time_slot/physician_schedule_time_slot.py b/erpnext/healthcare/doctype/physician_schedule_time_slot/physician_schedule_time_slot.py new file mode 100644 index 0000000000..abdce51b9a --- /dev/null +++ b/erpnext/healthcare/doctype/physician_schedule_time_slot/physician_schedule_time_slot.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document + +class PhysicianScheduleTimeSlot(Document): + pass diff --git a/erpnext/healthcare/doctype/prescription_dosage/__init__.py b/erpnext/healthcare/doctype/prescription_dosage/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/prescription_dosage/prescription_dosage.js b/erpnext/healthcare/doctype/prescription_dosage/prescription_dosage.js new file mode 100644 index 0000000000..94b444cbaa --- /dev/null +++ b/erpnext/healthcare/doctype/prescription_dosage/prescription_dosage.js @@ -0,0 +1,5 @@ +// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Prescription Dosage', { +}); diff --git a/erpnext/healthcare/doctype/prescription_dosage/prescription_dosage.json b/erpnext/healthcare/doctype/prescription_dosage/prescription_dosage.json new file mode 100644 index 0000000000..9c09506193 --- /dev/null +++ b/erpnext/healthcare/doctype/prescription_dosage/prescription_dosage.json @@ -0,0 +1,145 @@ +{ + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 1, + "allow_rename": 1, + "autoname": "field:dosage", + "beta": 1, + "creation": "2016-09-16 15:49:25.327610", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Document", + "editable_grid": 0, + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "dosage", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Dosage", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "dosage_strength", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "options": "Dosage Strength", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2017-08-31 13:42:40.305284", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Prescription Dosage", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Healthcare Administrator", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Physician", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + } + ], + "quick_entry": 0, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "search_fields": "dosage", + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/prescription_dosage/prescription_dosage.py b/erpnext/healthcare/doctype/prescription_dosage/prescription_dosage.py new file mode 100644 index 0000000000..dea263dca0 --- /dev/null +++ b/erpnext/healthcare/doctype/prescription_dosage/prescription_dosage.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document + +class PrescriptionDosage(Document): + pass diff --git a/erpnext/healthcare/doctype/prescription_dosage/test_prescription_dosage.js b/erpnext/healthcare/doctype/prescription_dosage/test_prescription_dosage.js new file mode 100644 index 0000000000..009614ff5d --- /dev/null +++ b/erpnext/healthcare/doctype/prescription_dosage/test_prescription_dosage.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Prescription Dosage", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially([ + // insert a new Prescription Dosage + () => frappe.tests.make('Prescription Dosage', [ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/healthcare/doctype/prescription_dosage/test_prescription_dosage.py b/erpnext/healthcare/doctype/prescription_dosage/test_prescription_dosage.py new file mode 100644 index 0000000000..e61a418896 --- /dev/null +++ b/erpnext/healthcare/doctype/prescription_dosage/test_prescription_dosage.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors +# See license.txt +from __future__ import unicode_literals +import unittest + +class TestPrescriptionDosage(unittest.TestCase): + pass diff --git a/erpnext/healthcare/doctype/prescription_duration/__init__.py b/erpnext/healthcare/doctype/prescription_duration/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/prescription_duration/prescription_duration.js b/erpnext/healthcare/doctype/prescription_duration/prescription_duration.js new file mode 100644 index 0000000000..dd5887c929 --- /dev/null +++ b/erpnext/healthcare/doctype/prescription_duration/prescription_duration.js @@ -0,0 +1,5 @@ +// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Prescription Duration', { +}); diff --git a/erpnext/healthcare/doctype/prescription_duration/prescription_duration.json b/erpnext/healthcare/doctype/prescription_duration/prescription_duration.json new file mode 100644 index 0000000000..c4f6c5f10d --- /dev/null +++ b/erpnext/healthcare/doctype/prescription_duration/prescription_duration.json @@ -0,0 +1,145 @@ +{ + "allow_copy": 1, + "allow_guest_to_view": 0, + "allow_import": 1, + "allow_rename": 1, + "autoname": "", + "beta": 1, + "creation": "2016-09-16 15:50:28.895789", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Document", + "editable_grid": 0, + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "number", + "fieldtype": "Int", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Number", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "period", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Period", + "length": 0, + "no_copy": 0, + "options": "Hour\nDay\nWeek\nMonth", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2017-08-31 13:42:51.325725", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Prescription Duration", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Healthcare Administrator", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + }, + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Physician", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + } + ], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "search_fields": "", + "show_name_in_global_search": 0, + "sort_field": "", + "sort_order": "ASC", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/prescription_duration/prescription_duration.py b/erpnext/healthcare/doctype/prescription_duration/prescription_duration.py new file mode 100644 index 0000000000..96ddf8dafe --- /dev/null +++ b/erpnext/healthcare/doctype/prescription_duration/prescription_duration.py @@ -0,0 +1,72 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document +from frappe.utils import cstr + +class PrescriptionDuration(Document): + def autoname(self): + self.name = " ".join(filter(None, + [cstr(self.get(f)).strip() for f in ["number", "period"]])) + def get_days(self): + days = 0 + duration = self + if(duration.period == 'Day'): + days = duration.number + if(duration.period == 'Hour'): + days = (duration.number)/24 + if(duration.period == 'Week'): + days = (duration.number*7) + if(duration.period == 'Month'): + days = (duration.number*30) + return days + def get_weeks(self): + weeks = 0 + duration = self + if(duration.period == 'Day'): + weeks = (duration.number)/7 + #if(duration.period == 'Hour'): + # weeks = (duration.number)/x + if(duration.period == 'Week'): + weeks = duration.number + if(duration.period == 'Month'): + weeks = duration.number*4 + return weeks + def get_months(self): + months = 0 + duration = self + if(duration.period == 'Day'): + months = (duration.number)/30 + #if(duration.period == 'Hour'): + # months = (duration.number)/x + if(duration.period == 'Week'): + months = (duration.number)/4 + if(duration.period == 'Month'): + months = duration.number + return months + def get_hours(self): + hours = 0 + duration = self + if(duration.period == 'Day'): + hours = (duration.number*24) + if(duration.period == 'Hour'): + hours = duration.number + if(duration.period == 'Week'): + hours = (duration.number*24)*7 + if(duration.period == 'Month'): + hours = (duration.number*24)*30 + return hours + def get_minutes(self): + minutes = 0 + duration = self + if(duration.period == 'Day'): + minutes = (duration.number*1440) + if(duration.period == 'Hour'): + minutes = (duration.number*60) + if(duration.period == 'Week'): + minutes = (duration.number*10080) + if(duration.period == 'Month'): + minutes = (duration.number*43800) + return minutes diff --git a/erpnext/healthcare/doctype/prescription_duration/test_prescription_duration.js b/erpnext/healthcare/doctype/prescription_duration/test_prescription_duration.js new file mode 100644 index 0000000000..4971e79198 --- /dev/null +++ b/erpnext/healthcare/doctype/prescription_duration/test_prescription_duration.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Prescription Duration", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially([ + // insert a new Prescription Duration + () => frappe.tests.make('Prescription Duration', [ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/healthcare/doctype/prescription_duration/test_prescription_duration.py b/erpnext/healthcare/doctype/prescription_duration/test_prescription_duration.py new file mode 100644 index 0000000000..fe5524c5aa --- /dev/null +++ b/erpnext/healthcare/doctype/prescription_duration/test_prescription_duration.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors +# See license.txt +from __future__ import unicode_literals +import unittest + +class TestPrescriptionDuration(unittest.TestCase): + pass diff --git a/erpnext/healthcare/doctype/sample_collection/__init__.py b/erpnext/healthcare/doctype/sample_collection/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/sample_collection/sample_collection.js b/erpnext/healthcare/doctype/sample_collection/sample_collection.js new file mode 100644 index 0000000000..9934ce4845 --- /dev/null +++ b/erpnext/healthcare/doctype/sample_collection/sample_collection.js @@ -0,0 +1,40 @@ +// Copyright (c) 2016, ESS and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Sample Collection', { + refresh: function(frm) { + if(frappe.defaults.get_default("require_sample_collection")){ + frm.add_custom_button(__("View Lab Tests"), function() { + frappe.route_options = {"sample": frm.doc.name}; + frappe.set_route("List", "Lab Test"); + }); + } + } +}); + +frappe.ui.form.on("Sample Collection", "patient", function(frm) { + if(frm.doc.patient){ + frappe.call({ + "method": "erpnext.healthcare.doctype.patient.patient.get_patient_detail", + args: { + patient: frm.doc.patient + }, + callback: function (data) { + var age = null; + if(data.message.dob){ + age = calculate_age(data.message.dob); + } + frappe.model.set_value(frm.doctype,frm.docname, "patient_age", age); + frappe.model.set_value(frm.doctype,frm.docname, "patient_sex", data.message.sex); + } + }); + } +}); + +var calculate_age = function(birth) { + var ageMS = Date.parse(Date()) - Date.parse(birth); + var age = new Date(); + age.setTime(ageMS); + var years = age.getFullYear() - 1970; + return years + " Year(s) " + age.getMonth() + " Month(s) " + age.getDate() + " Day(s)"; +}; diff --git a/erpnext/healthcare/doctype/sample_collection/sample_collection.json b/erpnext/healthcare/doctype/sample_collection/sample_collection.json new file mode 100644 index 0000000000..ee2f83f01c --- /dev/null +++ b/erpnext/healthcare/doctype/sample_collection/sample_collection.json @@ -0,0 +1,614 @@ +{ + "allow_copy": 1, + "allow_guest_to_view": 0, + "allow_import": 1, + "allow_rename": 0, + "autoname": "naming_series:", + "beta": 1, + "creation": "2016-04-05 15:58:18.076977", + "custom": 0, + "default_print_format": "", + "docstatus": 0, + "doctype": "DocType", + "document_type": "Document", + "editable_grid": 0, + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 1, + "collapsible": 0, + "columns": 0, + "default": "", + "fieldname": "naming_series", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Series", + "length": 0, + "no_copy": 1, + "options": "SMPL-", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "invoice", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Invoice", + "length": 0, + "no_copy": 0, + "options": "Sales Invoice", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 1, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "patient", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Patient", + "length": 0, + "no_copy": 0, + "options": "Patient", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_4", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "patient_age", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Age", + "length": 0, + "no_copy": 0, + "options": "", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "patient_sex", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Gender", + "length": 0, + "no_copy": 0, + "options": "patient.sex", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "company", + "fieldtype": "Link", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Company", + "length": 0, + "no_copy": 0, + "options": "Company", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_6", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "sample", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Sample", + "length": 0, + "no_copy": 0, + "options": "Lab Test Sample", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 1, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "sample_uom", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "UOM", + "length": 0, + "no_copy": 0, + "options": "sample.sample_uom", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "0", + "fieldname": "sample_quantity", + "fieldtype": "Float", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Quantity", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_10", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "collected_by", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Collected By", + "length": 0, + "no_copy": 0, + "options": "User", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "collected_time", + "fieldtype": "Datetime", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Collected Time", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 1, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "1", + "fieldname": "num_print", + "fieldtype": "Int", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "No. of print", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "amended_from", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Amended From", + "length": 0, + "no_copy": 1, + "options": "Sample Collection", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_15", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "sample_collection_details", + "fieldtype": "Long Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Collection Details", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 1, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2017-08-31 13:30:29.303026", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Sample Collection", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 1, + "apply_user_permissions": 0, + "cancel": 1, + "create": 1, + "delete": 0, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Laboratory User", + "set_user_permissions": 0, + "share": 1, + "submit": 1, + "write": 1 + } + ], + "quick_entry": 0, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "search_fields": "patient, sample", + "show_name_in_global_search": 1, + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "patient", + "track_changes": 1, + "track_seen": 1 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/sample_collection/sample_collection.py b/erpnext/healthcare/doctype/sample_collection/sample_collection.py new file mode 100644 index 0000000000..2c64320fac --- /dev/null +++ b/erpnext/healthcare/doctype/sample_collection/sample_collection.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document + +class SampleCollection(Document): + pass diff --git a/erpnext/healthcare/doctype/sample_collection/test_sample_collection.js b/erpnext/healthcare/doctype/sample_collection/test_sample_collection.js new file mode 100644 index 0000000000..2b4aed756b --- /dev/null +++ b/erpnext/healthcare/doctype/sample_collection/test_sample_collection.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Sample Collection", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially([ + // insert a new Sample Collection + () => frappe.tests.make('Sample Collection', [ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/healthcare/doctype/sample_collection/test_sample_collection.py b/erpnext/healthcare/doctype/sample_collection/test_sample_collection.py new file mode 100644 index 0000000000..0b16173dd5 --- /dev/null +++ b/erpnext/healthcare/doctype/sample_collection/test_sample_collection.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS and Contributors +# See license.txt +from __future__ import unicode_literals + +import unittest + +# test_records = frappe.get_test_records('Sample Collection') + +class TestSampleCollection(unittest.TestCase): + pass diff --git a/erpnext/healthcare/doctype/sensitivity/__init__.py b/erpnext/healthcare/doctype/sensitivity/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/sensitivity/sensitivity.js b/erpnext/healthcare/doctype/sensitivity/sensitivity.js new file mode 100644 index 0000000000..f9c9002fe6 --- /dev/null +++ b/erpnext/healthcare/doctype/sensitivity/sensitivity.js @@ -0,0 +1,5 @@ +// Copyright (c) 2016, ESS LLP and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Sensitivity', { +}); diff --git a/erpnext/healthcare/doctype/sensitivity/sensitivity.json b/erpnext/healthcare/doctype/sensitivity/sensitivity.json new file mode 100644 index 0000000000..620f37a59a --- /dev/null +++ b/erpnext/healthcare/doctype/sensitivity/sensitivity.json @@ -0,0 +1,115 @@ +{ + "allow_copy": 1, + "allow_guest_to_view": 0, + "allow_import": 1, + "allow_rename": 1, + "autoname": "field:sensitivity", + "beta": 1, + "creation": "2016-02-23 11:12:54.623249", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Setup", + "editable_grid": 0, + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "sensitivity", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Sensitivity", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2017-08-31 13:44:07.147326", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Sensitivity", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Laboratory User", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 0 + }, + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Healthcare Administrator", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + } + ], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "search_fields": "sensitivity", + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "sensitivity", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/sensitivity/sensitivity.py b/erpnext/healthcare/doctype/sensitivity/sensitivity.py new file mode 100644 index 0000000000..bf7c36b9d2 --- /dev/null +++ b/erpnext/healthcare/doctype/sensitivity/sensitivity.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document + +class Sensitivity(Document): + pass diff --git a/erpnext/healthcare/doctype/sensitivity/test_sensitivity.js b/erpnext/healthcare/doctype/sensitivity/test_sensitivity.js new file mode 100644 index 0000000000..c2cf406f96 --- /dev/null +++ b/erpnext/healthcare/doctype/sensitivity/test_sensitivity.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Sensitivity", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially([ + // insert a new Sensitivity + () => frappe.tests.make('Sensitivity', [ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/healthcare/doctype/sensitivity/test_sensitivity.py b/erpnext/healthcare/doctype/sensitivity/test_sensitivity.py new file mode 100644 index 0000000000..1616d2decb --- /dev/null +++ b/erpnext/healthcare/doctype/sensitivity/test_sensitivity.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS and Contributors +# See license.txt +from __future__ import unicode_literals +import unittest + +# test_records = frappe.get_test_records('Sensitivity') + +class TestSensitivity(unittest.TestCase): + pass diff --git a/erpnext/healthcare/doctype/sensitivity_test_items/__init__.py b/erpnext/healthcare/doctype/sensitivity_test_items/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/sensitivity_test_items/sensitivity_test_items.json b/erpnext/healthcare/doctype/sensitivity_test_items/sensitivity_test_items.json new file mode 100644 index 0000000000..e656b51279 --- /dev/null +++ b/erpnext/healthcare/doctype/sensitivity_test_items/sensitivity_test_items.json @@ -0,0 +1,103 @@ +{ + "allow_copy": 1, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 1, + "creation": "2016-02-22 15:18:01.769903", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Document", + "editable_grid": 1, + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "antibiotic", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Antibiotic", + "length": 0, + "no_copy": 0, + "options": "Antibiotic", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "antibiotic_sensitivity", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Sensitivity", + "length": 0, + "no_copy": 0, + "options": "Sensitivity", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "max_attachments": 0, + "modified": "2017-08-31 13:46:40.609983", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Sensitivity Test Items", + "name_case": "", + "owner": "Administrator", + "permissions": [], + "quick_entry": 0, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 0, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/sensitivity_test_items/sensitivity_test_items.py b/erpnext/healthcare/doctype/sensitivity_test_items/sensitivity_test_items.py new file mode 100644 index 0000000000..35c8efde79 --- /dev/null +++ b/erpnext/healthcare/doctype/sensitivity_test_items/sensitivity_test_items.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document + +class SensitivityTestItems(Document): + pass diff --git a/erpnext/healthcare/doctype/special_test_items/__init__.py b/erpnext/healthcare/doctype/special_test_items/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/special_test_items/special_test_items.json b/erpnext/healthcare/doctype/special_test_items/special_test_items.json new file mode 100644 index 0000000000..89545e9acd --- /dev/null +++ b/erpnext/healthcare/doctype/special_test_items/special_test_items.json @@ -0,0 +1,166 @@ +{ + "allow_copy": 1, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 1, + "creation": "2016-02-22 15:12:36.202380", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Document", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "test_particulars", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Particulars", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:doc.require_result_value == 1", + "fieldname": "result_value", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Value", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "print_width": "", + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0, + "width": "" + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "require_result_value", + "fieldtype": "Check", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Require Result Value", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "template", + "fieldtype": "Link", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Template", + "length": 0, + "no_copy": 0, + "options": "Lab Test Template", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "max_attachments": 0, + "modified": "2017-08-31 14:12:12.623714", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Special Test Items", + "name_case": "", + "owner": "Administrator", + "permissions": [], + "quick_entry": 0, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 0, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/special_test_items/special_test_items.py b/erpnext/healthcare/doctype/special_test_items/special_test_items.py new file mode 100644 index 0000000000..17080b7e3b --- /dev/null +++ b/erpnext/healthcare/doctype/special_test_items/special_test_items.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document + +class SpecialTestItems(Document): + pass diff --git a/erpnext/healthcare/doctype/special_test_template/__init__.py b/erpnext/healthcare/doctype/special_test_template/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/special_test_template/special_test_template.json b/erpnext/healthcare/doctype/special_test_template/special_test_template.json new file mode 100644 index 0000000000..83f3cb6fd9 --- /dev/null +++ b/erpnext/healthcare/doctype/special_test_template/special_test_template.json @@ -0,0 +1,72 @@ +{ + "allow_copy": 1, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 1, + "creation": "2016-02-22 16:12:12.394200", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Setup", + "editable_grid": 1, + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "particulars", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Result Component", + "length": 0, + "no_copy": 0, + "options": "", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "max_attachments": 0, + "modified": "2017-08-31 14:08:18.833796", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Special Test Template", + "name_case": "", + "owner": "Administrator", + "permissions": [], + "quick_entry": 0, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 0, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/special_test_template/special_test_template.py b/erpnext/healthcare/doctype/special_test_template/special_test_template.py new file mode 100644 index 0000000000..e4e0d5b7bd --- /dev/null +++ b/erpnext/healthcare/doctype/special_test_template/special_test_template.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document + +class SpecialTestTemplate(Document): + pass diff --git a/erpnext/healthcare/doctype/vital_signs/__init__.py b/erpnext/healthcare/doctype/vital_signs/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/doctype/vital_signs/test_vital_signs.js b/erpnext/healthcare/doctype/vital_signs/test_vital_signs.js new file mode 100644 index 0000000000..f4ab4466be --- /dev/null +++ b/erpnext/healthcare/doctype/vital_signs/test_vital_signs.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Vital Signs", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially([ + // insert a new Vital Signs + () => frappe.tests.make('Vital Signs', [ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/healthcare/doctype/vital_signs/test_vital_signs.py b/erpnext/healthcare/doctype/vital_signs/test_vital_signs.py new file mode 100644 index 0000000000..5d3e00740f --- /dev/null +++ b/erpnext/healthcare/doctype/vital_signs/test_vital_signs.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS LLP and Contributors +# See license.txt +from __future__ import unicode_literals +import unittest + +# test_records = frappe.get_test_records('Vital Signs') + +class TestVitalSigns(unittest.TestCase): + pass diff --git a/erpnext/healthcare/doctype/vital_signs/vital_signs.js b/erpnext/healthcare/doctype/vital_signs/vital_signs.js new file mode 100644 index 0000000000..a5f9d61295 --- /dev/null +++ b/erpnext/healthcare/doctype/vital_signs/vital_signs.js @@ -0,0 +1,49 @@ +// Copyright (c) 2016, ESS LLP and contributors +// For license information, please see license.txt + +frappe.ui.form.on("Vital Signs", "height", function(frm) { + if(frm.doc.height && frm.doc.weight){ + calculate_bmi(frm); + } +}); + +frappe.ui.form.on("Vital Signs", "weight", function(frm) { + if(frm.doc.height && frm.doc.weight){ + calculate_bmi(frm); + } +}); + +var calculate_bmi = function(frm){ + // Reference https://en.wikipedia.org/wiki/Body_mass_index + // bmi = weight (in Kg) / height * height (in Meter) + var bmi = (frm.doc.weight/(frm.doc.height*frm.doc.height)).toFixed(2); + var bmi_note = null; + if(bmi<18.5){ + bmi_note = "Underweight"; + }else if(bmi>=18.5 && bmi<25){ + bmi_note = "Normal"; + }else if(bmi>=25 && bmi<30){ + bmi_note = "Overweight"; + }else if(bmi>=30){ + bmi_note = "Obese"; + } + frappe.model.set_value(frm.doctype,frm.docname, "bmi", bmi); + frappe.model.set_value(frm.doctype,frm.docname, "nutrition_note", bmi_note); +}; + +frappe.ui.form.on("Vital Signs", "bp_systolic", function(frm) { + if(frm.doc.bp_systolic && frm.doc.bp_diastolic){ + set_bp(frm); + } +}); + +frappe.ui.form.on("Vital Signs", "bp_diastolic", function(frm) { + if(frm.doc.bp_systolic && frm.doc.bp_diastolic){ + set_bp(frm); + } +}); + +var set_bp = function(frm){ + var bp = frm.doc.bp_systolic+"/"+frm.doc.bp_diastolic+" mmHg"; + frappe.model.set_value(frm.doctype,frm.docname, "bp", bp); +}; diff --git a/erpnext/healthcare/doctype/vital_signs/vital_signs.json b/erpnext/healthcare/doctype/vital_signs/vital_signs.json new file mode 100644 index 0000000000..e44af28008 --- /dev/null +++ b/erpnext/healthcare/doctype/vital_signs/vital_signs.json @@ -0,0 +1,813 @@ +{ + "allow_copy": 1, + "allow_guest_to_view": 0, + "allow_import": 1, + "allow_rename": 0, + "beta": 1, + "creation": "2017-02-02 11:00:24.853005", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "patient", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Patient", + "length": 0, + "no_copy": 0, + "options": "Patient", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "appointment", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Appointment", + "length": 0, + "no_copy": 0, + "options": "Patient Appointment", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "consultation", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Consultation", + "length": 0, + "no_copy": 0, + "options": "Consultation", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_2", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "Today", + "fieldname": "signs_date", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Date", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_4", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "", + "fieldname": "signs_time", + "fieldtype": "Time", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Time", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "sb_vs", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Vital Signs", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "Presence of a fever (temp > 38.5 \u00b0C/101.3 \u00b0F or sustained temp > 38 \u00b0C/100.4 \u00b0F)", + "fieldname": "temperature", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Body Temperature", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "Adults' pulse rate is anywhere between 50 and 80 beats per minute.", + "fieldname": "pulse", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Heart Rate / Pulse", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "Normal reference range for an adult is 16\u201320 breaths/minute (RCP 2012)", + "fieldname": "respiratory_rate", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Respiratory rate", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_8", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "bp_systolic", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Blood Pressure (systolic)", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "", + "fieldname": "bp_diastolic", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Blood Pressure (diastolic)", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "Normal resting blood pressure in an adult is approximately 120 mmHg systolic, and 80 mmHg diastolic, abbreviated \"120/80 mmHg\"", + "fieldname": "bp", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Blood Pressure", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "vital_signs_note", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Notes", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "sb_nutrition_values", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Nutrition Values", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "height", + "fieldtype": "Float", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Height (In Meter)", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "weight", + "fieldtype": "Float", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Weight (In Kilogram)", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "0.00", + "fieldname": "bmi", + "fieldtype": "Float", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "BMI", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_14", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "nutrition_note", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Notes", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "company", + "fieldtype": "Link", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Company", + "length": 0, + "no_copy": 0, + "options": "Company", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "amended_from", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Amended From", + "length": 0, + "no_copy": 1, + "options": "Vital Signs", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 1, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2017-09-04 14:31:57.851546", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Vital Signs", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 1, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Physician", + "set_user_permissions": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 1, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Nursing User", + "set_user_permissions": 0, + "share": 1, + "submit": 1, + "write": 1 + } + ], + "quick_entry": 0, + "read_only": 0, + "read_only_onload": 0, + "restrict_to_domain": "Healthcare", + "search_fields": "patient, signs_date", + "show_name_in_global_search": 1, + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "patient", + "track_changes": 1, + "track_seen": 1 +} \ No newline at end of file diff --git a/erpnext/healthcare/doctype/vital_signs/vital_signs.py b/erpnext/healthcare/doctype/vital_signs/vital_signs.py new file mode 100644 index 0000000000..436f79fcb9 --- /dev/null +++ b/erpnext/healthcare/doctype/vital_signs/vital_signs.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS LLP and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.document import Document + +class VitalSigns(Document): + def on_submit(self): + insert_vital_signs_to_medical_record(self) + + def on_cancel(self): + delete_vital_signs_from_medical_record(self) + +def insert_vital_signs_to_medical_record(doc): + subject = set_subject_field(doc) + medical_record = frappe.new_doc("Patient Medical Record") + medical_record.patient = doc.patient + medical_record.subject = subject + medical_record.status = "Open" + medical_record.communication_date = doc.signs_date + medical_record.reference_doctype = "Vital Signs" + medical_record.reference_name = doc.name + medical_record.reference_owner = doc.owner + medical_record.save(ignore_permissions=True) + +def delete_vital_signs_from_medical_record(doc): + medical_record_id = frappe.db.sql("select name from `tabPatient Medical Record` where reference_name=%s",(doc.name)) + if(medical_record_id[0][0]): + frappe.delete_doc("Patient Medical Record", medical_record_id[0][0]) + +def set_subject_field(doc): + subject = " " + if(doc.temperature): + subject += "Temperature: \n"+ str(doc.temperature)+". " + if(doc.pulse): + subject += "Pulse: \n"+ str(doc.pulse)+". " + if(doc.respiratory_rate): + subject += "Respiratory Rate: \n"+ str(doc.respiratory_rate)+". " + if(doc.bp): + subject += "BP: \n"+ str(doc.bp)+". " + if(doc.bmi): + subject += "BMI: \n"+ str(doc.bmi)+". " + if(doc.nutrition_note): + subject += "Note: \n"+ str(doc.nutrition_note)+". " + + return subject diff --git a/erpnext/healthcare/page/__init__.py b/erpnext/healthcare/page/__init__.py new file mode 100644 index 0000000000..baffc48825 --- /dev/null +++ b/erpnext/healthcare/page/__init__.py @@ -0,0 +1 @@ +from __future__ import unicode_literals diff --git a/erpnext/healthcare/page/appointment_analytic/__init__.py b/erpnext/healthcare/page/appointment_analytic/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/page/appointment_analytic/appointment_analytic.js b/erpnext/healthcare/page/appointment_analytic/appointment_analytic.js new file mode 100644 index 0000000000..971d810c2f --- /dev/null +++ b/erpnext/healthcare/page/appointment_analytic/appointment_analytic.js @@ -0,0 +1,209 @@ +frappe.pages['appointment-analytic'].on_page_load = function(wrapper) { + frappe.ui.make_app_page({ + parent: wrapper, + title: 'Appointment Analytics', + single_column: true + }); + new erpnext.AppointmentAnalytics(wrapper); + frappe.breadcrumbs.add("Medical"); +}; + +erpnext.AppointmentAnalytics = frappe.views.TreeGridReport.extend({ + init: function(wrapper) { + this._super({ + title: __("Appointment Analytics"), + parent: $(wrapper).find('.layout-main'), + page: wrapper.page, + doctypes: ["Patient Appointment", "Physician", "Medical Department", "Appointment Type", "Patient"], + tree_grid: { show: true } + }); + + this.tree_grids = { + "Medical Department": { + label: __("Department"), + show: true, + item_key: "physician", + parent_field: "department", + formatter: function(item) { + return item.name; + } + }, + "Physician": { + label: __("Physician"), + show: true, + item_key: "physician", + formatter: function(item) { + return item.name; + } + }, + }; + }, + setup_columns: function() { + this.tree_grid = this.tree_grids[this.tree_type]; + + var std_columns = [ + {id: "_check", name: __("Plot"), field: "_check", width: 40, + formatter: this.check_formatter}, + {id: "name", name: this.tree_grid.label, field: "name", width: 300, + formatter: this.tree_formatter}, + {id: "total", name: "Total", field: "total", plot: false, + formatter: this.currency_formatter} + ]; + + this.make_date_range_columns(); + this.columns = std_columns.concat(this.columns); + }, + filters: [ + {fieldtype:"Select", label: __("Tree Type"), fieldname: "tree_type", + options:["Physician", "Medical Department"], filter: function(val, item, opts, me) { + return me.apply_zero_filter(val, item, opts, me);}}, + {fieldtype:"Select", label: __("Status"), fieldname: "status", + options:[ + {label: __("Select Status"), value: "Select Status..."}, + {label: __("Open"), value: "Open"}, + {label: __("Closed"), value: "Closed"}, + {label: __("Pending"), value: "Pending"}, + {label: __("Scheduled"), value: "Scheduled"}, + {label: __("Cancelled"), value: "Cancelled"}]}, + {fieldtype:"Select", label: __("Type"), link:"Appointment Type", fieldname: "type", + default_value: __("Select Type...")}, + {fieldtype:"Select", label: __("Physician"), link:"Physician", fieldname: "physician", + default_value: __("Select Physician..."), filter: function(val, item, opts) { + return val == opts.default_value || item.name == val || item._show; + }, link_formatter: {filter_input: "physician"}}, + {fieldtype:"Select", label: __("Department"), link:"Medical Department", fieldname: "department", + default_value: __("Select Department..."), filter: function(val, item, opts) { + return val == opts.default_value || item.department == val || item._show; + }, link_formatter: {filter_input: "department"}}, + {fieldtype:"Date", label: __("From Date"), fieldname: "from_date"}, + {fieldtype:"Date", label: __("To Date"), fieldname: "to_date"}, + {fieldtype:"Select", label: __("Range"), fieldname: "range", + options:[{label: __("Daily"), value: "Daily"}, {label: __("Weekly"), value: "Weekly"}, + {label: __("Monthly"), value: "Monthly"}, {label: __("Quarterly"), value: "Quarterly"}, + {label: __("Yearly"), value: "Yearly"}]} + ], + setup_filters: function() { + this._super(); + this.trigger_refresh_on_change(["tree_type", "physician", "department", "status", "type"]); + + // this.show_zero_check() + this.setup_chart_check(); + }, + init_filter_values: function() { + this._super(); + this.filter_inputs.range.val('Quarterly'); + }, + prepare_data: function() { + var me = this; + if (!this.tl) { + this.tl = frappe.report_dump.data["Patient Appointment"]; + } + if(!this.data || me.item_type != me.tree_type) { + var items = null; + if(me.tree_type=='Physician') { + items = frappe.report_dump.data["Physician"]; + } if(me.tree_type=='Medical Department') { + items = this.prepare_tree("Physician", "Medical Department"); + } + me.item_type = me.tree_type; + me.parent_map = {}; + me.item_by_name = {}; + me.data = []; + + $.each(items, function(i, v) { + var d = copy_dict(v); + + me.data.push(d); + me.item_by_name[d.name] = d; + if(d[me.tree_grid.parent_field]) { + me.parent_map[d.name] = d[me.tree_grid.parent_field]; + } + me.reset_item_values(d); + }); + + this.set_indent(); + + + } else { + // otherwise, only reset values + $.each(this.data, function(i, d) { + me.reset_item_values(d); + }); + } + this.prepare_balances(); + if(me.tree_grid.show) { + this.set_totals(false); + this.update_groups(); + } else { + this.set_totals(true); + } + + + }, + prepare_balances: function() { + var me = this; + var from_date = frappe.datetime.str_to_obj(this.from_date); + var status = this.status; + var type = this.type; + var to_date = frappe.datetime.str_to_obj(this.to_date); + $.each(this.tl, function(i, tl) { + if (me.is_default('company') ? true : tl.company === me.company) { + + var date = frappe.datetime.str_to_obj(tl.appointment_date); + if (date >= from_date && date <= to_date) { + var item = me.item_by_name[tl[me.tree_grid.item_key]] || + me.item_by_name['Not Set']; + + var d = tl.appointment_date.split(" ")[0]; + if(status == "Select Status..." && type=="Select Type...") + { + item[me.column_map[d].field] += 1; + + }else if (status !== "Select Status..." && type == "Select Type..."){ + if(status === tl.status){item[me.column_map[d].field] += 1;} + }else if (status == "Select Status..." && type !== "Select Type..."){ + if(type === tl.appointment_type){item[me.column_map[d].field] += 1;} + }else { + if(type === tl.appointment_type && status === tl.status){item[me.column_map[d].field] += 1;} + } + } + } + }); + }, + update_groups: function() { + var me = this; + + $.each(this.data, function(i, item) { + var parent = me.parent_map[item.name]; + while(parent) { + var parent_group = me.item_by_name[parent]; + + $.each(me.columns, function(c, col) { + if (col.formatter == me.currency_formatter) { + parent_group[col.field] = + flt(parent_group[col.field]) + + flt(item[col.field]); + } + }); + parent = me.parent_map[parent]; + } + }); + }, + set_totals: function(sort) { + var me = this; + $.each(this.data, function(i, d) { + d.total = 0.0; + $.each(me.columns, function(i, col) { + if(col.formatter==me.currency_formatter && !col.hidden && col.field!="total") + d.total += d[col.field]; + }); + }); + + if(sort)this.data = this.data.sort(function(a, b) { return b.total - a.total; }); + + if(!this.checked) { + this.data[0].checked = true; + } + } + +}); diff --git a/erpnext/healthcare/page/appointment_analytic/appointment_analytic.json b/erpnext/healthcare/page/appointment_analytic/appointment_analytic.json new file mode 100644 index 0000000000..4deff806ba --- /dev/null +++ b/erpnext/healthcare/page/appointment_analytic/appointment_analytic.json @@ -0,0 +1,22 @@ +{ + "content": null, + "creation": "2016-08-18 12:29:52.497819", + "docstatus": 0, + "doctype": "Page", + "idx": 0, + "modified": "2016-08-18 12:29:52.497819", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "appointment-analytic", + "owner": "Administrator", + "page_name": "Appointment Analytics", + "roles": [ + { + "role": "Physician" + } + ], + "script": null, + "standard": "Yes", + "style": null, + "title": "Appointment Analytics" +} diff --git a/erpnext/healthcare/page/medical_record/__init__.py b/erpnext/healthcare/page/medical_record/__init__.py new file mode 100644 index 0000000000..baffc48825 --- /dev/null +++ b/erpnext/healthcare/page/medical_record/__init__.py @@ -0,0 +1 @@ +from __future__ import unicode_literals diff --git a/erpnext/healthcare/page/medical_record/medical_record.css b/erpnext/healthcare/page/medical_record/medical_record.css new file mode 100644 index 0000000000..e76df0f82e --- /dev/null +++ b/erpnext/healthcare/page/medical_record/medical_record.css @@ -0,0 +1,73 @@ +#page-medical_record .label { + display: inline-block; + margin-right: 7px; +} + +#page-medical_record .list-row { + border: none; + padding: 0px; + cursor: pointer; +} + +.medical_record-label { + max-width: 100px; + margin-bottom: -4px; +} + +.date-indicator { + background:none; + font-size:12px; + vertical-align:middle; + font-weight:bold; + color:#6c7680; +} +.date-indicator::after { + margin:0 -4px 0 12px; + content:''; + display:inline-block; + height:8px; + width:8px; + border-radius:8px; + background: #d1d8dd; +} + +.date-indicator.blue { + color: #5e64ff; +} + +.date-indicator.blue::after { + background: #5e64ff; +} + +.medical_record-message { + border-left: 1px solid #d1d8dd; + padding: 15px; + padding-right: 30px; +} + +.medical_record-date { + padding: 15px; + padding-right: 0px; + z-index: 1; +} + +#page-medical_record .plot-wrapper { + padding: 20px 15px; + border-bottom: 1px solid #d1d8dd; + text-align: center; +} + +#page-medical_record .plot { + height: 140px ; + width: 97% ; + margin: auto; +} + +#page-medical_record .list-filters { + display: none ; +} + +#page-medical_record .octicon-heart { + color: #ff5858; + margin: 0px 5px; +} diff --git a/erpnext/healthcare/page/medical_record/medical_record.js b/erpnext/healthcare/page/medical_record/medical_record.js new file mode 100644 index 0000000000..df19d8f4dc --- /dev/null +++ b/erpnext/healthcare/page/medical_record/medical_record.js @@ -0,0 +1,182 @@ +frappe.provide("frappe.medical_record"); +frappe.pages['medical_record'].on_page_load = function(wrapper) { + var me = this; + var page = frappe.ui.make_app_page({ + parent: wrapper, + title: 'Medical Record', + }); + + frappe.breadcrumbs.add("Medical"); + + page.main.html(frappe.render_template("patient_select", {})); + var patient = frappe.ui.form.make_control({ + parent: page.main.find(".patient"), + df: { + fieldtype: "Link", + options: "Patient", + fieldname: "patient", + change: function(){ + page.main.find(".frappe-list").html(""); + draw_page(patient.get_value(), me); + } + }, + only_input: true, + }); + patient.refresh(); + + + this.page.main.on("click", ".medical_record-message", function() { + var doctype = $(this).attr("data-doctype"), + docname = $(this).attr("data-docname"); + + if (doctype && docname) { + frappe.route_options = { + scroll_to: { "doctype": doctype, "name": docname } + }; + frappe.set_route(["Form", doctype, docname]); + } + }); + + this.page.sidebar.on("click", ".edit-details", function() { + patient = patient.get_value(); + if (patient) { + frappe.set_route(["Form", "Patient", patient]); + } + }); + +}; + +frappe.pages['medical_record'].refresh = function() { + var me = this; + + if(frappe.route_options) { + if(frappe.route_options.patient){ + me.page.main.find(".frappe-list").html(""); + var patient = frappe.route_options.patient; + draw_page(patient,me); + me.page.main.find("[data-fieldname='patient']").val(patient); + frappe.route_options = null; + } + } +}; +var show_patient_info = function(patient, me){ + frappe.call({ + "method": "erpnext.healthcare.doctype.patient.patient.get_patient_detail", + args: { + patient: patient + }, + callback: function (r) { + var data = r.message; + var details = ""; + if(data.email) details += "
Email : " + data.email; + if(data.mobile) details += "
Mobile : " + data.mobile; + if(data.occupation) details += "
Occupation : " + data.occupation; + if(data.blood_group) details += "
Blood group : " + data.blood_group; + if(data.allergies) details += "

Allergies : "+ data.allergies; + if(data.medication) details += "
Medication : "+ data.medication; + if(data.alcohol_current_use) details += "

Alcohol use : "+ data.alcohol_current_use; + if(data.alcohol_past_use) details += "
Alcohol past use : "+ data.alcohol_past_use; + if(data.tobacco_current_use) details += "
Tobacco use : "+ data.tobacco_current_use; + if(data.tobacco_past_use) details += "
Tobacco past use : "+ data.tobacco_past_use; + if(data.medical_history) details += "

Medical history : "+ data.medical_history; + if(data.surgical_history) details += "
Surgical history : "+ data.surgical_history; + if(data.surrounding_factors) details += "

Occupational hazards : "+ data.surrounding_factors; + if(data.other_risk_factors) details += "
Other risk factors : " + data.other_risk_factors; + if(data.patient_details) details += "

More info : " + data.patient_details; + + if(details){ + details = "

Patient Details" + details + "
"; + } + + var vitals = ""; + if(data.temperature) vitals += "
Temperature : " + data.temperature; + if(data.pulse) vitals += "
Pulse : " + data.pulse; + if(data.respiratory_rate) vitals += "
Respiratory Rate : " + data.respiratory_rate; + if(data.bp) vitals += "
BP : " + data.bp; + if(data.bmi) vitals += "
BMI : " + data.bmi; + if(data.height) vitals += "
Height : " + data.height; + if(data.weight) vitals += "
Weight : " + data.weight; + if(data.signs_date) vitals += "
Date : " + data.signs_date; + + if(vitals){ + vitals = "

Vital Signs" + vitals + "
"; + details = vitals + details; + } + if(details) details += "
"; + + me.page.sidebar.addClass("col-sm-3"); + me.page.sidebar.html(details); + me.page.wrapper.find(".layout-main-section-wrapper").addClass("col-sm-9"); + } + }); +}; +var draw_page = function(patient, me){ + frappe.model.with_doctype("Patient Medical Record", function() { + me.page.list = new frappe.ui.BaseList({ + hide_refresh: true, + page: me.page, + method: 'erpnext.healthcare.page.medical_record.medical_record.get_feed', + args: {name: patient}, + parent: $("
").appendTo(me.page.main), + render_view: function(values) { + var me = this; + var wrapper = me.page.main.find(".result-list").get(0); + values.map(function (value) { + var row = $('
').data("data", value).appendTo($(wrapper)).get(0); + new frappe.medical_record.Feed(row, value); + }); + }, + show_filters: true, + doctype: "Patient Medical Record", + }); + show_patient_info(patient, me); + me.page.list.run(); + }); +}; + +frappe.medical_record.last_feed_date = false; +frappe.medical_record.Feed = Class.extend({ + init: function(row, data) { + this.scrub_data(data); + this.add_date_separator(row, data); + if(!data.add_class) + data.add_class = "label-default"; + + data.link = ""; + if (data.reference_doctype && data.reference_name) { + data.link = frappe.format(data.reference_name, {fieldtype: "Link", options: data.reference_doctype}, + {label: __(data.reference_doctype)}); + } + + $(row) + .append(frappe.render_template("medical_record_row", data)) + .find("a").addClass("grey"); + }, + scrub_data: function(data) { + data.by = frappe.user.full_name(data.owner); + data.imgsrc = frappe.utils.get_file_link(frappe.user_info(data.owner).image); + + data.icon = "icon-flag"; + }, + add_date_separator: function(row, data) { + var date = frappe.datetime.str_to_obj(data.creation); + var last = frappe.medical_record.last_feed_date; + + if((last && frappe.datetime.obj_to_str(last) != frappe.datetime.obj_to_str(date)) || (!last)) { + var diff = frappe.datetime.get_day_diff(frappe.datetime.get_today(), frappe.datetime.obj_to_str(date)); + if(diff < 1) { + var pdate = 'Today'; + } else if(diff < 2) { + pdate = 'Yesterday'; + } else { + pdate = frappe.datetime.global_date_format(date); + } + data.date_sep = pdate; + data.date_class = pdate=='Today' ? "date-indicator blue" : "date-indicator"; + } else { + data.date_sep = null; + data.date_class = ""; + } + frappe.medical_record.last_feed_date = date; + } +}); diff --git a/erpnext/healthcare/page/medical_record/medical_record.json b/erpnext/healthcare/page/medical_record/medical_record.json new file mode 100644 index 0000000000..7c786cae6b --- /dev/null +++ b/erpnext/healthcare/page/medical_record/medical_record.json @@ -0,0 +1,23 @@ +{ + "content": null, + "creation": "2016-06-09 11:33:14.025787", + "docstatus": 0, + "doctype": "Page", + "icon": "icon-play", + "idx": 0, + "modified": "2017-03-06 11:20:40.174661", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "medical_record", + "owner": "Administrator", + "page_name": "medical_record", + "roles": [ + { + "role": "Physician" + } + ], + "script": null, + "standard": "Yes", + "style": null, + "title": "Medical Record" +} diff --git a/erpnext/healthcare/page/medical_record/medical_record.py b/erpnext/healthcare/page/medical_record/medical_record.py new file mode 100644 index 0000000000..22c5852b05 --- /dev/null +++ b/erpnext/healthcare/page/medical_record/medical_record.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, ESS LLP and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.utils import cint + +@frappe.whitelist() +def get_feed(start, page_length, name): + """get feed""" + result = frappe.db.sql("""select name, owner, modified, creation, + reference_doctype, reference_name, subject + from `tabPatient Medical Record` + where patient=%(patient)s + order by creation desc + limit %(start)s, %(page_length)s""", + { + "start": cint(start), + "page_length": cint(page_length), + "patient": name + }, as_dict=True) + + return result diff --git a/erpnext/healthcare/page/medical_record/medical_record_row.html b/erpnext/healthcare/page/medical_record/medical_record_row.html new file mode 100644 index 0000000000..6b791465dc --- /dev/null +++ b/erpnext/healthcare/page/medical_record/medical_record_row.html @@ -0,0 +1,21 @@ +
+
+ {%= date_sep || "" %} +
+
+ +
+ +
+ + {% if (reference_doctype && reference_name) { %} + {%= __("{0}: {1}", [link, "" + subject + ""]) %} + {% } else { %} + {%= subject %} + {% } %} + +
+
diff --git a/erpnext/healthcare/page/medical_record/patient_select.html b/erpnext/healthcare/page/medical_record/patient_select.html new file mode 100644 index 0000000000..321baf738d --- /dev/null +++ b/erpnext/healthcare/page/medical_record/patient_select.html @@ -0,0 +1,5 @@ +
+ +

{%= __("Select Patient") %}

+

+
diff --git a/erpnext/healthcare/print_format/__init__.py b/erpnext/healthcare/print_format/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/print_format/consultation_print/__init__.py b/erpnext/healthcare/print_format/consultation_print/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/print_format/consultation_print/consultation_print.json b/erpnext/healthcare/print_format/consultation_print/consultation_print.json new file mode 100644 index 0000000000..05b8b43bf3 --- /dev/null +++ b/erpnext/healthcare/print_format/consultation_print/consultation_print.json @@ -0,0 +1,22 @@ +{ + "align_labels_left": 0, + "creation": "2017-04-10 14:05:53.355863", + "custom_format": 1, + "disabled": 0, + "doc_type": "Consultation", + "docstatus": 0, + "doctype": "Print Format", + "font": "Default", + "html": "
\n {% if letter_head and not no_letterhead -%}\n
{{ letter_head }}
\n
\n {% else %}\n
\n

{{doc.name}}

\n
\n {%- endif %}\n
\n
\n {% if doc.appointment %}\n\t
\n\t\t\t
\n\t\t\t\n\t\t\t
\n\t\t\t
\n\t\t\t: {{doc.appointment}}\n\t\t\t
\n\t\t
\n\t\t{%- endif -%}\n\n
\n\t\t
\n\t\t\t \n\t\t
\n {% if doc.patient %}\n\t\t
\n\t\t\t : {{doc.patient}}\n\t\t
\n {% else %}\n
\n\t\t\t : Patient Name\n\t\t
\n {%- endif -%}\n\t\t
\n\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t\t
\n\t\t\t : {{doc.patient_age}}\n\t\t\t
\n\t\t
\n\n
\n
\n\t\t\t\t\n\t\t\t
\n\t\t\t
\n\t\t\t : {{doc.patient_sex}}\n\t\t\t
\n
\n\n
\n
\n\n
\n\t
\n\t\t \n\t
\n {% if doc.physician %}\n\t
\n\t\t\t: {{doc.physician}}\n\t
\n {%- endif -%}\n\t
\n\n {% if doc.consultation_date %}\n\t
\n\t\t
\n\t\t\n\t\t
\n\t\t
\n\t\t: {{doc.consultation_date}}\n\t\t
\n
\n\t {%- endif -%}\n {% if doc.consultation_time %}\n\t
\n\t\t
\n\t\t\n\t\t
\n\t\t
\n\t\t: {{doc.consultation_time}}\n\t\t
\n
\n\t {%- endif -%}\n {% if doc.visit_department %}\n\t
\n\t\t
\n\t\t\n\t\t
\n\t\t
\n\t\t: {{doc.visit_department}}\n\t\t
\n
\n {%- endif -%}\n
\n\n
\n\n
\n
\n
\n {% if doc.symptoms_in_print%}\n {% if doc.symptoms %}\n Complaints:\n {{doc.symptoms}}\n \t
\n {%- endif -%}\n {%- endif -%}\n\n {% if doc.diagnosis_in_print%}\n {% if doc.diagnosis %}\n \t Diagnosis:\n {{doc.diagnosis}}\n
\n {%- endif -%}\n {%- endif -%}\n\n
\n\n
\n {% if doc.drug_prescription %}\n
\n Rx,\n \n \n \n\n {%- for row in doc.drug_prescription -%}\n \n \n \t\n \t\n \n \n\t {%- endfor -%}\n \n
\n {%- if row.drug_name -%}{{ row.drug_name }}{%- endif -%}\n \n {%- if row.dosage -%}{{ row.dosage }}{%- endif -%}\n \n {%- if row.period -%}{{ row.period }}{%- endif -%}\n\t\t \n\t\t\t
\n {%- if row.comment -%}{{ row.comment }}{%- endif -%}\n
\n\t\t
\n\n\n {%- endif -%}\n
\n\n\n
\n {% if doc.test_prescription %}\n Investigations,\n \n \n \n\n {%- for row in doc.test_prescription -%}\n \n \n \n \n\n\t {%- endfor -%}\n \n
\n {%- if row.test_name -%}{{ row.test_name }}{%- endif -%}\n \n\t\t\t
\n {%- if row.test_comment -%}{{ row.test_comment }}{%- endif -%}\n
\n\t\t
\n\n\n {%- endif -%}\n
\n
\n {% if doc.consultation_comment %}\n
\n {{doc.consultation_comment}}\n {%- endif -%}\n
\n", + "idx": 0, + "line_breaks": 0, + "modified": "2017-05-15 16:36:06.034909", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Consultation Print", + "owner": "Administrator", + "print_format_builder": 0, + "print_format_type": "Server", + "show_section_headings": 0, + "standard": "Yes" +} \ No newline at end of file diff --git a/erpnext/healthcare/print_format/lab_test_print/__init__.py b/erpnext/healthcare/print_format/lab_test_print/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/print_format/lab_test_print/lab_test_print.json b/erpnext/healthcare/print_format/lab_test_print/lab_test_print.json new file mode 100644 index 0000000000..e3e21a71ce --- /dev/null +++ b/erpnext/healthcare/print_format/lab_test_print/lab_test_print.json @@ -0,0 +1,22 @@ +{ + "align_labels_left": 0, + "creation": "2017-04-24 15:38:45.332473", + "custom_format": 1, + "disabled": 0, + "doc_type": "Lab Test", + "docstatus": 0, + "doctype": "Print Format", + "font": "Default", + "html": "
\n {% if letter_head and not no_letterhead -%}\n
{{ letter_head }}
\n
\n {%- endif %}\n\n {% if (doc.docstatus != 1) %}\n Lab Tests have to be Submitted for Print .. !\n {% elif (frappe.db.get_value(\"Healthcare Settings\", \"None\", \"require_test_result_approval\") == '1' and doc.approval_status != \"Approved\") %}\n Lab Tests have to be Approved for Print .. !\n {%- else -%}\n
\n
\n {% if doc.invoice %}\n
\n
\n \n
\n
\n : {{doc.invoice}}\n
\n
\n {%- endif -%}\n\n
\n
\n \n
\n {% if doc.patient %}\n
\n : {{doc.patient}}\n
\n {% else %}\n
\n : Patient Name\n
\n {%- endif -%}\n
\n\n
\n
\n \n
\n
\n : {{doc.patient_age}}\n
\n
\n\n
\n
\n \n
\n
\n : {{doc.patient_sex}}\n
\n
\n\n
\n\n
\n\n
\n
\n \n
\n {% if doc.physician %}\n
\n : {{doc.physician}}\n
\n {%- endif -%}\n
\n\n {% if doc.sample_date %}\n
\n
\n \n
\n
\n : {{doc.sample_date}}\n
\n
\n {%- endif -%}\n\n {% if doc.result_date %}\n
\n
\n \n
\n
\n : {{doc.result_date}}\n
\n
\n {%- endif -%}\n\n
\n\n
\n\n
\n

Department of {{doc.department}}

\n
\n\n \n \n {%- if doc.normal_test_items -%}\n \n \n \n \n \n\n {%- if doc.normal_test_items|length > 1 %}\n \n {%- endif -%}\n\n {%- for row in doc.normal_test_items -%}\n \n \n\n \n\n \n \n\n {%- endfor -%}\n {%- endif -%}\n \n
Name of TestResultNormal Range
{{ doc.test_name }}
\n {%- if doc.normal_test_items|length > 1 %}  {%- endif -%}\n {%- if row.test_name -%}{{ row.test_name }}\n {%- else -%}   {%- endif -%}\n {%- if row.test_event -%}   {{ row.test_event }}{%- endif -%}\n \n {%- if row.result_value -%}{{ row.result_value }}{%- endif -%} \n {%- if row.test_uom -%}{{ row.test_uom }}{%- endif -%}\n \n
\n {%- if row.normal_range -%}{{ row.normal_range }}{%- endif -%}\n
\n
\n\n \n \n {%- if doc.special_test_items -%}\n \n \n \n \n \n {%- for row in doc.special_test_items -%}\n \n \n \n \n\n {%- endfor -%}\n {%- endif -%}\n\n {%- if doc.sensitivity_test_items -%}\n \n \n \n \n {%- for row in doc.sensitivity_test_items -%}\n \n \n \n \n\n {%- endfor -%}\n {%- endif -%}\n\n \n
Name of TestResult
{{ doc.test_name }}
  {{ row.test_particulars }} \n {%- if row.result_value -%}{{ row.result_value }}{%- endif -%}\n
AntibioticSensitivity
{{ row.antibiotic }} {{ row.antibiotic_sensitivity }}
\n {%- endif -%}\n\n
\n {%- if (frappe.db.get_value(\"Healthcare Settings\", \"None\", \"employee_name_and_designation_in_print\") == '1') -%}\n
{{doc.employee_name}}
\n
{{doc.employee_designation}}
\n {%- else -%}\n
{{frappe.db.get_value(\"Healthcare Settings\", \"None\", \"custom_signature_in_print\") }}
\n {%- endif -%}\n
\n
\n", + "idx": 0, + "line_breaks": 0, + "modified": "2017-04-27 12:11:58.342145", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Lab Test Print", + "owner": "Administrator", + "print_format_builder": 0, + "print_format_type": "Server", + "show_section_headings": 0, + "standard": "Yes" +} diff --git a/erpnext/healthcare/print_format/sample_id_print/__init__.py b/erpnext/healthcare/print_format/sample_id_print/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/print_format/sample_id_print/sample_id_print.json b/erpnext/healthcare/print_format/sample_id_print/sample_id_print.json new file mode 100644 index 0000000000..e99ce708f4 --- /dev/null +++ b/erpnext/healthcare/print_format/sample_id_print/sample_id_print.json @@ -0,0 +1,22 @@ +{ + "align_labels_left": 0, + "creation": "2017-02-17 17:40:52.967840", + "custom_format": 1, + "disabled": 0, + "doc_type": "Sample Collection", + "docstatus": 0, + "doctype": "Print Format", + "font": "Default", + "html": "\n{% set column = 0 %}\n\n{% for _ in range(0, doc.num_print) %}\n{% if column == 0 -%}{% endif %}\n\t\n{% if column == 0 %}{% set column = column+1 %}\n{% elif column == 2%} {%- set column = 0 %}\n{% else %}{%- set column = column+1 -%}{%- endif %}\n\t\n{% endfor %}\n
{{doc.name}}
{{doc.patient}}
\n{% if doc.patient_age %}{{doc.patient_age}}, {% endif %} {% if doc.patient_sex %}{{doc.patient_sex}}{% endif %}
{% if doc.collected_time %}{{doc.collected_time}} {% endif %}
{% if doc.collected_by %} {{doc.collected_by}} {% endif %}
", + "idx": 0, + "line_breaks": 0, + "modified": "2017-03-30 18:09:39.537609", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Sample ID Print", + "owner": "Administrator", + "print_format_builder": 0, + "print_format_type": "Server", + "show_section_headings": 0, + "standard": "Yes" +} diff --git a/erpnext/healthcare/report/__init__.py b/erpnext/healthcare/report/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/report/lab_test_report/__init__.py b/erpnext/healthcare/report/lab_test_report/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/report/lab_test_report/lab_test_report.js b/erpnext/healthcare/report/lab_test_report/lab_test_report.js new file mode 100644 index 0000000000..3128f819bb --- /dev/null +++ b/erpnext/healthcare/report/lab_test_report/lab_test_report.js @@ -0,0 +1,32 @@ +// Copyright (c) 2016, ESS +// License: See license.txt + +frappe.query_reports["Lab Test Report"] = { + "filters": [ + { + "fieldname":"from_date", + "label": __("From Date"), + "fieldtype": "Date", + "default": frappe.datetime.now_date(), + "width": "80" + }, + { + "fieldname":"to_date", + "label": __("To Date"), + "fieldtype": "Date", + "default": frappe.datetime.now_date() + }, + { + "fieldname":"patient", + "label": __("Patient"), + "fieldtype": "Link", + "options": "Patient" + }, + { + "fieldname":"department", + "label": __("Medical Department"), + "fieldtype": "Link", + "options": "Medical Department" + } + ] +}; diff --git a/erpnext/healthcare/report/lab_test_report/lab_test_report.json b/erpnext/healthcare/report/lab_test_report/lab_test_report.json new file mode 100644 index 0000000000..f133a8e1b7 --- /dev/null +++ b/erpnext/healthcare/report/lab_test_report/lab_test_report.json @@ -0,0 +1,26 @@ +{ + "add_total_row": 1, + "apply_user_permissions": 1, + "creation": "2013-04-23 18:15:29", + "disabled": 0, + "docstatus": 0, + "doctype": "Report", + "idx": 1, + "is_standard": "Yes", + "modified": "2017-08-23 14:54:12.593140", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "Lab Test Report", + "owner": "Administrator", + "ref_doctype": "Lab Test", + "report_name": "Lab Test Report", + "report_type": "Script Report", + "roles": [ + { + "role": "Laboratory User" + }, + { + "role": "System Manager" + } + ] +} \ No newline at end of file diff --git a/erpnext/healthcare/report/lab_test_report/lab_test_report.py b/erpnext/healthcare/report/lab_test_report/lab_test_report.py new file mode 100644 index 0000000000..61769f82b9 --- /dev/null +++ b/erpnext/healthcare/report/lab_test_report/lab_test_report.py @@ -0,0 +1,58 @@ +# Copyright (c) 2016, ESS +# License: See license.txt + +from __future__ import unicode_literals +import frappe +from frappe import msgprint, _ + +def execute(filters=None): + if not filters: filters = {} + + lab_test_list = get_lab_test(filters) + columns = get_columns() + + if not lab_test_list: + msgprint(_("No record found")) + return columns, lab_test_list + + data = [] + for lab_test in lab_test_list: + row = [ lab_test.test_name, lab_test.patient, lab_test.physician, lab_test.invoice, lab_test.status, lab_test.result_date, lab_test.department] + data.append(row) + + return columns, data + + +def get_columns(): + columns = [ + _("Test") + ":Data:120", + _("Patient") + ":Link/Patient:180", + _("Doctor") + ":Link/Physician:120", + _("Invoice") + ":Link/Sales Invoice:120", + _("Status") + ":Data:120", + _("Result Date") + ":Date:120", + _("Department") + ":Data:120", + ] + + return columns + +def get_conditions(filters): + conditions = "" + + if filters.get("patient"): + conditions += "and patient = %(patient)s" + if filters.get("from_date"): + conditions += "and result_date >= %(from_date)s" + if filters.get("to_date"): + conditions += " and result_date <= %(to_date)s" + if filters.get("department"): + conditions += " and department = %(department)s" + + return conditions + +def get_lab_test(filters): + conditions = get_conditions(filters) + return frappe.db.sql("""select name, patient, test_name, patient_name, status, result_date, physician, invoice, department + from `tabLab Test` + where docstatus<2 %s order by submitted_date desc, name desc""" % + conditions, filters, as_dict=1) diff --git a/erpnext/healthcare/web_form/__init__.py b/erpnext/healthcare/web_form/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/web_form/lab_test/__init__.py b/erpnext/healthcare/web_form/lab_test/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/web_form/lab_test/lab_test.js b/erpnext/healthcare/web_form/lab_test/lab_test.js new file mode 100644 index 0000000000..efcd8abc89 --- /dev/null +++ b/erpnext/healthcare/web_form/lab_test/lab_test.js @@ -0,0 +1,34 @@ +frappe.ready(function() { + // bind events here + var normal_test_items = $('div[data-fieldname = "normal_test_items"]'); + var normal_test_items_add_btn = $('button[data-fieldname = "normal_test_items"]'); + var special_test_items = $('div[data-fieldname = "special_test_items"]'); + var special_test_items_add_btn = $('button[data-fieldname = "special_test_items"]'); + var sensitivity_test_items = $('div[data-fieldname = "sensitivity_test_items"]'); + var sensitivity_test_items_add_btn = $('button[data-fieldname = "sensitivity_test_items"]'); + var sensitivity_toggle = $('input[name = "sensitivity_toggle"]'); + var special_toggle = $('input[name = "special_toggle"]'); + var normal_toggle = $('input[name = "normal_toggle"]'); + if(normal_toggle.val() == 1){ + // normal_test_items[0].style.display = "none"; + // normal_test_items[0].setAttribute("hidden", true); + // normal_test_items_add_btn[0].style.visibility = "hidden"; + special_test_items[0].style.display = "none"; + special_test_items_add_btn[0].style.display = "none"; + sensitivity_test_items[0].style.display = "none"; + sensitivity_test_items_add_btn[0].style.display = "none"; + normal_test_items_add_btn[0].style.display = "none"; + }else if(sensitivity_toggle.val() == 1){ + special_test_items[0].style.display = "none"; + special_test_items_add_btn[0].style.display = "none"; + normal_test_items[0].style.display = "none"; + normal_test_items_add_btn[0].style.display = "none"; + sensitivity_test_items_add_btn[0].style.display = "none"; + }else if(special_toggle.val() == 1){ + normal_test_items[0].style.display = "none"; + normal_test_items_add_btn[0].style.display = "none"; + sensitivity_test_items[0].style.display = "none"; + sensitivity_test_items_add_btn[0].style.display = "none"; + special_test_items_add_btn[0].style.display = "none"; + } +}); diff --git a/erpnext/healthcare/web_form/lab_test/lab_test.json b/erpnext/healthcare/web_form/lab_test/lab_test.json new file mode 100644 index 0000000000..fec34b6dbc --- /dev/null +++ b/erpnext/healthcare/web_form/lab_test/lab_test.json @@ -0,0 +1,235 @@ +{ + "accept_payment": 0, + "allow_comments": 0, + "allow_delete": 0, + "allow_edit": 1, + "allow_incomplete": 0, + "allow_multiple": 1, + "allow_print": 1, + "amount": 0.0, + "amount_based_on_field": 0, + "creation": "2017-06-06 16:12:33.052258", + "currency": "INR", + "doc_type": "Lab Test", + "docstatus": 0, + "doctype": "Web Form", + "idx": 0, + "introduction_text": "Lab Test", + "is_standard": 1, + "login_required": 1, + "max_attachment_size": 0, + "modified": "2017-06-07 16:03:06.781364", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "lab-test", + "owner": "Administrator", + "payment_button_label": "Buy Now", + "print_format": "Lab Test Print", + "published": 1, + "route": "lab-test", + "show_sidebar": 1, + "sidebar_items": [], + "success_url": "/lab-test", + "title": "Lab Test", + "web_form_fields": [ + { + "fieldname": "naming_series", + "fieldtype": "Select", + "hidden": 0, + "label": "Series", + "max_length": 0, + "max_value": 0, + "options": "LP-", + "read_only": 0, + "reqd": 1 + }, + { + "fieldname": "invoice", + "fieldtype": "Link", + "hidden": 0, + "label": "Invoice", + "max_length": 0, + "max_value": 0, + "options": "Sales Invoice", + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "patient", + "fieldtype": "Link", + "hidden": 0, + "label": "Patient", + "max_length": 0, + "max_value": 0, + "options": "Patient", + "read_only": 0, + "reqd": 1 + }, + { + "fieldname": "patient_name", + "fieldtype": "Data", + "hidden": 0, + "label": "Patient Name", + "max_length": 0, + "max_value": 0, + "options": "patient.patient_name", + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "physician", + "fieldtype": "Link", + "hidden": 0, + "label": "Doctor", + "max_length": 0, + "max_value": 0, + "options": "Physician", + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "status", + "fieldtype": "Select", + "hidden": 0, + "label": "Status", + "max_length": 0, + "max_value": 0, + "options": "Draft\nCompleted\nApproved\nRejected\nCancelled", + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "department", + "fieldtype": "Link", + "hidden": 0, + "label": "Department", + "max_length": 0, + "max_value": 0, + "options": "Medical Department", + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "sample", + "fieldtype": "Link", + "hidden": 0, + "label": "Sample ID", + "max_length": 0, + "max_value": 0, + "options": "Sample Collection", + "read_only": 0, + "reqd": 0 + }, + { + "default": "", + "fieldname": "result_date", + "fieldtype": "Date", + "hidden": 0, + "label": "Result Date", + "max_length": 0, + "max_value": 0, + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "report_preference", + "fieldtype": "Data", + "hidden": 0, + "label": "Report Preference", + "max_length": 0, + "max_value": 0, + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "test_name", + "fieldtype": "Data", + "hidden": 0, + "label": "Test Name", + "max_length": 0, + "max_value": 0, + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "normal_test_items", + "fieldtype": "Table", + "hidden": 0, + "max_length": 0, + "max_value": 0, + "options": "Normal Test Items", + "read_only": 1, + "reqd": 0 + }, + { + "fieldname": "special_test_items", + "fieldtype": "Table", + "hidden": 0, + "max_length": 0, + "max_value": 0, + "options": "Special Test Items", + "read_only": 1, + "reqd": 0 + }, + { + "fieldname": "sensitivity_test_items", + "fieldtype": "Table", + "hidden": 0, + "max_length": 0, + "max_value": 0, + "options": "Sensitivity Test Items", + "read_only": 1, + "reqd": 0 + }, + { + "fieldname": "test_comment", + "fieldtype": "Text", + "hidden": 0, + "label": "Comments", + "max_length": 0, + "max_value": 0, + "read_only": 1, + "reqd": 0 + }, + { + "fieldname": "custom_result", + "fieldtype": "Text Editor", + "hidden": 0, + "label": "Custom Result", + "max_length": 0, + "max_value": 0, + "read_only": 1, + "reqd": 0 + }, + { + "default": "0", + "fieldname": "sensitivity_toggle", + "fieldtype": "Check", + "hidden": 1, + "max_length": 0, + "max_value": 0, + "read_only": 0, + "reqd": 0 + }, + { + "default": "0", + "fieldname": "special_toggle", + "fieldtype": "Check", + "hidden": 1, + "max_length": 0, + "max_value": 0, + "read_only": 0, + "reqd": 0 + }, + { + "default": "0", + "fieldname": "normal_toggle", + "fieldtype": "Check", + "hidden": 1, + "max_length": 0, + "max_value": 0, + "read_only": 0, + "reqd": 0 + } + ] +} \ No newline at end of file diff --git a/erpnext/healthcare/web_form/lab_test/lab_test.py b/erpnext/healthcare/web_form/lab_test/lab_test.py new file mode 100644 index 0000000000..5a8c8a421c --- /dev/null +++ b/erpnext/healthcare/web_form/lab_test/lab_test.py @@ -0,0 +1,25 @@ +from __future__ import unicode_literals + +import frappe + +def get_context(context): + context.read_only = 1 + +def get_list_context(context): + context.row_template = "erpnext/templates/includes/healthcare/lab_test_row_template.html" + context.get_list = get_lab_test_list + +def get_lab_test_list(doctype, txt, filters, limit_start, limit_page_length = 20, order_by='modified desc'): + patient = get_patient() + lab_tests = frappe.db.sql("""select * from `tabLab Test` + where patient = %s order by result_date""", patient, as_dict = True) + return lab_tests + +def get_patient(): + return frappe.get_value("Patient",{"email": frappe.session.user}, "name") + +def has_website_permission(doc, ptype, user, verbose=False): + if doc.patient == get_patient(): + return True + else: + return False diff --git a/erpnext/healthcare/web_form/patient_appointments/__init__.py b/erpnext/healthcare/web_form/patient_appointments/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/web_form/patient_appointments/patient_appointments.js b/erpnext/healthcare/web_form/patient_appointments/patient_appointments.js new file mode 100644 index 0000000000..f09e540919 --- /dev/null +++ b/erpnext/healthcare/web_form/patient_appointments/patient_appointments.js @@ -0,0 +1,3 @@ +frappe.ready(function() { + // bind events here +}); diff --git a/erpnext/healthcare/web_form/patient_appointments/patient_appointments.json b/erpnext/healthcare/web_form/patient_appointments/patient_appointments.json new file mode 100644 index 0000000000..613e3673e3 --- /dev/null +++ b/erpnext/healthcare/web_form/patient_appointments/patient_appointments.json @@ -0,0 +1,111 @@ +{ + "accept_payment": 0, + "allow_comments": 0, + "allow_delete": 0, + "allow_edit": 1, + "allow_incomplete": 0, + "allow_multiple": 1, + "allow_print": 1, + "amount": 0.0, + "amount_based_on_field": 0, + "creation": "2017-06-07 15:30:44.984832", + "currency": "INR", + "doc_type": "Patient Appointment", + "docstatus": 0, + "doctype": "Web Form", + "idx": 0, + "introduction_text": "Patient Appointments", + "is_standard": 1, + "login_required": 1, + "max_attachment_size": 0, + "modified": "2017-06-07 15:57:27.196428", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "patient-appointments", + "owner": "Administrator", + "payment_button_label": "Buy Now", + "published": 1, + "route": "patient-appointments", + "show_sidebar": 1, + "sidebar_items": [], + "success_url": "/patient-appointments", + "title": "Patient Appointments", + "web_form_fields": [ + { + "fieldname": "patient", + "fieldtype": "Link", + "hidden": 0, + "label": "Patient", + "max_length": 0, + "max_value": 0, + "options": "Patient", + "read_only": 0, + "reqd": 1 + }, + { + "fieldname": "physician", + "fieldtype": "Link", + "hidden": 0, + "label": "Physician", + "max_length": 0, + "max_value": 0, + "options": "Physician", + "read_only": 0, + "reqd": 1 + }, + { + "fieldname": "appointment_date", + "fieldtype": "Date", + "hidden": 0, + "label": "Date", + "max_length": 0, + "max_value": 0, + "read_only": 0, + "reqd": 1 + }, + { + "fieldname": "appointment_time", + "fieldtype": "Data", + "hidden": 0, + "label": "Time", + "max_length": 0, + "max_value": 0, + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "department", + "fieldtype": "Link", + "hidden": 0, + "label": "Department", + "max_length": 0, + "max_value": 0, + "options": "Medical Department", + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "appointment_type", + "fieldtype": "Link", + "hidden": 0, + "label": "Type", + "max_length": 0, + "max_value": 0, + "options": "Appointment Type", + "read_only": 0, + "reqd": 0 + }, + { + "default": "Scheduled", + "fieldname": "status", + "fieldtype": "Select", + "hidden": 0, + "label": "Status", + "max_length": 0, + "max_value": 0, + "options": "\nScheduled\nOpen\nClosed\nPending\nCancelled", + "read_only": 1, + "reqd": 0 + } + ] +} \ No newline at end of file diff --git a/erpnext/healthcare/web_form/patient_appointments/patient_appointments.py b/erpnext/healthcare/web_form/patient_appointments/patient_appointments.py new file mode 100644 index 0000000000..09bcb42b57 --- /dev/null +++ b/erpnext/healthcare/web_form/patient_appointments/patient_appointments.py @@ -0,0 +1,25 @@ +from __future__ import unicode_literals + +import frappe + +def get_context(context): + context.read_only = 1 + +def get_list_context(context): + context.row_template = "erpnext/templates/includes/healthcare/appointment_row_template.html" + context.get_list = get_appointment_list + +def get_appointment_list(doctype, txt, filters, limit_start, limit_page_length = 20, order_by='modified desc'): + patient = get_patient() + lab_tests = frappe.db.sql("""select * from `tabPatient Appointment` + where patient = %s and (status = 'Open' or status = 'Scheduled') order by appointment_date""", patient, as_dict = True) + return lab_tests + +def get_patient(): + return frappe.get_value("Patient",{"email": frappe.session.user}, "name") + +def has_website_permission(doc, ptype, user, verbose=False): + if doc.patient == get_patient(): + return True + else: + return False diff --git a/erpnext/healthcare/web_form/prescription/__init__.py b/erpnext/healthcare/web_form/prescription/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/healthcare/web_form/prescription/prescription.js b/erpnext/healthcare/web_form/prescription/prescription.js new file mode 100644 index 0000000000..f09e540919 --- /dev/null +++ b/erpnext/healthcare/web_form/prescription/prescription.js @@ -0,0 +1,3 @@ +frappe.ready(function() { + // bind events here +}); diff --git a/erpnext/healthcare/web_form/prescription/prescription.json b/erpnext/healthcare/web_form/prescription/prescription.json new file mode 100644 index 0000000000..5f251a31e8 --- /dev/null +++ b/erpnext/healthcare/web_form/prescription/prescription.json @@ -0,0 +1,112 @@ +{ + "accept_payment": 0, + "allow_comments": 0, + "allow_delete": 0, + "allow_edit": 1, + "allow_incomplete": 0, + "allow_multiple": 1, + "allow_print": 1, + "amount": 0.0, + "amount_based_on_field": 0, + "creation": "2017-06-06 17:13:19.101374", + "currency": "INR", + "doc_type": "Consultation", + "docstatus": 0, + "doctype": "Web Form", + "idx": 0, + "introduction_text": "Patient Prescriptions", + "is_standard": 1, + "login_required": 1, + "max_attachment_size": 0, + "modified": "2017-06-20 11:56:05.132154", + "modified_by": "Administrator", + "module": "Healthcare", + "name": "prescription", + "owner": "Administrator", + "payment_button_label": "Buy Now", + "print_format": "Consultation Print", + "published": 1, + "route": "prescription", + "show_sidebar": 1, + "sidebar_items": [], + "success_url": "/prescription", + "title": "Prescription", + "web_form_fields": [ + { + "fieldname": "physician", + "fieldtype": "Link", + "hidden": 0, + "label": "Doctor", + "max_length": 0, + "max_value": 0, + "options": "Physician", + "read_only": 0, + "reqd": 1 + }, + { + "fieldname": "visit_department", + "fieldtype": "Link", + "hidden": 0, + "label": "Department", + "max_length": 0, + "max_value": 0, + "options": "Medical Department", + "read_only": 0, + "reqd": 0 + }, + { + "default": "Today", + "fieldname": "consultation_date", + "fieldtype": "Date", + "hidden": 0, + "label": "Consultation Date", + "max_length": 0, + "max_value": 0, + "read_only": 0, + "reqd": 1 + }, + { + "default": "", + "fieldname": "consultation_time", + "fieldtype": "Data", + "hidden": 0, + "label": "Consultation Time", + "max_length": 0, + "max_value": 0, + "read_only": 0, + "reqd": 1 + }, + { + "fieldname": "drug_prescription", + "fieldtype": "Table", + "hidden": 0, + "label": "Drug Prescription", + "max_length": 0, + "max_value": 0, + "options": "Drug Prescription", + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "test_prescription", + "fieldtype": "Table", + "hidden": 0, + "label": "Investigations", + "max_length": 0, + "max_value": 0, + "options": "Lab Prescription", + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "consultation_comment", + "fieldtype": "Small Text", + "hidden": 0, + "label": "Review Details", + "max_length": 0, + "max_value": 0, + "read_only": 0, + "reqd": 0 + } + ] +} \ No newline at end of file diff --git a/erpnext/healthcare/web_form/prescription/prescription.py b/erpnext/healthcare/web_form/prescription/prescription.py new file mode 100644 index 0000000000..73b035071c --- /dev/null +++ b/erpnext/healthcare/web_form/prescription/prescription.py @@ -0,0 +1,25 @@ +from __future__ import unicode_literals + +import frappe + +def get_context(context): + context.read_only = 1 + +def get_list_context(context): + context.row_template = "erpnext/templates/includes/healthcare/prescription_row_template.html" + context.get_list = get_consultation_list + +def get_consultation_list(doctype, txt, filters, limit_start, limit_page_length = 20, order_by='modified desc'): + patient = get_patient() + consultations = frappe.db.sql("""select * from `tabConsultation` + where patient = %s order by creation desc""", patient, as_dict = True) + return consultations + +def get_patient(): + return frappe.get_value("Patient",{"email": frappe.session.user}, "name") + +def has_website_permission(doc, ptype, user, verbose=False): + if doc.patient == get_patient(): + return True + else: + return False diff --git a/erpnext/hooks.py b/erpnext/hooks.py index 0e3aa79b36..88f719aaf8 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -129,7 +129,10 @@ standard_portal_menu_items = [ {"title": _("Issues"), "route": "/issues", "reference_doctype": "Issue", "role":"Customer"}, {"title": _("Addresses"), "route": "/addresses", "reference_doctype": "Address"}, {"title": _("Fees"), "route": "/fees", "reference_doctype": "Fees", "role":"Student"}, - {"title": _("Timesheets"), "route": "/timesheets", "reference_doctype": "Timesheet", "role":"Customer"} + {"title": _("Timesheets"), "route": "/timesheets", "reference_doctype": "Timesheet", "role":"Customer"}, + {"title": _("Lab Test"), "route": "/lab-test", "reference_doctype": "Lab Test", "role":"Patient"}, + {"title": _("Prescription"), "route": "/prescription", "reference_doctype": "Consultation", "role":"Patient"}, + {"title": _("Patient Appointment"), "route": "/patient-appointments", "reference_doctype": "Patient Appointment", "role":"Patient"} ] default_roles = [ @@ -145,7 +148,10 @@ has_website_permission = { "Supplier Quotation": "erpnext.controllers.website_list_for_contact.has_website_permission", "Delivery Note": "erpnext.controllers.website_list_for_contact.has_website_permission", "Issue": "erpnext.support.doctype.issue.issue.has_website_permission", - "Timesheet": "erpnext.controllers.website_list_for_contact.has_website_permission" + "Timesheet": "erpnext.controllers.website_list_for_contact.has_website_permission", + "Lab Test": "erpnext.healthcare.web_form.lab_test.lab_test.has_website_permission", + "Consultation": "erpnext.healthcare.web_form.prescription.prescription.has_website_permission", + "Patient Appointment": "erpnext.healthcare.web_form.patient_appointments.patient_appointments.has_website_permission" } dump_report_map = "erpnext.startup.report_data_map.data_map" diff --git a/erpnext/modules.txt b/erpnext/modules.txt index 0579cc2119..6f4a5b7a59 100644 --- a/erpnext/modules.txt +++ b/erpnext/modules.txt @@ -15,4 +15,5 @@ Portal Maintenance Schools Regional +Healthcare Subscription \ No newline at end of file diff --git a/erpnext/public/js/setup_wizard.js b/erpnext/public/js/setup_wizard.js index 320d871849..88178f42ce 100644 --- a/erpnext/public/js/setup_wizard.js +++ b/erpnext/public/js/setup_wizard.js @@ -25,7 +25,8 @@ erpnext.setup.slides_settings = [ { "label": __("Manufacturing"), "value": "Manufacturing" }, { "label": __("Retail"), "value": "Retail" }, { "label": __("Services"), "value": "Services" }, - { "label": __("Education"), "value": "Education" } + { "label": __("Education (beta)"), "value": "Education" }, + {"label": __("Healthcare (beta)"), "value": "Healthcare"} ], reqd: 1 }, ], @@ -134,12 +135,10 @@ erpnext.setup.slides_settings = [ frappe.msgprint(__("Please enter valid Financial Year Start and End Dates")); return false; } - if ((this.values.company_name || "").toLowerCase() == "company") { frappe.msgprint(__("Company Name cannot be Company")); return false; } - return true; }, @@ -163,7 +162,6 @@ erpnext.setup.slides_settings = [ slide.get_field("fy_start_date").set_value(current_year + '-' + fy[0]); slide.get_field("fy_end_date").set_value(next_year + '-' + fy[1]); } - }, diff --git a/erpnext/regional/india/setup.py b/erpnext/regional/india/setup.py index 466c77892e..106a3d5740 100644 --- a/erpnext/regional/india/setup.py +++ b/erpnext/regional/india/setup.py @@ -4,7 +4,7 @@ from __future__ import unicode_literals import frappe, os, json -from frappe.custom.doctype.custom_field.custom_field import create_custom_field +from frappe.custom.doctype.custom_field.custom_field import create_custom_fields from frappe.permissions import add_permission from erpnext.regional.india import states @@ -148,15 +148,7 @@ def make_custom_fields(): 'Purchase Invoice Item': [hsn_sac_field] } - for doctype, fields in custom_fields.items(): - for df in fields: - field = frappe.db.get_value("Custom Field", {"dt": doctype, "fieldname": df["fieldname"]}) - if not field: - create_custom_field(doctype, df) - else: - custom_field = frappe.get_doc("Custom Field", field) - custom_field.update(df) - custom_field.save() + create_custom_fields(custom_fields) def make_fixtures(): docs = [ diff --git a/erpnext/selling/doctype/customer/customer.py b/erpnext/selling/doctype/customer/customer.py index 52dcb73c03..64cd190d21 100644 --- a/erpnext/selling/doctype/customer/customer.py +++ b/erpnext/selling/doctype/customer/customer.py @@ -18,7 +18,7 @@ class Customer(TransactionBase): def onload(self): """Load address and contacts in `__onload`""" - load_address_and_contact(self, "customer") + load_address_and_contact(self) self.load_dashboard_info() def load_dashboard_info(self): diff --git a/erpnext/setup/doctype/company/company.json b/erpnext/setup/doctype/company/company.json index 15e6b4b5b9..ec83705a43 100644 --- a/erpnext/setup/doctype/company/company.json +++ b/erpnext/setup/doctype/company/company.json @@ -1,198 +1,198 @@ { - "allow_copy": 0, - "allow_guest_to_view": 0, - "allow_import": 1, - "allow_rename": 1, - "autoname": "field:company_name", - "beta": 0, - "creation": "2013-04-10 08:35:39", - "custom": 0, - "description": "Legal Entity / Subsidiary with a separate Chart of Accounts belonging to the Organization.", - "docstatus": 0, - "doctype": "DocType", - "document_type": "Setup", - "editable_grid": 0, - "engine": "InnoDB", + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 1, + "allow_rename": 1, + "autoname": "field:company_name", + "beta": 0, + "creation": "2013-04-10 08:35:39", + "custom": 0, + "description": "Legal Entity / Subsidiary with a separate Chart of Accounts belonging to the Organization.", + "docstatus": 0, + "doctype": "DocType", + "document_type": "Setup", + "editable_grid": 0, + "engine": "InnoDB", "fields": [ { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "details", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "", - "length": 0, - "no_copy": 0, - "oldfieldtype": "Section Break", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "details", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "", + "length": 0, + "no_copy": 0, + "oldfieldtype": "Section Break", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "company_name", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Company", - "length": 0, - "no_copy": 0, - "oldfieldname": "company_name", - "oldfieldtype": "Data", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "company_name", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Company", + "length": 0, + "no_copy": 0, + "oldfieldname": "company_name", + "oldfieldtype": "Data", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "description": "", - "fieldname": "abbr", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Abbr", - "length": 0, - "no_copy": 0, - "oldfieldname": "abbr", - "oldfieldtype": "Data", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "", + "fieldname": "abbr", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Abbr", + "length": 0, + "no_copy": 0, + "oldfieldname": "abbr", + "oldfieldtype": "Data", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "eval:!doc.__islocal && in_list(frappe.user_roles, \"System Manager\")", - "fieldname": "change_abbr", - "fieldtype": "Button", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Change Abbreviation", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:!doc.__islocal && in_list(frappe.user_roles, \"System Manager\")", + "fieldname": "change_abbr", + "fieldtype": "Button", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Change Abbreviation", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "cb0", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "cb0", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "domain", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Domain", - "length": 0, - "no_copy": 0, - "options": "Distribution\nManufacturing\nRetail\nServices\nEducation\nOther", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "domain", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Domain", + "length": 0, + "no_copy": 0, + "options": "Distribution\nManufacturing\nRetail\nServices\nEducation\nHealthcare\nOther", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 }, { @@ -650,1332 +650,1332 @@ "search_index": 0, "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "default_settings", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Accounts Settings", - "length": 0, - "no_copy": 0, - "oldfieldtype": "Section Break", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "default_settings", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Accounts Settings", + "length": 0, + "no_copy": 0, + "oldfieldtype": "Section Break", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "eval:!doc.__islocal", - "fieldname": "default_bank_account", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 1, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Default Bank Account", - "length": 0, - "no_copy": 1, - "oldfieldname": "default_bank_account", - "oldfieldtype": "Link", - "options": "Account", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:!doc.__islocal", + "fieldname": "default_bank_account", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 1, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Default Bank Account", + "length": 0, + "no_copy": 1, + "oldfieldname": "default_bank_account", + "oldfieldtype": "Link", + "options": "Account", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "eval:!doc.__islocal", - "fieldname": "default_cash_account", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 1, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Default Cash Account", - "length": 0, - "no_copy": 1, - "options": "Account", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:!doc.__islocal", + "fieldname": "default_cash_account", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 1, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Default Cash Account", + "length": 0, + "no_copy": 1, + "options": "Account", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "eval:!doc.__islocal", - "fieldname": "default_receivable_account", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 1, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Default Receivable Account", - "length": 0, - "no_copy": 1, - "oldfieldname": "receivables_group", - "oldfieldtype": "Link", - "options": "Account", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:!doc.__islocal", + "fieldname": "default_receivable_account", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 1, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Default Receivable Account", + "length": 0, + "no_copy": 1, + "oldfieldname": "receivables_group", + "oldfieldtype": "Link", + "options": "Account", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "round_off_account", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Round Off Account", - "length": 0, - "no_copy": 0, - "options": "Account", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "round_off_account", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Round Off Account", + "length": 0, + "no_copy": 0, + "options": "Account", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "write_off_account", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Write Off Account", - "length": 0, - "no_copy": 0, - "options": "Account", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "write_off_account", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Write Off Account", + "length": 0, + "no_copy": 0, + "options": "Account", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "exchange_gain_loss_account", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Exchange Gain / Loss Account", - "length": 0, - "no_copy": 0, - "options": "Account", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "exchange_gain_loss_account", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Exchange Gain / Loss Account", + "length": 0, + "no_copy": 0, + "options": "Account", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break0", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "oldfieldtype": "Column Break", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break0", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "oldfieldtype": "Column Break", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0, "width": "50%" - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "eval:!doc.__islocal", - "fieldname": "default_payable_account", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 1, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Default Payable Account", - "length": 0, - "no_copy": 1, - "oldfieldname": "payables_group", - "oldfieldtype": "Link", - "options": "Account", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:!doc.__islocal", + "fieldname": "default_payable_account", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 1, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Default Payable Account", + "length": 0, + "no_copy": 1, + "oldfieldname": "payables_group", + "oldfieldtype": "Link", + "options": "Account", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "eval:!doc.__islocal", - "fieldname": "default_expense_account", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 1, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Default Cost of Goods Sold Account", - "length": 0, - "no_copy": 1, - "options": "Account", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:!doc.__islocal", + "fieldname": "default_expense_account", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 1, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Default Cost of Goods Sold Account", + "length": 0, + "no_copy": 1, + "options": "Account", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "eval:!doc.__islocal", - "fieldname": "default_income_account", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 1, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Default Income Account", - "length": 0, - "no_copy": 1, - "options": "Account", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:!doc.__islocal", + "fieldname": "default_income_account", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 1, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Default Income Account", + "length": 0, + "no_copy": 1, + "options": "Account", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "eval:!doc.__islocal", - "fieldname": "default_payroll_payable_account", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 1, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Default Payroll Payable Account", - "length": 0, - "no_copy": 1, - "options": "Account", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:!doc.__islocal", + "fieldname": "default_payroll_payable_account", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 1, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Default Payroll Payable Account", + "length": 0, + "no_copy": 1, + "options": "Account", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "round_off_cost_center", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Round Off Cost Center", - "length": 0, - "no_copy": 0, - "options": "Cost Center", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "round_off_cost_center", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Round Off Cost Center", + "length": 0, + "no_copy": 0, + "options": "Cost Center", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "section_break_22", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_22", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "eval:!doc.__islocal", - "fieldname": "cost_center", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 1, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Default Cost Center", - "length": 0, - "no_copy": 1, - "options": "Cost Center", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:!doc.__islocal", + "fieldname": "cost_center", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 1, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Default Cost Center", + "length": 0, + "no_copy": 1, + "options": "Cost Center", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "eval:!doc.__islocal", - "fieldname": "credit_limit", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Credit Limit", - "length": 0, - "no_copy": 0, - "oldfieldname": "credit_limit", - "oldfieldtype": "Currency", - "options": "default_currency", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:!doc.__islocal", + "fieldname": "credit_limit", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Credit Limit", + "length": 0, + "no_copy": 0, + "oldfieldname": "credit_limit", + "oldfieldtype": "Currency", + "options": "default_currency", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_26", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_26", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "credit_days_based_on", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Credit Days Based On", - "length": 0, - "no_copy": 0, - "options": "\nFixed Days\nLast Day of the Next Month", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "credit_days_based_on", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Credit Days Based On", + "length": 0, + "no_copy": 0, + "options": "\nFixed Days\nLast Day of the Next Month", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "eval:(!doc.__islocal && doc.credit_days_based_on=='Fixed Days')", - "fieldname": "credit_days", - "fieldtype": "Int", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Credit Days", - "length": 0, - "no_copy": 0, - "oldfieldname": "credit_days", - "oldfieldtype": "Int", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:(!doc.__islocal && doc.credit_days_based_on=='Fixed Days')", + "fieldname": "credit_days", + "fieldtype": "Int", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Credit Days", + "length": 0, + "no_copy": 0, + "oldfieldname": "credit_days", + "oldfieldtype": "Int", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "eval:!doc.__islocal", - "fieldname": "auto_accounting_for_stock_settings", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Stock Settings", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:!doc.__islocal", + "fieldname": "auto_accounting_for_stock_settings", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Stock Settings", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "default": "1", - "fieldname": "enable_perpetual_inventory", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Enable Perpetual Inventory", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "1", + "fieldname": "enable_perpetual_inventory", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Enable Perpetual Inventory", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "default_inventory_account", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Default Inventory Account", - "length": 0, - "no_copy": 0, - "options": "Account", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "default_inventory_account", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Default Inventory Account", + "length": 0, + "no_copy": 0, + "options": "Account", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "stock_adjustment_account", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 1, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Stock Adjustment Account", - "length": 0, - "no_copy": 1, - "options": "Account", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "stock_adjustment_account", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 1, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Stock Adjustment Account", + "length": 0, + "no_copy": 1, + "options": "Account", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_32", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_32", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "stock_received_but_not_billed", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 1, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Stock Received But Not Billed", - "length": 0, - "no_copy": 1, - "options": "Account", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "stock_received_but_not_billed", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 1, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Stock Received But Not Billed", + "length": 0, + "no_copy": 1, + "options": "Account", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "expenses_included_in_valuation", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 1, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Expenses Included In Valuation", - "length": 0, - "no_copy": 1, - "options": "Account", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "expenses_included_in_valuation", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 1, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Expenses Included In Valuation", + "length": 0, + "no_copy": 1, + "options": "Account", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "fixed_asset_depreciation_settings", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Fixed Asset Depreciation Settings", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "fixed_asset_depreciation_settings", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Fixed Asset Depreciation Settings", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "accumulated_depreciation_account", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Accumulated Depreciation Account", - "length": 0, - "no_copy": 1, - "options": "Account", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "accumulated_depreciation_account", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Accumulated Depreciation Account", + "length": 0, + "no_copy": 1, + "options": "Account", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "depreciation_expense_account", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Depreciation Expense Account", - "length": 0, - "no_copy": 1, - "options": "Account", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "depreciation_expense_account", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Depreciation Expense Account", + "length": 0, + "no_copy": 1, + "options": "Account", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "series_for_depreciation_entry", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Series for Asset Depreciation Entry (Journal Entry)", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "series_for_depreciation_entry", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Series for Asset Depreciation Entry (Journal Entry)", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_40", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_40", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "disposal_account", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Gain/Loss Account on Asset Disposal", - "length": 0, - "no_copy": 1, - "options": "Account", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "disposal_account", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Gain/Loss Account on Asset Disposal", + "length": 0, + "no_copy": 1, + "options": "Account", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "depreciation_cost_center", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Asset Depreciation Cost Center", - "length": 0, - "no_copy": 1, - "options": "Cost Center", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "depreciation_cost_center", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Asset Depreciation Cost Center", + "length": 0, + "no_copy": 1, + "options": "Cost Center", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "description": "For reference only.", - "fieldname": "company_info", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Company Info", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "For reference only.", + "fieldname": "company_info", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Company Info", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "address_html", - "fieldtype": "HTML", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "address_html", + "fieldtype": "HTML", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break1", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "oldfieldtype": "Column Break", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break1", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "oldfieldtype": "Column Break", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0, "width": "50%" - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "phone_no", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Phone No", - "length": 0, - "no_copy": 0, - "oldfieldname": "phone_no", - "oldfieldtype": "Data", - "options": "Phone", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "phone_no", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Phone No", + "length": 0, + "no_copy": 0, + "oldfieldname": "phone_no", + "oldfieldtype": "Data", + "options": "Phone", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "fax", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Fax", - "length": 0, - "no_copy": 0, - "oldfieldname": "fax", - "oldfieldtype": "Data", - "options": "Phone", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "fax", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Fax", + "length": 0, + "no_copy": 0, + "oldfieldname": "fax", + "oldfieldtype": "Data", + "options": "Phone", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "email", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Email", - "length": 0, - "no_copy": 0, - "oldfieldname": "email", - "oldfieldtype": "Data", - "options": "Email", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "email", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Email", + "length": 0, + "no_copy": 0, + "oldfieldname": "email", + "oldfieldtype": "Data", + "options": "Email", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "website", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Website", - "length": 0, - "no_copy": 0, - "oldfieldname": "website", - "oldfieldtype": "Data", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "website", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Website", + "length": 0, + "no_copy": 0, + "oldfieldname": "website", + "oldfieldtype": "Data", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "description": "", - "fieldname": "registration_info", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "", - "length": 0, - "no_copy": 0, - "oldfieldtype": "Section Break", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "", + "fieldname": "registration_info", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "", + "length": 0, + "no_copy": 0, + "oldfieldtype": "Section Break", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0, "width": "50%" - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "description": "Company registration numbers for your reference. Tax numbers etc.", - "fieldname": "registration_details", - "fieldtype": "Code", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Registration Details", - "length": 0, - "no_copy": 0, - "oldfieldname": "registration_details", - "oldfieldtype": "Code", - "permlevel": 0, - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "Company registration numbers for your reference. Tax numbers etc.", + "fieldname": "registration_details", + "fieldtype": "Code", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Registration Details", + "length": 0, + "no_copy": 0, + "oldfieldname": "registration_details", + "oldfieldtype": "Code", + "permlevel": 0, + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 - }, + }, { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "delete_company_transactions", - "fieldtype": "Button", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Delete Company Transactions", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "delete_company_transactions", + "fieldtype": "Button", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Delete Company Transactions", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, "unique": 0 } ], @@ -1998,151 +1998,151 @@ "owner": "Administrator", "permissions": [ { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "email": 1, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 1, - "role": "System Manager", - "set_user_permissions": 0, - "share": 1, - "submit": 0, + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "set_user_permissions": 0, + "share": 1, + "submit": 0, "write": 1 - }, + }, { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "email": 1, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 0, - "role": "Accounts User", - "set_user_permissions": 0, - "share": 0, - "submit": 0, + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "Accounts User", + "set_user_permissions": 0, + "share": 0, + "submit": 0, "write": 0 - }, + }, { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "email": 0, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Employee", - "set_user_permissions": 0, - "share": 0, - "submit": 0, + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Employee", + "set_user_permissions": 0, + "share": 0, + "submit": 0, "write": 0 - }, + }, { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "email": 0, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Sales User", - "set_user_permissions": 0, - "share": 0, - "submit": 0, + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Sales User", + "set_user_permissions": 0, + "share": 0, + "submit": 0, "write": 0 - }, + }, { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "email": 0, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Purchase User", - "set_user_permissions": 0, - "share": 0, - "submit": 0, + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Purchase User", + "set_user_permissions": 0, + "share": 0, + "submit": 0, "write": 0 - }, + }, { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "email": 0, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Stock User", - "set_user_permissions": 0, - "share": 0, - "submit": 0, + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Stock User", + "set_user_permissions": 0, + "share": 0, + "submit": 0, "write": 0 - }, + }, { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 0, - "delete": 0, - "email": 0, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 0, - "read": 1, - "report": 0, - "role": "Projects User", - "set_user_permissions": 0, - "share": 0, - "submit": 0, + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 0, + "delete": 0, + "email": 0, + "export": 0, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 0, + "read": 1, + "report": 0, + "role": "Projects User", + "set_user_permissions": 0, + "share": 0, + "submit": 0, "write": 0 } - ], - "quick_entry": 0, - "read_only": 0, - "read_only_onload": 0, - "show_name_in_global_search": 1, - "sort_order": "ASC", - "track_changes": 1, + ], + "quick_entry": 0, + "read_only": 0, + "read_only_onload": 0, + "show_name_in_global_search": 1, + "sort_order": "ASC", + "track_changes": 1, "track_seen": 0 -} \ No newline at end of file +} diff --git a/erpnext/setup/doctype/sales_partner/sales_partner.py b/erpnext/setup/doctype/sales_partner/sales_partner.py index e6b26eee55..675f9ca560 100644 --- a/erpnext/setup/doctype/sales_partner/sales_partner.py +++ b/erpnext/setup/doctype/sales_partner/sales_partner.py @@ -16,7 +16,7 @@ class SalesPartner(WebsiteGenerator): def onload(self): """Load address and contacts in `__onload`""" - load_address_and_contact(self, "sales_partner") + load_address_and_contact(self) def autoname(self): self.name = self.partner_name diff --git a/erpnext/setup/setup_wizard/domainify.py b/erpnext/setup/setup_wizard/domainify.py index 7f333cc815..ddb2a80afb 100644 --- a/erpnext/setup/setup_wizard/domainify.py +++ b/erpnext/setup/setup_wizard/domainify.py @@ -12,7 +12,8 @@ def get_domain(domain): 'desktop_icons': ['Item', 'BOM', 'Customer', 'Supplier', 'Sales Order', 'Production Order', 'Stock Entry', 'Purchase Order', 'Task', 'Buying', 'Selling', 'Accounts', 'HR', 'ToDo'], - 'remove_roles': ['Academics User', 'Instructor'], + 'remove_roles': ['Academics User', 'Instructor', 'Physician', 'Nursing User', + 'Laboratory user', 'LabTest Approver', 'Healthcare Administrator'], 'properties': [ {'doctype': 'Item', 'fieldname': 'manufacturing', 'property': 'collapsible_depends_on', 'value': 'is_stock_item'}, ], @@ -25,7 +26,9 @@ def get_domain(domain): 'Retail': { 'desktop_icons': ['POS', 'Item', 'Customer', 'Sales Invoice', 'Purchase Order', 'Warranty Claim', 'Accounts', 'Task', 'Buying', 'ToDo'], - 'remove_roles': ['Manufacturing User', 'Manufacturing Manager', 'Academics User', 'Instructor'], + 'remove_roles': ['Manufacturing User', 'Manufacturing Manager', 'Academics User', 'Instructor', + 'Physician', 'Nursing User', 'Laboratory user', + 'LabTest Approver', 'Healthcare Administrator'], 'properties': [ {'doctype': 'Item', 'fieldname': 'manufacturing', 'property': 'hidden', 'value': 1}, {'doctype': 'Customer', 'fieldname': 'credit_limit_section', 'property': 'hidden', 'value': 1}, @@ -39,7 +42,9 @@ def get_domain(domain): 'Distribution': { 'desktop_icons': ['Item', 'Customer', 'Supplier', 'Lead', 'Sales Order', 'Task', 'Sales Invoice', 'CRM', 'Selling', 'Buying', 'Stock', 'Accounts', 'HR', 'ToDo'], - 'remove_roles': ['Manufacturing User', 'Manufacturing Manager', 'Academics User', 'Instructor'], + 'remove_roles': ['Manufacturing User', 'Manufacturing Manager', 'Academics User', 'Instructor', + 'Physician', 'Nursing User', 'Laboratory user', + 'LabTest Approver', 'Healthcare Administrator'], 'set_value': [ ['Stock Settings', None, 'show_barcode_field', 1] ], @@ -49,7 +54,9 @@ def get_domain(domain): 'Services': { 'desktop_icons': ['Project', 'Timesheet', 'Customer', 'Sales Order', 'Sales Invoice', 'Lead', 'Opportunity', 'Task', 'Expense Claim', 'Employee', 'HR', 'ToDo'], - 'remove_roles': ['Manufacturing User', 'Manufacturing Manager', 'Academics User', 'Instructor'], + 'remove_roles': ['Manufacturing User', 'Manufacturing Manager', 'Academics User', 'Instructor', + 'Physician', 'Nursing User', 'Laboratory user', + 'LabTest Approver', 'Healthcare Administrator'], 'properties': [ {'doctype': 'Item', 'fieldname': 'is_stock_item', 'property': 'default', 'value': 0}, ], @@ -66,6 +73,13 @@ def get_domain(domain): 'Student', 'Projects User', 'Instructor'], 'default_portal_role': 'Student' }, + 'Healthcare': { + 'desktop_icons': ['Patient', 'Patient Appointment', 'Consultation', 'Lab Test', 'Healthcare', + 'Accounts', 'Buying', 'Stock', 'HR', 'ToDo'], + 'remove_roles': ['Manufacturing User', 'Manufacturing Manager', 'Projects User', 'Projects Manager', + 'Academics User', 'Instructor'], + 'default_portal_role': 'Patient' + }, } if not domain in data: raise 'Invalid Domain {0}'.format(domain) diff --git a/erpnext/setup/setup_wizard/healthcare.py b/erpnext/setup/setup_wizard/healthcare.py new file mode 100644 index 0000000000..ebc644e87b --- /dev/null +++ b/erpnext/setup/setup_wizard/healthcare.py @@ -0,0 +1,281 @@ +from __future__ import unicode_literals +import frappe +from frappe.custom.doctype.custom_field.custom_field import create_custom_fields + +from frappe import _ + +def setup_healthcare(): + create_medical_departments() + create_antibiotics() + create_test_uom() + create_duration() + create_dosage() + create_healthcare_item_groups() + create_lab_test_items() + create_lab_test_template() + create_sensitivity() + make_custom_fields() + +def make_custom_fields(): + custom_fields = { + 'Sales Invoice': [ + dict(fieldname='appointment', label='Patient Appointment', + fieldtype='Link', options='Patient Appointment', + insert_after='customer') + ] + } + + create_custom_fields(custom_fields) + + +def create_medical_departments(): + depts = ["Accident and emergency care" ,"Anaesthetics", "Biochemistry", "Cardiology", "Dermatology", + "Diagnostic imaging", "ENT", "Gastroenterology", "General Surgery", "Gynaecology", + "Haematology", "Maternity", "Microbiology", "Nephrology", "Neurology", "Oncology", + "Orthopaedics", "Pathology", "Physiotherapy", "Rheumatology", "Serology", "Urology"] + for d in depts: + mediacal_department = frappe.new_doc("Medical Department") + mediacal_department.department = d + try: + mediacal_department.save() + except frappe.DuplicateEntryError: + pass + +def create_antibiotics(): + abt = ["Amoxicillin", "Ampicillin", "Bacampicillin", "Carbenicillin", "Cloxacillin", "Dicloxacillin", + "Flucloxacillin", "Mezlocillin", "Nafcillin", "Oxacillin", "Penicillin G", "Penicillin V", + "Piperacillin", "Pivampicillin", "Pivmecillinam", "Ticarcillin", "Cefacetrile (cephacetrile)", + "Cefadroxil (cefadroxyl)", "Cefalexin (cephalexin)", "Cefaloglycin (cephaloglycin)", + "Cefalonium (cephalonium)", "Cefaloridine (cephaloradine)", "Cefalotin (cephalothin)", + "Cefapirin (cephapirin)", "Cefatrizine", "Cefazaflur", "Cefazedone", "Cefazolin (cephazolin)", + "Cefradine (cephradine)", "Cefroxadine", "Ceftezole", "Cefaclor", "Cefamandole", "Cefmetazole", + "Cefonicid", "Cefotetan", "Cefoxitin", "Cefprozil (cefproxil)", "Cefuroxime", "Cefuzonam", + "Cefcapene", "Cefdaloxime", "Cefdinir", "Cefditoren", "Cefetamet", "Cefixime", "Cefmenoxime", + "Cefodizime", "Cefotaxime", "Cefpimizole", "Cefpodoxime", "Cefteram", "Ceftibuten", "Ceftiofur", + "Ceftiolene", "Ceftizoxime", "Ceftriaxone", "Cefoperazone", "Ceftazidime", "Cefclidine", "Cefepime", + "Cefluprenam", "Cefoselis", "Cefozopran", "Cefpirome", "Cefquinome", "Ceftobiprole", "Ceftaroline", + "Cefaclomezine","Cefaloram", "Cefaparole", "Cefcanel", "Cefedrolor", "Cefempidone", "Cefetrizole", + "Cefivitril", "Cefmatilen", "Cefmepidium", "Cefovecin", "Cefoxazole", "Cefrotil", "Cefsumide", + "Cefuracetime", "Ceftioxide", "Ceftazidime/Avibactam", "Ceftolozane/Tazobactam", "Aztreonam", + "Imipenem", "Imipenem/cilastatin", "Doripenem", "Meropenem", "Ertapenem", "Azithromycin", + "Erythromycin", "Clarithromycin", "Dirithromycin", "Roxithromycin", "Telithromycin", "Clindamycin", + "Lincomycin", "Pristinamycin", "Quinupristin/dalfopristin", "Amikacin", "Gentamicin", "Kanamycin", + "Neomycin", "Netilmicin", "Paromomycin", "Streptomycin", "Tobramycin", "Flumequine", "Nalidixic acid", + "Oxolinic acid", "Piromidic acid", "Pipemidic acid", "Rosoxacin", "Ciprofloxacin", "Enoxacin", + "Lomefloxacin", "Nadifloxacin", "Norfloxacin", "Ofloxacin", "Pefloxacin", "Rufloxacin", "Balofloxacin", + "Gatifloxacin", "Grepafloxacin", "Levofloxacin", "Moxifloxacin", "Pazufloxacin", "Sparfloxacin", + "Temafloxacin", "Tosufloxacin", "Besifloxacin", "Clinafloxacin", "Gemifloxacin", + "Sitafloxacin", "Trovafloxacin", "Prulifloxacin", "Sulfamethizole", "Sulfamethoxazole", + "Sulfisoxazole", "Trimethoprim-Sulfamethoxazole", "Demeclocycline", "Doxycycline", "Minocycline", + "Oxytetracycline", "Tetracycline", "Tigecycline", "Chloramphenicol", "Metronidazole", + "Tinidazole", "Nitrofurantoin", "Vancomycin", "Teicoplanin", "Telavancin", "Linezolid", + "Cycloserine 2", "Rifampin", "Rifabutin", "Rifapentine", "Rifalazil", "Bacitracin", "Polymyxin B", + "Viomycin", "Capreomycin"] + for a in abt: + antibiotic = frappe.new_doc("Antibiotic") + antibiotic.antibiotic_name = a + try: + antibiotic.save() + except frappe.DuplicateEntryError: + pass + +def create_test_uom(): + records = [ + {"doctype": "Lab Test UOM", "name": "umol/L", "test_uom": "umol/L", "uom_description": None }, + {"doctype": "Lab Test UOM", "name": "mg/L", "test_uom": "mg/L", "uom_description": None }, + {"doctype": "Lab Test UOM", "name": "mg / dl", "test_uom": "mg / dl", "uom_description": None }, + {"doctype": "Lab Test UOM", "name": "pg / ml", "test_uom": "pg / ml", "uom_description": None }, + {"doctype": "Lab Test UOM", "name": "U/ml", "test_uom": "U/ml", "uom_description": None }, + {"doctype": "Lab Test UOM", "name": "/HPF", "test_uom": "/HPF", "uom_description": None }, + {"doctype": "Lab Test UOM", "name": "Million Cells / cumm", "test_uom": "Million Cells / cumm", "uom_description": None }, + {"doctype": "Lab Test UOM", "name": "Lakhs Cells / cumm", "test_uom": "Lakhs Cells / cumm", "uom_description": None }, + {"doctype": "Lab Test UOM", "name": "U / L", "test_uom": "U / L", "uom_description": None }, + {"doctype": "Lab Test UOM", "name": "g / L", "test_uom": "g / L", "uom_description": None }, + {"doctype": "Lab Test UOM", "name": "IU / ml", "test_uom": "IU / ml", "uom_description": None }, + {"doctype": "Lab Test UOM", "name": "gm %", "test_uom": "gm %", "uom_description": None }, + {"doctype": "Lab Test UOM", "name": "Microgram", "test_uom": "Microgram", "uom_description": None }, + {"doctype": "Lab Test UOM", "name": "Micron", "test_uom": "Micron", "uom_description": None }, + {"doctype": "Lab Test UOM", "name": "Cells / cumm", "test_uom": "Cells / cumm", "uom_description": None }, + {"doctype": "Lab Test UOM", "name": "%", "test_uom": "%", "uom_description": None }, + {"doctype": "Lab Test UOM", "name": "mm / dl", "test_uom": "mm / dl", "uom_description": None }, + {"doctype": "Lab Test UOM", "name": "mm / hr", "test_uom": "mm / hr", "uom_description": None }, + {"doctype": "Lab Test UOM", "name": "ulU / ml", "test_uom": "ulU / ml", "uom_description": None }, + {"doctype": "Lab Test UOM", "name": "ng / ml", "test_uom": "ng / ml", "uom_description": None }, + {"doctype": "Lab Test UOM", "name": "ng / dl", "test_uom": "ng / dl", "uom_description": None }, + {"doctype": "Lab Test UOM", "name": "ug / dl", "test_uom": "ug / dl", "uom_description": None } + ] + + insert_record(records) + +def create_duration(): + records = [ + {"doctype": "Prescription Duration", "name": "3 Month", "number": "3", "period": "Month" }, + {"doctype": "Prescription Duration", "name": "2 Month", "number": "2", "period": "Month" }, + {"doctype": "Prescription Duration", "name": "1 Month", "number": "1", "period": "Month" }, + {"doctype": "Prescription Duration", "name": "12 Hour", "number": "12", "period": "Hour" }, + {"doctype": "Prescription Duration", "name": "11 Hour", "number": "11", "period": "Hour" }, + {"doctype": "Prescription Duration", "name": "10 Hour", "number": "10", "period": "Hour" }, + {"doctype": "Prescription Duration", "name": "9 Hour", "number": "9", "period": "Hour" }, + {"doctype": "Prescription Duration", "name": "8 Hour", "number": "8", "period": "Hour" }, + {"doctype": "Prescription Duration", "name": "7 Hour", "number": "7", "period": "Hour" }, + {"doctype": "Prescription Duration", "name": "6 Hour", "number": "6", "period": "Hour" }, + {"doctype": "Prescription Duration", "name": "5 Hour", "number": "5", "period": "Hour" }, + {"doctype": "Prescription Duration", "name": "4 Hour", "number": "4", "period": "Hour" }, + {"doctype": "Prescription Duration", "name": "3 Hour", "number": "3", "period": "Hour" }, + {"doctype": "Prescription Duration", "name": "2 Hour", "number": "2", "period": "Hour" }, + {"doctype": "Prescription Duration", "name": "1 Hour", "number": "1", "period": "Hour" }, + {"doctype": "Prescription Duration", "name": "5 Week", "number": "5", "period": "Week" }, + {"doctype": "Prescription Duration", "name": "4 Week", "number": "4", "period": "Week" }, + {"doctype": "Prescription Duration", "name": "3 Week", "number": "3", "period": "Week" }, + {"doctype": "Prescription Duration", "name": "2 Week", "number": "2", "period": "Week" }, + {"doctype": "Prescription Duration", "name": "1 Week", "number": "1", "period": "Week" }, + {"doctype": "Prescription Duration", "name": "6 Day", "number": "6", "period": "Day" }, + {"doctype": "Prescription Duration", "name": "5 Day", "number": "5", "period": "Day" }, + {"doctype": "Prescription Duration", "name": "4 Day", "number": "4", "period": "Day" }, + {"doctype": "Prescription Duration", "name": "3 Day", "number": "3", "period": "Day" }, + {"doctype": "Prescription Duration", "name": "2 Day", "number": "2", "period": "Day" }, + {"doctype": "Prescription Duration", "name": "1 Day", "number": "1", "period": "Day" } + ] + insert_record(records) + +def create_dosage(): + records = [ + {"doctype": "Prescription Dosage", "name": "1-1-1-1", "dosage": "1-1-1-1","dosage_strength": + [{"strength": "1.0","strength_time": "9:00:00"}, {"strength": "1.0","strength_time": "13:00:00"},{"strength": "1.0","strength_time": "17:00:00"},{"strength": "1.0","strength_time": "21:00:00"}] + }, + {"doctype": "Prescription Dosage", "name": "0-0-1", "dosage": "0-0-1","dosage_strength": + [{"strength": "1.0","strength_time": "21:00:00"}] + }, + {"doctype": "Prescription Dosage", "name": "1-0-0", "dosage": "1-0-0","dosage_strength": + [{"strength": "1.0","strength_time": "9:00:00"}] + }, + {"doctype": "Prescription Dosage", "name": "0-1-0", "dosage": "0-1-0","dosage_strength": + [{"strength": "1.0","strength_time": "14:00:00"}] + }, + {"doctype": "Prescription Dosage", "name": "1-1-1", "dosage": "1-1-1","dosage_strength": + [{"strength": "1.0","strength_time": "9:00:00"}, {"strength": "1.0","strength_time": "14:00:00"},{"strength": "1.0","strength_time": "21:00:00"}] + }, + {"doctype": "Prescription Dosage", "name": "1-0-1", "dosage": "1-0-1","dosage_strength": + [{"strength": "1.0","strength_time": "9:00:00"}, {"strength": "1.0","strength_time": "21:00:00"}] + }, + {"doctype": "Prescription Dosage", "name": "Once Bedtime", "dosage": "Once Bedtime","dosage_strength": + [{"strength": "1.0","strength_time": "21:00:00"}] + }, + {"doctype": "Prescription Dosage", "name": "5 times a day", "dosage": "5 times a day","dosage_strength": + [{"strength": "1.0","strength_time": "5:00:00"}, {"strength": "1.0","strength_time": "9:00:00"}, {"strength": "1.0","strength_time": "13:00:00"},{"strength": "1.0","strength_time": "17:00:00"},{"strength": "1.0","strength_time": "21:00:00"}] + }, + {"doctype": "Prescription Dosage", "name": "QID", "dosage": "QID","dosage_strength": + [{"strength": "1.0","strength_time": "9:00:00"}, {"strength": "1.0","strength_time": "13:00:00"},{"strength": "1.0","strength_time": "17:00:00"},{"strength": "1.0","strength_time": "21:00:00"}] + }, + {"doctype": "Prescription Dosage", "name": "TID", "dosage": "TID","dosage_strength": + [{"strength": "1.0","strength_time": "9:00:00"}, {"strength": "1.0","strength_time": "14:00:00"},{"strength": "1.0","strength_time": "21:00:00"}] + }, + {"doctype": "Prescription Dosage", "name": "BID", "dosage": "BID","dosage_strength": + [{"strength": "1.0","strength_time": "9:00:00"}, {"strength": "1.0","strength_time": "21:00:00"}] + }, + {"doctype": "Prescription Dosage", "name": "Once Daily", "dosage": "Once Daily","dosage_strength": + [{"strength": "1.0","strength_time": "9:00:00"}] + } + ] + insert_record(records) + +def create_healthcare_item_groups(): + records = [ + {'doctype': 'Item Group', 'item_group_name': _('Laboratory'), + 'is_group': 0, 'parent_item_group': _('All Item Groups') }, + {'doctype': 'Item Group', 'item_group_name': _('Drug'), + 'is_group': 0, 'parent_item_group': _('All Item Groups') } + ] + insert_record(records) + +def create_lab_test_items(): + records = [ + {"doctype": "Item", "item_code": "MCH", "item_name": "MCH", "item_group": "Laboratory", + "stock_uom": "Unit", "is_stock_item": 0, "is_purchase_item": 0, "is_sales_item": 1}, + {"doctype": "Item", "item_code": "LDL", "item_name": "LDL", "item_group": "Laboratory", + "stock_uom": "Unit", "is_stock_item": 0, "is_purchase_item": 0, "is_sales_item": 1}, + {"doctype": "Item", "item_code": "GTT", "item_name": "GTT", "item_group": "Laboratory", + "stock_uom": "Unit", "is_stock_item": 0, "is_purchase_item": 0, "is_sales_item": 1}, + {"doctype": "Item", "item_code": "HDL", "item_name": "HDL", "item_group": "Laboratory", + "stock_uom": "Unit", "is_stock_item": 0, "is_purchase_item": 0, "is_sales_item": 1}, + {"doctype": "Item", "item_code": "BILT", "item_name": "BILT", "item_group": "Laboratory", + "stock_uom": "Unit", "is_stock_item": 0, "is_purchase_item": 0, "is_sales_item": 1}, + {"doctype": "Item", "item_code": "BILD", "item_name": "BILD", "item_group": "Laboratory", + "stock_uom": "Unit", "is_stock_item": 0, "is_purchase_item": 0, "is_sales_item": 1}, + {"doctype": "Item", "item_code": "BP", "item_name": "BP", "item_group": "Laboratory", + "stock_uom": "Unit", "is_stock_item": 0, "is_purchase_item": 0, "is_sales_item": 1}, + {"doctype": "Item", "item_code": "BS", "item_name": "BS", "item_group": "Laboratory", + "stock_uom": "Unit", "is_stock_item": 0, "is_purchase_item": 0, "is_sales_item": 1} + ] + insert_record(records) + +def create_lab_test_template(): + records = [ + {"doctype": "Lab Test Template", "name": "MCH","test_name": "MCH","test_code": "MCH", + "test_group": "Laboratory","department": "Haematology","item": "MCH", + "test_template_type": "Single","is_billable": 1,"test_rate": 0.0,"test_uom": "Microgram", + "test_normal_range": "27 - 32 Microgram", + "sensitivity": 0,"test_description": "Mean Corpuscular Hemoglobin"}, + {"doctype": "Lab Test Template", "name": "LDL","test_name": "LDL (Serum)","test_code": "LDL", + "test_group": "Laboratory","department": "Biochemistry", + "item": "LDL","test_template_type": "Single", + "is_billable": 1,"test_rate": 0.0,"test_uom": "mg / dl","test_normal_range": "70 - 160 mg/dlLow-density Lipoprotein (LDL)", + "sensitivity": 0,"test_description": "Low-density Lipoprotein (LDL)"}, + {"doctype": "Lab Test Template", "name": "GTT","test_name": "GTT","test_code": "GTT", + "test_group": "Laboratory","department": "Haematology", + "item": "GTT","test_template_type": "Single", + "is_billable": 1,"test_rate": 0.0,"test_uom": "mg / dl","test_normal_range": "Less than 85 mg/dl", + "sensitivity": 0,"test_description": "Glucose Tolerance Test"}, + {"doctype": "Lab Test Template", "name": "HDL","test_name": "HDL (Serum)","test_code": "HDL", + "test_group": "Laboratory","department": "Biochemistry", + "item": "HDL","test_template_type": "Single", + "is_billable": 1,"test_rate": 0.0,"test_uom": "mg / dl","test_normal_range": "35 - 65 mg/dl", + "sensitivity": 0,"test_description": "High-density Lipoprotein (HDL)"}, + {"doctype": "Lab Test Template", "name": "BILT","test_name": "Bilirubin Total","test_code": "BILT", + "test_group": "Laboratory","department": "Biochemistry", + "item": "BILT","test_template_type": "Single", + "is_billable": 1,"test_rate": 0.0,"test_uom": "mg / dl","test_normal_range": "0.2 - 1.2 mg / dl", + "sensitivity": 0,"test_description": "Bilirubin Total"}, + {"doctype": "Lab Test Template", "name": "BILD","test_name": "Bilirubin Direct","test_code": "BILD", + "test_group": "Laboratory","department": "Biochemistry", + "item": "BILD","test_template_type": "Single", + "is_billable": 1,"test_rate": 0.0,"test_uom": "mg / dl","test_normal_range": "0.4 mg / dl", + "sensitivity": 0,"test_description": "Bilirubin Direct"}, + + {"doctype": "Lab Test Template", "name": "BP","test_name": "Bile Pigment","test_code": "BP", + "test_group": "Laboratory","department": "Pathology", + "item": "BP","test_template_type": "Single", + "is_billable": 1,"test_rate": 0.0,"test_uom": "","test_normal_range": "", + "sensitivity": 0,"test_description": "Bile Pigment"}, + {"doctype": "Lab Test Template", "name": "BS","test_name": "Bile Salt","test_code": "BS", + "test_group": "Laboratory","department": "Pathology", + "item": "BS","test_template_type": "Single", + "is_billable": 1,"test_rate": 0.0,"test_uom": "","test_normal_range": "", + "sensitivity": 0,"test_description": "Bile Salt"} + ] + insert_record(records) + +def create_sensitivity(): + records = [ + {"doctype": "Sensitivity", "sensitivity": "Low Sensitivity"}, + {"doctype": "Sensitivity", "sensitivity": "High Sensitivity"}, + {"doctype": "Sensitivity", "sensitivity": "Moderate Sensitivity"}, + {"doctype": "Sensitivity", "sensitivity": "Susceptible"}, + {"doctype": "Sensitivity", "sensitivity": "Resistant"}, + {"doctype": "Sensitivity", "sensitivity": "Intermediate"} + ] + insert_record(records) + +def insert_record(records): + for r in records: + doc = frappe.new_doc(r.get("doctype")) + doc.update(r) + try: + doc.insert(ignore_permissions=True) + except frappe.DuplicateEntryError, e: + # pass DuplicateEntryError and continue + if e.args and e.args[0]==doc.doctype and e.args[1]==doc.name: + # make sure DuplicateEntryError is for the exact same doc and not a related doc + pass + else: + raise diff --git a/erpnext/setup/setup_wizard/install_fixtures.py b/erpnext/setup/setup_wizard/install_fixtures.py index 53e58a15af..8e0973d365 100644 --- a/erpnext/setup/setup_wizard/install_fixtures.py +++ b/erpnext/setup/setup_wizard/install_fixtures.py @@ -19,6 +19,7 @@ def install(country=None): { 'doctype': 'Domain', 'domain': _('Retail')}, { 'doctype': 'Domain', 'domain': _('Services')}, { 'doctype': 'Domain', 'domain': _('Education')}, + { 'doctype': 'Domain', 'domain': _('Healthcare')}, # Setup Progress {'doctype': "Setup Progress", "actions": [ diff --git a/erpnext/setup/setup_wizard/setup_wizard.py b/erpnext/setup/setup_wizard/setup_wizard.py index 40d11e5bdc..20f8b85f31 100644 --- a/erpnext/setup/setup_wizard/setup_wizard.py +++ b/erpnext/setup/setup_wizard/setup_wizard.py @@ -10,6 +10,7 @@ from frappe.utils import cstr, flt, getdate from frappe import _ from frappe.utils.file_manager import save_file from .default_website import website_maker +from .healthcare import setup_healthcare import install_fixtures from .sample_data import make_sample_data from erpnext.accounts.doctype.account.account import RootNotEditable @@ -37,6 +38,9 @@ def setup_complete(args=None): create_academic_year() create_academic_term() + if args.domain.lower() == 'healthcare': + setup_healthcare() + if args.get('setup_website'): website_maker(args) @@ -414,3 +418,4 @@ def create_academic_year(): academic_year.save() except frappe.DuplicateEntryError: pass + diff --git a/erpnext/startup/notifications.py b/erpnext/startup/notifications.py index b32f41e0c0..eb06f27c70 100644 --- a/erpnext/startup/notifications.py +++ b/erpnext/startup/notifications.py @@ -55,7 +55,13 @@ def get_notification_config(): }, "Production Order": { "status": ("in", ("Draft", "Not Started", "In Process")) }, "BOM": {"docstatus": 0}, - "Timesheet": {"status": "Draft"} + + "Timesheet": {"status": "Draft"}, + + "Lab Test": {"docstatus": 0}, + "Sample Collection": {"docstatus": 0}, + "Patient Appointment": {"status": "Open"}, + "Consultation": {"docstatus": 0} }, "targets": { diff --git a/erpnext/startup/report_data_map.py b/erpnext/startup/report_data_map.py index e4bbd8744e..3d5a674021 100644 --- a/erpnext/startup/report_data_map.py +++ b/erpnext/startup/report_data_map.py @@ -269,7 +269,7 @@ data_map = { }, "Purchase Receipt": { "columns": ["name", "supplier", "posting_date", "company"], - "conditions": ["docstatus=1"], + "conditions": ["docstatus=1"], "order_by": "posting_date", "links": { "supplier": ["Supplier", "name"], @@ -278,7 +278,7 @@ data_map = { }, "Purchase Receipt Item[Purchase Analytics]": { "columns": ["name", "parent", "item_code", "stock_qty as qty", "base_net_amount"], - "conditions": ["docstatus=1", "ifnull(parent, '')!=''"], + "conditions": ["docstatus=1", "ifnull(parent, '')!=''"], "order_by": "parent", "links": { "parent": ["Purchase Receipt", "name"], @@ -297,5 +297,39 @@ data_map = { "columns": ["name","status","creation","planned_start_date","planned_end_date","status","actual_start_date","actual_end_date", "modified"], "conditions": ["docstatus = 1"], "order_by": "creation" + }, + + #Medical + "Patient": { + "columns": ["name", "creation", "owner", "if(patient_name=name, '', patient_name) as patient_name"], + "conditions": ["docstatus < 2"], + "order_by": "name", + "links": { + "owner" : ["User", "name"] + } + }, + "Patient Appointment": { + "columns": ["name", "appointment_type", "patient", "physician", "appointment_date", "department", "status", "company"], + "order_by": "name", + "links": { + "physician": ["Physician", "name"], + "appointment_type": ["Appointment Type", "name"] + } + }, + "Physician": { + "columns": ["name", "department"], + "order_by": "name", + "links": { + "department": ["Department", "name"], + } + + }, + "Appointment Type": { + "columns": ["name"], + "order_by": "name" + }, + "Medical Department": { + "columns": ["name"], + "order_by": "name" } } diff --git a/erpnext/templates/includes/healthcare/appointment_row_template.html b/erpnext/templates/includes/healthcare/appointment_row_template.html new file mode 100644 index 0000000000..53be5e6764 --- /dev/null +++ b/erpnext/templates/includes/healthcare/appointment_row_template.html @@ -0,0 +1,23 @@ + diff --git a/erpnext/templates/includes/healthcare/lab_test_row_template.html b/erpnext/templates/includes/healthcare/lab_test_row_template.html new file mode 100644 index 0000000000..d6c9b54b09 --- /dev/null +++ b/erpnext/templates/includes/healthcare/lab_test_row_template.html @@ -0,0 +1,20 @@ + diff --git a/erpnext/templates/includes/healthcare/prescription_row_template.html b/erpnext/templates/includes/healthcare/prescription_row_template.html new file mode 100644 index 0000000000..13ce3bc16b --- /dev/null +++ b/erpnext/templates/includes/healthcare/prescription_row_template.html @@ -0,0 +1,15 @@ + From 78baebfe0d1fdcde43a1fd9c9a3fa29496f60f52 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 13 Sep 2017 15:12:29 +0530 Subject: [PATCH 05/72] Setup wizard test fix --- erpnext/setup/setup_wizard/setup_wizard.py | 4 +++- erpnext/setup/setup_wizard/test_setup_wizard.py | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/erpnext/setup/setup_wizard/setup_wizard.py b/erpnext/setup/setup_wizard/setup_wizard.py index 20f8b85f31..d3e4a084f5 100644 --- a/erpnext/setup/setup_wizard/setup_wizard.py +++ b/erpnext/setup/setup_wizard/setup_wizard.py @@ -158,7 +158,9 @@ def set_defaults(args): global_defaults.save() - frappe.db.set_value("System Settings", None, "email_footer_address", args.get("company")) + system_settings = frappe.get_doc("System Settings") + system_settings.email_footer_address = args.get("company") + system_settings.save() stock_settings = frappe.get_doc("Stock Settings") stock_settings.item_naming_by = "Item Code" diff --git a/erpnext/setup/setup_wizard/test_setup_wizard.py b/erpnext/setup/setup_wizard/test_setup_wizard.py index 740d45a82e..d1de6eba32 100644 --- a/erpnext/setup/setup_wizard/test_setup_wizard.py +++ b/erpnext/setup/setup_wizard/test_setup_wizard.py @@ -16,6 +16,7 @@ def run_setup_wizard_test(): # Language slide driver.wait_for_ajax(True) + time.sleep(2) driver.set_select("language", "English (United States)") driver.wait_for_ajax(True) driver.wait_till_clickable(".next-btn").click() From c443c9f05d4bfb8feb336b143ec7a7d654bdc2c9 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 13 Sep 2017 15:13:53 +0530 Subject: [PATCH 06/72] Update actual dates in Production Order from Timesheet --- .../doctype/production_order/production_order.py | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/erpnext/manufacturing/doctype/production_order/production_order.py b/erpnext/manufacturing/doctype/production_order/production_order.py index 5fedc72889..5bd476eacd 100644 --- a/erpnext/manufacturing/doctype/production_order/production_order.py +++ b/erpnext/manufacturing/doctype/production_order/production_order.py @@ -367,15 +367,11 @@ class ProductionOrder(Document): frappe.throw(_("Completed Qty can not be greater than 'Qty to Manufacture'")) def set_actual_dates(self): + self.actual_start_date = None + self.actual_end_date = None if self.get("operations"): - actual_date = frappe.db.sql("""select min(actual_start_time) as start_date, - max(actual_end_time) as end_date from `tabProduction Order Operation` - where parent = %s and docstatus=1""", self.name, as_dict=1)[0] - self.actual_start_date = actual_date.start_date - self.actual_end_date = actual_date.end_date - else: - self.actual_start_date = None - self.actual_end_date = None + self.actual_start_date = min([d.actual_start_time for d in self.get("operations")]) + self.actual_end_date = max([d.actual_end_time for d in self.get("operations")]) def delete_timesheet(self): for timesheet in frappe.get_all("Timesheet", ["name"], {"production_order": self.name}): From 52ac483368369d09a9b93ff4763c640183a0a82a Mon Sep 17 00:00:00 2001 From: Vishal Dhayagude Date: Wed, 13 Sep 2017 15:18:41 +0530 Subject: [PATCH 07/72] [NEW] Travis Parallel Test (#10755) * test * test2 * test travis --- .travis.yml | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index 80d979f602..cae50cb908 100644 --- a/.travis.yml +++ b/.travis.yml @@ -51,11 +51,14 @@ before_script: - bench start & - sleep 10 -script: - - set -e - - bench run-tests - - sleep 5 - - bench reinstall --yes - - bench --verbose run-setup-wizard-ui-test - - bench execute erpnext.setup.utils.enable_all_roles_and_domains - - bench run-ui-tests --app erpnext +jobs: + include: + - stage: test + script: + - set -e + - bench run-tests + - # stage + script: + - bench --verbose run-setup-wizard-ui-test + - bench execute erpnext.setup.utils.enable_all_roles_and_domains + - bench run-ui-tests --app erpnext From c050c6945cd941cd94b69006df643608b4bca5b0 Mon Sep 17 00:00:00 2001 From: tundebabzy Date: Wed, 13 Sep 2017 10:57:30 +0100 Subject: [PATCH 08/72] show error message if cannot get accounts details (#10768) --- erpnext/accounts/report/financial_statements.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/erpnext/accounts/report/financial_statements.py b/erpnext/accounts/report/financial_statements.py index d81c1ebc88..b0c49dfbd8 100644 --- a/erpnext/accounts/report/financial_statements.py +++ b/erpnext/accounts/report/financial_statements.py @@ -142,10 +142,16 @@ def get_data(company, root_type, balance_must_be, period_list, filters=None, return out + def calculate_values(accounts_by_name, gl_entries_by_account, period_list, accumulated_values, ignore_accumulated_values_for_fy): for entries in gl_entries_by_account.values(): for entry in entries: d = accounts_by_name.get(entry.account) + if not d: + frappe.msgprint( + _("Could not retrieve information for {0}.".format(entry.account)), title="Error", + raise_exception=1 + ) for period in period_list: # check if posting date is within the period From 242218d2b7a7a7ff810a6889b1201b2c61909244 Mon Sep 17 00:00:00 2001 From: Prateeksha Singh Date: Wed, 13 Sep 2017 18:41:01 +0530 Subject: [PATCH 09/72] Progress fixes (#10710) * [progress] sales target slide * [fix] rerun patch for sales target slide --- erpnext/patches.txt | 2 +- .../v8_9/add_setup_progress_actions.py | 5 ++ .../doctype/setup_progress/setup_progress.py | 19 ++++-- .../setup_progress_action.json | 63 ++++++++++++++++++- .../setup/setup_wizard/install_fixtures.py | 4 ++ erpnext/utilities/user_progress.py | 31 ++++++++- erpnext/utilities/user_progress_utils.py | 6 ++ 7 files changed, 121 insertions(+), 9 deletions(-) diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 6829bd4033..c7b331c6c1 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -436,7 +436,7 @@ erpnext.patches.v8_7.add_more_gst_fields erpnext.patches.v8_7.fix_purchase_receipt_status erpnext.patches.v8_6.rename_bom_update_tool erpnext.patches.v8_7.set_offline_in_pos_settings #11-09-17 -erpnext.patches.v8_9.add_setup_progress_actions +erpnext.patches.v8_9.add_setup_progress_actions #08-09-2017 erpnext.patches.v8_9.rename_company_sales_target_field erpnext.patches.v8_8.set_bom_rate_as_per_uom erpnext.patches.v8_7.make_subscription_from_recurring_data \ No newline at end of file diff --git a/erpnext/patches/v8_9/add_setup_progress_actions.py b/erpnext/patches/v8_9/add_setup_progress_actions.py index 25698cc167..97d2d1450a 100644 --- a/erpnext/patches/v8_9/add_setup_progress_actions.py +++ b/erpnext/patches/v8_9/add_setup_progress_actions.py @@ -11,6 +11,10 @@ def execute(): actions = [ {"action_name": _("Add Company"), "action_doctype": "Company", "min_doc_count": 1, "is_completed": 1, "domains": '[]' }, + {"action_name": _("Set Sales Target"), "action_doctype": "Company", "min_doc_count": 99, + "action_document": frappe.defaults.get_defaults().get("company") or '', + "action_field": "monthly_sales_target", "is_completed": 0, + "domains": '["Manufacturing", "Services", "Retail", "Distribution"]' }, {"action_name": _("Add Customers"), "action_doctype": "Customer", "min_doc_count": 1, "is_completed": 0, "domains": '["Manufacturing", "Services", "Retail", "Distribution"]' }, {"action_name": _("Add Suppliers"), "action_doctype": "Supplier", "min_doc_count": 1, "is_completed": 0, @@ -30,6 +34,7 @@ def execute(): ] setup_progress = frappe.get_doc("Setup Progress", "Setup Progress") + setup_progress.actions = [] for action in actions: setup_progress.append("actions", action) diff --git a/erpnext/setup/doctype/setup_progress/setup_progress.py b/erpnext/setup/doctype/setup_progress/setup_progress.py index 26eecd9634..9187eb7996 100644 --- a/erpnext/setup/doctype/setup_progress/setup_progress.py +++ b/erpnext/setup/doctype/setup_progress/setup_progress.py @@ -24,10 +24,21 @@ def update_action_completed_state(action_name): if d.action_name == action_name][0] update_action(action_table_doc) -def update_action(action_table_doc): - if not action_table_doc.is_completed and frappe.db.count(action_table_doc.action_doctype) >= action_table_doc.min_doc_count: - action_table_doc.is_completed = 1 - action_table_doc.save() +def update_action(doc): + doctype = doc.action_doctype + docname = doc.action_document + field = doc.action_field + + if not doc.is_completed: + if doc.min_doc_count: + if frappe.db.count(doctype) >= doc.min_doc_count: + doc.is_completed = 1 + doc.save() + if docname and field: + d = frappe.get_doc(doctype, docname) + if d.get(field): + doc.is_completed = 1 + doc.save() def update_domain_actions(domain): for d in get_setup_progress().actions: diff --git a/erpnext/setup/doctype/setup_progress_action/setup_progress_action.json b/erpnext/setup/doctype/setup_progress_action/setup_progress_action.json index 030fd99a33..e9abcbcd1a 100644 --- a/erpnext/setup/doctype/setup_progress_action/setup_progress_action.json +++ b/erpnext/setup/doctype/setup_progress_action/setup_progress_action.json @@ -73,6 +73,67 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "action_document", + "fieldtype": "Dynamic Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Action Document", + "length": 0, + "no_copy": 0, + "options": "action_doctype", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "action_field", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Action Field", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -174,7 +235,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2017-08-28 17:44:58.008526", + "modified": "2017-09-01 14:34:59.685730", "modified_by": "Administrator", "module": "Setup", "name": "Setup Progress Action", diff --git a/erpnext/setup/setup_wizard/install_fixtures.py b/erpnext/setup/setup_wizard/install_fixtures.py index 8e0973d365..54620122b2 100644 --- a/erpnext/setup/setup_wizard/install_fixtures.py +++ b/erpnext/setup/setup_wizard/install_fixtures.py @@ -25,6 +25,10 @@ def install(country=None): {'doctype': "Setup Progress", "actions": [ {"action_name": _("Add Company"), "action_doctype": "Company", "min_doc_count": 1, "is_completed": 1, "domains": '[]' }, + {"action_name": _("Set Sales Target"), "action_doctype": "Company", "min_doc_count": 99, + "action_document": frappe.defaults.get_defaults().get("company") or '', + "action_field": "monthly_sales_target", "is_completed": 0, + "domains": '["Manufacturing", "Services", "Retail", "Distribution"]' }, {"action_name": _("Add Customers"), "action_doctype": "Customer", "min_doc_count": 1, "is_completed": 0, "domains": '["Manufacturing", "Services", "Retail", "Distribution"]' }, {"action_name": _("Add Suppliers"), "action_doctype": "Supplier", "min_doc_count": 1, "is_completed": 0, diff --git a/erpnext/utilities/user_progress.py b/erpnext/utilities/user_progress.py index 482179beee..250951159a 100644 --- a/erpnext/utilities/user_progress.py +++ b/erpnext/utilities/user_progress.py @@ -9,6 +9,14 @@ def get_slide_settings(): defaults = frappe.defaults.get_defaults() domain = frappe.db.get_value('Company', erpnext.get_default_company(), 'domain') company = defaults.get("company") or '' + currency = defaults.get("currency") or '' + + doc = frappe.get_doc("Setup Progress") + item = [d for d in doc.get("actions") if d.action_name == "Set Sales Target"][0] + item.action_document = company + item.save() + doc.save() + # Initial state of slides return [ frappe._dict( @@ -29,12 +37,29 @@ def get_slide_settings(): "video_id": "U5wPIvEn-0c" } ] - ) - , + ), + frappe._dict( + action_name='Set Sales Target', + domains=('Manufacturing', 'Services', 'Retail', 'Distribution'), + title=_("Set a Target"), + help=_("Set a sales goal you'd like to achieve for your company."), + fields=[ + {"fieldtype":"Currency", "fieldname":"monthly_sales_target", + "label":_("Monthly Sales Target (" + currency + ")")}, + ], + submit_method="erpnext.utilities.user_progress_utils.set_sales_target", + done_state_title=_("Go to " + company), + done_state_title_route=["Form", "Company", company], + help_links=[ + { + "label": _('Learn More'), + "url": ["https://erpnext.org/docs/user/manual/en/setting-up/setting-company-sales-goal"] + } + ] + ), frappe._dict( action_name='Add Customers', domains=('Manufacturing', 'Services', 'Retail', 'Distribution'), - icon="fa fa-group", title=_("Add Customers"), help=_("List a few of your customers. They could be organizations or individuals."), fields=[ diff --git a/erpnext/utilities/user_progress_utils.py b/erpnext/utilities/user_progress_utils.py index 1c9c9e8aa1..709da574c2 100644 --- a/erpnext/utilities/user_progress_utils.py +++ b/erpnext/utilities/user_progress_utils.py @@ -8,6 +8,12 @@ from frappe import _ from frappe.utils import flt from erpnext.setup.doctype.setup_progress.setup_progress import update_domain_actions, get_domain_actions_state +@frappe.whitelist() +def set_sales_target(args_data): + args = json.loads(args_data) + defaults = frappe.defaults.get_defaults() + frappe.db.set_value("Company", defaults.get("company"), "monthly_sales_target", args.get('monthly_sales_target')) + @frappe.whitelist() def create_customers(args_data): args = json.loads(args_data) From 92309afea11f2616f415552bbb96e0d7dcb1b3ed Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 13 Sep 2017 22:37:14 +0530 Subject: [PATCH 10/72] Update test_setup_wizard.py --- erpnext/setup/setup_wizard/test_setup_wizard.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/erpnext/setup/setup_wizard/test_setup_wizard.py b/erpnext/setup/setup_wizard/test_setup_wizard.py index d1de6eba32..4215eb3ef7 100644 --- a/erpnext/setup/setup_wizard/test_setup_wizard.py +++ b/erpnext/setup/setup_wizard/test_setup_wizard.py @@ -35,6 +35,7 @@ def run_setup_wizard_test(): # Brand slide driver.set_select("domain", "Manufacturing") + time.sleep(2) driver.wait_till_clickable(".next-btn").click() # Org slide @@ -59,4 +60,4 @@ def run_setup_wizard_test(): driver.close() - return True \ No newline at end of file + return True From 9a0db392dee799cdb0e3691677703e3548fdd50d Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Thu, 14 Sep 2017 10:51:21 +0530 Subject: [PATCH 11/72] [Fix] Only typed keywords displying in the field on selection of customer (#10778) --- erpnext/accounts/page/pos/pos.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/erpnext/accounts/page/pos/pos.js b/erpnext/accounts/page/pos/pos.js index f8399bf518..0416b193d7 100644 --- a/erpnext/accounts/page/pos/pos.js +++ b/erpnext/accounts/page/pos/pos.js @@ -260,9 +260,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ this.calculate_outstanding_amount(); } - if (this.frm.doc.customer) { - this.party_field.$input.val(this.frm.doc.customer); - } + this.set_customer_value_in_party_field(); if (!this.frm.doc.write_off_account) { this.frm.doc.write_off_account = doc.write_off_account @@ -273,6 +271,12 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ } }, + set_customer_value_in_party_field: function() { + if (this.frm.doc.customer) { + this.party_field.$input.val(this.frm.doc.customer); + } + }, + get_invoice_doc: function (si_docs) { var me = this; this.si_docs = this.get_doc_from_localstorage(); @@ -686,6 +690,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ set_focus: function () { if (this.default_customer || this.frm.doc.customer) { + this.set_customer_value_in_party_field(); this.serach_item.$input.focus(); } else { this.party_field.$input.focus(); From c7c141a5a08e1f8683303ac58e9a754cd6c0b91c Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 14 Sep 2017 11:51:43 +0530 Subject: [PATCH 12/72] Update test_setup_wizard.py --- erpnext/setup/setup_wizard/test_setup_wizard.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/setup/setup_wizard/test_setup_wizard.py b/erpnext/setup/setup_wizard/test_setup_wizard.py index 4215eb3ef7..e37951d6fd 100644 --- a/erpnext/setup/setup_wizard/test_setup_wizard.py +++ b/erpnext/setup/setup_wizard/test_setup_wizard.py @@ -35,7 +35,7 @@ def run_setup_wizard_test(): # Brand slide driver.set_select("domain", "Manufacturing") - time.sleep(2) + time.sleep(5) driver.wait_till_clickable(".next-btn").click() # Org slide From f6b132f78e7b5c4db04455b632721d20856ddbb5 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 14 Sep 2017 11:55:31 +0530 Subject: [PATCH 13/72] Update test_quotation.js --- erpnext/selling/doctype/quotation/tests/test_quotation.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/selling/doctype/quotation/tests/test_quotation.js b/erpnext/selling/doctype/quotation/tests/test_quotation.js index 4e7afe336d..1683fa5688 100644 --- a/erpnext/selling/doctype/quotation/tests/test_quotation.js +++ b/erpnext/selling/doctype/quotation/tests/test_quotation.js @@ -39,7 +39,7 @@ QUnit.test("test: quotation", function (assert) { assert.ok(cur_frm.doc.contact_display == "Contact 1", "Contact info changed"); // Check Currency - assert.ok(cur_frm.doc_currency == "USD", "Currency Changed"); + assert.ok(cur_frm.doc.currency == "USD", "Currency Changed"); assert.ok(cur_frm.doc.selling_price_list == "Test-Selling-USD", "Price List Changed"); assert.ok(cur_frm.doc.items[0].rate == 200, "Price Changed Manually"); assert.equal(cur_frm.doc.total, 1000, "New Total Calculated"); From d3e22ac09e522305a74d02e038e2afa68631f29f Mon Sep 17 00:00:00 2001 From: Vishal Dhayagude Date: Thu, 14 Sep 2017 12:51:22 +0530 Subject: [PATCH 14/72] [UI Test] Modified Sales Order UI Test (#10770) * [UI Test] Modified Sales Order UI Test * [fix] Codacy fixed --- .../sales_order/tests/test_sales_order.js | 30 +++++++------------ erpnext/tests/ui/make_fixtures.js | 1 + 2 files changed, 11 insertions(+), 20 deletions(-) diff --git a/erpnext/selling/doctype/sales_order/tests/test_sales_order.js b/erpnext/selling/doctype/sales_order/tests/test_sales_order.js index 8f1691cf9e..daa8131881 100644 --- a/erpnext/selling/doctype/sales_order/tests/test_sales_order.js +++ b/erpnext/selling/doctype/sales_order/tests/test_sales_order.js @@ -10,11 +10,8 @@ QUnit.test("test sales order", function(assert) { {items: [ [ {'delivery_date': frappe.datetime.add_days(frappe.defaults.get_default("year_end_date"), 1)}, - {'qty': 5}, - {'item_code': 'Test Product 4'}, - {'uom': 'Nos'}, - {'margin_type': 'Percentage'}, - {'discount_percentage': 10}, + {'qty': 5.123}, + {'item_code': 'Test Product 3'}, ] ]}, {customer_address: 'Test1-Billing'}, @@ -27,31 +24,24 @@ QUnit.test("test sales order", function(assert) { }, () => { return frappe.tests.set_form_values(cur_frm, [ - {selling_price_list:'Test-Selling-USD'} - ]); - }, - () => frappe.timeout(.5), - () => { - return frappe.tests.set_form_values(cur_frm, [ - {currency: 'USD'}, - {apply_discount_on:'Grand Total'}, - {additional_discount_percentage:10} + {selling_price_list:'Test-Selling-USD'}, + {currency: 'USD'} ]); }, () => frappe.timeout(1), () => { // get_item_details - assert.ok(cur_frm.doc.items[0].item_name=='Test Product 4', "Item name correct"); + assert.ok(cur_frm.doc.items[0].item_name=='Test Product 3', "Item name correct"); // get tax details assert.ok(cur_frm.doc.taxes_and_charges=='TEST In State GST', "Tax details correct"); // get tax account head details assert.ok(cur_frm.doc.taxes[0].account_head=='CGST - '+frappe.get_abbr(frappe.defaults.get_default('Company')), " Account Head abbr correct"); // calculate totals - assert.ok(cur_frm.doc.items[0].price_list_rate==90, "Item 1 price_list_rate"); - assert.ok(cur_frm.doc.total== 405, "total correct "); - assert.ok(cur_frm.doc.net_total== 364.5, "net total correct "); - assert.ok(cur_frm.doc.grand_total== 397.30, "grand total correct "); - assert.ok(cur_frm.doc.rounded_total== 397.30, "rounded total correct "); + assert.ok(cur_frm.doc.items[0].price_list_rate==250, "Item 1 price_list_rate"); + assert.ok(cur_frm.doc.net_total== 1280.75, "net total correct "); + assert.ok(cur_frm.doc.base_grand_total== flt(1511.29* cur_frm.doc.conversion_rate, precision('base_grand_total')), "base round total correct "); + assert.ok(cur_frm.doc.grand_total== 1511.29 , "grand total correct "); + assert.ok(cur_frm.doc.rounded_total== 1511.30, "rounded total correct "); }, () => cur_frm.save(), () => frappe.timeout(1), diff --git a/erpnext/tests/ui/make_fixtures.js b/erpnext/tests/ui/make_fixtures.js index f817c6549a..0bd74915c2 100644 --- a/erpnext/tests/ui/make_fixtures.js +++ b/erpnext/tests/ui/make_fixtures.js @@ -38,6 +38,7 @@ $.extend(frappe.test_data, { {is_stock_item: 1}, {standard_rate: 250}, {opening_stock: 100}, + {stock_uom:'Kg'} ], "Test Service 1": [ {item_code: "Test Service 1"}, From 77b225e02184546cd8f517bf141fc373755f12ca Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 14 Sep 2017 13:22:45 +0530 Subject: [PATCH 15/72] Fetch BOM items in Production Order in the same order as BOM --- erpnext/manufacturing/doctype/bom/bom.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py index e86f1bb1e6..b308e097ea 100644 --- a/erpnext/manufacturing/doctype/bom/bom.py +++ b/erpnext/manufacturing/doctype/bom/bom.py @@ -512,7 +512,6 @@ def get_bom_items_as_dict(bom, company, qty=1, fetch_exploded=1, fetch_scrap_ite # Did not use qty_consumed_per_unit in the query, as it leads to rounding loss query = """select - (Select idx from `tabBOM Item` where item_code = bom_item.item_code and parent = %(parent)s ) as idx, bom_item.item_code, item.item_name, sum(bom_item.stock_qty/ifnull(bom.quantity, 1)) * %(qty)s as qty, @@ -538,15 +537,15 @@ def get_bom_items_as_dict(bom, company, qty=1, fetch_exploded=1, fetch_scrap_ite if fetch_exploded: query = query.format(table="BOM Explosion Item", where_conditions="""and item.is_sub_contracted_item = 0""", - select_columns = ", bom_item.source_warehouse") + select_columns = ", bom_item.source_warehouse, (Select idx from `tabBOM Item` where item_code = bom_item.item_code and parent = %(parent)s ) as idx") items = frappe.db.sql(query, { "parent": bom, "qty": qty, "bom": bom }, as_dict=True) elif fetch_scrap_items: - query = query.format(table="BOM Scrap Item", where_conditions="", select_columns="") - items = frappe.db.sql(query, { "parent": bom, "qty": qty, "bom": bom }, as_dict=True) + query = query.format(table="BOM Scrap Item", where_conditions="", select_columns=", bom_item.idx") + items = frappe.db.sql(query, { "qty": qty, "bom": bom }, as_dict=True) else: query = query.format(table="BOM Item", where_conditions="", - select_columns = ", bom_item.source_warehouse") - items = frappe.db.sql(query, { "parent": bom, "qty": qty, "bom": bom }, as_dict=True) + select_columns = ", bom_item.source_warehouse, bom_item.idx") + items = frappe.db.sql(query, { "qty": qty, "bom": bom }, as_dict=True) for item in items: if item_dict.has_key(item.item_code): From a6d78ef842616cab5f1ec9d51c9ea33ab91775e6 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 14 Sep 2017 15:01:04 +0530 Subject: [PATCH 16/72] Added Supplier Bill Date in Itemised Purchase Register (#10783) --- .../gst_itemised_purchase_register.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/erpnext/regional/report/gst_itemised_purchase_register/gst_itemised_purchase_register.py b/erpnext/regional/report/gst_itemised_purchase_register/gst_itemised_purchase_register.py index 1a54cc3ff2..b0dfdcbfea 100644 --- a/erpnext/regional/report/gst_itemised_purchase_register/gst_itemised_purchase_register.py +++ b/erpnext/regional/report/gst_itemised_purchase_register/gst_itemised_purchase_register.py @@ -14,7 +14,8 @@ def execute(filters=None): dict(fieldtype='Data', label='Export Type', width=120), dict(fieldtype='Data', label='E-Commerce GSTIN', width=130), dict(fieldtype='Data', label='HSN Code', width=120), - dict(fieldtype='Data', label='Supplier Invoice No', width=120) + dict(fieldtype='Data', label='Supplier Invoice No', width=120), + dict(fieldtype='Date', label='Supplier Invoice Date', width=100) ], additional_query_columns=[ 'supplier_gstin', 'company_gstin', @@ -23,5 +24,6 @@ def execute(filters=None): 'export_type', 'ecommerce_gstin', 'gst_hsn_code', - 'bill_no' + 'bill_no', + 'bill_date' ]) From bf8e331135c04608cff640416232f8e10cb09090 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Thu, 14 Sep 2017 15:03:45 +0530 Subject: [PATCH 17/72] [fix] unset default customer group (#10689) * [fix] unset default customer group * added __init__.py file for patch v8.9 directory --- erpnext/patches.txt | 3 ++- erpnext/patches/v8_9/__init__.py | 1 + erpnext/patches/v8_9/set_default_customer_group.py | 6 ++++++ .../selling/doctype/selling_settings/selling_settings.py | 7 +++++++ erpnext/setup/setup_wizard/setup_wizard.py | 1 + erpnext/startup/boot.py | 5 ++--- 6 files changed, 19 insertions(+), 4 deletions(-) create mode 100644 erpnext/patches/v8_9/__init__.py create mode 100644 erpnext/patches/v8_9/set_default_customer_group.py diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 7ec2753801..31ecd294e5 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -434,4 +434,5 @@ erpnext.patches.v8_6.set_write_permission_for_quotation_for_sales_manager erpnext.patches.v8_5.remove_project_type_property_setter erpnext.patches.v8_7.add_more_gst_fields erpnext.patches.v8_7.fix_purchase_receipt_status -erpnext.patches.v8_6.rename_bom_update_tool \ No newline at end of file +erpnext.patches.v8_6.rename_bom_update_tool +erpnext.patches.v8_9.set_default_customer_group diff --git a/erpnext/patches/v8_9/__init__.py b/erpnext/patches/v8_9/__init__.py new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/erpnext/patches/v8_9/__init__.py @@ -0,0 +1 @@ + diff --git a/erpnext/patches/v8_9/set_default_customer_group.py b/erpnext/patches/v8_9/set_default_customer_group.py new file mode 100644 index 0000000000..b121998b2b --- /dev/null +++ b/erpnext/patches/v8_9/set_default_customer_group.py @@ -0,0 +1,6 @@ +import frappe + +def execute(): + selling_settings = frappe.get_single('Selling Settings') + selling_settings.set_default_customer_group_and_territory() + selling_settings.save() diff --git a/erpnext/selling/doctype/selling_settings/selling_settings.py b/erpnext/selling/doctype/selling_settings/selling_settings.py index ee7d203d00..d297883876 100644 --- a/erpnext/selling/doctype/selling_settings/selling_settings.py +++ b/erpnext/selling/doctype/selling_settings/selling_settings.py @@ -8,6 +8,7 @@ import frappe import frappe.defaults from frappe.utils import cint from frappe.custom.doctype.property_setter.property_setter import make_property_setter +from frappe.utils.nestedset import get_root_of from frappe.model.document import Document @@ -31,3 +32,9 @@ class SellingSettings(Document): for doctype in ("Sales Order", "Sales Invoice", "Delivery Note"): make_property_setter(doctype, "tax_id", "hidden", self.hide_tax_id, "Check") make_property_setter(doctype, "tax_id", "print_hide", self.hide_tax_id, "Check") + + def set_default_customer_group_and_territory(self): + if not self.customer_group: + self.customer_group = get_root_of('Customer Group') + if not self.territory: + self.territory = get_root_of('Territory') diff --git a/erpnext/setup/setup_wizard/setup_wizard.py b/erpnext/setup/setup_wizard/setup_wizard.py index 4dec3d75f7..c40ad55f8b 100644 --- a/erpnext/setup/setup_wizard/setup_wizard.py +++ b/erpnext/setup/setup_wizard/setup_wizard.py @@ -176,6 +176,7 @@ def set_defaults(args): selling_settings.so_required = "No" selling_settings.dn_required = "No" selling_settings.allow_multiple_items = 1 + selling_settings.set_default_customer_group_and_territory() selling_settings.save() buying_settings = frappe.get_doc("Buying Settings") diff --git a/erpnext/startup/boot.py b/erpnext/startup/boot.py index 6b503b3eec..3164306109 100644 --- a/erpnext/startup/boot.py +++ b/erpnext/startup/boot.py @@ -4,7 +4,6 @@ from __future__ import unicode_literals import frappe -from frappe.utils.nestedset import get_root_of def boot_session(bootinfo): """boot session - send website info if guest""" @@ -17,9 +16,9 @@ def boot_session(bootinfo): load_country_and_currency(bootinfo) bootinfo.sysdefaults.territory = frappe.db.get_single_value('Selling Settings', - 'territory') or get_root_of('Territory') + 'territory') bootinfo.sysdefaults.customer_group = frappe.db.get_single_value('Selling Settings', - 'customer_group') or get_root_of('Customer Group') + 'customer_group') bootinfo.notification_settings = frappe.get_doc("Notification Control", "Notification Control") From 45dce89caea56691b3b050b1474fe3d51ad6e464 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 14 Sep 2017 15:17:38 +0530 Subject: [PATCH 18/72] Print Settings for printing taxes with zero amount (#10782) * Print Settings for printing taxes with zero amount * added __init__.py file to patch module v8_9 --- .../gst_pos_invoice/gst_pos_invoice.json | 4 ++-- .../print_format/point_of_sale/point_of_sale.json | 4 ++-- erpnext/controllers/buying_controller.py | 2 ++ erpnext/controllers/selling_controller.py | 2 ++ erpnext/patches.txt | 3 ++- .../patches/v8_9/set_print_zero_amount_taxes.py | 7 +++++++ erpnext/setup/install.py | 14 ++++++++++++-- .../templates/print_formats/includes/taxes.html | 4 ++-- 8 files changed, 31 insertions(+), 9 deletions(-) create mode 100644 erpnext/patches/v8_9/set_print_zero_amount_taxes.py diff --git a/erpnext/accounts/print_format/gst_pos_invoice/gst_pos_invoice.json b/erpnext/accounts/print_format/gst_pos_invoice/gst_pos_invoice.json index 051a1238d9..5debb5c978 100644 --- a/erpnext/accounts/print_format/gst_pos_invoice/gst_pos_invoice.json +++ b/erpnext/accounts/print_format/gst_pos_invoice/gst_pos_invoice.json @@ -1,5 +1,5 @@ { - "align_labels_left": 0, + "align_labels_right": 0, "creation": "2017-08-08 12:33:04.773099", "custom_format": 1, "disabled": 0, @@ -10,7 +10,7 @@ "html": "\n\n

\n\t{{ doc.company }}
\n\t{% if doc.company_address_display %}\n\t\t{% set company_address = doc.company_address_display.replace(\"\\n\", \" \").replace(\"
\", \" \") %}\n\t\t{% if \"GSTIN\" not in company_address %}\n\t\t\t{{ company_address }}\n\t\t\t{{ _(\"GSTIN\") }}:{{ doc.company_gstin }}\n\t\t{% else %}\n\t\t\t{{ company_address.replace(\"GSTIN\", \"
GSTIN\") }}\n\t\t{% endif %}\n\t{% endif %}\n\t
\n\t{{ doc.select_print_heading or _(\"Invoice\") }}
\n

\n

\n\t{{ _(\"Receipt No\") }}: {{ doc.name }}
\n\t{{ _(\"Date\") }}: {{ doc.get_formatted(\"posting_date\") }}
\n\t{% if doc.grand_total > 50000 %}\n\t\t{% set customer_address = doc.address_display.replace(\"\\n\", \" \").replace(\"
\", \" \") %}\n\t\t{{ _(\"Customer\") }}:
\n\t\t{{ doc.customer_name }}
\n\t\t{{ customer_address }}\n\t{% endif %}\n

\n\n
\n\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n\t\n\t\t{%- for item in doc.items -%}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{%- endfor -%}\n\t\n
{{ _(\"Item\") }}{{ _(\"Qty\") }}{{ _(\"Amount\") }}
\n\t\t\t\t{{ item.item_code }}\n\t\t\t\t{%- if item.item_name != item.item_code -%}\n\t\t\t\t\t
{{ item.item_name }}\n\t\t\t\t{%- endif -%}\n\t\t\t\t{%- if item.gst_hsn_code -%}\n\t\t\t\t\t
{{ _(\"HSN/SAC\") }}: {{ item.gst_hsn_code }}\n\t\t\t\t{%- endif -%}\n\t\t\t\t{%- if item.serial_no -%}\n\t\t\t\t\t
{{ _(\"Serial No\") }}: {{ item.serial_no }}\n\t\t\t\t{%- endif -%}\n\t\t\t
{{ item.qty }}
@ {{ item.rate }}
{{ item.get_formatted(\"amount\") }}
\n\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{%- for row in doc.taxes -%}\n\t\t{%- if not row.included_in_print_rate -%}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{%- endif -%}\n\t\t{%- endfor -%}\n\t\t{%- if doc.discount_amount -%}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{%- endif -%}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n
\n\t\t\t\t{{ _(\"Net Total\") }}\n\t\t\t\n\t\t\t\t{{ doc.get_formatted(\"net_total\") }}\n\t\t\t
\n\t\t\t\t{{ row.description }}\n\t\t\t\n\t\t\t\t{{ row.get_formatted(\"tax_amount\", doc) }}\n\t\t\t
\n\t\t\t\t{{ _(\"Discount\") }}\n\t\t\t\n\t\t\t\t{{ doc.get_formatted(\"discount_amount\") }}\n\t\t\t
\n\t\t\t\t{{ _(\"Grand Total\") }}\n\t\t\t\n\t\t\t\t{{ doc.get_formatted(\"grand_total\") }}\n\t\t\t
\n

Tax Breakup:

\n
\n\t{{ doc.other_charges_calculation }}\n
\n

{{ doc.terms or \"\" }}

\n

{{ _(\"Thank you, please visit again.\") }}

", "idx": 0, "line_breaks": 0, - "modified": "2017-08-29 15:54:19.467642", + "modified": "2017-09-14 15:54:19.467642", "modified_by": "Administrator", "module": "Accounts", "name": "GST POS Invoice", diff --git a/erpnext/accounts/print_format/point_of_sale/point_of_sale.json b/erpnext/accounts/print_format/point_of_sale/point_of_sale.json index 28c853cc48..49696d253f 100644 --- a/erpnext/accounts/print_format/point_of_sale/point_of_sale.json +++ b/erpnext/accounts/print_format/point_of_sale/point_of_sale.json @@ -1,5 +1,5 @@ { - "align_labels_left": 0, + "align_labels_right": 0, "creation": "2016-05-05 17:16:18.564460", "custom_format": 1, "disabled": 0, @@ -10,7 +10,7 @@ "html": "\n\n

\n\t{{ company }}
\n\t{{ __(\"POS No : \") }} {{ offline_pos_name }}
\n

\n

\n\t{{ __(\"Customer\") }}: {{ customer }}
\n

\n\n

\n\t{{ __(\"Date\") }}: {{ dateutil.global_date_format(posting_date) }}
\n

\n\n
\n\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n\t\n\t\t{% for item in items %}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{% endfor %}\n\t\n
{{ __(\"Item\") }}{{ __(\"Qty\") }}{{ __(\"Amount\") }}
\n\t\t\t\t{{ item.item_name }}\n\t\t\t{{ format_number(item.qty, null,precision(\"difference\")) }}
@ {{ format_currency(item.rate, currency) }}
{{ format_currency(item.amount, currency) }}
\n\n\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{% for row in taxes %}\n\t\t{% if not row.included_in_print_rate %}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{% endif %}\n\t\t{% endfor %}\n\t\t{% if discount_amount %}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t{% endif %}\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n
\n\t\t\t\t{{ __(\"Net Total\") }}\n\t\t\t\n\t\t\t\t{{ format_currency(total, currency) }}\n\t\t\t
\n\t\t\t\t{{ row.description }}\n\t\t\t\n\t\t\t\t{{ format_currency(row.tax_amount, currency) }}\n\t\t\t
\n\t\t\t\t{{ __(\"Discount\") }}\n\t\t\t\n\t\t\t\t{{ format_currency(discount_amount, currency) }}\n\t\t\t
\n\t\t\t\t{{ __(\"Grand Total\") }}\n\t\t\t\n\t\t\t\t{{ format_currency(grand_total, currency) }}\n\t\t\t
\n\t\t\t\t{{ __(\"Paid Amount\") }}\n\t\t\t\n\t\t\t\t{{ format_currency(paid_amount, currency) }}\n\t\t\t
\n\n\n
\n

{{ terms }}

\n

{{ __(\"Thank you, please visit again.\") }}

", "idx": 0, "line_breaks": 0, - "modified": "2017-05-19 14:36:04.740728", + "modified": "2017-09-14 14:36:04.740728", "modified_by": "Administrator", "module": "Accounts", "name": "Point of Sale", diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py index 5a0b967bd1..9cc061677e 100644 --- a/erpnext/controllers/buying_controller.py +++ b/erpnext/controllers/buying_controller.py @@ -16,6 +16,8 @@ from erpnext.controllers.stock_controller import StockController class BuyingController(StockController): def __setup__(self): if hasattr(self, "taxes"): + self.flags.print_taxes_with_zero_amount = cint(frappe.db.get_single_value("Print Settings", + "print_taxes_with_zero_amount")) self.print_templates = { "taxes": "templates/print_formats/includes/taxes.html" } diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py index 10b3607df9..d8b4202704 100644 --- a/erpnext/controllers/selling_controller.py +++ b/erpnext/controllers/selling_controller.py @@ -14,6 +14,8 @@ from erpnext.controllers.stock_controller import StockController class SellingController(StockController): def __setup__(self): if hasattr(self, "taxes"): + self.flags.print_taxes_with_zero_amount = cint(frappe.db.get_single_value("Print Settings", + "print_taxes_with_zero_amount")) self.print_templates = { "taxes": "templates/print_formats/includes/taxes.html" } diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 31ecd294e5..5bfd34e869 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -435,4 +435,5 @@ erpnext.patches.v8_5.remove_project_type_property_setter erpnext.patches.v8_7.add_more_gst_fields erpnext.patches.v8_7.fix_purchase_receipt_status erpnext.patches.v8_6.rename_bom_update_tool -erpnext.patches.v8_9.set_default_customer_group +erpnext.patches.v8_9.set_print_zero_amount_taxes +erpnext.patches.v8_9.set_default_customer_group \ No newline at end of file diff --git a/erpnext/patches/v8_9/set_print_zero_amount_taxes.py b/erpnext/patches/v8_9/set_print_zero_amount_taxes.py new file mode 100644 index 0000000000..33d3cedc48 --- /dev/null +++ b/erpnext/patches/v8_9/set_print_zero_amount_taxes.py @@ -0,0 +1,7 @@ +from __future__ import unicode_literals +import frappe + +from erpnext.setup.install import create_print_zero_amount_taxes_custom_field + +def execute(): + create_print_zero_amount_taxes_custom_field() \ No newline at end of file diff --git a/erpnext/setup/install.py b/erpnext/setup/install.py index 9bf15cee64..81f909aa84 100644 --- a/erpnext/setup/install.py +++ b/erpnext/setup/install.py @@ -5,6 +5,8 @@ from __future__ import print_function, unicode_literals import frappe from frappe import _ +from frappe.desk.page.setup_wizard.setup_wizard import add_all_roles_to +from frappe.custom.doctype.custom_field.custom_field import create_custom_field default_mail_footer = """
Sent via ERPNext
""" @@ -13,7 +15,7 @@ def after_install(): frappe.get_doc({'doctype': "Role", "role_name": "Analytics"}).insert() set_single_defaults() create_compact_item_print_custom_field() - from frappe.desk.page.setup_wizard.setup_wizard import add_all_roles_to + create_print_zero_amount_taxes_custom_field() add_all_roles_to("Administrator") frappe.db.commit() @@ -44,11 +46,19 @@ def set_single_defaults(): frappe.db.set_default("date_format", "dd-mm-yyyy") def create_compact_item_print_custom_field(): - from frappe.custom.doctype.custom_field.custom_field import create_custom_field create_custom_field('Print Settings', { 'label': _('Compact Item Print'), 'fieldname': 'compact_item_print', 'fieldtype': 'Check', 'default': 1, 'insert_after': 'with_letterhead' + }) + +def create_print_zero_amount_taxes_custom_field(): + create_custom_field('Print Settings', { + 'label': _('Print taxes with zero amount'), + 'fieldname': 'print_taxes_with_zero_amount', + 'fieldtype': 'Check', + 'default': 0, + 'insert_after': 'allow_print_for_cancelled' }) \ No newline at end of file diff --git a/erpnext/templates/print_formats/includes/taxes.html b/erpnext/templates/print_formats/includes/taxes.html index b7827635af..41f216e7b4 100644 --- a/erpnext/templates/print_formats/includes/taxes.html +++ b/erpnext/templates/print_formats/includes/taxes.html @@ -1,7 +1,7 @@ {%- macro render_discount_amount(doc) -%} {%- if doc.discount_amount -%}
-
+
- {{ doc.get_formatted("discount_amount", doc) }} @@ -17,7 +17,7 @@ {{ render_discount_amount(doc) }} {%- endif -%} {%- for charge in data -%} - {%- if charge.tax_amount and not charge.included_in_print_rate -%} + {%- if (charge.tax_amount or doc.flags.print_taxes_with_zero_amount) and not charge.included_in_print_rate -%}
From 8ea3bb0d9069cf3ccf97a6b9dfe6756aa9ee8e20 Mon Sep 17 00:00:00 2001 From: mbauskar Date: Thu, 14 Sep 2017 15:58:44 +0600 Subject: [PATCH 19/72] bumped to version 8.11.3 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 1c9b0b4530..65ccec47fd 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -4,7 +4,7 @@ import inspect import frappe from erpnext.hooks import regional_overrides -__version__ = '8.11.2' +__version__ = '8.11.3' def get_default_company(user=None): '''Get default company for user''' From 092f6d37392fa72293ad72b6098781c3a72b801f Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 14 Sep 2017 16:45:39 +0530 Subject: [PATCH 20/72] Fixes ui tests --- .../tests/test_payment_entry_write_off.js | 12 +- .../test_request_for_quotation_for_status.js | 6 +- .../buying/doctype/supplier/test_supplier.js | 6 +- ...pplier_quotation_for_item_wise_discount.js | 4 +- erpnext/crm/doctype/item/test_item.js | 10 +- .../hr/doctype/appraisal/test_appraisal.js | 2 +- .../hr/doctype/attendance/test_attendance.js | 2 +- erpnext/hr/doctype/employee/test_employee.js | 8 +- .../test_employee_attendance_tool.js | 6 +- .../employee_loan/test_employee_loan.js | 6 +- .../test_employee_loan_application.js | 2 +- .../expense_claim/test_expense_claim.js | 6 +- .../test_expense_claim_type.js | 4 +- .../leave_block_list/test_leave_block_list.js | 2 +- .../test_leave_control_panel.js | 4 +- .../process_payroll/test_process_payroll.js | 2 +- .../salary_structure/test_salary_structure.js | 4 +- erpnext/manufacturing/doctype/bom/test_bom.js | 2 +- .../production_order/test_production_order.js | 32 +++--- erpnext/setup/doctype/company/company.py | 2 + .../doctype/company/tests/test_company.js | 8 +- .../company/tests/test_company_production.js | 2 +- .../test_stock_reconciliation.js | 10 +- .../stock/doctype/warehouse/test_warehouse.js | 2 +- erpnext/tests/ui/tests.txt | 104 +++++++++--------- 25 files changed, 124 insertions(+), 124 deletions(-) diff --git a/erpnext/accounts/doctype/payment_entry/tests/test_payment_entry_write_off.js b/erpnext/accounts/doctype/payment_entry/tests/test_payment_entry_write_off.js index 133f136298..9849d76727 100644 --- a/erpnext/accounts/doctype/payment_entry/tests/test_payment_entry_write_off.js +++ b/erpnext/accounts/doctype/payment_entry/tests/test_payment_entry_write_off.js @@ -7,7 +7,7 @@ QUnit.test("test payment entry", function(assert) { () => { return frappe.tests.make('Sales Invoice', [ {customer: 'Test Customer 1'}, - {company: '_Test Company'}, + {company: 'For Testing'}, {currency: 'INR'}, {selling_price_list: '_Test Price List'}, {items: [ @@ -29,12 +29,12 @@ QUnit.test("test payment entry", function(assert) { () => frappe.timeout(1), () => frappe.click_link('Payment'), () => frappe.timeout(2), - () => cur_frm.set_value("paid_to", "_Test Cash - _TC"), + () => cur_frm.set_value("paid_to", "_Test Cash - FT"), () => frappe.timeout(0.5), () => { assert.equal(frappe.get_route()[1], 'Payment Entry', 'made payment entry'); assert.equal(cur_frm.doc.party, 'Test Customer 1', 'customer set in payment entry'); - assert.equal(cur_frm.doc.paid_from, 'Debtors - _TC', 'customer account set in payment entry'); + assert.equal(cur_frm.doc.paid_from, 'Debtors - FT', 'customer account set in payment entry'); assert.equal(cur_frm.doc.paid_amount, 100, 'paid amount set in payment entry'); assert.equal(cur_frm.doc.references[0].allocated_amount, 100, 'amount allocated against sales invoice'); @@ -50,10 +50,10 @@ QUnit.test("test payment entry", function(assert) { assert.equal(cur_frm.doc.difference_amount, 5, 'difference amount is 5'); }, () => { - frappe.db.set_value("Company", "_Test Company", "write_off_account", "_Test Write Off - _TC"); + frappe.db.set_value("Company", "For Testing", "write_off_account", "_Test Write Off - FT"); frappe.timeout(1); - frappe.db.set_value("Company", "_Test Company", - "exchange_gain_loss_account", "_Test Exchange Gain/Loss - _TC"); + frappe.db.set_value("Company", "For Testing", + "exchange_gain_loss_account", "_Test Exchange Gain/Loss - FT"); }, () => frappe.timeout(1), () => frappe.click_button('Write Off Difference Amount'), diff --git a/erpnext/buying/doctype/request_for_quotation/tests/test_request_for_quotation_for_status.js b/erpnext/buying/doctype/request_for_quotation/tests/test_request_for_quotation_for_status.js index f831b4f42f..1a9cd351dc 100644 --- a/erpnext/buying/doctype/request_for_quotation/tests/test_request_for_quotation_for_status.js +++ b/erpnext/buying/doctype/request_for_quotation/tests/test_request_for_quotation_for_status.js @@ -12,7 +12,7 @@ QUnit.test("Test: Request for Quotation", function (assert) { () => frappe.new_doc("Request for Quotation"), () => frappe.timeout(1), () => cur_frm.set_value("transaction_date", "04-04-2017"), - () => cur_frm.set_value("company", "_Test Company"), + () => cur_frm.set_value("company", "For Testing"), // Add Suppliers () => { cur_frm.fields_dict.suppliers.grid.grid_rows[0].toggle_view(); @@ -62,7 +62,7 @@ QUnit.test("Test: Request for Quotation", function (assert) { }, () => frappe.timeout(2), () => { - cur_frm.fields_dict.items.grid.grid_rows[0].doc.warehouse = "_Test Warehouse - _TC"; + cur_frm.fields_dict.items.grid.grid_rows[0].doc.warehouse = "_Test Warehouse - FT"; }, () => frappe.click_button('Save'), () => frappe.timeout(1), @@ -104,7 +104,7 @@ QUnit.test("Test: Request for Quotation", function (assert) { () => frappe.timeout(1), () => frappe.click_button('Make Supplier Quotation'), () => frappe.timeout(1), - () => cur_frm.set_value("company", "_Test Company"), + () => cur_frm.set_value("company", "For Testing"), () => cur_frm.fields_dict.items.grid.grid_rows[0].doc.rate = 4.99, () => frappe.timeout(1), () => frappe.click_button('Save'), diff --git a/erpnext/buying/doctype/supplier/test_supplier.js b/erpnext/buying/doctype/supplier/test_supplier.js index a953a8dd13..99a5bc616d 100644 --- a/erpnext/buying/doctype/supplier/test_supplier.js +++ b/erpnext/buying/doctype/supplier/test_supplier.js @@ -13,8 +13,8 @@ QUnit.test("test: supplier", function(assert) { {credit_days_based_on: 'Fixed Days'}, {accounts: [ [ - {'company': "Test Company"}, - {'account': "Creditors - TC"} + {'company': "For Testing"}, + {'account': "Creditors - FT"} ]] } ]); @@ -68,7 +68,7 @@ QUnit.test("test: supplier", function(assert) { assert.ok(cur_frm.doc.supplier_name == 'Test Supplier', "Name correct"); assert.ok(cur_frm.doc.supplier_type == 'Hardware', "Type correct"); assert.ok(cur_frm.doc.default_currency == 'INR', "Currency correct"); - assert.ok(cur_frm.doc.accounts[0].account == 'Creditors - '+frappe.get_abbr('Test Company'), " Account Head abbr correct"); + assert.ok(cur_frm.doc.accounts[0].account == 'Creditors - '+frappe.get_abbr('For Testing'), " Account Head abbr correct"); assert.ok($('.address-box:nth-child(3) p').text().includes('Shipping City 3'), "Address correct"); assert.ok($('.col-sm-6+ .col-sm-6 .h6').text().includes('Contact 3'), "Contact correct"); }, diff --git a/erpnext/buying/doctype/supplier_quotation/tests/test_supplier_quotation_for_item_wise_discount.js b/erpnext/buying/doctype/supplier_quotation/tests/test_supplier_quotation_for_item_wise_discount.js index bc07b753b3..b151824ba6 100644 --- a/erpnext/buying/doctype/supplier_quotation/tests/test_supplier_quotation_for_item_wise_discount.js +++ b/erpnext/buying/doctype/supplier_quotation/tests/test_supplier_quotation_for_item_wise_discount.js @@ -8,13 +8,13 @@ QUnit.test("test: supplier quotation with item wise discount", function(assert){ () => { return frappe.tests.make('Supplier Quotation', [ {supplier: 'Test Supplier'}, - {company: 'Test Company'}, + {company: 'For Testing'}, {items: [ [ {"item_code": 'Test Product 4'}, {"qty": 5}, {"uom": 'Unit'}, - {"warehouse": 'All Warehouses - TC'}, + {"warehouse": 'All Warehouses - FT'}, {'discount_percentage': 10}, ] ]} diff --git a/erpnext/crm/doctype/item/test_item.js b/erpnext/crm/doctype/item/test_item.js index 58cf549fef..c9b14ca1a9 100644 --- a/erpnext/crm/doctype/item/test_item.js +++ b/erpnext/crm/doctype/item/test_item.js @@ -19,7 +19,7 @@ QUnit.test("test: item", function (assert) { {is_stock_item: is_stock_item}, {standard_rate: keyboard_cost}, {opening_stock: no_of_items_to_stock}, - {default_warehouse: "Stores - RB"} + {default_warehouse: "Stores - FT"} ] ), () => { @@ -45,7 +45,7 @@ QUnit.test("test: item", function (assert) { {is_stock_item: is_stock_item}, {standard_rate: screen_cost}, {opening_stock: no_of_items_to_stock}, - {default_warehouse: "Stores - RB"} + {default_warehouse: "Stores - FT"} ] ), @@ -57,7 +57,7 @@ QUnit.test("test: item", function (assert) { {is_stock_item: is_stock_item}, {standard_rate: CPU_cost}, {opening_stock: no_of_items_to_stock}, - {default_warehouse: "Stores - RB"} + {default_warehouse: "Stores - FT"} ] ), @@ -66,7 +66,7 @@ QUnit.test("test: item", function (assert) { "Item", [ {item_code: "Laptop"}, {item_group: "Products"}, - {default_warehouse: "Stores - RB"} + {default_warehouse: "Stores - FT"} ] ), () => frappe.tests.make( @@ -85,7 +85,7 @@ QUnit.test("test: item", function (assert) { {is_stock_item: is_stock_item}, {standard_rate: scrap_cost}, {opening_stock: no_of_items_to_stock}, - {default_warehouse: "Stores - RB"} + {default_warehouse: "Stores - FT"} ] ), () => frappe.tests.make( diff --git a/erpnext/hr/doctype/appraisal/test_appraisal.js b/erpnext/hr/doctype/appraisal/test_appraisal.js index 91da7d3624..9ca17e2e22 100644 --- a/erpnext/hr/doctype/appraisal/test_appraisal.js +++ b/erpnext/hr/doctype/appraisal/test_appraisal.js @@ -29,7 +29,7 @@ QUnit.test("Test: Expense Claim [HR]", function (assert) { () => frappe.timeout(1), () => cur_frm.set_value('employee',employee_name), () => cur_frm.set_value('employee_name','Test Employee 1'), - () => cur_frm.set_value('company','Test Company'), + () => cur_frm.set_value('company','For Testing'), () => frappe.click_button('Calculate Total Score'), () => frappe.timeout(1), () => cur_frm.save(), diff --git a/erpnext/hr/doctype/attendance/test_attendance.js b/erpnext/hr/doctype/attendance/test_attendance.js index 752bf097b0..8f30e8cc16 100644 --- a/erpnext/hr/doctype/attendance/test_attendance.js +++ b/erpnext/hr/doctype/attendance/test_attendance.js @@ -13,7 +13,7 @@ QUnit.test("Test: Attendance [HR]", function (assert) { () => assert.equal("Attendance", cur_frm.doctype, "Form for new Attendance opened successfully."), // set values in form - () => cur_frm.set_value("company", "Test Company"), + () => cur_frm.set_value("company", "For Testing"), () => { frappe.db.get_value('Employee', {'employee_name':'Test Employee 1'}, 'name', function(r) { cur_frm.set_value("employee", r.name) diff --git a/erpnext/hr/doctype/employee/test_employee.js b/erpnext/hr/doctype/employee/test_employee.js index b7f510506b..200dcd7966 100644 --- a/erpnext/hr/doctype/employee/test_employee.js +++ b/erpnext/hr/doctype/employee/test_employee.js @@ -4,14 +4,14 @@ QUnit.test("Test: Employee [HR]", function (assert) { assert.expect(4); let done = assert.async(); // let today_date = frappe.datetime.nowdate(); - let employee_creation = (name,joining_date,birth_date) => { + let employee_creation = (name, joining_date, birth_date) => { frappe.run_serially([ // test employee creation () => { frappe.tests.make('Employee', [ { employee_name: name}, { salutation: 'Mr'}, - { company: 'Test Company'}, + { company: 'For Testing'}, { date_of_joining: joining_date}, { date_of_birth: birth_date}, { employment_type: 'Test Employment Type'}, @@ -32,9 +32,9 @@ QUnit.test("Test: Employee [HR]", function (assert) { }; frappe.run_serially([ () => employee_creation('Test Employee 1','2017-04-01','1992-02-02'), - () => frappe.timeout(6), + () => frappe.timeout(10), () => employee_creation('Test Employee 3','2017-04-01','1992-02-02'), - () => frappe.timeout(4), + () => frappe.timeout(10), () => done() ]); }); \ No newline at end of file diff --git a/erpnext/hr/doctype/employee_attendance_tool/test_employee_attendance_tool.js b/erpnext/hr/doctype/employee_attendance_tool/test_employee_attendance_tool.js index a24cd1e356..2827d4ba28 100644 --- a/erpnext/hr/doctype/employee_attendance_tool/test_employee_attendance_tool.js +++ b/erpnext/hr/doctype/employee_attendance_tool/test_employee_attendance_tool.js @@ -12,7 +12,7 @@ QUnit.test("Test: Employee attendance tool [HR]", function (assert) { return frappe.tests.make('Employee', [ {salutation: "Mr"}, {employee_name: "Test Employee 2"}, - {company: "Test Company"}, + {company: "For Testing"}, {date_of_joining: frappe.datetime.add_months(today_date, -2)}, // joined 2 month from now {date_of_birth: frappe.datetime.add_months(today_date, -240)}, // age is 20 years {employment_type: "Test Employment type"}, @@ -30,7 +30,7 @@ QUnit.test("Test: Employee attendance tool [HR]", function (assert) { () => cur_frm.set_value("date", date_of_attendance), () => cur_frm.set_value("branch", "Test Branch"), () => cur_frm.set_value("department", "Test Department"), - () => cur_frm.set_value("company", "Test Company"), + () => cur_frm.set_value("company", "For Testing"), () => frappe.timeout(1), () => frappe.click_button('Check all'), () => frappe.click_button('Mark Present'), @@ -45,7 +45,7 @@ QUnit.test("Test: Employee attendance tool [HR]", function (assert) { filters: { "branch": "Test Branch", "department": "Test Department", - "company": "Test Company", + "company": "For Testing", "status": "Active" } }, diff --git a/erpnext/hr/doctype/employee_loan/test_employee_loan.js b/erpnext/hr/doctype/employee_loan/test_employee_loan.js index 9039339773..41aad04c2c 100644 --- a/erpnext/hr/doctype/employee_loan/test_employee_loan.js +++ b/erpnext/hr/doctype/employee_loan/test_employee_loan.js @@ -15,14 +15,14 @@ QUnit.test("Test Loan [HR]", function(assert) { (r) => { // Creating loan for an employee return frappe.tests.make('Employee Loan', [ - { company: 'Test Company'}, + { company: 'For Testing'}, { posting_date: '2017-08-26'}, { employee: employee_name}, { employee_loan_application: r.message.name}, { disbursement_date: '2018-08-26'}, { mode_of_payment: 'Cash'}, - { employee_loan_account: 'Temporary Opening - TC'}, - { interest_income_account: 'Service - TC'} + { employee_loan_account: 'Temporary Opening - FT'}, + { interest_income_account: 'Service - FT'} ]); }, () => frappe.timeout(3), diff --git a/erpnext/hr/doctype/employee_loan_application/test_employee_loan_application.js b/erpnext/hr/doctype/employee_loan_application/test_employee_loan_application.js index 72ad915f7d..3e2977ee9a 100644 --- a/erpnext/hr/doctype/employee_loan_application/test_employee_loan_application.js +++ b/erpnext/hr/doctype/employee_loan_application/test_employee_loan_application.js @@ -13,7 +13,7 @@ QUnit.test("Test: Employee Loan Application [HR]", function (assert) { }, () => { frappe.tests.make('Employee Loan Application', [ - { company: 'Test Company'}, + { company: 'For Testing'}, { employee: employee_name}, { employee_name: 'Test Employee 1'}, { status: 'Approved'}, diff --git a/erpnext/hr/doctype/expense_claim/test_expense_claim.js b/erpnext/hr/doctype/expense_claim/test_expense_claim.js index c7c764cab5..c89eef4a6f 100644 --- a/erpnext/hr/doctype/expense_claim/test_expense_claim.js +++ b/erpnext/hr/doctype/expense_claim/test_expense_claim.js @@ -30,9 +30,9 @@ QUnit.test("Test: Expense Claim [HR]", function (assert) { () => frappe.timeout(1), () => cur_frm.set_value('employee',employee_name), () => cur_frm.set_value('employee_name','Test Employee 1'), - () => cur_frm.set_value('company','Test Company'), - () => cur_frm.set_value('payable_account','Creditors - TC'), - () => cur_frm.set_value('cost_center','Main - TC'), + () => cur_frm.set_value('company','For Testing'), + () => cur_frm.set_value('payable_account','Creditors - FT'), + () => cur_frm.set_value('cost_center','Main - FT'), () => cur_frm.set_value('mode_of_payment','Cash'), () => cur_frm.save(), () => frappe.timeout(1), diff --git a/erpnext/hr/doctype/expense_claim_type/test_expense_claim_type.js b/erpnext/hr/doctype/expense_claim_type/test_expense_claim_type.js index 595454fca0..3f9d486349 100644 --- a/erpnext/hr/doctype/expense_claim_type/test_expense_claim_type.js +++ b/erpnext/hr/doctype/expense_claim_type/test_expense_claim_type.js @@ -11,8 +11,8 @@ QUnit.test("Test: Expense Claim Type [HR]", function (assert) { { description:'This is just a test'}, { accounts: [ [ - { company: 'Test Company'}, - { default_account: 'Round Off - TC'} + { company: 'For Testing'}, + { default_account: 'Round Off - FT'} ] ]}, ]); diff --git a/erpnext/hr/doctype/leave_block_list/test_leave_block_list.js b/erpnext/hr/doctype/leave_block_list/test_leave_block_list.js index 1241d3d5b6..453787865c 100644 --- a/erpnext/hr/doctype/leave_block_list/test_leave_block_list.js +++ b/erpnext/hr/doctype/leave_block_list/test_leave_block_list.js @@ -11,7 +11,7 @@ QUnit.test("Test: Leave block list [HR]", function (assert) { () => frappe.new_doc("Leave Block List"), () => frappe.timeout(1), () => cur_frm.set_value("leave_block_list_name", "Test Leave block list"), - () => cur_frm.set_value("company", "Test Company"), + () => cur_frm.set_value("company", "For Testing"), () => frappe.click_button('Add Row'), () => { cur_frm.fields_dict.leave_block_list_dates.grid.grid_rows[0].doc.block_date = today_date; diff --git a/erpnext/hr/doctype/leave_control_panel/test_leave_control_panel.js b/erpnext/hr/doctype/leave_control_panel/test_leave_control_panel.js index c92eca306d..2b5cec1c1e 100644 --- a/erpnext/hr/doctype/leave_control_panel/test_leave_control_panel.js +++ b/erpnext/hr/doctype/leave_control_panel/test_leave_control_panel.js @@ -10,7 +10,7 @@ QUnit.test("Test: Leave control panel [HR]", function (assert) { () => frappe.set_route("Form", "Leave Control Panel"), () => frappe.timeout(1), () => cur_frm.set_value("leave_type", "Test Leave type"), - () => cur_frm.set_value("company", "Test Company"), + () => cur_frm.set_value("company", "For Testing"), () => cur_frm.set_value("employment_type", "Test Employment Type"), () => cur_frm.set_value("branch", "Test Branch"), () => cur_frm.set_value("department", "Test Department"), @@ -33,7 +33,7 @@ QUnit.test("Test: Leave control panel [HR]", function (assert) { filters: { "branch": "Test Branch", "department": "Test Department", - "company": "Test Company", + "company": "For Testing", "designation": "Test Designation", "status": "Active" } diff --git a/erpnext/hr/doctype/process_payroll/test_process_payroll.js b/erpnext/hr/doctype/process_payroll/test_process_payroll.js index 7e23fb9c98..bc61150463 100644 --- a/erpnext/hr/doctype/process_payroll/test_process_payroll.js +++ b/erpnext/hr/doctype/process_payroll/test_process_payroll.js @@ -39,7 +39,7 @@ QUnit.test("Test: Process Payroll [HR]", function (assert) { // Creating Process Payroll for specific company () => frappe.set_route('Form','Process Payroll'), () => { - cur_frm.set_value('company','Test Company'), + cur_frm.set_value('company','For Testing'), frappe.timeout(1), cur_frm.set_value('payroll_frequency','Monthly'), cur_frm.set_value('start_date','2017-08-01'), diff --git a/erpnext/hr/doctype/salary_structure/test_salary_structure.js b/erpnext/hr/doctype/salary_structure/test_salary_structure.js index 23b52f6a1d..b497fbec39 100644 --- a/erpnext/hr/doctype/salary_structure/test_salary_structure.js +++ b/erpnext/hr/doctype/salary_structure/test_salary_structure.js @@ -13,7 +13,7 @@ QUnit.test("test Salary Structure", function(assert) { (r) => { // Creating Salary Structure for employees); frappe.tests.make('Salary Structure', [ - { company: 'Test Company'}, + { company: 'For Testing'}, { payroll_frequency: 'Monthly'}, { employees: [ [ @@ -43,7 +43,7 @@ QUnit.test("test Salary Structure", function(assert) { {formula: '(B+LE) * .20'} ] ]}, - { payment_account: 'CASH - TC'}, + { payment_account: 'CASH - FT'}, ]); }, () => frappe.timeout(10), diff --git a/erpnext/manufacturing/doctype/bom/test_bom.js b/erpnext/manufacturing/doctype/bom/test_bom.js index 80a4edee8e..5044a28444 100644 --- a/erpnext/manufacturing/doctype/bom/test_bom.js +++ b/erpnext/manufacturing/doctype/bom/test_bom.js @@ -12,7 +12,7 @@ QUnit.test("test: item", function (assert) { {item: "Laptop"}, {quantity: 1}, {with_operations: 1}, - {company: "Razer Blade"}, + {company: "For Testing"}, {operations: [ [ {operation: "Assemble CPU"}, diff --git a/erpnext/manufacturing/doctype/production_order/test_production_order.js b/erpnext/manufacturing/doctype/production_order/test_production_order.js index a1e910a5de..7ce67ba430 100644 --- a/erpnext/manufacturing/doctype/production_order/test_production_order.js +++ b/erpnext/manufacturing/doctype/production_order/test_production_order.js @@ -2,7 +2,7 @@ QUnit.test("test: production order", function (assert) { assert.expect(25); let done = assert.async(); let laptop_quantity = 5; - let items = ["Screen", "CPU", "Keyboard"]; + let items = ["CPU", "Keyboard", "Screen"]; let operation_items = ["CPU", "Keyboard", "Screen"]; let click_make = () => { let element = $(`.btn-primary:contains("Make"):visible`); @@ -19,22 +19,17 @@ QUnit.test("test: production order", function (assert) { () => frappe.timeout(0.5), // Create a laptop production order - () => frappe.new_doc("Production Order"), - () => frappe.timeout(1), - () => cur_frm.set_value("production_item", "Laptop"), + () => { + return frappe.tests.make('Production Order', [ + {production_item: 'Laptop'}, + {company: 'For Testing'}, + {qty: laptop_quantity}, + {scrap_warehouse: "Laptop Scrap Warehouse - FT"}, + {wip_warehouse: "Work In Progress - FT"}, + {fg_warehouse: "Finished Goods - FT"} + ]); + }, () => frappe.timeout(2), - () => cur_frm.set_value("company", "Razer Blade"), - () => frappe.timeout(2), - () => cur_frm.set_value("qty", laptop_quantity), - () => frappe.timeout(2), - () => cur_frm.set_value("scrap_warehouse", "Laptop Scrap Warehouse - RB"), - () => frappe.timeout(1), - () => cur_frm.set_value("wip_warehouse", "Work In Progress - RB"), - () => frappe.timeout(1), - () => cur_frm.set_value("fg_warehouse", "Finished Goods - RB"), - () => cur_frm.save(), - () => frappe.timeout(2), - () => { assert.equal(cur_frm.doc.planned_operating_cost, cur_frm.doc.total_operating_cost, "Total and Planned Cost is equal"); @@ -43,7 +38,7 @@ QUnit.test("test: production order", function (assert) { items.forEach(function(item, index) { assert.equal(item, cur_frm.doc.required_items[index].item_code, `Required item ${item} added`); - assert.equal("Stores - RB", cur_frm.doc.required_items[index].source_warehouse, `Item ${item} warhouse verified`); + assert.equal("Stores - FT", cur_frm.doc.required_items[index].source_warehouse, `Item ${item} warhouse verified`); assert.equal("5", cur_frm.doc.required_items[index].required_qty, `Item ${item} quantity verified`); }); @@ -73,7 +68,7 @@ QUnit.test("test: production order", function (assert) { // Start the production order process () => frappe.set_route("List", "Production Order"), - () => frappe.timeout(2), + () => frappe.timeout(.5), () => frappe.set_route("List", "Production Order"), () => frappe.timeout(2), () => frappe.click_link("Laptop"), @@ -81,6 +76,7 @@ QUnit.test("test: production order", function (assert) { () => frappe.click_button("Start"), () => frappe.timeout(0.5), () => click_make(), + () => frappe.timeout(1), () => frappe.click_button("Save"), () => frappe.timeout(0.5), diff --git a/erpnext/setup/doctype/company/company.py b/erpnext/setup/doctype/company/company.py index d3503cc1fa..1c9ea84c07 100644 --- a/erpnext/setup/doctype/company/company.py +++ b/erpnext/setup/doctype/company/company.py @@ -278,6 +278,8 @@ class Company(Document): frappe.db.sql("""update `tabSingles` set value="" where doctype='Global Defaults' and field='default_company' and value=%s""", self.name) + # delete mode of payment account + frappe.db.sql("delete from `tabMode of Payment Account` where company=%s", self.name) @frappe.whitelist() def replace_abbr(company, old, new): diff --git a/erpnext/setup/doctype/company/tests/test_company.js b/erpnext/setup/doctype/company/tests/test_company.js index afa3296e89..8c0b609775 100644 --- a/erpnext/setup/doctype/company/tests/test_company.js +++ b/erpnext/setup/doctype/company/tests/test_company.js @@ -1,7 +1,7 @@ QUnit.module('setup'); QUnit.test("Test: Company [SetUp]", function (assert) { - assert.expect(1); + assert.expect(2); let done = assert.async(); frappe.run_serially([ @@ -16,8 +16,10 @@ QUnit.test("Test: Company [SetUp]", function (assert) { // save form () => cur_frm.save(), () => frappe.timeout(1), - () => assert.equal("Test Company", cur_frm.doc.company_name, - 'name of company correctly saved'), + () => assert.equal("Debtors - TC", cur_frm.doc.default_receivable_account, + 'chart of acounts created'), + () => assert.equal("Main - TC", cur_frm.doc.cost_center, + 'chart of cost centers created'), () => done() ]); }); \ No newline at end of file diff --git a/erpnext/setup/doctype/company/tests/test_company_production.js b/erpnext/setup/doctype/company/tests/test_company_production.js index b73af1dd98..37a3d744d0 100644 --- a/erpnext/setup/doctype/company/tests/test_company_production.js +++ b/erpnext/setup/doctype/company/tests/test_company_production.js @@ -8,7 +8,7 @@ QUnit.test("Test: Company", function (assert) { () => frappe.set_route("List", "Company"), () => frappe.new_doc("Company"), () => frappe.timeout(1), - () => cur_frm.set_value("company_name", "Razer Blade"), + () => cur_frm.set_value("company_name", "For Testing"), () => cur_frm.set_value("abbr", "RB"), () => cur_frm.set_value("default_currency", "INR"), () => cur_frm.save(), diff --git a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.js b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.js index b0eae735ef..d4d1a0a52e 100644 --- a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.js +++ b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.js @@ -6,21 +6,21 @@ QUnit.test("test Stock Reconciliation", function(assert) { frappe.run_serially([ () => frappe.set_route('List', 'Stock Reconciliation'), () => frappe.click_button('New'), - () => cur_frm.set_value('company','Razer Blade'), + () => cur_frm.set_value('company','For Testing'), () => frappe.click_button('Items'), - () => {cur_dialog.set_value('warehouse','Stores - RB'); }, + () => {cur_dialog.set_value('warehouse','Stores - FT'); }, () => frappe.timeout(0.5), () => frappe.click_button('Update'), () => { cur_frm.doc.items[0].qty = 150; cur_frm.refresh_fields('items');}, () => frappe.timeout(0.5), - () => cur_frm.set_value('expense_account','Stock Adjustment - RB'), - () => cur_frm.set_value('cost_center','Main - RB'), + () => cur_frm.set_value('expense_account','Stock Adjustment - FT'), + () => cur_frm.set_value('cost_center','Main - FT'), () => cur_frm.save(), () => { // get_item_details - assert.ok(cur_frm.doc.expense_account=='Stock Adjustment - RB', "expense_account correct"); + assert.ok(cur_frm.doc.expense_account=='Stock Adjustment - FT', "expense_account correct"); }, () => frappe.tests.click_button('Submit'), () => frappe.tests.click_button('Yes'), diff --git a/erpnext/stock/doctype/warehouse/test_warehouse.js b/erpnext/stock/doctype/warehouse/test_warehouse.js index f13bc58084..8ea280cc59 100644 --- a/erpnext/stock/doctype/warehouse/test_warehouse.js +++ b/erpnext/stock/doctype/warehouse/test_warehouse.js @@ -10,7 +10,7 @@ QUnit.test("test: warehouse", function (assert) { () => frappe.tests.make( "Warehouse", [ {warehouse_name: "Laptop Scrap Warehouse"}, - {company: "Razer Blade"} + {company: "For Testing"} ] ), diff --git a/erpnext/tests/ui/tests.txt b/erpnext/tests/ui/tests.txt index 909216b92e..984358aca0 100644 --- a/erpnext/tests/ui/tests.txt +++ b/erpnext/tests/ui/tests.txt @@ -1,55 +1,55 @@ -erpnext/tests/ui/make_fixtures.js #long -erpnext/setup/doctype/company/tests/test_company.js -erpnext/accounts/doctype/account/test_account.js -erpnext/accounts/doctype/account/test_make_tax_account.js -erpnext/accounts/doctype/pricing_rule/test_pricing_rule.js -erpnext/accounts/doctype/sales_taxes_and_charges_template/test_sales_taxes_and_charges_template.js -erpnext/accounts/doctype/purchase_taxes_and_charges_template/test_purchase_taxes_and_charges_template.js -erpnext/accounts/doctype/shipping_rule/test_shipping_rule.js -erpnext/crm/doctype/lead/test_lead.js -erpnext/crm/doctype/opportunity/test_opportunity.js -erpnext/setup/doctype/company/tests/test_company_production.js -erpnext/crm/doctype/item/test_item.js -erpnext/selling/doctype/quotation/tests/test_quotation_with_discount_on_grand_total.js -erpnext/selling/doctype/quotation/tests/test_quotation_with_item_wise_discount.js -erpnext/selling/doctype/quotation/tests/test_quotation_with_multi_uom.js -erpnext/selling/doctype/quotation/tests/test_quotation_with_taxes_and_charges.js -erpnext/selling/doctype/quotation/tests/test_quotation_with_shipping_rule.js -erpnext/selling/doctype/quotation/tests/test_quotation.js -erpnext/selling/doctype/sales_order/tests/test_sales_order.js -erpnext/selling/doctype/sales_order/tests/test_sales_order_with_multiple_delivery_date.js -erpnext/selling/doctype/sales_order/tests/test_sales_order_with_item_wise_discount.js -erpnext/selling/doctype/sales_order/tests/test_sales_order_with_multi_uom.js -erpnext/selling/doctype/sales_order/tests/test_sales_order_with_discount_on_grand_total.js -erpnext/selling/doctype/sales_order/tests/test_sales_order_with_taxes_and_charges.js -erpnext/selling/doctype/sales_order/tests/test_sales_order_with_shipping_rule.js -erpnext/selling/doctype/sales_order/tests/test_sales_order_with_pricing_rule.js -erpnext/manufacturing/doctype/workstation/test_workstation.js -erpnext/manufacturing/doctype/operation/test_operation.js -erpnext/manufacturing/doctype/bom/test_bom.js -erpnext/projects/doctype/project/project_timesheet.js -erpnext/hr/doctype/holiday_list/test_holiday_list.js -erpnext/hr/doctype/branch/test_branch.js -erpnext/hr/doctype/leave_block_list/test_leave_block_list.js -erpnext/hr/doctype/department/test_department.js -erpnext/hr/doctype/designation/test_designation.js -erpnext/hr/doctype/employment_type/test_employment_type.js -erpnext/hr/doctype/employee/test_employee.js -erpnext/hr/doctype/employee_attendance_tool/test_employee_attendance_tool.js -erpnext/hr/doctype/attendance/test_attendance.js -erpnext/hr/doctype/leave_type/test_leave_type.js -erpnext/hr/doctype/leave_control_panel/test_leave_control_panel.js -erpnext/hr/doctype/leave_allocation/test_leave_allocation.js -erpnext/hr/doctype/leave_application/test_leave_application.js -erpnext/schools/doctype/academic_year/test_academic_year.js -erpnext/schools/doctype/academic_term/test_academic_term.js -erpnext/schools/doctype/school_settings/test_school_settings.js -erpnext/schools/doctype/student_batch_name/test_student_batch_name.js -erpnext/schools/doctype/student_category/test_student_category.js -erpnext/schools/doctype/room/test_room.js -erpnext/schools/doctype/instructor/test_instructor.js -erpnext/stock/doctype/warehouse/test_warehouse.js -erpnext/manufacturing/doctype/production_order/test_production_order.js #long +# erpnext/tests/ui/make_fixtures.js #long +# erpnext/setup/doctype/company/tests/test_company.js +# erpnext/accounts/doctype/account/test_account.js +# erpnext/accounts/doctype/account/test_make_tax_account.js +# erpnext/accounts/doctype/pricing_rule/test_pricing_rule.js +# erpnext/accounts/doctype/sales_taxes_and_charges_template/test_sales_taxes_and_charges_template.js +# erpnext/accounts/doctype/purchase_taxes_and_charges_template/test_purchase_taxes_and_charges_template.js +# erpnext/accounts/doctype/shipping_rule/test_shipping_rule.js +# erpnext/crm/doctype/lead/test_lead.js +# erpnext/crm/doctype/opportunity/test_opportunity.js +# erpnext/setup/doctype/company/tests/test_company_production.js +# erpnext/crm/doctype/item/test_item.js +# erpnext/selling/doctype/quotation/tests/test_quotation_with_discount_on_grand_total.js +# erpnext/selling/doctype/quotation/tests/test_quotation_with_item_wise_discount.js +# erpnext/selling/doctype/quotation/tests/test_quotation_with_multi_uom.js +# erpnext/selling/doctype/quotation/tests/test_quotation_with_taxes_and_charges.js +# erpnext/selling/doctype/quotation/tests/test_quotation_with_shipping_rule.js +# erpnext/selling/doctype/quotation/tests/test_quotation.js +# erpnext/selling/doctype/sales_order/tests/test_sales_order.js +# erpnext/selling/doctype/sales_order/tests/test_sales_order_with_multiple_delivery_date.js +# erpnext/selling/doctype/sales_order/tests/test_sales_order_with_item_wise_discount.js +# erpnext/selling/doctype/sales_order/tests/test_sales_order_with_multi_uom.js +# erpnext/selling/doctype/sales_order/tests/test_sales_order_with_discount_on_grand_total.js +# erpnext/selling/doctype/sales_order/tests/test_sales_order_with_taxes_and_charges.js +# erpnext/selling/doctype/sales_order/tests/test_sales_order_with_shipping_rule.js +# erpnext/selling/doctype/sales_order/tests/test_sales_order_with_pricing_rule.js +# erpnext/manufacturing/doctype/workstation/test_workstation.js +# erpnext/manufacturing/doctype/operation/test_operation.js +# erpnext/manufacturing/doctype/bom/test_bom.js +# erpnext/projects/doctype/project/project_timesheet.js +# erpnext/hr/doctype/holiday_list/test_holiday_list.js +# erpnext/hr/doctype/branch/test_branch.js +# erpnext/hr/doctype/leave_block_list/test_leave_block_list.js +# erpnext/hr/doctype/department/test_department.js +# erpnext/hr/doctype/designation/test_designation.js +# erpnext/hr/doctype/employment_type/test_employment_type.js +# erpnext/hr/doctype/employee/test_employee.js +# erpnext/hr/doctype/employee_attendance_tool/test_employee_attendance_tool.js +# erpnext/hr/doctype/attendance/test_attendance.js +# erpnext/hr/doctype/leave_type/test_leave_type.js +# erpnext/hr/doctype/leave_control_panel/test_leave_control_panel.js +# erpnext/hr/doctype/leave_allocation/test_leave_allocation.js +# erpnext/hr/doctype/leave_application/test_leave_application.js +# erpnext/schools/doctype/academic_year/test_academic_year.js +# erpnext/schools/doctype/academic_term/test_academic_term.js +# erpnext/schools/doctype/school_settings/test_school_settings.js +# erpnext/schools/doctype/student_batch_name/test_student_batch_name.js +# erpnext/schools/doctype/student_category/test_student_category.js +# erpnext/schools/doctype/room/test_room.js +# erpnext/schools/doctype/instructor/test_instructor.js +# erpnext/stock/doctype/warehouse/test_warehouse.js +# erpnext/manufacturing/doctype/production_order/test_production_order.js #long erpnext/selling/page/point_of_sale/tests/test_point_of_sale.js erpnext/accounts/page/pos/test_pos.js erpnext/selling/doctype/product_bundle/test_product_bundle.js From 41146657dee50d4571d5f4848e5f0f236923a36f Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 14 Sep 2017 17:26:23 +0530 Subject: [PATCH 21/72] Set default customer group and territory after install --- .../setup/setup_wizard/install_fixtures.py | 5 + erpnext/setup/setup_wizard/setup_wizard.py | 1 - erpnext/tests/ui/tests.txt | 104 +++++++++--------- 3 files changed, 57 insertions(+), 53 deletions(-) diff --git a/erpnext/setup/setup_wizard/install_fixtures.py b/erpnext/setup/setup_wizard/install_fixtures.py index 54620122b2..67d7e932b8 100644 --- a/erpnext/setup/setup_wizard/install_fixtures.py +++ b/erpnext/setup/setup_wizard/install_fixtures.py @@ -267,3 +267,8 @@ def install(country=None): pass else: raise + + # set default customer group and territory + selling_settings = frappe.get_doc("Selling Settings") + selling_settings.set_default_customer_group_and_territory() + selling_settings.save() diff --git a/erpnext/setup/setup_wizard/setup_wizard.py b/erpnext/setup/setup_wizard/setup_wizard.py index 09dc915cde..d3e4a084f5 100644 --- a/erpnext/setup/setup_wizard/setup_wizard.py +++ b/erpnext/setup/setup_wizard/setup_wizard.py @@ -177,7 +177,6 @@ def set_defaults(args): selling_settings.so_required = "No" selling_settings.dn_required = "No" selling_settings.allow_multiple_items = 1 - selling_settings.set_default_customer_group_and_territory() selling_settings.save() buying_settings = frappe.get_doc("Buying Settings") diff --git a/erpnext/tests/ui/tests.txt b/erpnext/tests/ui/tests.txt index 984358aca0..909216b92e 100644 --- a/erpnext/tests/ui/tests.txt +++ b/erpnext/tests/ui/tests.txt @@ -1,55 +1,55 @@ -# erpnext/tests/ui/make_fixtures.js #long -# erpnext/setup/doctype/company/tests/test_company.js -# erpnext/accounts/doctype/account/test_account.js -# erpnext/accounts/doctype/account/test_make_tax_account.js -# erpnext/accounts/doctype/pricing_rule/test_pricing_rule.js -# erpnext/accounts/doctype/sales_taxes_and_charges_template/test_sales_taxes_and_charges_template.js -# erpnext/accounts/doctype/purchase_taxes_and_charges_template/test_purchase_taxes_and_charges_template.js -# erpnext/accounts/doctype/shipping_rule/test_shipping_rule.js -# erpnext/crm/doctype/lead/test_lead.js -# erpnext/crm/doctype/opportunity/test_opportunity.js -# erpnext/setup/doctype/company/tests/test_company_production.js -# erpnext/crm/doctype/item/test_item.js -# erpnext/selling/doctype/quotation/tests/test_quotation_with_discount_on_grand_total.js -# erpnext/selling/doctype/quotation/tests/test_quotation_with_item_wise_discount.js -# erpnext/selling/doctype/quotation/tests/test_quotation_with_multi_uom.js -# erpnext/selling/doctype/quotation/tests/test_quotation_with_taxes_and_charges.js -# erpnext/selling/doctype/quotation/tests/test_quotation_with_shipping_rule.js -# erpnext/selling/doctype/quotation/tests/test_quotation.js -# erpnext/selling/doctype/sales_order/tests/test_sales_order.js -# erpnext/selling/doctype/sales_order/tests/test_sales_order_with_multiple_delivery_date.js -# erpnext/selling/doctype/sales_order/tests/test_sales_order_with_item_wise_discount.js -# erpnext/selling/doctype/sales_order/tests/test_sales_order_with_multi_uom.js -# erpnext/selling/doctype/sales_order/tests/test_sales_order_with_discount_on_grand_total.js -# erpnext/selling/doctype/sales_order/tests/test_sales_order_with_taxes_and_charges.js -# erpnext/selling/doctype/sales_order/tests/test_sales_order_with_shipping_rule.js -# erpnext/selling/doctype/sales_order/tests/test_sales_order_with_pricing_rule.js -# erpnext/manufacturing/doctype/workstation/test_workstation.js -# erpnext/manufacturing/doctype/operation/test_operation.js -# erpnext/manufacturing/doctype/bom/test_bom.js -# erpnext/projects/doctype/project/project_timesheet.js -# erpnext/hr/doctype/holiday_list/test_holiday_list.js -# erpnext/hr/doctype/branch/test_branch.js -# erpnext/hr/doctype/leave_block_list/test_leave_block_list.js -# erpnext/hr/doctype/department/test_department.js -# erpnext/hr/doctype/designation/test_designation.js -# erpnext/hr/doctype/employment_type/test_employment_type.js -# erpnext/hr/doctype/employee/test_employee.js -# erpnext/hr/doctype/employee_attendance_tool/test_employee_attendance_tool.js -# erpnext/hr/doctype/attendance/test_attendance.js -# erpnext/hr/doctype/leave_type/test_leave_type.js -# erpnext/hr/doctype/leave_control_panel/test_leave_control_panel.js -# erpnext/hr/doctype/leave_allocation/test_leave_allocation.js -# erpnext/hr/doctype/leave_application/test_leave_application.js -# erpnext/schools/doctype/academic_year/test_academic_year.js -# erpnext/schools/doctype/academic_term/test_academic_term.js -# erpnext/schools/doctype/school_settings/test_school_settings.js -# erpnext/schools/doctype/student_batch_name/test_student_batch_name.js -# erpnext/schools/doctype/student_category/test_student_category.js -# erpnext/schools/doctype/room/test_room.js -# erpnext/schools/doctype/instructor/test_instructor.js -# erpnext/stock/doctype/warehouse/test_warehouse.js -# erpnext/manufacturing/doctype/production_order/test_production_order.js #long +erpnext/tests/ui/make_fixtures.js #long +erpnext/setup/doctype/company/tests/test_company.js +erpnext/accounts/doctype/account/test_account.js +erpnext/accounts/doctype/account/test_make_tax_account.js +erpnext/accounts/doctype/pricing_rule/test_pricing_rule.js +erpnext/accounts/doctype/sales_taxes_and_charges_template/test_sales_taxes_and_charges_template.js +erpnext/accounts/doctype/purchase_taxes_and_charges_template/test_purchase_taxes_and_charges_template.js +erpnext/accounts/doctype/shipping_rule/test_shipping_rule.js +erpnext/crm/doctype/lead/test_lead.js +erpnext/crm/doctype/opportunity/test_opportunity.js +erpnext/setup/doctype/company/tests/test_company_production.js +erpnext/crm/doctype/item/test_item.js +erpnext/selling/doctype/quotation/tests/test_quotation_with_discount_on_grand_total.js +erpnext/selling/doctype/quotation/tests/test_quotation_with_item_wise_discount.js +erpnext/selling/doctype/quotation/tests/test_quotation_with_multi_uom.js +erpnext/selling/doctype/quotation/tests/test_quotation_with_taxes_and_charges.js +erpnext/selling/doctype/quotation/tests/test_quotation_with_shipping_rule.js +erpnext/selling/doctype/quotation/tests/test_quotation.js +erpnext/selling/doctype/sales_order/tests/test_sales_order.js +erpnext/selling/doctype/sales_order/tests/test_sales_order_with_multiple_delivery_date.js +erpnext/selling/doctype/sales_order/tests/test_sales_order_with_item_wise_discount.js +erpnext/selling/doctype/sales_order/tests/test_sales_order_with_multi_uom.js +erpnext/selling/doctype/sales_order/tests/test_sales_order_with_discount_on_grand_total.js +erpnext/selling/doctype/sales_order/tests/test_sales_order_with_taxes_and_charges.js +erpnext/selling/doctype/sales_order/tests/test_sales_order_with_shipping_rule.js +erpnext/selling/doctype/sales_order/tests/test_sales_order_with_pricing_rule.js +erpnext/manufacturing/doctype/workstation/test_workstation.js +erpnext/manufacturing/doctype/operation/test_operation.js +erpnext/manufacturing/doctype/bom/test_bom.js +erpnext/projects/doctype/project/project_timesheet.js +erpnext/hr/doctype/holiday_list/test_holiday_list.js +erpnext/hr/doctype/branch/test_branch.js +erpnext/hr/doctype/leave_block_list/test_leave_block_list.js +erpnext/hr/doctype/department/test_department.js +erpnext/hr/doctype/designation/test_designation.js +erpnext/hr/doctype/employment_type/test_employment_type.js +erpnext/hr/doctype/employee/test_employee.js +erpnext/hr/doctype/employee_attendance_tool/test_employee_attendance_tool.js +erpnext/hr/doctype/attendance/test_attendance.js +erpnext/hr/doctype/leave_type/test_leave_type.js +erpnext/hr/doctype/leave_control_panel/test_leave_control_panel.js +erpnext/hr/doctype/leave_allocation/test_leave_allocation.js +erpnext/hr/doctype/leave_application/test_leave_application.js +erpnext/schools/doctype/academic_year/test_academic_year.js +erpnext/schools/doctype/academic_term/test_academic_term.js +erpnext/schools/doctype/school_settings/test_school_settings.js +erpnext/schools/doctype/student_batch_name/test_student_batch_name.js +erpnext/schools/doctype/student_category/test_student_category.js +erpnext/schools/doctype/room/test_room.js +erpnext/schools/doctype/instructor/test_instructor.js +erpnext/stock/doctype/warehouse/test_warehouse.js +erpnext/manufacturing/doctype/production_order/test_production_order.js #long erpnext/selling/page/point_of_sale/tests/test_point_of_sale.js erpnext/accounts/page/pos/test_pos.js erpnext/selling/doctype/product_bundle/test_product_bundle.js From 427172c9413294f7f5ab16034327513682172624 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 14 Sep 2017 17:57:21 +0530 Subject: [PATCH 22/72] Update test_salary_structure.js --- erpnext/hr/doctype/salary_structure/test_salary_structure.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/hr/doctype/salary_structure/test_salary_structure.js b/erpnext/hr/doctype/salary_structure/test_salary_structure.js index b497fbec39..bdc766214c 100644 --- a/erpnext/hr/doctype/salary_structure/test_salary_structure.js +++ b/erpnext/hr/doctype/salary_structure/test_salary_structure.js @@ -46,7 +46,7 @@ QUnit.test("test Salary Structure", function(assert) { { payment_account: 'CASH - FT'}, ]); }, - () => frappe.timeout(10), + () => frappe.timeout(12), () => cur_dialog.set_value('value','Test Salary Structure'), () => frappe.timeout(2), () => frappe.click_button('Create'), @@ -78,4 +78,4 @@ QUnit.test("test Salary Structure", function(assert) { () => frappe.timeout(16), () => done() ]); -}); \ No newline at end of file +}); From 2f64f0f5fa1e72d568a5b0faaf91018a85b492d8 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 14 Sep 2017 19:07:30 +0530 Subject: [PATCH 23/72] Fixed salary structure tests --- .../salary_structure/test_salary_structure.js | 67 +++++++++---------- 1 file changed, 32 insertions(+), 35 deletions(-) diff --git a/erpnext/hr/doctype/salary_structure/test_salary_structure.js b/erpnext/hr/doctype/salary_structure/test_salary_structure.js index bdc766214c..040bc11f96 100644 --- a/erpnext/hr/doctype/salary_structure/test_salary_structure.js +++ b/erpnext/hr/doctype/salary_structure/test_salary_structure.js @@ -1,18 +1,18 @@ QUnit.test("test Salary Structure", function(assert) { - assert.expect(6); + assert.expect(12); let done = assert.async(); let employee_name1; - let salary_structure = (ename1,ename2) => { - frappe.run_serially([ - () => frappe.db.get_value('Employee', {'employee_name': ename1}, 'name'), + frappe.run_serially([ + () => frappe.db.get_value('Employee', {'employee_name': "Test Employee 1"}, 'name', (r) => { - employee_name1 = r.message.name; - }, - () => frappe.db.get_value('Employee', {'employee_name': ename2}, 'name'), + employee_name1 = r.name; + } + ), + () => frappe.db.get_value('Employee', {'employee_name': "Test Employee 3"}, 'name', (r) => { // Creating Salary Structure for employees); - frappe.tests.make('Salary Structure', [ + return frappe.tests.make('Salary Structure', [ { company: 'For Testing'}, { payroll_frequency: 'Monthly'}, { employees: [ @@ -22,7 +22,7 @@ QUnit.test("test Salary Structure", function(assert) { {base: 25000} ], [ - {employee: r.message.name}, + {employee: r.name}, {from_date: '2017-07-01'}, {base: 30000} ] @@ -45,37 +45,34 @@ QUnit.test("test Salary Structure", function(assert) { ]}, { payment_account: 'CASH - FT'}, ]); - }, - () => frappe.timeout(12), - () => cur_dialog.set_value('value','Test Salary Structure'), - () => frappe.timeout(2), - () => frappe.click_button('Create'), - () => { - // To check if all the fields are correctly set - assert.ok(cur_frm.doc.employees[0].employee_name.includes('Test Employee 1') && - cur_frm.doc.employees[1].employee_name.includes('Test Employee 3'), - 'Employee names are correctly set'); + } + ), + () => frappe.timeout(18), + () => cur_dialog.set_value('value','Test Salary Structure'), + () => frappe.timeout(1), + () => frappe.click_button('Create'), + () => frappe.timeout(1), + () => { + // To check if all the fields are correctly set + assert.ok(cur_frm.doc.employees[0].employee_name.includes('Test Employee 1') && + cur_frm.doc.employees[1].employee_name.includes('Test Employee 3'), + 'Employee names are correctly set'); - assert.ok(cur_frm.doc.employees[0].base==25000, - 'Base value for first employee is correctly set'); + assert.ok(cur_frm.doc.employees[0].base==25000, + 'Base value for first employee is correctly set'); - assert.ok(cur_frm.doc.employees[1].base==30000, - 'Base value for second employee is correctly set'); + assert.ok(cur_frm.doc.employees[1].base==30000, + 'Base value for second employee is correctly set'); - assert.ok(cur_frm.doc.earnings[0].formula.includes('base * .80'), - 'Formula for earnings as Basic is correctly set'); + assert.ok(cur_frm.doc.earnings[0].formula.includes('base * .80'), + 'Formula for earnings as Basic is correctly set'); - assert.ok(cur_frm.doc.earnings[1].formula.includes('B * .20'), - 'Formula for earnings as Leave Encashment is correctly set'); + assert.ok(cur_frm.doc.earnings[1].formula.includes('B * .20'), + 'Formula for earnings as Leave Encashment is correctly set'); - assert.ok(cur_frm.doc.deductions[0].formula.includes('(B+LE) * .20'), - 'Formula for deductions as Income Tax is correctly set'); - }, - ]); - }; - frappe.run_serially([ - () => salary_structure('Test Employee 1','Test Employee 3'), - () => frappe.timeout(16), + assert.ok(cur_frm.doc.deductions[0].formula.includes('(B+LE) * .20'), + 'Formula for deductions as Income Tax is correctly set'); + }, () => done() ]); }); From 43268bd350d1e469133523cc0468e30d2c0c3afd Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 14 Sep 2017 19:39:10 +0530 Subject: [PATCH 24/72] Fixed salary structure tests --- erpnext/hr/doctype/salary_structure/test_salary_structure.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/hr/doctype/salary_structure/test_salary_structure.js b/erpnext/hr/doctype/salary_structure/test_salary_structure.js index 040bc11f96..8276a82cb7 100644 --- a/erpnext/hr/doctype/salary_structure/test_salary_structure.js +++ b/erpnext/hr/doctype/salary_structure/test_salary_structure.js @@ -1,5 +1,5 @@ QUnit.test("test Salary Structure", function(assert) { - assert.expect(12); + assert.expect(6); let done = assert.async(); let employee_name1; From 5ac01a2bf7a7d330bf87ac7cb60b9ef4f593f043 Mon Sep 17 00:00:00 2001 From: Makarand Bauskar Date: Fri, 15 Sep 2017 12:10:29 +0530 Subject: [PATCH 25/72] [minor] translate the action name in get_slide_settings (#10740) (#10790) --- erpnext/utilities/user_progress.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/erpnext/utilities/user_progress.py b/erpnext/utilities/user_progress.py index 250951159a..6a2ec4b483 100644 --- a/erpnext/utilities/user_progress.py +++ b/erpnext/utilities/user_progress.py @@ -20,7 +20,7 @@ def get_slide_settings(): # Initial state of slides return [ frappe._dict( - action_name='Add Company', + action_name=_('Add Company'), title=_("Setup Company") if domain != 'Education' else _("Setup Institution"), help=_('Setup your ' + ('company' if domain != 'Education' else 'institution') + ' and brand.'), # image_src="/assets/erpnext/images/illustrations/shop.jpg", @@ -58,7 +58,7 @@ def get_slide_settings(): ] ), frappe._dict( - action_name='Add Customers', + action_name=_('Add Customers'), domains=('Manufacturing', 'Services', 'Retail', 'Distribution'), title=_("Add Customers"), help=_("List a few of your customers. They could be organizations or individuals."), @@ -82,7 +82,7 @@ def get_slide_settings(): ] ), frappe._dict( - action_name='Add Suppliers', + action_name=_('Add Suppliers'), domains=('Manufacturing', 'Services', 'Retail', 'Distribution'), icon="fa fa-group", title=_("Your Suppliers"), @@ -111,7 +111,7 @@ def get_slide_settings(): ] ), frappe._dict( - action_name='Add Products', + action_name=_('Add Products'), domains=['Manufacturing', 'Services', 'Retail', 'Distribution'], icon="fa fa-barcode", title=_("Your Products or Services"), @@ -142,7 +142,7 @@ def get_slide_settings(): # School slides begin frappe._dict( - action_name='Add Programs', + action_name=_('Add Programs'), domains=("Education"), title=_("Program"), help=_("Example: Masters in Computer Science"), @@ -163,7 +163,7 @@ def get_slide_settings(): ), frappe._dict( - action_name='Add Courses', + action_name=_('Add Courses'), domains=["Education"], title=_("Course"), help=_("Example: Basic Mathematics"), @@ -183,7 +183,7 @@ def get_slide_settings(): ] ), frappe._dict( - action_name='Add Instructors', + action_name=_('Add Instructors'), domains=["Education"], title=_("Instructor"), help=_("People who teach at your organisation"), @@ -203,7 +203,7 @@ def get_slide_settings(): ] ), frappe._dict( - action_name='Add Rooms', + action_name=_('Add Rooms'), domains=["Education"], title=_("Room"), help=_("Classrooms/ Laboratories etc where lectures can be scheduled."), @@ -222,7 +222,7 @@ def get_slide_settings(): # School slides end frappe._dict( - action_name='Add Users', + action_name=_('Add Users'), title=_("Add Users"), help=_("Add users to your organization, other than yourself."), fields=[ From d1ce7bfff4ba877a02ce702553db9e8b437a9b64 Mon Sep 17 00:00:00 2001 From: Prateeksha Singh Date: Fri, 15 Sep 2017 16:17:29 +0530 Subject: [PATCH 26/72] [fix] set item valuation rates (#10681) --- erpnext/demo/data/item.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/erpnext/demo/data/item.json b/erpnext/demo/data/item.json index e2085220d4..fe12ce892a 100644 --- a/erpnext/demo/data/item.json +++ b/erpnext/demo/data/item.json @@ -167,6 +167,7 @@ "item_group": "Products", "item_name": "Wind Turbine-S", "variant_of": "Wind Turbine", + "valuation_rate": 300, "attributes":[ { "attribute": "Size", @@ -183,6 +184,7 @@ "item_group": "Products", "item_name": "Wind Turbine-M", "variant_of": "Wind Turbine", + "valuation_rate": 300, "attributes":[ { "attribute": "Size", @@ -199,6 +201,7 @@ "item_group": "Products", "item_name": "Wind Turbine-L", "variant_of": "Wind Turbine", + "valuation_rate": 300, "attributes":[ { "attribute": "Size", From 46941e8b35c7570b98c365923478837836d5a903 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 15 Sep 2017 18:56:49 +0530 Subject: [PATCH 27/72] Time out increased for appraisal template --- .../hr/doctype/appraisal_template/test_appraisal_template.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/hr/doctype/appraisal_template/test_appraisal_template.js b/erpnext/hr/doctype/appraisal_template/test_appraisal_template.js index 4e245c7117..0403cad068 100644 --- a/erpnext/hr/doctype/appraisal_template/test_appraisal_template.js +++ b/erpnext/hr/doctype/appraisal_template/test_appraisal_template.js @@ -20,7 +20,7 @@ QUnit.test("Test: Appraisal Template [HR]", function (assert) { ]}, ]); }, - () => frappe.timeout(5), + () => frappe.timeout(10), () => { assert.equal('Test Appraisal 1',cur_frm.doc.kra_title, 'Appraisal name correctly set'); }, From 628ca2a2ecfd504447bb202b8d90988e86a8ca60 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 15 Sep 2017 19:35:12 +0530 Subject: [PATCH 28/72] Minor fix for ui tests --- erpnext/hr/doctype/loan_type/test_loan_type.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/hr/doctype/loan_type/test_loan_type.js b/erpnext/hr/doctype/loan_type/test_loan_type.js index 8b5032b04e..71354be48d 100644 --- a/erpnext/hr/doctype/loan_type/test_loan_type.js +++ b/erpnext/hr/doctype/loan_type/test_loan_type.js @@ -15,9 +15,9 @@ QUnit.test("Test: Loan Type [HR]", function (assert) { 'This is just a test.'} ]); }, - () => frappe.timeout(3), + () => frappe.timeout(7), () => frappe.set_route('List','Loan Type','List'), - () => frappe.timeout(2), + () => frappe.timeout(4), // Checking if the fields are correctly set () => { From 21617da61985f93afc5a28f7548c69cb67832be6 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 15 Sep 2017 21:22:16 +0530 Subject: [PATCH 29/72] More fixes for UI tests --- .../tests/test_payment_against_invoice.js | 22 +++++++++++-------- .../setup/setup_wizard/test_setup_wizard.py | 2 ++ 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/erpnext/accounts/doctype/payment_entry/tests/test_payment_against_invoice.js b/erpnext/accounts/doctype/payment_entry/tests/test_payment_against_invoice.js index 7dea76db80..4f27b74d4b 100644 --- a/erpnext/accounts/doctype/payment_entry/tests/test_payment_against_invoice.js +++ b/erpnext/accounts/doctype/payment_entry/tests/test_payment_against_invoice.js @@ -9,9 +9,9 @@ QUnit.test("test payment entry", function(assert) { {customer: 'Test Customer 1'}, {items: [ [ + {'item_code': 'Test Product 1'}, {'qty': 1}, {'rate': 101}, - {'item_code': 'Test Product 1'}, ] ]} ]); @@ -19,11 +19,12 @@ QUnit.test("test payment entry", function(assert) { () => cur_frm.save(), () => frappe.tests.click_button('Submit'), () => frappe.tests.click_button('Yes'), - () => frappe.timeout(0.5), + () => frappe.timeout(1), () => frappe.tests.click_button('Close'), - () => frappe.timeout(0.5), + () => frappe.timeout(1), () => frappe.click_button('Make'), - () => frappe.click_link('Payment', 1), + () => frappe.timeout(1), + () => frappe.click_link('Payment'), () => frappe.timeout(2), () => { assert.equal(frappe.get_route()[1], 'Payment Entry', @@ -35,16 +36,19 @@ QUnit.test("test payment entry", function(assert) { assert.equal(cur_frm.doc.references[0].allocated_amount, 101, 'amount allocated against sales invoice'); }, + () => frappe.timeout(1), () => cur_frm.set_value('paid_amount', 100), + () => frappe.timeout(1), () => { - cur_frm.doc.references[0].allocated_amount = 101; + frappe.model.set_value("Payment Entry Reference", cur_frm.doc.references[0].name, + "allocated_amount", 101); }, + () => frappe.timeout(1), () => frappe.click_button('Write Off Difference Amount'), + () => frappe.timeout(1), () => { - assert.equal(cur_frm.doc.difference_amount, 0, - 'difference amount is zero'); - assert.equal(cur_frm.doc.deductions[0].amount, 1, - 'Write off amount = 1'); + assert.equal(cur_frm.doc.difference_amount, 0, 'difference amount is zero'); + assert.equal(cur_frm.doc.deductions[0].amount, 1, 'Write off amount = 1'); }, () => done() ]); diff --git a/erpnext/setup/setup_wizard/test_setup_wizard.py b/erpnext/setup/setup_wizard/test_setup_wizard.py index e37951d6fd..57eeeff5b2 100644 --- a/erpnext/setup/setup_wizard/test_setup_wizard.py +++ b/erpnext/setup/setup_wizard/test_setup_wizard.py @@ -56,6 +56,8 @@ def run_setup_wizard_test(): time.sleep(1) frappe.db.set_default('in_selenium', None) + frappe.db.set_value("Company", "For Testing", "write_off_account", "Write Off - FT") + frappe.db.set_value("Company", "For Testing", "exchange_gain_loss_account", "Exchange Gain/Loss - FT") frappe.db.commit() driver.close() From 2cb2064c6fb06b3e80c442736224f64de8d7d025 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Fri, 15 Sep 2017 23:10:27 +0530 Subject: [PATCH 30/72] Fixed test cases tax rule --- erpnext/accounts/doctype/tax_rule/tax_rule.py | 3 ++- erpnext/accounts/doctype/tax_rule/test_tax_rule.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/erpnext/accounts/doctype/tax_rule/tax_rule.py b/erpnext/accounts/doctype/tax_rule/tax_rule.py index 7324532a39..ac1de679c1 100644 --- a/erpnext/accounts/doctype/tax_rule/tax_rule.py +++ b/erpnext/accounts/doctype/tax_rule/tax_rule.py @@ -135,7 +135,8 @@ def get_tax_template(posting_date, args): for key, value in args.iteritems(): if key=="use_for_shopping_cart": conditions.append("use_for_shopping_cart = {0}".format(1 if value else 0)) - if key == 'customer_group' and value: + if key == 'customer_group': + if not value: value = "All Customer Groups" customer_group_condition = get_customer_group_condition(value) conditions.append("ifnull({0}, '') in ('', {1})".format(key, customer_group_condition)) else: diff --git a/erpnext/accounts/doctype/tax_rule/test_tax_rule.py b/erpnext/accounts/doctype/tax_rule/test_tax_rule.py index 383b02b128..5ad7970a6e 100644 --- a/erpnext/accounts/doctype/tax_rule/test_tax_rule.py +++ b/erpnext/accounts/doctype/tax_rule/test_tax_rule.py @@ -39,7 +39,7 @@ class TestTaxRule(unittest.TestCase): sales_tax_template = "_Test Sales Taxes and Charges Template", priority = 1, from_date = "2015-01-01") tax_rule1.save() - self.assertEquals(get_tax_template("2015-01-01", {"customer_group" : "Commercial"}), + self.assertEquals(get_tax_template("2015-01-01", {"customer_group" : "Commercial", "use_for_shopping_cart":0}), "_Test Sales Taxes and Charges Template") def test_conflict_with_overlapping_dates(self): From bc9006ff3058cf64f6856613b6bea338c0df76e4 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 18 Sep 2017 13:16:04 +0530 Subject: [PATCH 31/72] Delete GST related doctypes and reports if account is from outside India (#10808) --- erpnext/patches.txt | 3 ++- erpnext/patches/v8_1/setup_gst_india.py | 18 +++++++++++------- ..._gst_doctypes_for_outside_india_accounts.py | 13 +++++++++++++ 3 files changed, 26 insertions(+), 8 deletions(-) create mode 100644 erpnext/patches/v8_9/delete_gst_doctypes_for_outside_india_accounts.py diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 5bfd34e869..74bd37a39c 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -436,4 +436,5 @@ erpnext.patches.v8_7.add_more_gst_fields erpnext.patches.v8_7.fix_purchase_receipt_status erpnext.patches.v8_6.rename_bom_update_tool erpnext.patches.v8_9.set_print_zero_amount_taxes -erpnext.patches.v8_9.set_default_customer_group \ No newline at end of file +erpnext.patches.v8_9.set_default_customer_group +erpnext.patches.v8_9.delete_gst_doctypes_for_outside_india_accounts \ No newline at end of file diff --git a/erpnext/patches/v8_1/setup_gst_india.py b/erpnext/patches/v8_1/setup_gst_india.py index 566069369c..f329916ed5 100644 --- a/erpnext/patches/v8_1/setup_gst_india.py +++ b/erpnext/patches/v8_1/setup_gst_india.py @@ -2,21 +2,25 @@ import frappe from frappe.email import sendmail_to_system_managers def execute(): - frappe.reload_doc('regional', 'doctype', 'gst_settings') - frappe.reload_doc('regional', 'doctype', 'gst_hsn_code') frappe.reload_doc('stock', 'doctype', 'item') frappe.reload_doc("stock", "doctype", "customs_tariff_number") + company = frappe.get_all('Company', filters = {'country': 'India'}) + if not company: + return + + frappe.reload_doc('regional', 'doctype', 'gst_settings') + frappe.reload_doc('regional', 'doctype', 'gst_hsn_code') + for report_name in ('GST Sales Register', 'GST Purchase Register', 'GST Itemised Sales Register', 'GST Itemised Purchase Register'): frappe.reload_doc('regional', 'report', frappe.scrub(report_name)) - if frappe.db.get_single_value('System Settings', 'country')=='India': - from erpnext.regional.india.setup import setup - delete_custom_field_tax_id_if_exists() - setup(patch=True) - send_gst_update_email() + from erpnext.regional.india.setup import setup + delete_custom_field_tax_id_if_exists() + setup(patch=True) + send_gst_update_email() def delete_custom_field_tax_id_if_exists(): for field in frappe.db.sql_list("""select name from `tabCustom Field` where fieldname='tax_id' diff --git a/erpnext/patches/v8_9/delete_gst_doctypes_for_outside_india_accounts.py b/erpnext/patches/v8_9/delete_gst_doctypes_for_outside_india_accounts.py new file mode 100644 index 0000000000..2b4ac58a67 --- /dev/null +++ b/erpnext/patches/v8_9/delete_gst_doctypes_for_outside_india_accounts.py @@ -0,0 +1,13 @@ +import frappe + +def execute(): + company = frappe.get_all('Company', filters = {'country': 'India'}) + if not company: + if frappe.db.exists("DocType", "GST Settings"): + frappe.delete_doc("DocType", "GST Settings") + frappe.delete_doc("DocType", "GST HSN Code") + + for report_name in ('GST Sales Register', 'GST Purchase Register', + 'GST Itemised Sales Register', 'GST Itemised Purchase Register'): + + frappe.delete_doc('Report', report_name) \ No newline at end of file From 2222f10720c48c7aabcd31500bb33c4f4be36799 Mon Sep 17 00:00:00 2001 From: Saurabh Date: Mon, 18 Sep 2017 15:05:18 +0530 Subject: [PATCH 32/72] [patch] remove employee name salary structure (#10817) * [patch] remove employee name salary structure * Update remove_employee_from_salary_structure_parent.py --- erpnext/patches.txt | 3 ++- .../v8_9/remove_employee_from_salary_structure_parent.py | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 erpnext/patches/v8_9/remove_employee_from_salary_structure_parent.py diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 74bd37a39c..1fea30875c 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -437,4 +437,5 @@ erpnext.patches.v8_7.fix_purchase_receipt_status erpnext.patches.v8_6.rename_bom_update_tool erpnext.patches.v8_9.set_print_zero_amount_taxes erpnext.patches.v8_9.set_default_customer_group -erpnext.patches.v8_9.delete_gst_doctypes_for_outside_india_accounts \ No newline at end of file +erpnext.patches.v8_9.remove_employee_from_salary_structure_parent +erpnext.patches.v8_9.delete_gst_doctypes_for_outside_india_accounts diff --git a/erpnext/patches/v8_9/remove_employee_from_salary_structure_parent.py b/erpnext/patches/v8_9/remove_employee_from_salary_structure_parent.py new file mode 100644 index 0000000000..53911a15cf --- /dev/null +++ b/erpnext/patches/v8_9/remove_employee_from_salary_structure_parent.py @@ -0,0 +1,5 @@ +import frappe + +def execute(): + if 'employee' in frappe.db.get_table_columns("Salary Structure"): + frappe.db.sql("alter table `tabEmployee` drop column employee") From 11bd5fc3b1cd6d069d979a93c05ea0430c5eecb4 Mon Sep 17 00:00:00 2001 From: Utkarsh Goswami Date: Mon, 18 Sep 2017 15:05:50 +0530 Subject: [PATCH 33/72] Description moved next to item code (#10820) --- .../ordered_items_to_be_delivered.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/stock/report/ordered_items_to_be_delivered/ordered_items_to_be_delivered.json b/erpnext/stock/report/ordered_items_to_be_delivered/ordered_items_to_be_delivered.json index 557847abb6..ed48a0fbd5 100644 --- a/erpnext/stock/report/ordered_items_to_be_delivered/ordered_items_to_be_delivered.json +++ b/erpnext/stock/report/ordered_items_to_be_delivered/ordered_items_to_be_delivered.json @@ -7,12 +7,12 @@ "doctype": "Report", "idx": 3, "is_standard": "Yes", - "modified": "2017-07-22 09:24:30.201487", + "modified": "2017-09-18 12:28:49.322622", "modified_by": "Administrator", "module": "Stock", "name": "Ordered Items To Be Delivered", "owner": "Administrator", - "query": "select \n `tabSales Order`.`name` as \"Sales Order:Link/Sales Order:120\",\n `tabSales Order`.`customer` as \"Customer:Link/Customer:120\",\n `tabSales Order`.`customer_name` as \"Customer Name::150\",\n `tabSales Order`.`transaction_date` as \"Date:Date\",\n `tabSales Order`.`project` as \"Project:Link/Project:120\",\n `tabSales Order Item`.item_code as \"Item:Link/Item:120\",\n `tabSales Order Item`.qty as \"Qty:Float:140\",\n `tabSales Order Item`.delivered_qty as \"Delivered Qty:Float:140\",\n (`tabSales Order Item`.qty - ifnull(`tabSales Order Item`.delivered_qty, 0)) as \"Qty to Deliver:Float:140\",\n `tabSales Order Item`.base_rate as \"Rate:Float:140\",\n `tabSales Order Item`.base_amount as \"Amount:Float:140\",\n ((`tabSales Order Item`.qty - ifnull(`tabSales Order Item`.delivered_qty, 0))*`tabSales Order Item`.base_rate) as \"Amount to Deliver:Float:140\",\n `tabBin`.actual_qty as \"Available Qty:Float:120\",\n `tabBin`.projected_qty as \"Projected Qty:Float:120\",\n `tabSales Order Item`.`delivery_date` as \"Item Delivery Date:Date:120\",\n `tabSales Order Item`.item_name as \"Item Name::150\",\n `tabSales Order Item`.description as \"Description::200\",\n `tabSales Order Item`.item_group as \"Item Group:Link/Item Group:120\",\n `tabSales Order Item`.warehouse as \"Warehouse:Link/Warehouse:200\"\nfrom\n `tabSales Order` JOIN `tabSales Order Item` \n LEFT JOIN `tabBin` ON (`tabBin`.item_code = `tabSales Order Item`.item_code\n and `tabBin`.warehouse = `tabSales Order Item`.warehouse)\nwhere\n `tabSales Order Item`.`parent` = `tabSales Order`.`name`\n and `tabSales Order`.docstatus = 1\n and `tabSales Order`.status not in (\"Stopped\", \"Closed\")\n and ifnull(`tabSales Order Item`.delivered_qty,0) < ifnull(`tabSales Order Item`.qty,0)\norder by `tabSales Order`.transaction_date asc", + "query": "select \n `tabSales Order`.`name` as \"Sales Order:Link/Sales Order:120\",\n `tabSales Order`.`customer` as \"Customer:Link/Customer:120\",\n `tabSales Order`.`customer_name` as \"Customer Name::150\",\n `tabSales Order`.`transaction_date` as \"Date:Date\",\n `tabSales Order`.`project` as \"Project:Link/Project:120\",\n `tabSales Order Item`.item_code as \"Item:Link/Item:120\",\n `tabSales Order Item`.description as \"Description::200\",\n `tabSales Order Item`.qty as \"Qty:Float:140\",\n `tabSales Order Item`.delivered_qty as \"Delivered Qty:Float:140\",\n (`tabSales Order Item`.qty - ifnull(`tabSales Order Item`.delivered_qty, 0)) as \"Qty to Deliver:Float:140\",\n `tabSales Order Item`.base_rate as \"Rate:Float:140\",\n `tabSales Order Item`.base_amount as \"Amount:Float:140\",\n ((`tabSales Order Item`.qty - ifnull(`tabSales Order Item`.delivered_qty, 0))*`tabSales Order Item`.base_rate) as \"Amount to Deliver:Float:140\",\n `tabBin`.actual_qty as \"Available Qty:Float:120\",\n `tabBin`.projected_qty as \"Projected Qty:Float:120\",\n `tabSales Order Item`.`delivery_date` as \"Item Delivery Date:Date:120\",\n `tabSales Order Item`.item_name as \"Item Name::150\",\n `tabSales Order Item`.item_group as \"Item Group:Link/Item Group:120\",\n `tabSales Order Item`.warehouse as \"Warehouse:Link/Warehouse:200\"\nfrom\n `tabSales Order` JOIN `tabSales Order Item` \n LEFT JOIN `tabBin` ON (`tabBin`.item_code = `tabSales Order Item`.item_code\n and `tabBin`.warehouse = `tabSales Order Item`.warehouse)\nwhere\n `tabSales Order Item`.`parent` = `tabSales Order`.`name`\n and `tabSales Order`.docstatus = 1\n and `tabSales Order`.status not in (\"Stopped\", \"Closed\")\n and ifnull(`tabSales Order Item`.delivered_qty,0) < ifnull(`tabSales Order Item`.qty,0)\norder by `tabSales Order`.transaction_date asc", "ref_doctype": "Delivery Note", "report_name": "Ordered Items To Be Delivered", "report_type": "Query Report", From 8f957ef6e60c4ebcfc64332f40d09c88addf425a Mon Sep 17 00:00:00 2001 From: Zarrar Date: Mon, 18 Sep 2017 15:11:20 +0530 Subject: [PATCH 34/72] fetching data from last route (#10816) --- .../subscription/doctype/subscription/subscription.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/erpnext/subscription/doctype/subscription/subscription.js b/erpnext/subscription/doctype/subscription/subscription.js index 75e1473b00..0b2b2fa83a 100644 --- a/erpnext/subscription/doctype/subscription/subscription.js +++ b/erpnext/subscription/doctype/subscription/subscription.js @@ -3,6 +3,15 @@ frappe.ui.form.on('Subscription', { setup: function(frm) { + if(frm.doc.__islocal) { + var last_route = frappe.route_history.slice(-2, -1)[0]; + if(frappe.dynamic_link && frappe.dynamic_link.doc + && frappe.dynamic_link.doc.name==last_route[2]) { + frm.set_value('reference_doctype', last_route[1]); + frm.set_value('reference_document', last_route[2]); + } + } + frm.fields_dict['reference_document'].get_query = function() { return { filters: { From 91eda6dad4b2b52922ecc9af4899e48ff436c560 Mon Sep 17 00:00:00 2001 From: Adam Dawoodjee Date: Mon, 18 Sep 2017 11:41:57 +0200 Subject: [PATCH 35/72] Update creating-custom-link-field.md (#10822) Grammer improvements --- .../customize-erpnext/articles/creating-custom-link-field.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/docs/user/manual/en/customize-erpnext/articles/creating-custom-link-field.md b/erpnext/docs/user/manual/en/customize-erpnext/articles/creating-custom-link-field.md index 829015db6d..9a480bdca5 100644 --- a/erpnext/docs/user/manual/en/customize-erpnext/articles/creating-custom-link-field.md +++ b/erpnext/docs/user/manual/en/customize-erpnext/articles/creating-custom-link-field.md @@ -11,7 +11,7 @@ You can insert Custom Link Field by following steps below. ####Step 2: Select Form -In Customize Form, select Document Type (Quotation, Sales Order, Purchase Invoice Item etc.). Once field are updated in table, open field before which you wish to insert Custom Field. Then click on "Insert Above" to insert new Custom Field. +In Customize Form, select Document Type (Quotation, Sales Order, Purchase Invoice Item etc.). Once fields are updated in the accompanying table below, open a field above the one you wish to insert your Custom Field. Then click on "Insert Above" to insert the new Custom Field. Select Docytpe @@ -26,4 +26,4 @@ To set field as Link, enter values as below. Enter Values - \ No newline at end of file + From 9744aa21af95124593575c47adc5dab13d3f72f3 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 18 Sep 2017 15:25:20 +0530 Subject: [PATCH 36/72] Minor fix in tax rule --- erpnext/accounts/doctype/tax_rule/tax_rule.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/accounts/doctype/tax_rule/tax_rule.py b/erpnext/accounts/doctype/tax_rule/tax_rule.py index ac1de679c1..2d91a3c85f 100644 --- a/erpnext/accounts/doctype/tax_rule/tax_rule.py +++ b/erpnext/accounts/doctype/tax_rule/tax_rule.py @@ -136,7 +136,7 @@ def get_tax_template(posting_date, args): if key=="use_for_shopping_cart": conditions.append("use_for_shopping_cart = {0}".format(1 if value else 0)) if key == 'customer_group': - if not value: value = "All Customer Groups" + if not value: value = _("All Customer Groups") customer_group_condition = get_customer_group_condition(value) conditions.append("ifnull({0}, '') in ('', {1})".format(key, customer_group_condition)) else: From 3f15bf9828bef21a86f4bf9db1dd4f35f8ed6a2f Mon Sep 17 00:00:00 2001 From: Saurabh Date: Mon, 18 Sep 2017 15:27:24 +0530 Subject: [PATCH 37/72] [fix] query fix for match conditions (#10810) --- .../item_wise_purchase_register.py | 35 ++++++++------ .../item_wise_sales_register.py | 46 ++++++++++++------- 2 files changed, 51 insertions(+), 30 deletions(-) diff --git a/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py b/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py index b21027ee35..710099ee10 100644 --- a/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py +++ b/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py @@ -91,10 +91,10 @@ def get_conditions(filters): conditions = "" for opts in (("company", " and company=%(company)s"), - ("supplier", " and pi.supplier = %(supplier)s"), - ("item_code", " and pi_item.item_code = %(item_code)s"), - ("from_date", " and pi.posting_date>=%(from_date)s"), - ("to_date", " and pi.posting_date<=%(to_date)s"), + ("supplier", " and `tabPurchase Invoice`.supplier = %(supplier)s"), + ("item_code", " and `tabPurchase Invoice Item`.item_code = %(item_code)s"), + ("from_date", " and `tabPurchase Invoice`.posting_date>=%(from_date)s"), + ("to_date", " and `tabPurchase Invoice`.posting_date<=%(to_date)s"), ("mode_of_payment", " and ifnull(mode_of_payment, '') = %(mode_of_payment)s")): if filters.get(opts[0]): conditions += opts[1] @@ -104,20 +104,29 @@ def get_conditions(filters): def get_items(filters, additional_query_columns): conditions = get_conditions(filters) match_conditions = frappe.build_match_conditions("Purchase Invoice") + + if match_conditions: + match_conditions = " and {0} ".format(match_conditions) + if additional_query_columns: additional_query_columns = ', ' + ', '.join(additional_query_columns) return frappe.db.sql(""" select - pi_item.name, pi_item.parent, pi.posting_date, pi.credit_to, pi.company, - pi.supplier, pi.remarks, pi.base_net_total, pi_item.item_code, pi_item.item_name, - pi_item.item_group, pi_item.project, pi_item.purchase_order, pi_item.purchase_receipt, - pi_item.po_detail, pi_item.expense_account, pi_item.stock_qty, pi_item.stock_uom, - pi_item.base_net_rate, pi_item.base_net_amount, - pi.supplier_name, pi.mode_of_payment {0} - from `tabPurchase Invoice` pi, `tabPurchase Invoice Item` pi_item - where pi.name = pi_item.parent and pi.docstatus = 1 %s %s - order by pi.posting_date desc, pi_item.item_code desc + `tabPurchase Invoice Item`.`name`, `tabPurchase Invoice Item`.`parent`, + `tabPurchase Invoice`.posting_date, `tabPurchase Invoice`.credit_to, `tabPurchase Invoice`.company, + `tabPurchase Invoice`.supplier, `tabPurchase Invoice`.remarks, `tabPurchase Invoice`.base_net_total, `tabPurchase Invoice Item`.`item_code`, + `tabPurchase Invoice Item`.`item_name`, `tabPurchase Invoice Item`.`item_group`, + `tabPurchase Invoice Item`.`project`, `tabPurchase Invoice Item`.`purchase_order`, + `tabPurchase Invoice Item`.`purchase_receipt`, `tabPurchase Invoice Item`.`po_detail`, + `tabPurchase Invoice Item`.`expense_account`, `tabPurchase Invoice Item`.`stock_qty`, + `tabPurchase Invoice Item`.`stock_uom`, `tabPurchase Invoice Item`.`base_net_rate`, + `tabPurchase Invoice Item`.`base_net_amount`, + `tabPurchase Invoice`.supplier_name, `tabPurchase Invoice`.mode_of_payment {0} + from `tabPurchase Invoice`, `tabPurchase Invoice Item` + where `tabPurchase Invoice`.name = `tabPurchase Invoice Item`.`parent` and + `tabPurchase Invoice`.docstatus = 1 %s %s + order by `tabPurchase Invoice`.posting_date desc, `tabPurchase Invoice Item`.item_code desc """.format(additional_query_columns) % (conditions, match_conditions), filters, as_dict=1) def get_aii_accounts(): diff --git a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py index eb50022688..9892e03f3f 100644 --- a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py +++ b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py @@ -93,37 +93,49 @@ def get_conditions(filters): conditions = "" for opts in (("company", " and company=%(company)s"), - ("customer", " and si.customer = %(customer)s"), - ("item_code", " and si_item.item_code = %(item_code)s"), - ("from_date", " and si.posting_date>=%(from_date)s"), - ("to_date", " and si.posting_date<=%(to_date)s")): + ("customer", " and `tabSales Invoice`.customer = %(customer)s"), + ("item_code", " and `tabSales Invoice Item`.item_code = %(item_code)s"), + ("from_date", " and `tabSales Invoice`.posting_date>=%(from_date)s"), + ("to_date", " and `tabSales Invoice`.posting_date<=%(to_date)s")): if filters.get(opts[0]): conditions += opts[1] if filters.get("mode_of_payment"): conditions += """ and exists(select name from `tabSales Invoice Payment` - where parent=si.name - and ifnull(`tabSales Invoice Payment`.mode_of_payment, '') = %(mode_of_payment)s)""" + where parent=si.name + and ifnull(`tabSales Invoice Payment`.mode_of_payment, '') = %(mode_of_payment)s)""" return conditions def get_items(filters, additional_query_columns): + conditions = get_conditions(filters) + match_conditions = frappe.build_match_conditions("Sales Invoice") + + if match_conditions: + match_conditions = " and {0} ".format(match_conditions) + if additional_query_columns: additional_query_columns = ', ' + ', '.join(additional_query_columns) - conditions = get_conditions(filters) return frappe.db.sql(""" select - si_item.name, si_item.parent, si.posting_date, si.debit_to, si.project, - si.customer, si.remarks, si.territory, si.company, si.base_net_total, - si_item.item_code, si_item.item_name, si_item.item_group, si_item.sales_order, - si_item.delivery_note, si_item.income_account, si_item.cost_center, - si_item.stock_qty, si_item.stock_uom, si_item.base_net_rate, si_item.base_net_amount, - si.customer_name, si.customer_group, si_item.so_detail, si.update_stock {0} - from `tabSales Invoice` si, `tabSales Invoice Item` si_item - where si.name = si_item.parent and si.docstatus = 1 %s - order by si.posting_date desc, si_item.item_code desc - """.format(additional_query_columns or '') % conditions, filters, as_dict=1) + `tabSales Invoice Item`.name, `tabSales Invoice Item`.parent, + `tabSales Invoice`.posting_date, `tabSales Invoice`.debit_to, + `tabSales Invoice`.project, `tabSales Invoice`.customer, `tabSales Invoice`.remarks, + `tabSales Invoice`.territory, `tabSales Invoice`.company, `tabSales Invoice`.base_net_total, + `tabSales Invoice Item`.item_code, `tabSales Invoice Item`.item_name, + `tabSales Invoice Item`.item_group, `tabSales Invoice Item`.sales_order, + `tabSales Invoice Item`.delivery_note, `tabSales Invoice Item`.income_account, + `tabSales Invoice Item`.cost_center, `tabSales Invoice Item`.stock_qty, + `tabSales Invoice Item`.stock_uom, `tabSales Invoice Item`.base_net_rate, + `tabSales Invoice Item`.base_net_amount, `tabSales Invoice`.customer_name, + `tabSales Invoice`.customer_group, `tabSales Invoice Item`.so_detail, + `tabSales Invoice`.update_stock {0} + from `tabSales Invoice`, `tabSales Invoice Item` + where `tabSales Invoice`.name = `tabSales Invoice Item`.parent + and `tabSales Invoice`.docstatus = 1 %s %s + order by `tabSales Invoice`.posting_date desc, `tabSales Invoice Item`.item_code desc + """.format(additional_query_columns or '') % (conditions, match_conditions), filters, as_dict=1) def get_delivery_notes_against_sales_order(item_list): so_dn_map = frappe._dict() From d7e1869a70812ca2621f4f2d47bc2ed91adee749 Mon Sep 17 00:00:00 2001 From: Saurabh Date: Mon, 18 Sep 2017 15:43:35 +0530 Subject: [PATCH 38/72] [fix] if item code not exists then exclude item in validate_selling_price (#10800) --- erpnext/controllers/selling_controller.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py index d8b4202704..d881f18b33 100644 --- a/erpnext/controllers/selling_controller.py +++ b/erpnext/controllers/selling_controller.py @@ -179,6 +179,9 @@ class SellingController(StockController): return for it in self.get("items"): + if not it.item_code: + continue + last_purchase_rate, is_stock_item = frappe.db.get_value("Item", it.item_code, ["last_purchase_rate", "is_stock_item"]) last_purchase_rate_in_sales_uom = last_purchase_rate / (it.conversion_factor or 1) if flt(it.base_rate) < flt(last_purchase_rate_in_sales_uom): From 9bc197cfd5495aa44e6153e201912c5d09c22f88 Mon Sep 17 00:00:00 2001 From: ci2014 Date: Mon, 18 Sep 2017 12:14:36 +0200 Subject: [PATCH 39/72] Update project.js (#10796) * Update project.js Move indicators to setup to be less buggy * fixed codecy trailing whitespace issues --- erpnext/projects/doctype/project/project.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/erpnext/projects/doctype/project/project.js b/erpnext/projects/doctype/project/project.js index f16cf07d2a..5af8410dce 100644 --- a/erpnext/projects/doctype/project/project.js +++ b/erpnext/projects/doctype/project/project.js @@ -2,7 +2,7 @@ // License: GNU General Public License v3. See license.txt frappe.ui.form.on("Project", { - onload: function(frm) { + setup: function(frm) { frm.set_indicator_formatter('title', function(doc) { let indicator = 'orange'; @@ -18,7 +18,9 @@ frappe.ui.form.on("Project", { return indicator; } ); + }, + onload: function(frm) { var so = frappe.meta.get_docfield("Project", "sales_order"); so.get_route_options_for_new_doc = function(field) { if(frm.is_new()) return; @@ -113,4 +115,3 @@ frappe.ui.form.on("Project Task", { frm.trigger('tasks_refresh'); }, }); - From 590d401e5ff1065361dd54cd10821431ccae833a Mon Sep 17 00:00:00 2001 From: Saurabh Date: Mon, 18 Sep 2017 15:49:19 +0530 Subject: [PATCH 40/72] [fix] if bom specified on purchase order item then don't pull default bom in purchase receipt (#10793) * [fix] if bom specified on purchase order item then don't pull default bom in purchase receipt * Update bom.js * Update stock_entry.py --- erpnext/buying/doctype/purchase_order/purchase_order.py | 1 + erpnext/manufacturing/doctype/bom/bom.js | 2 +- erpnext/stock/doctype/stock_entry/stock_entry.py | 3 ++- erpnext/stock/get_item_details.py | 2 +- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py index 26c8c61167..56f3059f2e 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -295,6 +295,7 @@ def make_purchase_receipt(source_name, target_doc=None): "field_map": { "name": "purchase_order_item", "parent": "purchase_order", + "bom": "bom" }, "postprocess": update_item, "condition": lambda doc: abs(doc.received_qty) < abs(doc.qty) and doc.delivered_by_supplier!=1 diff --git a/erpnext/manufacturing/doctype/bom/bom.js b/erpnext/manufacturing/doctype/bom/bom.js index c58c89cd5d..94a2113081 100644 --- a/erpnext/manufacturing/doctype/bom/bom.js +++ b/erpnext/manufacturing/doctype/bom/bom.js @@ -19,7 +19,7 @@ frappe.ui.form.on("BOM", { frm.set_query("source_warehouse", "items", function() { return { filters: { - 'company': frm.doc.company, + 'company': frm.doc.company } }; }); diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index fbadbc54de..fc45f13602 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -631,7 +631,8 @@ class StockEntry(StockController): fetch_exploded = self.use_multi_level_bom) for item in item_dict.values(): - item.from_warehouse = self.from_warehouse or item.default_warehouse + # if source warehouse presents in BOM set from_warehouse as bom source_warehouse + item.from_warehouse = self.from_warehouse or item.source_warehouse or item.default_warehouse return item_dict def get_bom_scrap_material(self, qty): diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py index 80ef70805a..2a22854677 100644 --- a/erpnext/stock/get_item_details.py +++ b/erpnext/stock/get_item_details.py @@ -90,7 +90,7 @@ def get_item_details(args): item.lead_time_days) if args.get("is_subcontracted") == "Yes": - out.bom = get_default_bom(args.item_code) + out.bom = args.get('bom') or get_default_bom(args.item_code) get_gross_profit(out) From e716da04ec4e241596b2e949ce4b962c77d830b3 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Mon, 18 Sep 2017 16:00:34 +0530 Subject: [PATCH 41/72] add the newsletter in the standard portel (#10784) --- erpnext/hooks.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/erpnext/hooks.py b/erpnext/hooks.py index 88f719aaf8..26c7a3aa61 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -128,11 +128,13 @@ standard_portal_menu_items = [ {"title": _("Shipments"), "route": "/shipments", "reference_doctype": "Delivery Note", "role":"Customer"}, {"title": _("Issues"), "route": "/issues", "reference_doctype": "Issue", "role":"Customer"}, {"title": _("Addresses"), "route": "/addresses", "reference_doctype": "Address"}, - {"title": _("Fees"), "route": "/fees", "reference_doctype": "Fees", "role":"Student"}, + {"title": _("Timesheets"), "route": "/timesheets", "reference_doctype": "Timesheet", "role":"Customer"}, {"title": _("Timesheets"), "route": "/timesheets", "reference_doctype": "Timesheet", "role":"Customer"}, {"title": _("Lab Test"), "route": "/lab-test", "reference_doctype": "Lab Test", "role":"Patient"}, {"title": _("Prescription"), "route": "/prescription", "reference_doctype": "Consultation", "role":"Patient"}, - {"title": _("Patient Appointment"), "route": "/patient-appointments", "reference_doctype": "Patient Appointment", "role":"Patient"} + {"title": _("Patient Appointment"), "route": "/patient-appointments", "reference_doctype": "Patient Appointment", "role":"Patient"}, + {"title": _("Fees"), "route": "/fees", "reference_doctype": "Fees", "role":"Student"}, + {"title": _("Newsletter"), "route": "/newsletters", "reference_doctype": "Newsletter"} ] default_roles = [ From 9c334c34a6c0b8d3b6b61a29fb4631959331088d Mon Sep 17 00:00:00 2001 From: Saurabh Date: Mon, 18 Sep 2017 16:17:13 +0530 Subject: [PATCH 42/72] [fix]remove employee field from tab salary structure --- .../v8_9/remove_employee_from_salary_structure_parent.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/patches/v8_9/remove_employee_from_salary_structure_parent.py b/erpnext/patches/v8_9/remove_employee_from_salary_structure_parent.py index 53911a15cf..4ab9cf3ec8 100644 --- a/erpnext/patches/v8_9/remove_employee_from_salary_structure_parent.py +++ b/erpnext/patches/v8_9/remove_employee_from_salary_structure_parent.py @@ -2,4 +2,4 @@ import frappe def execute(): if 'employee' in frappe.db.get_table_columns("Salary Structure"): - frappe.db.sql("alter table `tabEmployee` drop column employee") + frappe.db.sql("alter table `tabSalary Structure` drop column employee") From 9b4f3cf9debfcec4c170e8b3e2836eb6776f0530 Mon Sep 17 00:00:00 2001 From: Prateeksha Singh Date: Mon, 18 Sep 2017 16:41:04 +0530 Subject: [PATCH 43/72] Leaderboard cleanup (#10638) * [leaderboard] wip * [leaderboard] filter for selecting leaderboard criteria, single col * [leaderboard] doctypes in sidebar * hide graph if no results --- erpnext/public/css/erpnext.css | 9 + erpnext/public/less/erpnext.less | 15 + .../page/leaderboard/leaderboard.html | 23 -- .../utilities/page/leaderboard/leaderboard.js | 241 +++++++++------- .../page/leaderboard/leaderboard.json | 4 +- .../utilities/page/leaderboard/leaderboard.py | 258 +++++++++--------- .../leaderboard/leaderboard_main_head.html | 8 - .../leaderboard/leaderboard_row_head.html | 3 - 8 files changed, 299 insertions(+), 262 deletions(-) delete mode 100644 erpnext/utilities/page/leaderboard/leaderboard.html delete mode 100644 erpnext/utilities/page/leaderboard/leaderboard_main_head.html delete mode 100644 erpnext/utilities/page/leaderboard/leaderboard_row_head.html diff --git a/erpnext/public/css/erpnext.css b/erpnext/public/css/erpnext.css index 13fdcf1501..460efbfe9f 100644 --- a/erpnext/public/css/erpnext.css +++ b/erpnext/public/css/erpnext.css @@ -356,3 +356,12 @@ body[data-route="pos"] .collapse-btn { border-radius: 3px; color: #fff; } +.leaderboard .result { + border-top: 1px solid #d1d8dd; +} +.leaderboard .list-item { + padding-left: 45px; +} +.leaderboard .list-item_content { + padding-right: 45px; +} diff --git a/erpnext/public/less/erpnext.less b/erpnext/public/less/erpnext.less index de46c53df8..d0c4841cc4 100644 --- a/erpnext/public/less/erpnext.less +++ b/erpnext/public/less/erpnext.less @@ -423,4 +423,19 @@ body[data-route="pos"] { padding: 5px 9px; border-radius: 3px; color: #fff; + +} + +// Leaderboard + +.leaderboard { + .result { + border-top: 1px solid #d1d8dd; + } + .list-item { + padding-left: 45px; + } + .list-item_content { + padding-right: 45px; + } } \ No newline at end of file diff --git a/erpnext/utilities/page/leaderboard/leaderboard.html b/erpnext/utilities/page/leaderboard/leaderboard.html deleted file mode 100644 index 8df224750c..0000000000 --- a/erpnext/utilities/page/leaderboard/leaderboard.html +++ /dev/null @@ -1,23 +0,0 @@ -
-
-
-
- -
- -
- -
-
-
-
-
-
\ No newline at end of file diff --git a/erpnext/utilities/page/leaderboard/leaderboard.js b/erpnext/utilities/page/leaderboard/leaderboard.js index eed9bd1865..0d16ab0ad0 100644 --- a/erpnext/utilities/page/leaderboard/leaderboard.js +++ b/erpnext/utilities/page/leaderboard/leaderboard.js @@ -1,114 +1,166 @@ +frappe.pages["leaderboard"].on_page_load = function (wrapper) { + frappe.leaderboard = new frappe.Leaderboard(wrapper); +} frappe.Leaderboard = Class.extend({ init: function (parent) { - this.page = frappe.ui.make_app_page({ + frappe.ui.make_app_page({ parent: parent, title: "Leaderboard", - single_column: true + single_column: false }); + this.parent = parent; + this.page = this.parent.page; + this.page.sidebar.html(``); + this.$sidebar_list = this.page.sidebar.find('ul'); + // const list of doctypes this.doctypes = ["Customer", "Item", "Supplier", "Sales Partner"]; - this.timelines = ["Week", "Month", "Quarter", "Year"]; + this.timespans = ["Week", "Month", "Quarter", "Year"]; this.desc_fields = ["total_amount", "total_request", "annual_billing", "commission_rate"]; this.filters = { - "Customer": this.map_array(["title", "total_amount", "total_item_purchased", "modified"]), - "Item": this.map_array(["title", "total_request", "total_purchase", "avg_price", "modified"]), - "Supplier": this.map_array(["title", "annual_billing", "total_unpaid", "modified"]), - "Sales Partner": this.map_array(["title", "commission_rate", "target_qty", "target_amount", "modified"]), + "Customer": ["total_amount", "total_item_purchased"], + "Item": ["total_request", "total_purchase", "avg_price"], + "Supplier": ["annual_billing", "total_unpaid"], + "Sales Partner": ["commission_rate", "target_qty", "target_amount"], }; // for saving current selected filters - const _selected_filter = this.filters[this.doctypes[0]]; + // TODO: revert to 0 index for doctype and timespan, and remove preset down + const _initial_doctype = this.doctypes[0]; + const _initial_timespan = this.timespans[0]; + const _initial_filter = this.filters[_initial_doctype]; + this.options = { - selected_doctype: this.doctypes[0], - selected_filter: _selected_filter, - selected_filter_item: _selected_filter[1], - selected_timeline: this.timelines[0], + selected_doctype: _initial_doctype, + selected_filter: _initial_filter, + selected_filter_item: _initial_filter[0], + selected_timespan: _initial_timespan, }; this.message = null; this.make(); }, - - make: function () { var me = this; - var $leaderboard = $(frappe.render_template("leaderboard", this)).appendTo(this.page.main); + var $container = $(`
+
+
+
`).appendTo(this.page.main); - // events - $leaderboard.find(".select-doctype") - .on("change", function () { - me.options.selected_doctype = this.value; - me.options.selected_filter = me.filters[this.value]; - me.options.selected_filter_item = me.filters[this.value][1]; - me.make_request($leaderboard); - }); + this.$graph_area = $container.find('.leaderboard-graph'); - $leaderboard.find(".select-time") - .on("change", function () { - me.options.selected_timeline = this.value; - me.make_request($leaderboard); - }); + this.doctypes.map(doctype => { + this.get_sidebar_item(doctype).appendTo(this.$sidebar_list); + }); + + this.timespan_select = this.page.add_select(__("Timespan"), + this.timespans.map(d => { + return {"label": __(d), value: d } + }) + ); + + // this.timespan_select.val(this.timespans[1]); + + this.type_select = this.page.add_select(__("Type"), + me.options.selected_filter.map(d => { + return {"label": __(frappe.model.unscrub(d)), value: d } + }) + ); + + this.$sidebar_list.on('click', 'li', function(e) { + let $li = $(this); + let doctype = $li.find('span').html(); + + me.options.selected_doctype = doctype; + me.options.selected_filter = me.filters[doctype]; + me.options.selected_filter_item = me.filters[doctype][0]; + + me.type_select.empty().add_options( + me.options.selected_filter.map(d => { + return {"label": __(frappe.model.unscrub(d)), value: d } + }) + ); + + me.$sidebar_list.find('li').removeClass('active'); + $li.addClass('active'); + + me.make_request($container); + }); + + this.timespan_select.on("change", function() { + me.options.selected_timespan = this.value; + me.make_request($container); + }); + + this.type_select.on("change", function() { + me.options.selected_filter_item = this.value + me.make_request($container); + }); // now get leaderboard - me.make_request($leaderboard); + this.$sidebar_list.find('li:first').trigger('click'); }, - make_request: function ($leaderboard) { + make_request: function ($container) { var me = this; frappe.model.with_doctype(me.options.selected_doctype, function () { - me.get_leaderboard(me.get_leaderboard_data, $leaderboard); + me.get_leaderboard(me.get_leaderboard_data, $container); }); }, - get_leaderboard: function (notify, $leaderboard) { + get_leaderboard: function (notify, $container, start=0) { var me = this; frappe.call({ method: "erpnext.utilities.page.leaderboard.leaderboard.get_leaderboard", args: { - obj: JSON.stringify(me.options) + doctype: me.options.selected_doctype, + timespan: me.options.selected_timespan, + field: me.options.selected_filter_item, + start: start }, - callback: function (res) { - console.log(res) - notify(me, res, $leaderboard); + callback: function (r) { + let results = r.message || []; + + let graph_items = results.slice(0, 10); + + me.$graph_area.show().empty(); + let args = { + parent: me.$graph_area, + y: [ + { + color: 'light-green', + values: graph_items.map(d=>d.value), + formatted: graph_items.map(d=>d[me.options.selected_filter_item]) + } + ], + x: { + values: graph_items.map(d=>d.name) + }, + mode: 'bar', + height: 140 + }; + new frappe.ui.Graph(args); + + notify(me, r, $container); } }); }, - get_leaderboard_data: function (me, res, $leaderboard) { + get_leaderboard_data: function (me, res, $container) { if (res && res.message) { me.message = null; - $leaderboard.find(".leaderboard").html(me.render_list_view(res.message)); - - // event to change arrow - $leaderboard.find(".leaderboard-item") - .click(function () { - const field = this.innerText.trim().toLowerCase().replace(new RegExp(" ", "g"), "_"); - if (field && field !== "title") { - const _selected_filter_item = me.options.selected_filter - .filter(i => i.field === field); - if (_selected_filter_item.length > 0) { - me.options.selected_filter_item = _selected_filter_item[0]; - me.options.selected_filter_item.value = _selected_filter_item[0].value === "ASC" ? "DESC" : "ASC"; - - const new_class_name = `icon-${me.options.selected_filter_item.field} fa fa-chevron-${me.options.selected_filter_item.value === "ASC" ? "up" : "down"}`; - $leaderboard.find(`.icon-${me.options.selected_filter_item.field}`) - .attr("class", new_class_name); - - // now make request to web - me.make_request($leaderboard); - } - } - }); + $container.find(".leaderboard-list").html(me.render_list_view(res.message)); } else { + me.$graph_area.hide(); me.message = "No items found."; - $leaderboard.find(".leaderboard").html(me.render_list_view()); + $container.find(".leaderboard-list").html(me.render_list_view()); } }, @@ -129,7 +181,7 @@ frappe.Leaderboard = Class.extend({ var html = `${me.render_list_header()} - ${me.render_list_result(items)}`; + ${me.render_list_result(items)}`; return html; }, @@ -137,23 +189,21 @@ frappe.Leaderboard = Class.extend({ render_list_header: function () { var me = this; const _selected_filter = me.options.selected_filter - .map(i => me.map_field(i.field)).slice(1); + .map(i => frappe.model.unscrub(i)); + const fields = ['name', me.options.selected_filter_item]; const html = `
${ - me.options.selected_filter - .map(filter => { - const col = me.map_field(filter.field); + fields.map(filter => { + const col = frappe.model.unscrub(filter); return ( `
${col} -
`); }).join("") @@ -166,9 +216,18 @@ frappe.Leaderboard = Class.extend({ render_list_result: function (items) { var me = this; - let _html = items.map((item) => { + let _html = items.map((item, index) => { const $value = $(me.get_item_html(item)); - const $item_container = $(`
`).append($value); + + let item_class = ""; + if(index == 0) { + item_class = "first"; + } else if (index == 1) { + item_class = "second"; + } else if(index == 2) { + item_class = "third"; + } + const $item_container = $(`
`).append($value); return $item_container[0].outerHTML; }).join(""); @@ -186,10 +245,10 @@ frappe.Leaderboard = Class.extend({ var me = this; let html = - `
+ `

No Item found

-
+
`; return html; @@ -198,25 +257,25 @@ frappe.Leaderboard = Class.extend({ get_item_html: function (item) { var me = this; const _selected_filter = me.options.selected_filter - .map(i => me.map_field(i.field)).slice(1); + .map(i => frappe.model.unscrub(i)); + const fields = ['name', me.options.selected_filter_item]; const html = `
${ - me.options.selected_filter - .map(filter => { - const col = me.map_field(filter.field); - let val = item[filter.field]; + fields.map(filter => { + const col = frappe.model.unscrub(filter); + let val = item[filter]; if (col === "Modified") { val = comment_when(val); } return ( `
${ - col === "Title" - ? ` ${val} ` + col === "Name" + ? ` ${val} ` : ` ${val}` }
`); @@ -227,22 +286,10 @@ frappe.Leaderboard = Class.extend({ return html; }, - map_field: function (field) { - return field.replace(new RegExp("_", "g"), " ").replace(/(^|\s)[a-z]/g, f => f.toUpperCase()) - }, - - map_array: function (_array) { - var me = this; - return _array.map((str) => { - let value = me.desc_fields.indexOf(str) > -1 ? "DESC" : "ASC"; - return { - field: str, - value: value - }; - }); + get_sidebar_item: function(item) { + return $(`
  • + + ${ item } +
  • `); } }); - -frappe.pages["leaderboard"].on_page_load = function (wrapper) { - frappe.leaderboard = new frappe.Leaderboard(wrapper); -} diff --git a/erpnext/utilities/page/leaderboard/leaderboard.json b/erpnext/utilities/page/leaderboard/leaderboard.json index 8cba76587a..8ccef7dcf6 100644 --- a/erpnext/utilities/page/leaderboard/leaderboard.json +++ b/erpnext/utilities/page/leaderboard/leaderboard.json @@ -4,7 +4,7 @@ "docstatus": 0, "doctype": "Page", "idx": 0, - "modified": "2017-06-06 02:54:27.504048", + "modified": "2017-09-12 14:05:26.422064", "modified_by": "Administrator", "module": "Utilities", "name": "leaderboard", @@ -15,5 +15,5 @@ "standard": "Yes", "style": null, "system_page": 0, - "title": "LeaderBoard" + "title": "Leaderboard" } \ No newline at end of file diff --git a/erpnext/utilities/page/leaderboard/leaderboard.py b/erpnext/utilities/page/leaderboard/leaderboard.py index 0a754100fe..50e8abfd75 100644 --- a/erpnext/utilities/page/leaderboard/leaderboard.py +++ b/erpnext/utilities/page/leaderboard/leaderboard.py @@ -5,69 +5,156 @@ from __future__ import unicode_literals, print_function import frappe import json from operator import itemgetter -from frappe.utils import add_to_date +from frappe.utils import add_to_date, fmt_money from erpnext.accounts.party import get_dashboard_info from erpnext.accounts.utils import get_currency_precision @frappe.whitelist() -def get_leaderboard(obj): +def get_leaderboard(doctype, timespan, field, start=0): """return top 10 items for that doctype based on conditions""" - obj = frappe._dict(json.loads(obj)) - doctype = obj.selected_doctype - timeline = obj.selected_timeline - filters = {"modified":(">=", get_date_from_string(timeline))} + print('doctype', doctype, timespan, field, start) + + filters = {"modified":(">=", get_date_from_string(timespan))} items = [] if doctype == "Customer": - items = get_all_customers(doctype, filters, []) + items = get_all_customers(doctype, filters, [], field) elif doctype == "Item": - items = get_all_items(doctype, filters, []) + items = get_all_items(doctype, filters, [], field) elif doctype == "Supplier": - items = get_all_suppliers(doctype, filters, []) + items = get_all_suppliers(doctype, filters, [], field) elif doctype == "Sales Partner": - items = get_all_sales_partner(doctype, filters, []) - + items = get_all_sales_partner(doctype, filters, [], field) + if len(items) > 0: - return filter_leaderboard_items(obj, items) + return items return [] +def get_all_customers(doctype, filters, items, field, start=0, limit=20): + """return all customers""" -# filters start -def filter_leaderboard_items(obj, items): - """return items based on seleted filters""" - - reverse = False if obj.selected_filter_item and obj.selected_filter_item["value"] == "ASC" else True - # key : (x[field1], x[field2]) while sorting on 2 values - filtered_list = [] - selected_field = obj.selected_filter_item and obj.selected_filter_item["field"] - if selected_field: - filtered_list = sorted(items, key=itemgetter(selected_field), reverse=reverse) - value = items[0].get(selected_field) + x = frappe.get_list(doctype, filters=filters, limit_start=start, limit_page_length=limit) - allowed = isinstance(value, unicode) or isinstance(value, str) - # now sort by length - if allowed and '$' in value: - filtered_list.sort(key= lambda x: len(x[selected_field]), reverse=reverse) - - # return only 10 items' - return filtered_list[:10] + for val in x: + y = dict(frappe.db.sql('''select name, grand_total from `tabSales Invoice` where customer = %s''', (val.name))) + invoice_list = y.keys() + if len(invoice_list) > 0: + item_count = frappe.db.sql('''select count(name) from `tabSales Invoice Item` where parent in (%s)''' % ", ".join( + ['%s'] * len(invoice_list)), tuple(invoice_list)) -# filters end + value = 0 + if(field=="total_amount"): + value = sum(y.values()) + elif(field=="total_item_purchased"): + value = sum(destructure_tuple_of_tuples(item_count)) + + item_obj = {"name": val.name, + "total_amount": get_formatted_value(sum(y.values())), + "total_item_purchased": sum(destructure_tuple_of_tuples(item_count)), + "href":"#Form/Customer/" + val.name, + "value": value} + items.append(item_obj) + + items.sort(key=lambda k: k['value'], reverse=True) + return items + +def get_all_items(doctype, filters, items, field, start=0, limit=20): + """return all items""" + + x = frappe.get_list(doctype, filters=filters, limit_start=start, limit_page_length=limit) + for val in x: + data = frappe.db.sql('''select item_code from `tabMaterial Request Item` where item_code = %s''', (val.name), as_list=1) + requests = destructure_tuple_of_tuples(data) + data = frappe.db.sql('''select price_list_rate from `tabItem Price` where item_code = %s''', (val.name), as_list=1) + avg_price = get_avg(destructure_tuple_of_tuples(data)) + data = frappe.db.sql('''select item_code from `tabPurchase Invoice Item` where item_code = %s''', (val.name), as_list=1) + purchases = destructure_tuple_of_tuples(data) + + value = 0 + if(field=="total_request"): + value = len(requests) + elif(field=="total_purchase"): + value = len(purchases) + elif(field=="avg_price"): + value=avg_price + item_obj = {"name": val.name, + "total_request":len(requests), + "total_purchase": len(purchases), + "avg_price": get_formatted_value(avg_price), + "href":"#Form/Item/" + val.name, + "value": value} + items.append(item_obj) + + print(items) + + items.sort(key=lambda k: k['value'], reverse=True) + return items + +def get_all_suppliers(doctype, filters, items, field, start=0, limit=20): + """return all suppliers""" + + x = frappe.get_list(doctype, filters=filters, limit_start=start, limit_page_length=limit) + + for val in x: + + info = get_dashboard_info(doctype, val.name) + value = 0 + if(field=="annual_billing"): + value = info["billing_this_year"] + elif(field=="total_unpaid"): + value = abs(info["total_unpaid"]) + + item_obj = {"name": val.name, + "annual_billing": get_formatted_value(info["billing_this_year"]), + "total_unpaid": get_formatted_value(abs(info["total_unpaid"])), + "href":"#Form/Supplier/" + val.name, + "value": value} + items.append(item_obj) + + items.sort(key=lambda k: k['value'], reverse=True) + return items + +def get_all_sales_partner(doctype, filters, items, field, start=0, limit=20): + """return all sales partner""" + + x = frappe.get_list(doctype, fields=["name", "commission_rate", "modified"], filters=filters, limit_start=start, limit_page_length=limit) + for val in x: + y = frappe.db.sql('''select target_qty, target_amount from `tabTarget Detail` where parent = %s''', (val.name), as_dict=1) + target_qty = sum([f["target_qty"] for f in y]) + target_amount = sum([f["target_amount"] for f in y]) + + value = 0 + if(field=="commission_rate"): + value = val.commission_rate + elif(field=="target_qty"): + value = target_qty + elif(field=="target_amount"): + value = target_qty + + item_obj = {"name": val.name, + "commission_rate": get_formatted_value(val.commission_rate, False), + "target_qty": target_qty, + "target_amount": get_formatted_value(target_qty), + "href":"#Form/Sales Partner/" + val.name, + "value": value} + items.append(item_obj) + + items.sort(key=lambda k: k['value'], reverse=True) + return items -# utils start def destructure_tuple_of_tuples(tup_of_tup): """return tuple(tuples) as list""" return [y for x in tup_of_tup for y in x] -def get_date_from_string(seleted_timeline): +def get_date_from_string(seleted_timespan): """return string for ex:this week as date:string""" days = months = years = 0 - if "month" == seleted_timeline.lower(): + if "month" == seleted_timespan.lower(): months = -1 - elif "quarter" == seleted_timeline.lower(): + elif "quarter" == seleted_timespan.lower(): months = -3 - elif "year" == seleted_timeline.lower(): + elif "year" == seleted_timespan.lower(): years = -1 else: days = -7 @@ -76,7 +163,7 @@ def get_date_from_string(seleted_timeline): def get_filter_list(selected_filter): """return list of keys""" - return map((lambda y : y["field"]), filter(lambda x : not (x["field"] == "title" or x["field"] == "modified"), selected_filter)) + return map((lambda y : y["field"]), filter(lambda x : not (x["field"] == "name" or x["field"] == "modified"), selected_filter)) def get_avg(items): """return avg of list items""" @@ -87,96 +174,9 @@ def get_avg(items): def get_formatted_value(value, add_symbol=True): """return formatted value""" - currency_precision = get_currency_precision() or 2 if not add_symbol: - return '{:.{pre}f}'.format(value, pre=currency_precision) - - company = frappe.db.get_default("company") or frappe.get_all("Company")[0].name - currency = frappe.get_doc("Company", company).default_currency or frappe.boot.sysdefaults.currency; - currency_symbol = frappe.db.get_value("Currency", currency, "symbol") - return currency_symbol + ' ' + '{:.{pre}f}'.format(value, pre=currency_precision) - -# utils end - - -# get data -def get_all_customers(doctype, filters, items, start=0, limit=100): - """return all customers""" - - x = frappe.get_list(doctype, fields=["name", "modified"], filters=filters, limit_start=start, limit_page_length=limit) - - for val in x: - y = dict(frappe.db.sql('''select name, grand_total from `tabSales Invoice` where customer = %s''', (val.name))) - invoice_list = y.keys() - if len(invoice_list) > 0: - item_count = frappe.db.sql('''select count(name) from `tabSales Invoice Item` where parent in (%s)''' % ", ".join( - ['%s'] * len(invoice_list)), tuple(invoice_list)) - items.append({"title": val.name, - "total_amount": get_formatted_value(sum(y.values())), - "href":"#Form/Customer/" + val.name, - "total_item_purchased": sum(destructure_tuple_of_tuples(item_count)), - "modified": str(val.modified)}) - if len(x) > 99: - start = start + 1 - return get_all_customers(doctype, filters, items, start=start) - else: - return items - -def get_all_items(doctype, filters, items, start=0, limit=100): - """return all items""" - - x = frappe.get_list(doctype, fields=["name", "modified"], filters=filters, limit_start=start, limit_page_length=limit) - for val in x: - data = frappe.db.sql('''select item_code from `tabMaterial Request Item` where item_code = %s''', (val.name), as_list=1) - requests = destructure_tuple_of_tuples(data) - data = frappe.db.sql('''select price_list_rate from `tabItem Price` where item_code = %s''', (val.name), as_list=1) - avg_price = get_avg(destructure_tuple_of_tuples(data)) - data = frappe.db.sql('''select item_code from `tabPurchase Invoice Item` where item_code = %s''', (val.name), as_list=1) - purchases = destructure_tuple_of_tuples(data) - - items.append({"title": val.name, - "total_request":len(requests), - "total_purchase": len(purchases), "href":"#Form/Item/" + val.name, - "avg_price": get_formatted_value(avg_price), - "modified": val.modified}) - if len(x) > 99: - return get_all_items(doctype, filters, items, start=start) - else: - return items - -def get_all_suppliers(doctype, filters, items, start=0, limit=100): - """return all suppliers""" - - x = frappe.get_list(doctype, fields=["name", "modified"], filters=filters, limit_start=start, limit_page_length=limit) - - for val in x: - info = get_dashboard_info(doctype, val.name) - items.append({"title": val.name, - "annual_billing": get_formatted_value(info["billing_this_year"]), - "total_unpaid": get_formatted_value(abs(info["total_unpaid"])), - "href":"#Form/Supplier/" + val.name, - "modified": val.modified}) - - if len(x) > 99: - return get_all_suppliers(doctype, filters, items, start=start) - else: - return items - -def get_all_sales_partner(doctype, filters, items, start=0, limit=100): - """return all sales partner""" - - x = frappe.get_list(doctype, fields=["name", "commission_rate", "modified"], filters=filters, limit_start=start, limit_page_length=limit) - for val in x: - y = frappe.db.sql('''select target_qty, target_amount from `tabTarget Detail` where parent = %s''', (val.name), as_dict=1) - target_qty = sum([f["target_qty"] for f in y]) - target_amount = sum([f["target_amount"] for f in y]) - items.append({"title": val.name, - "commission_rate": get_formatted_value(val.commission_rate, False), - "target_qty": target_qty, - "target_amount": get_formatted_value(target_amount), - "href":"#Form/Sales Partner/" + val.name, - "modified": val.modified}) - if len(x) > 99: - return get_all_sales_partner(doctype, filters, items, start=start) - else: - return items \ No newline at end of file + return '{:.{pre}f}'.format(value, pre=(get_currency_precision() or 2)) + currency_precision = get_currency_precision() or 2 + company = frappe.db.get_default("company") + currency = frappe.get_doc("Company", company).default_currency or frappe.boot.sysdefaults.currency + return fmt_money(value, currency_precision, currency) diff --git a/erpnext/utilities/page/leaderboard/leaderboard_main_head.html b/erpnext/utilities/page/leaderboard/leaderboard_main_head.html deleted file mode 100644 index 257d4ed3ae..0000000000 --- a/erpnext/utilities/page/leaderboard/leaderboard_main_head.html +++ /dev/null @@ -1,8 +0,0 @@ -
    - - {{col}} -
    \ No newline at end of file diff --git a/erpnext/utilities/page/leaderboard/leaderboard_row_head.html b/erpnext/utilities/page/leaderboard/leaderboard_row_head.html deleted file mode 100644 index 5a4e1dd22e..0000000000 --- a/erpnext/utilities/page/leaderboard/leaderboard_row_head.html +++ /dev/null @@ -1,3 +0,0 @@ -
    - {{ main }} -
    \ No newline at end of file From 8c9f2a1be6b348e9fb34b789f44308b8a3cb6fb9 Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Mon, 18 Sep 2017 16:41:49 +0530 Subject: [PATCH 44/72] Add communication entry to Sales Order only if payment entry email is sent to customer (#10716) --- erpnext/accounts/doctype/payment_request/payment_request.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/accounts/doctype/payment_request/payment_request.py b/erpnext/accounts/doctype/payment_request/payment_request.py index 44a3644a0c..f3594b205b 100644 --- a/erpnext/accounts/doctype/payment_request/payment_request.py +++ b/erpnext/accounts/doctype/payment_request/payment_request.py @@ -35,7 +35,6 @@ class PaymentRequest(Document): def on_submit(self): send_mail = True - self.make_communication_entry() ref_doc = frappe.get_doc(self.reference_doctype, self.reference_name) if (hasattr(ref_doc, "order_type") and getattr(ref_doc, "order_type") == "Shopping Cart") \ @@ -45,6 +44,7 @@ class PaymentRequest(Document): if send_mail: self.set_payment_request_url() self.send_email() + self.make_communication_entry() def on_cancel(self): self.check_if_payment_entry_exists() From de3429280ba23575f1c91b84cf8c9954dd09d9da Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Mon, 18 Sep 2017 16:42:10 +0530 Subject: [PATCH 45/72] Made Template link in variant (Item Master) intro linkable (#10696) * Made Template link in variant (Item Master) intro linkable * Update item.js --- erpnext/stock/doctype/item/item.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/stock/doctype/item/item.js b/erpnext/stock/doctype/item/item.js index 1af08070ec..7837f8c73e 100644 --- a/erpnext/stock/doctype/item/item.js +++ b/erpnext/stock/doctype/item/item.js @@ -63,8 +63,8 @@ frappe.ui.form.on("Item", { frm.page.set_inner_btn_group_as_primary(__("Make")); } if (frm.doc.variant_of) { - frm.set_intro(__("This Item is a Variant of {0} (Template).", - [frm.doc.variant_of]), true); + frm.set_intro(__('This Item is a Variant of {0} (Template).', + [`${frm.doc.variant_of}`]), true); } if (frappe.defaults.get_default("item_naming_by")!="Naming Series" || frm.doc.variant_of) { From e78d5a240ad68c5c1009c16c78b9366c283d3fa6 Mon Sep 17 00:00:00 2001 From: Utkarsh Goswami Date: Mon, 18 Sep 2017 16:44:11 +0530 Subject: [PATCH 46/72] [fix] unknown column in production order (#10828) --- .../v7_1/repost_stock_for_deleted_bins_for_merging_items.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/patches/v7_1/repost_stock_for_deleted_bins_for_merging_items.py b/erpnext/patches/v7_1/repost_stock_for_deleted_bins_for_merging_items.py index 321b0399a6..39b7f6ce91 100644 --- a/erpnext/patches/v7_1/repost_stock_for_deleted_bins_for_merging_items.py +++ b/erpnext/patches/v7_1/repost_stock_for_deleted_bins_for_merging_items.py @@ -30,7 +30,7 @@ def execute(): .format(', '.join(['%s']*len(modified_items))), tuple(modified_items))) item_warehouses_with_transactions += list(frappe.db.sql(""" - select distinct pr_item.item_code, pr.source_warehouse + select distinct pr_item.item_code, pr_item.source_warehouse from `tabProduction Order` pr, `tabProduction Order Item` pr_item where pr_item.parent and pr.name and pr.docstatus=1 and pr_item.item_code in ({0})""" .format(', '.join(['%s']*len(modified_items))), tuple(modified_items))) From bd0beb6c02071ccad3ac04f34cbb3f2cfa93e9ed Mon Sep 17 00:00:00 2001 From: Utkarsh Goswami Date: Mon, 18 Sep 2017 16:44:11 +0530 Subject: [PATCH 47/72] [fix] unknown column in production order (#10828) --- .../v7_1/repost_stock_for_deleted_bins_for_merging_items.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/patches/v7_1/repost_stock_for_deleted_bins_for_merging_items.py b/erpnext/patches/v7_1/repost_stock_for_deleted_bins_for_merging_items.py index 321b0399a6..39b7f6ce91 100644 --- a/erpnext/patches/v7_1/repost_stock_for_deleted_bins_for_merging_items.py +++ b/erpnext/patches/v7_1/repost_stock_for_deleted_bins_for_merging_items.py @@ -30,7 +30,7 @@ def execute(): .format(', '.join(['%s']*len(modified_items))), tuple(modified_items))) item_warehouses_with_transactions += list(frappe.db.sql(""" - select distinct pr_item.item_code, pr.source_warehouse + select distinct pr_item.item_code, pr_item.source_warehouse from `tabProduction Order` pr, `tabProduction Order Item` pr_item where pr_item.parent and pr.name and pr.docstatus=1 and pr_item.item_code in ({0})""" .format(', '.join(['%s']*len(modified_items))), tuple(modified_items))) From aebcb17daf16a299b04cd457b11bf3d9ebbe2551 Mon Sep 17 00:00:00 2001 From: Faris Ansari Date: Mon, 18 Sep 2017 16:58:24 +0530 Subject: [PATCH 48/72] Show thumbnail image in daily work summary (#10605) * Show thumbnail image in daily work summary * Crop thumbnail image into square * fix codacy --- .../daily_work_summary/daily_work_summary.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/erpnext/hr/doctype/daily_work_summary/daily_work_summary.py b/erpnext/hr/doctype/daily_work_summary/daily_work_summary.py index f03c6fa491..9ac74aae15 100644 --- a/erpnext/hr/doctype/daily_work_summary/daily_work_summary.py +++ b/erpnext/hr/doctype/daily_work_summary/daily_work_summary.py @@ -51,6 +51,25 @@ class DailyWorkSummary(Document): d.sender_name = emp[0].employee_name if emp else d.sender d.image = emp[0].image if emp and emp[0].image else None + + original_image = d.image + # make thumbnail image + try: + if original_image: + file_name = frappe.get_list('File', {'file_url': original_image}) + + if file_name: + file_name = file_name[0].name + file_doc = frappe.get_doc('File', file_name) + thumbnail_image = file_doc.make_thumbnail( + set_as_thumbnail=False, + width=100, + height=100, + crop=True + ) + d.image = thumbnail_image + except: + d.image = original_image if d.sender in did_not_reply: did_not_reply.remove(d.sender) From a22c94c24625450a64ae5542bfab11ed5f258a64 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Mon, 18 Sep 2017 16:59:54 +0530 Subject: [PATCH 49/72] refactored assessment result tool (#10633) * save the assessment instead of submit * Added comments in the artool * remove the cur_frm and message for submitted result * link field for the assessment result --- .../js/schools/assessment_result_tool.html | 112 ++++++---- erpnext/schools/api.py | 99 +++++++-- .../assessment_result/assessment_result.json | 4 +- .../assessment_result/assessment_result.py | 17 +- .../assessment_result_tool.js | 210 +++++++++++------- .../assessment_result_tool.py | 2 +- 6 files changed, 298 insertions(+), 146 deletions(-) diff --git a/erpnext/public/js/schools/assessment_result_tool.html b/erpnext/public/js/schools/assessment_result_tool.html index 3c09ccd6ee..9fc17f7be1 100644 --- a/erpnext/public/js/schools/assessment_result_tool.html +++ b/erpnext/public/js/schools/assessment_result_tool.html @@ -1,44 +1,72 @@ - - - - - {% for c in criteria %} - - {% endfor %} - - - - - {% for c in criteria %} - - {% endfor %} - - - - - {% for s in students %} - - - - {% for c in criteria %} - - {% endfor %} - - - {% endfor %} - + + + + + {% for c in criteria %} + + {% endfor %} + + + + + + {% for c in criteria %} + + {% endfor %} + + + + + {% for s in students %} + + + + + {% for c in criteria %} + + {% endfor %} + + + {% endfor %} +
    StudentStudent Name{{ c.assessment_criteria }}Total Marks
    {{ c.maximum_score }}{{max_total_score}}
    {{ s.student }}{{ s.student_name }} - - - {% if(s.assessment_details) { %} {{s.assessment_details.total_score}} {% } %} -
    StudentStudent Name{{ c.assessment_criteria }}CommentsTotal Marks
    Score ({{ c.maximum_score }})Score ({{max_total_score}})
    {{ s.student }}{{ s.student_name }} + + {% if(s.assessment_details) { %} + {{s.assessment_details[c.assessment_criteria][1]}} + {% } %} + + + + + + + {% if(s.assessment_details) { %} + {{s.assessment_details.total_score[1]}} + {% } %} + + + {% if(s.assessment_details) { %} + {{s.assessment_details.total_score[0]}} + {% } %} + + + + + + +
    \ No newline at end of file diff --git a/erpnext/schools/api.py b/erpnext/schools/api.py index ff2da07a30..41d4a0dcb8 100644 --- a/erpnext/schools/api.py +++ b/erpnext/schools/api.py @@ -18,6 +18,7 @@ def get_course(program): (program), as_dict=1) return courses + @frappe.whitelist() def enroll_student(source_name): """Creates a Student Record and returns a Program Enrollment. @@ -40,6 +41,7 @@ def enroll_student(source_name): frappe.publish_realtime('enroll_student_progress', {"progress": [4, 4]}, user=frappe.session.user) return program_enrollment + @frappe.whitelist() def check_attendance_records_exist(course_schedule=None, student_group=None, date=None): """Check if Attendance Records are made against the specified Course Schedule or Student Group for given date. @@ -53,6 +55,7 @@ def check_attendance_records_exist(course_schedule=None, student_group=None, dat else: return frappe.get_list("Student Attendance", filters={"student_group": student_group, "date": date}) + @frappe.whitelist() def mark_attendance(students_present, students_absent, course_schedule=None, student_group=None, date=None): """Creates Multiple Attendance Records. @@ -76,6 +79,7 @@ def mark_attendance(students_present, students_absent, course_schedule=None, stu frappe.db.commit() frappe.msgprint(_("Attendance has been marked successfully.")) + def make_attendance_records(student, student_name, status, course_schedule=None, student_group=None, date=None): """Creates/Update Attendance Record. @@ -103,6 +107,7 @@ def make_attendance_records(student, student_name, status, course_schedule=None, student_attendance.status = status student_attendance.save() + @frappe.whitelist() def get_student_guardians(student): """Returns List of Guardians of a Student. @@ -113,6 +118,7 @@ def get_student_guardians(student): filters={"parent": student}) return guardians + @frappe.whitelist() def get_student_group_students(student_group, include_inactive=0): """Returns List of student, student_name in Student Group. @@ -127,6 +133,7 @@ def get_student_group_students(student_group, include_inactive=0): filters={"parent": student_group, "active": 1}, order_by= "group_roll_number") return students + @frappe.whitelist() def get_fee_structure(program, academic_term=None): """Returns Fee Structure. @@ -138,6 +145,7 @@ def get_fee_structure(program, academic_term=None): "academic_term": academic_term}, 'name', as_dict=True) return fee_structure[0].name if fee_structure else None + @frappe.whitelist() def get_fee_components(fee_structure): """Returns Fee Components. @@ -148,6 +156,7 @@ def get_fee_components(fee_structure): fs = frappe.get_list("Fee Component", fields=["fees_category", "amount"] , filters={"parent": fee_structure}, order_by= "idx") return fs + @frappe.whitelist() def get_fee_schedule(program, student_category=None): """Returns Fee Schedule. @@ -159,6 +168,7 @@ def get_fee_schedule(program, student_category=None): filters={"parent": program, "student_category": student_category }, order_by= "idx") return fs + @frappe.whitelist() def collect_fees(fees, amt): paid_amount = flt(amt) + flt(frappe.db.get_value("Fees", fees, "paid_amount")) @@ -167,6 +177,7 @@ def collect_fees(fees, amt): frappe.db.set_value("Fees", fees, "outstanding_amount", (total_amount - paid_amount)) return paid_amount + @frappe.whitelist() def get_course_schedule_events(start, end, filters=None): """Returns events for Course Schedule Calendar view rendering. @@ -191,6 +202,7 @@ def get_course_schedule_events(start, end, filters=None): return data + @frappe.whitelist() def get_assessment_criteria(course): """Returns Assessmemt Criteria and their Weightage from Course Master. @@ -200,22 +212,30 @@ def get_assessment_criteria(course): return frappe.get_list("Course Assessment Criteria", \ fields=["assessment_criteria", "weightage"], filters={"parent": course}, order_by= "idx") + @frappe.whitelist() def get_assessment_students(assessment_plan, student_group): - student_list = get_student_group_students(student_group) for i, student in enumerate(student_list): result = get_result(student.student, assessment_plan) if result: student_result = {} for d in result.details: - student_result.update({d.assessment_criteria: cstr(d.score) + " ("+ d.grade + ")"}) - student_result.update({"total_score": cstr(result.total_score) + " (" + result.grade + ")"}) - student.update({'assessment_details': student_result}) + student_result.update({d.assessment_criteria: [cstr(d.score), d.grade]}) + student_result.update({ + "total_score": [cstr(result.total_score), result.grade], + "comment": result.comment + }) + student.update({ + "assessment_details": student_result, + "docstatus": result.docstatus, + "name": result.name + }) else: student.update({'assessment_details': None}) return student_list + @frappe.whitelist() def get_assessment_details(assessment_plan): """Returns Assessment Criteria and Maximum Score from Assessment Plan Master. @@ -223,7 +243,8 @@ def get_assessment_details(assessment_plan): :param Assessment Plan: Assessment Plan """ return frappe.get_list("Assessment Plan Criteria", \ - fields=["assessment_criteria", "maximum_score"], filters={"parent": assessment_plan}, order_by= "idx") + fields=["assessment_criteria", "maximum_score", "docstatus"], filters={"parent": assessment_plan}, order_by= "idx") + @frappe.whitelist() def get_result(student, assessment_plan): @@ -232,12 +253,14 @@ def get_result(student, assessment_plan): :param Student: Student :param Assessment Plan: Assessment Plan """ - results = frappe.get_all("Assessment Result", filters={"student": student, "assessment_plan": assessment_plan, "docstatus": 1}) + results = frappe.get_all("Assessment Result", filters={"student": student, + "assessment_plan": assessment_plan, "docstatus": ("!=", 2)}) if results: return frappe.get_doc("Assessment Result", results[0]) else: return None + @frappe.whitelist() def get_grade(grading_scale, percentage): """Returns Grade based on the Grading Scale and Score. @@ -257,25 +280,63 @@ def get_grade(grading_scale, percentage): grade = "" return grade + @frappe.whitelist() -def mark_assessment_result(student, assessment_plan, scores): - student_score = json.loads(scores) - details = [] - for s in student_score.keys(): - details.append({ - "assessment_criteria": s, - "score": flt(student_score[s]) +def mark_assessment_result(assessment_plan, scores): + student_score = json.loads(scores); + assessment_details = [] + for criteria in student_score.get("assessment_details"): + assessment_details.append({ + "assessment_criteria": criteria, + "score": flt(student_score["assessment_details"][criteria]) }) - assessment_result = frappe.new_doc("Assessment Result") + assessment_result = get_assessment_result_doc(student_score["student"], assessment_plan) assessment_result.update({ - "student": student, - "student_name": frappe.db.get_value("Student", student, "title"), + "student": student_score.get("student"), "assessment_plan": assessment_plan, - "details": details + "comment": student_score.get("comment"), + "total_score":student_score.get("total_score"), + "details": assessment_details }) assessment_result.save() - assessment_result.submit() - return assessment_result + details = {} + for d in assessment_result.details: + details.update({d.assessment_criteria: d.grade}) + assessment_result_dict = { + "name": assessment_result.name, + "student": assessment_result.student, + "total_score": assessment_result.total_score, + "grade": assessment_result.grade, + "details": details + } + return assessment_result_dict + + +@frappe.whitelist() +def submit_assessment_results(assessment_plan, student_group): + total_result = 0 + student_list = get_student_group_students(student_group) + for i, student in enumerate(student_list): + doc = get_result(student.student, assessment_plan) + if doc and doc.docstatus==0: + total_result += 1 + doc.submit() + return total_result + + +def get_assessment_result_doc(student, assessment_plan): + assessment_result = frappe.get_all("Assessment Result", filters={"student": student, + "assessment_plan": assessment_plan, "docstatus": ("!=", 2)}) + if assessment_result: + doc = frappe.get_doc("Assessment Result", assessment_result[0]) + if doc.docstatus == 0: + return doc + elif doc.docstatus == 1: + frappe.msgprint("Result already Submitted") + return None + else: + return frappe.new_doc("Assessment Result") + @frappe.whitelist() def update_email_group(doctype, name): diff --git a/erpnext/schools/doctype/assessment_result/assessment_result.json b/erpnext/schools/doctype/assessment_result/assessment_result.json index c6b3c44579..13b927c367 100644 --- a/erpnext/schools/doctype/assessment_result/assessment_result.json +++ b/erpnext/schools/doctype/assessment_result/assessment_result.json @@ -410,7 +410,7 @@ "collapsible": 0, "columns": 0, "fieldname": "comment", - "fieldtype": "Long Text", + "fieldtype": "Small Text", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, @@ -474,7 +474,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2017-06-30 08:21:46.875594", + "modified": "2017-08-31 15:39:24.813328", "modified_by": "Administrator", "module": "Schools", "name": "Assessment Result", diff --git a/erpnext/schools/doctype/assessment_result/assessment_result.py b/erpnext/schools/doctype/assessment_result/assessment_result.py index c878ec301a..3c036dd56f 100644 --- a/erpnext/schools/doctype/assessment_result/assessment_result.py +++ b/erpnext/schools/doctype/assessment_result/assessment_result.py @@ -9,13 +9,18 @@ from frappe.utils import flt from frappe.model.document import Document from erpnext.schools.api import get_grade from erpnext.schools.api import get_assessment_details +from frappe.utils.csvutils import getlink + class AssessmentResult(Document): def validate(self): + if self.student and not self.student_name: + self.student_name = frappe.db.get_value("Student", self.student, "title") self.grading_scale = frappe.db.get_value("Assessment Plan", self.assessment_plan, "grading_scale") self.validate_maximum_score() self.validate_grade() - + self.validate_duplicate() + def validate_maximum_score(self): self.maximum_score = frappe.db.get_value("Assessment Plan", self.assessment_plan, "maximum_assessment_score") assessment_details = get_assessment_details(self.assessment_plan) @@ -34,3 +39,13 @@ class AssessmentResult(Document): d.grade = get_grade(self.grading_scale, (flt(d.score)/d.maximum_score)*100) self.total_score += d.score self.grade = get_grade(self.grading_scale, (self.total_score/self.maximum_score)*100) + + def validate_duplicate(self): + assessment_result = frappe.get_list("Assessment Result", filters={"name": ("not in", [self.name]), + "student":self.student, "assessment_plan":self.assessment_plan, "docstatus":("!=", 2)}) + if assessment_result: + frappe.throw(_("Assessment Result record {0} already exists.".format(getlink("Assessment Result",assessment_result[0].name)))) + + + + diff --git a/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.js b/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.js index a2eeceff25..dfa7b142f7 100644 --- a/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.js +++ b/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.js @@ -1,12 +1,13 @@ - // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors // For license information, please see license.txt -cur_frm.add_fetch("assessment_plan", "student_group", "student_group"); frappe.ui.form.on('Assessment Result Tool', { + setup: function(frm) { + frm.add_fetch("assessment_plan", "student_group", "student_group"); + }, + refresh: function(frm) { - frm.trigger("assessment_plan"); if (frappe.route_options) { frm.set_value("student_group", frappe.route_options.student_group); frm.set_value("assessment_plan", frappe.route_options.assessment_plan); @@ -14,98 +15,145 @@ frappe.ui.form.on('Assessment Result Tool', { } frm.disable_save(); frm.page.clear_indicator(); + frm.trigger("assessment_plan"); }, assessment_plan: function(frm) { - if(!frm.doc.student_group) return; - frappe.call({ - method: "erpnext.schools.api.get_assessment_students", - args: { - "assessment_plan": frm.doc.assessment_plan, - "student_group": frm.doc.student_group - }, - callback: function(r) { - frm.events.render_table(frm, r.message); - } - }); + frm.doc.show_submit = false; + if(frm.doc.assessment_plan) { + if (!frm.doc.student_group) + return + frappe.call({ + method: "erpnext.schools.api.get_assessment_students", + args: { + "assessment_plan": frm.doc.assessment_plan, + "student_group": frm.doc.student_group + }, + callback: function(r) { + frm.doc.students = r.message; + frm.events.render_table(frm); + for (let value of r.message) { + if (!value.docstatus) { + frm.doc.show_submit = true; + break; + } + } + frm.events.submit_result(frm); + } + }); + } }, - render_table: function(frm, students) { + render_table: function(frm) { $(frm.fields_dict.result_html.wrapper).empty(); - var assessment_plan = frm.doc.assessment_plan; - var student_scores = {}; - students.forEach(function(stu) { - student_scores[stu.student] = {} - }); - + let assessment_plan = frm.doc.assessment_plan; frappe.call({ method: "erpnext.schools.api.get_assessment_details", args: { assessment_plan: assessment_plan }, callback: function(r) { - var criteria_list = r.message; - var max_total_score = 0; - criteria_list.forEach(function(c) { - max_total_score += c.maximum_score - }); - var result_table = $(frappe.render_template('assessment_result_tool', { - frm: frm, - students: students, - criteria: criteria_list, - max_total_score: max_total_score - })); - result_table.appendTo(frm.fields_dict.result_html.wrapper) - - result_table.on('change', 'input', function(e) { - var $input = $(e.target); - var max_score = $input.data().maxScore; - var student = $input.data().student; - var criteria = $input.data().criteria; - var value = $input.val(); - if(value < 0) { - $input.val(0); - value = 0; - } - if(value > max_score) { - $input.val(max_score); - value = max_score; - } - student_scores[student][criteria] = value; - if(Object.keys(student_scores[student]).length == criteria_list.length) { - console.log("ok"); - frappe.call(({ - method: "erpnext.schools.api.mark_assessment_result", - args: { - "student": student, - "assessment_plan": assessment_plan, - "scores": student_scores[student] - }, - callback: function(r) { - var doc = r.message; - var student = doc.student; - result_table.find(`[data-student=${student}].total-score`) - .html(doc.total_score + ' ('+ doc.grade + ')'); - var details = doc.details; - result_table.find(`tr[data-student=${student}]`).addClass('text-muted'); - result_table.find(`input[data-student=${student}]`).each(function(el, input) { - var $input = $(input); - var criteria = $input.data().criteria; - var value = $input.val(); - var grade = details.find(function(d) { - return d.assessment_criteria === criteria; - }).grade; - $input.val(`${value} (${grade})`); - $input.attr('disabled', true); - }); - - } - })) - } - }); - + frm.events.get_marks(frm, r.message); } }); }, + get_marks: function(frm, criteria_list) { + let max_total_score = 0; + criteria_list.forEach(function(c) { + max_total_score += c.maximum_score + }); + var result_table = $(frappe.render_template('assessment_result_tool', { + frm: frm, + students: frm.doc.students, + criteria: criteria_list, + max_total_score: max_total_score + })); + result_table.appendTo(frm.fields_dict.result_html.wrapper); + + result_table.on('change', 'input', function(e) { + let $input = $(e.target); + let student = $input.data().student; + let max_score = $input.data().maxScore; + let value = $input.val(); + if(value < 0) { + $input.val(0); + } else if(value > max_score) { + $input.val(max_score); + } + let total_score = 0; + let student_scores = {}; + student_scores["assessment_details"] = {} + result_table.find(`input[data-student=${student}].student-result-data`) + .each(function(el, input) { + let $input = $(input); + let criteria = $input.data().criteria; + let value = parseFloat($input.val()); + if (value) { + student_scores["assessment_details"][criteria] = value; + } + total_score += value; + }); + if(!Number.isNaN(total_score)) { + result_table.find(`span[data-student=${student}].total-score`).html(total_score); + } + if (Object.keys(student_scores["assessment_details"]).length === criteria_list.length) { + student_scores["student"] = student; + student_scores["total_score"] = total_score; + result_table.find(`[data-student=${student}].result-comment`) + .each(function(el, input){ + student_scores["comment"] = $(input).val(); + }); + frappe.call({ + method: "erpnext.schools.api.mark_assessment_result", + args: { + "assessment_plan": frm.doc.assessment_plan, + "scores": student_scores + }, + callback: function(r) { + let assessment_result = r.message; + if (!frm.doc.show_submit) { + frm.doc.show_submit = true; + frm.events.submit_result; + } + for (var criteria of Object.keys(assessment_result.details)) { + result_table.find(`[data-criteria=${criteria}][data-student=${assessment_result + .student}].student-result-grade`).each(function(e1, input) { + $(input).html(assessment_result.details[criteria]); + }); + } + result_table.find(`span[data-student=${assessment_result.student}].total-score-grade`).html(assessment_result.grade); + let link_span = result_table.find(`span[data-student=${assessment_result.student}].total-result-link`); + $(link_span).css("display", "block"); + $(link_span).find("a").attr("href", "#Form/Assessment Result/"+assessment_result.name); + } + }); + } + }); + }, + + submit_result: function(frm) { + if (frm.doc.show_submit) { + frm.page.set_primary_action(__("Submit"), function() { + frappe.call({ + method: "erpnext.schools.api.submit_assessment_results", + args: { + "assessment_plan": frm.doc.assessment_plan, + "student_group": frm.doc.student_group + }, + callback: function(r) { + if (r.message) { + frappe.msgprint(__("{0} Result submittted", [r.message])); + } else { + frappe.msgprint(__("No Result to submit")); + } + frm.events.assessment_plan(frm); + } + }); + }); + } + else { + frm.page.clear_primary_action(); + } + } }); diff --git a/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.py b/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.py index a0d286ccbe..649f420d41 100644 --- a/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.py +++ b/erpnext/schools/doctype/assessment_result_tool/assessment_result_tool.py @@ -7,4 +7,4 @@ import frappe from frappe.model.document import Document class AssessmentResultTool(Document): - pass + pass \ No newline at end of file From b98359f4a7f111cbf320686c060bd2c7e6ad9224 Mon Sep 17 00:00:00 2001 From: Utkarsh Goswami Date: Mon, 18 Sep 2017 17:06:13 +0530 Subject: [PATCH 50/72] Payment entry (#10668) --- .../doctype/payment_entry/payment_entry.js | 2 + .../doctype/payment_entry/payment_entry.py | 2 + .../payment_entry_reference.json | 45 ++++++++++++++++++- 3 files changed, 47 insertions(+), 2 deletions(-) diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.js b/erpnext/accounts/doctype/payment_entry/payment_entry.js index dc37574ea6..d1318d0b51 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.js +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.js @@ -502,6 +502,8 @@ frappe.ui.form.on('Payment Entry', { c.due_date = d.due_date c.total_amount = d.invoice_amount; c.outstanding_amount = d.outstanding_amount; + c.bill_no = d.bill_no; + if(!in_list(["Sales Order", "Purchase Order", "Expense Claim"], d.voucher_type)) { if(flt(d.outstanding_amount) > 0) total_positive_outstanding += flt(d.outstanding_amount); diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index 908e58eeac..cc5a9e6ae1 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -509,6 +509,8 @@ def get_outstanding_reference_documents(args): d["exchange_rate"] = get_exchange_rate( party_account_currency, company_currency, d.posting_date ) + if d.voucher_type in ("Purchase Invoice"): + d["bill_no"] = frappe.db.get_value(d.voucher_type, d.voucher_no, "bill_no") # Get all SO / PO which are not fully billed or aginst which full advance not paid orders_to_be_billed = get_orders_to_be_billed(args.get("posting_date"),args.get("party_type"), args.get("party"), diff --git a/erpnext/accounts/doctype/payment_entry_reference/payment_entry_reference.json b/erpnext/accounts/doctype/payment_entry_reference/payment_entry_reference.json index 8104e9b3fc..da17bb3fc8 100644 --- a/erpnext/accounts/doctype/payment_entry_reference/payment_entry_reference.json +++ b/erpnext/accounts/doctype/payment_entry_reference/payment_entry_reference.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_guest_to_view": 0, "allow_import": 0, "allow_rename": 0, "beta": 0, @@ -12,6 +13,7 @@ "engine": "InnoDB", "fields": [ { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -42,6 +44,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -72,6 +75,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -101,6 +105,38 @@ "unique": 0 }, { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "", + "fieldname": "bill_no", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Supplier Invoice No", + "length": 0, + "no_copy": 1, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -129,6 +165,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -158,6 +195,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -187,6 +225,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -216,10 +255,12 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, "columns": 0, + "depends_on": "eval:(doc.reference_doctype=='Purchase Invoice')", "fieldname": "exchange_rate", "fieldtype": "Float", "hidden": 0, @@ -245,17 +286,17 @@ "unique": 0 } ], + "has_web_view": 0, "hide_heading": 0, "hide_toolbar": 0, "idx": 0, "image_view": 0, "in_create": 0, - "in_dialog": 0, "is_submittable": 0, "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2017-02-17 16:47:17.156256", + "modified": "2017-09-04 17:37:01.192312", "modified_by": "Administrator", "module": "Accounts", "name": "Payment Entry Reference", From f6d738b3c5ab1a7b4d05b5d2298798f570968242 Mon Sep 17 00:00:00 2001 From: tundebabzy Date: Mon, 18 Sep 2017 12:40:09 +0100 Subject: [PATCH 51/72] Delivery note to billing issue (#10726) (#10766) * allow invoices to be made from sales returns * Update queries.py --- erpnext/controllers/queries.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/erpnext/controllers/queries.py b/erpnext/controllers/queries.py index 11c0790976..7ada8ccc2f 100644 --- a/erpnext/controllers/queries.py +++ b/erpnext/controllers/queries.py @@ -227,21 +227,30 @@ def get_project_name(doctype, txt, searchfield, start, page_len, filters): "_txt": txt.replace('%', '') }) + def get_delivery_notes_to_be_billed(doctype, txt, searchfield, start, page_len, filters, as_dict): return frappe.db.sql(""" select `tabDelivery Note`.name, `tabDelivery Note`.customer, `tabDelivery Note`.posting_date from `tabDelivery Note` where `tabDelivery Note`.`%(key)s` like %(txt)s and - `tabDelivery Note`.docstatus = 1 and `tabDelivery Note`.is_return = 0 + `tabDelivery Note`.docstatus = 1 and status not in ("Stopped", "Closed") %(fcond)s - and (`tabDelivery Note`.per_billed < 100 or `tabDelivery Note`.grand_total = 0) + and ( + (`tabDelivery Note`.is_return = 0 and `tabDelivery Note`.per_billed < 100) + or `tabDelivery Note`.grand_total = 0 + or ( + `tabDelivery Note`.is_return = 1 + and return_against in (select name from `tabDelivery Note` where per_billed < 100) + ) + ) %(mcond)s order by `tabDelivery Note`.`%(key)s` asc """ % { "key": searchfield, "fcond": get_filters_cond(doctype, filters, []), "mcond": get_match_cond(doctype), "txt": "%(txt)s" - }, { "txt": ("%%%s%%" % txt) }, as_dict=as_dict) + }, {"txt": ("%%%s%%" % txt)}, as_dict=as_dict) + def get_batch_no(doctype, txt, searchfield, start, page_len, filters): cond = "" From d258372f9e50a9d94321dfba0abbbb24fcee7d62 Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Mon, 18 Sep 2017 17:12:16 +0530 Subject: [PATCH 52/72] Added ability to disable auto creation of Sales Invoice when customer pays a payment request (#10706) --- .../accounts_settings/accounts_settings.json | 33 ++++++++++++++++++- .../test_accounts_settings.js | 23 +++++++++++++ .../test_accounts_settings.py | 10 ++++++ .../payment_request/payment_request.py | 3 +- 4 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 erpnext/accounts/doctype/accounts_settings/test_accounts_settings.js create mode 100644 erpnext/accounts/doctype/accounts_settings/test_accounts_settings.py diff --git a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json index 0ce3d5dea9..c2908fa912 100644 --- a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json +++ b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json @@ -286,6 +286,37 @@ "search_index": 0, "set_only_once": 0, "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "description": "If checked, Sales Invoice will not be created when a customer makes a payment against a Payment Request", + "fieldname": "disable_sales_invoice_auto_creation", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Disable Sales Invoice Auto Creation", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 } ], "has_web_view": 0, @@ -299,7 +330,7 @@ "issingle": 1, "istable": 0, "max_attachments": 0, - "modified": "2017-06-16 17:39:50.614522", + "modified": "2017-09-06 09:16:53.577666", "modified_by": "Administrator", "module": "Accounts", "name": "Accounts Settings", diff --git a/erpnext/accounts/doctype/accounts_settings/test_accounts_settings.js b/erpnext/accounts/doctype/accounts_settings/test_accounts_settings.js new file mode 100644 index 0000000000..2f7f2d5779 --- /dev/null +++ b/erpnext/accounts/doctype/accounts_settings/test_accounts_settings.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Accounts Settings", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially([ + // insert a new Accounts Settings + () => frappe.tests.make('Accounts Settings', [ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/accounts/doctype/accounts_settings/test_accounts_settings.py b/erpnext/accounts/doctype/accounts_settings/test_accounts_settings.py new file mode 100644 index 0000000000..8d33bf03e2 --- /dev/null +++ b/erpnext/accounts/doctype/accounts_settings/test_accounts_settings.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors +# See license.txt +from __future__ import unicode_literals + +import frappe +import unittest + +class TestAccountsSettings(unittest.TestCase): + pass diff --git a/erpnext/accounts/doctype/payment_request/payment_request.py b/erpnext/accounts/doctype/payment_request/payment_request.py index f3594b205b..147d4a04f9 100644 --- a/erpnext/accounts/doctype/payment_request/payment_request.py +++ b/erpnext/accounts/doctype/payment_request/payment_request.py @@ -92,7 +92,8 @@ class PaymentRequest(Document): frappe.set_user("Administrator") payment_entry = self.create_payment_entry() - self.make_invoice() + if not frappe.db.get_single_value("Accounts Settings", "disable_sales_invoice_auto_creation"): + self.make_invoice() return payment_entry From e859671eb321a210dd2509aa59c6489ffb89d6e3 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 18 Sep 2017 17:22:46 +0530 Subject: [PATCH 53/72] Revert "Added ability to disable auto creation of Sales Invoice when customer pays a payment request (#10706)" (#10830) This reverts commit d258372f9e50a9d94321dfba0abbbb24fcee7d62. --- .../accounts_settings/accounts_settings.json | 33 +------------------ .../test_accounts_settings.js | 23 ------------- .../test_accounts_settings.py | 10 ------ .../payment_request/payment_request.py | 3 +- 4 files changed, 2 insertions(+), 67 deletions(-) delete mode 100644 erpnext/accounts/doctype/accounts_settings/test_accounts_settings.js delete mode 100644 erpnext/accounts/doctype/accounts_settings/test_accounts_settings.py diff --git a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json index c2908fa912..0ce3d5dea9 100644 --- a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json +++ b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json @@ -286,37 +286,6 @@ "search_index": 0, "set_only_once": 0, "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "description": "If checked, Sales Invoice will not be created when a customer makes a payment against a Payment Request", - "fieldname": "disable_sales_invoice_auto_creation", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Disable Sales Invoice Auto Creation", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 } ], "has_web_view": 0, @@ -330,7 +299,7 @@ "issingle": 1, "istable": 0, "max_attachments": 0, - "modified": "2017-09-06 09:16:53.577666", + "modified": "2017-06-16 17:39:50.614522", "modified_by": "Administrator", "module": "Accounts", "name": "Accounts Settings", diff --git a/erpnext/accounts/doctype/accounts_settings/test_accounts_settings.js b/erpnext/accounts/doctype/accounts_settings/test_accounts_settings.js deleted file mode 100644 index 2f7f2d5779..0000000000 --- a/erpnext/accounts/doctype/accounts_settings/test_accounts_settings.js +++ /dev/null @@ -1,23 +0,0 @@ -/* eslint-disable */ -// rename this file from _test_[name] to test_[name] to activate -// and remove above this line - -QUnit.test("test: Accounts Settings", function (assert) { - let done = assert.async(); - - // number of asserts - assert.expect(1); - - frappe.run_serially([ - // insert a new Accounts Settings - () => frappe.tests.make('Accounts Settings', [ - // values to be set - {key: 'value'} - ]), - () => { - assert.equal(cur_frm.doc.key, 'value'); - }, - () => done() - ]); - -}); diff --git a/erpnext/accounts/doctype/accounts_settings/test_accounts_settings.py b/erpnext/accounts/doctype/accounts_settings/test_accounts_settings.py deleted file mode 100644 index 8d33bf03e2..0000000000 --- a/erpnext/accounts/doctype/accounts_settings/test_accounts_settings.py +++ /dev/null @@ -1,10 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt -from __future__ import unicode_literals - -import frappe -import unittest - -class TestAccountsSettings(unittest.TestCase): - pass diff --git a/erpnext/accounts/doctype/payment_request/payment_request.py b/erpnext/accounts/doctype/payment_request/payment_request.py index 147d4a04f9..f3594b205b 100644 --- a/erpnext/accounts/doctype/payment_request/payment_request.py +++ b/erpnext/accounts/doctype/payment_request/payment_request.py @@ -92,8 +92,7 @@ class PaymentRequest(Document): frappe.set_user("Administrator") payment_entry = self.create_payment_entry() - if not frappe.db.get_single_value("Accounts Settings", "disable_sales_invoice_auto_creation"): - self.make_invoice() + self.make_invoice() return payment_entry From 850eaa73b053f34558e4ef53a01e8f03daccd372 Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Fri, 15 Sep 2017 16:16:36 +0530 Subject: [PATCH 54/72] Move subscription module to accounts (#10772) --- .../doctype/payment_entry/payment_entry.py | 7 ++- .../doctype}/subscription/__init__.py | 0 .../doctype/subscription/subscription.js | 32 ++++++++++ .../doctype/subscription/subscription.json | 56 +++++++++++++++--- .../doctype/subscription/subscription.py | 55 +++++++++++------ .../doctype/subscription/subscription_list.js | 6 +- .../doctype/subscription/test_subscription.js | 0 .../doctype/subscription/test_subscription.py | 2 +- erpnext/config/accounts.py | 6 ++ .../subscription.gif | Bin .../subscription.png | Bin .../docs/user/manual/en/accounts/index.txt | 1 + .../user/manual/en/accounts/subscription.md | 24 ++++++++ erpnext/hooks.py | 2 +- erpnext/modules.txt | 3 +- erpnext/patches.txt | 1 + .../make_subscription_from_recurring_data.py | 2 +- erpnext/patches/v9_0/__init__.py | 1 + .../v9_0/remove_subscription_module.py | 9 +++ erpnext/public/js/utils.js | 2 +- .../doctype/sales_order/sales_order.py | 7 +-- erpnext/subscription/__init__.py | 0 erpnext/subscription/doctype/__init__.py | 0 .../doctype/subscription/__init__.py | 0 .../emails/recurring_document_failed.html | 9 ++- 25 files changed, 183 insertions(+), 42 deletions(-) rename erpnext/{docs/assets/img => accounts/doctype}/subscription/__init__.py (100%) rename erpnext/{subscription => accounts}/doctype/subscription/subscription.js (60%) rename erpnext/{subscription => accounts}/doctype/subscription/subscription.json (94%) rename erpnext/{subscription => accounts}/doctype/subscription/subscription.py (82%) rename erpnext/{subscription => accounts}/doctype/subscription/subscription_list.js (56%) rename erpnext/{subscription => accounts}/doctype/subscription/test_subscription.js (100%) rename erpnext/{subscription => accounts}/doctype/subscription/test_subscription.py (97%) rename erpnext/docs/assets/img/{subscription => accounts}/subscription.gif (100%) rename erpnext/docs/assets/img/{subscription => accounts}/subscription.png (100%) create mode 100644 erpnext/docs/user/manual/en/accounts/subscription.md create mode 100644 erpnext/patches/v9_0/__init__.py create mode 100644 erpnext/patches/v9_0/remove_subscription_module.py delete mode 100644 erpnext/subscription/__init__.py delete mode 100644 erpnext/subscription/doctype/__init__.py delete mode 100644 erpnext/subscription/doctype/subscription/__init__.py diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index cc5a9e6ae1..29ad83152d 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -483,9 +483,14 @@ class PaymentEntry(AccountsController): doc = frappe.get_doc("Expense Claim", d.reference_name) update_reimbursed_amount(doc) + def on_recurring(self, reference_doc, subscription_doc): + self.reference_no = reference_doc.name + self.reference_date = nowdate() + @frappe.whitelist() def get_outstanding_reference_documents(args): - args = json.loads(args) + if isinstance(args, basestring): + args = json.loads(args) party_account_currency = get_account_currency(args.get("party_account")) company_currency = frappe.db.get_value("Company", args.get("company"), "default_currency") diff --git a/erpnext/docs/assets/img/subscription/__init__.py b/erpnext/accounts/doctype/subscription/__init__.py similarity index 100% rename from erpnext/docs/assets/img/subscription/__init__.py rename to erpnext/accounts/doctype/subscription/__init__.py diff --git a/erpnext/subscription/doctype/subscription/subscription.js b/erpnext/accounts/doctype/subscription/subscription.js similarity index 60% rename from erpnext/subscription/doctype/subscription/subscription.js rename to erpnext/accounts/doctype/subscription/subscription.js index 0b2b2fa83a..c9b3c6480d 100644 --- a/erpnext/subscription/doctype/subscription/subscription.js +++ b/erpnext/accounts/doctype/subscription/subscription.js @@ -40,6 +40,38 @@ frappe.ui.form.on('Subscription', { frappe.set_route("List", frm.doc.reference_doctype); } ); + + if(frm.doc.status != 'Stopped') { + frm.add_custom_button(__("Stop"), + function() { + frm.events.stop_resume_subscription(frm, "Stopped"); + } + ); + } + + if(frm.doc.status == 'Stopped') { + frm.add_custom_button(__("Resume"), + function() { + frm.events.stop_resume_subscription(frm, "Resumed"); + } + ); + } } + }, + + stop_resume_subscription: function(frm, status) { + frappe.call({ + method: "erpnext.accounts.doctype.subscription.subscription.stop_resume_subscription", + args: { + subscription: frm.doc.name, + status: status + }, + callback: function(r) { + if(r.message) { + frm.set_value("status", r.message); + frm.reload_doc(); + } + } + }); } }); \ No newline at end of file diff --git a/erpnext/subscription/doctype/subscription/subscription.json b/erpnext/accounts/doctype/subscription/subscription.json similarity index 94% rename from erpnext/subscription/doctype/subscription/subscription.json rename to erpnext/accounts/doctype/subscription/subscription.json index 6cfee1e44f..85779533ea 100644 --- a/erpnext/subscription/doctype/subscription/subscription.json +++ b/erpnext/accounts/doctype/subscription/subscription.json @@ -148,7 +148,7 @@ "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 0, - "in_list_view": 0, + "in_list_view": 1, "in_standard_filter": 0, "label": "Disabled", "length": 0, @@ -619,24 +619,24 @@ }, { "allow_bulk_edit": 0, - "allow_on_submit": 0, + "allow_on_submit": 1, "bold": 0, "collapsible": 0, "columns": 0, "default": "Draft", "fieldname": "status", "fieldtype": "Select", - "hidden": 1, + "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, "in_global_search": 0, - "in_list_view": 0, + "in_list_view": 1, "in_standard_filter": 0, "label": "Status", "length": 0, "no_copy": 0, - "options": "\nDraft\nSubmitted\nCancelled\nCompleted", + "options": "\nDraft\nStopped\nSubmitted\nCancelled\nCompleted", "permlevel": 0, "precision": "", "print_hide": 0, @@ -690,9 +690,9 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2017-08-29 15:45:16.157643", + "modified": "2017-09-14 12:09:38.471458", "modified_by": "Administrator", - "module": "Subscription", + "module": "Accounts", "name": "Subscription", "name_case": "", "owner": "Administrator", @@ -700,7 +700,7 @@ { "amend": 0, "apply_user_permissions": 0, - "cancel": 1, + "cancel": 0, "create": 1, "delete": 1, "email": 1, @@ -716,6 +716,46 @@ "share": 1, "submit": 1, "write": 1 + }, + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts User", + "set_user_permissions": 0, + "share": 1, + "submit": 1, + "write": 1 + }, + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Accounts Manager", + "set_user_permissions": 0, + "share": 1, + "submit": 1, + "write": 1 } ], "quick_entry": 0, diff --git a/erpnext/subscription/doctype/subscription/subscription.py b/erpnext/accounts/doctype/subscription/subscription.py similarity index 82% rename from erpnext/subscription/doctype/subscription/subscription.py rename to erpnext/accounts/doctype/subscription/subscription.py index be36211ec2..c9df7d461e 100644 --- a/erpnext/subscription/doctype/subscription/subscription.py +++ b/erpnext/accounts/doctype/subscription/subscription.py @@ -71,13 +71,16 @@ class Subscription(Document): doc.db_set('subscription', self.name) - def update_status(self): + def update_status(self, status=None): self.status = { '0': 'Draft', '1': 'Submitted', '2': 'Cancelled' }[cstr(self.docstatus or 0)] + if status and status != 'Resumed': + self.status = status + def get_next_schedule_date(start_date, frequency, repeat_on_day): mcount = month_map.get(frequency) if mcount: @@ -93,11 +96,10 @@ def make_subscription_entry(date=None): schedule_date = getdate(data.next_schedule_date) while schedule_date <= getdate(today()): create_documents(data, schedule_date) - schedule_date = get_next_schedule_date(schedule_date, data.frequency, data.repeat_on_day) - if schedule_date: + if schedule_date and not frappe.db.get_value('Subscription', data.name, 'disabled'): frappe.db.set_value('Subscription', data.name, 'next_schedule_date', schedule_date) def get_subscription_entries(date): @@ -105,23 +107,29 @@ def get_subscription_entries(date): where docstatus = 1 and next_schedule_date <=%s and reference_document is not null and reference_document != '' and next_schedule_date <= ifnull(end_date, '2199-12-31') - and ifnull(disabled, 0) = 0""", (date), as_dict=1) + and ifnull(disabled, 0) = 0 and status != 'Stopped' """, (date), as_dict=1) def create_documents(data, schedule_date): try: doc = make_new_document(data, schedule_date) - if data.notify_by_email: - send_notification(doc, data.print_format, data.recipients) + if data.notify_by_email and data.recipients: + print_format = data.print_format or "Standard" + send_notification(doc, print_format, data.recipients) frappe.db.commit() except Exception: frappe.db.rollback() frappe.db.begin() frappe.log_error(frappe.get_traceback()) + disabled_subscription(data) frappe.db.commit() if data.reference_document and not frappe.flags.in_test: notify_error_to_user(data) +def disabled_subscription(data): + subscription = frappe.get_doc('Subscription', data.name) + subscription.db_set('disabled', 1) + def notify_error_to_user(data): party = '' party_type = '' @@ -134,7 +142,7 @@ def notify_error_to_user(data): if party_type: party = frappe.db.get_value(data.reference_doctype, data.reference_document, party_type) - notify_errors(data.reference_document, data.reference_doctype, party, data.owner) + notify_errors(data.reference_document, data.reference_doctype, party, data.owner, data.name) def make_new_document(args, schedule_date): doc = frappe.get_doc(args.reference_doctype, args.reference_document) @@ -168,32 +176,32 @@ def get_next_date(dt, mcount, day=None): def send_notification(new_rv, print_format='Standard', recipients=None): """Notify concerned persons about recurring document generation""" - recipients = recipients or new_rv.notification_email_address - print_format = print_format or new_rv.recurring_print_format + print_format = print_format frappe.sendmail(recipients, subject= _("New {0}: #{1}").format(new_rv.doctype, new_rv.name), message = _("Please find attached {0} #{1}").format(new_rv.doctype, new_rv.name), attachments = [frappe.attach_print(new_rv.doctype, new_rv.name, file_name=new_rv.name, print_format=print_format)]) -def notify_errors(doc, doctype, party, owner): +def notify_errors(doc, doctype, party, owner, name): recipients = get_system_managers(only_name=True) frappe.sendmail(recipients + [frappe.db.get_value("User", owner, "email")], - subject="[Urgent] Error while creating recurring %s for %s" % (doctype, doc), + subject=_("[Urgent] Error while creating recurring %s for %s" % (doctype, doc)), message = frappe.get_template("templates/emails/recurring_document_failed.html").render({ - "type": doctype, + "type": _(doctype), "name": doc, - "party": party or "" + "party": party or "", + "subscription": name })) - assign_task_to_owner(doc, doctype, "Recurring Invoice Failed", recipients) + assign_task_to_owner(name, "Recurring Documents Failed", recipients) -def assign_task_to_owner(doc, doctype, msg, users): +def assign_task_to_owner(name, msg, users): for d in users: args = { + 'doctype' : 'Subscription', 'assign_to' : d, - 'doctype' : doctype, - 'name' : doc, + 'name' : name, 'description' : msg, 'priority' : 'High' } @@ -205,3 +213,16 @@ def make_subscription(doctype, docname): doc.reference_doctype = doctype doc.reference_document = docname return doc + +@frappe.whitelist() +def stop_resume_subscription(subscription, status): + doc = frappe.get_doc('Subscription', subscription) + frappe.msgprint(_("Subscription has been {0}").format(status)) + if status == 'Resumed': + doc.next_schedule_date = get_next_schedule_date(today(), + doc.frequency, doc.repeat_on_day) + + doc.update_status(status) + doc.save() + + return doc.status \ No newline at end of file diff --git a/erpnext/subscription/doctype/subscription/subscription_list.js b/erpnext/accounts/doctype/subscription/subscription_list.js similarity index 56% rename from erpnext/subscription/doctype/subscription/subscription_list.js rename to erpnext/accounts/doctype/subscription/subscription_list.js index 6a33638b39..71e3cce79d 100644 --- a/erpnext/subscription/doctype/subscription/subscription_list.js +++ b/erpnext/accounts/doctype/subscription/subscription_list.js @@ -1,10 +1,14 @@ frappe.listview_settings['Subscription'] = { add_fields: ["next_schedule_date"], get_indicator: function(doc) { - if(doc.next_schedule_date >= frappe.datetime.get_today() ) { + if(doc.disabled) { + return [__("Disabled"), "red"]; + } else if(doc.next_schedule_date >= frappe.datetime.get_today() && doc.status != 'Stopped') { return [__("Active"), "green"]; } else if(doc.docstatus === 0) { return [__("Draft"), "red", "docstatus,=,0"]; + } else if(doc.status === 'Stopped') { + return [__("Stopped"), "red"]; } else { return [__("Expired"), "darkgrey"]; } diff --git a/erpnext/subscription/doctype/subscription/test_subscription.js b/erpnext/accounts/doctype/subscription/test_subscription.js similarity index 100% rename from erpnext/subscription/doctype/subscription/test_subscription.js rename to erpnext/accounts/doctype/subscription/test_subscription.js diff --git a/erpnext/subscription/doctype/subscription/test_subscription.py b/erpnext/accounts/doctype/subscription/test_subscription.py similarity index 97% rename from erpnext/subscription/doctype/subscription/test_subscription.py rename to erpnext/accounts/doctype/subscription/test_subscription.py index 28f8be7257..b74163c92e 100644 --- a/erpnext/subscription/doctype/subscription/test_subscription.py +++ b/erpnext/accounts/doctype/subscription/test_subscription.py @@ -10,7 +10,7 @@ from erpnext.accounts.utils import get_fiscal_year from erpnext.accounts.report.financial_statements import get_months from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice from erpnext.selling.doctype.sales_order.test_sales_order import make_sales_order -from erpnext.subscription.doctype.subscription.subscription import make_subscription_entry +from erpnext.accounts.doctype.subscription.subscription import make_subscription_entry class TestSubscription(unittest.TestCase): def test_daily_subscription(self): diff --git a/erpnext/config/accounts.py b/erpnext/config/accounts.py index 6d16e9202e..7c0f540154 100644 --- a/erpnext/config/accounts.py +++ b/erpnext/config/accounts.py @@ -32,6 +32,12 @@ def get_data(): "label": _("POS"), "description": _("Point of Sale") }, + { + "type": "doctype", + "name": "Subscription", + "label": _("Subscription"), + "description": _("To make recurring documents") + }, { "type": "report", "name": "Accounts Receivable", diff --git a/erpnext/docs/assets/img/subscription/subscription.gif b/erpnext/docs/assets/img/accounts/subscription.gif similarity index 100% rename from erpnext/docs/assets/img/subscription/subscription.gif rename to erpnext/docs/assets/img/accounts/subscription.gif diff --git a/erpnext/docs/assets/img/subscription/subscription.png b/erpnext/docs/assets/img/accounts/subscription.png similarity index 100% rename from erpnext/docs/assets/img/subscription/subscription.png rename to erpnext/docs/assets/img/accounts/subscription.png diff --git a/erpnext/docs/user/manual/en/accounts/index.txt b/erpnext/docs/user/manual/en/accounts/index.txt index 6a0da3a894..41cb243dc6 100644 --- a/erpnext/docs/user/manual/en/accounts/index.txt +++ b/erpnext/docs/user/manual/en/accounts/index.txt @@ -6,6 +6,7 @@ purchase-invoice payments journal-entry payment-entry +subscription multi-currency-accounting advance-payment-entry payment-request diff --git a/erpnext/docs/user/manual/en/accounts/subscription.md b/erpnext/docs/user/manual/en/accounts/subscription.md new file mode 100644 index 0000000000..9afab58e25 --- /dev/null +++ b/erpnext/docs/user/manual/en/accounts/subscription.md @@ -0,0 +1,24 @@ +# Subscription + +If you have a contract with the Customer where your organization gives bill to the Customer on a monthly, quarterly, half-yearly or annual basis, you can use subscription feature to make auto invoicing. + +Subscription + +#### Scenario + +Subscription for your hosted ERPNext account requires yearly renewal. We use Sales Invoice for generating proforma invoices. To automate proforma invoicing for renewal, we set original Sales Invoice on the subscription form. Recurring proforma invoice is created automatically just before customer's account is about to expire, and requires renewal. This recurring Proforma Invoice is also emailed automatically to the customer. + +To set the subscription for the sales invoice +Goto Subscription > select base doctype "Sales Invoice" > select base docname "Invoice No" > Save + +Subscription + +**From Date and To Date**: This defines contract period with the customer. + +**Repeat on Day**: If frequency is set as Monthly, then it will be day of the month on which recurring invoice will be generated. + +**Notify By Email**: If you want to notify the user about auto recurring invoice. + +**Print Format**: Select a print format to define document view which should be emailed to customer. + +**Disabled**: It will stop to make auto recurring documents against the subscription \ No newline at end of file diff --git a/erpnext/hooks.py b/erpnext/hooks.py index 26c7a3aa61..8306290f72 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -192,7 +192,7 @@ doc_events = { scheduler_events = { "hourly": [ - "erpnext.subscription.doctype.subscription.subscription.make_subscription_entry", + "erpnext.accounts.doctype.subscription.subscription.make_subscription_entry", 'erpnext.hr.doctype.daily_work_summary_settings.daily_work_summary_settings.trigger_emails' ], "daily": [ diff --git a/erpnext/modules.txt b/erpnext/modules.txt index 6f4a5b7a59..04344a0abb 100644 --- a/erpnext/modules.txt +++ b/erpnext/modules.txt @@ -15,5 +15,4 @@ Portal Maintenance Schools Regional -Healthcare -Subscription \ No newline at end of file +Healthcare \ No newline at end of file diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 1a082a366f..5d026a62d4 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -439,6 +439,7 @@ erpnext.patches.v8_7.set_offline_in_pos_settings #11-09-17 erpnext.patches.v8_9.add_setup_progress_actions #08-09-2017 erpnext.patches.v8_9.rename_company_sales_target_field erpnext.patches.v8_8.set_bom_rate_as_per_uom +erpnext.patches.v9_0.remove_subscription_module erpnext.patches.v8_7.make_subscription_from_recurring_data erpnext.patches.v8_9.set_print_zero_amount_taxes erpnext.patches.v8_9.set_default_customer_group \ No newline at end of file diff --git a/erpnext/patches/v8_7/make_subscription_from_recurring_data.py b/erpnext/patches/v8_7/make_subscription_from_recurring_data.py index 03d8eb4193..89eca1a0ec 100644 --- a/erpnext/patches/v8_7/make_subscription_from_recurring_data.py +++ b/erpnext/patches/v8_7/make_subscription_from_recurring_data.py @@ -6,7 +6,7 @@ import frappe from frappe.utils import today def execute(): - frappe.reload_doc('subscription', 'doctype', 'subscription') + frappe.reload_doc('accounts', 'doctype', 'subscription') frappe.reload_doc('selling', 'doctype', 'sales_order') frappe.reload_doc('buying', 'doctype', 'purchase_order') frappe.reload_doc('accounts', 'doctype', 'sales_invoice') diff --git a/erpnext/patches/v9_0/__init__.py b/erpnext/patches/v9_0/__init__.py new file mode 100644 index 0000000000..baffc48825 --- /dev/null +++ b/erpnext/patches/v9_0/__init__.py @@ -0,0 +1 @@ +from __future__ import unicode_literals diff --git a/erpnext/patches/v9_0/remove_subscription_module.py b/erpnext/patches/v9_0/remove_subscription_module.py new file mode 100644 index 0000000000..493873f3e8 --- /dev/null +++ b/erpnext/patches/v9_0/remove_subscription_module.py @@ -0,0 +1,9 @@ +# Copyright (c) 2017, Frappe and Contributors +# License: GNU General Public License v3. See license.txt + +from __future__ import unicode_literals +import frappe + +def execute(): + if frappe.db.exists('Module Def', 'Subscription'): + frappe.db.sql(""" delete from `tabModule Def` where name = 'Subscription'""") \ No newline at end of file diff --git a/erpnext/public/js/utils.js b/erpnext/public/js/utils.js index 8a47df6371..721f216888 100644 --- a/erpnext/public/js/utils.js +++ b/erpnext/public/js/utils.js @@ -129,7 +129,7 @@ $.extend(erpnext.utils, { make_subscription: function(doctype, docname) { frappe.call({ - method: "erpnext.subscription.doctype.subscription.subscription.make_subscription", + method: "erpnext.accounts.doctype.subscription.subscription.make_subscription", args: { doctype: doctype, docname: docname diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index 5f828900d5..8720482549 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -13,7 +13,7 @@ from erpnext.stock.stock_balance import update_bin_qty, get_reserved_qty from frappe.desk.notifications import clear_doctype_notifications from frappe.contacts.doctype.address.address import get_company_address from erpnext.controllers.selling_controller import SellingController -from erpnext.subscription.doctype.subscription.subscription import month_map, get_next_date +from erpnext.accounts.doctype.subscription.subscription import get_next_schedule_date form_grid_templates = { "items": "templates/form_grid/item_grid.html" @@ -347,8 +347,7 @@ class SalesOrder(SellingController): return items def on_recurring(self, reference_doc, subscription_doc): - mcount = month_map[subscription_doc.frequency] - self.set("delivery_date", get_next_date(reference_doc.delivery_date, mcount, + self.set("delivery_date", get_next_schedule_date(reference_doc.delivery_date, subscription_doc.frequency, cint(subscription_doc.repeat_on_day))) for d in self.get("items"): @@ -356,7 +355,7 @@ class SalesOrder(SellingController): {"parent": reference_doc.name, "item_code": d.item_code, "idx": d.idx}, "delivery_date") d.set("delivery_date", - get_next_date(reference_delivery_date, mcount, cint(subscription_doc.repeat_on_day))) + get_next_schedule_date(reference_delivery_date, subscription_doc.frequency, cint(subscription_doc.repeat_on_day))) def get_list_context(context=None): from erpnext.controllers.website_list_for_contact import get_list_context diff --git a/erpnext/subscription/__init__.py b/erpnext/subscription/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/subscription/doctype/__init__.py b/erpnext/subscription/doctype/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/subscription/doctype/subscription/__init__.py b/erpnext/subscription/doctype/subscription/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/templates/emails/recurring_document_failed.html b/erpnext/templates/emails/recurring_document_failed.html index 9b88731178..ea48034f41 100644 --- a/erpnext/templates/emails/recurring_document_failed.html +++ b/erpnext/templates/emails/recurring_document_failed.html @@ -1,12 +1,11 @@ -

    Recurring {{ type }} Failed

    +

    {{_("Recurring")}} {{ type }} {{ _("Failed")}}

    An error occured while creating recurring {{ type }} {{ name }} for {{ party }}.

    This could be because of some invalid Email Addresses in the {{ type }}.

    -

    To stop sending repetitive error notifications from the system, we have unchecked -"Convert into Recurring" field in the {{ type }} {{ name }}.

    -

    Please correct the {{ type }} and make the {{ type }} recurring again.

    +

    To stop sending repetitive error notifications from the system, we have checked "Disabled" field in the subscription {{ subscription}} for the {{ type }} {{ name }}.

    +

    Please correct the {{ type }} and unchcked "Disabled" in the {{ subscription }} for making recurring again.


    It is necessary to take this action today itself for the above mentioned recurring {{ type }} to be generated. If delayed, you will have to manually change the "Repeat on Day of Month" field -of this {{ type }} for generating the recurring {{ type }}.

    +of this {{ type }} for generating the recurring {{ type }} in the subscription {{ subscription }}.

    [This email is autogenerated]

    From d02744b436110b4960ec46b88d6b6970db85efc9 Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Mon, 18 Sep 2017 16:58:05 +0530 Subject: [PATCH 55/72] [fix] Subscription patch (#10827) --- .../patches/v8_7/make_subscription_from_recurring_data.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/erpnext/patches/v8_7/make_subscription_from_recurring_data.py b/erpnext/patches/v8_7/make_subscription_from_recurring_data.py index 89eca1a0ec..89830a22f8 100644 --- a/erpnext/patches/v8_7/make_subscription_from_recurring_data.py +++ b/erpnext/patches/v8_7/make_subscription_from_recurring_data.py @@ -18,7 +18,7 @@ def execute(): make_subscription(doctype, data) def get_data(doctype): - return frappe.db.sql(""" select name, from_date, end_date, recurring_type,recurring_id + return frappe.db.sql(""" select name, from_date, end_date, recurring_type,recurring_id, next_date, notify_by_email, notification_email_address, recurring_print_format, repeat_on_day_of_month, submit_on_creation from `tab{0}` where is_recurring = 1 and next_date >= %s @@ -39,7 +39,4 @@ def make_subscription(doctype, data): 'submit_on_creation': data.submit_on_creation }).insert(ignore_permissions=True) - doc.submit() - - if not doc.subscription: - frappe.db.set_value(doctype, data.name, "subscription", doc.name) \ No newline at end of file + doc.submit() \ No newline at end of file From cf36534eeda9f5a3fd7aaaa00408324bdf1c06ad Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 18 Sep 2017 19:13:45 +0530 Subject: [PATCH 56/72] Gross profit report considering returned items (#10734) --- .../report/gross_profit/gross_profit.py | 102 ++++++++++++------ 1 file changed, 68 insertions(+), 34 deletions(-) diff --git a/erpnext/accounts/report/gross_profit/gross_profit.py b/erpnext/accounts/report/gross_profit/gross_profit.py index e2106e2d62..07f6979c40 100644 --- a/erpnext/accounts/report/gross_profit/gross_profit.py +++ b/erpnext/accounts/report/gross_profit/gross_profit.py @@ -17,7 +17,6 @@ def execute(filters=None): gross_profit_data = GrossProfitGenerator(filters) data = [] - source = gross_profit_data.grouped_data if filters.get("group_by") != "Invoice" else gross_profit_data.data group_wise_columns = frappe._dict({ "invoice": ["parent", "customer", "customer_group", "posting_date","item_code", "item_name","item_group", "brand", "description", \ @@ -45,7 +44,7 @@ def execute(filters=None): columns = get_columns(group_wise_columns, filters) - for src in source: + for src in gross_profit_data.grouped_data: row = [] for col in group_wise_columns.get(scrub(filters.group_by)): row.append(src.get(col)) @@ -103,6 +102,7 @@ class GrossProfitGenerator(object): self.load_stock_ledger_entries() self.load_product_bundle() self.load_non_stock_items() + self.get_returned_invoice_items() self.process() def process(self): @@ -143,40 +143,68 @@ class GrossProfitGenerator(object): row.gross_profit_percent = 0.0 # add to grouped - if self.filters.group_by != "Invoice": - self.grouped.setdefault(row.get(scrub(self.filters.group_by)), []).append(row) - - self.data.append(row) + self.grouped.setdefault(row.get(scrub(self.filters.group_by)), []).append(row) if self.grouped: self.get_average_rate_based_on_group_by() - else: - self.grouped_data = [] def get_average_rate_based_on_group_by(self): # sum buying / selling totals for group self.grouped_data = [] for key in self.grouped.keys(): - for i, row in enumerate(self.grouped[key]): - if i==0: - new_row = row - else: - new_row.qty += row.qty - new_row.buying_amount += row.buying_amount - new_row.base_amount += row.base_amount + if self.filters.get("group_by") != "Invoice": + for i, row in enumerate(self.grouped[key]): + if i==0: + new_row = row + else: + new_row.qty += row.qty + new_row.buying_amount += row.buying_amount + new_row.base_amount += row.base_amount + new_row = self.set_average_rate(new_row) + self.grouped_data.append(new_row) + else: + for i, row in enumerate(self.grouped[key]): + if row.parent in self.returned_invoices \ + and row.item_code in self.returned_invoices[row.parent]: + returned_item_rows = self.returned_invoices[row.parent][row.item_code] + for returned_item_row in returned_item_rows: + row.qty += returned_item_row.qty + row.base_amount += returned_item_row.base_amount + row.buying_amount = row.qty * row.buying_rate + if row.qty: + row = self.set_average_rate(row) + self.grouped_data.append(row) - new_row.gross_profit = new_row.base_amount - new_row.buying_amount - new_row.gross_profit_percent = ((new_row.gross_profit / new_row.base_amount) * 100.0) \ - if new_row.base_amount else 0 - new_row.buying_rate = (new_row.buying_amount / new_row.qty) \ - if new_row.qty else 0 - new_row.base_rate = (new_row.base_amount / new_row.qty) \ - if new_row.qty else 0 + def set_average_rate(self, new_row): + new_row.gross_profit = new_row.base_amount - new_row.buying_amount + new_row.gross_profit_percent = ((new_row.gross_profit / new_row.base_amount) * 100.0) \ + if new_row.base_amount else 0 + new_row.buying_rate = (new_row.buying_amount / new_row.qty) if new_row.qty else 0 + new_row.base_rate = (new_row.base_amount / new_row.qty) if new_row.qty else 0 + return new_row - self.grouped_data.append(new_row) + def get_returned_invoice_items(self): + returned_invoices = frappe.db.sql(""" + select + si.name, si_item.item_code, si_item.qty, si_item.base_amount, si.return_against + from + `tabSales Invoice` si, `tabSales Invoice Item` si_item + where + si.name = si_item.parent + and si.docstatus = 1 + and si.is_return = 1 + """, as_dict=1) + + self.returned_invoices = frappe._dict() + for inv in returned_invoices: + self.returned_invoices.setdefault(inv.return_against, frappe._dict())\ + .setdefault(inv.item_code, []).append(inv) def skip_row(self, row, product_bundles): - if self.filters.get("group_by") != "Invoice" and not row.get(scrub(self.filters.get("group_by"))): + if self.filters.get("group_by") != "Invoice": + if not row.get(scrub(self.filters.get("group_by"))): + return True + elif row.get("is_return") == 1: return True def get_buying_amount_from_product_bundle(self, row, product_bundle): @@ -268,20 +296,26 @@ class GrossProfitGenerator(object): sales_person_cols = "" sales_team_table = "" - self.si_list = frappe.db.sql("""select `tabSales Invoice Item`.parenttype, `tabSales Invoice Item`.parent, - `tabSales Invoice`.posting_date, `tabSales Invoice`.posting_time, `tabSales Invoice`.project, `tabSales Invoice`.update_stock, - `tabSales Invoice`.customer, `tabSales Invoice`.customer_group, `tabSales Invoice`.territory, - `tabSales Invoice Item`.item_code, `tabSales Invoice Item`.item_name, `tabSales Invoice Item`.description, - `tabSales Invoice Item`.warehouse, `tabSales Invoice Item`.item_group, `tabSales Invoice Item`.brand, - `tabSales Invoice Item`.dn_detail, `tabSales Invoice Item`.delivery_note, `tabSales Invoice Item`.stock_qty as qty, - `tabSales Invoice Item`.base_net_rate, `tabSales Invoice Item`.base_net_amount, `tabSales Invoice Item`.name as "item_row" + self.si_list = frappe.db.sql(""" + select + `tabSales Invoice Item`.parenttype, `tabSales Invoice Item`.parent, + `tabSales Invoice`.posting_date, `tabSales Invoice`.posting_time, + `tabSales Invoice`.project, `tabSales Invoice`.update_stock, + `tabSales Invoice`.customer, `tabSales Invoice`.customer_group, + `tabSales Invoice`.territory, `tabSales Invoice Item`.item_code, + `tabSales Invoice Item`.item_name, `tabSales Invoice Item`.description, + `tabSales Invoice Item`.warehouse, `tabSales Invoice Item`.item_group, + `tabSales Invoice Item`.brand, `tabSales Invoice Item`.dn_detail, + `tabSales Invoice Item`.delivery_note, `tabSales Invoice Item`.stock_qty as qty, + `tabSales Invoice Item`.base_net_rate, `tabSales Invoice Item`.base_net_amount, + `tabSales Invoice Item`.name as "item_row", `tabSales Invoice`.is_return {sales_person_cols} from - `tabSales Invoice` - inner join `tabSales Invoice Item` on `tabSales Invoice Item`.parent = `tabSales Invoice`.name + `tabSales Invoice` inner join `tabSales Invoice Item` + on `tabSales Invoice Item`.parent = `tabSales Invoice`.name {sales_team_table} where - `tabSales Invoice`.docstatus = 1 {conditions} {match_cond} + `tabSales Invoice`.docstatus=1 {conditions} {match_cond} order by `tabSales Invoice`.posting_date desc, `tabSales Invoice`.posting_time desc""" .format(conditions=conditions, sales_person_cols=sales_person_cols, From 703e83712506aaf26d7e323aafb8b2c8e2e72a01 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 19 Sep 2017 12:35:39 +0600 Subject: [PATCH 57/72] bumped to version 8.11.4 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 65ccec47fd..61381b2703 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -4,7 +4,7 @@ import inspect import frappe from erpnext.hooks import regional_overrides -__version__ = '8.11.3' +__version__ = '8.11.4' def get_default_company(user=None): '''Get default company for user''' From c15a3bd379a55e25d2b027d58c3e48b12a8639fe Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Tue, 19 Sep 2017 12:53:01 +0530 Subject: [PATCH 58/72] [fix] Subscription patch broken if reference document has been cancelled --- .../patches/v8_7/make_subscription_from_recurring_data.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/erpnext/patches/v8_7/make_subscription_from_recurring_data.py b/erpnext/patches/v8_7/make_subscription_from_recurring_data.py index 89830a22f8..ab0fc121fc 100644 --- a/erpnext/patches/v8_7/make_subscription_from_recurring_data.py +++ b/erpnext/patches/v8_7/make_subscription_from_recurring_data.py @@ -20,8 +20,8 @@ def execute(): def get_data(doctype): return frappe.db.sql(""" select name, from_date, end_date, recurring_type,recurring_id, next_date, notify_by_email, notification_email_address, recurring_print_format, - repeat_on_day_of_month, submit_on_creation - from `tab{0}` where is_recurring = 1 and next_date >= %s + repeat_on_day_of_month, submit_on_creation, docstatus + from `tab{0}` where is_recurring = 1 and next_date >= %s and docstatus < 2 """.format(doctype), today(), as_dict=1) def make_subscription(doctype, data): @@ -39,4 +39,5 @@ def make_subscription(doctype, data): 'submit_on_creation': data.submit_on_creation }).insert(ignore_permissions=True) - doc.submit() \ No newline at end of file + if data.docstatus == 1: + doc.submit() \ No newline at end of file From 2e4de83df6b6bd891981f441cc6aad2dd0f90d03 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 19 Sep 2017 14:53:16 +0530 Subject: [PATCH 59/72] Rounding Adjustment via a separate field, instead of last tax row (#10659) * Rounding Adjust via a separate field, instead of last tax row * Fixed test cases --- .../purchase_invoice/purchase_invoice.json | 62 +++++++++ .../purchase_invoice/purchase_invoice.py | 17 +++ .../doctype/sales_invoice/sales_invoice.json | 122 +++++++++++++----- .../doctype/sales_invoice/sales_invoice.py | 17 +++ .../sales_invoice/test_sales_invoice.py | 87 +++++++++---- erpnext/accounts/general_ledger.py | 20 +-- .../purchase_order/purchase_order.json | 62 +++++++++ .../supplier_quotation.json | 62 +++++++++ erpnext/controllers/taxes_and_totals.py | 90 +++++++------ .../public/js/controllers/taxes_and_totals.js | 71 +++++----- erpnext/public/js/controllers/transaction.js | 26 ++-- .../selling/doctype/quotation/quotation.json | 62 +++++++++ .../doctype/sales_order/sales_order.json | 63 +++++++++ .../doctype/delivery_note/delivery_note.json | 62 +++++++++ .../purchase_receipt/purchase_receipt.json | 64 ++++++++- 15 files changed, 733 insertions(+), 154 deletions(-) diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json index 748c24ddea..e5e7e6d6bf 100755 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json @@ -2072,6 +2072,37 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "base_rounding_adjustment", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Rounding Adjustment (Company Currency)", + "length": 0, + "no_copy": 1, + "options": "Company:company:default_currency", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -2166,6 +2197,37 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "rounding_adjustment", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Rounding Adjustment", + "length": 0, + "no_copy": 1, + "options": "currency", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py index be388aac85..a46c4b96c3 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py @@ -15,6 +15,7 @@ from erpnext.stock import get_warehouse_account_map from erpnext.accounts.general_ledger import make_gl_entries, merge_similar_entries, delete_gl_entries from erpnext.accounts.doctype.gl_entry.gl_entry import update_outstanding_amt from erpnext.buying.utils import check_for_closed_status +from erpnext.accounts.general_ledger import get_round_off_account_and_cost_center form_grid_templates = { "items": "templates/form_grid/item_grid.html" @@ -353,6 +354,7 @@ class PurchaseInvoice(BuyingController): self.make_payment_gl_entries(gl_entries) self.make_write_off_gl_entry(gl_entries) + self.make_gle_for_rounding_adjustment(gl_entries) return gl_entries @@ -584,6 +586,21 @@ class PurchaseInvoice(BuyingController): }) ) + def make_gle_for_rounding_adjustment(self, gl_entries): + if self.rounding_adjustment: + round_off_account, round_off_cost_center = \ + get_round_off_account_and_cost_center(self.company) + + gl_entries.append( + self.get_gl_dict({ + "account": round_off_account, + "against": self.supplier, + "debit_in_account_currency": self.rounding_adjustment, + "debit": self.base_rounding_adjustment, + "cost_center": round_off_cost_center, + } + )) + def on_cancel(self): self.check_for_closed_status() diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json index 2bb0044fbd..e00ba9b07b 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json @@ -1670,36 +1670,6 @@ "set_only_once": 0, "unique": 0 }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "net_total", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Net Total", - "length": 0, - "no_copy": 0, - "options": "currency", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -1731,6 +1701,36 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "net_total", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Net Total", + "length": 0, + "no_copy": 0, + "options": "currency", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -2337,6 +2337,37 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "base_rounding_adjustment", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Rounding Adjustment (Company Currency)", + "length": 0, + "no_copy": 1, + "options": "Company:company:default_currency", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -2463,6 +2494,37 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "rounding_adjustment", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Rounding Adjustment", + "length": 0, + "no_copy": 1, + "options": "currency", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index 065fb94ed2..7a787c4cba 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -20,6 +20,7 @@ from erpnext.accounts.doctype.asset.depreciation \ from erpnext.stock.doctype.batch.batch import set_batch_nos from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos, get_delivery_note_serial_no from erpnext.setup.doctype.company.company import update_company_current_month_sales +from erpnext.accounts.general_ledger import get_round_off_account_and_cost_center form_grid_templates = { "items": "templates/form_grid/item_grid.html" @@ -625,6 +626,7 @@ class SalesInvoice(SellingController): self.make_gle_for_change_amount(gl_entries) self.make_write_off_gl_entry(gl_entries) + self.make_gle_for_rounding_adjustment(gl_entries) return gl_entries @@ -784,6 +786,21 @@ class SalesInvoice(SellingController): }, write_off_account_currency) ) + def make_gle_for_rounding_adjustment(self, gl_entries): + if self.rounding_adjustment: + round_off_account, round_off_cost_center = \ + get_round_off_account_and_cost_center(self.company) + + gl_entries.append( + self.get_gl_dict({ + "account": round_off_account, + "against": self.customer, + "credit_in_account_currency": self.rounding_adjustment, + "credit": self.base_rounding_adjustment, + "cost_center": round_off_cost_center, + } + )) + def update_billing_status_in_dn(self, update_modified=True): updated_delivery_notes = [] for d in self.get("items"): diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py index db29563631..4dae78c8c4 100644 --- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py @@ -215,12 +215,12 @@ class TestSalesInvoice(unittest.TestCase): si.save() # with inclusive tax and additional discount - self.assertEquals(si.net_total, 4298.24) + self.assertEquals(si.net_total, 4298.25) self.assertEquals(si.grand_total, 4900.00) def test_sales_invoice_discount_amount(self): si = frappe.copy_doc(test_records[3]) - si.discount_amount = 104.95 + si.discount_amount = 104.94 si.append("taxes", { "charge_type": "On Previous Row Amount", "account_head": "_Test Account Service Tax - _TC", @@ -285,7 +285,7 @@ class TestSalesInvoice(unittest.TestCase): "_Test Account Customs Duty - _TC": [125, 116.35, 1585.40], "_Test Account Shipping Charges - _TC": [100, 100, 1685.40], "_Test Account Discount - _TC": [-180.33, -168.54, 1516.86], - "_Test Account Service Tax - _TC": [-18.03, -16.86, 1500] + "_Test Account Service Tax - _TC": [-18.03, -16.85, 1500.01] } for d in si.get("taxes"): @@ -294,10 +294,12 @@ class TestSalesInvoice(unittest.TestCase): self.assertEquals(si.base_grand_total, 1500) self.assertEquals(si.grand_total, 1500) + self.assertEquals(si.rounding_adjustment, -0.01) def test_discount_amount_gl_entry(self): + frappe.db.set_value("Company", "_Test Company", "round_off_account", "Round Off - _TC") si = frappe.copy_doc(test_records[3]) - si.discount_amount = 104.95 + si.discount_amount = 104.94 si.append("taxes", { "doctype": "Sales Taxes and Charges", "charge_type": "On Previous Row Amount", @@ -327,7 +329,8 @@ class TestSalesInvoice(unittest.TestCase): [test_records[3]["taxes"][5]["account_head"], 0.0, 116.35], [test_records[3]["taxes"][6]["account_head"], 0.0, 100], [test_records[3]["taxes"][7]["account_head"], 168.54, 0.0], - ["_Test Account Service Tax - _TC", 16.86, 0.0] + ["_Test Account Service Tax - _TC", 16.85, 0.0], + ["Round Off - _TC", 0.01, 0.0] ]) for gle in gl_entries: @@ -423,13 +426,12 @@ class TestSalesInvoice(unittest.TestCase): expected_values = { "keys": ["price_list_rate", "discount_percentage", "rate", "amount", "base_price_list_rate", "base_rate", "base_amount", "net_rate", "net_amount"], - "_Test Item Home Desktop 100": [62.5, 0, 62.5, 625.0, 62.5, 62.5, 625.0, 50, 499.98], - "_Test Item Home Desktop 200": [190.66, 0, 190.66, 953.3, 190.66, 190.66, 953.3, 150, 750], + "_Test Item Home Desktop 100": [62.5, 0, 62.5, 625.0, 62.5, 62.5, 625.0, 50, 499.97600115194473], + "_Test Item Home Desktop 200": [190.66, 0, 190.66, 953.3, 190.66, 190.66, 953.3, 150, 749.9968530500239], } # check if children are saved - self.assertEquals(len(si.get("items")), - len(expected_values)-1) + self.assertEquals(len(si.get("items")), len(expected_values)-1) # check if item values are calculated for d in si.get("items"): @@ -437,28 +439,28 @@ class TestSalesInvoice(unittest.TestCase): self.assertEquals(d.get(k), expected_values[d.item_code][i]) # check net total - self.assertEquals(si.base_net_total, 1249.98) + self.assertEquals(si.net_total, 1249.97) self.assertEquals(si.total, 1578.3) # check tax calculation expected_values = { "keys": ["tax_amount", "total"], - "_Test Account Excise Duty - _TC": [140, 1389.98], - "_Test Account Education Cess - _TC": [2.8, 1392.78], - "_Test Account S&H Education Cess - _TC": [1.4, 1394.18], - "_Test Account CST - _TC": [27.88, 1422.06], - "_Test Account VAT - _TC": [156.25, 1578.31], - "_Test Account Customs Duty - _TC": [125, 1703.31], - "_Test Account Shipping Charges - _TC": [100, 1803.31], - "_Test Account Discount - _TC": [-180.33, 1622.98] + "_Test Account Excise Duty - _TC": [140, 1389.97], + "_Test Account Education Cess - _TC": [2.8, 1392.77], + "_Test Account S&H Education Cess - _TC": [1.4, 1394.17], + "_Test Account CST - _TC": [27.88, 1422.05], + "_Test Account VAT - _TC": [156.25, 1578.30], + "_Test Account Customs Duty - _TC": [125, 1703.30], + "_Test Account Shipping Charges - _TC": [100, 1803.30], + "_Test Account Discount - _TC": [-180.33, 1622.97] } for d in si.get("taxes"): for i, k in enumerate(expected_values["keys"]): self.assertEquals(d.get(k), expected_values[d.account_head][i]) - self.assertEquals(si.base_grand_total, 1622.98) - self.assertEquals(si.grand_total, 1622.98) + self.assertEquals(si.base_grand_total, 1622.97) + self.assertEquals(si.grand_total, 1622.97) def test_sales_invoice_calculation_export_currency_with_tax_inclusive_price(self): # prepare @@ -486,7 +488,7 @@ class TestSalesInvoice(unittest.TestCase): "base_rate": 2500, "base_amount": 25000, "net_rate": 40, - "net_amount": 399.98, + "net_amount": 399.9808009215558, "base_net_rate": 2000, "base_net_amount": 19999 }, @@ -500,7 +502,7 @@ class TestSalesInvoice(unittest.TestCase): "base_rate": 7500, "base_amount": 37500, "net_rate": 118.01, - "net_amount": 590.05, + "net_amount": 590.0531205155963, "base_net_rate": 5900.5, "base_net_amount": 29502.5 } @@ -536,8 +538,11 @@ class TestSalesInvoice(unittest.TestCase): for i, k in enumerate(expected_values["keys"]): self.assertEquals(d.get(k), expected_values[d.account_head][i]) - self.assertEquals(si.base_grand_total, 60794.5) - self.assertEquals(si.grand_total, 1215.89) + self.assertEquals(si.base_grand_total, 60795) + self.assertEquals(si.grand_total, 1215.90) + self.assertEquals(si.rounding_adjustment, 0.01) + self.assertEquals(si.base_rounding_adjustment, 0.50) + def test_outstanding(self): w = self.make() @@ -1286,6 +1291,40 @@ class TestSalesInvoice(unittest.TestCase): current_month_sales = frappe.db.get_value("Company", "_Test Company", "total_monthly_sales") self.assertEqual(current_month_sales, existing_current_month_sales) + def test_rounding_adjustment(self): + si = create_sales_invoice(rate=24900, do_not_save=True) + for tax in ["Tax 1", "Tax2"]: + si.append("taxes", { + "charge_type": "On Net Total", + "account_head": "_Test Account Service Tax - _TC", + "description": tax, + "rate": 14, + "cost_center": "_Test Cost Center - _TC", + "included_in_print_rate": 1 + }) + si.save() + + self.assertEqual(si.net_total, 19453.13) + self.assertEqual(si.grand_total, 24900) + self.assertEqual(si.total_taxes_and_charges, 5446.88) + self.assertEqual(si.rounding_adjustment, -0.01) + + expected_values = dict((d[0], d) for d in [ + [si.debit_to, 24900, 0.0], + ["_Test Account Service Tax - _TC", 0.0, 5446.88], + ["Sales - _TC", 0.0, 19453.13], + ["Round Off - _TC", 0.01, 0.0] + ]) + + gl_entries = frappe.db.sql("""select account, debit, credit + from `tabGL Entry` where voucher_type='Sales Invoice' and voucher_no=%s + order by account asc""", si.name, as_dict=1) + + for gle in gl_entries: + self.assertEquals(expected_values[gle.account][0], gle.account) + self.assertEquals(expected_values[gle.account][1], gle.debit) + self.assertEquals(expected_values[gle.account][2], gle.credit) + def create_sales_invoice(**args): si = frappe.new_doc("Sales Invoice") args = frappe._dict(args) diff --git a/erpnext/accounts/general_ledger.py b/erpnext/accounts/general_ledger.py index ceae61cd86..c575d59ae7 100644 --- a/erpnext/accounts/general_ledger.py +++ b/erpnext/accounts/general_ledger.py @@ -136,14 +136,7 @@ def round_off_debit_credit(gl_map): make_round_off_gle(gl_map, debit_credit_diff) def make_round_off_gle(gl_map, debit_credit_diff): - round_off_account, round_off_cost_center = frappe.db.get_value("Company", gl_map[0].company, - ["round_off_account", "round_off_cost_center"]) or [None, None] - if not round_off_account: - frappe.throw(_("Please mention Round Off Account in Company")) - - if not round_off_cost_center: - frappe.throw(_("Please mention Round Off Cost Center in Company")) - + round_off_account, round_off_cost_center = get_round_off_account_and_cost_center(gl_map[0].company) round_off_gle = frappe._dict() for k in ["voucher_type", "voucher_no", "company", @@ -165,6 +158,17 @@ def make_round_off_gle(gl_map, debit_credit_diff): gl_map.append(round_off_gle) +def get_round_off_account_and_cost_center(company): + round_off_account, round_off_cost_center = frappe.db.get_value("Company", company, + ["round_off_account", "round_off_cost_center"]) or [None, None] + if not round_off_account: + frappe.throw(_("Please mention Round Off Account in Company")) + + if not round_off_cost_center: + frappe.throw(_("Please mention Round Off Cost Center in Company")) + + return round_off_account, round_off_cost_center + def delete_gl_entries(gl_entries=None, voucher_type=None, voucher_no=None, adv_adj=False, update_outstanding="Yes"): diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.json b/erpnext/buying/doctype/purchase_order/purchase_order.json index c4096cc772..a5eaf26e9f 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.json +++ b/erpnext/buying/doctype/purchase_order/purchase_order.json @@ -2102,6 +2102,37 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "base_rounding_adjustment", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Rounding Adjustment (Company Currency)", + "length": 0, + "no_copy": 1, + "options": "Company:company:default_currency", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -2227,6 +2258,37 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "rounding_adjustment", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Rounding Adjustment", + "length": 0, + "no_copy": 1, + "options": "currency", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, diff --git a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.json b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.json index eed0c15cad..f9ff0a6473 100644 --- a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.json +++ b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.json @@ -1676,6 +1676,37 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "base_rounding_adjustment", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Rounding Adjustment (Company Currency", + "length": 0, + "no_copy": 1, + "options": "Company:company:default_currency", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -1801,6 +1832,37 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "rounding_adjustment", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Rounding Adjustment", + "length": 0, + "no_copy": 1, + "options": "currency", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, diff --git a/erpnext/controllers/taxes_and_totals.py b/erpnext/controllers/taxes_and_totals.py index c627664ea5..e85e56b4d6 100644 --- a/erpnext/controllers/taxes_and_totals.py +++ b/erpnext/controllers/taxes_and_totals.py @@ -121,9 +121,10 @@ class calculate_taxes_and_totals(object): cumulated_tax_fraction += tax.tax_fraction_for_current_item if cumulated_tax_fraction and not self.discount_amount_applied and item.qty: - item.net_amount = flt(item.amount / (1 + cumulated_tax_fraction), item.precision("net_amount")) + item.net_amount = flt(item.amount / (1 + cumulated_tax_fraction)) item.net_rate = flt(item.net_amount / item.qty, item.precision("net_rate")) - item.discount_percentage = flt(item.discount_percentage, item.precision("discount_percentage")) + item.discount_percentage = flt(item.discount_percentage, + item.precision("discount_percentage")) self._set_in_company_currency(item, ["net_rate", "net_amount"]) @@ -173,6 +174,7 @@ class calculate_taxes_and_totals(object): self.doc.round_floats_in(self.doc, ["total", "base_total", "net_total", "base_net_total"]) def calculate_taxes(self): + self.doc.rounding_adjustment = 0 # maintain actual tax rate based on idx actual_tax_dict = dict([[tax.idx, flt(tax.tax_amount, tax.precision("tax_amount"))] for tax in self.doc.get("taxes") if tax.charge_type == "Actual"]) @@ -222,7 +224,9 @@ class calculate_taxes_and_totals(object): # adjust Discount Amount loss in last tax iteration if i == (len(self.doc.get("taxes")) - 1) and self.discount_amount_applied \ and self.doc.discount_amount and self.doc.apply_discount_on == "Grand Total": - self.adjust_discount_amount_loss(tax) + self.doc.rounding_adjustment = flt(self.doc.grand_total + - flt(self.doc.discount_amount) - tax.total, + self.doc.precision("rounding_adjustment")) def get_tax_amount_if_for_valuation_or_deduction(self, tax_amount, tax): # if just for valuation, do not add the tax amount in total @@ -277,36 +281,26 @@ class calculate_taxes_and_totals(object): tax.tax_amount_after_discount_amount = flt(tax.tax_amount_after_discount_amount, tax.precision("tax_amount")) - def adjust_discount_amount_loss(self, tax): - discount_amount_loss = self.doc.grand_total - flt(self.doc.discount_amount) - tax.total - tax.tax_amount_after_discount_amount = flt(tax.tax_amount_after_discount_amount + - discount_amount_loss, tax.precision("tax_amount")) - tax.total = flt(tax.total + discount_amount_loss, tax.precision("total")) - - self._set_in_company_currency(tax, ["total", "tax_amount_after_discount_amount"]) - def manipulate_grand_total_for_inclusive_tax(self): # if fully inclusive taxes and diff - if self.doc.get("taxes") and all(cint(t.included_in_print_rate) for t in self.doc.get("taxes")): + if self.doc.get("taxes") and any([cint(t.included_in_print_rate) for t in self.doc.get("taxes")]): last_tax = self.doc.get("taxes")[-1] - diff = self.doc.total - flt(last_tax.total, self.doc.precision("grand_total")) - - if diff and abs(diff) <= (2.0 / 10**last_tax.precision("tax_amount")): - last_tax.tax_amount += diff - last_tax.tax_amount_after_discount_amount += diff - last_tax.total += diff - - self._set_in_company_currency(last_tax, - ["total", "tax_amount", "tax_amount_after_discount_amount"]) + non_inclusive_tax_amount = sum([flt(d.tax_amount_after_discount_amount) + for d in self.doc.get("taxes") if not d.included_in_print_rate]) + diff = self.doc.total + non_inclusive_tax_amount \ + - flt(last_tax.total, last_tax.precision("total")) + if diff and abs(diff) <= (5.0 / 10**last_tax.precision("tax_amount")): + self.doc.rounding_adjustment = flt(flt(self.doc.rounding_adjustment) + + flt(diff), self.doc.precision("rounding_adjustment")) def calculate_totals(self): - self.doc.grand_total = flt(self.doc.get("taxes")[-1].total - if self.doc.get("taxes") else self.doc.net_total) + self.doc.grand_total = flt(self.doc.get("taxes")[-1].total) + flt(self.doc.rounding_adjustment) \ + if self.doc.get("taxes") else flt(self.doc.net_total) - self.doc.total_taxes_and_charges = flt(self.doc.grand_total - self.doc.net_total, - self.doc.precision("total_taxes_and_charges")) + self.doc.total_taxes_and_charges = flt(self.doc.grand_total - self.doc.net_total + - flt(self.doc.rounding_adjustment), self.doc.precision("total_taxes_and_charges")) - self._set_in_company_currency(self.doc, ["total_taxes_and_charges"]) + self._set_in_company_currency(self.doc, ["total_taxes_and_charges", "rounding_adjustment"]) if self.doc.doctype in ["Quotation", "Sales Order", "Delivery Note", "Sales Invoice"]: self.doc.base_grand_total = flt(self.doc.grand_total * self.doc.conversion_rate) \ @@ -326,13 +320,22 @@ class calculate_taxes_and_totals(object): if (self.doc.taxes_and_charges_added or self.doc.taxes_and_charges_deducted) \ else self.doc.base_net_total - self._set_in_company_currency(self.doc, ["taxes_and_charges_added", "taxes_and_charges_deducted"]) + self._set_in_company_currency(self.doc, + ["taxes_and_charges_added", "taxes_and_charges_deducted"]) self.doc.round_floats_in(self.doc, ["grand_total", "base_grand_total"]) + self.set_rounded_total() + + def set_rounded_total(self): + if frappe.db.get_single_value("Global Defaults", "disable_rounded_total"): + self.doc.rounded_total = self.doc.base_rounded_total = 0 + return + if self.doc.meta.get_field("rounded_total"): self.doc.rounded_total = round_based_on_smallest_currency_fraction(self.doc.grand_total, self.doc.currency, self.doc.precision("rounded_total")) + if self.doc.meta.get_field("base_rounded_total"): company_currency = erpnext.get_company_currency(self.doc.company) @@ -525,7 +528,7 @@ def get_itemised_tax_breakup_html(doc): for tax in doc.taxes: if getattr(tax, "category", None) and tax.category=="Valuation": continue - if tax.description not in tax_accounts: + if tax.description not in tax_accounts and tax.tax_amount_after_discount_amount: tax_accounts.append(tax.description) headers = get_itemised_tax_breakup_header(doc.doctype + " Item", tax_accounts) @@ -565,26 +568,21 @@ def get_itemised_tax(taxes): if getattr(tax, "category", None) and tax.category=="Valuation": continue - tax_amount_precision = tax.precision("tax_amount") - tax_rate_precision = tax.precision("rate") - item_tax_map = json.loads(tax.item_wise_tax_detail) if tax.item_wise_tax_detail else {} - - for item_code, tax_data in item_tax_map.items(): - itemised_tax.setdefault(item_code, frappe._dict()) + if item_tax_map: + for item_code, tax_data in item_tax_map.items(): + itemised_tax.setdefault(item_code, frappe._dict()) - if isinstance(tax_data, list): - precision = tax_amount_precision if tax.charge_type == "Actual" else tax_rate_precision - - itemised_tax[item_code][tax.description] = frappe._dict(dict( - tax_rate=flt(tax_data[0]), - tax_amount=flt(tax_data[1]) - )) - else: - itemised_tax[item_code][tax.description] = frappe._dict(dict( - tax_rate=flt(tax_data), - tax_amount=0.0 - )) + if isinstance(tax_data, list): + itemised_tax[item_code][tax.description] = frappe._dict(dict( + tax_rate=flt(tax_data[0]), + tax_amount=flt(tax_data[1]) + )) + else: + itemised_tax[item_code][tax.description] = frappe._dict(dict( + tax_rate=flt(tax_data), + tax_amount=0.0 + )) return itemised_tax diff --git a/erpnext/public/js/controllers/taxes_and_totals.js b/erpnext/public/js/controllers/taxes_and_totals.js index d042bb7220..e45c35e944 100644 --- a/erpnext/public/js/controllers/taxes_and_totals.js +++ b/erpnext/public/js/controllers/taxes_and_totals.js @@ -155,7 +155,7 @@ erpnext.taxes_and_totals = erpnext.payments.extend({ }); if(cumulated_tax_fraction && !me.discount_amount_applied) { - item.net_amount = flt(item.amount / (1 + cumulated_tax_fraction), precision("net_amount", item)); + item.net_amount = flt(item.amount / (1 + cumulated_tax_fraction)); item.net_rate = flt(item.net_amount / item.qty, precision("net_rate", item)); me.set_in_company_currency(item, ["net_rate", "net_amount"]); @@ -211,6 +211,7 @@ erpnext.taxes_and_totals = erpnext.payments.extend({ calculate_taxes: function() { var me = this; + this.frm.doc.rounding_adjustment = 0; var actual_tax_dict = {}; // maintain actual tax rate based on idx @@ -277,8 +278,10 @@ erpnext.taxes_and_totals = erpnext.payments.extend({ // adjust Discount Amount loss in last tax iteration if ((i == me.frm.doc["taxes"].length - 1) && me.discount_amount_applied - && me.frm.doc.apply_discount_on == "Grand Total" && me.frm.doc.discount_amount) - me.adjust_discount_amount_loss(tax); + && me.frm.doc.apply_discount_on == "Grand Total" && me.frm.doc.discount_amount) { + me.frm.doc.rounding_adjustment = flt(me.frm.doc.grand_total - + flt(me.frm.doc.discount_amount) - tax.total, precision("rounding_adjustment")); + } } }); }); @@ -339,45 +342,41 @@ erpnext.taxes_and_totals = erpnext.payments.extend({ tax.tax_amount_after_discount_amount = flt(tax.tax_amount_after_discount_amount, precision("tax_amount", tax)); }, - adjust_discount_amount_loss: function(tax) { - var discount_amount_loss = this.frm.doc.grand_total - flt(this.frm.doc.discount_amount) - tax.total; - tax.tax_amount_after_discount_amount = flt(tax.tax_amount_after_discount_amount + - discount_amount_loss, precision("tax_amount", tax)); - tax.total = flt(tax.total + discount_amount_loss, precision("total", tax)); - - this.set_in_company_currency(tax, ["total", "tax_amount_after_discount_amount"]); - }, - manipulate_grand_total_for_inclusive_tax: function() { var me = this; // if fully inclusive taxes and diff if (this.frm.doc["taxes"] && this.frm.doc["taxes"].length) { - var all_inclusive = frappe.utils.all(this.frm.doc["taxes"].map(function(d) { - return cint(d.included_in_print_rate); - })); - - if (all_inclusive) { + var any_inclusive_tax = false; + $.each(this.frm.doc.taxes || [], function(i, d) { + if(cint(d.included_in_print_rate)) any_inclusive_tax = true; + }); + if (any_inclusive_tax) { var last_tax = me.frm.doc["taxes"].slice(-1)[0]; + var non_inclusive_tax_amount = frappe.utils.sum($.map(this.frm.doc.taxes || [], + function(d) { + if(!d.included_in_print_rate) { + return flt(d.tax_amount_after_discount_amount); + } + } + )); + var diff = me.frm.doc.total + non_inclusive_tax_amount + - flt(last_tax.total, precision("grand_total")); - var diff = me.frm.doc.total - flt(last_tax.total, precision("grand_total")); - - if ( diff && Math.abs(diff) <= (2.0 / Math.pow(10, precision("tax_amount", last_tax))) ) { - last_tax.tax_amount += diff; - last_tax.tax_amount_after_discount += diff; - last_tax.total += diff; - - this.set_in_company_currency(last_tax, - ["total", "tax_amount", "tax_amount_after_discount_amount"]); + if ( diff && Math.abs(diff) <= (5.0 / Math.pow(10, precision("tax_amount", last_tax))) ) { + this.frm.doc.rounding_adjustment = flt(flt(this.frm.doc.rounding_adjustment) + diff, + precision("rounding_adjustment")); } } } }, calculate_totals: function() { - // Changing sequence can cause roundiing issue and on-screen discrepency + // Changing sequence can cause rounding_adjustmentng issue and on-screen discrepency var me = this; var tax_count = this.frm.doc["taxes"] ? this.frm.doc["taxes"].length : 0; - this.frm.doc.grand_total = flt(tax_count ? this.frm.doc["taxes"][tax_count - 1].total : this.frm.doc.net_total); + this.frm.doc.grand_total = flt(tax_count + ? this.frm.doc["taxes"][tax_count - 1].total + flt(this.frm.doc.rounding_adjustment) + : this.frm.doc.net_total); if(in_list(["Quotation", "Sales Order", "Delivery Note", "Sales Invoice"], this.frm.doc.doctype)) { this.frm.doc.base_grand_total = (this.frm.doc.total_taxes_and_charges) ? @@ -396,24 +395,30 @@ erpnext.taxes_and_totals = erpnext.payments.extend({ } }); - frappe.model.round_floats_in(this.frm.doc, ["taxes_and_charges_added", "taxes_and_charges_deducted"]); + frappe.model.round_floats_in(this.frm.doc, + ["taxes_and_charges_added", "taxes_and_charges_deducted"]); } this.frm.doc.base_grand_total = flt((this.frm.doc.taxes_and_charges_added || this.frm.doc.taxes_and_charges_deducted) ? flt(this.frm.doc.grand_total * this.frm.doc.conversion_rate) : this.frm.doc.base_net_total); - this.set_in_company_currency(this.frm.doc, ["taxes_and_charges_added", "taxes_and_charges_deducted"]); + this.set_in_company_currency(this.frm.doc, + ["taxes_and_charges_added", "taxes_and_charges_deducted"]); } - this.frm.doc.total_taxes_and_charges = flt(this.frm.doc.grand_total - this.frm.doc.net_total, - precision("total_taxes_and_charges")); + this.frm.doc.total_taxes_and_charges = flt(this.frm.doc.grand_total - this.frm.doc.net_total + - flt(this.frm.doc.rounding_adjustment), precision("total_taxes_and_charges")); - this.set_in_company_currency(this.frm.doc, ["total_taxes_and_charges"]); + this.set_in_company_currency(this.frm.doc, ["total_taxes_and_charges", "rounding_adjustment"]); // Round grand total as per precision frappe.model.round_floats_in(this.frm.doc, ["grand_total", "base_grand_total"]); // rounded totals + this.set_rounded_total() + }, + + set_rounded_total: function() { if(frappe.meta.get_docfield(this.frm.doc.doctype, "rounded_total", this.frm.doc.name)) { this.frm.doc.rounded_total = round_based_on_smallest_currency_fraction(this.frm.doc.grand_total, this.frm.doc.currency, precision("rounded_total")); diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js index f5bcf1ce41..a5ef15e60b 100644 --- a/erpnext/public/js/controllers/transaction.js +++ b/erpnext/public/js/controllers/transaction.js @@ -660,30 +660,32 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ "base_discount_amount", "base_grand_total", "base_rounded_total", "base_in_words", "base_taxes_and_charges_added", "base_taxes_and_charges_deducted", "total_amount_to_pay", "base_paid_amount", "base_write_off_amount", "base_change_amount", "base_operating_cost", - "base_raw_material_cost", "base_total_cost", "base_scrap_material_cost" - ], company_currency); + "base_raw_material_cost", "base_total_cost", "base_scrap_material_cost", + "base_rounding_adjustment"], company_currency); this.frm.set_currency_labels(["total", "net_total", "total_taxes_and_charges", "discount_amount", "grand_total", "taxes_and_charges_added", "taxes_and_charges_deducted", - "rounded_total", "in_words", "paid_amount", "write_off_amount", "operating_cost", "scrap_material_cost", - "raw_material_cost", "total_cost"], this.frm.doc.currency); + "rounded_total", "in_words", "paid_amount", "write_off_amount", "operating_cost", + "scrap_material_cost", "rounding_adjustment", "raw_material_cost", + "total_cost"], this.frm.doc.currency); - this.frm.set_currency_labels(["outstanding_amount", "total_advance"], this.frm.doc.party_account_currency); + this.frm.set_currency_labels(["outstanding_amount", "total_advance"], + this.frm.doc.party_account_currency); cur_frm.set_df_property("conversion_rate", "description", "1 " + this.frm.doc.currency - + " = [?] " + company_currency) + + " = [?] " + company_currency); if(this.frm.doc.price_list_currency && this.frm.doc.price_list_currency!=company_currency) { - cur_frm.set_df_property("plc_conversion_rate", "description", "1 " + this.frm.doc.price_list_currency - + " = [?] " + company_currency) + cur_frm.set_df_property("plc_conversion_rate", "description", "1 " + + this.frm.doc.price_list_currency + " = [?] " + company_currency); } // toggle fields - this.frm.toggle_display(["conversion_rate", "base_total", "base_net_total", "base_total_taxes_and_charges", - "base_taxes_and_charges_added", "base_taxes_and_charges_deducted", + this.frm.toggle_display(["conversion_rate", "base_total", "base_net_total", + "base_total_taxes_and_charges", "base_taxes_and_charges_added", "base_taxes_and_charges_deducted", "base_grand_total", "base_rounded_total", "base_in_words", "base_discount_amount", - "base_paid_amount", "base_write_off_amount", "base_operating_cost", - "base_raw_material_cost", "base_total_cost", "base_scrap_material_cost"], + "base_paid_amount", "base_write_off_amount", "base_operating_cost", "base_raw_material_cost", + "base_total_cost", "base_scrap_material_cost", "base_rounding_adjustment"], this.frm.doc.currency != company_currency); this.frm.toggle_display(["plc_conversion_rate", "price_list_currency"], diff --git a/erpnext/selling/doctype/quotation/quotation.json b/erpnext/selling/doctype/quotation/quotation.json index ab879a1b05..ade37b10f0 100644 --- a/erpnext/selling/doctype/quotation/quotation.json +++ b/erpnext/selling/doctype/quotation/quotation.json @@ -1895,6 +1895,37 @@ "unique": 0, "width": "200px" }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "base_rounding_adjustment", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Rounding Adjustment (Company Currency)", + "length": 0, + "no_copy": 1, + "options": "Company:company:default_currency", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -2024,6 +2055,37 @@ "unique": 0, "width": "200px" }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "rounding_adjustment", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Rounding Adjustment", + "length": 0, + "no_copy": 1, + "options": "currency", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, diff --git a/erpnext/selling/doctype/sales_order/sales_order.json b/erpnext/selling/doctype/sales_order/sales_order.json index 3b8eb68592..ffa6c75464 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.json +++ b/erpnext/selling/doctype/sales_order/sales_order.json @@ -1980,6 +1980,37 @@ "unique": 0, "width": "150px" }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "base_rounding_adjustment", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Rounding Adjustment (Company Currency)", + "length": 0, + "no_copy": 1, + "options": "Company:company:default_currency", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -2109,6 +2140,38 @@ "unique": 0, "width": "150px" }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "", + "fieldname": "rounding_adjustment", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Rounding Adjustment", + "length": 0, + "no_copy": 1, + "options": "currency", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.json b/erpnext/stock/doctype/delivery_note/delivery_note.json index 980f79b2a2..cb4275d3e2 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.json +++ b/erpnext/stock/doctype/delivery_note/delivery_note.json @@ -2109,6 +2109,37 @@ "unique": 0, "width": "150px" }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "base_rounding_adjustment", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Rounding Adjustment (Company Currency)", + "length": 0, + "no_copy": 1, + "options": "Company:company:default_currency", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -2240,6 +2271,37 @@ "unique": 0, "width": "150px" }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "rounding_adjustment", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Rounding Adjustment", + "length": 0, + "no_copy": 1, + "options": "currency", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json index 7140dbd8bd..3acdeeecc9 100755 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json @@ -1939,6 +1939,37 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "base_rounding_adjustment", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Rounding Adjustment (Company Currency)", + "length": 0, + "no_copy": 1, + "options": "Company:company:default_currency", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -2064,6 +2095,37 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "rounding_adjustment", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Rounding Adjustment", + "length": 0, + "no_copy": 1, + "options": "currency", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -3060,7 +3122,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-08-06 19:33:59.822251", + "modified": "2017-08-29 11:02:24.831340", "modified_by": "Administrator", "module": "Stock", "name": "Purchase Receipt", From f073814635dde0b2a25db489efe70face29e80f3 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Thu, 13 Jul 2017 13:39:09 +0530 Subject: [PATCH 60/72] added fee request doctype --- erpnext/config/schools.py | 3 + .../schools/doctype/fee_request/__init__.py | 0 .../doctype/fee_request/fee_request.js | 36 + .../doctype/fee_request/fee_request.json | 613 ++++++++++++++++++ .../doctype/fee_request/fee_request.py | 64 ++ .../doctype/fee_request/test_fee_request.py | 10 + .../doctype/fee_request_program/__init__.py | 0 .../fee_request_program.json | 133 ++++ .../fee_request_program.py | 10 + .../fee_request_student_group/__init__.py | 0 .../fee_request_student_group.json | 100 +++ .../fee_request_student_group.py | 10 + .../doctype/fee_structure/fee_structure.json | 39 +- erpnext/schools/doctype/fees/fees.json | 114 ++-- erpnext/schools/doctype/fees/fees.py | 2 + 15 files changed, 1088 insertions(+), 46 deletions(-) create mode 100644 erpnext/schools/doctype/fee_request/__init__.py create mode 100644 erpnext/schools/doctype/fee_request/fee_request.js create mode 100644 erpnext/schools/doctype/fee_request/fee_request.json create mode 100644 erpnext/schools/doctype/fee_request/fee_request.py create mode 100644 erpnext/schools/doctype/fee_request/test_fee_request.py create mode 100644 erpnext/schools/doctype/fee_request_program/__init__.py create mode 100644 erpnext/schools/doctype/fee_request_program/fee_request_program.json create mode 100644 erpnext/schools/doctype/fee_request_program/fee_request_program.py create mode 100644 erpnext/schools/doctype/fee_request_student_group/__init__.py create mode 100644 erpnext/schools/doctype/fee_request_student_group/fee_request_student_group.json create mode 100644 erpnext/schools/doctype/fee_request_student_group/fee_request_student_group.py diff --git a/erpnext/config/schools.py b/erpnext/config/schools.py index b984578ca1..78c80ca6d1 100644 --- a/erpnext/config/schools.py +++ b/erpnext/config/schools.py @@ -153,6 +153,9 @@ def get_data(): { "type": "doctype", "name": "Fees" + },{ + "type": "doctype", + "name": "Fee Request" }, { "type": "doctype", diff --git a/erpnext/schools/doctype/fee_request/__init__.py b/erpnext/schools/doctype/fee_request/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/schools/doctype/fee_request/fee_request.js b/erpnext/schools/doctype/fee_request/fee_request.js new file mode 100644 index 0000000000..577b7ef6a3 --- /dev/null +++ b/erpnext/schools/doctype/fee_request/fee_request.js @@ -0,0 +1,36 @@ +// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Fee Request', { + refresh: function(frm) { + + }, + fee_request_against: function(frm) { + if (frm.doc.fee_request_against == "Program") { + frm.set_value('student_groups', null) + } else if (frm.doc.fee_request_against == "Student Group") { + frm.set_value('programs', null) + } + }, + fee_structure: function(frm) { + if (frm.doc.fee_structure) { + frappe.call({ + method: "erpnext.schools.doctype.fee_request.fee_request.get_fee_structure", + args: { + "target_doc": frm.doc.name, + "source_name": frm.doc.fee_structure + }, + callback: function(r) { + var doc = frappe.model.sync(r.message); + frappe.set_route("Form", doc[0].doctype, doc[0].name); + } + }); + } + } +}); + +frappe.ui.form.on("Fee Component", { + refresh: function(frm) { + frm.set_read_only(); + } +}); diff --git a/erpnext/schools/doctype/fee_request/fee_request.json b/erpnext/schools/doctype/fee_request/fee_request.json new file mode 100644 index 0000000000..cea38ddd3a --- /dev/null +++ b/erpnext/schools/doctype/fee_request/fee_request.json @@ -0,0 +1,613 @@ +{ + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "autoname": "naming_series:", + "beta": 0, + "creation": "2015-09-22 16:57:22.143710", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Document", + "editable_grid": 0, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "fee_structure", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Fee Structure", + "length": 0, + "no_copy": 0, + "options": "Fee Structure", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "fee_request_against", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Fee Request Against", + "length": 0, + "no_copy": 0, + "options": "Program", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "due_date", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Due Date", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_4", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "academic_year", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Academic Year", + "length": 0, + "no_copy": 0, + "options": "Academic Year", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "academic_term", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Academic Term", + "length": 0, + "no_copy": 0, + "options": "Academic Term", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "naming_series", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Naming Series", + "length": 0, + "no_copy": 1, + "options": "FRQ.", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_10", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval:doc.fee_request_against == 'Program'", + "fieldname": "programs", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "", + "length": 0, + "no_copy": 0, + "options": "Fee Request Program", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "eval: doc.fee_request_against == 'Student Group'", + "fieldname": "student_groups", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "", + "length": 0, + "no_copy": 0, + "options": "Fee Request Student Group", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_14", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Fee Breakup for each student", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "components", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "", + "length": 0, + "no_copy": 0, + "options": "Fee Component", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_16", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "amended_from", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Amended From", + "length": 0, + "no_copy": 1, + "options": "Fee Request", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_18", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "0", + "fieldname": "total_amount", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Total Amount/Student", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "grand_total", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Grand Total", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "grand_total_in_words", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "In Words", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 1, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "menu_index": 0, + "modified": "2017-07-13 18:19:26.612801", + "modified_by": "Administrator", + "module": "Schools", + "name": "Fee Request", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 1, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "Academics User", + "set_user_permissions": 0, + "share": 1, + "submit": 1, + "write": 1 + } + ], + "quick_entry": 0, + "read_only": 0, + "read_only_onload": 0, + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "", + "track_changes": 0, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/schools/doctype/fee_request/fee_request.py b/erpnext/schools/doctype/fee_request/fee_request.py new file mode 100644 index 0000000000..3877414d23 --- /dev/null +++ b/erpnext/schools/doctype/fee_request/fee_request.py @@ -0,0 +1,64 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe import _ +from frappe.model.document import Document +from frappe.model.mapper import get_mapped_doc +from erpnext.schools.api import get_student_group_students +from erpnext.schools.doctype.student_group.student_group import get_program_enrollment +from frappe.model.mapper import get_mapped_doc +from frappe.utils import money_in_words + + +class FeeRequest(Document): + def validate(self): + if not(self.programs or self.student_groups): + frappe.throw(_("Select atleast one {0}").format(self.fee_request_against)) + if self.docstatus: + self.generate_fee() + + def generate_fee(self): + if self.fee_request_against == "Program": + total_fee_count = 0 + for d in self.programs: + program_enrollment = frappe.get_list("Program Enrollment", + fields=["name", "student", "student_batch_name", "student_category", "student_name"], + filters={"program": d.program, "student_batch_name": d.student_batch, + "academic_year": self.academic_year}) + if program_enrollment: + d.total_students = len(program_enrollment) + else: + d.total_students = 0 + total_fee_count += d.total_students + for pe in program_enrollment: + doc = get_mapped_doc("Fee Request", self.name, { + "Fee Request": { + "doctype": "Fees" + } + }) + doc.student = pe.student + doc.student_name = pe.student_name + doc.program = d.program + doc.program_enrollment = pe.name + doc.student_category = pe.student_category + doc.save() + doc.submit() + self.grand_total = total_fee_count*self.total_amount + self.grand_total_in_words = money_in_words(self.grand_total) + + if self.fee_request_against == "Student Group": + for student_group in self.student_groups: + students += get_student_group_students(student_group, self.academic_year) + + +@frappe.whitelist() +def get_fee_structure(source_name,target_doc=None): + fee_request = get_mapped_doc("Fee Structure", source_name, + {"Fee Structure": { + "doctype": "Fee Request" + }}, ignore_permissions=True) + return fee_request + diff --git a/erpnext/schools/doctype/fee_request/test_fee_request.py b/erpnext/schools/doctype/fee_request/test_fee_request.py new file mode 100644 index 0000000000..a76ea30de6 --- /dev/null +++ b/erpnext/schools/doctype/fee_request/test_fee_request.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors +# See license.txt +from __future__ import unicode_literals + +import frappe +import unittest + +class TestFeeRequest(unittest.TestCase): + pass diff --git a/erpnext/schools/doctype/fee_request_program/__init__.py b/erpnext/schools/doctype/fee_request_program/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/schools/doctype/fee_request_program/fee_request_program.json b/erpnext/schools/doctype/fee_request_program/fee_request_program.json new file mode 100644 index 0000000000..d5c8911e3a --- /dev/null +++ b/erpnext/schools/doctype/fee_request_program/fee_request_program.json @@ -0,0 +1,133 @@ +{ + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 0, + "creation": "2017-03-23 17:46:55.712169", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "program", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Program", + "length": 0, + "no_copy": 0, + "options": "Program", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "student_batch", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Student Batch", + "length": 0, + "no_copy": 0, + "options": "Student Batch Name", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "total_students", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Total Students", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "max_attachments": 0, + "modified": "2017-07-13 16:08:16.498227", + "modified_by": "Administrator", + "module": "Schools", + "name": "Fee Request Program", + "name_case": "", + "owner": "Administrator", + "permissions": [], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/schools/doctype/fee_request_program/fee_request_program.py b/erpnext/schools/doctype/fee_request_program/fee_request_program.py new file mode 100644 index 0000000000..a4473b90f8 --- /dev/null +++ b/erpnext/schools/doctype/fee_request_program/fee_request_program.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.document import Document + +class FeeRequestProgram(Document): + pass diff --git a/erpnext/schools/doctype/fee_request_student_group/__init__.py b/erpnext/schools/doctype/fee_request_student_group/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/schools/doctype/fee_request_student_group/fee_request_student_group.json b/erpnext/schools/doctype/fee_request_student_group/fee_request_student_group.json new file mode 100644 index 0000000000..08d7c01323 --- /dev/null +++ b/erpnext/schools/doctype/fee_request_student_group/fee_request_student_group.json @@ -0,0 +1,100 @@ +{ + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 0, + "creation": "2017-03-23 17:55:52.476822", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "student_group", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Student Group", + "length": 0, + "no_copy": 0, + "options": "Student Group", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "total_students", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Total Students", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "max_attachments": 0, + "modified": "2017-03-23 18:01:09.736921", + "modified_by": "Administrator", + "module": "Schools", + "name": "Fee Request Student Group", + "name_case": "", + "owner": "Administrator", + "permissions": [], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/schools/doctype/fee_request_student_group/fee_request_student_group.py b/erpnext/schools/doctype/fee_request_student_group/fee_request_student_group.py new file mode 100644 index 0000000000..ecbc3abd38 --- /dev/null +++ b/erpnext/schools/doctype/fee_request_student_group/fee_request_student_group.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.document import Document + +class FeeRequestStudentGroup(Document): + pass diff --git a/erpnext/schools/doctype/fee_structure/fee_structure.json b/erpnext/schools/doctype/fee_structure/fee_structure.json index 79d48cfff6..ecbf62009e 100644 --- a/erpnext/schools/doctype/fee_structure/fee_structure.json +++ b/erpnext/schools/doctype/fee_structure/fee_structure.json @@ -46,6 +46,37 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "student_category", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Student Category", + "length": 0, + "no_copy": 0, + "options": "Student Category", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -146,7 +177,7 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "student_category", + "fieldname": "academic_year", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, @@ -155,10 +186,10 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Student Category", + "label": "Academic Year", "length": 0, "no_copy": 0, - "options": "Student Category", + "options": "Academic Year", "permlevel": 0, "precision": "", "print_hide": 0, @@ -303,7 +334,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-06-30 08:21:48.057298", + "modified": "2017-07-13 15:20:45.727524", "modified_by": "Administrator", "module": "Schools", "name": "Fee Structure", diff --git a/erpnext/schools/doctype/fees/fees.json b/erpnext/schools/doctype/fees/fees.json index 67c06f7606..d6abd4e3a2 100644 --- a/erpnext/schools/doctype/fees/fees.json +++ b/erpnext/schools/doctype/fees/fees.json @@ -50,8 +50,8 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "academic_year", - "fieldtype": "Link", + "fieldname": "student_name", + "fieldtype": "Data", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, @@ -59,15 +59,14 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Academic Year", + "label": "Student Name", "length": 0, "no_copy": 0, - "options": "Academic Year", "permlevel": 0, "precision": "", "print_hide": 0, "print_hide_if_no_value": 0, - "read_only": 0, + "read_only": 1, "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, @@ -81,7 +80,7 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "academic_term", + "fieldname": "student_category", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, @@ -90,10 +89,10 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Academic Term", + "label": "Student Category", "length": 0, "no_copy": 0, - "options": "Academic Term", + "options": "Student Category", "permlevel": 0, "precision": "", "print_hide": 0, @@ -196,36 +195,6 @@ "set_only_once": 0, "unique": 0 }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "student_name", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Student Name", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -325,7 +294,7 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "student_category", + "fieldname": "academic_term", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, @@ -334,10 +303,41 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Student Category", + "label": "Academic Term", "length": 0, "no_copy": 0, - "options": "Student Category", + "options": "Academic Term", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "academic_year", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Academic Year", + "length": 0, + "no_copy": 0, + "options": "Academic Year", "permlevel": 0, "precision": "", "print_hide": 0, @@ -529,6 +529,36 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "total_amount_in_words", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "In Words", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -603,7 +633,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-06-30 08:21:48.199858", + "modified": "2017-07-13 21:51:06.570598", "modified_by": "Administrator", "module": "Schools", "name": "Fees", diff --git a/erpnext/schools/doctype/fees/fees.py b/erpnext/schools/doctype/fees/fees.py index 7e660af520..a71846ce07 100644 --- a/erpnext/schools/doctype/fees/fees.py +++ b/erpnext/schools/doctype/fees/fees.py @@ -6,6 +6,7 @@ from __future__ import unicode_literals from frappe.model.document import Document import frappe from frappe import _ +from frappe.utils import money_in_words class Fees(Document): def validate(self): @@ -17,6 +18,7 @@ class Fees(Document): for d in self.components: self.total_amount += d.amount self.outstanding_amount = self.total_amount + self.total_amount_in_words = money_in_words(self.total_amount) def get_fee_list(doctype, txt, filters, limit_start, limit_page_length=20, order_by="modified"): user = frappe.session.user From e4acf763a510e49b3171dbca4d79d4c8fb6af284 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Mon, 17 Jul 2017 11:26:42 +0530 Subject: [PATCH 61/72] make payment request for the fee --- .../payment_request/payment_request.py | 13 +- .../doctype/sales_invoice/sales_invoice.py | 8 + .../doctype/fee_component/fee_component.json | 32 +- .../doctype/fee_request/fee_request.js | 9 +- .../doctype/fee_request/fee_request.json | 49 +- .../doctype/fee_request/fee_request.py | 4 - .../doctype/fee_structure/fee_structure.json | 126 +++- erpnext/schools/doctype/fees/fees.js | 115 +++- erpnext/schools/doctype/fees/fees.json | 650 +++++++++++++++--- erpnext/schools/doctype/fees/fees.py | 52 +- erpnext/schools/doctype/fees/fees_list.js | 6 +- 11 files changed, 863 insertions(+), 201 deletions(-) diff --git a/erpnext/accounts/doctype/payment_request/payment_request.py b/erpnext/accounts/doctype/payment_request/payment_request.py index f3594b205b..3796877293 100644 --- a/erpnext/accounts/doctype/payment_request/payment_request.py +++ b/erpnext/accounts/doctype/payment_request/payment_request.py @@ -61,6 +61,7 @@ class PaymentRequest(Document): def set_payment_request_url(self): if self.payment_account: self.payment_url = self.get_payment_url() + print (self.payment_url) if self.payment_url: self.db_set('payment_url', self.payment_url) @@ -69,8 +70,11 @@ class PaymentRequest(Document): self.db_set('status', 'Initiated') def get_payment_url(self): - data = frappe.db.get_value(self.reference_doctype, self.reference_name, - ["company", "customer_name"], as_dict=1) + if self.reference_doctype != "Fees": + data = frappe.db.get_value(self.reference_doctype, self.reference_name, ["company", "customer_name"], as_dict=1) + else: + data = frappe.db.get_value(self.reference_doctype, self.reference_name, ["student_name"], as_dict=1) + data.update({"company": frappe.defaults.get_defaults().company}) controller = get_payment_gateway_controller(self.payment_gateway) controller.validate_transaction_currency(self.currency) @@ -98,6 +102,7 @@ class PaymentRequest(Document): def create_payment_entry(self, submit=True): """create entry""" + print ("creating the payment entry") frappe.flags.ignore_account_permission = True ref_doc = frappe.get_doc(self.reference_doctype, self.reference_name) @@ -252,6 +257,7 @@ def make_payment_request(**args): if args.order_type == "Shopping Cart" or args.mute_email: pr.flags.mute_email = True + print ("comign in creatinf the new dottype") if args.submit_doc: pr.insert(ignore_permissions=True) pr.submit() @@ -277,6 +283,9 @@ def get_amount(ref_doc, dt): else: grand_total = flt(ref_doc.outstanding_amount) / ref_doc.conversion_rate + if dt == "Fees": + grand_total = ref_doc.outstanding_amount + if grand_total > 0 : return grand_total diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index 7a787c4cba..800ec1460d 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -583,8 +583,11 @@ class SalesInvoice(SellingController): return if not gl_entries: + print ("if not gl_entries") gl_entries = self.get_gl_entries() + print (gl_entries) + if gl_entries: from erpnext.accounts.general_ledger import make_gl_entries @@ -593,6 +596,7 @@ class SalesInvoice(SellingController): make_gl_entries(gl_entries, cancel=(self.docstatus == 2), update_outstanding=update_outstanding, merge_entries=False) + # frappe.throw("go ahead bro") if update_outstanding == "No": from erpnext.accounts.doctype.gl_entry.gl_entry import update_outstanding_amt @@ -609,18 +613,22 @@ class SalesInvoice(SellingController): delete_gl_entries(voucher_type=self.doctype, voucher_no=self.name) def get_gl_entries(self, warehouse_account=None): + print ("inside the get_gl_entries") from erpnext.accounts.general_ledger import merge_similar_entries gl_entries = [] self.make_customer_gl_entry(gl_entries) + print ("make cuustomer gl entry", gl_entries) self.make_tax_gl_entries(gl_entries) self.make_item_gl_entries(gl_entries) + print ("make item gl entry", gl_entries) # merge gl entries before adding pos entries gl_entries = merge_similar_entries(gl_entries) + print ("after merged gl entry", gl_entries) self.make_pos_gl_entries(gl_entries) self.make_gle_for_change_amount(gl_entries) diff --git a/erpnext/schools/doctype/fee_component/fee_component.json b/erpnext/schools/doctype/fee_component/fee_component.json index 2b4e00220f..da659fa511 100644 --- a/erpnext/schools/doctype/fee_component/fee_component.json +++ b/erpnext/schools/doctype/fee_component/fee_component.json @@ -107,6 +107,36 @@ "set_only_once": 0, "unique": 0, "width": "300px" + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "description", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Description", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 } ], "has_web_view": 0, @@ -120,7 +150,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2017-06-30 08:21:47.947269", + "modified": "2017-07-18 15:03:18.945746", "modified_by": "Administrator", "module": "Schools", "name": "Fee Component", diff --git a/erpnext/schools/doctype/fee_request/fee_request.js b/erpnext/schools/doctype/fee_request/fee_request.js index 577b7ef6a3..30f8e5bfaa 100644 --- a/erpnext/schools/doctype/fee_request/fee_request.js +++ b/erpnext/schools/doctype/fee_request/fee_request.js @@ -3,14 +3,7 @@ frappe.ui.form.on('Fee Request', { refresh: function(frm) { - - }, - fee_request_against: function(frm) { - if (frm.doc.fee_request_against == "Program") { - frm.set_value('student_groups', null) - } else if (frm.doc.fee_request_against == "Student Group") { - frm.set_value('programs', null) - } + frm.disable_save(); }, fee_structure: function(frm) { if (frm.doc.fee_structure) { diff --git a/erpnext/schools/doctype/fee_request/fee_request.json b/erpnext/schools/doctype/fee_request/fee_request.json index cea38ddd3a..3d7fa8f515 100644 --- a/erpnext/schools/doctype/fee_request/fee_request.json +++ b/erpnext/schools/doctype/fee_request/fee_request.json @@ -5,7 +5,7 @@ "allow_rename": 0, "autoname": "naming_series:", "beta": 0, - "creation": "2015-09-22 16:57:22.143710", + "creation": "2017-07-18 15:21:21.527136", "custom": 0, "docstatus": 0, "doctype": "DocType", @@ -411,36 +411,6 @@ "set_only_once": 0, "unique": 0 }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "amended_from", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Amended From", - "length": 0, - "no_copy": 1, - "options": "Fee Request", - "permlevel": 0, - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -564,16 +534,15 @@ ], "has_web_view": 0, "hide_heading": 0, - "hide_toolbar": 0, + "hide_toolbar": 1, "idx": 0, "image_view": 0, "in_create": 0, - "is_submittable": 1, - "issingle": 0, + "is_submittable": 0, + "issingle": 1, "istable": 0, "max_attachments": 0, - "menu_index": 0, - "modified": "2017-07-13 18:19:26.612801", + "modified": "2017-07-18 15:28:11.201755", "modified_by": "Administrator", "module": "Schools", "name": "Fee Request", @@ -583,21 +552,21 @@ { "amend": 0, "apply_user_permissions": 0, - "cancel": 1, + "cancel": 0, "create": 1, "delete": 1, "email": 1, - "export": 1, + "export": 0, "if_owner": 0, "import": 0, "permlevel": 0, "print": 1, "read": 1, - "report": 1, + "report": 0, "role": "Academics User", "set_user_permissions": 0, "share": 1, - "submit": 1, + "submit": 0, "write": 1 } ], diff --git a/erpnext/schools/doctype/fee_request/fee_request.py b/erpnext/schools/doctype/fee_request/fee_request.py index 3877414d23..a3552b9b7d 100644 --- a/erpnext/schools/doctype/fee_request/fee_request.py +++ b/erpnext/schools/doctype/fee_request/fee_request.py @@ -49,10 +49,6 @@ class FeeRequest(Document): self.grand_total = total_fee_count*self.total_amount self.grand_total_in_words = money_in_words(self.grand_total) - if self.fee_request_against == "Student Group": - for student_group in self.student_groups: - students += get_student_group_students(student_group, self.academic_year) - @frappe.whitelist() def get_fee_structure(source_name,target_doc=None): diff --git a/erpnext/schools/doctype/fee_structure/fee_structure.json b/erpnext/schools/doctype/fee_structure/fee_structure.json index ecbf62009e..f5b48dcbd7 100644 --- a/erpnext/schools/doctype/fee_structure/fee_structure.json +++ b/erpnext/schools/doctype/fee_structure/fee_structure.json @@ -13,6 +13,37 @@ "editable_grid": 0, "engine": "InnoDB", "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "naming_series", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Naming Series", + "length": 0, + "no_copy": 0, + "options": "FS.", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 1, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -41,7 +72,7 @@ "read_only": 0, "remember_last_selected_value": 0, "report_hide": 0, - "reqd": 1, + "reqd": 0, "search_index": 1, "set_only_once": 0, "unique": 0 @@ -77,37 +108,6 @@ "set_only_once": 0, "unique": 0 }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "naming_series", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Naming Series", - "length": 0, - "no_copy": 0, - "options": "FS.", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 1, - "unique": 0 - }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -202,6 +202,37 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "", + "fieldname": "disabled", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Disabled", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -291,6 +322,35 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_11", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -334,7 +394,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-07-13 15:20:45.727524", + "modified": "2017-07-18 15:02:29.909472", "modified_by": "Administrator", "module": "Schools", "name": "Fee Structure", diff --git a/erpnext/schools/doctype/fees/fees.js b/erpnext/schools/doctype/fees/fees.js index e5a840a3b2..d5e71fe9ec 100644 --- a/erpnext/schools/doctype/fees/fees.js +++ b/erpnext/schools/doctype/fees/fees.js @@ -2,9 +2,8 @@ cur_frm.add_fetch("student", "title", "student_name"); frappe.ui.form.on("Fees", { - onload: function(frm){ - cur_frm.set_query("academic_term",function(){ + frm.set_query("academic_term",function(){ return{ "filters":{ "academic_year": (frm.doc.academic_year) @@ -12,35 +11,102 @@ frappe.ui.form.on("Fees", { }; }); - cur_frm.set_query("fee_structure",function(){ + frm.set_query("fee_structure",function(){ return{ "filters":{ "academic_term": (frm.doc.academic_term) } }; }); + + // debit account for booking the fee + frm.set_query("debit_to", function(doc) { + return { + filters: { + 'account_type': 'Receivable', + 'is_group': 0, + 'company': doc.company + } + } + }); + + if (!frm.doc.posting_date) { + frm.doc.posting_date = frappe.datetime.get_today() + } }, refresh: function(frm) { - if (frm.doc.docstatus === 1 && (frm.doc.total_amount > frm.doc.paid_amount)) { - frm.add_custom_button(__("Collect Fees"), function() { - frappe.prompt({fieldtype:"Float", label: __("Amount Paid"), fieldname:"amt"}, - function(data) { - frappe.call({ - method:"erpnext.schools.api.collect_fees", - args: { - "fees": frm.doc.name, - "amt": data.amt - }, - callback: function(r) { - frm.doc.paid_amount = r.message - frm.doc.outstanding_amount = frm.doc.total_amount - r.message - frm.refresh() - } - }); - }, __("Enter Paid Amount"), __("Collect")); - }); + if(frm.doc.docstatus == 0 && frm.doc.set_posting_time) { + frm.set_df_property('posting_date', 'read_only', 0); + frm.set_df_property('posting_time', 'read_only', 0); + } else { + frm.set_df_property('posting_date', 'read_only', 1); + frm.set_df_property('posting_time', 'read_only', 1); } + if(frm.doc.docstatus===1) { + frm.add_custom_button(__('Accounting Ledger'), function() { + frappe.route_options = { + voucher_no: frm.doc.name, + from_date: frm.doc.posting_date, + to_date: frm.doc.posting_date, + company: frm.doc.company, + group_by_voucher: false + }; + frappe.set_route("query-report", "General Ledger"); + }, __("View")); + } + if(frm.doc.docstatus===1 && frm.doc.outstanding_amount>0) { + frm.add_custom_button(__("Payment Request"), function() { + frm.events.make_payment_request(frm) + }, __("Make")); + frm.page.set_inner_btn_group_as_primary(__("Make")); + } + if(frm.doc.docstatus===1 && frm.doc.outstanding_amount!=0) { + frm.add_custom_button(__("Payment"), function() { + frm.events.make_payment_entry(frm) + }, __("Make")); + frm.page.set_inner_btn_group_as_primary(__("Make")); + } + }, + // if (frm.doc.docstatus === 1 && (frm.doc.total_amount > frm.doc.paid_amount)) { + // frm.add_custom_button(__("Collect Fees"), function() { + // frappe.prompt({fieldtype:"Float", label: __("Amount Paid"), fieldname:"amt"}, + // function(data) { + // frappe.call({ + // method:"erpnext.schools.api.collect_fees", + // args: { + // "fees": frm.doc.name, + // "amt": data.amt + // }, + // callback: function(r) { + // frm.doc.paid_amount = r.message + // frm.doc.outstanding_amount = frm.doc.total_amount - r.message + // frm.refresh() + // } + // }); + // }, __("Enter Paid Amount"), __("Collect")); + // }); + // } + + make_payment_request: function(frm) { + frappe.call({ + method:"erpnext.accounts.doctype.payment_request.payment_request.make_payment_request", + args: { + "dt": cur_frm.doc.doctype, + "dn": cur_frm.doc.name, + "recipient_id": cur_frm.doc.contact_email + }, + callback: function(r) { + if(!r.exc){ + var doc = frappe.model.sync(r.message); + frappe.set_route("Form", r.message.doctype, r.message.name); + } + } + }) + }, + + set_posting_time: function(frm) { + frm.refresh() }, program: function(frm) { @@ -88,14 +154,15 @@ frappe.ui.form.on("Fees", { }, calculate_total_amount: function(frm) { - var total_amount = 0; + var grand_total = 0; for(var i=0;i doc.paid_amount) && doc.due_date < get_today()) { + if ((doc.grand_total > doc.paid_amount) && doc.due_date < get_today()) { return [__("Overdue"), "red", ["due_date,<," + get_today()], ["due_date,<," + get_today()]]; } - else if (doc.total_amount > doc.paid_amount) { + else if (doc.grand_total > doc.paid_amount) { return [__("Pending"), "orange"]; } else { From 2b39d5d6d50cd0ea823070dc6afb432d8acfc488 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Mon, 24 Jul 2017 20:08:15 +0530 Subject: [PATCH 62/72] make gl_entry on submission of fees --- erpnext/accounts/doctype/gl_entry/gl_entry.py | 4 +- erpnext/accounts/general_ledger.py | 1 + .../doctype/fee_request/fee_request.json | 61 ++++++++- erpnext/schools/doctype/fees/fees.json | 127 +++++++++++++++++- erpnext/schools/doctype/fees/fees.py | 48 ++++--- 5 files changed, 214 insertions(+), 27 deletions(-) diff --git a/erpnext/accounts/doctype/gl_entry/gl_entry.py b/erpnext/accounts/doctype/gl_entry/gl_entry.py index 304af37308..47e214e1b4 100644 --- a/erpnext/accounts/doctype/gl_entry/gl_entry.py +++ b/erpnext/accounts/doctype/gl_entry/gl_entry.py @@ -36,7 +36,7 @@ class GLEntry(Document): validate_balance_type(self.account, adv_adj) # Update outstanding amt on against voucher - if self.against_voucher_type in ['Journal Entry', 'Sales Invoice', 'Purchase Invoice'] \ + if self.against_voucher_type in ['Journal Entry', 'Sales Invoice', 'Purchase Invoice', 'Fees'] \ and self.against_voucher and update_outstanding == 'Yes' and not from_repost: update_outstanding_amt(self.account, self.party_type, self.party, self.against_voucher_type, self.against_voucher) @@ -196,7 +196,7 @@ def update_outstanding_amt(account, party_type, party, against_voucher_type, aga frappe.throw(_("Outstanding for {0} cannot be less than zero ({1})").format(against_voucher, fmt_money(bal))) # Update outstanding amt on against voucher - if against_voucher_type in ["Sales Invoice", "Purchase Invoice"]: + if against_voucher_type in ["Sales Invoice", "Purchase Invoice", "Fees"]: ref_doc = frappe.get_doc(against_voucher_type, against_voucher) ref_doc.db_set('outstanding_amount', bal) ref_doc.set_status(update=True) diff --git a/erpnext/accounts/general_ledger.py b/erpnext/accounts/general_ledger.py index c575d59ae7..23715fa457 100644 --- a/erpnext/accounts/general_ledger.py +++ b/erpnext/accounts/general_ledger.py @@ -116,6 +116,7 @@ def round_off_debit_credit(gl_map): currency=frappe.db.get_value("Company", gl_map[0].company, "default_currency", cache=True)) debit_credit_diff = 0.0 + print ("gl map", gl_map) for entry in gl_map: entry.debit = flt(entry.debit, precision) entry.credit = flt(entry.credit, precision) diff --git a/erpnext/schools/doctype/fee_request/fee_request.json b/erpnext/schools/doctype/fee_request/fee_request.json index 3d7fa8f515..6cdcd8d506 100644 --- a/erpnext/schools/doctype/fee_request/fee_request.json +++ b/erpnext/schools/doctype/fee_request/fee_request.json @@ -13,6 +13,65 @@ "editable_grid": 0, "engine": "InnoDB", "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "create_fees", + "fieldtype": "Button", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Create Fees", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_19", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -542,7 +601,7 @@ "issingle": 1, "istable": 0, "max_attachments": 0, - "modified": "2017-07-18 15:28:11.201755", + "modified": "2017-07-24 15:49:48.117287", "modified_by": "Administrator", "module": "Schools", "name": "Fee Request", diff --git a/erpnext/schools/doctype/fees/fees.json b/erpnext/schools/doctype/fees/fees.json index ab16f0099b..1a9dcc0c6a 100644 --- a/erpnext/schools/doctype/fees/fees.json +++ b/erpnext/schools/doctype/fees/fees.json @@ -4,7 +4,7 @@ "allow_import": 0, "allow_rename": 0, "autoname": "naming_series:", - "beta": 0, + "beta": 1, "creation": "2015-09-22 16:57:22.143710", "custom": 0, "docstatus": 0, @@ -114,7 +114,7 @@ "default": "", "fieldname": "send_payment_request", "fieldtype": "Check", - "hidden": 1, + "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, @@ -136,6 +136,36 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "include_payment", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Include Payment", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -1108,6 +1138,97 @@ "search_index": 0, "set_only_once": 0, "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "against_income_account", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Credit To", + "length": 0, + "no_copy": 0, + "options": "Account", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_39", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "cost_center", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Cost Center", + "length": 0, + "no_copy": 0, + "options": "Cost Center", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 } ], "has_web_view": 0, @@ -1121,7 +1242,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-07-18 17:56:39.456516", + "modified": "2017-07-24 20:01:58.683352", "modified_by": "Administrator", "module": "Schools", "name": "Fees", diff --git a/erpnext/schools/doctype/fees/fees.py b/erpnext/schools/doctype/fees/fees.py index 19cea7bf89..824a6647c2 100644 --- a/erpnext/schools/doctype/fees/fees.py +++ b/erpnext/schools/doctype/fees/fees.py @@ -9,9 +9,10 @@ from frappe import _ from frappe.utils import money_in_words from erpnext.accounts.doctype.payment_request.payment_request import make_payment_request from frappe.utils.csvutils import getlink +from erpnext.controllers.accounts_controller import AccountsController -class Fees(Document): +class Fees(AccountsController): def validate(self): self.set_missing_values() self.calculate_total() @@ -20,6 +21,10 @@ class Fees(Document): def set_missing_values(self): if not self.contact_email: self.contact_email = "manas@erpnext.com" + if not self.against_income_account: + self.against_income_account = "Academic Fees - S" + if not self.cost_center: + self.cost_center = "Main - S" def calculate_total(self): """Calculates total amount.""" @@ -39,28 +44,29 @@ class Fees(Document): frappe.msgprint(_("Payment request {0} created").format(getlink("Payment Request", pr.name))) - def make_gl_entries(self, gl_entries=None, repost_future_gle=True, from_repost=False): + def make_gl_entries(self): if not self.grand_total: return - - if not gl_entries: - gl_entries = self.get_gl_dict({ - "account": self.debit_to, - "party_type": "Student", - "party": self.student, - "against": self.against_income_account, - "debit": grand_total_in_company_currency, - "debit_in_account_currency": grand_total_in_company_currency \ - if self.party_account_currency==self.company_currency else self.grand_total, - "against_voucher": self.name, - "against_voucher_type": self.doctype - }, self.party_account_currency) - - if gl_entries: - from erpnext.accounts.general_ledger import make_gl_entries - - make_gl_entries(gl_entries, cancel=(self.docstatus == 2)) - + student_gl_entries = self.get_gl_dict({ + "account": self.debit_to, + "party_type": "Student", + "party": self.student, + "against": self.against_income_account, + "debit": self.grand_total, + "debit_in_account_currency": self.grand_total, + "against_voucher": self.name, + "against_voucher_type": self.doctype + }) + fee_gl_entry = self.get_gl_dict({ + "account": self.against_income_account, + "against": self.student, + "credit": self.grand_total, + "credit_in_account_currency": self.grand_total, + "cost_center": self.cost_center + }) + from erpnext.accounts.general_ledger import make_gl_entries + make_gl_entries([student_gl_entries, fee_gl_entry], cancel=(self.docstatus == 2), + update_outstanding="Yes", merge_entries=False) def get_fee_list(doctype, txt, filters, limit_start, limit_page_length=20, order_by="modified"): user = frappe.session.user From 4e0559bc7948fc175e81e0e2752caa5157b39851 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Tue, 25 Jul 2017 15:22:47 +0530 Subject: [PATCH 63/72] make payment entry for the fees --- .../doctype/payment_entry/payment_entry.js | 28 +- .../doctype/payment_entry/payment_entry.py | 47 ++-- .../payment_request/payment_request.py | 3 - .../doctype/sales_invoice/sales_invoice.py | 8 - erpnext/accounts/general_ledger.py | 1 - erpnext/schools/api.py | 7 + .../doctype/fee_request/fee_request.js | 2 +- .../doctype/fee_request/fee_request.py | 3 - .../doctype/fee_request/test_fee_request.py | 1 - .../fee_request_program.py | 1 - .../fee_request_student_group.py | 1 - .../doctype/fee_structure/fee_structure.js | 21 ++ .../doctype/fee_structure/fee_structure.json | 250 +++++++++++++++--- erpnext/schools/doctype/fees/fees.js | 85 +++--- erpnext/schools/doctype/fees/fees.json | 12 +- erpnext/schools/doctype/fees/fees.py | 87 +++++- erpnext/schools/doctype/fees/fees_list.js | 17 +- erpnext/schools/doctype/student/student.json | 2 +- 18 files changed, 436 insertions(+), 140 deletions(-) diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.js b/erpnext/accounts/doctype/payment_entry/payment_entry.js index d1318d0b51..9bc649f774 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.js +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.js @@ -12,7 +12,8 @@ frappe.ui.form.on('Payment Entry', { setup: function(frm) { frm.set_query("paid_from", function() { - var party_account_type = frm.doc.party_type=="Customer" ? "Receivable" : "Payable"; + var party_account_type = in_list(["Customer", "Student"], frm.doc.party_type) ? + "Receivable" : "Payable"; var account_types = in_list(["Pay", "Internal Transfer"], frm.doc.payment_type) ? ["Bank", "Cash"] : party_account_type; @@ -28,13 +29,14 @@ frappe.ui.form.on('Payment Entry', { frm.set_query("party_type", function() { return{ "filters": { - "name": ["in",["Customer","Supplier", "Employee"]], + "name": ["in",["Customer","Supplier", "Employee", "Student"]], } } }); frm.set_query("paid_to", function() { - var party_account_type = frm.doc.party_type=="Customer" ? "Receivable" : "Payable"; + var party_account_type = in_list(["Customer", "Student"], frm.doc.party_type) ? + "Receivable" : "Payable"; var account_types = in_list(["Receive", "Internal Transfer"], frm.doc.payment_type) ? ["Bank", "Cash"] : party_account_type; @@ -72,6 +74,8 @@ frappe.ui.form.on('Payment Entry', { var doctypes = ["Purchase Order", "Purchase Invoice", "Journal Entry"]; } else if (frm.doc.party_type=="Employee") { var doctypes = ["Expense Claim", "Journal Entry"]; + } else if (frm.doc.party_type=="Student") { + var doctypes = ["Fees"]; } else { var doctypes = ["Journal Entry"]; } @@ -85,7 +89,7 @@ frappe.ui.form.on('Payment Entry', { child = locals[cdt][cdn]; filters = {"docstatus": 1, "company": doc.company}; party_type_doctypes = ['Sales Invoice', 'Sales Order', 'Purchase Invoice', - 'Purchase Order', 'Expense Claim']; + 'Purchase Order', 'Expense Claim', 'Fees']; if (in_list(party_type_doctypes, child.reference_doctype)) { filters[doc.party_type.toLowerCase()] = doc.party; @@ -207,19 +211,13 @@ frappe.ui.form.on('Payment Entry', { frm.set_value(field, null); }); } else { - if(!frm.doc.party) - { - if (frm.doc.payment_type=="Receive"){ - frm.set_value("party_type", "Customer"); - } - } - else - { - frm.events.party(frm); + if(frm.doc.party) { + frm.events.party(frm); } - if(frm.doc.mode_of_payment) + if(frm.doc.mode_of_payment) { frm.events.mode_of_payment(frm); + } } }, @@ -254,6 +252,7 @@ frappe.ui.form.on('Payment Entry', { date: frm.doc.posting_date }, callback: function(r, rt) { + console.log(r, rt); if(r.message) { if(frm.doc.payment_type == "Receive") { frm.set_value("paid_from", r.message.party_account); @@ -491,6 +490,7 @@ frappe.ui.form.on('Payment Entry', { } }, callback: function(r, rt) { + console.log(r, rt); if(r.message) { var total_positive_outstanding = 0; var total_negative_outstanding = 0; diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index 29ad83152d..bf2213ec46 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -103,6 +103,9 @@ class PaymentEntry(AccountsController): self.party_name = frappe.db.get_value(self.party_type, self.party, self.party_type.lower() + "_name") + _party_name = "title" if self.party_type == "Student" else self.party_type.lower() + "_name" + self.party_name = frappe.db.get_value(self.party_type, self.party, _party_name) + if self.party: if not self.party_balance: self.party_balance = get_balance_on(party_type=self.party_type, @@ -149,7 +152,7 @@ class PaymentEntry(AccountsController): frappe.throw(_("Invalid {0}: {1}").format(self.party_type, self.party)) if self.party_account: - party_account_type = "Receivable" if self.party_type=="Customer" else "Payable" + party_account_type = "Receivable" if self.party_type in ("Customer", "Student") else "Payable" self.validate_account_type(self.party_account, [party_account_type]) def validate_bank_accounts(self): @@ -182,7 +185,9 @@ class PaymentEntry(AccountsController): frappe.throw(_("{0} is mandatory").format(self.meta.get_label(field))) def validate_reference_documents(self): - if self.party_type == "Customer": + if self.party_type == "Student": + valid_reference_doctypes = ("Fees") + elif self.party_type == "Customer": valid_reference_doctypes = ("Sales Order", "Sales Invoice", "Journal Entry") elif self.party_type == "Supplier": valid_reference_doctypes = ("Purchase Order", "Purchase Invoice", "Journal Entry") @@ -209,13 +214,17 @@ class PaymentEntry(AccountsController): else: self.validate_journal_entry() - if d.reference_doctype in ("Sales Invoice", "Purchase Invoice", "Expense Claim"): - if self.party_type=="Customer": + if d.reference_doctype in ("Sales Invoice", "Purchase Invoice", "Expense Claim", "Fees"): + if self.party_type in ("Customer", "Student"): ref_party_account = ref_doc.debit_to elif self.party_type=="Supplier": ref_party_account = ref_doc.credit_to elif self.party_type=="Employee": ref_party_account = ref_doc.payable_account + + if d.reference_doctype in ("Sales Invoice", "Purchase Invoice", "Fees"): + ref_party_account = ref_doc.debit_to \ + if self.party_type in ("Customer", "Student") else ref_doc.credit_to if ref_party_account != self.party_account: frappe.throw(_("{0} {1} is associated with {2}, but Party Account is {3}") @@ -397,9 +406,9 @@ class PaymentEntry(AccountsController): "against": against_account, "account_currency": self.party_account_currency }) - - dr_or_cr = "credit" if self.party_type == "Customer" else "debit" - + + dr_or_cr = "credit" if self.party_type in ["Customer", "Student"] else "debit" + for d in self.get("references"): gle = party_gl_dict.copy() gle.update({ @@ -498,11 +507,13 @@ def get_outstanding_reference_documents(args): # Get negative outstanding sales /purchase invoices total_field = "base_grand_total" if party_account_currency == company_currency else "grand_total" - negative_outstanding_invoices = get_negative_outstanding_invoices(args.get("party_type"), - args.get("party"), args.get("party_account"), total_field) + negative_outstanding_invoices = [] + if (args.get("party_type") != "Student"): + negative_outstanding_invoices = get_negative_outstanding_invoices(args.get("party_type"), + args.get("party"), args.get("party_account"), total_field) - # Get positive outstanding sales /purchase invoices - outstanding_invoices = get_outstanding_invoices(args.get("party_type"), args.get("party"), + # Get positive outstanding sales /purchase invoices/ Fees + outstanding_invoices = get_outstanding_invoices(args.get("party_type"), args.get("party"), args.get("party_account")) for d in outstanding_invoices: @@ -518,9 +529,11 @@ def get_outstanding_reference_documents(args): d["bill_no"] = frappe.db.get_value(d.voucher_type, d.voucher_no, "bill_no") # Get all SO / PO which are not fully billed or aginst which full advance not paid - orders_to_be_billed = get_orders_to_be_billed(args.get("posting_date"),args.get("party_type"), args.get("party"), - party_account_currency, company_currency) - + orders_to_be_billed = [] + if (args.get("party_type") != "Student"): + orders_to_be_billed = get_orders_to_be_billed(args.get("posting_date"),args.get("party_type"), + args.get("party"), party_account_currency, company_currency) + return negative_outstanding_invoices + outstanding_invoices + orders_to_be_billed def get_orders_to_be_billed(posting_date, party_type, party, party_account_currency, company_currency): @@ -634,7 +647,11 @@ def get_reference_details(reference_doctype, reference_name, party_account_curre total_amount = outstanding_amount = exchange_rate = None ref_doc = frappe.get_doc(reference_doctype, reference_name) - if reference_doctype != "Journal Entry": + if reference_doctype == "Fees": + total_amount = ref_doc.get("grand_total") + exchange_rate = 1 + outstanding_amount = ref_doc.get("outstanding_amount") + elif reference_doctype != "Journal Entry": if party_account_currency == ref_doc.company_currency: if ref_doc.doctype == "Expense Claim": total_amount = ref_doc.total_sanctioned_amount diff --git a/erpnext/accounts/doctype/payment_request/payment_request.py b/erpnext/accounts/doctype/payment_request/payment_request.py index 3796877293..807ad280db 100644 --- a/erpnext/accounts/doctype/payment_request/payment_request.py +++ b/erpnext/accounts/doctype/payment_request/payment_request.py @@ -61,7 +61,6 @@ class PaymentRequest(Document): def set_payment_request_url(self): if self.payment_account: self.payment_url = self.get_payment_url() - print (self.payment_url) if self.payment_url: self.db_set('payment_url', self.payment_url) @@ -102,7 +101,6 @@ class PaymentRequest(Document): def create_payment_entry(self, submit=True): """create entry""" - print ("creating the payment entry") frappe.flags.ignore_account_permission = True ref_doc = frappe.get_doc(self.reference_doctype, self.reference_name) @@ -257,7 +255,6 @@ def make_payment_request(**args): if args.order_type == "Shopping Cart" or args.mute_email: pr.flags.mute_email = True - print ("comign in creatinf the new dottype") if args.submit_doc: pr.insert(ignore_permissions=True) pr.submit() diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index 800ec1460d..7a787c4cba 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -583,11 +583,8 @@ class SalesInvoice(SellingController): return if not gl_entries: - print ("if not gl_entries") gl_entries = self.get_gl_entries() - print (gl_entries) - if gl_entries: from erpnext.accounts.general_ledger import make_gl_entries @@ -596,7 +593,6 @@ class SalesInvoice(SellingController): make_gl_entries(gl_entries, cancel=(self.docstatus == 2), update_outstanding=update_outstanding, merge_entries=False) - # frappe.throw("go ahead bro") if update_outstanding == "No": from erpnext.accounts.doctype.gl_entry.gl_entry import update_outstanding_amt @@ -613,22 +609,18 @@ class SalesInvoice(SellingController): delete_gl_entries(voucher_type=self.doctype, voucher_no=self.name) def get_gl_entries(self, warehouse_account=None): - print ("inside the get_gl_entries") from erpnext.accounts.general_ledger import merge_similar_entries gl_entries = [] self.make_customer_gl_entry(gl_entries) - print ("make cuustomer gl entry", gl_entries) self.make_tax_gl_entries(gl_entries) self.make_item_gl_entries(gl_entries) - print ("make item gl entry", gl_entries) # merge gl entries before adding pos entries gl_entries = merge_similar_entries(gl_entries) - print ("after merged gl entry", gl_entries) self.make_pos_gl_entries(gl_entries) self.make_gle_for_change_amount(gl_entries) diff --git a/erpnext/accounts/general_ledger.py b/erpnext/accounts/general_ledger.py index 23715fa457..c575d59ae7 100644 --- a/erpnext/accounts/general_ledger.py +++ b/erpnext/accounts/general_ledger.py @@ -116,7 +116,6 @@ def round_off_debit_credit(gl_map): currency=frappe.db.get_value("Company", gl_map[0].company, "default_currency", cache=True)) debit_credit_diff = 0.0 - print ("gl map", gl_map) for entry in gl_map: entry.debit = flt(entry.debit, precision) entry.credit = flt(entry.credit, precision) diff --git a/erpnext/schools/api.py b/erpnext/schools/api.py index 41d4a0dcb8..13aa74bc22 100644 --- a/erpnext/schools/api.py +++ b/erpnext/schools/api.py @@ -354,3 +354,10 @@ def update_email_group(doctype, name): if email: email_list.append(email) add_subscribers(name, email_list) + +@frappe.whitelist() +def get_current_enrollment(student, academic_year=None): + current_academic_year = academic_year or frappe.defaults.get_defaults().academic_year + return frappe.get_all("Program Enrollment", fields=["name", "student", "student_name", "student_category", + "program", "student_batch_name", "academic_year", "academic_term"], filters={"student":student, + "academic_year": current_academic_year})[0] diff --git a/erpnext/schools/doctype/fee_request/fee_request.js b/erpnext/schools/doctype/fee_request/fee_request.js index 30f8e5bfaa..830940e195 100644 --- a/erpnext/schools/doctype/fee_request/fee_request.js +++ b/erpnext/schools/doctype/fee_request/fee_request.js @@ -3,7 +3,7 @@ frappe.ui.form.on('Fee Request', { refresh: function(frm) { - frm.disable_save(); + frm.disable_save(); }, fee_structure: function(frm) { if (frm.doc.fee_structure) { diff --git a/erpnext/schools/doctype/fee_request/fee_request.py b/erpnext/schools/doctype/fee_request/fee_request.py index a3552b9b7d..f8cb554f96 100644 --- a/erpnext/schools/doctype/fee_request/fee_request.py +++ b/erpnext/schools/doctype/fee_request/fee_request.py @@ -7,9 +7,6 @@ import frappe from frappe import _ from frappe.model.document import Document from frappe.model.mapper import get_mapped_doc -from erpnext.schools.api import get_student_group_students -from erpnext.schools.doctype.student_group.student_group import get_program_enrollment -from frappe.model.mapper import get_mapped_doc from frappe.utils import money_in_words diff --git a/erpnext/schools/doctype/fee_request/test_fee_request.py b/erpnext/schools/doctype/fee_request/test_fee_request.py index a76ea30de6..f419e942e7 100644 --- a/erpnext/schools/doctype/fee_request/test_fee_request.py +++ b/erpnext/schools/doctype/fee_request/test_fee_request.py @@ -3,7 +3,6 @@ # See license.txt from __future__ import unicode_literals -import frappe import unittest class TestFeeRequest(unittest.TestCase): diff --git a/erpnext/schools/doctype/fee_request_program/fee_request_program.py b/erpnext/schools/doctype/fee_request_program/fee_request_program.py index a4473b90f8..61ce1d5782 100644 --- a/erpnext/schools/doctype/fee_request_program/fee_request_program.py +++ b/erpnext/schools/doctype/fee_request_program/fee_request_program.py @@ -3,7 +3,6 @@ # For license information, please see license.txt from __future__ import unicode_literals -import frappe from frappe.model.document import Document class FeeRequestProgram(Document): diff --git a/erpnext/schools/doctype/fee_request_student_group/fee_request_student_group.py b/erpnext/schools/doctype/fee_request_student_group/fee_request_student_group.py index ecbc3abd38..777d225d9a 100644 --- a/erpnext/schools/doctype/fee_request_student_group/fee_request_student_group.py +++ b/erpnext/schools/doctype/fee_request_student_group/fee_request_student_group.py @@ -3,7 +3,6 @@ # For license information, please see license.txt from __future__ import unicode_literals -import frappe from frappe.model.document import Document class FeeRequestStudentGroup(Document): diff --git a/erpnext/schools/doctype/fee_structure/fee_structure.js b/erpnext/schools/doctype/fee_structure/fee_structure.js index fa46278859..7619cf5fbc 100644 --- a/erpnext/schools/doctype/fee_structure/fee_structure.js +++ b/erpnext/schools/doctype/fee_structure/fee_structure.js @@ -1,3 +1,24 @@ +// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +cur_frm.add_fetch("company", "default_receivable_account", "debit_to"); +cur_frm.add_fetch("company", "default_income_account", "against_income_account"); +cur_frm.add_fetch("company", "cost_center", "cost_center"); + +frappe.ui.form.on('Fee Structure', { + onload: function(frm) { + frm.set_query("debit_to", function(doc) { + return { + filters: { + 'account_type': 'Receivable', + 'is_group': 0, + 'company': doc.company + } + }; + }); + } +}); + frappe.ui.form.on("Fee Component", { amount: function(frm) { var total_amount = 0; diff --git a/erpnext/schools/doctype/fee_structure/fee_structure.json b/erpnext/schools/doctype/fee_structure/fee_structure.json index f5b48dcbd7..c0daa33fb3 100644 --- a/erpnext/schools/doctype/fee_structure/fee_structure.json +++ b/erpnext/schools/doctype/fee_structure/fee_structure.json @@ -44,6 +44,37 @@ "set_only_once": 1, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "student_category", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Student Category", + "length": 0, + "no_copy": 0, + "options": "Student Category", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -77,37 +108,6 @@ "set_only_once": 0, "unique": 0 }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "student_category", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Student Category", - "length": 0, - "no_copy": 0, - "options": "Student Category", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -380,6 +380,190 @@ "search_index": 0, "set_only_once": 0, "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "accounts", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Accounts", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "", + "fieldname": "debit_to", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Debit To", + "length": 0, + "no_copy": 0, + "options": "Account", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "against_income_account", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Credit To", + "length": 0, + "no_copy": 0, + "options": "Account", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_16", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "cost_center", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Cost Center", + "length": 0, + "no_copy": 0, + "options": "Cost Center", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "company", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Company", + "length": 0, + "no_copy": 0, + "options": "Company", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 } ], "has_web_view": 0, @@ -394,8 +578,8 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-07-18 15:02:29.909472", - "modified_by": "Administrator", + "modified": "2017-07-27 12:52:12.439685", + "modified_by": "manas@erpnext.com", "module": "Schools", "name": "Fee Structure", "name_case": "", diff --git a/erpnext/schools/doctype/fees/fees.js b/erpnext/schools/doctype/fees/fees.js index d5e71fe9ec..20cb5bc60f 100644 --- a/erpnext/schools/doctype/fees/fees.js +++ b/erpnext/schools/doctype/fees/fees.js @@ -1,5 +1,11 @@ +// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt cur_frm.add_fetch("student", "title", "student_name"); +cur_frm.add_fetch("student", "student_email_id", "student_email"); +cur_frm.add_fetch("company", "default_receivable_account", "debit_to"); +cur_frm.add_fetch("company", "default_income_account", "against_income_account"); +cur_frm.add_fetch("company", "cost_center", "cost_center"); frappe.ui.form.on("Fees", { onload: function(frm){ @@ -19,7 +25,7 @@ frappe.ui.form.on("Fees", { }; }); - // debit account for booking the fee + // debit account for booking the fee frm.set_query("debit_to", function(doc) { return { filters: { @@ -27,11 +33,11 @@ frappe.ui.form.on("Fees", { 'is_group': 0, 'company': doc.company } - } + }; }); if (!frm.doc.posting_date) { - frm.doc.posting_date = frappe.datetime.get_today() + frm.doc.posting_date = frappe.datetime.get_today(); } }, @@ -57,56 +63,75 @@ frappe.ui.form.on("Fees", { } if(frm.doc.docstatus===1 && frm.doc.outstanding_amount>0) { frm.add_custom_button(__("Payment Request"), function() { - frm.events.make_payment_request(frm) + frm.events.make_payment_request(frm); }, __("Make")); frm.page.set_inner_btn_group_as_primary(__("Make")); } if(frm.doc.docstatus===1 && frm.doc.outstanding_amount!=0) { frm.add_custom_button(__("Payment"), function() { - frm.events.make_payment_entry(frm) + frm.events.make_payment_entry(frm); }, __("Make")); frm.page.set_inner_btn_group_as_primary(__("Make")); } }, - // if (frm.doc.docstatus === 1 && (frm.doc.total_amount > frm.doc.paid_amount)) { - // frm.add_custom_button(__("Collect Fees"), function() { - // frappe.prompt({fieldtype:"Float", label: __("Amount Paid"), fieldname:"amt"}, - // function(data) { - // frappe.call({ - // method:"erpnext.schools.api.collect_fees", - // args: { - // "fees": frm.doc.name, - // "amt": data.amt - // }, - // callback: function(r) { - // frm.doc.paid_amount = r.message - // frm.doc.outstanding_amount = frm.doc.total_amount - r.message - // frm.refresh() - // } - // }); - // }, __("Enter Paid Amount"), __("Collect")); - // }); - // } + + student: function(frm) { + if (frm.doc.student) { + frappe.call({ + method:"erpnext.schools.api.get_current_enrollment", + args: { + "student": frm.doc.student, + "academic_year": frm.doc.academic_year + }, + callback: function(r) { + if(r){ + console.log(r); + frm.set_value("student_name", r.message.student_name); + frm.set_value("program_enrollment", r.message.name); + frm.set_value("program", r.message.program); + frm.set_value("student_batch", r.message.student_batch_name); + frm.set_value("student_category", r.message.student_category); + frm.set_value("academic_term", r.message.academic_term); + frm.set_value("academic_year", r.message.academic_year); + } + } + }); + } + }, make_payment_request: function(frm) { frappe.call({ method:"erpnext.accounts.doctype.payment_request.payment_request.make_payment_request", args: { - "dt": cur_frm.doc.doctype, - "dn": cur_frm.doc.name, - "recipient_id": cur_frm.doc.contact_email + "dt": frm.doc.doctype, + "dn": frm.doc.name, + "recipient_id": frm.doc.contact_email }, callback: function(r) { if(!r.exc){ var doc = frappe.model.sync(r.message); - frappe.set_route("Form", r.message.doctype, r.message.name); + frappe.set_route("Form", doc[0].doctype, doc[0].name); } } - }) + }); + }, + + make_payment_entry: function(frm) { + return frappe.call({ + method: "erpnext.schools.doctype.fees.fees.get_payment_entry", + args: { + "dt": frm.doc.doctype, + "dn": frm.doc.name + }, + callback: function(r) { + var doc = frappe.model.sync(r.message); + frappe.set_route("Form", doc[0].doctype, doc[0].name); + } + }); }, set_posting_time: function(frm) { - frm.refresh() + frm.refresh(); }, program: function(frm) { diff --git a/erpnext/schools/doctype/fees/fees.json b/erpnext/schools/doctype/fees/fees.json index 1a9dcc0c6a..28cc25ea5d 100644 --- a/erpnext/schools/doctype/fees/fees.json +++ b/erpnext/schools/doctype/fees/fees.json @@ -477,9 +477,9 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "contact_email", + "fieldname": "student_email", "fieldtype": "Data", - "hidden": 1, + "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, @@ -904,7 +904,7 @@ "default": "0", "fieldname": "paid_amount", "fieldtype": "Currency", - "hidden": 0, + "hidden": 1, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, @@ -1093,7 +1093,7 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Account", + "label": "Accounting", "length": 0, "no_copy": 0, "permlevel": 0, @@ -1242,8 +1242,8 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-07-24 20:01:58.683352", - "modified_by": "Administrator", + "modified": "2017-07-27 12:58:44.197451", + "modified_by": "manas@erpnext.com", "module": "Schools", "name": "Fees", "name_case": "", diff --git a/erpnext/schools/doctype/fees/fees.py b/erpnext/schools/doctype/fees/fees.py index 824a6647c2..801319452e 100644 --- a/erpnext/schools/doctype/fees/fees.py +++ b/erpnext/schools/doctype/fees/fees.py @@ -6,25 +6,28 @@ from __future__ import unicode_literals from frappe.model.document import Document import frappe from frappe import _ -from frappe.utils import money_in_words +from frappe.utils import money_in_words, nowdate from erpnext.accounts.doctype.payment_request.payment_request import make_payment_request from frappe.utils.csvutils import getlink +from erpnext.accounts.utils import get_account_currency from erpnext.controllers.accounts_controller import AccountsController - +from erpnext.accounts.doctype.journal_entry.journal_entry import get_default_bank_cash_account class Fees(AccountsController): + def set_indicator(self): + """Set indicator for portal""" + if self.outstanding_amount > 0: + self.indicator_color = "orange" + self.indicator_title = _("Unpaid") + else: + self.indicator_color = "green" + self.indicator_title = _("Paid") + def validate(self): - self.set_missing_values() self.calculate_total() - # self.validate_debit_to_account() - - def set_missing_values(self): - if not self.contact_email: - self.contact_email = "manas@erpnext.com" - if not self.against_income_account: - self.against_income_account = "Academic Fees - S" - if not self.cost_center: - self.cost_center = "Main - S" + ''' + set missing field here and validate the accounts + ''' def calculate_total(self): """Calculates total amount.""" @@ -77,6 +80,66 @@ def get_fee_list(doctype, txt, filters, limit_start, limit_page_length=20, order order by due_date asc limit {0} , {1}''' .format(limit_start, limit_page_length), student, as_dict = True) + +@frappe.whitelist() +def get_payment_entry(dt, dn, bank_account=None): + doc = frappe.get_doc(dt, dn) + + party_type = "Student" + party_account = doc.debit_to + party_account_currency = doc.get("currency") or get_account_currency(party_account) + + # payment type + if (doc.outstanding_amount > 0): + payment_type = "Receive" + + # amounts + grand_total = outstanding_amount = 0 + grand_total = doc.grand_total + outstanding_amount = doc.outstanding_amount + + # bank or cash + bank = get_default_bank_cash_account(doc.company, "Bank") + + paid_amount = received_amount = 0 + if party_account_currency == bank.account_currency: + paid_amount = received_amount = abs(outstanding_amount) + elif payment_type == "Receive": + paid_amount = abs(outstanding_amount) + else: + received_amount = abs(outstanding_amount) + + pe = frappe.new_doc("Payment Entry") + pe.payment_type = payment_type + pe.company = doc.company + pe.posting_date = nowdate() + pe.mode_of_payment = doc.get("mode_of_payment") + pe.party_type = party_type + pe.party = doc.student + pe.party_name = doc.student_name + pe.paid_from = party_account if payment_type=="Receive" else bank.account + pe.paid_to = party_account if payment_type=="Pay" else bank.account + pe.paid_from_account_currency = party_account_currency if payment_type=="Receive" else bank.account_currency + pe.paid_to_account_currency = party_account_currency if payment_type=="Pay" else bank.account_currency + pe.paid_amount = paid_amount + pe.received_amount = received_amount + pe.allocate_payment_amount = 1 + pe.letter_head = doc.get("letter_head") + + pe.append("references", { + "reference_doctype": dt, + "reference_name": dn, + "due_date": doc.get("due_date"), + "total_amount": grand_total, + "outstanding_amount": outstanding_amount, + "allocated_amount": outstanding_amount + }) + + pe.setup_party_account_field() + pe.set_missing_values() + return pe + + def get_list_context(context=None): return { "show_sidebar": True, diff --git a/erpnext/schools/doctype/fees/fees_list.js b/erpnext/schools/doctype/fees/fees_list.js index 98314819d5..c7117f203c 100644 --- a/erpnext/schools/doctype/fees/fees_list.js +++ b/erpnext/schools/doctype/fees/fees_list.js @@ -1,15 +1,12 @@ frappe.listview_settings['Fees'] = { - add_fields: [ "grand_total", "paid_amount", "due_date"], + add_fields: ["grand_total", "outstanding_amount", "due_date"], get_indicator: function(doc) { - var { get_today } = frappe.datetime; - if ((doc.grand_total > doc.paid_amount) && doc.due_date < get_today()) { - return [__("Overdue"), "red", ["due_date,<," + get_today()], ["due_date,<," + get_today()]]; - } - else if (doc.grand_total > doc.paid_amount) { - return [__("Pending"), "orange"]; - } - else { - return [__("Paid"), "green"]; + if(flt(doc.outstanding_amount)==0) { + return [__("Paid"), "green", "outstanding_amount,=,0"] + } else if (flt(doc.outstanding_amount) > 0 && doc.due_date >= frappe.datetime.get_today()) { + return [__("Unpaid"), "orange", "outstanding_amount,>,0|due_date,>,Today"] + } else if (flt(doc.outstanding_amount) > 0 && doc.due_date < frappe.datetime.get_today()) { + return [__("Overdue"), "red", "outstanding_amount,>,0|due_date,<=,Today"] } } }; \ No newline at end of file diff --git a/erpnext/schools/doctype/student/student.json b/erpnext/schools/doctype/student/student.json index 75cb758b06..4961c2db8a 100644 --- a/erpnext/schools/doctype/student/student.json +++ b/erpnext/schools/doctype/student/student.json @@ -1114,7 +1114,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-07-07 16:30:08.930882", + "modified": "2017-07-26 19:46:26.893441", "modified_by": "Administrator", "module": "Schools", "name": "Student", From 49c52f763937720f7e0a8a4e68cd3e91f2dc32d2 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Fri, 28 Jul 2017 11:33:12 +0530 Subject: [PATCH 64/72] renamed one doctype to the fee schedule --- erpnext/config/schools.py | 2 +- .../doctype/fee_request/test_fee_request.py | 9 -------- .../{fee_request => fee_schedule}/__init__.py | 0 .../fee_schedule.js} | 4 ++-- .../fee_schedule.json} | 10 ++++---- .../fee_schedule.py} | 5 ++-- .../doctype/fee_schedule/test_fee_schedule.js | 23 +++++++++++++++++++ .../__init__.py | 0 .../fee_schedule_program.json} | 4 ++-- .../fee_schedule_program.py} | 3 ++- .../__init__.py | 0 .../fee_schedule_student_group.json} | 6 +++-- .../fee_schedule_student_group.py} | 3 ++- 13 files changed, 43 insertions(+), 26 deletions(-) delete mode 100644 erpnext/schools/doctype/fee_request/test_fee_request.py rename erpnext/schools/doctype/{fee_request => fee_schedule}/__init__.py (100%) rename erpnext/schools/doctype/{fee_request/fee_request.js => fee_schedule/fee_schedule.js} (83%) rename erpnext/schools/doctype/{fee_request/fee_request.json => fee_schedule/fee_schedule.json} (98%) rename erpnext/schools/doctype/{fee_request/fee_request.py => fee_schedule/fee_schedule.py} (96%) create mode 100644 erpnext/schools/doctype/fee_schedule/test_fee_schedule.js rename erpnext/schools/doctype/{fee_request_program => fee_schedule_program}/__init__.py (100%) rename erpnext/schools/doctype/{fee_request_program/fee_request_program.json => fee_schedule_program/fee_schedule_program.json} (97%) rename erpnext/schools/doctype/{fee_request_program/fee_request_program.py => fee_schedule_program/fee_schedule_program.py} (82%) rename erpnext/schools/doctype/{fee_request_student_group => fee_schedule_student_group}/__init__.py (100%) rename erpnext/schools/doctype/{fee_request_student_group/fee_request_student_group.json => fee_schedule_student_group/fee_schedule_student_group.json} (93%) rename erpnext/schools/doctype/{fee_request_student_group/fee_request_student_group.py => fee_schedule_student_group/fee_schedule_student_group.py} (80%) diff --git a/erpnext/config/schools.py b/erpnext/config/schools.py index 78c80ca6d1..6d2a9c0efd 100644 --- a/erpnext/config/schools.py +++ b/erpnext/config/schools.py @@ -155,7 +155,7 @@ def get_data(): "name": "Fees" },{ "type": "doctype", - "name": "Fee Request" + "name": "Fee Schedule" }, { "type": "doctype", diff --git a/erpnext/schools/doctype/fee_request/test_fee_request.py b/erpnext/schools/doctype/fee_request/test_fee_request.py deleted file mode 100644 index f419e942e7..0000000000 --- a/erpnext/schools/doctype/fee_request/test_fee_request.py +++ /dev/null @@ -1,9 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors -# See license.txt -from __future__ import unicode_literals - -import unittest - -class TestFeeRequest(unittest.TestCase): - pass diff --git a/erpnext/schools/doctype/fee_request/__init__.py b/erpnext/schools/doctype/fee_schedule/__init__.py similarity index 100% rename from erpnext/schools/doctype/fee_request/__init__.py rename to erpnext/schools/doctype/fee_schedule/__init__.py diff --git a/erpnext/schools/doctype/fee_request/fee_request.js b/erpnext/schools/doctype/fee_schedule/fee_schedule.js similarity index 83% rename from erpnext/schools/doctype/fee_request/fee_request.js rename to erpnext/schools/doctype/fee_schedule/fee_schedule.js index 830940e195..480ca577e1 100644 --- a/erpnext/schools/doctype/fee_request/fee_request.js +++ b/erpnext/schools/doctype/fee_schedule/fee_schedule.js @@ -1,14 +1,14 @@ // Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors // For license information, please see license.txt -frappe.ui.form.on('Fee Request', { +frappe.ui.form.on('Fee Schedule', { refresh: function(frm) { frm.disable_save(); }, fee_structure: function(frm) { if (frm.doc.fee_structure) { frappe.call({ - method: "erpnext.schools.doctype.fee_request.fee_request.get_fee_structure", + method: "erpnext.schools.doctype.fee_schedule.fee_schedule.get_fee_structure", args: { "target_doc": frm.doc.name, "source_name": frm.doc.fee_structure diff --git a/erpnext/schools/doctype/fee_request/fee_request.json b/erpnext/schools/doctype/fee_schedule/fee_schedule.json similarity index 98% rename from erpnext/schools/doctype/fee_request/fee_request.json rename to erpnext/schools/doctype/fee_schedule/fee_schedule.json index 6cdcd8d506..dd793b291b 100644 --- a/erpnext/schools/doctype/fee_request/fee_request.json +++ b/erpnext/schools/doctype/fee_schedule/fee_schedule.json @@ -21,7 +21,7 @@ "columns": 0, "fieldname": "create_fees", "fieldtype": "Button", - "hidden": 0, + "hidden": 1, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, @@ -335,7 +335,7 @@ "label": "", "length": 0, "no_copy": 0, - "options": "Fee Request Program", + "options": "Fee Schedule Program", "permlevel": 0, "precision": "", "print_hide": 0, @@ -367,7 +367,7 @@ "label": "", "length": 0, "no_copy": 0, - "options": "Fee Request Student Group", + "options": "Fee Schedule Student Group", "permlevel": 0, "precision": "", "print_hide": 0, @@ -601,10 +601,10 @@ "issingle": 1, "istable": 0, "max_attachments": 0, - "modified": "2017-07-24 15:49:48.117287", + "modified": "2017-07-28 11:14:28.695618", "modified_by": "Administrator", "module": "Schools", - "name": "Fee Request", + "name": "Fee Schedule", "name_case": "", "owner": "Administrator", "permissions": [ diff --git a/erpnext/schools/doctype/fee_request/fee_request.py b/erpnext/schools/doctype/fee_schedule/fee_schedule.py similarity index 96% rename from erpnext/schools/doctype/fee_request/fee_request.py rename to erpnext/schools/doctype/fee_schedule/fee_schedule.py index f8cb554f96..012c510b6b 100644 --- a/erpnext/schools/doctype/fee_request/fee_request.py +++ b/erpnext/schools/doctype/fee_schedule/fee_schedule.py @@ -10,7 +10,7 @@ from frappe.model.mapper import get_mapped_doc from frappe.utils import money_in_words -class FeeRequest(Document): +class FeeSchedule(Document): def validate(self): if not(self.programs or self.student_groups): frappe.throw(_("Select atleast one {0}").format(self.fee_request_against)) @@ -51,7 +51,6 @@ class FeeRequest(Document): def get_fee_structure(source_name,target_doc=None): fee_request = get_mapped_doc("Fee Structure", source_name, {"Fee Structure": { - "doctype": "Fee Request" + "doctype": "Fee Schedule" }}, ignore_permissions=True) return fee_request - diff --git a/erpnext/schools/doctype/fee_schedule/test_fee_schedule.js b/erpnext/schools/doctype/fee_schedule/test_fee_schedule.js new file mode 100644 index 0000000000..d495b4ce7b --- /dev/null +++ b/erpnext/schools/doctype/fee_schedule/test_fee_schedule.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Fee Schedule", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially('Fee Schedule', [ + // insert a new Fee Schedule + () => frappe.tests.make([ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/schools/doctype/fee_request_program/__init__.py b/erpnext/schools/doctype/fee_schedule_program/__init__.py similarity index 100% rename from erpnext/schools/doctype/fee_request_program/__init__.py rename to erpnext/schools/doctype/fee_schedule_program/__init__.py diff --git a/erpnext/schools/doctype/fee_request_program/fee_request_program.json b/erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.json similarity index 97% rename from erpnext/schools/doctype/fee_request_program/fee_request_program.json rename to erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.json index d5c8911e3a..61525aa1b3 100644 --- a/erpnext/schools/doctype/fee_request_program/fee_request_program.json +++ b/erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.json @@ -115,10 +115,10 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2017-07-13 16:08:16.498227", + "modified": "2017-07-28 10:32:15.941541", "modified_by": "Administrator", "module": "Schools", - "name": "Fee Request Program", + "name": "Fee Schedule Program", "name_case": "", "owner": "Administrator", "permissions": [], diff --git a/erpnext/schools/doctype/fee_request_program/fee_request_program.py b/erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.py similarity index 82% rename from erpnext/schools/doctype/fee_request_program/fee_request_program.py rename to erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.py index 61ce1d5782..f6cc6f139d 100644 --- a/erpnext/schools/doctype/fee_request_program/fee_request_program.py +++ b/erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.py @@ -3,7 +3,8 @@ # For license information, please see license.txt from __future__ import unicode_literals +import frappe from frappe.model.document import Document -class FeeRequestProgram(Document): +class FeeScheduleProgram(Document): pass diff --git a/erpnext/schools/doctype/fee_request_student_group/__init__.py b/erpnext/schools/doctype/fee_schedule_student_group/__init__.py similarity index 100% rename from erpnext/schools/doctype/fee_request_student_group/__init__.py rename to erpnext/schools/doctype/fee_schedule_student_group/__init__.py diff --git a/erpnext/schools/doctype/fee_request_student_group/fee_request_student_group.json b/erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.json similarity index 93% rename from erpnext/schools/doctype/fee_request_student_group/fee_request_student_group.json rename to erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.json index 08d7c01323..ea5cde99f3 100644 --- a/erpnext/schools/doctype/fee_request_student_group/fee_request_student_group.json +++ b/erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.json @@ -13,6 +13,7 @@ "engine": "InnoDB", "fields": [ { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -43,6 +44,7 @@ "unique": 0 }, { + "allow_bulk_edit": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -82,10 +84,10 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2017-03-23 18:01:09.736921", + "modified": "2017-07-28 10:32:34.839135", "modified_by": "Administrator", "module": "Schools", - "name": "Fee Request Student Group", + "name": "Fee Schedule Student Group", "name_case": "", "owner": "Administrator", "permissions": [], diff --git a/erpnext/schools/doctype/fee_request_student_group/fee_request_student_group.py b/erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.py similarity index 80% rename from erpnext/schools/doctype/fee_request_student_group/fee_request_student_group.py rename to erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.py index 777d225d9a..e1e729c145 100644 --- a/erpnext/schools/doctype/fee_request_student_group/fee_request_student_group.py +++ b/erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.py @@ -3,7 +3,8 @@ # For license information, please see license.txt from __future__ import unicode_literals +import frappe from frappe.model.document import Document -class FeeRequestStudentGroup(Document): +class FeeScheduleStudentGroup(Document): pass From 152ba1eccb13eae85aee39754e9e85c4c3de4d4a Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Wed, 2 Aug 2017 15:11:32 +0530 Subject: [PATCH 65/72] fixes as per the review --- .../doctype/payment_entry/payment_entry.js | 1 - .../doctype/payment_entry/payment_entry.py | 18 ++-- erpnext/config/schools.py | 3 - erpnext/schools/api.py | 20 +++- .../doctype/fee_schedule/fee_schedule.json | 4 +- .../fee_schedule_program.py | 1 - .../fee_schedule_student_group.py | 1 - .../doctype/fee_structure/fee_structure.json | 8 +- erpnext/schools/doctype/fees/fees.js | 59 +++++------ erpnext/schools/doctype/fees/fees.json | 15 +-- erpnext/schools/doctype/fees/fees.py | 98 ++++--------------- erpnext/schools/doctype/fees/fees_list.js | 6 +- erpnext/schools/doctype/fees/test_fees.js | 23 +++++ 13 files changed, 117 insertions(+), 140 deletions(-) create mode 100644 erpnext/schools/doctype/fees/test_fees.js diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.js b/erpnext/accounts/doctype/payment_entry/payment_entry.js index 9bc649f774..61ede97122 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.js +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.js @@ -490,7 +490,6 @@ frappe.ui.form.on('Payment Entry', { } }, callback: function(r, rt) { - console.log(r, rt); if(r.message) { var total_positive_outstanding = 0; var total_negative_outstanding = 0; diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index bf2213ec46..6eab2c49e5 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -100,12 +100,9 @@ class PaymentEntry(AccountsController): if not self.party: frappe.throw(_("Party is mandatory")) - self.party_name = frappe.db.get_value(self.party_type, self.party, - self.party_type.lower() + "_name") - _party_name = "title" if self.party_type == "Student" else self.party_type.lower() + "_name" self.party_name = frappe.db.get_value(self.party_type, self.party, _party_name) - + if self.party: if not self.party_balance: self.party_balance = get_balance_on(party_type=self.party_type, @@ -509,11 +506,11 @@ def get_outstanding_reference_documents(args): negative_outstanding_invoices = [] if (args.get("party_type") != "Student"): - negative_outstanding_invoices = get_negative_outstanding_invoices(args.get("party_type"), + negative_outstanding_invoices = get_negative_outstanding_invoices(args.get("party_type"), args.get("party"), args.get("party_account"), total_field) # Get positive outstanding sales /purchase invoices/ Fees - outstanding_invoices = get_outstanding_invoices(args.get("party_type"), args.get("party"), + outstanding_invoices = get_outstanding_invoices(args.get("party_type"), args.get("party"), args.get("party_account")) for d in outstanding_invoices: @@ -694,9 +691,11 @@ def get_payment_entry(dt, dn, party_amount=None, bank_account=None, bank_amount= party_type = "Supplier" elif dt in ("Expense Claim"): party_type = "Employee" + elif dt in ("Fees"): + party_type = "Student" # party account - if dt == "Sales Invoice": + if dt in ("Sales Invoice", "Fees"): party_account = doc.debit_to elif dt == "Purchase Invoice": party_account = doc.credit_to @@ -706,7 +705,7 @@ def get_payment_entry(dt, dn, party_amount=None, bank_account=None, bank_amount= party_account_currency = doc.get("party_account_currency") or get_account_currency(party_account) # payment type - if (dt == "Sales Order" or (dt=="Sales Invoice" and doc.outstanding_amount > 0)) \ + if (dt == "Sales Order" or (dt in ("Sales Invoice", "Fees") and doc.outstanding_amount > 0)) \ or (dt=="Purchase Invoice" and doc.outstanding_amount < 0): payment_type = "Receive" else: @@ -722,6 +721,9 @@ def get_payment_entry(dt, dn, party_amount=None, bank_account=None, bank_amount= elif dt in ("Expense Claim"): grand_total = doc.total_sanctioned_amount outstanding_amount = doc.total_sanctioned_amount - doc.total_amount_reimbursed + elif dt == "Fees": + grand_total = doc.grand_total + outstanding_amount = doc.outstanding_amount else: total_field = "base_grand_total" if party_account_currency == doc.company_currency else "grand_total" grand_total = flt(doc.get(total_field)) diff --git a/erpnext/config/schools.py b/erpnext/config/schools.py index 6d2a9c0efd..b984578ca1 100644 --- a/erpnext/config/schools.py +++ b/erpnext/config/schools.py @@ -153,9 +153,6 @@ def get_data(): { "type": "doctype", "name": "Fees" - },{ - "type": "doctype", - "name": "Fee Schedule" }, { "type": "doctype", diff --git a/erpnext/schools/api.py b/erpnext/schools/api.py index 13aa74bc22..e387512c1e 100644 --- a/erpnext/schools/api.py +++ b/erpnext/schools/api.py @@ -358,6 +358,22 @@ def update_email_group(doctype, name): @frappe.whitelist() def get_current_enrollment(student, academic_year=None): current_academic_year = academic_year or frappe.defaults.get_defaults().academic_year - return frappe.get_all("Program Enrollment", fields=["name", "student", "student_name", "student_category", + program_enrollment_list = frappe.db.sql(''' + select + name as program_enrollment, student_name, program, student_batch_name as student_batch, + student_category, academic_term, academic_year + from + `tabProgram Enrollment` + where + student = %s and academic_year = %s + order by creation''', (student, current_academic_year), as_dict=1) + + ''' + program_enrollment_list = frappe.get_all("Program Enrollment", fields=["name", "student", "student_name", "student_category", "program", "student_batch_name", "academic_year", "academic_term"], filters={"student":student, - "academic_year": current_academic_year})[0] + "academic_year": current_academic_year}) + ''' + if program_enrollment_list: + return program_enrollment_list[0] + else: + return None diff --git a/erpnext/schools/doctype/fee_schedule/fee_schedule.json b/erpnext/schools/doctype/fee_schedule/fee_schedule.json index dd793b291b..44151d6a21 100644 --- a/erpnext/schools/doctype/fee_schedule/fee_schedule.json +++ b/erpnext/schools/doctype/fee_schedule/fee_schedule.json @@ -515,7 +515,7 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Total Amount/Student", + "label": "Total Amount per Student", "length": 0, "no_copy": 0, "permlevel": 0, @@ -601,7 +601,7 @@ "issingle": 1, "istable": 0, "max_attachments": 0, - "modified": "2017-07-28 11:14:28.695618", + "modified": "2017-08-02 19:12:15.908822", "modified_by": "Administrator", "module": "Schools", "name": "Fee Schedule", diff --git a/erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.py b/erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.py index f6cc6f139d..11d5697380 100644 --- a/erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.py +++ b/erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.py @@ -3,7 +3,6 @@ # For license information, please see license.txt from __future__ import unicode_literals -import frappe from frappe.model.document import Document class FeeScheduleProgram(Document): diff --git a/erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.py b/erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.py index e1e729c145..776534d6fa 100644 --- a/erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.py +++ b/erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.py @@ -3,7 +3,6 @@ # For license information, please see license.txt from __future__ import unicode_literals -import frappe from frappe.model.document import Document class FeeScheduleStudentGroup(Document): diff --git a/erpnext/schools/doctype/fee_structure/fee_structure.json b/erpnext/schools/doctype/fee_structure/fee_structure.json index c0daa33fb3..da8d7c94d2 100644 --- a/erpnext/schools/doctype/fee_structure/fee_structure.json +++ b/erpnext/schools/doctype/fee_structure/fee_structure.json @@ -427,7 +427,7 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Debit To", + "label": "Academic Receivable Account", "length": 0, "no_copy": 0, "options": "Account", @@ -458,7 +458,7 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Credit To", + "label": "Income Account", "length": 0, "no_copy": 0, "options": "Account", @@ -578,8 +578,8 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-07-27 12:52:12.439685", - "modified_by": "manas@erpnext.com", + "modified": "2017-08-02 16:31:35.861158", + "modified_by": "Administrator", "module": "Schools", "name": "Fee Structure", "name_case": "", diff --git a/erpnext/schools/doctype/fees/fees.js b/erpnext/schools/doctype/fees/fees.js index 20cb5bc60f..b254d720ff 100644 --- a/erpnext/schools/doctype/fees/fees.js +++ b/erpnext/schools/doctype/fees/fees.js @@ -1,13 +1,17 @@ // Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors // For license information, please see license.txt -cur_frm.add_fetch("student", "title", "student_name"); -cur_frm.add_fetch("student", "student_email_id", "student_email"); -cur_frm.add_fetch("company", "default_receivable_account", "debit_to"); -cur_frm.add_fetch("company", "default_income_account", "against_income_account"); -cur_frm.add_fetch("company", "cost_center", "cost_center"); frappe.ui.form.on("Fees", { + setup: function(frm) { + frm.add_fetch("student", "title", "student_name"); + frm.add_fetch("student", "student_email_id", "student_email"); + frm.add_fetch("company", "default_receivable_account", "debit_to"); + frm.add_fetch("company", "default_income_account", "against_income_account"); + frm.add_fetch("company", "cost_center", "cost_center"); + + }, + onload: function(frm){ frm.set_query("academic_term",function(){ return{ @@ -20,7 +24,7 @@ frappe.ui.form.on("Fees", { frm.set_query("fee_structure",function(){ return{ "filters":{ - "academic_term": (frm.doc.academic_term) + "academic_year": (frm.doc.academic_year) } }; }); @@ -85,14 +89,9 @@ frappe.ui.form.on("Fees", { }, callback: function(r) { if(r){ - console.log(r); - frm.set_value("student_name", r.message.student_name); - frm.set_value("program_enrollment", r.message.name); - frm.set_value("program", r.message.program); - frm.set_value("student_batch", r.message.student_batch_name); - frm.set_value("student_category", r.message.student_category); - frm.set_value("academic_term", r.message.academic_term); - frm.set_value("academic_year", r.message.academic_year); + $.each(r.message, function(i, d) { + frm.set_value(i,d) + }); } } }); @@ -100,25 +99,29 @@ frappe.ui.form.on("Fees", { }, make_payment_request: function(frm) { - frappe.call({ - method:"erpnext.accounts.doctype.payment_request.payment_request.make_payment_request", - args: { - "dt": frm.doc.doctype, - "dn": frm.doc.name, - "recipient_id": frm.doc.contact_email - }, - callback: function(r) { - if(!r.exc){ - var doc = frappe.model.sync(r.message); - frappe.set_route("Form", doc[0].doctype, doc[0].name); + if (!frm.doc.contact_email) { + frappe.msgprint(__("Please set the Email ID for the Student to send the Payment Request")) + } else { + frappe.call({ + method:"erpnext.accounts.doctype.payment_request.payment_request.make_payment_request", + args: { + "dt": frm.doc.doctype, + "dn": frm.doc.name, + "recipient_id": frm.doc.contact_email + }, + callback: function(r) { + if(!r.exc){ + var doc = frappe.model.sync(r.message); + frappe.set_route("Form", doc[0].doctype, doc[0].name); + } } - } - }); + }); + } }, make_payment_entry: function(frm) { return frappe.call({ - method: "erpnext.schools.doctype.fees.fees.get_payment_entry", + method: "erpnext.accounts.doctype.payment_entry.payment_entry.get_payment_entry", args: { "dt": frm.doc.doctype, "dn": frm.doc.name diff --git a/erpnext/schools/doctype/fees/fees.json b/erpnext/schools/doctype/fees/fees.json index 28cc25ea5d..435697a5b7 100644 --- a/erpnext/schools/doctype/fees/fees.json +++ b/erpnext/schools/doctype/fees/fees.json @@ -142,9 +142,10 @@ "bold": 0, "collapsible": 0, "columns": 0, + "default": "0", "fieldname": "include_payment", "fieldtype": "Check", - "hidden": 0, + "hidden": 1, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, @@ -479,7 +480,7 @@ "columns": 0, "fieldname": "student_email", "fieldtype": "Data", - "hidden": 0, + "hidden": 1, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, @@ -661,7 +662,7 @@ "columns": 0, "fieldname": "currency", "fieldtype": "Link", - "hidden": 0, + "hidden": 1, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, @@ -1123,7 +1124,7 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Debit To", + "label": "Academic Receivable Account", "length": 0, "no_copy": 0, "options": "Account", @@ -1154,7 +1155,7 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Credit To", + "label": "Income Account", "length": 0, "no_copy": 0, "options": "Account", @@ -1242,8 +1243,8 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-07-27 12:58:44.197451", - "modified_by": "manas@erpnext.com", + "modified": "2017-08-03 16:02:06.001422", + "modified_by": "Administrator", "module": "Schools", "name": "Fees", "name_case": "", diff --git a/erpnext/schools/doctype/fees/fees.py b/erpnext/schools/doctype/fees/fees.py index 801319452e..c27f818d05 100644 --- a/erpnext/schools/doctype/fees/fees.py +++ b/erpnext/schools/doctype/fees/fees.py @@ -25,9 +25,7 @@ class Fees(AccountsController): def validate(self): self.calculate_total() - ''' - set missing field here and validate the accounts - ''' + # set missing field here and validate the accounts def calculate_total(self): """Calculates total amount.""" @@ -41,7 +39,7 @@ class Fees(AccountsController): self.make_gl_entries() - if self.send_payment_request: + if self.send_payment_request and self.student_email: pr = make_payment_request(dt="Fees", dn=self.name, recipient_id=self.contact_email, submit_doc=True, use_dummy_message=True) frappe.msgprint(_("Payment request {0} created").format(getlink("Payment Request", pr.name))) @@ -51,22 +49,22 @@ class Fees(AccountsController): if not self.grand_total: return student_gl_entries = self.get_gl_dict({ - "account": self.debit_to, - "party_type": "Student", - "party": self.student, - "against": self.against_income_account, - "debit": self.grand_total, - "debit_in_account_currency": self.grand_total, - "against_voucher": self.name, - "against_voucher_type": self.doctype - }) + "account": self.debit_to, + "party_type": "Student", + "party": self.student, + "against": self.against_income_account, + "debit": self.grand_total, + "debit_in_account_currency": self.grand_total, + "against_voucher": self.name, + "against_voucher_type": self.doctype + }) fee_gl_entry = self.get_gl_dict({ - "account": self.against_income_account, - "against": self.student, - "credit": self.grand_total, - "credit_in_account_currency": self.grand_total, - "cost_center": self.cost_center - }) + "account": self.against_income_account, + "against": self.student, + "credit": self.grand_total, + "credit_in_account_currency": self.grand_total, + "cost_center": self.cost_center + }) from erpnext.accounts.general_ledger import make_gl_entries make_gl_entries([student_gl_entries, fee_gl_entry], cancel=(self.docstatus == 2), update_outstanding="Yes", merge_entries=False) @@ -80,66 +78,6 @@ def get_fee_list(doctype, txt, filters, limit_start, limit_page_length=20, order order by due_date asc limit {0} , {1}''' .format(limit_start, limit_page_length), student, as_dict = True) - -@frappe.whitelist() -def get_payment_entry(dt, dn, bank_account=None): - doc = frappe.get_doc(dt, dn) - - party_type = "Student" - party_account = doc.debit_to - party_account_currency = doc.get("currency") or get_account_currency(party_account) - - # payment type - if (doc.outstanding_amount > 0): - payment_type = "Receive" - - # amounts - grand_total = outstanding_amount = 0 - grand_total = doc.grand_total - outstanding_amount = doc.outstanding_amount - - # bank or cash - bank = get_default_bank_cash_account(doc.company, "Bank") - - paid_amount = received_amount = 0 - if party_account_currency == bank.account_currency: - paid_amount = received_amount = abs(outstanding_amount) - elif payment_type == "Receive": - paid_amount = abs(outstanding_amount) - else: - received_amount = abs(outstanding_amount) - - pe = frappe.new_doc("Payment Entry") - pe.payment_type = payment_type - pe.company = doc.company - pe.posting_date = nowdate() - pe.mode_of_payment = doc.get("mode_of_payment") - pe.party_type = party_type - pe.party = doc.student - pe.party_name = doc.student_name - pe.paid_from = party_account if payment_type=="Receive" else bank.account - pe.paid_to = party_account if payment_type=="Pay" else bank.account - pe.paid_from_account_currency = party_account_currency if payment_type=="Receive" else bank.account_currency - pe.paid_to_account_currency = party_account_currency if payment_type=="Pay" else bank.account_currency - pe.paid_amount = paid_amount - pe.received_amount = received_amount - pe.allocate_payment_amount = 1 - pe.letter_head = doc.get("letter_head") - - pe.append("references", { - "reference_doctype": dt, - "reference_name": dn, - "due_date": doc.get("due_date"), - "total_amount": grand_total, - "outstanding_amount": outstanding_amount, - "allocated_amount": outstanding_amount - }) - - pe.setup_party_account_field() - pe.set_missing_values() - return pe - - def get_list_context(context=None): return { "show_sidebar": True, @@ -148,4 +86,4 @@ def get_list_context(context=None): "title": _("Fees"), "get_list": get_fee_list, "row_template": "templates/includes/fee/fee_row.html" - } + } \ No newline at end of file diff --git a/erpnext/schools/doctype/fees/fees_list.js b/erpnext/schools/doctype/fees/fees_list.js index c7117f203c..52e1c4beb5 100644 --- a/erpnext/schools/doctype/fees/fees_list.js +++ b/erpnext/schools/doctype/fees/fees_list.js @@ -2,11 +2,11 @@ frappe.listview_settings['Fees'] = { add_fields: ["grand_total", "outstanding_amount", "due_date"], get_indicator: function(doc) { if(flt(doc.outstanding_amount)==0) { - return [__("Paid"), "green", "outstanding_amount,=,0"] + return [__("Paid"), "green", "outstanding_amount,=,0"]; } else if (flt(doc.outstanding_amount) > 0 && doc.due_date >= frappe.datetime.get_today()) { - return [__("Unpaid"), "orange", "outstanding_amount,>,0|due_date,>,Today"] + return [__("Unpaid"), "orange", "outstanding_amount,>,0|due_date,>,Today"]; } else if (flt(doc.outstanding_amount) > 0 && doc.due_date < frappe.datetime.get_today()) { - return [__("Overdue"), "red", "outstanding_amount,>,0|due_date,<=,Today"] + return [__("Overdue"), "red", "outstanding_amount,>,0|due_date,<=,Today"]; } } }; \ No newline at end of file diff --git a/erpnext/schools/doctype/fees/test_fees.js b/erpnext/schools/doctype/fees/test_fees.js new file mode 100644 index 0000000000..8ec7eecfdd --- /dev/null +++ b/erpnext/schools/doctype/fees/test_fees.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Fees", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially('Fees', [ + // insert a new Fees + () => frappe.tests.make([ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); From d1d2633658ab0a74c183fcf30e337757e2b675a1 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Wed, 9 Aug 2017 18:38:37 +0530 Subject: [PATCH 66/72] removed the fee schedule --- .../schools/doctype/fee_schedule/__init__.py | 0 .../doctype/fee_schedule/fee_schedule.js | 29 - .../doctype/fee_schedule/fee_schedule.json | 641 ------------------ .../doctype/fee_schedule/fee_schedule.py | 56 -- .../doctype/fee_schedule/test_fee_schedule.js | 23 - .../doctype/fee_schedule_program/__init__.py | 0 .../fee_schedule_program.json | 133 ---- .../fee_schedule_program.py | 9 - .../fee_schedule_student_group/__init__.py | 0 .../fee_schedule_student_group.json | 102 --- .../fee_schedule_student_group.py | 9 - 11 files changed, 1002 deletions(-) delete mode 100644 erpnext/schools/doctype/fee_schedule/__init__.py delete mode 100644 erpnext/schools/doctype/fee_schedule/fee_schedule.js delete mode 100644 erpnext/schools/doctype/fee_schedule/fee_schedule.json delete mode 100644 erpnext/schools/doctype/fee_schedule/fee_schedule.py delete mode 100644 erpnext/schools/doctype/fee_schedule/test_fee_schedule.js delete mode 100644 erpnext/schools/doctype/fee_schedule_program/__init__.py delete mode 100644 erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.json delete mode 100644 erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.py delete mode 100644 erpnext/schools/doctype/fee_schedule_student_group/__init__.py delete mode 100644 erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.json delete mode 100644 erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.py diff --git a/erpnext/schools/doctype/fee_schedule/__init__.py b/erpnext/schools/doctype/fee_schedule/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/schools/doctype/fee_schedule/fee_schedule.js b/erpnext/schools/doctype/fee_schedule/fee_schedule.js deleted file mode 100644 index 480ca577e1..0000000000 --- a/erpnext/schools/doctype/fee_schedule/fee_schedule.js +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors -// For license information, please see license.txt - -frappe.ui.form.on('Fee Schedule', { - refresh: function(frm) { - frm.disable_save(); - }, - fee_structure: function(frm) { - if (frm.doc.fee_structure) { - frappe.call({ - method: "erpnext.schools.doctype.fee_schedule.fee_schedule.get_fee_structure", - args: { - "target_doc": frm.doc.name, - "source_name": frm.doc.fee_structure - }, - callback: function(r) { - var doc = frappe.model.sync(r.message); - frappe.set_route("Form", doc[0].doctype, doc[0].name); - } - }); - } - } -}); - -frappe.ui.form.on("Fee Component", { - refresh: function(frm) { - frm.set_read_only(); - } -}); diff --git a/erpnext/schools/doctype/fee_schedule/fee_schedule.json b/erpnext/schools/doctype/fee_schedule/fee_schedule.json deleted file mode 100644 index 44151d6a21..0000000000 --- a/erpnext/schools/doctype/fee_schedule/fee_schedule.json +++ /dev/null @@ -1,641 +0,0 @@ -{ - "allow_copy": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 0, - "autoname": "naming_series:", - "beta": 0, - "creation": "2017-07-18 15:21:21.527136", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "Document", - "editable_grid": 0, - "engine": "InnoDB", - "fields": [ - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "create_fees", - "fieldtype": "Button", - "hidden": 1, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Create Fees", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "section_break_19", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "fee_structure", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Fee Structure", - "length": 0, - "no_copy": 0, - "options": "Fee Structure", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "fee_request_against", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Fee Request Against", - "length": 0, - "no_copy": 0, - "options": "Program", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "due_date", - "fieldtype": "Date", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Due Date", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_4", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "academic_year", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Academic Year", - "length": 0, - "no_copy": 0, - "options": "Academic Year", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "academic_term", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Academic Term", - "length": 0, - "no_copy": 0, - "options": "Academic Term", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "naming_series", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Naming Series", - "length": 0, - "no_copy": 1, - "options": "FRQ.", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "section_break_10", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "eval:doc.fee_request_against == 'Program'", - "fieldname": "programs", - "fieldtype": "Table", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "", - "length": 0, - "no_copy": 0, - "options": "Fee Schedule Program", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "depends_on": "eval: doc.fee_request_against == 'Student Group'", - "fieldname": "student_groups", - "fieldtype": "Table", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "", - "length": 0, - "no_copy": 0, - "options": "Fee Schedule Student Group", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "section_break_14", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Fee Breakup for each student", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "components", - "fieldtype": "Table", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "", - "length": 0, - "no_copy": 0, - "options": "Fee Component", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "section_break_16", - "fieldtype": "Section Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "column_break_18", - "fieldtype": "Column Break", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "default": "0", - "fieldname": "total_amount", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Total Amount per Student", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "grand_total", - "fieldtype": "Currency", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Grand Total", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "grand_total_in_words", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "In Words", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 1, - "idx": 0, - "image_view": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 1, - "istable": 0, - "max_attachments": 0, - "modified": "2017-08-02 19:12:15.908822", - "modified_by": "Administrator", - "module": "Schools", - "name": "Fee Schedule", - "name_case": "", - "owner": "Administrator", - "permissions": [ - { - "amend": 0, - "apply_user_permissions": 0, - "cancel": 0, - "create": 1, - "delete": 1, - "email": 1, - "export": 0, - "if_owner": 0, - "import": 0, - "permlevel": 0, - "print": 1, - "read": 1, - "report": 0, - "role": "Academics User", - "set_user_permissions": 0, - "share": 1, - "submit": 0, - "write": 1 - } - ], - "quick_entry": 0, - "read_only": 0, - "read_only_onload": 0, - "show_name_in_global_search": 0, - "sort_field": "modified", - "sort_order": "DESC", - "title_field": "", - "track_changes": 0, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/schools/doctype/fee_schedule/fee_schedule.py b/erpnext/schools/doctype/fee_schedule/fee_schedule.py deleted file mode 100644 index 012c510b6b..0000000000 --- a/erpnext/schools/doctype/fee_schedule/fee_schedule.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - -from __future__ import unicode_literals -import frappe -from frappe import _ -from frappe.model.document import Document -from frappe.model.mapper import get_mapped_doc -from frappe.utils import money_in_words - - -class FeeSchedule(Document): - def validate(self): - if not(self.programs or self.student_groups): - frappe.throw(_("Select atleast one {0}").format(self.fee_request_against)) - if self.docstatus: - self.generate_fee() - - def generate_fee(self): - if self.fee_request_against == "Program": - total_fee_count = 0 - for d in self.programs: - program_enrollment = frappe.get_list("Program Enrollment", - fields=["name", "student", "student_batch_name", "student_category", "student_name"], - filters={"program": d.program, "student_batch_name": d.student_batch, - "academic_year": self.academic_year}) - if program_enrollment: - d.total_students = len(program_enrollment) - else: - d.total_students = 0 - total_fee_count += d.total_students - for pe in program_enrollment: - doc = get_mapped_doc("Fee Request", self.name, { - "Fee Request": { - "doctype": "Fees" - } - }) - doc.student = pe.student - doc.student_name = pe.student_name - doc.program = d.program - doc.program_enrollment = pe.name - doc.student_category = pe.student_category - doc.save() - doc.submit() - self.grand_total = total_fee_count*self.total_amount - self.grand_total_in_words = money_in_words(self.grand_total) - - -@frappe.whitelist() -def get_fee_structure(source_name,target_doc=None): - fee_request = get_mapped_doc("Fee Structure", source_name, - {"Fee Structure": { - "doctype": "Fee Schedule" - }}, ignore_permissions=True) - return fee_request diff --git a/erpnext/schools/doctype/fee_schedule/test_fee_schedule.js b/erpnext/schools/doctype/fee_schedule/test_fee_schedule.js deleted file mode 100644 index d495b4ce7b..0000000000 --- a/erpnext/schools/doctype/fee_schedule/test_fee_schedule.js +++ /dev/null @@ -1,23 +0,0 @@ -/* eslint-disable */ -// rename this file from _test_[name] to test_[name] to activate -// and remove above this line - -QUnit.test("test: Fee Schedule", function (assert) { - let done = assert.async(); - - // number of asserts - assert.expect(1); - - frappe.run_serially('Fee Schedule', [ - // insert a new Fee Schedule - () => frappe.tests.make([ - // values to be set - {key: 'value'} - ]), - () => { - assert.equal(cur_frm.doc.key, 'value'); - }, - () => done() - ]); - -}); diff --git a/erpnext/schools/doctype/fee_schedule_program/__init__.py b/erpnext/schools/doctype/fee_schedule_program/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.json b/erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.json deleted file mode 100644 index 61525aa1b3..0000000000 --- a/erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.json +++ /dev/null @@ -1,133 +0,0 @@ -{ - "allow_copy": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 0, - "beta": 0, - "creation": "2017-03-23 17:46:55.712169", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "engine": "InnoDB", - "fields": [ - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "program", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Program", - "length": 0, - "no_copy": 0, - "options": "Program", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "student_batch", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Student Batch", - "length": 0, - "no_copy": 0, - "options": "Student Batch Name", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "total_students", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Total Students", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_view": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 1, - "max_attachments": 0, - "modified": "2017-07-28 10:32:15.941541", - "modified_by": "Administrator", - "module": "Schools", - "name": "Fee Schedule Program", - "name_case": "", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "read_only": 0, - "read_only_onload": 0, - "show_name_in_global_search": 0, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.py b/erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.py deleted file mode 100644 index 11d5697380..0000000000 --- a/erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.py +++ /dev/null @@ -1,9 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - -from __future__ import unicode_literals -from frappe.model.document import Document - -class FeeScheduleProgram(Document): - pass diff --git a/erpnext/schools/doctype/fee_schedule_student_group/__init__.py b/erpnext/schools/doctype/fee_schedule_student_group/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.json b/erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.json deleted file mode 100644 index ea5cde99f3..0000000000 --- a/erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "allow_copy": 0, - "allow_guest_to_view": 0, - "allow_import": 0, - "allow_rename": 0, - "beta": 0, - "creation": "2017-03-23 17:55:52.476822", - "custom": 0, - "docstatus": 0, - "doctype": "DocType", - "document_type": "", - "editable_grid": 1, - "engine": "InnoDB", - "fields": [ - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "student_group", - "fieldtype": "Link", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Student Group", - "length": 0, - "no_copy": 0, - "options": "Student Group", - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "total_students", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 1, - "in_standard_filter": 0, - "label": "Total Students", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 1, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - } - ], - "has_web_view": 0, - "hide_heading": 0, - "hide_toolbar": 0, - "idx": 0, - "image_view": 0, - "in_create": 0, - "is_submittable": 0, - "issingle": 0, - "istable": 1, - "max_attachments": 0, - "modified": "2017-07-28 10:32:34.839135", - "modified_by": "Administrator", - "module": "Schools", - "name": "Fee Schedule Student Group", - "name_case": "", - "owner": "Administrator", - "permissions": [], - "quick_entry": 1, - "read_only": 0, - "read_only_onload": 0, - "show_name_in_global_search": 0, - "sort_field": "modified", - "sort_order": "DESC", - "track_changes": 1, - "track_seen": 0 -} \ No newline at end of file diff --git a/erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.py b/erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.py deleted file mode 100644 index 776534d6fa..0000000000 --- a/erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.py +++ /dev/null @@ -1,9 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors -# For license information, please see license.txt - -from __future__ import unicode_literals -from frappe.model.document import Document - -class FeeScheduleStudentGroup(Document): - pass From 8c88af23eff9f3c55dd5cfff993b5e5180ac041c Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Wed, 9 Aug 2017 19:53:03 +0530 Subject: [PATCH 67/72] added the test case for the fees --- .../doctype/academic_term/test_records.json | 10 +++++ .../doctype/academic_year/test_records.json | 7 +++ .../doctype/fee_category/test_records.json | 11 +++++ .../doctype/fee_structure/test_records.json | 42 ++++++++++++++++++ erpnext/schools/doctype/fees/fees.py | 6 +++ erpnext/schools/doctype/fees/test_fees.js | 18 +++++--- erpnext/schools/doctype/fees/test_fees.py | 43 ++++++++++++++++++- 7 files changed, 131 insertions(+), 6 deletions(-) create mode 100644 erpnext/schools/doctype/fee_category/test_records.json create mode 100644 erpnext/schools/doctype/fee_structure/test_records.json diff --git a/erpnext/schools/doctype/academic_term/test_records.json b/erpnext/schools/doctype/academic_term/test_records.json index 2d84383b1d..6bd365561f 100644 --- a/erpnext/schools/doctype/academic_term/test_records.json +++ b/erpnext/schools/doctype/academic_term/test_records.json @@ -13,5 +13,15 @@ "doctype": "Academic Term", "academic_year": "2014-2015", "term_name": "_Test Academic Term 2" + }, + { + "doctype": "Academic Term", + "academic_year": "2017-2018", + "term_name": "_Test AT1" + }, + { + "doctype": "Academic Term", + "academic_year": "2017-2018", + "term_name": "_Test AT2" } ] \ No newline at end of file diff --git a/erpnext/schools/doctype/academic_year/test_records.json b/erpnext/schools/doctype/academic_year/test_records.json index dba4f1285d..5eb5e2e360 100644 --- a/erpnext/schools/doctype/academic_year/test_records.json +++ b/erpnext/schools/doctype/academic_year/test_records.json @@ -1,11 +1,18 @@ [ { + "doctype": "Academic Year", "academic_year_name": "2014-2015" }, { + "doctype": "Academic Year", "academic_year_name": "2015-2016" }, { + "doctype": "Academic Year", "academic_year_name": "2016-2017" + }, + { + "doctype": "Academic Year", + "academic_year_name": "2017-2018" } ] \ No newline at end of file diff --git a/erpnext/schools/doctype/fee_category/test_records.json b/erpnext/schools/doctype/fee_category/test_records.json new file mode 100644 index 0000000000..598c1ed75b --- /dev/null +++ b/erpnext/schools/doctype/fee_category/test_records.json @@ -0,0 +1,11 @@ +[ + { + "category_name": "Admission Fee" + }, + { + "category_name": "Tuition Fee" + }, + { + "category_name": "Transportation Fee" + } +] \ No newline at end of file diff --git a/erpnext/schools/doctype/fee_structure/test_records.json b/erpnext/schools/doctype/fee_structure/test_records.json new file mode 100644 index 0000000000..8b7dc1651a --- /dev/null +++ b/erpnext/schools/doctype/fee_structure/test_records.json @@ -0,0 +1,42 @@ +[ + { + "doctype": "Fee Structure", + "academic_year": "2017-2018", + "academic_term": "2017-2018 (_Test AT1)", + "components": [ + { + "fees_category": "Tuition Fee", + "amount": 40000 + }, + { + "fees_category": "Transportation Fee", + "amount": 10000 + } + ], + "total_amount": 50000, + "debit_to": "_Test Receivable - _TC", + "against_income_account": "Sales - _TC", + "cost_center": "_Test Cost Center - _TC", + "company": "_Test Company" + }, + { + "doctype": "Fee Structure", + "academic_year": "2017-2018", + "academic_term": "2017-2018 (_Test AT2)", + "components": [ + { + "fees_category": "Tuition Fee", + "amount": 40000 + }, + { + "fees_category": "Transportation Fee", + "amount": 10000 + } + ], + "total_amount": 50000, + "debit_to": "_Test Receivable - _TC", + "against_income_account": "Sales - _TC", + "cost_center": "_Test Cost Center - _TC", + "company": "_Test Company" + } +] \ No newline at end of file diff --git a/erpnext/schools/doctype/fees/fees.py b/erpnext/schools/doctype/fees/fees.py index c27f818d05..78154e0da0 100644 --- a/erpnext/schools/doctype/fees/fees.py +++ b/erpnext/schools/doctype/fees/fees.py @@ -12,6 +12,8 @@ from frappe.utils.csvutils import getlink from erpnext.accounts.utils import get_account_currency from erpnext.controllers.accounts_controller import AccountsController from erpnext.accounts.doctype.journal_entry.journal_entry import get_default_bank_cash_account +from erpnext.accounts.general_ledger import delete_gl_entries + class Fees(AccountsController): def set_indicator(self): @@ -44,6 +46,10 @@ class Fees(AccountsController): submit_doc=True, use_dummy_message=True) frappe.msgprint(_("Payment request {0} created").format(getlink("Payment Request", pr.name))) + def on_cancel(self): + delete_gl_entries(voucher_type=self.doctype, voucher_no=self.name) + # frappe.db.set(self, 'status', 'Cancelled') + def make_gl_entries(self): if not self.grand_total: diff --git a/erpnext/schools/doctype/fees/test_fees.js b/erpnext/schools/doctype/fees/test_fees.js index 8ec7eecfdd..22e987e8c2 100644 --- a/erpnext/schools/doctype/fees/test_fees.js +++ b/erpnext/schools/doctype/fees/test_fees.js @@ -9,14 +9,22 @@ QUnit.test("test: Fees", function (assert) { assert.expect(1); frappe.run_serially('Fees', [ + // insert a new Fees - () => frappe.tests.make([ - // values to be set - {key: 'value'} - ]), () => { - assert.equal(cur_frm.doc.key, 'value'); + return frappe.tests.make('Fees', [ + {student: 'STUD00001'}, + {due_date: frappe.datetime.get_today()}, + {fee_structure: 'FS00001'} + ]); }, + () => { + assert.equal(cur_frm.doc.grand_total===cur_frm.doc.outstanding_amount); + }, + () => frappe.timeout(0.3), + () => cur_frm.save(), + () => frappe.tests.click_button('Submit'), + () => frappe.tests.click_button('Yes'), () => done() ]); diff --git a/erpnext/schools/doctype/fees/test_fees.py b/erpnext/schools/doctype/fees/test_fees.py index 3ea83ee039..283e17b211 100644 --- a/erpnext/schools/doctype/fees/test_fees.py +++ b/erpnext/schools/doctype/fees/test_fees.py @@ -5,8 +5,49 @@ from __future__ import unicode_literals import frappe import unittest +from frappe.utils import nowdate +from frappe.utils.make_random import get_random + # test_records = frappe.get_test_records('Fees') class TestFees(unittest.TestCase): - pass + + def test_fees(self): + student = get_random("Student") + fee = frappe.new_doc("Fees") + fee.posting_date = nowdate() + fee.due_date = nowdate() + fee.student = student + fee.debit_to = "_Test Receivable - _TC" + fee.against_income_account = "Sales - _TC" + fee.cost_center = "_Test Cost Center - _TC" + fee.company = "_Test Company" + + fee.extend("components", [ + { + "fees_category": "Tuition Fee", + "amount": 40000 + }, + { + "fees_category": "Transportation Fee", + "amount": 10000 + }]) + fee.save() + fee.submit() + + gl_entries = frappe.db.sql(""" + select account, posting_date, party_type, party, cost_center, fiscal_year, voucher_type, + voucher_no, against_voucher_type, against_voucher, cost_center, company, credit, debit + from `tabGL Entry` where voucher_type=%s and voucher_no=%s""", ("Fees", fee.name), as_dict=True) + + if gl_entries[0].account == "_Test Receivable - _TC": + self.assertEquals(gl_entries[0].debit, 50000) + self.assertEquals(gl_entries[0].credit, 0) + self.assertEquals(gl_entries[1].debit, 0) + self.assertEquals(gl_entries[1].credit, 50000) + else: + self.assertEquals(gl_entries[0].credit, 50000) + self.assertEquals(gl_entries[0].debit, 0) + self.assertEquals(gl_entries[1].credit, 0) + self.assertEquals(gl_entries[1].debit, 50000) From 1299d56e855ecaf1ecbd2cb1340175935b875b84 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Wed, 23 Aug 2017 10:53:24 +0530 Subject: [PATCH 68/72] cleanup of the fee module --- .../doctype/payment_entry/payment_entry.py | 2 +- erpnext/schools/api.py | 5 - .../schools/doctype/fee_schedule/__init__.py | 0 .../doctype/fee_schedule/fee_schedule.js | 66 ++ .../doctype/fee_schedule/fee_schedule.json | 977 ++++++++++++++++++ .../doctype/fee_schedule/fee_schedule.py | 104 ++ .../doctype/fee_schedule/fee_schedule_list.js | 14 + .../doctype/fee_schedule/test_fee_schedule.js | 23 + .../doctype/fee_schedule/test_fee_schedule.py | 9 + .../doctype/fee_schedule_program/__init__.py | 0 .../fee_schedule_program.json | 133 +++ .../fee_schedule_program.py | 9 + .../fee_schedule_student_group/__init__.py | 0 .../fee_schedule_student_group.json | 102 ++ .../fee_schedule_student_group.py | 9 + erpnext/schools/doctype/fees/fees.js | 13 +- erpnext/schools/doctype/fees/fees.json | 35 +- erpnext/schools/doctype/fees/fees.py | 20 +- .../student_applicant/student_applicant.js | 9 +- 19 files changed, 1510 insertions(+), 20 deletions(-) create mode 100644 erpnext/schools/doctype/fee_schedule/__init__.py create mode 100644 erpnext/schools/doctype/fee_schedule/fee_schedule.js create mode 100644 erpnext/schools/doctype/fee_schedule/fee_schedule.json create mode 100644 erpnext/schools/doctype/fee_schedule/fee_schedule.py create mode 100644 erpnext/schools/doctype/fee_schedule/fee_schedule_list.js create mode 100644 erpnext/schools/doctype/fee_schedule/test_fee_schedule.js create mode 100644 erpnext/schools/doctype/fee_schedule/test_fee_schedule.py create mode 100644 erpnext/schools/doctype/fee_schedule_program/__init__.py create mode 100644 erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.json create mode 100644 erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.py create mode 100644 erpnext/schools/doctype/fee_schedule_student_group/__init__.py create mode 100644 erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.json create mode 100644 erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.py diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index 6eab2c49e5..d39fd208c7 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -218,7 +218,7 @@ class PaymentEntry(AccountsController): ref_party_account = ref_doc.credit_to elif self.party_type=="Employee": ref_party_account = ref_doc.payable_account - + if d.reference_doctype in ("Sales Invoice", "Purchase Invoice", "Fees"): ref_party_account = ref_doc.debit_to \ if self.party_type in ("Customer", "Student") else ref_doc.credit_to diff --git a/erpnext/schools/api.py b/erpnext/schools/api.py index e387512c1e..ea4da69504 100644 --- a/erpnext/schools/api.py +++ b/erpnext/schools/api.py @@ -368,11 +368,6 @@ def get_current_enrollment(student, academic_year=None): student = %s and academic_year = %s order by creation''', (student, current_academic_year), as_dict=1) - ''' - program_enrollment_list = frappe.get_all("Program Enrollment", fields=["name", "student", "student_name", "student_category", - "program", "student_batch_name", "academic_year", "academic_term"], filters={"student":student, - "academic_year": current_academic_year}) - ''' if program_enrollment_list: return program_enrollment_list[0] else: diff --git a/erpnext/schools/doctype/fee_schedule/__init__.py b/erpnext/schools/doctype/fee_schedule/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/schools/doctype/fee_schedule/fee_schedule.js b/erpnext/schools/doctype/fee_schedule/fee_schedule.js new file mode 100644 index 0000000000..9e5a156284 --- /dev/null +++ b/erpnext/schools/doctype/fee_schedule/fee_schedule.js @@ -0,0 +1,66 @@ +// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Fee Schedule', { + setup: function(frm) { + frm.add_fetch("company", "default_receivable_account", "debit_to"); + frm.add_fetch("company", "default_income_account", "against_income_account"); + frm.add_fetch("company", "cost_center", "cost_center"); + }, + + refresh: function(frm) { + if(!frm.doc.__islocal && frm.doc.__onload && frm.doc.__onload.dashboard_info && + frm.doc.fee_creation_status=="Successful") { + var info = frm.doc.__onload.dashboard_info; + frm.dashboard.add_indicator(__('Total Collected: {0}', [format_currency(info.total_paid, + info.currency)]), 'blue'); + frm.dashboard.add_indicator(__('Total Outstanding: {0}', [format_currency(info.total_unpaid, + info.currency)]), info.total_unpaid ? 'orange' : 'green'); + } + if (!frm.doc.fee_creation_status || frm.doc.fee_creation_status == "Failed") { + frm.add_custom_button(__('Create Fees'), function() { + frappe.call({ + method: "create_fees", + doc: frm.doc, + callback: function() { + frm.refresh(); + } + }); + }, "fa fa-play", "btn-success"); + } + }, + + fee_structure: function(frm) { + if (frm.doc.fee_structure) { + frappe.call({ + method: "erpnext.schools.doctype.fee_schedule.fee_schedule.get_fee_structure", + args: { + "target_doc": frm.doc.name, + "source_name": frm.doc.fee_structure + }, + callback: function(r) { + var doc = frappe.model.sync(r.message); + frappe.set_route("Form", doc[0].doctype, doc[0].name); + } + }); + } + } +}); + +frappe.ui.form.on("Fee Component", { + refresh: function(frm) { + frm.set_read_only(); + } +}); + +frappe.ui.form.on("Fee Schedule Student Group", { + onload: function(frm) { + frm.set_query("student_group",function(){ + return{ + "filters":{ + "group_based_on": "Batch" + } + }; + }); + } +}); diff --git a/erpnext/schools/doctype/fee_schedule/fee_schedule.json b/erpnext/schools/doctype/fee_schedule/fee_schedule.json new file mode 100644 index 0000000000..c1fb2ec158 --- /dev/null +++ b/erpnext/schools/doctype/fee_schedule/fee_schedule.json @@ -0,0 +1,977 @@ +{ + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "autoname": "naming_series:", + "beta": 1, + "creation": "2017-07-18 15:21:21.527136", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "Document", + "editable_grid": 0, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "fee_structure", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Fee Structure", + "length": 0, + "no_copy": 0, + "options": "Fee Structure", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "due_date", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Due Date", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "naming_series", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Naming Series", + "length": 0, + "no_copy": 1, + "options": "FRQ.", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "fee_creation_status", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Fee Creation Status", + "length": 0, + "no_copy": 1, + "options": "\nIn Process\nFailed\nSuccessful", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_4", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "academic_year", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Academic Year", + "length": 0, + "no_copy": 0, + "options": "Academic Year", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "academic_term", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Academic Term", + "length": 0, + "no_copy": 0, + "options": "Academic Term", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_10", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "currency", + "fieldtype": "Link", + "hidden": 1, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Currency", + "length": 0, + "no_copy": 0, + "options": "Currency", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "depends_on": "", + "fieldname": "student_groups", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "", + "length": 0, + "no_copy": 0, + "options": "Fee Schedule Student Group", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_14", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Fee Breakup for each student", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "components", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "", + "length": 0, + "no_copy": 0, + "options": "Fee Component", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_16", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_18", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "0", + "fieldname": "total_amount", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Total Amount per Student", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "grand_total", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Grand Total", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "grand_total_in_words", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "In Words", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "edit_printing_settings", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Printing Settings", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 1, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "letter_head", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Letter Head", + "length": 0, + "no_copy": 0, + "options": "Letter Head", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_32", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 1, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "select_print_heading", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Print Heading", + "length": 0, + "no_copy": 1, + "options": "Print Heading", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 1, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "columns": 0, + "fieldname": "account", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Accounting", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "debit_to", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Academic Receivable Account", + "length": 0, + "no_copy": 0, + "options": "Account", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "against_income_account", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Income Account", + "length": 0, + "no_copy": 0, + "options": "Account", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_39", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "cost_center", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Cost Center", + "length": 0, + "no_copy": 0, + "options": "Cost Center", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "company", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Institution", + "length": 0, + "no_copy": 0, + "options": "Company", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "amended_from", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Amended From", + "length": 0, + "no_copy": 1, + "options": "Fee Schedule", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 1, + "collapsible_depends_on": "", + "columns": 0, + "depends_on": "error_log", + "fieldname": "section_break_31", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Error Log", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "error_log", + "fieldtype": "Read Only", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Error Log", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2017-08-23 15:58:34.051237", + "modified_by": "Administrator", + "module": "Schools", + "name": "Fee Schedule", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 0, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 0, + "role": "Academics User", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + } + ], + "quick_entry": 0, + "read_only": 0, + "read_only_onload": 0, + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "", + "track_changes": 0, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/schools/doctype/fee_schedule/fee_schedule.py b/erpnext/schools/doctype/fee_schedule/fee_schedule.py new file mode 100644 index 0000000000..80165f4d05 --- /dev/null +++ b/erpnext/schools/doctype/fee_schedule/fee_schedule.py @@ -0,0 +1,104 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe import _ +from frappe.model.document import Document +from frappe.model.mapper import get_mapped_doc +from frappe.utils import money_in_words +from frappe.utils import cint, flt, cstr +from frappe.utils.background_jobs import enqueue + + +class FeeSchedule(Document): + def onload(self): + info = self.get_dashboard_info() + self.set_onload('dashboard_info', info) + + def get_dashboard_info(self): + total_unpaid = frappe.db.sql("""select sum(outstanding_amount) from tabFees + where fee_schedule=%s""", (self.name)) + total_unpaid_amount = flt(total_unpaid[0][0]) if total_unpaid else 0 + info = {} + info["total_paid"] = self.grand_total - total_unpaid_amount + info["total_unpaid"] = total_unpaid_amount + info["currency"] = frappe.defaults.get_defaults().currency + return info + + def validate(self): + self.calculate_total() + + def calculate_total(self): + no_of_students = 0 + for d in self.student_groups: + # if not d.total_students: + d.total_students = get_total_students(d.student_group) + no_of_students += cint(d.total_students) + self.grand_total = no_of_students*self.total_amount + self.grand_total_in_words = money_in_words(self.grand_total) + + def create_fees(self): + if not self.fee_creation_status or self.fee_creation_status == "Failed": + self.fee_creation_status = "In Process" + enqueue(generate_fee, queue='default', timeout=6000, event='generate_fee', + fee_schedule=self.name) + frappe.msgprint(_("Fee generation started")) + + +def generate_fee(fee_schedule): + doc = frappe.get_doc("Fee Schedule", fee_schedule) + error = False + for d in doc.student_groups: + try: + students = frappe.db.sql(""" select sg.program, sg.batch, sgs.student, sgs.student_name + from `tabStudent Group` sg, `tabStudent Group Student` sgs + where sg.name=%s and sg.name=sgs.parent and sgs.active=1""", d.student_group, as_dict=1) + + # students = frappe.get_all("Student Group Student", fields=["student", "student_name"], + # filters={"parent": d.student_group, "parenttype": "Student Group", "active": 1}) + for student in students: + doc = get_mapped_doc("Fee Schedule", fee_schedule, { + "Fee Schedule": { + "doctype": "Fees", + "field_map": { + "name": "Fee Schedule" + } + } + }) + doc.student = student.student + doc.student_name = student.student_name + doc.program = student.program + doc.student_batch = student.batch + doc.send_payment_request = 1 + doc.save() + doc.submit() + except Exception as e: + error = True + err_msg = frappe.local.message_log and "\n\n".join(frappe.local.message_log) or cstr(e) + + if error: + frappe.db.rollback() + frappe.db.set_value("Fee Schedule", fee_schedule, "fee_creation_status", "Failed") + frappe.db.set_value("Fee Schedule", fee_schedule, "error_log", err_msg) + + else: + frappe.db.commit() + frappe.db.set_value("Fee Schedule", fee_schedule, "fee_creation_status", "Successful") + frappe.db.set_value("Fee Schedule", fee_schedule, "error_log", None) + + +@frappe.whitelist() +def get_fee_structure(source_name,target_doc=None): + fee_request = get_mapped_doc("Fee Structure", source_name, + {"Fee Structure": { + "doctype": "Fee Schedule" + }}, ignore_permissions=True) + return fee_request + +@frappe.whitelist() +def get_total_students(student_group): + students = frappe.get_all("Student Group Student", + filters={"parent": student_group, "parenttype": "Student Group", "active": 1}) or [] + return len(students) \ No newline at end of file diff --git a/erpnext/schools/doctype/fee_schedule/fee_schedule_list.js b/erpnext/schools/doctype/fee_schedule/fee_schedule_list.js new file mode 100644 index 0000000000..3039c51d78 --- /dev/null +++ b/erpnext/schools/doctype/fee_schedule/fee_schedule_list.js @@ -0,0 +1,14 @@ +frappe.listview_settings['Fee Schedule'] = { + add_fields: ["fee_creation_status", "due_date", "grand_total"], + get_indicator: function(doc) { + if (doc.fee_creation_status=="Successful") { + return [__("Fee Created"), "blue", "fee_creation_status,=,Successful"]; + } else if(doc.fee_creation_status == "In Process") { + return [__("Creating Fees"), "orange", "fee_creation_status,=,In Process"]; + } else if(doc.fee_creation_status == "Failed") { + return [__("Fee Creation Failed"), "red", "fee_creation_status,=,Failed"]; + } else { + return [__("Fee Creation Pending"), "green", "fee_creation_status,=,"]; + } + } +}; diff --git a/erpnext/schools/doctype/fee_schedule/test_fee_schedule.js b/erpnext/schools/doctype/fee_schedule/test_fee_schedule.js new file mode 100644 index 0000000000..d495b4ce7b --- /dev/null +++ b/erpnext/schools/doctype/fee_schedule/test_fee_schedule.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Fee Schedule", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially('Fee Schedule', [ + // insert a new Fee Schedule + () => frappe.tests.make([ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/schools/doctype/fee_schedule/test_fee_schedule.py b/erpnext/schools/doctype/fee_schedule/test_fee_schedule.py new file mode 100644 index 0000000000..44e0756d64 --- /dev/null +++ b/erpnext/schools/doctype/fee_schedule/test_fee_schedule.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors +# See license.txt +from __future__ import unicode_literals + +import unittest + +class TestFeeSchedule(unittest.TestCase): + pass diff --git a/erpnext/schools/doctype/fee_schedule_program/__init__.py b/erpnext/schools/doctype/fee_schedule_program/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.json b/erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.json new file mode 100644 index 0000000000..42cc7bfcd8 --- /dev/null +++ b/erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.json @@ -0,0 +1,133 @@ +{ + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 0, + "creation": "2017-03-23 17:46:55.712169", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "program", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Program", + "length": 0, + "no_copy": 0, + "options": "Program", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "student_batch", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Student Batch", + "length": 0, + "no_copy": 0, + "options": "Student Batch Name", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "total_students", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Total Students", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "max_attachments": 0, + "modified": "2017-08-22 16:24:40.547517", + "modified_by": "Administrator", + "module": "Schools", + "name": "Fee Schedule Program", + "name_case": "", + "owner": "Administrator", + "permissions": [], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.py b/erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.py new file mode 100644 index 0000000000..11d5697380 --- /dev/null +++ b/erpnext/schools/doctype/fee_schedule_program/fee_schedule_program.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document + +class FeeScheduleProgram(Document): + pass diff --git a/erpnext/schools/doctype/fee_schedule_student_group/__init__.py b/erpnext/schools/doctype/fee_schedule_student_group/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.json b/erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.json new file mode 100644 index 0000000000..c80e32087c --- /dev/null +++ b/erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.json @@ -0,0 +1,102 @@ +{ + "allow_copy": 0, + "allow_guest_to_view": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 0, + "creation": "2017-03-23 17:55:52.476822", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "student_group", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Student Group", + "length": 0, + "no_copy": 0, + "options": "Student Group", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "total_students", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Total Students", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "has_web_view": 0, + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "max_attachments": 0, + "modified": "2017-08-22 16:23:12.337294", + "modified_by": "Administrator", + "module": "Schools", + "name": "Fee Schedule Student Group", + "name_case": "", + "owner": "Administrator", + "permissions": [], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.py b/erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.py new file mode 100644 index 0000000000..776534d6fa --- /dev/null +++ b/erpnext/schools/doctype/fee_schedule_student_group/fee_schedule_student_group.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +from frappe.model.document import Document + +class FeeScheduleStudentGroup(Document): + pass diff --git a/erpnext/schools/doctype/fees/fees.js b/erpnext/schools/doctype/fees/fees.js index b254d720ff..5bb130bf71 100644 --- a/erpnext/schools/doctype/fees/fees.js +++ b/erpnext/schools/doctype/fees/fees.js @@ -6,10 +6,9 @@ frappe.ui.form.on("Fees", { setup: function(frm) { frm.add_fetch("student", "title", "student_name"); frm.add_fetch("student", "student_email_id", "student_email"); - frm.add_fetch("company", "default_receivable_account", "debit_to"); - frm.add_fetch("company", "default_income_account", "against_income_account"); - frm.add_fetch("company", "cost_center", "cost_center"); - + frm.add_fetch("fee_structure", "debit_to", "debit_to"); + frm.add_fetch("fee_structure", "against_income_account", "against_income_account"); + frm.add_fetch("fee_structure", "cost_center", "cost_center"); }, onload: function(frm){ @@ -90,7 +89,7 @@ frappe.ui.form.on("Fees", { callback: function(r) { if(r){ $.each(r.message, function(i, d) { - frm.set_value(i,d) + frm.set_value(i,d); }); } } @@ -100,8 +99,8 @@ frappe.ui.form.on("Fees", { make_payment_request: function(frm) { if (!frm.doc.contact_email) { - frappe.msgprint(__("Please set the Email ID for the Student to send the Payment Request")) - } else { + frappe.msgprint(__("Please set the Email ID for the Student to send the Payment Request")); + } else { frappe.call({ method:"erpnext.accounts.doctype.payment_request.payment_request.make_payment_request", args: { diff --git a/erpnext/schools/doctype/fees/fees.json b/erpnext/schools/doctype/fees/fees.json index 435697a5b7..b01b5d0637 100644 --- a/erpnext/schools/doctype/fees/fees.json +++ b/erpnext/schools/doctype/fees/fees.json @@ -105,6 +105,37 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "fee_schedule", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Fee Schedule", + "length": 0, + "no_copy": 0, + "options": "Fee Schedule", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -677,7 +708,7 @@ "precision": "", "print_hide": 0, "print_hide_if_no_value": 0, - "read_only": 0, + "read_only": 1, "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, @@ -1243,7 +1274,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-08-03 16:02:06.001422", + "modified": "2017-08-23 14:12:58.772381", "modified_by": "Administrator", "module": "Schools", "name": "Fees", diff --git a/erpnext/schools/doctype/fees/fees.py b/erpnext/schools/doctype/fees/fees.py index 78154e0da0..2e1a49bf61 100644 --- a/erpnext/schools/doctype/fees/fees.py +++ b/erpnext/schools/doctype/fees/fees.py @@ -6,10 +6,9 @@ from __future__ import unicode_literals from frappe.model.document import Document import frappe from frappe import _ -from frappe.utils import money_in_words, nowdate +from frappe.utils import money_in_words from erpnext.accounts.doctype.payment_request.payment_request import make_payment_request from frappe.utils.csvutils import getlink -from erpnext.accounts.utils import get_account_currency from erpnext.controllers.accounts_controller import AccountsController from erpnext.accounts.doctype.journal_entry.journal_entry import get_default_bank_cash_account from erpnext.accounts.general_ledger import delete_gl_entries @@ -27,7 +26,22 @@ class Fees(AccountsController): def validate(self): self.calculate_total() - # set missing field here and validate the accounts + self.set_missing_accounts_and_fields() + + def set_missing_accounts_and_fields(self): + if not self.company: + self.company = frappe.defaults.get_defaults().company + if not self.currency: + self.currency = frappe.defaults.get_defaults().currency + if not (self.debit_to and self.against_income_account and self.cost_center): + accounts_details = frappe.get_all("Company", fields=["default_receivable_account", + "default_income_account", "cost_center"], filters={"name": self.company})[0] + if not self.debit_to: + self.debit_to = accounts_details.default_receivable_account + if not self.against_income_account: + self.against_income_account = accounts_details.default_income_account + if not self.cost_center: + self.cost_center = accounts_details.cost_center def calculate_total(self): """Calculates total amount.""" diff --git a/erpnext/schools/doctype/student_applicant/student_applicant.js b/erpnext/schools/doctype/student_applicant/student_applicant.js index 40a6ac3a3d..fdf16bae0a 100644 --- a/erpnext/schools/doctype/student_applicant/student_applicant.js +++ b/erpnext/schools/doctype/student_applicant/student_applicant.js @@ -2,6 +2,10 @@ // For license information, please see license.txt frappe.ui.form.on("Student Applicant", { + setup: function(frm) { + frm.add_fetch("guardian", "guardian_name", "guardian_name"); + }, + refresh: function(frm) { if(frm.doc.application_status== "Applied" && frm.doc.docstatus== 1 ) { frm.add_custom_button(__("Approve"), function() { @@ -39,10 +43,11 @@ frappe.ui.form.on("Student Applicant", { method: "erpnext.schools.api.enroll_student", frm: frm }) - }, + } +}); +frappe.ui.form.on('Student Sibling', { setup: function(frm) { - frm.add_fetch("guardian", "guardian_name", "guardian_name"); frm.add_fetch("student", "title", "full_name"); frm.add_fetch("student", "gender", "gender"); frm.add_fetch("student", "date_of_birth", "date_of_birth"); From 9b44c16a329cd3ad799420e265073ab6e9eb42e7 Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Fri, 1 Sep 2017 15:18:04 +0530 Subject: [PATCH 69/72] add the fee schedule in config --- .../doctype/payment_entry/payment_entry.py | 6 +- erpnext/config/schools.py | 4 ++ .../doctype/fee_schedule/fee_schedule.js | 41 ++++++----- .../doctype/fee_schedule/fee_schedule.json | 70 +++++++++++++++++-- .../doctype/fee_schedule/fee_schedule.py | 23 ++++-- .../doctype/fee_structure/fee_structure.js | 15 ++++ .../doctype/fee_structure/fee_structure.json | 42 +++++++++-- .../doctype/fee_structure/fee_structure.py | 16 +++++ .../fee_structure/test_fee_structure.js | 23 ++++++ erpnext/schools/doctype/fees/fees.py | 1 - 10 files changed, 203 insertions(+), 38 deletions(-) create mode 100644 erpnext/schools/doctype/fee_structure/test_fee_structure.js diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index d39fd208c7..e6639833e9 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -403,9 +403,9 @@ class PaymentEntry(AccountsController): "against": against_account, "account_currency": self.party_account_currency }) - + dr_or_cr = "credit" if self.party_type in ["Customer", "Student"] else "debit" - + for d in self.get("references"): gle = party_gl_dict.copy() gle.update({ @@ -530,7 +530,7 @@ def get_outstanding_reference_documents(args): if (args.get("party_type") != "Student"): orders_to_be_billed = get_orders_to_be_billed(args.get("posting_date"),args.get("party_type"), args.get("party"), party_account_currency, company_currency) - + return negative_outstanding_invoices + outstanding_invoices + orders_to_be_billed def get_orders_to_be_billed(posting_date, party_type, party, party_account_currency, company_currency): diff --git a/erpnext/config/schools.py b/erpnext/config/schools.py index b984578ca1..dbdcd3561d 100644 --- a/erpnext/config/schools.py +++ b/erpnext/config/schools.py @@ -154,6 +154,10 @@ def get_data(): "type": "doctype", "name": "Fees" }, + { + "type": "doctype", + "name": "Fee Schedule" + }, { "type": "doctype", "name": "Fee Structure" diff --git a/erpnext/schools/doctype/fee_schedule/fee_schedule.js b/erpnext/schools/doctype/fee_schedule/fee_schedule.js index 9e5a156284..757355da44 100644 --- a/erpnext/schools/doctype/fee_schedule/fee_schedule.js +++ b/erpnext/schools/doctype/fee_schedule/fee_schedule.js @@ -3,9 +3,16 @@ frappe.ui.form.on('Fee Schedule', { setup: function(frm) { - frm.add_fetch("company", "default_receivable_account", "debit_to"); - frm.add_fetch("company", "default_income_account", "against_income_account"); - frm.add_fetch("company", "cost_center", "cost_center"); + frm.add_fetch("fee_structure", "default_receivable_account", "debit_to"); + frm.add_fetch("fee_structure", "default_income_account", "against_income_account"); + frm.add_fetch("fee_structure", "cost_center", "cost_center"); + + frm.set_query("student_group", "student_groups", function() { + return { + "program": frm.doc.program, + "academic_year": frm.doc.academic_year + }; + }); }, refresh: function(frm) { @@ -47,20 +54,20 @@ frappe.ui.form.on('Fee Schedule', { } }); -frappe.ui.form.on("Fee Component", { - refresh: function(frm) { - frm.set_read_only(); - } -}); - frappe.ui.form.on("Fee Schedule Student Group", { - onload: function(frm) { - frm.set_query("student_group",function(){ - return{ - "filters":{ - "group_based_on": "Batch" + student_group: function(frm, cdt, cdn) { + var row = locals[cdt][cdn]; + frappe.call({ + method: "erpnext.schools.doctype.fee_schedule.fee_schedule.get_total_students", + args: { + "student_group": row.student_group, + "student_category": frm.doc.student_category + }, + callback: function(r) { + if(!r.exc) { + frappe.model.set_value(cdt, cdn, "total_students", r.message); } - }; - }); + } + }) } -}); +}) \ No newline at end of file diff --git a/erpnext/schools/doctype/fee_schedule/fee_schedule.json b/erpnext/schools/doctype/fee_schedule/fee_schedule.json index c1fb2ec158..7215603adc 100644 --- a/erpnext/schools/doctype/fee_schedule/fee_schedule.json +++ b/erpnext/schools/doctype/fee_schedule/fee_schedule.json @@ -165,6 +165,68 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "student_category", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Student Category", + "length": 0, + "no_copy": 0, + "options": "Student Category", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "program", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Program", + "length": 0, + "no_copy": 0, + "options": "Program", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -188,7 +250,7 @@ "precision": "", "print_hide": 0, "print_hide_if_no_value": 0, - "read_only": 0, + "read_only": 1, "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, @@ -219,7 +281,7 @@ "precision": "", "print_hide": 0, "print_hide_if_no_value": 0, - "read_only": 0, + "read_only": 1, "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, @@ -315,7 +377,7 @@ "read_only": 0, "remember_last_selected_value": 0, "report_hide": 0, - "reqd": 0, + "reqd": 1, "search_index": 0, "set_only_once": 0, "unique": 0 @@ -937,7 +999,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2017-08-23 15:58:34.051237", + "modified": "2017-09-07 12:36:02.678355", "modified_by": "Administrator", "module": "Schools", "name": "Fee Schedule", diff --git a/erpnext/schools/doctype/fee_schedule/fee_schedule.py b/erpnext/schools/doctype/fee_schedule/fee_schedule.py index 80165f4d05..822a62dc8e 100644 --- a/erpnext/schools/doctype/fee_schedule/fee_schedule.py +++ b/erpnext/schools/doctype/fee_schedule/fee_schedule.py @@ -34,7 +34,7 @@ class FeeSchedule(Document): no_of_students = 0 for d in self.student_groups: # if not d.total_students: - d.total_students = get_total_students(d.student_group) + d.total_students = get_total_students(d.student_group, self.student_category) no_of_students += cint(d.total_students) self.grand_total = no_of_students*self.total_amount self.grand_total_in_words = money_in_words(self.grand_total) @@ -44,7 +44,7 @@ class FeeSchedule(Document): self.fee_creation_status = "In Process" enqueue(generate_fee, queue='default', timeout=6000, event='generate_fee', fee_schedule=self.name) - frappe.msgprint(_("Fee generation started")) + frappe.msgprint(_("Fee records will be created in the background. In case of any error, the error message will be updated in the Schedule, check after refresh in 5 minutes.")) def generate_fee(fee_schedule): @@ -84,7 +84,6 @@ def generate_fee(fee_schedule): frappe.db.set_value("Fee Schedule", fee_schedule, "error_log", err_msg) else: - frappe.db.commit() frappe.db.set_value("Fee Schedule", fee_schedule, "fee_creation_status", "Successful") frappe.db.set_value("Fee Schedule", fee_schedule, "error_log", None) @@ -98,7 +97,17 @@ def get_fee_structure(source_name,target_doc=None): return fee_request @frappe.whitelist() -def get_total_students(student_group): - students = frappe.get_all("Student Group Student", - filters={"parent": student_group, "parenttype": "Student Group", "active": 1}) or [] - return len(students) \ No newline at end of file +def get_total_students(student_group, student_category=None): + conditions = "" + if student_category: + conditions = " and s.student_category='{}'".format(frappe.db.escape(student_category)) + + return frappe.db.sql(""" + select count(s.name) + from `tabStudent` s, `tabStudent Group Student` sgs + where + s.name = sgs.student + and sgs.parent = %s + and sgs.active = 1 + {conditions} + """.format(conditions=conditions), student_group)[0][0] diff --git a/erpnext/schools/doctype/fee_structure/fee_structure.js b/erpnext/schools/doctype/fee_structure/fee_structure.js index 7619cf5fbc..78b85887a8 100644 --- a/erpnext/schools/doctype/fee_structure/fee_structure.js +++ b/erpnext/schools/doctype/fee_structure/fee_structure.js @@ -16,6 +16,21 @@ frappe.ui.form.on('Fee Structure', { } }; }); + }, + + refresh: function(frm) { + if(frm.doc.docstatus === 1) { + frm.add_custom_button(__("Make Fee Schedule"), function() { + frm.events.make_fee_schedule(frm); + }); + } + }, + + make_fee_schedule: function(frm) { + frappe.model.open_mapped_doc({ + method: "erpnext.schools.doctype.fee_structure.fee_structure.make_fee_schedule", + frm: frm + }); } }); diff --git a/erpnext/schools/doctype/fee_structure/fee_structure.json b/erpnext/schools/doctype/fee_structure/fee_structure.json index da8d7c94d2..c3df7bb67a 100644 --- a/erpnext/schools/doctype/fee_structure/fee_structure.json +++ b/erpnext/schools/doctype/fee_structure/fee_structure.json @@ -564,6 +564,36 @@ "search_index": 0, "set_only_once": 0, "unique": 0 + }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "amended_from", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Amended From", + "length": 0, + "no_copy": 1, + "options": "Fee Structure", + "permlevel": 0, + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 1, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 } ], "has_web_view": 0, @@ -573,12 +603,12 @@ "idx": 0, "image_view": 0, "in_create": 0, - "is_submittable": 0, + "is_submittable": 1, "issingle": 0, "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-08-02 16:31:35.861158", + "modified": "2017-09-07 12:04:14.807690", "modified_by": "Administrator", "module": "Schools", "name": "Fee Structure", @@ -586,15 +616,15 @@ "owner": "Administrator", "permissions": [ { - "amend": 0, + "amend": 1, "apply_user_permissions": 0, - "cancel": 0, + "cancel": 1, "create": 1, "delete": 1, "email": 1, "export": 1, "if_owner": 0, - "import": 0, + "import": 1, "permlevel": 0, "print": 1, "read": 1, @@ -602,7 +632,7 @@ "role": "Academics User", "set_user_permissions": 0, "share": 1, - "submit": 0, + "submit": 1, "write": 1 } ], diff --git a/erpnext/schools/doctype/fee_structure/fee_structure.py b/erpnext/schools/doctype/fee_structure/fee_structure.py index b71c507dd4..781382b51b 100644 --- a/erpnext/schools/doctype/fee_structure/fee_structure.py +++ b/erpnext/schools/doctype/fee_structure/fee_structure.py @@ -5,6 +5,8 @@ from __future__ import unicode_literals import frappe from frappe.model.document import Document +from frappe.model.mapper import get_mapped_doc + class FeeStructure(Document): def validate(self): @@ -16,3 +18,17 @@ class FeeStructure(Document): for d in self.components: self.total_amount += d.amount + +@frappe.whitelist() +def make_fee_schedule(source_name, target_doc=None): + return get_mapped_doc("Fee Structure", source_name, { + "Fee Structure": { + "doctype": "Fee Schedule", + "validation": { + "docstatus": ["=", 1], + } + }, + "Fee Component": { + "doctype": "Fee Component" + } + }, target_doc) \ No newline at end of file diff --git a/erpnext/schools/doctype/fee_structure/test_fee_structure.js b/erpnext/schools/doctype/fee_structure/test_fee_structure.js new file mode 100644 index 0000000000..61f41354c3 --- /dev/null +++ b/erpnext/schools/doctype/fee_structure/test_fee_structure.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +// rename this file from _test_[name] to test_[name] to activate +// and remove above this line + +QUnit.test("test: Fee Structure", function (assert) { + let done = assert.async(); + + // number of asserts + assert.expect(1); + + frappe.run_serially([ + // insert a new Fee Structure + () => frappe.tests.make('Fee Structure', [ + // values to be set + {key: 'value'} + ]), + () => { + assert.equal(cur_frm.doc.key, 'value'); + }, + () => done() + ]); + +}); diff --git a/erpnext/schools/doctype/fees/fees.py b/erpnext/schools/doctype/fees/fees.py index 2e1a49bf61..ac5564e300 100644 --- a/erpnext/schools/doctype/fees/fees.py +++ b/erpnext/schools/doctype/fees/fees.py @@ -10,7 +10,6 @@ from frappe.utils import money_in_words from erpnext.accounts.doctype.payment_request.payment_request import make_payment_request from frappe.utils.csvutils import getlink from erpnext.controllers.accounts_controller import AccountsController -from erpnext.accounts.doctype.journal_entry.journal_entry import get_default_bank_cash_account from erpnext.accounts.general_ledger import delete_gl_entries From 1bcc6c661a602fced1cd39101d42ce2463429f4e Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Mon, 11 Sep 2017 23:22:58 +0530 Subject: [PATCH 70/72] minor changes --- .../doctype/payment_entry/payment_entry.py | 14 ++--- .../doctype/fee_component/fee_component.json | 62 +++++++++---------- .../doctype/fee_schedule/fee_schedule.js | 36 ++++++++++- .../doctype/fee_schedule/fee_schedule.json | 38 ++++++++++-- .../doctype/fee_schedule/fee_schedule.py | 8 ++- .../doctype/fee_structure/fee_structure.js | 21 +++++-- .../doctype/fee_structure/fee_structure.json | 39 ++---------- erpnext/schools/doctype/fees/fees.js | 40 +++++------- erpnext/schools/doctype/fees/fees.json | 8 +-- erpnext/schools/doctype/fees/fees.py | 31 +++++++--- 10 files changed, 171 insertions(+), 126 deletions(-) diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index e6639833e9..c93e5f9d3a 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -212,18 +212,16 @@ class PaymentEntry(AccountsController): self.validate_journal_entry() if d.reference_doctype in ("Sales Invoice", "Purchase Invoice", "Expense Claim", "Fees"): - if self.party_type in ("Customer", "Student"): + if self.party_type == "Customer": ref_party_account = ref_doc.debit_to + elif self.party_type == "Student": + ref_party_account = ref_doc.receivable_account elif self.party_type=="Supplier": ref_party_account = ref_doc.credit_to elif self.party_type=="Employee": ref_party_account = ref_doc.payable_account - if d.reference_doctype in ("Sales Invoice", "Purchase Invoice", "Fees"): - ref_party_account = ref_doc.debit_to \ - if self.party_type in ("Customer", "Student") else ref_doc.credit_to - - if ref_party_account != self.party_account: + if ref_party_account != self.party_account: frappe.throw(_("{0} {1} is associated with {2}, but Party Account is {3}") .format(d.reference_doctype, d.reference_name, ref_party_account, self.party_account)) @@ -695,10 +693,12 @@ def get_payment_entry(dt, dn, party_amount=None, bank_account=None, bank_amount= party_type = "Student" # party account - if dt in ("Sales Invoice", "Fees"): + if dt == "Sales Invoice": party_account = doc.debit_to elif dt == "Purchase Invoice": party_account = doc.credit_to + elif dt == "Fees": + party_account = doc.receivable_account else: party_account = get_party_account(party_type, doc.get(party_type.lower()), doc.company) diff --git a/erpnext/schools/doctype/fee_component/fee_component.json b/erpnext/schools/doctype/fee_component/fee_component.json index da659fa511..ccf1f659db 100644 --- a/erpnext/schools/doctype/fee_component/fee_component.json +++ b/erpnext/schools/doctype/fee_component/fee_component.json @@ -45,6 +45,36 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "description", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 1, + "in_standard_filter": 0, + "label": "Description", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -107,36 +137,6 @@ "set_only_once": 0, "unique": 0, "width": "300px" - }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "fieldname": "description", - "fieldtype": "Small Text", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Description", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 } ], "has_web_view": 0, @@ -150,7 +150,7 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2017-07-18 15:03:18.945746", + "modified": "2017-09-11 16:48:07.810959", "modified_by": "Administrator", "module": "Schools", "name": "Fee Component", diff --git a/erpnext/schools/doctype/fee_schedule/fee_schedule.js b/erpnext/schools/doctype/fee_schedule/fee_schedule.js index 757355da44..5eba62de85 100644 --- a/erpnext/schools/doctype/fee_schedule/fee_schedule.js +++ b/erpnext/schools/doctype/fee_schedule/fee_schedule.js @@ -3,10 +3,39 @@ frappe.ui.form.on('Fee Schedule', { setup: function(frm) { - frm.add_fetch("fee_structure", "default_receivable_account", "debit_to"); - frm.add_fetch("fee_structure", "default_income_account", "against_income_account"); + frm.add_fetch("fee_structure", "receivable_account", "receivable_account"); + frm.add_fetch("fee_structure", "income_account", "income_account"); frm.add_fetch("fee_structure", "cost_center", "cost_center"); + frappe.realtime.on("fee_schedule_progress", function(data) { + if (data.progress && data.progress === 0) { + frappe.msgprint(__("Fee records will be created in the background. In case of any error the error message will be updated in the Schedule.")); + } + if (data.progress) { + frm.reload_doc(); + frm.dashboard.add_progress("Fee Creation Status", data.progress); + } + }); + }, + onload: function(frm) { + frm.set_query("receivable_account", function(doc) { + return { + filters: { + 'account_type': 'Receivable', + 'is_group': 0, + 'company': doc.company + } + }; + }); + frm.set_query("income_account", function(doc) { + return { + filters: { + 'account_type': 'Income Account', + 'is_group': 0, + 'company': doc.company + } + }; + }); frm.set_query("student_group", "student_groups", function() { return { "program": frm.doc.program, @@ -24,7 +53,8 @@ frappe.ui.form.on('Fee Schedule', { frm.dashboard.add_indicator(__('Total Outstanding: {0}', [format_currency(info.total_unpaid, info.currency)]), info.total_unpaid ? 'orange' : 'green'); } - if (!frm.doc.fee_creation_status || frm.doc.fee_creation_status == "Failed") { + + if (!frm.doc.__islocal && !frm.doc.fee_creation_status || frm.doc.fee_creation_status == "Failed") { frm.add_custom_button(__('Create Fees'), function() { frappe.call({ method: "create_fees", diff --git a/erpnext/schools/doctype/fee_schedule/fee_schedule.json b/erpnext/schools/doctype/fee_schedule/fee_schedule.json index 7215603adc..8dd51f792c 100644 --- a/erpnext/schools/doctype/fee_schedule/fee_schedule.json +++ b/erpnext/schools/doctype/fee_schedule/fee_schedule.json @@ -136,6 +136,36 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "send_email", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Send Email", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -749,7 +779,7 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "debit_to", + "fieldname": "receivable_account", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, @@ -758,7 +788,7 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Academic Receivable Account", + "label": "Receivable Account", "length": 0, "no_copy": 0, "options": "Account", @@ -780,7 +810,7 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "against_income_account", + "fieldname": "income_account", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, @@ -999,7 +1029,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2017-09-07 12:36:02.678355", + "modified": "2017-09-11 16:57:27.427777", "modified_by": "Administrator", "module": "Schools", "name": "Fee Schedule", diff --git a/erpnext/schools/doctype/fee_schedule/fee_schedule.py b/erpnext/schools/doctype/fee_schedule/fee_schedule.py index 822a62dc8e..1b2299ce3b 100644 --- a/erpnext/schools/doctype/fee_schedule/fee_schedule.py +++ b/erpnext/schools/doctype/fee_schedule/fee_schedule.py @@ -42,14 +42,15 @@ class FeeSchedule(Document): def create_fees(self): if not self.fee_creation_status or self.fee_creation_status == "Failed": self.fee_creation_status = "In Process" + frappe.publish_realtime("fee_schedule_progress", {"progress": 0, "reload": True}, user=frappe.session.user) enqueue(generate_fee, queue='default', timeout=6000, event='generate_fee', fee_schedule=self.name) - frappe.msgprint(_("Fee records will be created in the background. In case of any error, the error message will be updated in the Schedule, check after refresh in 5 minutes.")) - def generate_fee(fee_schedule): doc = frappe.get_doc("Fee Schedule", fee_schedule) error = False + total_records = sum([int(d.total_students) for d in doc.student_groups]) + created_records = 0 for d in doc.student_groups: try: students = frappe.db.sql(""" select sg.program, sg.batch, sgs.student, sgs.student_name @@ -74,6 +75,9 @@ def generate_fee(fee_schedule): doc.send_payment_request = 1 doc.save() doc.submit() + created_records += 1 + frappe.publish_realtime("fee_schedule_progress", {"progress": created_records}, user=frappe.session.user) + except Exception as e: error = True err_msg = frappe.local.message_log and "\n\n".join(frappe.local.message_log) or cstr(e) diff --git a/erpnext/schools/doctype/fee_structure/fee_structure.js b/erpnext/schools/doctype/fee_structure/fee_structure.js index 78b85887a8..300bdc869f 100644 --- a/erpnext/schools/doctype/fee_structure/fee_structure.js +++ b/erpnext/schools/doctype/fee_structure/fee_structure.js @@ -1,13 +1,15 @@ // Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors // For license information, please see license.txt -cur_frm.add_fetch("company", "default_receivable_account", "debit_to"); -cur_frm.add_fetch("company", "default_income_account", "against_income_account"); -cur_frm.add_fetch("company", "cost_center", "cost_center"); - frappe.ui.form.on('Fee Structure', { + setup: function(frm) { + frm.add_fetch("company", "default_receivable_account", "receivable_account"); + frm.add_fetch("company", "default_income_account", "income_account"); + frm.add_fetch("company", "cost_center", "cost_center"); + }, + onload: function(frm) { - frm.set_query("debit_to", function(doc) { + frm.set_query("receivable_account", function(doc) { return { filters: { 'account_type': 'Receivable', @@ -16,6 +18,15 @@ frappe.ui.form.on('Fee Structure', { } }; }); + frm.set_query("income_account", function(doc) { + return { + filters: { + 'account_type': 'Income Account', + 'is_group': 0, + 'company': doc.company + } + }; + }); }, refresh: function(frm) { diff --git a/erpnext/schools/doctype/fee_structure/fee_structure.json b/erpnext/schools/doctype/fee_structure/fee_structure.json index c3df7bb67a..d93a667bd3 100644 --- a/erpnext/schools/doctype/fee_structure/fee_structure.json +++ b/erpnext/schools/doctype/fee_structure/fee_structure.json @@ -202,37 +202,6 @@ "set_only_once": 0, "unique": 0 }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "default": "", - "fieldname": "disabled", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Disabled", - "length": 0, - "no_copy": 0, - "permlevel": 0, - "precision": "", - "print_hide": 0, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -418,7 +387,7 @@ "collapsible": 0, "columns": 0, "default": "", - "fieldname": "debit_to", + "fieldname": "receivable_account", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, @@ -427,7 +396,7 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Academic Receivable Account", + "label": "Receivable Account", "length": 0, "no_copy": 0, "options": "Account", @@ -449,7 +418,7 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "against_income_account", + "fieldname": "income_account", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, @@ -608,7 +577,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-09-07 12:04:14.807690", + "modified": "2017-09-11 15:18:27.975666", "modified_by": "Administrator", "module": "Schools", "name": "Fee Structure", diff --git a/erpnext/schools/doctype/fees/fees.js b/erpnext/schools/doctype/fees/fees.js index 5bb130bf71..45d30d4583 100644 --- a/erpnext/schools/doctype/fees/fees.js +++ b/erpnext/schools/doctype/fees/fees.js @@ -6,8 +6,8 @@ frappe.ui.form.on("Fees", { setup: function(frm) { frm.add_fetch("student", "title", "student_name"); frm.add_fetch("student", "student_email_id", "student_email"); - frm.add_fetch("fee_structure", "debit_to", "debit_to"); - frm.add_fetch("fee_structure", "against_income_account", "against_income_account"); + frm.add_fetch("fee_structure", "receivable_account", "receivable_account"); + frm.add_fetch("fee_structure", "income_account", "income_account"); frm.add_fetch("fee_structure", "cost_center", "cost_center"); }, @@ -19,7 +19,6 @@ frappe.ui.form.on("Fees", { } }; }); - frm.set_query("fee_structure",function(){ return{ "filters":{ @@ -27,9 +26,7 @@ frappe.ui.form.on("Fees", { } }; }); - - // debit account for booking the fee - frm.set_query("debit_to", function(doc) { + frm.set_query("receivable_account", function(doc) { return { filters: { 'account_type': 'Receivable', @@ -38,7 +35,15 @@ frappe.ui.form.on("Fees", { } }; }); - + frm.set_query("income_account", function(doc) { + return { + filters: { + 'account_type': 'Income Account', + 'is_group': 0, + 'company': doc.company + } + }; + }); if (!frm.doc.posting_date) { frm.doc.posting_date = frappe.datetime.get_today(); } @@ -98,7 +103,7 @@ frappe.ui.form.on("Fees", { }, make_payment_request: function(frm) { - if (!frm.doc.contact_email) { + if (!frm.doc.student_email) { frappe.msgprint(__("Please set the Email ID for the Student to send the Payment Request")); } else { frappe.call({ @@ -106,7 +111,7 @@ frappe.ui.form.on("Fees", { args: { "dt": frm.doc.doctype, "dn": frm.doc.name, - "recipient_id": frm.doc.contact_email + "recipient_id": frm.doc.student_email }, callback: function(r) { if(!r.exc){ @@ -136,23 +141,6 @@ frappe.ui.form.on("Fees", { frm.refresh(); }, - program: function(frm) { - if (frm.doc.program && frm.doc.academic_term) { - frappe.call({ - method: "erpnext.schools.api.get_fee_structure", - args: { - "program": frm.doc.program, - "academic_term": frm.doc.academic_term - }, - callback: function(r) { - if(r.message) { - frm.set_value("fee_structure" ,r.message); - } - } - }); - } - }, - academic_term: function() { frappe.ui.form.trigger("Fees", "program"); }, diff --git a/erpnext/schools/doctype/fees/fees.json b/erpnext/schools/doctype/fees/fees.json index b01b5d0637..8286048ce2 100644 --- a/erpnext/schools/doctype/fees/fees.json +++ b/erpnext/schools/doctype/fees/fees.json @@ -1146,7 +1146,7 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "debit_to", + "fieldname": "receivable_account", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, @@ -1155,7 +1155,7 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Academic Receivable Account", + "label": "Receivable Account", "length": 0, "no_copy": 0, "options": "Account", @@ -1177,7 +1177,7 @@ "bold": 0, "collapsible": 0, "columns": 0, - "fieldname": "against_income_account", + "fieldname": "income_account", "fieldtype": "Link", "hidden": 0, "ignore_user_permissions": 0, @@ -1274,7 +1274,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-08-23 14:12:58.772381", + "modified": "2017-09-11 16:04:35.725204", "modified_by": "Administrator", "module": "Schools", "name": "Fees", diff --git a/erpnext/schools/doctype/fees/fees.py b/erpnext/schools/doctype/fees/fees.py index ac5564e300..2ce115b466 100644 --- a/erpnext/schools/doctype/fees/fees.py +++ b/erpnext/schools/doctype/fees/fees.py @@ -11,6 +11,7 @@ from erpnext.accounts.doctype.payment_request.payment_request import make_paymen from frappe.utils.csvutils import getlink from erpnext.controllers.accounts_controller import AccountsController from erpnext.accounts.general_ledger import delete_gl_entries +from erpnext.schools.api import get_student_guardians class Fees(AccountsController): @@ -32,15 +33,27 @@ class Fees(AccountsController): self.company = frappe.defaults.get_defaults().company if not self.currency: self.currency = frappe.defaults.get_defaults().currency - if not (self.debit_to and self.against_income_account and self.cost_center): + if not (self.receivable_account and self.income_account and self.cost_center): accounts_details = frappe.get_all("Company", fields=["default_receivable_account", "default_income_account", "cost_center"], filters={"name": self.company})[0] - if not self.debit_to: - self.debit_to = accounts_details.default_receivable_account - if not self.against_income_account: - self.against_income_account = accounts_details.default_income_account + if not self.receivable_account: + self.receivable_account = accounts_details.default_receivable_account + if not self.income_account: + self.income_account = accounts_details.default_income_account if not self.cost_center: self.cost_center = accounts_details.cost_center + if not self.student_email: + self.student_email = self.get_student_emails() + + def get_student_emails(self): + guardians = get_student_guardians(self.student) + email_list = [] + for guardian in guardians: + email = frappe.db.get_value("Guardian", guardian.guardian, "email_address") + if email: + email_list.append(email) + return ", ".join(email_list) + def calculate_total(self): """Calculates total amount.""" @@ -55,7 +68,7 @@ class Fees(AccountsController): self.make_gl_entries() if self.send_payment_request and self.student_email: - pr = make_payment_request(dt="Fees", dn=self.name, recipient_id=self.contact_email, + pr = make_payment_request(dt="Fees", dn=self.name, recipient_id=self.student_email, submit_doc=True, use_dummy_message=True) frappe.msgprint(_("Payment request {0} created").format(getlink("Payment Request", pr.name))) @@ -68,17 +81,17 @@ class Fees(AccountsController): if not self.grand_total: return student_gl_entries = self.get_gl_dict({ - "account": self.debit_to, + "account": self.receivable_account, "party_type": "Student", "party": self.student, - "against": self.against_income_account, + "against": self.income_account, "debit": self.grand_total, "debit_in_account_currency": self.grand_total, "against_voucher": self.name, "against_voucher_type": self.doctype }) fee_gl_entry = self.get_gl_dict({ - "account": self.against_income_account, + "account": self.income_account, "against": self.student, "credit": self.grand_total, "credit_in_account_currency": self.grand_total, From 0664d6ed8b8883d0c4416771cd707147ef3f40ef Mon Sep 17 00:00:00 2001 From: Manas Solanki Date: Tue, 12 Sep 2017 02:10:19 +0530 Subject: [PATCH 71/72] real time fee creation status via socketio --- .../doctype/fee_schedule/fee_schedule.js | 35 ++++++++++----- .../doctype/fee_schedule/fee_schedule.json | 4 +- .../doctype/fee_schedule/fee_schedule.py | 44 +++++++++---------- 3 files changed, 47 insertions(+), 36 deletions(-) diff --git a/erpnext/schools/doctype/fee_schedule/fee_schedule.js b/erpnext/schools/doctype/fee_schedule/fee_schedule.js index 5eba62de85..952a4f67ed 100644 --- a/erpnext/schools/doctype/fee_schedule/fee_schedule.js +++ b/erpnext/schools/doctype/fee_schedule/fee_schedule.js @@ -6,15 +6,6 @@ frappe.ui.form.on('Fee Schedule', { frm.add_fetch("fee_structure", "receivable_account", "receivable_account"); frm.add_fetch("fee_structure", "income_account", "income_account"); frm.add_fetch("fee_structure", "cost_center", "cost_center"); - frappe.realtime.on("fee_schedule_progress", function(data) { - if (data.progress && data.progress === 0) { - frappe.msgprint(__("Fee records will be created in the background. In case of any error the error message will be updated in the Schedule.")); - } - if (data.progress) { - frm.reload_doc(); - frm.dashboard.add_progress("Fee Creation Status", data.progress); - } - }); }, onload: function(frm) { @@ -42,6 +33,21 @@ frappe.ui.form.on('Fee Schedule', { "academic_year": frm.doc.academic_year }; }); + frappe.realtime.on("fee_schedule_progress", function(data) { + if (data.reload && data.reload === 1) { + frm.reload_doc(); + } + if (data.progress && data.progress === "0") { + frappe.msgprint(__("Fee records will be created in the background. In case of any error the error message will be updated in the Schedule.")); + } + if (data.progress) { + let progress_bar = $(cur_frm.dashboard.progress_area).find(".progress-bar"); + if (progress_bar) { + $(progress_bar).removeClass("progress-bar-danger").addClass("progress-bar-success progress-bar-striped"); + $(progress_bar).css("width", data.progress+"%"); + } + } + }); }, refresh: function(frm) { @@ -53,9 +59,13 @@ frappe.ui.form.on('Fee Schedule', { frm.dashboard.add_indicator(__('Total Outstanding: {0}', [format_currency(info.total_unpaid, info.currency)]), info.total_unpaid ? 'orange' : 'green'); } - + if (frm.doc.fee_creation_status=="In Process") { + frm.dashboard.add_progress("Fee Creation Status", "0"); + } if (!frm.doc.__islocal && !frm.doc.fee_creation_status || frm.doc.fee_creation_status == "Failed") { frm.add_custom_button(__('Create Fees'), function() { + frm.doc.fee_creation_status = "In Process"; + frm.save(); frappe.call({ method: "create_fees", doc: frm.doc, @@ -65,6 +75,9 @@ frappe.ui.form.on('Fee Schedule', { }); }, "fa fa-play", "btn-success"); } + if (frm.doc.fee_creation_status==="Successful") { + frm.set_read_only(); + } }, fee_structure: function(frm) { @@ -98,6 +111,6 @@ frappe.ui.form.on("Fee Schedule Student Group", { frappe.model.set_value(cdt, cdn, "total_students", r.message); } } - }) + }); } }) \ No newline at end of file diff --git a/erpnext/schools/doctype/fee_schedule/fee_schedule.json b/erpnext/schools/doctype/fee_schedule/fee_schedule.json index 8dd51f792c..2b496afcd4 100644 --- a/erpnext/schools/doctype/fee_schedule/fee_schedule.json +++ b/erpnext/schools/doctype/fee_schedule/fee_schedule.json @@ -39,7 +39,7 @@ "read_only": 0, "remember_last_selected_value": 0, "report_hide": 0, - "reqd": 0, + "reqd": 1, "search_index": 0, "set_only_once": 0, "unique": 0 @@ -1029,7 +1029,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2017-09-11 16:57:27.427777", + "modified": "2017-09-12 02:03:37.062064", "modified_by": "Administrator", "module": "Schools", "name": "Fee Schedule", diff --git a/erpnext/schools/doctype/fee_schedule/fee_schedule.py b/erpnext/schools/doctype/fee_schedule/fee_schedule.py index 1b2299ce3b..b2ee260440 100644 --- a/erpnext/schools/doctype/fee_schedule/fee_schedule.py +++ b/erpnext/schools/doctype/fee_schedule/fee_schedule.py @@ -4,7 +4,6 @@ from __future__ import unicode_literals import frappe -from frappe import _ from frappe.model.document import Document from frappe.model.mapper import get_mapped_doc from frappe.utils import money_in_words @@ -40,9 +39,8 @@ class FeeSchedule(Document): self.grand_total_in_words = money_in_words(self.grand_total) def create_fees(self): - if not self.fee_creation_status or self.fee_creation_status == "Failed": - self.fee_creation_status = "In Process" - frappe.publish_realtime("fee_schedule_progress", {"progress": 0, "reload": True}, user=frappe.session.user) + if self.fee_creation_status == "In Process": + frappe.publish_realtime("fee_schedule_progress", {"progress": "0", "reload": 1}, user=frappe.session.user) enqueue(generate_fee, queue='default', timeout=6000, event='generate_fee', fee_schedule=self.name) @@ -52,15 +50,13 @@ def generate_fee(fee_schedule): total_records = sum([int(d.total_students) for d in doc.student_groups]) created_records = 0 for d in doc.student_groups: - try: - students = frappe.db.sql(""" select sg.program, sg.batch, sgs.student, sgs.student_name - from `tabStudent Group` sg, `tabStudent Group Student` sgs - where sg.name=%s and sg.name=sgs.parent and sgs.active=1""", d.student_group, as_dict=1) + students = frappe.db.sql(""" select sg.program, sg.batch, sgs.student, sgs.student_name + from `tabStudent Group` sg, `tabStudent Group Student` sgs + where sg.name=%s and sg.name=sgs.parent and sgs.active=1""", d.student_group, as_dict=1) - # students = frappe.get_all("Student Group Student", fields=["student", "student_name"], - # filters={"parent": d.student_group, "parenttype": "Student Group", "active": 1}) - for student in students: - doc = get_mapped_doc("Fee Schedule", fee_schedule, { + for student in students: + try: + fees_doc = get_mapped_doc("Fee Schedule", fee_schedule, { "Fee Schedule": { "doctype": "Fees", "field_map": { @@ -68,19 +64,19 @@ def generate_fee(fee_schedule): } } }) - doc.student = student.student - doc.student_name = student.student_name - doc.program = student.program - doc.student_batch = student.batch - doc.send_payment_request = 1 - doc.save() - doc.submit() + fees_doc.student = student.student + fees_doc.student_name = student.student_name + fees_doc.program = student.program + fees_doc.student_batch = student.batch + fees_doc.send_payment_request = doc.send_email + fees_doc.save() + fees_doc.submit() created_records += 1 - frappe.publish_realtime("fee_schedule_progress", {"progress": created_records}, user=frappe.session.user) + frappe.publish_realtime("fee_schedule_progress", {"progress": str(int(created_records * 100/total_records))}, user=frappe.session.user) - except Exception as e: - error = True - err_msg = frappe.local.message_log and "\n\n".join(frappe.local.message_log) or cstr(e) + except Exception as e: + error = True + err_msg = frappe.local.message_log and "\n\n".join(frappe.local.message_log) or cstr(e) if error: frappe.db.rollback() @@ -91,6 +87,8 @@ def generate_fee(fee_schedule): frappe.db.set_value("Fee Schedule", fee_schedule, "fee_creation_status", "Successful") frappe.db.set_value("Fee Schedule", fee_schedule, "error_log", None) + frappe.publish_realtime("fee_schedule_progress", {"progress": "100", "reload": 1}, user=frappe.session.user) + @frappe.whitelist() def get_fee_structure(source_name,target_doc=None): From 6960a76adc30277d598bf693b7e0f81b6dd918aa Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 19 Sep 2017 17:22:30 +0530 Subject: [PATCH 72/72] Fixes related to schools fees --- .../doctype/fee_schedule/fee_schedule.js | 9 +-- .../doctype/fee_schedule/fee_schedule.json | 20 +++--- .../doctype/fee_schedule/fee_schedule.py | 53 ++++++++------ erpnext/schools/doctype/fees/fees.js | 2 - erpnext/schools/doctype/fees/fees.json | 72 ++++++++++--------- erpnext/schools/doctype/fees/fees.py | 25 +++---- 6 files changed, 96 insertions(+), 85 deletions(-) diff --git a/erpnext/schools/doctype/fee_schedule/fee_schedule.js b/erpnext/schools/doctype/fee_schedule/fee_schedule.js index 952a4f67ed..d834b887d9 100644 --- a/erpnext/schools/doctype/fee_schedule/fee_schedule.js +++ b/erpnext/schools/doctype/fee_schedule/fee_schedule.js @@ -62,10 +62,8 @@ frappe.ui.form.on('Fee Schedule', { if (frm.doc.fee_creation_status=="In Process") { frm.dashboard.add_progress("Fee Creation Status", "0"); } - if (!frm.doc.__islocal && !frm.doc.fee_creation_status || frm.doc.fee_creation_status == "Failed") { + if (frm.doc.docstatus==1 && !frm.doc.fee_creation_status || frm.doc.fee_creation_status == "Failed") { frm.add_custom_button(__('Create Fees'), function() { - frm.doc.fee_creation_status = "In Process"; - frm.save(); frappe.call({ method: "create_fees", doc: frm.doc, @@ -75,9 +73,6 @@ frappe.ui.form.on('Fee Schedule', { }); }, "fa fa-play", "btn-success"); } - if (frm.doc.fee_creation_status==="Successful") { - frm.set_read_only(); - } }, fee_structure: function(frm) { @@ -104,6 +99,8 @@ frappe.ui.form.on("Fee Schedule Student Group", { method: "erpnext.schools.doctype.fee_schedule.fee_schedule.get_total_students", args: { "student_group": row.student_group, + "academic_year": frm.doc.academic_year, + "academic_term": frm.doc.academic_term, "student_category": frm.doc.student_category }, callback: function(r) { diff --git a/erpnext/schools/doctype/fee_schedule/fee_schedule.json b/erpnext/schools/doctype/fee_schedule/fee_schedule.json index 2b496afcd4..d2b5c52227 100644 --- a/erpnext/schools/doctype/fee_schedule/fee_schedule.json +++ b/erpnext/schools/doctype/fee_schedule/fee_schedule.json @@ -1,7 +1,7 @@ { "allow_copy": 0, "allow_guest_to_view": 0, - "allow_import": 0, + "allow_import": 1, "allow_rename": 0, "autoname": "naming_series:", "beta": 1, @@ -151,7 +151,7 @@ "in_global_search": 0, "in_list_view": 0, "in_standard_filter": 0, - "label": "Send Email", + "label": "Send Payment Request Email", "length": 0, "no_copy": 0, "permlevel": 0, @@ -1025,11 +1025,11 @@ "idx": 0, "image_view": 0, "in_create": 0, - "is_submittable": 0, + "is_submittable": 1, "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2017-09-12 02:03:37.062064", + "modified": "2017-09-19 16:24:17.266071", "modified_by": "Administrator", "module": "Schools", "name": "Fee Schedule", @@ -1037,23 +1037,23 @@ "owner": "Administrator", "permissions": [ { - "amend": 0, + "amend": 1, "apply_user_permissions": 0, - "cancel": 0, + "cancel": 1, "create": 1, "delete": 1, "email": 1, - "export": 0, + "export": 1, "if_owner": 0, - "import": 0, + "import": 1, "permlevel": 0, "print": 1, "read": 1, - "report": 0, + "report": 1, "role": "Academics User", "set_user_permissions": 0, "share": 1, - "submit": 0, + "submit": 1, "write": 1 } ], diff --git a/erpnext/schools/doctype/fee_schedule/fee_schedule.py b/erpnext/schools/doctype/fee_schedule/fee_schedule.py index b2ee260440..fc2907aaaf 100644 --- a/erpnext/schools/doctype/fee_schedule/fee_schedule.py +++ b/erpnext/schools/doctype/fee_schedule/fee_schedule.py @@ -3,7 +3,7 @@ # For license information, please see license.txt from __future__ import unicode_literals -import frappe +import frappe, erpnext from frappe.model.document import Document from frappe.model.mapper import get_mapped_doc from frappe.utils import money_in_words @@ -17,13 +17,19 @@ class FeeSchedule(Document): self.set_onload('dashboard_info', info) def get_dashboard_info(self): - total_unpaid = frappe.db.sql("""select sum(outstanding_amount) from tabFees - where fee_schedule=%s""", (self.name)) - total_unpaid_amount = flt(total_unpaid[0][0]) if total_unpaid else 0 - info = {} - info["total_paid"] = self.grand_total - total_unpaid_amount - info["total_unpaid"] = total_unpaid_amount - info["currency"] = frappe.defaults.get_defaults().currency + info = { + "total_paid": 0, + "total_unpaid": 0, + "currency": erpnext.get_company_currency(self.company) + } + + fees_amount = frappe.db.sql("""select sum(grand_total), sum(outstanding_amount) from tabFees + where fee_schedule=%s and docstatus=1""", (self.name)) + + if fees_amount: + info["total_paid"] = flt(fees_amount[0][0]) - flt(fees_amount[0][1]) + info["total_unpaid"] = flt(fees_amount[0][1]) + return info def validate(self): @@ -33,16 +39,18 @@ class FeeSchedule(Document): no_of_students = 0 for d in self.student_groups: # if not d.total_students: - d.total_students = get_total_students(d.student_group, self.student_category) + d.total_students = get_total_students(d.student_group, self.academic_year, + self.academic_term, self.student_category) no_of_students += cint(d.total_students) self.grand_total = no_of_students*self.total_amount self.grand_total_in_words = money_in_words(self.grand_total) def create_fees(self): - if self.fee_creation_status == "In Process": - frappe.publish_realtime("fee_schedule_progress", {"progress": "0", "reload": 1}, user=frappe.session.user) - enqueue(generate_fee, queue='default', timeout=6000, event='generate_fee', - fee_schedule=self.name) + self.db_set("fee_creation_status", "In Process") + frappe.publish_realtime("fee_schedule_progress", + {"progress": "0", "reload": 1}, user=frappe.session.user) + enqueue(generate_fee, queue='default', timeout=6000, event='generate_fee', + fee_schedule=self.name) def generate_fee(fee_schedule): doc = frappe.get_doc("Fee Schedule", fee_schedule) @@ -87,7 +95,8 @@ def generate_fee(fee_schedule): frappe.db.set_value("Fee Schedule", fee_schedule, "fee_creation_status", "Successful") frappe.db.set_value("Fee Schedule", fee_schedule, "error_log", None) - frappe.publish_realtime("fee_schedule_progress", {"progress": "100", "reload": 1}, user=frappe.session.user) + frappe.publish_realtime("fee_schedule_progress", + {"progress": "100", "reload": 1}, user=frappe.session.user) @frappe.whitelist() @@ -99,17 +108,21 @@ def get_fee_structure(source_name,target_doc=None): return fee_request @frappe.whitelist() -def get_total_students(student_group, student_category=None): +def get_total_students(student_group, academic_year, academic_term=None, student_category=None): conditions = "" if student_category: - conditions = " and s.student_category='{}'".format(frappe.db.escape(student_category)) + conditions = " and pe.student_category='{}'".format(frappe.db.escape(student_category)) + if academic_term: + conditions = " and pe.academic_term='{}'".format(frappe.db.escape(academic_term)) + return frappe.db.sql(""" - select count(s.name) - from `tabStudent` s, `tabStudent Group Student` sgs + select count(pe.name) + from `tabStudent Group Student` sgs, `tabProgram Enrollment` pe where - s.name = sgs.student + pe.student = sgs.student + and pe.academic_year = %s and sgs.parent = %s and sgs.active = 1 {conditions} - """.format(conditions=conditions), student_group)[0][0] + """.format(conditions=conditions), (academic_year, student_group))[0][0] diff --git a/erpnext/schools/doctype/fees/fees.js b/erpnext/schools/doctype/fees/fees.js index 45d30d4583..4347308740 100644 --- a/erpnext/schools/doctype/fees/fees.js +++ b/erpnext/schools/doctype/fees/fees.js @@ -4,8 +4,6 @@ frappe.ui.form.on("Fees", { setup: function(frm) { - frm.add_fetch("student", "title", "student_name"); - frm.add_fetch("student", "student_email_id", "student_email"); frm.add_fetch("fee_structure", "receivable_account", "receivable_account"); frm.add_fetch("fee_structure", "income_account", "income_account"); frm.add_fetch("fee_structure", "cost_center", "cost_center"); diff --git a/erpnext/schools/doctype/fees/fees.json b/erpnext/schools/doctype/fees/fees.json index 8286048ce2..7a2167bddd 100644 --- a/erpnext/schools/doctype/fees/fees.json +++ b/erpnext/schools/doctype/fees/fees.json @@ -93,6 +93,7 @@ "label": "Student Name", "length": 0, "no_copy": 0, + "options": "student.student_name", "permlevel": 0, "precision": "", "print_hide": 0, @@ -136,37 +137,6 @@ "set_only_once": 0, "unique": 0 }, - { - "allow_bulk_edit": 0, - "allow_on_submit": 0, - "bold": 0, - "collapsible": 0, - "columns": 0, - "default": "", - "fieldname": "send_payment_request", - "fieldtype": "Check", - "hidden": 0, - "ignore_user_permissions": 0, - "ignore_xss_filter": 0, - "in_filter": 0, - "in_global_search": 0, - "in_list_view": 0, - "in_standard_filter": 0, - "label": "Send Payment Request", - "length": 0, - "no_copy": 1, - "permlevel": 0, - "precision": "", - "print_hide": 1, - "print_hide_if_no_value": 0, - "read_only": 0, - "remember_last_selected_value": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0, - "unique": 0 - }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -198,6 +168,37 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "", + "fieldname": "send_payment_request", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Send Payment Request", + "length": 0, + "no_copy": 1, + "permlevel": 0, + "precision": "", + "print_hide": 1, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_on_submit": 0, @@ -505,13 +506,14 @@ }, { "allow_bulk_edit": 0, - "allow_on_submit": 0, + "allow_on_submit": 1, "bold": 0, "collapsible": 0, "columns": 0, + "depends_on": "", "fieldname": "student_email", "fieldtype": "Data", - "hidden": 1, + "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, @@ -526,7 +528,7 @@ "precision": "", "print_hide": 1, "print_hide_if_no_value": 0, - "read_only": 1, + "read_only": 0, "remember_last_selected_value": 0, "report_hide": 0, "reqd": 0, @@ -1274,7 +1276,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2017-09-11 16:04:35.725204", + "modified": "2017-09-19 16:45:14.313744", "modified_by": "Administrator", "module": "Schools", "name": "Fees", diff --git a/erpnext/schools/doctype/fees/fees.py b/erpnext/schools/doctype/fees/fees.py index 2ce115b466..d45d6e301b 100644 --- a/erpnext/schools/doctype/fees/fees.py +++ b/erpnext/schools/doctype/fees/fees.py @@ -4,14 +4,13 @@ from __future__ import unicode_literals from frappe.model.document import Document -import frappe +import frappe, erpnext from frappe import _ from frappe.utils import money_in_words from erpnext.accounts.doctype.payment_request.payment_request import make_payment_request from frappe.utils.csvutils import getlink from erpnext.controllers.accounts_controller import AccountsController from erpnext.accounts.general_ledger import delete_gl_entries -from erpnext.schools.api import get_student_guardians class Fees(AccountsController): @@ -32,10 +31,11 @@ class Fees(AccountsController): if not self.company: self.company = frappe.defaults.get_defaults().company if not self.currency: - self.currency = frappe.defaults.get_defaults().currency + self.currency = erpnext.get_company_currency(self.company) if not (self.receivable_account and self.income_account and self.cost_center): - accounts_details = frappe.get_all("Company", fields=["default_receivable_account", - "default_income_account", "cost_center"], filters={"name": self.company})[0] + accounts_details = frappe.get_all("Company", + fields=["default_receivable_account", "default_income_account", "cost_center"], + filters={"name": self.company})[0] if not self.receivable_account: self.receivable_account = accounts_details.default_receivable_account if not self.income_account: @@ -46,13 +46,14 @@ class Fees(AccountsController): self.student_email = self.get_student_emails() def get_student_emails(self): - guardians = get_student_guardians(self.student) - email_list = [] - for guardian in guardians: - email = frappe.db.get_value("Guardian", guardian.guardian, "email_address") - if email: - email_list.append(email) - return ", ".join(email_list) + student_emails = frappe.db.sql_list(""" + select g.email_address + from `tabGuardian` g, `tabStudent Guardian` sg + where g.name = sg.guardian and sg.parent = %s and sg.parenttype = 'Student' + """, self.student) + + student_emails.append(frappe.db.get_value("Student", self.student, "student_email_id")) + return ", ".join(list(set(student_emails))) def calculate_total(self):

    ^%c^ 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 P@Vl*bUlXZrAN~IT+8u<7 literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/healthcare/appointment_3.png b/erpnext/docs/assets/img/healthcare/appointment_3.png new file mode 100755 index 0000000000000000000000000000000000000000..004a978862a5ddb324584540382376623738450c GIT binary patch literal 26449 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 literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/healthcare/consultation_1.png b/erpnext/docs/assets/img/healthcare/consultation_1.png new file mode 100755 index 0000000000000000000000000000000000000000..a7bc60da3bf23ff96050c3a50adb93ad7b27ad78 GIT binary patch literal 99844 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 literal 0 HcmV?d00001 diff --git a/erpnext/docs/assets/img/healthcare/consultation_2.png b/erpnext/docs/assets/img/healthcare/consultation_2.png new file mode 100755 index 0000000000000000000000000000000000000000..fd5ceee2397cf6050b173f48254fc57cf972aa40 GIT binary patch literal 24999 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