Beispiel #1
0
	def toggle_hide_tax_id(self):
		self.hide_tax_id = cint(self.hide_tax_id)

		# Make property setters to hide tax_id fields
		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 _make_property_setter(property_name, value):
		property_setter = frappe.db.exists('Property Setter',
			{'doc_type': doctype, 'field_name': 'naming_series', 'property': property_name})
		if property_setter:
			frappe.db.set_value('Property Setter', property_setter, 'value', value)
		else:
			make_property_setter(doctype, "naming_series", "options", value, "Text")
def execute():
	frappe.reload_doc('projects', 'doctype', 'timesheet')
	frappe.reload_doc('projects', 'doctype', 'timesheet_detail')
	frappe.reload_doc('accounts', 'doctype', 'sales_invoice_timesheet')
	
	make_property_setter('Timesheet', "naming_series", "options", 'TS-', "Text")
	make_property_setter('Timesheet', "naming_series", "default", 'TS-', "Text")
Beispiel #4
0
    def preserve_naming_series_options_in_property_setter(self):
        """Preserve naming_series as property setter if it does not exist"""
        naming_series = self.get("fields", {"fieldname": "naming_series"})

        if not naming_series:
            return

            # check if atleast 1 record exists
        if not (
            frappe.db.table_exists(self.name) and frappe.db.sql("select name from `tab{}` limit 1".format(self.name))
        ):
            return

        existing_property_setter = frappe.db.get_value(
            "Property Setter", {"doc_type": self.name, "property": "options", "field_name": "naming_series"}
        )

        if not existing_property_setter:
            make_property_setter(
                self.name,
                "naming_series",
                "options",
                naming_series[0].options,
                "Text",
                validate_fields_for_doctype=False,
            )
            if naming_series[0].default:
                make_property_setter(
                    self.name,
                    "naming_series",
                    "default",
                    naming_series[0].default,
                    "Text",
                    validate_fields_for_doctype=False,
                )
Beispiel #5
0
	def toggle_in_words(self):
		self.disable_in_words = cint(self.disable_in_words)

		# Make property setters to hide in words fields
		for doctype in ("Quotation", "Sales Order", "Sales Invoice", "Delivery Note",
				"Supplier Quotation", "Purchase Order", "Purchase Invoice", "Purchase Receipt"):
			make_property_setter(doctype, "in_words", "hidden", self.disable_in_words, "Check")
			make_property_setter(doctype, "in_words", "print_hide", self.disable_in_words, "Check")
def set_sales_order_field():
	for data in frappe.db.sql("""select doc_type, field_name, property, value, property_type 
		from `tabProperty Setter` where doc_type = 'Purchase Order Item' 
		and field_name in('material_request', 'material_request_item')""", as_dict=True):
		if data.field_name == 'material_request':
			make_property_setter(data.doc_type, 'sales_order', data.property, data.value, data.property_type)
		else:
			make_property_setter(data.doc_type, 'sales_order_item', data.property, data.value, data.property_type)
Beispiel #7
0
	def test_update_fields(self):
		self.insert_test_events()
		results = global_search.search('Every Month')
		self.assertEqual(len(results), 0)
		doctype = "Event"
		from frappe.custom.doctype.property_setter.property_setter import make_property_setter
		make_property_setter(doctype, "repeat_on", "in_global_search", 1, "Int")
		global_search.rebuild_for_doctype(doctype)
		results = global_search.search('Every Month')
		self.assertEqual(len(results), 3)
