Merge branch 'develop' into make-ipme-entries-editable
This commit is contained in:
commit
8549358708
@ -23,8 +23,10 @@ class TestPatientAppointment(unittest.TestCase):
|
|||||||
self.assertEquals(appointment.status, 'Open')
|
self.assertEquals(appointment.status, 'Open')
|
||||||
appointment = create_appointment(patient, practitioner, add_days(nowdate(), 2))
|
appointment = create_appointment(patient, practitioner, add_days(nowdate(), 2))
|
||||||
self.assertEquals(appointment.status, 'Scheduled')
|
self.assertEquals(appointment.status, 'Scheduled')
|
||||||
create_encounter(appointment)
|
encounter = create_encounter(appointment)
|
||||||
self.assertEquals(frappe.db.get_value('Patient Appointment', appointment.name, 'status'), 'Closed')
|
self.assertEquals(frappe.db.get_value('Patient Appointment', appointment.name, 'status'), 'Closed')
|
||||||
|
encounter.cancel()
|
||||||
|
self.assertEquals(frappe.db.get_value('Patient Appointment', appointment.name, 'status'), 'Open')
|
||||||
|
|
||||||
def test_start_encounter(self):
|
def test_start_encounter(self):
|
||||||
patient, medical_department, practitioner = create_healthcare_docs()
|
patient, medical_department, practitioner = create_healthcare_docs()
|
||||||
|
@ -5,10 +5,10 @@ from __future__ import unicode_literals
|
|||||||
|
|
||||||
import frappe
|
import frappe
|
||||||
import unittest
|
import unittest
|
||||||
from frappe.utils import getdate, flt
|
from frappe.utils import getdate, flt, nowdate
|
||||||
from erpnext.healthcare.doctype.therapy_type.test_therapy_type import create_therapy_type
|
from erpnext.healthcare.doctype.therapy_type.test_therapy_type import create_therapy_type
|
||||||
from erpnext.healthcare.doctype.therapy_plan.therapy_plan import make_therapy_session, make_sales_invoice
|
from erpnext.healthcare.doctype.therapy_plan.therapy_plan import make_therapy_session, make_sales_invoice
|
||||||
from erpnext.healthcare.doctype.patient_appointment.test_patient_appointment import create_healthcare_docs, create_patient
|
from erpnext.healthcare.doctype.patient_appointment.test_patient_appointment import create_healthcare_docs, create_patient, create_appointment
|
||||||
|
|
||||||
class TestTherapyPlan(unittest.TestCase):
|
class TestTherapyPlan(unittest.TestCase):
|
||||||
def test_creation_on_encounter_submission(self):
|
def test_creation_on_encounter_submission(self):
|
||||||
@ -28,6 +28,15 @@ class TestTherapyPlan(unittest.TestCase):
|
|||||||
frappe.get_doc(session).submit()
|
frappe.get_doc(session).submit()
|
||||||
self.assertEquals(frappe.db.get_value('Therapy Plan', plan.name, 'status'), 'Completed')
|
self.assertEquals(frappe.db.get_value('Therapy Plan', plan.name, 'status'), 'Completed')
|
||||||
|
|
||||||
|
patient, medical_department, practitioner = create_healthcare_docs()
|
||||||
|
appointment = create_appointment(patient, practitioner, nowdate())
|
||||||
|
session = make_therapy_session(plan.name, plan.patient, 'Basic Rehab', '_Test Company', appointment.name)
|
||||||
|
session = frappe.get_doc(session)
|
||||||
|
session.submit()
|
||||||
|
self.assertEquals(frappe.db.get_value('Patient Appointment', appointment.name, 'status'), 'Closed')
|
||||||
|
session.cancel()
|
||||||
|
self.assertEquals(frappe.db.get_value('Patient Appointment', appointment.name, 'status'), 'Open')
|
||||||
|
|
||||||
def test_therapy_plan_from_template(self):
|
def test_therapy_plan_from_template(self):
|
||||||
patient = create_patient()
|
patient = create_patient()
|
||||||
template = create_therapy_plan_template()
|
template = create_therapy_plan_template()
|
||||||
|
@ -47,7 +47,7 @@ class TherapyPlan(Document):
|
|||||||
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def make_therapy_session(therapy_plan, patient, therapy_type, company):
|
def make_therapy_session(therapy_plan, patient, therapy_type, company, appointment=None):
|
||||||
therapy_type = frappe.get_doc('Therapy Type', therapy_type)
|
therapy_type = frappe.get_doc('Therapy Type', therapy_type)
|
||||||
|
|
||||||
therapy_session = frappe.new_doc('Therapy Session')
|
therapy_session = frappe.new_doc('Therapy Session')
|
||||||
@ -58,6 +58,7 @@ def make_therapy_session(therapy_plan, patient, therapy_type, company):
|
|||||||
therapy_session.duration = therapy_type.default_duration
|
therapy_session.duration = therapy_type.default_duration
|
||||||
therapy_session.rate = therapy_type.rate
|
therapy_session.rate = therapy_type.rate
|
||||||
therapy_session.exercises = therapy_type.exercises
|
therapy_session.exercises = therapy_type.exercises
|
||||||
|
therapy_session.appointment = appointment
|
||||||
|
|
||||||
if frappe.flags.in_test:
|
if frappe.flags.in_test:
|
||||||
therapy_session.start_date = today()
|
therapy_session.start_date = today()
|
||||||
|
@ -19,6 +19,15 @@ frappe.ui.form.on('Therapy Session', {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
frm.set_query('appointment', function() {
|
||||||
|
|
||||||
|
return {
|
||||||
|
filters: {
|
||||||
|
'status': ['in', ['Open', 'Scheduled']]
|
||||||
|
}
|
||||||
|
};
|
||||||
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
refresh: function(frm) {
|
refresh: function(frm) {
|
||||||
|
@ -43,7 +43,14 @@ class TherapySession(Document):
|
|||||||
self.update_sessions_count_in_therapy_plan()
|
self.update_sessions_count_in_therapy_plan()
|
||||||
insert_session_medical_record(self)
|
insert_session_medical_record(self)
|
||||||
|
|
||||||
|
def on_update(self):
|
||||||
|
if self.appointment:
|
||||||
|
frappe.db.set_value('Patient Appointment', self.appointment, 'status', 'Closed')
|
||||||
|
|
||||||
def on_cancel(self):
|
def on_cancel(self):
|
||||||
|
if self.appointment:
|
||||||
|
frappe.db.set_value('Patient Appointment', self.appointment, 'status', 'Open')
|
||||||
|
|
||||||
self.update_sessions_count_in_therapy_plan(on_cancel=True)
|
self.update_sessions_count_in_therapy_plan(on_cancel=True)
|
||||||
|
|
||||||
def update_sessions_count_in_therapy_plan(self, on_cancel=False):
|
def update_sessions_count_in_therapy_plan(self, on_cancel=False):
|
||||||
|
@ -830,56 +830,49 @@ def make_purchase_order_for_default_supplier(source_name, selected_items=None, t
|
|||||||
frappe.throw(_("Please set a Supplier against the Items to be considered in the Purchase Order."))
|
frappe.throw(_("Please set a Supplier against the Items to be considered in the Purchase Order."))
|
||||||
|
|
||||||
for supplier in suppliers:
|
for supplier in suppliers:
|
||||||
po = frappe.get_list("Purchase Order", filters={"sales_order":source_name, "supplier":supplier, "docstatus": ("<", "2")})
|
doc = get_mapped_doc("Sales Order", source_name, {
|
||||||
if len(po) == 0:
|
"Sales Order": {
|
||||||
doc = get_mapped_doc("Sales Order", source_name, {
|
"doctype": "Purchase Order",
|
||||||
"Sales Order": {
|
"field_no_map": [
|
||||||
"doctype": "Purchase Order",
|
"address_display",
|
||||||
"field_no_map": [
|
"contact_display",
|
||||||
"address_display",
|
"contact_mobile",
|
||||||
"contact_display",
|
"contact_email",
|
||||||
"contact_mobile",
|
"contact_person",
|
||||||
"contact_email",
|
"taxes_and_charges",
|
||||||
"contact_person",
|
"shipping_address",
|
||||||
"taxes_and_charges",
|
"terms"
|
||||||
"shipping_address",
|
],
|
||||||
"terms"
|
"validation": {
|
||||||
],
|
"docstatus": ["=", 1]
|
||||||
"validation": {
|
|
||||||
"docstatus": ["=", 1]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Sales Order Item": {
|
|
||||||
"doctype": "Purchase Order Item",
|
|
||||||
"field_map": [
|
|
||||||
["name", "sales_order_item"],
|
|
||||||
["parent", "sales_order"],
|
|
||||||
["stock_uom", "stock_uom"],
|
|
||||||
["uom", "uom"],
|
|
||||||
["conversion_factor", "conversion_factor"],
|
|
||||||
["delivery_date", "schedule_date"]
|
|
||||||
],
|
|
||||||
"field_no_map": [
|
|
||||||
"rate",
|
|
||||||
"price_list_rate",
|
|
||||||
"item_tax_template",
|
|
||||||
"discount_percentage",
|
|
||||||
"discount_amount",
|
|
||||||
"pricing_rules"
|
|
||||||
],
|
|
||||||
"postprocess": update_item,
|
|
||||||
"condition": lambda doc: doc.ordered_qty < doc.stock_qty and doc.supplier == supplier and doc.item_code in items_to_map
|
|
||||||
}
|
}
|
||||||
}, target_doc, set_missing_values)
|
},
|
||||||
|
"Sales Order Item": {
|
||||||
|
"doctype": "Purchase Order Item",
|
||||||
|
"field_map": [
|
||||||
|
["name", "sales_order_item"],
|
||||||
|
["parent", "sales_order"],
|
||||||
|
["stock_uom", "stock_uom"],
|
||||||
|
["uom", "uom"],
|
||||||
|
["conversion_factor", "conversion_factor"],
|
||||||
|
["delivery_date", "schedule_date"]
|
||||||
|
],
|
||||||
|
"field_no_map": [
|
||||||
|
"rate",
|
||||||
|
"price_list_rate",
|
||||||
|
"item_tax_template",
|
||||||
|
"discount_percentage",
|
||||||
|
"discount_amount",
|
||||||
|
"pricing_rules"
|
||||||
|
],
|
||||||
|
"postprocess": update_item,
|
||||||
|
"condition": lambda doc: doc.ordered_qty < doc.stock_qty and doc.supplier == supplier and doc.item_code in items_to_map
|
||||||
|
}
|
||||||
|
}, target_doc, set_missing_values)
|
||||||
|
|
||||||
doc.insert()
|
doc.insert()
|
||||||
else:
|
|
||||||
suppliers =[]
|
|
||||||
if suppliers:
|
|
||||||
frappe.db.commit()
|
frappe.db.commit()
|
||||||
return doc
|
return doc
|
||||||
else:
|
|
||||||
frappe.msgprint(_("Purchase Order already created for all Sales Order items"))
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def make_purchase_order(source_name, selected_items=None, target_doc=None):
|
def make_purchase_order(source_name, selected_items=None, target_doc=None):
|
||||||
@ -1094,4 +1087,4 @@ def update_produced_qty_in_so_item(sales_order, sales_order_item):
|
|||||||
|
|
||||||
if not total_produced_qty and frappe.flags.in_patch: return
|
if not total_produced_qty and frappe.flags.in_patch: return
|
||||||
|
|
||||||
frappe.db.set_value('Sales Order Item', sales_order_item, 'produced_qty', total_produced_qty)
|
frappe.db.set_value('Sales Order Item', sales_order_item, 'produced_qty', total_produced_qty)
|
||||||
|
@ -772,6 +772,59 @@ class TestSalesOrder(unittest.TestCase):
|
|||||||
so.load_from_db()
|
so.load_from_db()
|
||||||
so.cancel()
|
so.cancel()
|
||||||
|
|
||||||
|
def test_drop_shipping_partial_order(self):
|
||||||
|
from erpnext.selling.doctype.sales_order.sales_order import make_purchase_order_for_default_supplier, \
|
||||||
|
update_status as so_update_status
|
||||||
|
|
||||||
|
# make items
|
||||||
|
po_item1 = make_item("_Test Item for Drop Shipping 1", {"is_stock_item": 1, "delivered_by_supplier": 1})
|
||||||
|
po_item2 = make_item("_Test Item for Drop Shipping 2", {"is_stock_item": 1, "delivered_by_supplier": 1})
|
||||||
|
|
||||||
|
so_items = [
|
||||||
|
{
|
||||||
|
"item_code": po_item1.item_code,
|
||||||
|
"warehouse": "",
|
||||||
|
"qty": 2,
|
||||||
|
"rate": 400,
|
||||||
|
"delivered_by_supplier": 1,
|
||||||
|
"supplier": '_Test Supplier'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"item_code": po_item2.item_code,
|
||||||
|
"warehouse": "",
|
||||||
|
"qty": 2,
|
||||||
|
"rate": 400,
|
||||||
|
"delivered_by_supplier": 1,
|
||||||
|
"supplier": '_Test Supplier'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
# create so and po
|
||||||
|
so = make_sales_order(item_list=so_items, do_not_submit=True)
|
||||||
|
so.submit()
|
||||||
|
|
||||||
|
# create po for only one item
|
||||||
|
po1 = make_purchase_order_for_default_supplier(so.name, selected_items=[so_items[0]])
|
||||||
|
po1.submit()
|
||||||
|
|
||||||
|
self.assertEqual(so.customer, po1.customer)
|
||||||
|
self.assertEqual(po1.items[0].sales_order, so.name)
|
||||||
|
self.assertEqual(po1.items[0].item_code, po_item1.item_code)
|
||||||
|
#test po item length
|
||||||
|
self.assertEqual(len(po1.items), 1)
|
||||||
|
|
||||||
|
# create po for remaining item
|
||||||
|
po2 = make_purchase_order_for_default_supplier(so.name, selected_items=[so_items[1]])
|
||||||
|
po2.submit()
|
||||||
|
|
||||||
|
# teardown
|
||||||
|
so_update_status("Draft", so.name)
|
||||||
|
|
||||||
|
po1.cancel()
|
||||||
|
po2.cancel()
|
||||||
|
so.load_from_db()
|
||||||
|
so.cancel()
|
||||||
|
|
||||||
def test_reserved_qty_for_closing_so(self):
|
def test_reserved_qty_for_closing_so(self):
|
||||||
bin = frappe.get_all("Bin", filters={"item_code": "_Test Item", "warehouse": "_Test Warehouse - _TC"},
|
bin = frappe.get_all("Bin", filters={"item_code": "_Test Item", "warehouse": "_Test Warehouse - _TC"},
|
||||||
fields=["reserved_qty"])
|
fields=["reserved_qty"])
|
||||||
|
Loading…
x
Reference in New Issue
Block a user