2021-09-14 07:19:08 +00:00
|
|
|
import unittest
|
|
|
|
|
|
|
|
import frappe
|
|
|
|
|
|
|
|
from erpnext.buying.doctype.purchase_order.test_purchase_order import create_purchase_order
|
2023-06-28 05:52:40 +00:00
|
|
|
from erpnext.buying.doctype.supplier.test_supplier import create_supplier
|
2021-09-14 07:19:08 +00:00
|
|
|
|
|
|
|
|
|
|
|
class TestWebsite(unittest.TestCase):
|
|
|
|
def test_permission_for_custom_doctype(self):
|
2022-03-28 13:22:46 +00:00
|
|
|
create_user("Supplier 1", "supplier1@gmail.com")
|
|
|
|
create_user("Supplier 2", "supplier2@gmail.com")
|
2023-06-28 05:52:40 +00:00
|
|
|
|
|
|
|
supplier1 = create_supplier(supplier_name="Supplier1")
|
|
|
|
supplier2 = create_supplier(supplier_name="Supplier2")
|
|
|
|
supplier1.append("portal_users", {"user": "supplier1@gmail.com"})
|
|
|
|
supplier1.save()
|
|
|
|
supplier2.append("portal_users", {"user": "supplier2@gmail.com"})
|
|
|
|
supplier2.save()
|
|
|
|
|
2022-03-28 13:22:46 +00:00
|
|
|
po1 = create_purchase_order(supplier="Supplier1")
|
|
|
|
po2 = create_purchase_order(supplier="Supplier2")
|
2021-09-14 07:19:08 +00:00
|
|
|
|
|
|
|
create_custom_doctype()
|
|
|
|
create_webform()
|
2022-03-28 13:22:46 +00:00
|
|
|
create_order_assignment(supplier="Supplier1", po=po1.name)
|
|
|
|
create_order_assignment(supplier="Supplier2", po=po2.name)
|
2021-09-14 07:19:08 +00:00
|
|
|
|
|
|
|
frappe.set_user("Administrator")
|
|
|
|
# checking if data consist of all order assignment of Supplier1 and Supplier2
|
2022-03-28 13:22:46 +00:00
|
|
|
self.assertTrue("Supplier1" and "Supplier2" in [data.supplier for data in get_data()])
|
2021-09-14 07:19:08 +00:00
|
|
|
|
|
|
|
frappe.set_user("supplier1@gmail.com")
|
|
|
|
# checking if data only consist of order assignment of Supplier1
|
2022-03-28 13:22:46 +00:00
|
|
|
self.assertTrue("Supplier1" in [data.supplier for data in get_data()])
|
|
|
|
self.assertFalse([data.supplier for data in get_data() if data.supplier != "Supplier1"])
|
2021-09-14 07:19:08 +00:00
|
|
|
|
|
|
|
frappe.set_user("supplier2@gmail.com")
|
|
|
|
# checking if data only consist of order assignment of Supplier2
|
2022-03-28 13:22:46 +00:00
|
|
|
self.assertTrue("Supplier2" in [data.supplier for data in get_data()])
|
|
|
|
self.assertFalse([data.supplier for data in get_data() if data.supplier != "Supplier2"])
|
2021-09-14 07:19:08 +00:00
|
|
|
|
|
|
|
frappe.set_user("Administrator")
|
|
|
|
|
2022-03-28 13:22:46 +00:00
|
|
|
|
2021-09-14 07:19:08 +00:00
|
|
|
def get_data():
|
2022-03-28 13:22:46 +00:00
|
|
|
webform_list_contexts = frappe.get_hooks("webform_list_context")
|
2021-09-14 07:19:08 +00:00
|
|
|
if webform_list_contexts:
|
2022-03-28 13:22:46 +00:00
|
|
|
context = frappe._dict(frappe.get_attr(webform_list_contexts[0])("Buying") or {})
|
|
|
|
kwargs = dict(doctype="Order Assignment", order_by="modified desc")
|
2021-09-14 07:19:08 +00:00
|
|
|
return context.get_list(**kwargs)
|
|
|
|
|
2022-03-28 13:22:46 +00:00
|
|
|
|
2021-09-14 07:19:08 +00:00
|
|
|
def create_user(name, email):
|
2022-03-28 13:22:46 +00:00
|
|
|
frappe.get_doc(
|
|
|
|
{
|
|
|
|
"doctype": "User",
|
|
|
|
"send_welcome_email": 0,
|
|
|
|
"user_type": "Website User",
|
|
|
|
"first_name": name,
|
|
|
|
"email": email,
|
|
|
|
"roles": [{"doctype": "Has Role", "role": "Supplier"}],
|
|
|
|
}
|
|
|
|
).insert(ignore_if_duplicate=True)
|
|
|
|
|
2021-09-14 07:19:08 +00:00
|
|
|
|
|
|
|
def create_custom_doctype():
|
2022-03-28 13:22:46 +00:00
|
|
|
frappe.get_doc(
|
|
|
|
{
|
|
|
|
"doctype": "DocType",
|
|
|
|
"name": "Order Assignment",
|
|
|
|
"module": "Buying",
|
|
|
|
"custom": 1,
|
|
|
|
"autoname": "field:po",
|
|
|
|
"fields": [
|
|
|
|
{"label": "PO", "fieldname": "po", "fieldtype": "Link", "options": "Purchase Order"},
|
|
|
|
{
|
|
|
|
"label": "Supplier",
|
|
|
|
"fieldname": "supplier",
|
|
|
|
"fieldtype": "Data",
|
|
|
|
"fetch_from": "po.supplier",
|
|
|
|
},
|
|
|
|
],
|
|
|
|
"permissions": [
|
|
|
|
{
|
|
|
|
"create": 1,
|
|
|
|
"delete": 1,
|
|
|
|
"email": 1,
|
|
|
|
"export": 1,
|
|
|
|
"print": 1,
|
|
|
|
"read": 1,
|
|
|
|
"report": 1,
|
|
|
|
"role": "System Manager",
|
|
|
|
"share": 1,
|
|
|
|
"write": 1,
|
|
|
|
},
|
|
|
|
{"read": 1, "role": "Supplier"},
|
|
|
|
],
|
|
|
|
}
|
|
|
|
).insert(ignore_if_duplicate=True)
|
|
|
|
|
2021-09-14 07:19:08 +00:00
|
|
|
|
|
|
|
def create_webform():
|
2022-03-28 13:22:46 +00:00
|
|
|
frappe.get_doc(
|
|
|
|
{
|
|
|
|
"doctype": "Web Form",
|
|
|
|
"module": "Buying",
|
|
|
|
"title": "SO Schedule",
|
|
|
|
"route": "so-schedule",
|
|
|
|
"doc_type": "Order Assignment",
|
|
|
|
"web_form_fields": [
|
|
|
|
{
|
|
|
|
"doctype": "Web Form Field",
|
|
|
|
"fieldname": "po",
|
|
|
|
"fieldtype": "Link",
|
|
|
|
"options": "Purchase Order",
|
|
|
|
"label": "PO",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"doctype": "Web Form Field",
|
|
|
|
"fieldname": "supplier",
|
|
|
|
"fieldtype": "Data",
|
|
|
|
"label": "Supplier",
|
|
|
|
},
|
|
|
|
],
|
|
|
|
}
|
|
|
|
).insert(ignore_if_duplicate=True)
|
|
|
|
|
2021-09-14 07:19:08 +00:00
|
|
|
|
|
|
|
def create_order_assignment(supplier, po):
|
2022-03-28 13:22:46 +00:00
|
|
|
frappe.get_doc(
|
|
|
|
{
|
|
|
|
"doctype": "Order Assignment",
|
|
|
|
"po": po,
|
|
|
|
"supplier": supplier,
|
|
|
|
}
|
|
|
|
).insert(ignore_if_duplicate=True)
|