Beispiel #8
0
    def toggle_in_words(self):
        self.disable_in_words = cint(self.disable_in_words)

        # Make property setters to hide in words fields
        for doctype in ("Quotation", "Sales Order", "Sales Invoice",
                        "Delivery Note", "Supplier Quotation",
                        "Purchase Order", "Purchase Invoice",
                        "Purchase Receipt"):
            make_property_setter(doctype, "in_words", "hidden",
                                 self.disable_in_words, "Check")
            make_property_setter(doctype, "in_words", "print_hide",
                                 self.disable_in_words, "Check")
	def test_reportview_get(self):
		user = frappe.get_doc("User", "*****@*****.**")
		add_child_table_to_blog_post()

		user_roles = frappe.get_roles()
		user.remove_roles(*user_roles)
		user.add_roles("Blogger")

		make_property_setter("Blog Post", "published", "permlevel", 1, "Int")
		reset("Blog Post")
		add("Blog Post", "Website Manager", 1)
		update("Blog Post", "Website Manager", 1, "write", 1)

		frappe.set_user(user.name)

		frappe.local.request = frappe._dict()
		frappe.local.request.method = "POST"

		frappe.local.form_dict = frappe._dict({
			"doctype": "Blog Post",
			"fields": ["published", "title", "`tabTest Child`.`test_field`"],
		})

		# even if * is passed, fields which are not accessible should be filtered out
		response = execute_cmd("frappe.desk.reportview.get")
		self.assertListEqual(response["keys"], ["title"])
		frappe.local.form_dict = frappe._dict({
			"doctype": "Blog Post",
			"fields": ["*"],
		})

		response = execute_cmd("frappe.desk.reportview.get")
		self.assertNotIn("published", response["keys"])

		frappe.set_user("Administrator")
		user.add_roles("Website Manager")
		frappe.set_user(user.name)

		frappe.set_user("Administrator")

		# Admin should be able to see access all fields
		frappe.local.form_dict = frappe._dict({
			"doctype": "Blog Post",
			"fields": ["published", "title", "`tabTest Child`.`test_field`"],
		})

		response = execute_cmd("frappe.desk.reportview.get")
		self.assertListEqual(response["keys"], ['published', 'title', 'test_field'])

		# reset user roles
		user.remove_roles("Blogger", "Website Manager")
		user.add_roles(*user_roles)
Beispiel #10
0
 def _make_property_setter(property_name, value):
     property_setter = frappe.db.exists(
         'Property Setter', {
             'doc_type': doctype,
             'field_name': 'naming_series',
             'property': property_name
         })
     if property_setter:
         frappe.db.set_value('Property Setter', property_setter, 'value',
                             value)
     else:
         make_property_setter(doctype, "naming_series", "options", value,
                              "Text")
Beispiel #11
0
	def toggle_rounded_total(self):
		self.disable_rounded_total = cint(self.disable_rounded_total)

		# Make property setters to hide rounded total fields
		for doctype in (
			"Quotation",
			"Sales Order",
			"Sales Invoice",
			"Delivery Note",
			"Supplier Quotation",
			"Purchase Order",
			"Purchase Invoice",
			"Purchase Receipt",
		):
			make_property_setter(
				doctype,
				"base_rounded_total",
				"hidden",
				self.disable_rounded_total,
				"Check",
				validate_fields_for_doctype=False,
			)
			make_property_setter(
				doctype, "base_rounded_total", "print_hide", 1, "Check", validate_fields_for_doctype=False
			)

			make_property_setter(
				doctype,
				"rounded_total",
				"hidden",
				self.disable_rounded_total,
				"Check",
				validate_fields_for_doctype=False,
			)
			make_property_setter(
				doctype,
				"rounded_total",
				"print_hide",
				self.disable_rounded_total,
				"Check",
				validate_fields_for_doctype=False,
			)

			make_property_setter(
				doctype,
				"disable_rounded_total",
				"default",
				cint(self.disable_rounded_total),
				"Text",
				validate_fields_for_doctype=False,
			)
Beispiel #12
0
 def toggle_warehouse_field_for_inter_warehouse_transfer(self):
     make_property_setter("Sales Invoice Item",
                          "target_warehouse",
                          "hidden",
                          1 - cint(self.allow_from_dn),
                          "Check",
                          validate_fields_for_doctype=False)
     make_property_setter("Delivery Note Item",
                          "target_warehouse",
                          "hidden",
                          1 - cint(self.allow_from_dn),
                          "Check",
                          validate_fields_for_doctype=False)
     make_property_setter("Purchase Invoice Item",
                          "from_warehouse",
                          "hidden",
                          1 - cint(self.allow_from_pr),
                          "Check",
                          validate_fields_for_doctype=False)
     make_property_setter("Purchase Receipt Item",
                          "from_warehouse",
                          "hidden",
                          1 - cint(self.allow_from_pr),
                          "Check",
                          validate_fields_for_doctype=False)
Beispiel #13
0
 def toggle_rounded_total(self):
     self.disable_rounded_total = cint(self.disable_rounded_total)
     make_property_setter("Salary Slip",
                          "rounded_total",
                          "hidden",
                          self.disable_rounded_total,
                          "Check",
                          validate_fields_for_doctype=False)
     make_property_setter("Salary Slip",
                          "rounded_total",
                          "print_hide",
                          self.disable_rounded_total,
                          "Check",
                          validate_fields_for_doctype=False)
def set_series(doctype, value):
    doc = frappe.db.exists("Property Setter", {
        "doc_type": doctype,
        "property": "autoname"
    })
    if doc:
        frappe.db.set_value("Property Setter", doc, "value", value)
    else:
        make_property_setter(doctype,
                             "",
                             "autoname",
                             value,
                             "",
                             for_doctype=True)
