ERPNext.com Frappe Cloud Support Partners Foundation Frappe School

[Job] Multivendor Module

Dear All,
I’m thinking to build a mutl-vendor platform on ERPnext for freelancers where everyone can sell hist services by

  1. Checking the freelancer page, book meeting / call via zoom and pay online
  2. experts can write post (like social media) about their domain expertise
    how i can leverage ERPnext for that.

before you begin new project try and send a fix for https://github.com/erpnext/foundation. It’ll fix the existing job portal https://erpnext.org/erpnext-jobs

3 Likes

Sorry, my bad, not familiar with the processes, not sure what exactly to do?
i’m new in the community.

If you click any job on erpnext-jobs page it will throw an error:

Traceback (most recent call last):
  File "/home/frappe/frappe-bench/apps/frappe/frappe/website/serve.py", line 17, in get_response
    response = renderer_instance.render()
  File "/home/frappe/frappe-bench/apps/frappe/frappe/website/page_renderers/document_page.py", line 50, in render
    html = self.get_html()
  File "/home/frappe/frappe-bench/apps/frappe/frappe/website/utils.py", line 443, in cache_html_decorator
    html = func(*args, **kwargs)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/website/page_renderers/document_page.py", line 61, in get_html
    html = frappe.get_template(self.template_path).render(self.context)
  File "/home/frappe/frappe-bench/env/lib/python3.7/site-packages/jinja2/environment.py", line 1304, in render
    self.environment.handle_exception()
  File "/home/frappe/frappe-bench/env/lib/python3.7/site-packages/jinja2/environment.py", line 925, in handle_exception
    raise rewrite_traceback_stack(source=source)
  File "/home/frappe/frappe-bench/apps/foundation/foundation/./erpnext_foundation/doctype/portal_job/templates/portal_job.html", line 1, in top-level template code
    {% extends "templates/web.html" %}
  File "/home/frappe/frappe-bench/apps/frappe_theme/frappe_theme/./templates/web.html", line 1, in top-level template code
    {% extends "frappe/templates/web.html" %}
  File "/home/frappe/frappe-bench/apps/frappe/frappe/./templates/web.html", line 1, in top-level template code
    {% extends base_template_path %}
  File "/home/frappe/frappe-bench/apps/frappe_theme/frappe_theme/./templates/base.html", line 1, in top-level template code
    {% extends "frappe/templates/base.html" %}
  File "/home/frappe/frappe-bench/apps/frappe/frappe/./templates/base.html", line 83, in top-level template code
    {% block content %}
  File "/home/frappe/frappe-bench/apps/frappe/frappe/./templates/web.html", line 72, in block 'content'
    {{ main_content() }}
  File "/home/frappe/frappe-bench/env/lib/python3.7/site-packages/jinja2/sandbox.py", line 393, in call
    return __context.call(__obj, *args, **kwargs)
  File "/home/frappe/frappe-bench/env/lib/python3.7/site-packages/jinja2/runtime.py", line 828, in _invoke
    rv = self._func(*arguments)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/./templates/web.html", line 15, in template
    {% block page_container %}
  File "/home/frappe/frappe-bench/apps/frappe_theme/frappe_theme/./templates/web.html", line 22, in block 'page_container'
    {%- block page_footer -%}
  File "/home/frappe/frappe-bench/apps/frappe_theme/frappe_theme/./templates/web.html", line 27, in block 'page_footer'
    {% if template.endswith('.md') and repo %}
  File "/home/frappe/frappe-bench/env/lib/python3.7/site-packages/jinja2/sandbox.py", line 326, in getattr
    value = getattr(obj, attribute)
jinja2.exceptions.UndefinedError: 'template' is undefined

As a developer the process to fix this will be:

  • clone and install the app on local bench/site
  • add some entries into the portal jobs as a system manager
  • try to render web page debug the jinja template error
  • fix and submit the PR to erpnext/foundation repo

This one is a long pending issue. Will take this up tomorrow

1 Like

Planning to drop erpnext.org - maybe we can use this forum for jobs?

That will increase commercial activity on forum.

People will have job posts in search results when they search for general help.

6 Likes

I agree. Keeping this forum for anything other than technical discussions will dilute its purpose.
On top of that, we will have to search for opportunities from the discussions. tagging is not strictly followed here so the people using these posts will have a tough time.

1 Like

I have raised the PR.

1 Like

Why not just open another sub-domain and setup the same open source forum package on something like:

vendors.erpnext.com

