tree 313ca5b804ef13a257858775a235e0866f753074
parent 6ec4618914e608be958248cd6ec9b1d89487536d
author Chinmay D. Pai <chinmaydpai@gmail.com> 1583923807 +0530
committer Chinmay D. Pai <chinmaydpai@gmail.com> 1583923807 +0530
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCAAdFiEEfz7uqu5mk8yHggQqdVB74lb0DO0FAl5owsYACgkQdVB74lb0
 DO1BkQ//Xb1wbr1aCE0Yqbmv0uktMNsLWaPrm+IJ2bm6isnKokYiNazHTtVNdRHc
 4znUouFg0LJvBHpE1sNYFYlrqkfeXGtNb1KvJRz/z5F32++IdarIPQ8VXRZ2kNAy
 26eiVlvc4PPS0MQyq+0x6zKz3IQFdOk6rDvgXqbKDWYeyMCqkRtVYyrCKpJvPk0V
 L1Ztf1pNjAZxTkELKjwhbIzw9vGKLBmf0PvijkzsO87e+vGnEnKz71tZ5Wx5VNK5
 o9f/D6WzzJylwGlDGMIyF3qIrFeM7zn21ZX9rvuM+/8zSirMSIwy9H71rpr8d8s6
 i4a+QpDUyTsqYPUyIVx29azFlWCDJq8Jlfi4apfpHEF1TpHy2XB+Yq5IrrH3KtVN
 1/tbs2Zrk1Be8l76wDZ0+h8Y3Kt840PmL+hsNWOluhDuau+c5xA7m0g02hKDejgE
 mpmLCmywlWhaXK07iyIMK2wl9U5spDa14sRbhR4+DrQs9AvPWT95PxukhFqanT60
 g+xQesyzYKAfctszldblMNtFpLRk0dg42D/Vavho6Wo1tribFSXHuOaMkO++Q7Ix
 Rcz2fuSo4uUI4MdZoIKDT+4Di8JGHbL+XWmFEq+lYW/UdUs1UxWaqDuLUtkS19Bs
 dGQQNRVYoLgzcq4SP1ROvFGI5KmoxkZGRktMCE5Na1qaWEgaEms=
 =N/DP
 -----END PGP SIGNATURE-----

fix: remove make_purchase_invoice from demo script

currently demo fails with the following error:

frappe@bf54a9834cfe:/workspace/development/frappe-bench$ bench --site test1.localhost execute erpnext.demo.demo.make
Traceback (most recent call last):
  File "/usr/lib/python3.7/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/lib/python3.7/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/workspace/development/frappe-bench/apps/frappe/frappe/utils/bench_helper.py", line 97, in <module>
    main()
  File "/workspace/development/frappe-bench/apps/frappe/frappe/utils/bench_helper.py", line 18, in main
    click.Group(commands=commands)(prog_name='bench')
  File "/workspace/development/frappe-bench/env/lib/python3.7/site-packages/click/core.py", line 764, in __call__
    return self.main(*args, **kwargs)
  File "/workspace/development/frappe-bench/env/lib/python3.7/site-packages/click/core.py", line 717, in main
    rv = self.invoke(ctx)
  File "/workspace/development/frappe-bench/env/lib/python3.7/site-packages/click/core.py", line 1137, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/workspace/development/frappe-bench/env/lib/python3.7/site-packages/click/core.py", line 1137, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/workspace/development/frappe-bench/env/lib/python3.7/site-packages/click/core.py", line 956, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/workspace/development/frappe-bench/env/lib/python3.7/site-packages/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/workspace/development/frappe-bench/env/lib/python3.7/site-packages/click/decorators.py", line 17, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/workspace/development/frappe-bench/apps/frappe/frappe/commands/__init__.py", line 25, in _func
    ret = f(frappe._dict(ctx.obj), *args, **kwargs)
  File "/workspace/development/frappe-bench/apps/frappe/frappe/commands/utils.py", line 145, in execute
    ret = frappe.get_attr(method)(*args, **kwargs)
  File "/workspace/development/frappe-bench/apps/frappe/frappe/__init__.py", line 1042, in get_attr
    return getattr(get_module(modulename), methodname)
  File "/workspace/development/frappe-bench/apps/frappe/frappe/__init__.py", line 823, in get_module
    return importlib.import_module(modulename)
  File "/workspace/development/frappe-bench/env/lib/python3.7/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/workspace/development/frappe-bench/apps/erpnext/erpnext/demo/demo.py", line 6, in <module>
    from erpnext.demo.user import hr, sales, purchase, manufacturing, stock, accounts, projects, fixed_asset
  File "/workspace/development/frappe-bench/apps/erpnext/erpnext/demo/user/fixed_asset.py", line 9, in <module>
    from erpnext.assets.doctype.asset.asset import make_purchase_invoice, make_sales_invoice
ImportError: cannot import name 'make_purchase_invoice' from 'erpnext.assets.doctype.asset.asset' (/workspace/development/frappe-bench/apps/erpnext/erpnext/assets/doctype/asset/asset.py)

Signed-off-by: Chinmay D. Pai <chinmaydpai@gmail.com>