Beispiel #15
0
def set_series(doctype, value):
    doc = frappe.db.exists('Property Setter', {
        'doc_type': doctype,
        'property': 'autoname'
    })
    if doc:
        frappe.db.set_value('Property Setter', doc, 'value', value)
    else:
        make_property_setter(doctype,
                             '',
                             'autoname',
                             value,
                             '',
                             for_doctype=True)
Beispiel #16
0
	def test_update_child_with_precision(self):
		from frappe.model.meta import get_field_precision
		from frappe.custom.doctype.property_setter.property_setter import make_property_setter

		precision = get_field_precision(frappe.get_meta("Sales Order Item").get_field("rate"))

		make_property_setter("Sales Order Item", "rate", "precision", 7, "Currency")
		so = make_sales_order(item_code= "_Test Item", qty=4, rate=200.34664)

		trans_item = json.dumps([{'item_code' : '_Test Item', 'rate' : 200.34669, 'qty' : 4, 'docname': so.items[0].name}])
		update_child_qty_rate('Sales Order', trans_item, so.name)

		so.reload()
		self.assertEqual(so.items[0].rate, 200.34669)
		make_property_setter("Sales Order Item", "rate", "precision", precision, "Currency")
 def _make_property_setter(property_name, value):
     property_setter = frappe.db.exists(
         "Property Setter",
         {
             "doc_type": doctype,
             "field_name": "naming_series",
             "property": property_name
         },
     )
     if property_setter:
         frappe.db.set_value("Property Setter", property_setter, "value",
                             value)
     else:
         make_property_setter(doctype, "naming_series", "options", value,
                              "Text")
Beispiel #18
0
 def enable_payment_schedule_in_print(self):
     show_in_print = cint(self.show_payment_schedule_in_print)
     for doctype in ("Sales Order", "Sales Invoice", "Purchase Order",
                     "Purchase Invoice"):
         make_property_setter(doctype,
                              "due_date",
                              "print_hide",
                              show_in_print,
                              "Check",
                              validate_fields_for_doctype=False)
         make_property_setter(doctype,
                              "payment_schedule",
                              "print_hide",
                              0 if show_in_print else 1,
                              "Check",
                              validate_fields_for_doctype=False)
Beispiel #19
0
    def test_attachment_limit(self):
        doctype, docname = make_test_doc()
        from frappe.custom.doctype.property_setter.property_setter import make_property_setter
        limit_property = make_property_setter('ToDo',
                                              None,
                                              'max_attachments',
                                              1,
                                              'int',
                                              for_doctype=True)
        file1 = frappe.get_doc({
            "doctype": "File",
            "file_name": 'test-attachment',
            "attached_to_doctype": doctype,
            "attached_to_name": docname,
            "content": 'test'
        })

        file1.insert()

        file2 = frappe.get_doc({
            "doctype": "File",
            "file_name": 'test-attachment',
            "attached_to_doctype": doctype,
            "attached_to_name": docname,
            "content": 'test2'
        })

        self.assertRaises(frappe.exceptions.AttachmentLimitReached,
                          file2.insert)
        limit_property.delete()
        frappe.clear_cache(doctype='ToDo')
Beispiel #20
0
    def validate_provisional_account_for_non_stock_items(self):
        if not self.get("__islocal"):
            if (cint(self.enable_provisional_accounting_for_non_stock_items)
                    == 1 and not self.default_provisional_account):
                frappe.throw(
                    _("Set default {0} account for non stock items").format(
                        frappe.bold("Provisional Account")))

            make_property_setter(
                "Purchase Receipt",
                "provisional_expense_account",
                "hidden",
                not self.enable_provisional_accounting_for_non_stock_items,
                "Check",
                validate_fields_for_doctype=False,
            )
