tree 73038eb057256e4c0f207c924488c0d69f1cab63
parent 6fbcc3d19630f8ace7e585fa754124755cc63110
author MOHAMMED NIYAS <76736615+niyazrazak@users.noreply.github.com> 1684385638 +0530
committer GitHub <noreply@github.com> 1684385638 +0530
gpgsig -----BEGIN PGP SIGNATURE-----
 
 wsBcBAABCAAQBQJkZa9mCRBK7hj4Ov3rIwAAc9QIAHrGNRMOgtTRxGR/BRi40czm
 x2X2o9ugGLhi6BIFh/6ly27aIQdfL3lDLpja2fnuMhHjfCQdlQHdSgc1oBgVKhLQ
 mvMOwfzZNxB2+fsVyZTPQy5gzbHdr0FspgCS3WqiFSw3jQJ5jUP+s1PkNB6SjgHc
 lm50/Vcr4R7wj18ruPnt4hB427AwqQUKybT/KINSS8oGUsAJRxX2io2Q1H4FhW+0
 CpP5WChkuMBtSaoZz1qZWAUjXT7gTeVJySpAqhJFBYefNwOJtpvSFkqUitL0rlMF
 2rbVwpez8ARKqWa+ZsrsNyt1zmEiglMlqBQYAtIRNrSGqHzEqYL2M2G2Q0wHkKQ=
 =fvGj
 -----END PGP SIGNATURE-----
 

fix: create sales order

Getting error while clicking create sales order button from quotation

Taceback (most recent call last):
  File "apps/frappe/frappe/app.py", line 66, in application
    response = frappe.api.handle()
  File "apps/frappe/frappe/api.py", line 54, in handle
    return frappe.handler.handle()
  File "apps/frappe/frappe/handler.py", line 45, in handle
    data = execute_cmd(cmd)
  File "apps/frappe/frappe/handler.py", line 83, in execute_cmd
    return frappe.call(method, **frappe.form_dict)
  File "apps/frappe/frappe/__init__.py", line 1607, in call
    return fn(*args, **newargs)
  File "apps/frappe/frappe/model/mapper.py", line 36, in make_mapped_doc
    return method(source_name)
  File "apps/erpnext/erpnext/selling/doctype/quotation/quotation.py", line 263, in make_sales_order
    return _make_sales_order(source_name, target_doc)
  File "apps/erpnext/erpnext/selling/doctype/quotation/quotation.py", line 333, in _make_sales_order
    doclist = get_mapped_doc(
  File "apps/frappe/frappe/model/mapper.py", line 144, in get_mapped_doc
    postprocess(source_doc, target_doc)
  File "apps/erpnext/erpnext/selling/doctype/quotation/quotation.py", line 291, in set_missing_values
    for d in customer.get("sales_team"):
TypeError: 'NoneType' object is not iterable