Dear community,
I am currently trying to develop a pipedrive/erpnext connector using pipedrive’s webhooks and a custom erpnext app.
So far I can get all information from PD without an issue and I’m trying to create a sales order from a pipedrive deal.
I am getting errors when inserting the sales order into erpnext, here is the strack trace :
Traceback (most recent call last):
File “/home/erpnext/frappe_bench/apps/frappe/frappe/app.py”, line 67, in application
response = frappe.api.handle()
File “/home/erpnext/frappe_bench/apps/frappe/frappe/api.py”, line 59, in handle
return frappe.handler.handle()
File “/home/erpnext/frappe_bench/apps/frappe/frappe/handler.py”, line 24, in handle
data = execute_cmd(cmd)
File “/home/erpnext/frappe_bench/apps/frappe/frappe/handler.py”, line 64, in execute_cmd
return frappe.call(method, **frappe.form_dict)
File “/home/erpnext/frappe_bench/apps/frappe/frappe/init.py”, line 1074, in call
return fn(*args, **newargs)
File “/home/erpnext/frappe_bench/apps/pdconnector/pdconnector/pd_hook.py”, line 113, in print_data
so.insert()
File “/home/erpnext/frappe_bench/apps/frappe/frappe/model/document.py”, line 230, in insert
self.run_before_save_methods()
File “/home/erpnext/frappe_bench/apps/frappe/frappe/model/document.py”, line 896, in run_before_save_methods
self.run_method("validate")
File “/home/erpnext/frappe_bench/apps/frappe/frappe/model/document.py”, line 797, in run_method
out = Document.hook(fn)(self, *args, **kwargs)
File “/home/erpnext/frappe_bench/apps/frappe/frappe/model/document.py”, line 1073, in composer
return composed(self, method, *args, **kwargs)
File “/home/erpnext/frappe_bench/apps/frappe/frappe/model/document.py”, line 1056, in runner
add_to_return_value(self, fn(self, *args, **kwargs))
File “/home/erpnext/frappe_bench/apps/frappe/frappe/model/document.py”, line 791, in <lambda>
fn = lambda self, *args, **kwargs: getattr(self, method)(*args, **kwargs)
File “/home/erpnext/frappe_bench/apps/erpnext/erpnext/selling/doctype/sales_order/sales_order.py”, line 36, in validate
super(SalesOrder, self).validate()
File “/home/erpnext/frappe_bench/apps/erpnext/erpnext/controllers/selling_controller.py”, line 40, in validate
super(SellingController, self).validate()
File “/home/erpnext/frappe_bench/apps/erpnext/erpnext/controllers/stock_controller.py”, line 21, in validate
super(StockController, self).validate()
File “/home/erpnext/frappe_bench/apps/erpnext/erpnext/controllers/accounts_controller.py”, line 80, in validate
self.calculate_taxes_and_totals()
File “/home/erpnext/frappe_bench/apps/erpnext/erpnext/controllers/accounts_controller.py”, line 189, in calculate_taxes_and_totals
calculate_taxes_and_totals(self)
File “/home/erpnext/frappe_bench/apps/erpnext/erpnext/controllers/taxes_and_totals.py”, line 17, in init
self.calculate()
File “/home/erpnext/frappe_bench/apps/erpnext/erpnext/controllers/taxes_and_totals.py”, line 24, in calculate
self._calculate()
File “/home/erpnext/frappe_bench/apps/erpnext/erpnext/controllers/taxes_and_totals.py”, line 38, in _calculate
self.calculate_item_values()
File “/home/erpnext/frappe_bench/apps/erpnext/erpnext/controllers/taxes_and_totals.py”, line 96, in calculate_item_values
self.doc.round_floats_in(item)
File “/home/erpnext/frappe_bench/apps/frappe/frappe/model/document.py”, line 1128, in round_floats_in
doc.set(fieldname, flt(doc.get(fieldname), self.precision(fieldname, doc.parentfield)))
File “/home/erpnext/frappe_bench/apps/frappe/frappe/model/base_document.py”, line 732, in precision
if df.fieldtype in ("Currency", "Float", "Percent"):
AttributeError: ‘NoneType’ object has no attribute ‘fieldtype’
Due to the lack of information of this stack trace I have added some try/catch blocks and prints to frappe’s base_document.py#precision function to find which field is causing issues.
It seems there were missing fields in my sales order request, however these fields are not mandatory fields so I don’t understand why it does not work.
The missing fields were :
item.total_weight, item.opening_stock, item.stock_qty, item.discount_amount
However, after adding those fields to my item dict, I am now blocked by this method :
validate_sales_mntc_quotation(self)
found here in sales_order.py
the error is now : AttributeError: ‘Item’ object has no attribute “‘prevdoc_docname’”
It seems that erpnext tries to find an associated quotation in order to create a sales order. Can’t I create a sales order without a quotation?
Any help would be greatly appreciated, regarding the errors or the quotation.
I cant also provide some code if needed.
My version is :
ERPNext: v12.19.0 (version-12)
Frappe Framework: v12.16.3 (version-12)
Thank you!