Beispiel #21
0
	def test_fieldlevel_permissions_in_load(self):
		blog = frappe.get_doc({
			"doctype": "Blog Post",
			"blog_category": "-test-blog-category-1",
			"blog_intro": "Test Blog Intro",
			"blogger": "_Test Blogger 1",
			"content": "Test Blog Content",
			"title": "_Test Blog Post {}".format(frappe.utils.now()),
			"published": 0
		})

		blog.insert()

		user = frappe.get_doc('User', '*****@*****.**')

		user_roles = frappe.get_roles()
		user.remove_roles(*user_roles)
		user.add_roles('Blogger')

		blog_post_property_setter = make_property_setter('Blog Post', 'published', 'permlevel', 1, 'Int')
		reset('Blog Post')
		add('Blog Post', 'Website Manager', 1)
		update('Blog Post', 'Website Manager', 1, 'write', 1)

		frappe.set_user(user.name)

		blog_doc = get_blog(blog.name)

		self.assertEqual(blog_doc.name, blog.name)
		# since published field has higher permlevel
		self.assertEqual(blog_doc.published, None)

		# this will be ignored because user does not
		# have write access on `published` field (or on permlevel 1 fields)
		blog_doc.published = 1
		blog_doc.save()
		# since published field has higher permlevel
		self.assertEqual(blog_doc.published, 0)

		frappe.set_user('Administrator')
		user.add_roles('Website Manager')
		frappe.set_user(user.name)

		doc = frappe.get_doc('Blog Post', blog.name)
		doc.published = 1
		doc.save()

		blog_doc = get_blog(blog.name)
		# now user should be allowed to read field with higher permlevel
		# (after adding Website Manager role)
		self.assertEqual(blog_doc.published, 1)

		frappe.set_user('Administrator')

		# reset user roles
		user.remove_roles('Blogger', 'Website Manager')
		user.add_roles(*user_roles)

		blog_doc.delete()
		frappe.delete_doc(blog_post_property_setter.doctype, blog_post_property_setter.name)
 def validate(self):
     from frappe.custom.doctype.property_setter.property_setter import make_property_setter
     if self.get('instructor_created_by') == 'Naming Series':
         make_property_setter('Instructor',
                              "naming_series",
                              "hidden",
                              0,
                              "Check",
                              validate_fields_for_doctype=False)
     else:
         make_property_setter('Instructor',
                              "naming_series",
                              "hidden",
                              1,
                              "Check",
                              validate_fields_for_doctype=False)
Beispiel #23
0
    def toggle_hide_tax_id(self):
        self.hide_tax_id = cint(self.hide_tax_id)

        # Make property setters to hide tax_id fields
        for doctype in ("Sales Order", "Sales Invoice", "Delivery Note"):
            make_property_setter(doctype,
                                 "tax_id",
                                 "hidden",
                                 self.hide_tax_id,
                                 "Check",
                                 validate_fields_for_doctype=False)
            make_property_setter(doctype,
                                 "tax_id",
                                 "print_hide",
                                 self.hide_tax_id,
                                 "Check",
                                 validate_fields_for_doctype=False)
Beispiel #24
0
	def toggle_rounded_total(self):
		self.disable_rounded_total = cint(self.disable_rounded_total)

		# Make property setters to hide rounded total fields
		for doctype in ("Quotation", "Sales Order", "Sales Invoice", "Delivery Note"):
			make_property_setter(doctype, "base_rounded_total", "hidden", self.disable_rounded_total, "Check")
			make_property_setter(doctype, "base_rounded_total", "print_hide", 1, "Check")

			make_property_setter(doctype, "rounded_total", "hidden", self.disable_rounded_total, "Check")
			make_property_setter(doctype, "rounded_total", "print_hide", self.disable_rounded_total, "Check")
Beispiel #25
0
	def setUp(self):
		global_search.setup_global_search_table()
		self.assertTrue('__global_search' in frappe.db.get_tables())
		doctype = "Event"
		global_search.reset()
		from frappe.custom.doctype.property_setter.property_setter import make_property_setter
		make_property_setter(doctype, "subject", "in_global_search", 1, "Int")
		make_property_setter(doctype, "event_type", "in_global_search", 1, "Int")
		make_property_setter(doctype, "roles", "in_global_search", 1, "Int")
		make_property_setter(doctype, "repeat_on", "in_global_search", 0, "Int")
Beispiel #26
0
	def setUp(self):
		global_search.setup_global_search_table()
		self.assertTrue('__global_search' in frappe.db.get_tables())
		doctype = "Event"
		global_search.reset()
		from frappe.custom.doctype.property_setter.property_setter import make_property_setter
		make_property_setter(doctype, "subject", "in_global_search", 1, "Int")
		make_property_setter(doctype, "event_type", "in_global_search", 1, "Int")
		make_property_setter(doctype, "roles", "in_global_search", 1, "Int")
		make_property_setter(doctype, "repeat_on", "in_global_search", 0, "Int")