Have the vendors using the site agree to manage the forum to reduce your support labor. Make it purely participant driven for service and support.

Well, at least it is another idea…

BKM :nerd_face:

7 Likes

This PR is merged. Kindly update the app on the server for erpnext.org.
@revant_one @gavindsouza

@mujeerhashmi I tried updating the site on 25th November, the patches ran fine, and the frappe_theme issue was fixed via frappe/frappe_theme#55.

But seems like the foundation app needs fixing too. I think we’ll have to complete migration guides of v13 & v14 to make sure this works [ref: https://github.com/frappe/frappe/wiki#migration-guide].

Foundation Website Repo

Traceback

Updating DocTypes for foundation    : [===============			       ] 39%
Traceback (most recent call last):
  File "/home/frappe/frappe-bench/apps/frappe/frappe/modules/utils.py", line 202, in load_doctype_module
    doctype_python_modules[key] = frappe.get_module(module_name)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/__init__.py", line 980, in get_module
    return importlib.import_module(modulename)
  File "/usr/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 "/home/frappe/frappe-bench/apps/foundation/foundation/erpnext_foundation/doctype/foundation_project/foundation_project.py", line 8, in <module>
    from frappe.website.render import clear_cache as clear_website_cache
ModuleNotFoundError: No module named 'frappe.website.render'

During handling of the above exception, another exception occurred:

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 "/home/frappe/frappe-bench/apps/frappe/frappe/utils/bench_helper.py", line 104, in <module>
    main()
  File "/home/frappe/frappe-bench/apps/frappe/frappe/utils/bench_helper.py", line 18, in main
    click.Group(commands=commands)(prog_name='bench')
  File "/home/frappe/frappe-bench/env/lib/python3.7/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/home/frappe/frappe-bench/env/lib/python3.7/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/home/frappe/frappe-bench/env/lib/python3.7/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/frappe/frappe-bench/env/lib/python3.7/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/frappe/frappe-bench/env/lib/python3.7/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/frappe/frappe-bench/env/lib/python3.7/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/home/frappe/frappe-bench/env/lib/python3.7/site-packages/click/decorators.py", line 21, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/commands/__init__.py", line 26, in _func
    ret = f(frappe._dict(ctx.obj), *args, **kwargs)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/commands/site.py", line 461, in migrate
    skip_search_index=skip_search_index
  File "/home/frappe/frappe-bench/apps/frappe/frappe/migrate.py", line 71, in migrate
    frappe.model.sync.sync_all()
  File "/home/frappe/frappe-bench/apps/frappe/frappe/model/sync.py", line 18, in sync_all
    sync_for(app, force, reset_permissions=reset_permissions)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/model/sync.py", line 73, in sync_for
    import_file_by_path(doc_path, force=force, ignore_version=True, reset_permissions=reset_permissions)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/modules/import_file.py", line 136, in import_file_by_path
    path=path,
  File "/home/frappe/frappe-bench/apps/frappe/frappe/modules/import_file.py", line 234, in import_doc
    doc.insert()
  File "/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py", line 265, in insert
    self.run_post_save_methods()
  File "/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py", line 998, in run_post_save_methods
    self.run_method("on_update")
  File "/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py", line 859, in run_method
    out = Document.hook(fn)(self, *args, **kwargs)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py", line 1155, in composer
    return composed(self, method, *args, **kwargs)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py", line 1138, in runner
    add_to_return_value(self, fn(self, *args, **kwargs))
  File "/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py", line 853, in <lambda>
    fn = lambda self, *args, **kwargs: getattr(self, method)(*args, **kwargs)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/core/doctype/doctype/doctype.py", line 317, in on_update
    self.run_module_method("on_doctype_update")
  File "/home/frappe/frappe-bench/apps/frappe/frappe/core/doctype/doctype/doctype.py", line 397, in run_module_method
    module = load_doctype_module(self.name, self.module)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/modules/utils.py", line 204, in load_doctype_module
    raise ImportError('Module import failed for {0} ({1})'.format(doctype, module_name + ' Error: ' + str(e)))
ImportError: Module import failed for Foundation Project (foundation.erpnext_foundation.doctype.foundation_project.foundation_project Error: No module named 'frappe.website.render')
1 Like

I’ve made fixes to the foundation app (via erpnext/foundation#477) and deployed the changes. The migration was successful. Job Board is functional now :slight_smile:

https://erpnext.org/erpnext-jobs

3 Likes

If I click on “Post a new job”, I only get a blank page :thinking: