w/ explicit check for singles
This shouldn't have any performance impact as last function call only
happens if we THINK it's single doctype. use set_single_value to avoid
that extra function call.
* feat: rearranging standing fields
* fix: fixed creation of property setter
* refactor: renamed setup_sortable
* fix: loading field_order property
* refactor: removed redundant db call
* fix: field_order not found
* test: Added tests for field order in customize form
* refactor: better naming
* refactor: simplified logic
* feat: Updating field order on custom field creation
* feat: Added support for custom fiels
* refactor: moving to meta
* refactor: changed property type to json
* fix: new standard field insert order.
* fix: don't modify insert_after of system generated custom fields.
# This is because system generated fields are to be treated as standard fields. If the user restores the form to default, this value will be used to reset the original position.
# The new position of form fields are stored in the field_order Property Setter.
* fix: treat system generated fields as standard fields when sorting.
* revert: check for is_system_generated
* Revert "fix: new standard field insert order."
This reverts commit 6cdbe42f28d5944165dd100a9bb9172463951fda.
* fix: prioritize field_order over insert_after.
# Use insert_after as fallback in event the field doesn't exist in field_order
* fix(test): delete existing custom field
* fix: order of standard fields without field_order property.
* Revert "Revert "fix: new standard field insert order.""
This reverts commit c830f1ba2fe1e602b09c11a897869d9992097c1e.
* test: field order of newly migrated standard fields.
* fix(test): clear test_standard_field from previous test run.
* fix: sort with insert_after for system generated fields.
* fix(test): reset standard field creation before re-run and after successful test.
* fix: insert_after position should be + 1
* chore: remove debug statement
* test: system generated customized fields
* chore: remove print
* chore: lint all
* fix: show quick link to Table MultiSelect DocTypes
* refactor: change backend implementation of `CustomizeForm` and `Meta`
* test: simplify tests
* fix: rename `idx` to `index` for clarity
* perf: define `existing_fields` conditionally
---------
Co-authored-by: Aradhya <aradhyatripathi51@gmail.com>
Co-authored-by: Aradhya Tripathi <67282231+Aradhya-Tripathi@users.noreply.github.com>
Co-authored-by: Sagar Vora <sagar@resilient.tech>
Passing lambda function from inside document object would keep reference
to document alive. This means increasing memeory usage in bulk
processing.
Refer https://github.com/frappe/frappe/pull/17061 for example
This also extends it to db.set_value
* fix(db_query): Don't track link_tables separately
Treat all joined tables the same, expand the fieldnames whether Table or
Link type with their respective table names
* fix(db_query): Add link join conditions for all relevant fields
* Revert "fix(db_query): Add link join conditions for all relevant fields"
This reverts commit 79622ab4cea5aa73a24f4ba7afde8e83510a79fb.
* Revert "fix(db_query): Don't track link_tables separately"
This reverts commit b8364f781e52e7ffaa7faa8878ef409b023f2288.
* fix: Check link field tables permissions in permlevel checks
* test: Fix, add for test_permlevel_fields
Previous assertion was wrong :')
added extra to check if access is fine
Problem:
document.save() throws "Object is not scriptable exception" when fetching values from virtual doc.
Root cause:
```python
# ....
if frappe.get_meta(doctype).get("is_virtual"):
values = frappe.get_doc(doctype, docname) <--- Document is not scriptable.
.as_dict()
# ....
def set_fetch_from_value(self, doctype, df, values):
fetch_from_fieldname = df.fetch_from.split(".")[-1]
value = values[fetch_from_fieldname] <--- Tries to access value by key and throws "Object is not scriptable" exception
```
Solution:
```python
if frappe.get_meta(doctype).get("is_virtual"):
values = frappe.get_doc(doctype, docname).as_dict() <--- Makes the document scriptable.
```