Beispiel #27
0
	def preserve_naming_series_options_in_property_setter(self):
		"""Preserve naming_series as property setter if it does not exist"""
		naming_series = self.get("fields", {"fieldname": "naming_series"})

		if not naming_series:
			return

		# check if atleast 1 record exists
		if not (frappe.db.table_exists(self.name) and frappe.db.sql("select name from `tab{}` limit 1".format(self.name))):
			return

		existing_property_setter = frappe.db.get_value("Property Setter", {"doc_type": self.name,
			"property": "options", "field_name": "naming_series"})

		if not existing_property_setter:
			make_property_setter(self.name, "naming_series", "options", naming_series[0].options, "Text", validate_fields_for_doctype=False)
			if naming_series[0].default:
				make_property_setter(self.name, "naming_series", "default", naming_series[0].default, "Text", validate_fields_for_doctype=False)
Beispiel #28
0
	def toggle_rounded_total(self):
		self.disable_rounded_total = cint(self.disable_rounded_total)

		# Make property setters to hide rounded total fields
		for doctype in ("Quotation", "Sales Order", "Sales Invoice", "Delivery Note",
			"Supplier Quotation", "Purchase Order"):
			make_property_setter(doctype, "base_rounded_total", "hidden", self.disable_rounded_total, "Check")
			make_property_setter(doctype, "base_rounded_total", "print_hide", 1, "Check")

			make_property_setter(doctype, "rounded_total", "hidden", self.disable_rounded_total, "Check")
			make_property_setter(doctype, "rounded_total", "print_hide", self.disable_rounded_total, "Check")
Beispiel #29
0
 def update(doctype, series):
     field = frappe.model.meta.get_meta(doctype).get_field("naming_series")
     if series not in field.options:
         options = series + "\n" + (field.options or "")
         make_property_setter(
             doctype,
             "naming_series",
             "options",
             options,
             "Text",
         )
     if series != field.default:
         make_property_setter(
             doctype,
             "naming_series",
             "default",
             series,
             "Text",
         )
Beispiel #30
0
    def test_fieldlevel_permissions_in_load_for_child_table(self):
        contact = frappe.new_doc("Contact")
        contact.first_name = "_Test Contact 1"
        contact.append("phone_nos", {"phone": "123456"})
        contact.insert()

        user = frappe.get_doc("User", "*****@*****.**")

        user_roles = frappe.get_roles()
        user.remove_roles(*user_roles)
        user.add_roles("Accounts User")

        make_property_setter("Contact Phone", "phone", "permlevel", 1, "Int")
        reset("Contact Phone")
        add("Contact", "Sales User", 1)
        update("Contact", "Sales User", 1, "write", 1)

        frappe.set_user(user.name)

        contact = frappe.get_doc("Contact", "_Test Contact 1")

        contact.phone_nos[0].phone = "654321"
        contact.save()

        self.assertEqual(contact.phone_nos[0].phone, "123456")

        frappe.set_user("Administrator")
        user.add_roles("Sales User")
        frappe.set_user(user.name)

        contact.phone_nos[0].phone = "654321"
        contact.save()

        contact = frappe.get_doc("Contact", "_Test Contact 1")
        self.assertEqual(contact.phone_nos[0].phone, "654321")

        frappe.set_user("Administrator")

        # reset user roles
        user.remove_roles("Accounts User", "Sales User")
        user.add_roles(*user_roles)

        contact.delete()
	def test_fieldlevel_permissions_in_load_for_child_table(self):
		contact = frappe.new_doc('Contact')
		contact.first_name = '_Test Contact 1'
		contact.append('phone_nos', {'phone': '123456'})
		contact.insert()

		user = frappe.get_doc('User', '*****@*****.**')

		user_roles = frappe.get_roles()
		user.remove_roles(*user_roles)
		user.add_roles('Accounts User')

		make_property_setter('Contact Phone', 'phone', 'permlevel', 1, 'Int')
		reset('Contact Phone')
		add('Contact', 'Sales User', 1)
		update('Contact', 'Sales User', 1, 'write', 1)

		frappe.set_user(user.name)

		contact = frappe.get_doc('Contact', '_Test Contact 1')

		contact.phone_nos[0].phone = '654321'
		contact.save()

		self.assertEqual(contact.phone_nos[0].phone, '123456')

		frappe.set_user('Administrator')
		user.add_roles('Sales User')
		frappe.set_user(user.name)

		contact.phone_nos[0].phone = '654321'
		contact.save()

		contact = frappe.get_doc('Contact', '_Test Contact 1')
		self.assertEqual(contact.phone_nos[0].phone, '654321')

		frappe.set_user('Administrator')

		# reset user roles
		user.remove_roles('Accounts User', 'Sales User')
		user.add_roles(*user_roles)

		contact.delete()
    def tearDown(self) -> None:
        make_property_setter(
            doctype="GL Entry",
            for_doctype=True,
            property="autoname",
            value=self.gle_autoname,
            property_type="Data",
            fieldname=None,
        )
        make_property_setter(
            doctype="Stock Ledger Entry",
            for_doctype=True,
            property="autoname",
            value=self.sle_autoname,
            property_type="Data",
            fieldname=None,
        )

        # since deferred naming autocommits, commit all changes to avoid flake
        frappe.db.commit()  # nosemgrep
    def on_update(self):
        hide_batch_price = not cint(self.use_batch_price)
        make_property_setter("Batch", "pb_price_sec", "hidden",
                             hide_batch_price, "Check")
        make_property_setter("Batch", "pb_price_sec", "print_hide",
                             hide_batch_price, "Check")

        hide_barcode_uom = not cint(self.use_barcode_uom)
        make_property_setter("Item Barcode", "pb_uom", "hidden",
                             hide_barcode_uom, "Check")

        hide_sales_employee = not cint(self.show_sales_employee)
        make_property_setter("Sales Invoice", "pb_sales_employee", "hidden",
                             hide_sales_employee, "Check")
        make_property_setter(
            "Sales Invoice",
            "pb_sales_employee",
            "reqd",
            not hide_sales_employee,
            "Check",
        )
