Please find below. Thanks.
Traceback
/home/frappe/frappe-bench/apps/frappe/frappe/app.py: 69
67
68 elif request.path.startswith(“/api/”):
69 response = frappe.api.handle()
70
71 elif request.path.startswith(“/backups”):
/home/frappe/frappe-bench/apps/frappe/frappe/api.py: 54
52 if call == “method”:
53 frappe.local.form_dict.cmd = doctype
54 return frappe.handler.handle()
55
56 elif call == “resource”:
/home/frappe/frappe-bench/apps/frappe/frappe/handler.py: 45
43
44 if cmd != “login”:
45 data = execute_cmd(cmd)
46
47 # data can be an empty string or list which are valid responses
/home/frappe/frappe-bench/apps/frappe/frappe/handler.py: 83
81 is_valid_http_method(method)
82
83 return frappe.call(method, **frappe.form_dict)
84
85
/home/frappe/frappe-bench/apps/frappe/frappe/init.py: 1599
1597 newargs = get_newargs(fn, kwargs)
1598
1599 return fn(*args, **newargs)
1600
1601
/home/frappe/frappe-bench/apps/frappe/frappe/desk/form/save.py: 22
20 doc.submit()
21 else:
22 doc.save()
23
24 # update recent documents
/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py: 301
299 def save(self, *args, **kwargs):
300 “”“Wrapper for _save”“”
301 return self._save(*args, **kwargs)
302
303 def _save(self, ignore_permissions=None, ignore_version=None) → “Document”:
/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py: 323
321
322 if self.get(“__islocal”) or not self.get(“name”):
323 return self.insert()
324
325 self.check_permission(“write”, “save”)
/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py: 255
253
254 self.flags.in_insert = True
255 self.run_before_save_methods()
256 self._validate()
257 self.set_docstatus()
/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py: 1056
1054
1055 if self._action == “save”:
1056 self.run_method(“validate”)
1057 self.run_method(“before_save”)
1058 elif self._action == “submit”:
/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py: 928
926
927 fn.name = str(method)
928 out = Document.hook(fn)(self, *args, **kwargs)
929
930 self.run_notifications(method)
/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py: 1268
1266
1267 composed = compose(f, *hooks)
1268 return composed(self, method, *args, **kwargs)
1269
1270 return composer
/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py: 1250
1248 def compose(fn, *hooks):
1249 def runner(self, method, *args, **kwargs):
1250 add_to_return_value(self, fn(self, *args, **kwargs))
1251 for f in hooks:
1252 add_to_return_value(self, f(self, method, *args, **kwargs))
/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py: 925
923 # If method found in dict, expect it to be callable
924 if method in self.dict or callable(method_object):
925 return method_object(*args, **kwargs)
926
927 fn.name = str(method)
/home/frappe/frappe-bench/apps/erpnext/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py: 63
61 def validate(self):
62 super(SubcontractingReceipt, self).validate()
63 self.set_missing_values()
64 self.validate_posting_time()
65 self.validate_rejected_warehouse()
/home/frappe/frappe-bench/apps/erpnext/erpnext/subcontracting/doctype/subcontracting_receipt/subcontracting_receipt.py: 106
104 @frappe.whitelist()
105 def set_missing_values(self):
106 self.set_missing_values_in_additional_costs()
107 self.set_missing_values_in_supplied_items()
108 self.set_missing_values_in_items()
/home/frappe/frappe-bench/apps/erpnext/erpnext/controllers/subcontracting_controller.py: 724
722
723 def set_missing_values_in_additional_costs(self):
724 self.total_additional_costs = sum(flt(item.amount) for item in self.get(“additional_costs”))
725
726 if self.total_additional_costs:
A