Beispiel #34
0
	def test_db_update(self):
		doctype = "User"
		frappe.reload_doctype("User", force=True)
		frappe.model.meta.trim_tables("User")
		make_property_setter(doctype, "bio", "fieldtype", "Text", "Data")
		make_property_setter(doctype, "middle_name", "fieldtype", "Data", "Text")
		make_property_setter(doctype, "enabled", "default", "1", "Int")

		frappe.db.updatedb(doctype)

		field_defs = get_field_defs(doctype)
		table_columns = frappe.db.get_table_columns_description("tab{}".format(doctype))

		self.assertEqual(len(field_defs), len(table_columns))

		for field_def in field_defs:
			fieldname = field_def.get("fieldname")
			table_column = find(table_columns, lambda d: d.get("name") == fieldname)

			fieldtype = get_fieldtype_from_def(field_def)

			fallback_default = (
				"0" if field_def.get("fieldtype") in frappe.model.numeric_fieldtypes else "NULL"
			)
			default = field_def.default if field_def.default is not None else fallback_default

			self.assertEqual(fieldtype, table_column.type)
			self.assertIn(cstr(table_column.default) or "NULL", [cstr(default), "'{}'".format(default)])
Beispiel #35
0
	def test_db_update(self):
		doctype = 'User'
		frappe.reload_doctype('User', force=True)
		frappe.model.meta.trim_tables('User')
		make_property_setter(doctype, 'bio', 'fieldtype', 'Text', 'Data')
		make_property_setter(doctype, 'middle_name', 'fieldtype', 'Data', 'Text')
		make_property_setter(doctype, 'enabled', 'default', '1', 'Int')

		frappe.db.updatedb(doctype)

		field_defs = get_field_defs(doctype)
		table_columns = frappe.db.get_table_columns_description('tab{}'.format(doctype))

		self.assertEqual(len(field_defs), len(table_columns))

		for field_def in field_defs:
			fieldname = field_def.get('fieldname')
			table_column = find(table_columns, lambda d: d.get('name') == fieldname)

			fieldtype = get_fieldtype_from_def(field_def)

			fallback_default = '0' if field_def.get('fieldtype') in frappe.model.numeric_fieldtypes else 'NULL'
			default = field_def.default if field_def.default is not None else fallback_default

			self.assertEqual(fieldtype, table_column.type)
			self.assertIn(cstr(table_column.default) or 'NULL', [cstr(default), "'{}'".format(default)])
Beispiel #36
0
def set_property_setter(doctype, local_doc, original_doc):
	''' compare doctype_properties and docfield_properties and create property_setter '''

	# doctype_properties reset
	for dp in doctype_properties:
		# make property_setter to mimic changes made in local json
		if dp in local_doc and dp not in original_doc:
			make_property_setter(doctype, '', dp, local_doc[dp], doctype_properties[dp], for_doctype=True)

	local_fields = get_fields_dict(local_doc)
	original_fields = get_fields_dict(original_doc)

	# iterate through field and properties of each of those field
	for docfield in original_fields:
		for prop in original_fields[docfield]:
			# skip fields that are not in local_fields
			if docfield not in local_fields: continue

			if prop in docfield_properties and prop in local_fields[docfield]\
				and original_fields[docfield][prop] != local_fields[docfield][prop]:
				# make property_setter equivalent of local changes
				make_property_setter(doctype, docfield, prop, local_fields[docfield][prop],\
					docfield_properties[prop])
Beispiel #37
0
def set_property_setter(doctype, local_doc, original_doc):
	''' compare doctype_properties and docfield_properties and create property_setter '''

	# doctype_properties reset
	for dp in doctype_properties:
		# make property_setter to mimic changes made in local json
		if dp in local_doc and dp not in original_doc:
			make_property_setter(doctype, '', dp, local_doc[dp], doctype_properties[dp], for_doctype=True)

	local_fields = get_fields_dict(local_doc)
	original_fields = get_fields_dict(original_doc)

	# iterate through field and properties of each of those field
	for docfield in original_fields:
		for prop in original_fields[docfield]:
			# skip fields that are not in local_fields
			if docfield not in local_fields: continue

			if prop in docfield_properties and prop in local_fields[docfield]\
				and original_fields[docfield][prop] != local_fields[docfield][prop]:
				# make property_setter equivalent of local changes
				make_property_setter(doctype, docfield, prop, local_fields[docfield][prop],\
					docfield_properties[prop])
    def on_update(self):
        hide_batch_price = not cint(self.use_batch_price)
        make_property_setter("Batch", "pb_price_sec", "hidden",
                             hide_batch_price, "Check")
        make_property_setter("Batch", "pb_price_sec", "print_hide",
                             hide_batch_price, "Check")

        hide_barcode_uom = not cint(self.use_barcode_uom)
        make_property_setter("Item Barcode", "pb_uom", "hidden",
                             hide_barcode_uom, "Check")
Beispiel #39
0
	def test_opening_sales_invoice_creation(self):
		property_setter = make_property_setter("Sales Invoice", "update_stock", "default", 1, "Check")
		invoices = self.make_invoices(company="_Test Opening Invoice Company")

		self.assertEqual(len(invoices), 2)
		expected_value = {
			"keys": ["customer", "outstanding_amount", "status"],
			0: ["_Test Customer", 300, "Overdue"],
			1: ["_Test Customer 1", 250, "Overdue"],
		}
		self.check_expected_values(invoices, expected_value)

		si = frappe.get_doc("Sales Invoice", invoices[0])

		# Check if update stock is not enabled
		self.assertEqual(si.update_stock, 0)

		property_setter.delete()
Beispiel #40
0
def set_series(doctype, options, default):
	make_property_setter(doctype, "naming_series", "options", options, "Text")
	make_property_setter(doctype, "naming_series", "default", default, "Text")
Beispiel #41
0
	def enable_payment_schedule_in_print(self):
		show_in_print = cint(self.show_payment_schedule_in_print)
		for doctype in ("Sales Order", "Sales Invoice", "Purchase Order", "Purchase Invoice"):
			make_property_setter(doctype, "due_date", "print_hide", show_in_print, "Check")
			make_property_setter(doctype, "payment_schedule", "print_hide",  0 if show_in_print else 1, "Check")
Beispiel #42
0
	def enable_fields_for_cost_center_settings(self):
		show_field = 0 if cint(self.allow_cost_center_in_entry_of_bs_account) else 1
		for doctype in ("Sales Invoice", "Purchase Invoice", "Payment Entry"):
			make_property_setter(doctype, "cost_center", "hidden", show_field, "Check")
def set_series(doctype, options, default):
	make_property_setter(doctype, "naming_series", "options", options, "Text")
	make_property_setter(doctype, "naming_series", "default", default, "Text")
Beispiel #44
0
def set_by_naming_series(doctype, fieldname, naming_series, hide_name_field=True):
	from frappe.custom.doctype.property_setter.property_setter import make_property_setter
	if naming_series:
		make_property_setter(doctype, "naming_series", "hidden", 0, "Check")
		make_property_setter(doctype, "naming_series", "reqd", 1, "Check")

		# set values for mandatory
		try:
			frappe.db.sql("""update `tab{doctype}` set naming_series={s} where
				ifnull(naming_series, '')=''""".format(doctype=doctype, s="%s"),
				get_default_naming_series(doctype))
		except NamingSeriesNotSetError:
			pass

		if hide_name_field:
			make_property_setter(doctype, fieldname, "reqd", 0, "Check")
			make_property_setter(doctype, fieldname, "hidden", 1, "Check")
	else:
		make_property_setter(doctype, "naming_series", "reqd", 0, "Check")
		make_property_setter(doctype, "naming_series", "hidden", 1, "Check")

		if hide_name_field:
			make_property_setter(doctype, fieldname, "hidden", 0, "Check")
			make_property_setter(doctype, fieldname, "reqd", 1, "Check")

			# set values for mandatory
			frappe.db.sql("""update `tab{doctype}` set `{fieldname}`=`name` where
				ifnull({fieldname}, '')=''""".format(doctype=doctype, fieldname=fieldname))
def set_series(doctype, value):
	doc = frappe.db.exists('Property Setter', {'doc_type': doctype, 'property': 'autoname'})
	if doc:
		frappe.db.set_value('Property Setter', doc, 'value', value)
	else:
		make_property_setter(doctype, '', 'autoname', value, '', for_doctype = True)
	def toggle_simplified_time_log(self):
		self.simplified_time_log = cint(self.simplified_time_log)
		set_default('fs_simplified_time_log', self.simplified_time_log)

		# Make Time log property setters to hide 
		
		if self.simplified_time_log:		
			make_property_setter("Time Log", "date_worked", "hidden", not self.simplified_time_log, "Check")
			make_property_setter("Time Log", "date_worked", "reqd", self.simplified_time_log, "Check")
		else:
			make_property_setter("Time Log", "date_worked", "reqd", self.simplified_time_log, "Check")
			make_property_setter("Time Log", "date_worked", "hidden", not self.simplified_time_log, "Check")			
		
		make_property_setter("Time Log", "to_time", "hidden", self.simplified_time_log, "Check")
		make_property_setter("Time Log", "from_time", "hidden", self.simplified_time_log, "Check")
		make_property_setter("Time Log", "date_worked", "in_list_view", self.simplified_time_log, "Check")
def update_values(dt, tax_table):
	frappe.reload_doctype(dt)
	frappe.reload_doctype(dt + " Item")
	frappe.reload_doctype(tax_table)

	net_total_precision = get_field_precision(frappe.get_meta(dt).get_field("net_total"))
	for field in ("total", "base_total", "base_net_total"):
		make_property_setter(dt, field, "precision", net_total_precision, "Select")

	rate_field_precision = get_field_precision(frappe.get_meta(dt + " Item").get_field("rate"))
	for field in ("net_rate", "base_net_rate", "net_amount", "base_net_amount", "base_rate", "base_amount"):
		make_property_setter(dt + " Item", field, "precision", rate_field_precision, "Select")

	tax_amount_precision = get_field_precision(frappe.get_meta(tax_table).get_field("tax_amount"))
	for field in ("base_tax_amount", "total", "base_total", "tax_amount_after_discount_amount",
		"base_tax_amount_after_discount_amount"):
			make_property_setter(tax_table, field, "precision", tax_amount_precision, "Select")

	# update net_total, discount_on
	frappe.db.sql("""
		UPDATE
			`tab{0}`
		SET
			total = round(net_total, {1}),
			base_total = round(net_total*conversion_rate, {1}),
			net_total = round(base_net_total / conversion_rate, {1}),
			apply_discount_on = "Grand Total"
		WHERE
			docstatus < 2
	""".format(dt, net_total_precision))

	# update net_amount
	frappe.db.sql("""
		UPDATE
			`tab{0}` par, `tab{1}` item
		SET
			item.base_net_amount = round(item.base_amount, {2}),
			item.base_net_rate = round(item.base_rate, {2}),
			item.net_amount = round(item.base_amount / par.conversion_rate, {2}),
			item.net_rate = round(item.base_rate / par.conversion_rate, {2}),
			item.base_amount = round(item.amount * par.conversion_rate, {2}),
			item.base_rate = round(item.rate * par.conversion_rate, {2})
		WHERE
			par.name = item.parent
			and par.docstatus < 2
	""".format(dt, dt + " Item", rate_field_precision))

	# update tax in party currency
	frappe.db.sql("""
		UPDATE
			`tab{0}` par, `tab{1}` tax
		SET
			tax.base_tax_amount = round(tax.tax_amount, {2}),
			tax.tax_amount = round(tax.tax_amount / par.conversion_rate, {2}),
			tax.base_total = round(tax.total, {2}),
			tax.total = round(tax.total / conversion_rate, {2}),
			tax.base_tax_amount_after_discount_amount = round(tax.tax_amount_after_discount_amount, {2}),
			tax.tax_amount_after_discount_amount = round(tax.tax_amount_after_discount_amount / conversion_rate, {2})
		WHERE
			par.name = tax.parent
			and par.docstatus < 2
	""".format(dt, tax_table, tax_amount_precision))
Beispiel #48
0
	def validate(self):
		from frappe.custom.doctype.property_setter.property_setter import make_property_setter
		if self.get('instructor_created_by')=='Naming Series':
			make_property_setter('Instructor', "naming_series", "hidden", 0, "Check")
		else:
			make_property_setter('Instructor', "naming_series", "hidden", 1, "Check")