commit 6a8e3b6a455f5df20ed60405329bbe4ef8d98c97 Author: Rushabh Mehta Date: Tue Feb 28 18:42:09 2017 +0530 first commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..473cb449 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +.DS_Store +*.pyc +*.egg-info +*.swp +tags +foundation/docs/current \ No newline at end of file diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 00000000..792ac0b3 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,18 @@ +include MANIFEST.in +include requirements.txt +include *.json +include *.md +include *.py +include *.txt +recursive-include foundation *.css +recursive-include foundation *.csv +recursive-include foundation *.html +recursive-include foundation *.ico +recursive-include foundation *.js +recursive-include foundation *.json +recursive-include foundation *.md +recursive-include foundation *.png +recursive-include foundation *.py +recursive-include foundation *.svg +recursive-include foundation *.txt +recursive-exclude foundation *.pyc \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 00000000..2833384a --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ +## ERPNext Foundation + +Website for ERPNext Foundation + +#### License + +MIT \ No newline at end of file diff --git a/foundation/__init__.py b/foundation/__init__.py new file mode 100644 index 00000000..95d1338e --- /dev/null +++ b/foundation/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +__version__ = '0.0.1' + diff --git a/foundation/config/__init__.py b/foundation/config/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/foundation/config/desktop.py b/foundation/config/desktop.py new file mode 100644 index 00000000..4598b072 --- /dev/null +++ b/foundation/config/desktop.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals +from frappe import _ + +def get_data(): + return [ + { + "module_name": "ERPNext Foundation", + "color": "grey", + "icon": "octicon octicon-file-directory", + "type": "module", + "label": _("ERPNext Foundation") + } + ] diff --git a/foundation/config/docs.py b/foundation/config/docs.py new file mode 100644 index 00000000..cb480412 --- /dev/null +++ b/foundation/config/docs.py @@ -0,0 +1,11 @@ +""" +Configuration for docs +""" + +# source_link = "https://github.com/[org_name]/foundation" +# docs_base_url = "https://[org_name].github.io/foundation" +# headline = "App that does everything" +# sub_heading = "Yes, you got that right the first time, everything" + +def get_context(context): + context.brand_html = "ERPNext Foundation" diff --git a/foundation/erpnext_foundation/__init__.py b/foundation/erpnext_foundation/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/foundation/erpnext_foundation/doctype/__init__.py b/foundation/erpnext_foundation/doctype/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/foundation/erpnext_foundation/doctype/member/__init__.py b/foundation/erpnext_foundation/doctype/member/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/foundation/erpnext_foundation/doctype/member/member.js b/foundation/erpnext_foundation/doctype/member/member.js new file mode 100644 index 00000000..c184acd0 --- /dev/null +++ b/foundation/erpnext_foundation/doctype/member/member.js @@ -0,0 +1,8 @@ +// Copyright (c) 2016, EOSSF and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Member', { + refresh: function(frm) { + + } +}); diff --git a/foundation/erpnext_foundation/doctype/member/member.json b/foundation/erpnext_foundation/doctype/member/member.json new file mode 100644 index 00000000..6f17c7ff --- /dev/null +++ b/foundation/erpnext_foundation/doctype/member/member.json @@ -0,0 +1,237 @@ +{ + "allow_copy": 0, + "allow_import": 0, + "allow_rename": 0, + "autoname": "field:member_name", + "beta": 0, + "creation": "2017-02-24 11:47:56.865726", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "member_name", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Member Name", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "membership_type", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Membership Type", + "length": 0, + "no_copy": 0, + "options": "Gold\nSilver\nIndividual", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "email", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Email", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "image", + "fieldtype": "Attach Image", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Image", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "address", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Address", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "expires_on", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Expires On", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "in_dialog": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2017-02-28 16:20:10.046062", + "modified_by": "Administrator", + "module": "ERPNext Foundation", + "name": "Member", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + } + ], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/foundation/erpnext_foundation/doctype/member/member.py b/foundation/erpnext_foundation/doctype/member/member.py new file mode 100644 index 00000000..36f0eb2e --- /dev/null +++ b/foundation/erpnext_foundation/doctype/member/member.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, EOSSF and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.document import Document + +class Member(Document): + pass diff --git a/foundation/erpnext_foundation/doctype/member/test_member.py b/foundation/erpnext_foundation/doctype/member/test_member.py new file mode 100644 index 00000000..e2cd793f --- /dev/null +++ b/foundation/erpnext_foundation/doctype/member/test_member.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, EOSSF and Contributors +# See license.txt +from __future__ import unicode_literals + +import frappe +import unittest + +# test_records = frappe.get_test_records('Member') + +class TestMember(unittest.TestCase): + pass diff --git a/foundation/erpnext_foundation/doctype/membership/__init__.py b/foundation/erpnext_foundation/doctype/membership/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/foundation/erpnext_foundation/doctype/membership/membership.js b/foundation/erpnext_foundation/doctype/membership/membership.js new file mode 100644 index 00000000..6c59f260 --- /dev/null +++ b/foundation/erpnext_foundation/doctype/membership/membership.js @@ -0,0 +1,8 @@ +// Copyright (c) 2016, EOSSF and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Membership', { + refresh: function(frm) { + + } +}); diff --git a/foundation/erpnext_foundation/doctype/membership/membership.json b/foundation/erpnext_foundation/doctype/membership/membership.json new file mode 100644 index 00000000..9cc7aef9 --- /dev/null +++ b/foundation/erpnext_foundation/doctype/membership/membership.json @@ -0,0 +1,267 @@ +{ + "allow_copy": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 0, + "creation": "2017-02-24 11:56:55.208964", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "member", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Member", + "length": 0, + "no_copy": 0, + "options": "Member", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "membership_type", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Membership Type", + "length": 0, + "no_copy": 0, + "options": "Gold\nSilver\nIndividual", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "from", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "From", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "to", + "fieldtype": "Date", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "To", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "paid", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Paid", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "currency", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Currency", + "length": 0, + "no_copy": 0, + "options": "USD\nINR", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "amount", + "fieldtype": "Float", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Amount", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "in_dialog": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2017-02-28 16:18:54.592372", + "modified_by": "Administrator", + "module": "ERPNext Foundation", + "name": "Membership", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + } + ], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/foundation/erpnext_foundation/doctype/membership/membership.py b/foundation/erpnext_foundation/doctype/membership/membership.py new file mode 100644 index 00000000..831f1d05 --- /dev/null +++ b/foundation/erpnext_foundation/doctype/membership/membership.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, EOSSF and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.document import Document + +class Membership(Document): + def validate(self): + member_name = frappe.get_value('Member', dict(email=frappe.user.name)) + + if not member_name: + member = frappe.get_doc(dict( + doctype='Member', + )) diff --git a/foundation/erpnext_foundation/doctype/membership/test_membership.py b/foundation/erpnext_foundation/doctype/membership/test_membership.py new file mode 100644 index 00000000..7c455b67 --- /dev/null +++ b/foundation/erpnext_foundation/doctype/membership/test_membership.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, EOSSF and Contributors +# See license.txt +from __future__ import unicode_literals + +import frappe +import unittest + +# test_records = frappe.get_test_records('Membership') + +class TestMembership(unittest.TestCase): + pass diff --git a/foundation/erpnext_foundation/doctype/portal_job/__init__.py b/foundation/erpnext_foundation/doctype/portal_job/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/foundation/erpnext_foundation/doctype/portal_job/portal_job.js b/foundation/erpnext_foundation/doctype/portal_job/portal_job.js new file mode 100644 index 00000000..fa4a5c2c --- /dev/null +++ b/foundation/erpnext_foundation/doctype/portal_job/portal_job.js @@ -0,0 +1,8 @@ +// Copyright (c) 2016, EOSSF and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Portal Job', { + refresh: function(frm) { + + } +}); diff --git a/foundation/erpnext_foundation/doctype/portal_job/portal_job.json b/foundation/erpnext_foundation/doctype/portal_job/portal_job.json new file mode 100644 index 00000000..08a28518 --- /dev/null +++ b/foundation/erpnext_foundation/doctype/portal_job/portal_job.json @@ -0,0 +1,328 @@ +{ + "allow_copy": 0, + "allow_import": 0, + "allow_rename": 0, + "beta": 0, + "creation": "2017-02-24 12:06:02.509773", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "title", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Title", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "company_name", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Company Name", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "status", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Status", + "length": 0, + "no_copy": 0, + "options": "Open\nCompleted\nExpired\nWithdrawn", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "description", + "fieldtype": "Text Editor", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Description", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "contact_number", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Contact Number", + "length": 0, + "no_copy": 0, + "options": "", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "country", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Country", + "length": 0, + "no_copy": 0, + "options": "Country", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "job_type", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Job Type", + "length": 0, + "no_copy": 0, + "options": "Setup\nImplementation\nTraining\nCustomization\nPrint Format\nIntegration\nFeature Development\nApp Development", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "1", + "fieldname": "show_in_website", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Show in Website", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "route", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Route", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_view": 0, + "in_create": 0, + "in_dialog": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2017-02-28 15:08:29.884966", + "modified_by": "Administrator", + "module": "ERPNext Foundation", + "name": "Portal Job", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + } + ], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "title_field": "title", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/foundation/erpnext_foundation/doctype/portal_job/portal_job.py b/foundation/erpnext_foundation/doctype/portal_job/portal_job.py new file mode 100644 index 00000000..40cd77a8 --- /dev/null +++ b/foundation/erpnext_foundation/doctype/portal_job/portal_job.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, EOSSF and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.website.website_generator import WebsiteGenerator + +class PortalJob(WebsiteGenerator): + _website = dict( + condition_field = "show_in_website", + template = "templates/generators/portal_job.html" + ) + def validate(self): + if not self.route: + self.route = 'jobs/' + self.scrub(self.name) + +def get_list_context(context): + context.title = 'ERPNext Jobs' + context.no_breadcrumbs = True + context.row_template = 'foundation/templates/includes/portal_job.html' + context.order_by = 'creation desc' + context.introduction = '
Jobs for ERPNext Service Providers

' diff --git a/foundation/erpnext_foundation/doctype/portal_job/test_portal_job.py b/foundation/erpnext_foundation/doctype/portal_job/test_portal_job.py new file mode 100644 index 00000000..6889409d --- /dev/null +++ b/foundation/erpnext_foundation/doctype/portal_job/test_portal_job.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, EOSSF and Contributors +# See license.txt +from __future__ import unicode_literals + +import frappe +import unittest + +# test_records = frappe.get_test_records('Portal Job') + +class TestPortalJob(unittest.TestCase): + pass diff --git a/foundation/erpnext_foundation/doctype/service_provider/__init__.py b/foundation/erpnext_foundation/doctype/service_provider/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/foundation/erpnext_foundation/doctype/service_provider/service_provider.js b/foundation/erpnext_foundation/doctype/service_provider/service_provider.js new file mode 100644 index 00000000..1b3c178e --- /dev/null +++ b/foundation/erpnext_foundation/doctype/service_provider/service_provider.js @@ -0,0 +1,8 @@ +// Copyright (c) 2016, EOSSF and contributors +// For license information, please see license.txt + +frappe.ui.form.on('Service Provider', { + refresh: function(frm) { + + } +}); diff --git a/foundation/erpnext_foundation/doctype/service_provider/service_provider.json b/foundation/erpnext_foundation/doctype/service_provider/service_provider.json new file mode 100644 index 00000000..30fa657d --- /dev/null +++ b/foundation/erpnext_foundation/doctype/service_provider/service_provider.json @@ -0,0 +1,555 @@ +{ + "allow_copy": 0, + "allow_import": 0, + "allow_rename": 0, + "autoname": "field:title", + "beta": 0, + "creation": "2017-02-24 12:09:23.744409", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "editable_grid": 1, + "engine": "InnoDB", + "fields": [ + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "title", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 1, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Title", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "member", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Member", + "length": 0, + "no_copy": 0, + "options": "Member", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "country", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Country", + "length": 0, + "no_copy": 0, + "options": "Country", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "email", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Email", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "phone", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Phone", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "website", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Website", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "address", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Address", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "column_break_8", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "image", + "fieldtype": "Attach Image", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Image", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_10", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "introduction", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Introduction", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "details", + "fieldtype": "Text Editor", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Details", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "section_break_13", + "fieldtype": "Section Break", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "discuss_ids", + "fieldtype": "Small Text", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Discuss IDs", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "github_id", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "GitHub ID", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "route", + "fieldtype": "Data", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Route", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "show_in_website", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Show in Website", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + } + ], + "hide_heading": 0, + "hide_toolbar": 0, + "idx": 0, + "image_field": "image", + "image_view": 0, + "in_create": 0, + "in_dialog": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 0, + "max_attachments": 0, + "modified": "2017-02-27 11:42:44.665961", + "modified_by": "Administrator", + "module": "ERPNext Foundation", + "name": "Service Provider", + "name_case": "", + "owner": "Administrator", + "permissions": [ + { + "amend": 0, + "apply_user_permissions": 0, + "cancel": 0, + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "if_owner": 0, + "import": 0, + "permlevel": 0, + "print": 1, + "read": 1, + "report": 1, + "role": "System Manager", + "set_user_permissions": 0, + "share": 1, + "submit": 0, + "write": 1 + } + ], + "quick_entry": 1, + "read_only": 0, + "read_only_onload": 0, + "show_name_in_global_search": 0, + "sort_field": "modified", + "sort_order": "DESC", + "track_changes": 1, + "track_seen": 0 +} \ No newline at end of file diff --git a/foundation/erpnext_foundation/doctype/service_provider/service_provider.py b/foundation/erpnext_foundation/doctype/service_provider/service_provider.py new file mode 100644 index 00000000..7e768050 --- /dev/null +++ b/foundation/erpnext_foundation/doctype/service_provider/service_provider.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, EOSSF and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.website.website_generator import WebsiteGenerator + +class ServiceProvider(WebsiteGenerator): + _website = frappe._dict( + condition_field = "show_in_website", + template = "templates/generators/service_provider.html" + ) + def validate(self): + if not self.route: + self.route = 'service-providers/' + self.scrub(self.name) + + def get_context(self, context): + if not context.website.startswith('http'): + context.website = 'http://' + context.website \ No newline at end of file diff --git a/foundation/erpnext_foundation/doctype/service_provider/test_service_provider.py b/foundation/erpnext_foundation/doctype/service_provider/test_service_provider.py new file mode 100644 index 00000000..c26c575c --- /dev/null +++ b/foundation/erpnext_foundation/doctype/service_provider/test_service_provider.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# Copyright (c) 2015, EOSSF and Contributors +# See license.txt +from __future__ import unicode_literals + +import frappe +import unittest + +# test_records = frappe.get_test_records('Service Provider') + +class TestServiceProvider(unittest.TestCase): + pass diff --git a/foundation/erpnext_foundation/web_form/__init__.py b/foundation/erpnext_foundation/web_form/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/foundation/erpnext_foundation/web_form/jobs/__init__.py b/foundation/erpnext_foundation/web_form/jobs/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/foundation/erpnext_foundation/web_form/jobs/jobs.js b/foundation/erpnext_foundation/web_form/jobs/jobs.js new file mode 100644 index 00000000..699703c5 --- /dev/null +++ b/foundation/erpnext_foundation/web_form/jobs/jobs.js @@ -0,0 +1,3 @@ +frappe.ready(function() { + // bind events here +}) \ No newline at end of file diff --git a/foundation/erpnext_foundation/web_form/jobs/jobs.json b/foundation/erpnext_foundation/web_form/jobs/jobs.json new file mode 100644 index 00000000..be556ca8 --- /dev/null +++ b/foundation/erpnext_foundation/web_form/jobs/jobs.json @@ -0,0 +1,108 @@ +{ + "accept_payment": 0, + "allow_comments": 1, + "allow_delete": 1, + "allow_edit": 1, + "allow_incomplete": 0, + "allow_multiple": 1, + "allow_print": 0, + "amount": 0.0, + "amount_based_on_field": 0, + "creation": "2017-02-28 15:06:44.748171", + "doc_type": "Portal Job", + "docstatus": 0, + "doctype": "Web Form", + "idx": 0, + "introduction_text": "Share as many details as you can to get maximum interest from service providers", + "is_standard": 1, + "login_required": 1, + "max_attachment_size": 0, + "modified": "2017-02-28 15:06:44.748171", + "modified_by": "Administrator", + "module": "ERPNext Foundation", + "name": "jobs", + "owner": "Administrator", + "payment_button_label": "Buy Now", + "published": 1, + "route": "my-jobs", + "show_sidebar": 1, + "sidebar_items": [], + "success_url": "/jobs", + "title": "Jobs", + "web_form_fields": [ + { + "fieldname": "title", + "fieldtype": "Data", + "hidden": 0, + "label": "Title", + "max_length": 0, + "max_value": 0, + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "job_type", + "fieldtype": "Select", + "hidden": 0, + "label": "Job Type", + "max_length": 0, + "max_value": 0, + "options": "Setup\nImplementation\nTraining\nCustomization\nPrint Format\nIntegration\nFeature Development\nApp Development", + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "country", + "fieldtype": "Link", + "hidden": 0, + "label": "Country", + "max_length": 0, + "max_value": 0, + "options": "Country", + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "company_name", + "fieldtype": "Data", + "hidden": 0, + "label": "Company Name", + "max_length": 0, + "max_value": 0, + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "contact_number", + "fieldtype": "Data", + "hidden": 0, + "label": "Contact Number", + "max_length": 0, + "max_value": 0, + "options": "", + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "status", + "fieldtype": "Select", + "hidden": 0, + "label": "Status", + "max_length": 0, + "max_value": 0, + "options": "Open\nCompleted\nExpired\nWithdrawn", + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "description", + "fieldtype": "Text Editor", + "hidden": 0, + "label": "Description", + "max_length": 0, + "max_value": 0, + "read_only": 0, + "reqd": 0 + } + ] +} \ No newline at end of file diff --git a/foundation/erpnext_foundation/web_form/jobs/jobs.py b/foundation/erpnext_foundation/web_form/jobs/jobs.py new file mode 100644 index 00000000..2334f8b2 --- /dev/null +++ b/foundation/erpnext_foundation/web_form/jobs/jobs.py @@ -0,0 +1,7 @@ +from __future__ import unicode_literals + +import frappe + +def get_context(context): + # do your magic here + pass diff --git a/foundation/erpnext_foundation/web_form/memberships/__init__.py b/foundation/erpnext_foundation/web_form/memberships/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/foundation/erpnext_foundation/web_form/memberships/memberships.js b/foundation/erpnext_foundation/web_form/memberships/memberships.js new file mode 100644 index 00000000..45f3bfe7 --- /dev/null +++ b/foundation/erpnext_foundation/web_form/memberships/memberships.js @@ -0,0 +1,31 @@ +frappe.ready(function() { + // bind events here + var set_amount = function() { + var membership_type = $('[data-fieldname="membership_type"]').val(); + var currency = $('[data-fieldname="currency"]').val(); + if(currency=='USD') { + amount = { + 'Gold': 5000, + 'Silver': 1500, + 'Individual': 200 + } + } else { + amount = { + 'Gold': 300000, + 'Silver': 100000, + 'Individual': 10000 + } + } + var currency = $('[data-fieldname="amount"]').val(amount[membership_type]); + } + + var m = moment(); + $('[data-fieldname="from"]').val(m.format()).trigger('change'); + $('[data-fieldname="to"]').val(m.add(1, 'year').format()).trigger('change'); + $('[data-fieldname="membership_type"]').on('change', function() { set_amount(); }); + $('[data-fieldname="currency"]').val('USD') + .on('change', function() { + set_amount(); + }) + .trigger('change'); +}) \ No newline at end of file diff --git a/foundation/erpnext_foundation/web_form/memberships/memberships.json b/foundation/erpnext_foundation/web_form/memberships/memberships.json new file mode 100644 index 00000000..7b55e02a --- /dev/null +++ b/foundation/erpnext_foundation/web_form/memberships/memberships.json @@ -0,0 +1,85 @@ +{ + "accept_payment": 0, + "allow_comments": 0, + "allow_delete": 0, + "allow_edit": 0, + "allow_incomplete": 0, + "allow_multiple": 1, + "allow_print": 0, + "amount": 0.0, + "amount_based_on_field": 0, + "creation": "2017-02-28 16:01:36.825878", + "doc_type": "Membership", + "docstatus": 0, + "doctype": "Web Form", + "idx": 0, + "is_standard": 1, + "login_required": 1, + "max_attachment_size": 0, + "modified": "2017-02-28 16:12:17.633312", + "modified_by": "Administrator", + "module": "ERPNext Foundation", + "name": "memberships", + "owner": "Administrator", + "payment_button_label": "Buy Now", + "published": 1, + "route": "memberships", + "show_sidebar": 1, + "sidebar_items": [], + "success_url": "/memberships", + "title": "Memberships", + "web_form_fields": [ + { + "fieldname": "membership_type", + "fieldtype": "Select", + "hidden": 0, + "label": "Membership Type", + "max_length": 0, + "max_value": 0, + "options": "Gold\nSilver\nIndividual", + "read_only": 0, + "reqd": 1 + }, + { + "fieldname": "from", + "fieldtype": "Date", + "hidden": 0, + "label": "From Date", + "max_length": 0, + "max_value": 0, + "read_only": 1, + "reqd": 1 + }, + { + "fieldname": "to", + "fieldtype": "Date", + "hidden": 0, + "label": "To Date", + "max_length": 0, + "max_value": 0, + "read_only": 1, + "reqd": 1 + }, + { + "fieldname": "currency", + "fieldtype": "Select", + "hidden": 0, + "label": "Currency", + "max_length": 0, + "max_value": 0, + "options": "USD\nINR", + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "amount", + "fieldtype": "Float", + "hidden": 0, + "label": "Amount", + "max_length": 0, + "max_value": 0, + "read_only": 1, + "reqd": 0 + } + ] +} \ No newline at end of file diff --git a/foundation/erpnext_foundation/web_form/memberships/memberships.py b/foundation/erpnext_foundation/web_form/memberships/memberships.py new file mode 100644 index 00000000..2334f8b2 --- /dev/null +++ b/foundation/erpnext_foundation/web_form/memberships/memberships.py @@ -0,0 +1,7 @@ +from __future__ import unicode_literals + +import frappe + +def get_context(context): + # do your magic here + pass diff --git a/foundation/erpnext_foundation/web_form/service_provider/__init__.py b/foundation/erpnext_foundation/web_form/service_provider/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/foundation/erpnext_foundation/web_form/service_provider/service_provider.js b/foundation/erpnext_foundation/web_form/service_provider/service_provider.js new file mode 100644 index 00000000..699703c5 --- /dev/null +++ b/foundation/erpnext_foundation/web_form/service_provider/service_provider.js @@ -0,0 +1,3 @@ +frappe.ready(function() { + // bind events here +}) \ No newline at end of file diff --git a/foundation/erpnext_foundation/web_form/service_provider/service_provider.json b/foundation/erpnext_foundation/web_form/service_provider/service_provider.json new file mode 100644 index 00000000..2194d618 --- /dev/null +++ b/foundation/erpnext_foundation/web_form/service_provider/service_provider.json @@ -0,0 +1,126 @@ +{ + "accept_payment": 0, + "allow_comments": 0, + "allow_delete": 0, + "allow_edit": 1, + "allow_incomplete": 0, + "allow_multiple": 0, + "allow_print": 0, + "amount": 0.0, + "amount_based_on_field": 0, + "creation": "2017-02-27 15:52:47.104496", + "doc_type": "Service Provider", + "docstatus": 0, + "doctype": "Web Form", + "idx": 0, + "introduction_text": "Update your company profile that will be shown on your Service Provider Page", + "is_standard": 1, + "login_required": 1, + "max_attachment_size": 0, + "modified": "2017-02-27 16:48:13.115907", + "modified_by": "Administrator", + "module": "ERPNext Foundation", + "name": "service-provider", + "owner": "Administrator", + "payment_button_label": "Buy Now", + "payment_gateway": "", + "published": 1, + "route": "service-provider-settings", + "show_sidebar": 1, + "sidebar_items": [], + "success_url": "/service-provider", + "title": "Service Provider", + "web_form_fields": [ + { + "fieldname": "title", + "fieldtype": "Data", + "hidden": 0, + "label": "Title", + "max_length": 0, + "max_value": 0, + "read_only": 0, + "reqd": 1 + }, + { + "fieldname": "country", + "fieldtype": "Link", + "hidden": 0, + "label": "Country", + "max_length": 0, + "max_value": 0, + "options": "Country", + "read_only": 0, + "reqd": 1 + }, + { + "fieldname": "email", + "fieldtype": "Data", + "hidden": 0, + "label": "Email", + "max_length": 0, + "max_value": 0, + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "phone", + "fieldtype": "Data", + "hidden": 0, + "label": "Phone", + "max_length": 0, + "max_value": 0, + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "image", + "fieldtype": "Attach", + "hidden": 0, + "label": "Image", + "max_length": 0, + "max_value": 0, + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "introduction", + "fieldtype": "Small Text", + "hidden": 0, + "label": "Introduction", + "max_length": 0, + "max_value": 0, + "read_only": 0, + "reqd": 1 + }, + { + "fieldname": "details", + "fieldtype": "Text Editor", + "hidden": 0, + "label": "Details", + "max_length": 0, + "max_value": 0, + "read_only": 0, + "reqd": 1 + }, + { + "fieldname": "discuss_ids", + "fieldtype": "Data", + "hidden": 0, + "label": "Discuss IDs", + "max_length": 0, + "max_value": 0, + "read_only": 0, + "reqd": 0 + }, + { + "fieldname": "github_id", + "fieldtype": "Data", + "hidden": 0, + "label": "GitHub ID", + "max_length": 0, + "max_value": 0, + "read_only": 0, + "reqd": 0 + } + ] +} \ No newline at end of file diff --git a/foundation/erpnext_foundation/web_form/service_provider/service_provider.py b/foundation/erpnext_foundation/web_form/service_provider/service_provider.py new file mode 100644 index 00000000..2334f8b2 --- /dev/null +++ b/foundation/erpnext_foundation/web_form/service_provider/service_provider.py @@ -0,0 +1,7 @@ +from __future__ import unicode_literals + +import frappe + +def get_context(context): + # do your magic here + pass diff --git a/foundation/hooks.py b/foundation/hooks.py new file mode 100644 index 00000000..4a915057 --- /dev/null +++ b/foundation/hooks.py @@ -0,0 +1,152 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals +from . import __version__ as app_version + +app_name = "foundation" +app_title = "ERPNext Foundation" +app_publisher = "EOSSF" +app_description = "Website for ERPNext Foundation" +app_icon = "octicon octicon-file-directory" +app_color = "grey" +app_email = "foundation@erpnext.org" +app_license = "MIT" + +# Includes in +# ------------------ + +# include js, css files in header of desk.html +# app_include_css = "/assets/foundation/css/foundation.css" +# app_include_js = "/assets/foundation/js/foundation.js" + +# include js, css files in header of web template +web_include_css = "/assets/foundation/css/style.css" +# web_include_js = "/assets/foundation/js/foundation.js" + +# include js in page +# page_js = {"page" : "public/js/file.js"} + +# include js in doctype views +# doctype_js = {"doctype" : "public/js/doctype.js"} +# doctype_list_js = {"doctype" : "public/js/doctype_list.js"} +# doctype_tree_js = {"doctype" : "public/js/doctype_tree.js"} + +# Home Pages +# ---------- + +# application home page (will override Website Settings) +home_page = "index" + +website_context = { + "brand_html": "ERPNext Foundation", + "top_bar_items": [ + {"label": "Service Providers", "url": "/service-providers", "right":1}, + {"label": "Resources", "url": "/resources", "right":1}, + {"label": "About", "url": "/about", "right":1} + # {"label": "Docs", "url": "http://frappe.github.io/erpnext", "right":1}, + # {"label": "Blog", "url": "https://frappe.io/blog", "right":1}, + ], + "footer_items": [ + {"label": "About", "url": "/about"}, + {"label": "Memberships", "url": "/members"}, + {"label": "Jobs", "url": "/jobs"}, + {"label": "Contact", "url": "/contact"}, + {"label": "Legal", "url": "/legal"}, + {"label": "Terms", "url": "/terms"} + ], + "hide_login": 1, + "favicon": "/assets/frappe_theme/img/favicon.ico" +} + +website_route_rules = [ + {"from_route": "/jobs", "to_route": "Portal Job"}, +] + +# website user home page (by Role) +# role_home_page = { +# "Role": "home_page" +# } + +# Website user home page (by function) +# get_website_user_home_page = "foundation.utils.get_home_page" + +# Generators +# ---------- + +# automatically create page for each record of this doctype +website_generators = ["Service Provider", 'Portal Job'] + +portal_menu_items = [ + {'label': 'Service Provider Settings', 'route': '/service-provider-settings'}, + {'label': 'Jobs', 'route': '/my-jobs'}, + {'label': 'Membership', 'route': '/memberships'} +] + +# Installation +# ------------ + +# before_install = "foundation.install.before_install" +# after_install = "foundation.install.after_install" + +# Desk Notifications +# ------------------ +# See frappe.core.notifications.get_notification_config + +# notification_config = "foundation.notifications.get_notification_config" + +# Permissions +# ----------- +# Permissions evaluated in scripted ways + +# permission_query_conditions = { +# "Event": "frappe.desk.doctype.event.event.get_permission_query_conditions", +# } +# +# has_permission = { +# "Event": "frappe.desk.doctype.event.event.has_permission", +# } + +# Document Events +# --------------- +# Hook on document methods and events + +# doc_events = { +# "*": { +# "on_update": "method", +# "on_cancel": "method", +# "on_trash": "method" +# } +# } + +# Scheduled Tasks +# --------------- + +# scheduler_events = { +# "all": [ +# "foundation.tasks.all" +# ], +# "daily": [ +# "foundation.tasks.daily" +# ], +# "hourly": [ +# "foundation.tasks.hourly" +# ], +# "weekly": [ +# "foundation.tasks.weekly" +# ] +# "monthly": [ +# "foundation.tasks.monthly" +# ] +# } + +# Testing +# ------- + +# before_tests = "foundation.install.before_tests" + +# Overriding Whitelisted Methods +# ------------------------------ +# +# override_whitelisted_methods = { +# "frappe.desk.doctype.event.event.get_events": "foundation.event.get_events" +# } + diff --git a/foundation/migrate.py b/foundation/migrate.py new file mode 100644 index 00000000..5c6dbfe4 --- /dev/null +++ b/foundation/migrate.py @@ -0,0 +1,68 @@ +import frappe + +from frappe.database import Database +from markdown2 import markdown + +def migrate(): + frappe.flags.mute_emails = True + source = Database(user='095452c6b4', password='FLpERmWJGuh4N3Eb') + + + # users = source.sql('select * from tabUser', as_dict=1) + # for u in users: + # frappe.get_doc(dict( + # doctype='User', + # name=u.name, + # first_name=u.first_name, + # last_name=u.last_name, + # email=u.email + # )).insert(ignore_if_duplicate=True) + # print u.name + + # frappe.db.sql('delete from `tabService Provider`') + # partners = source.sql('select * from `tabFrappe Partner`', as_dict=True) + # for p in partners: + # d = frappe.get_doc(dict( + # doctype='Service Provider', + # title=p.partner_name, + # country=p.country, + # image=p.logo, + # introduction=p.introduction, + # details=markdown(p.description), + # address=p.partner_address, + # discuss_ids=p.community_members, + # website=p.partner_website, + # github_id=p.github_id, + # owner=p.owner, + # creation=p.creation, + # email= p.email, + # phone=p.phone, + # route=p.route, + # show_in_website=p.show_in_website + # )).insert(ignore_if_duplicate=True, ignore_mandatory=True) + # print d.name + + jobs = source.sql('select * from `tabFrappe Job`', as_dict=True) + frappe.db.sql('delete from `tabPortal Job`') + for j in jobs: + if not frappe.db.exists('Country', j.country): + frappe.get_doc(dict(doctype='Country', country_name=j.country)).insert() + d = frappe.get_doc(dict( + doctype='Portal Job', + title=j.job_title, + company_name=j.company_name, + country=j.country, + status='Open' if j.status=='Assigned' else j.status, + job_type={ + 'ERP Implementation': 'Implementation', + 'Core Development': 'Feature Development', + 'Website Development': 'Website Development', + 'Other': 'App Development' + }.get(j.job_type, None) or j.job_type, + description= markdown(j.job_detail), + owner=j.owner, + creation=j.creation, + route=j.route, + show_in_website=j.show_in_website + )).insert(ignore_if_duplicate=True, ignore_mandatory=True) + print d.name \ No newline at end of file diff --git a/foundation/modules.txt b/foundation/modules.txt new file mode 100644 index 00000000..5ec8e6ae --- /dev/null +++ b/foundation/modules.txt @@ -0,0 +1 @@ +ERPNext Foundation \ No newline at end of file diff --git a/foundation/patches.txt b/foundation/patches.txt new file mode 100644 index 00000000..e69de29b diff --git a/foundation/public/css/style.css b/foundation/public/css/style.css new file mode 100644 index 00000000..d44a9764 --- /dev/null +++ b/foundation/public/css/style.css @@ -0,0 +1,81 @@ +@import url('https://fonts.googleapis.com/css?family=Open+Sans'); + +body { + font-family: 'Open Sans', sans-serif; + font-size: 15px; + color: @text-color; + text-rendering: optimizeLegibility !important; + line-height: 1.5em; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; +} + +section { + padding: 30px 0px; + border-bottom: 1px solid #EBEFF2; +} + +section:last-child { + border: none; + padding-bottom: 60px; +} + +section h1 { + font-size: 32px; +} + +h1, h2, h3, h4 { + font-weight: 600; +} + +.container { + max-width: 870px; +} + +.navbar-icon { + width: 25px; + height: 25px; + margin-right: 10px; + margin-top: -5px; +} + +.button { + display: inline-block; + border-radius: 4px; + padding: 7px 12px 9px; + line-height: 1; + text-decoration: none; +} + +.green-btn { + background: #70e079; + /*color: #fff;*/ + border: 0px; + border-bottom: 3px solid rgba(0, 0, 0, 0.2); + font-size: 1em; +} + +.green-btn:hover { + text-decoration: none; + background: #458a49; + color: #fff; + border-bottom: 3px solid rgba(117, 116, 255, 0.2); +} + +.web-footer { + padding-top: 0px; +} + +.row-full{ + width: 100vw; + position: relative; + margin-left: -50vw; + height: 400px; + margin-top: 0px; + left: 50%; +} + +a .media-body:hover, a .media-heading:hover { + text-decoration: none; +} + diff --git a/foundation/public/img/bird.png b/foundation/public/img/bird.png new file mode 100644 index 00000000..7d5da1da Binary files /dev/null and b/foundation/public/img/bird.png differ diff --git a/foundation/public/img/community.jpeg b/foundation/public/img/community.jpeg new file mode 100644 index 00000000..4e03d31d Binary files /dev/null and b/foundation/public/img/community.jpeg differ diff --git a/foundation/public/img/community.png b/foundation/public/img/community.png new file mode 100644 index 00000000..5ff687f5 Binary files /dev/null and b/foundation/public/img/community.png differ diff --git a/foundation/public/img/erpnext-foundation-icon.svg b/foundation/public/img/erpnext-foundation-icon.svg new file mode 100644 index 00000000..f98a6099 --- /dev/null +++ b/foundation/public/img/erpnext-foundation-icon.svg @@ -0,0 +1,13 @@ + + + + erp-icon + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/foundation/public/img/erpnext-foundation.png b/foundation/public/img/erpnext-foundation.png new file mode 100644 index 00000000..7ad3cf86 Binary files /dev/null and b/foundation/public/img/erpnext-foundation.png differ diff --git a/foundation/public/img/forum.png b/foundation/public/img/forum.png new file mode 100644 index 00000000..84a2fcd5 Binary files /dev/null and b/foundation/public/img/forum.png differ diff --git a/foundation/public/img/frappe-bird-black.svg b/foundation/public/img/frappe-bird-black.svg new file mode 100644 index 00000000..4077d24e --- /dev/null +++ b/foundation/public/img/frappe-bird-black.svg @@ -0,0 +1,16 @@ + + + + Group + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff --git a/foundation/public/img/frappe-bird-grey.svg b/foundation/public/img/frappe-bird-grey.svg new file mode 100644 index 00000000..de72dc1c --- /dev/null +++ b/foundation/public/img/frappe-bird-grey.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/foundation/public/img/gold.png b/foundation/public/img/gold.png new file mode 100644 index 00000000..bb26a1d9 Binary files /dev/null and b/foundation/public/img/gold.png differ diff --git a/foundation/public/img/manual.png b/foundation/public/img/manual.png new file mode 100644 index 00000000..cedcb4f1 Binary files /dev/null and b/foundation/public/img/manual.png differ diff --git a/foundation/public/img/medal.png b/foundation/public/img/medal.png new file mode 100644 index 00000000..d7f37b09 Binary files /dev/null and b/foundation/public/img/medal.png differ diff --git a/foundation/public/img/repo.png b/foundation/public/img/repo.png new file mode 100644 index 00000000..da841a62 Binary files /dev/null and b/foundation/public/img/repo.png differ diff --git a/foundation/public/img/silver.png b/foundation/public/img/silver.png new file mode 100644 index 00000000..fa13d1a2 Binary files /dev/null and b/foundation/public/img/silver.png differ diff --git a/foundation/public/img/video.png b/foundation/public/img/video.png new file mode 100644 index 00000000..929f7101 Binary files /dev/null and b/foundation/public/img/video.png differ diff --git a/foundation/templates/__init__.py b/foundation/templates/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/foundation/templates/generators/__init__.py b/foundation/templates/generators/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/foundation/templates/generators/portal_job.html b/foundation/templates/generators/portal_job.html new file mode 100644 index 00000000..a6eaf4c4 --- /dev/null +++ b/foundation/templates/generators/portal_job.html @@ -0,0 +1,43 @@ +{% extends "templates/web.html" %} + +{% from "foundation/templates/includes/macros.html" import media %} + +{% block page_content %} +

All ERPNext Jobs

+

{{ title }}

+{% if frappe.user == owner %} +

Edit Job

+{% endif %} +
+ + + + + + + + + + + + + +
Company Name{{ company_name }}
Job Type{{ job_type }}
Country{{ country }}
+

Details

+

{{ description }}

+

Contact

+{% if is_member %} + + + + + + + + + +
Email{{ owner }}
Phone (optional){{ contact_number }}
+{% else %} +

Become an ERPNext Foundation member to view contact details

+{% endif %} +{% endblock %} \ No newline at end of file diff --git a/foundation/templates/generators/service_provider.html b/foundation/templates/generators/service_provider.html new file mode 100644 index 00000000..38123f5a --- /dev/null +++ b/foundation/templates/generators/service_provider.html @@ -0,0 +1,52 @@ +{% extends "templates/web.html" %} + +{% from "foundation/templates/includes/macros.html" import media %} + +{% block page_content %} +
+

{{ title }}

+

+ All ERPNext Serivce Providers in {{ country }}

+
+
+ + + +
+
+ {{ introduction }} +
+
+ + + + + + + + + + + + + + + + + + + + + +
Country{{ country }}
Address{{ address.replace('\n', '
') }}
Phone{{ phone }}
Email{{ email }}
Website{{ website }}
+
+
+ {{ details }} +
+
+

Contact {{ title }}

+
+ +{% endblock %} diff --git a/foundation/templates/includes/macros.html b/foundation/templates/includes/macros.html new file mode 100644 index 00000000..9f64da9d --- /dev/null +++ b/foundation/templates/includes/macros.html @@ -0,0 +1,17 @@ +{% macro media(title, content, image, link) %} +
+
+ + + +
+
+ {% if title %}

{{ title }}

{% endif %} + {{ content }} +
+
+{% endmacro %} diff --git a/foundation/templates/includes/portal_job.html b/foundation/templates/includes/portal_job.html new file mode 100644 index 00000000..e65a28ba --- /dev/null +++ b/foundation/templates/includes/portal_job.html @@ -0,0 +1,5 @@ +
+

{{ doc.title }}

+

{{ doc.country }} | {{ doc.job_type }}

+

{{ html2text(doc.description[:200]) }}{% if doc.description|len > 200 %}...{% endif %}

+
\ No newline at end of file diff --git a/foundation/templates/pages/__init__.py b/foundation/templates/pages/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/foundation/www/__init__.py b/foundation/www/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/foundation/www/about.html b/foundation/www/about.html new file mode 100644 index 00000000..7abcb897 --- /dev/null +++ b/foundation/www/about.html @@ -0,0 +1,29 @@ +{% extends "templates/web.html" %} + +{% block title %}About ERPNext Foundation{% endblock %} + +{% from "foundation/templates/includes/macros.html" import media %} + +{% block content %} +
+

About ERPNext Foundation

+

Community of ERPNext Users, Developers and Service Providers

+
+
+

Goals

+

The goal of the ERPNext Foundation is to provide a platform for the ERPNext Community to come together, join hands and build assets to help build and enhance ERPNext around the world. ERPNext Foundation aims to be a community driven organization and run in a transparent

+
+
+

People

+ {{ media("Jay Ram, CEO", + "Jay is a Mechanical Engineer with an MBA (PGDM) from IIM, Bangalore and has worked in Information Security and Risk areas for large enterprises. He is passionate about helping small and medium businesses overcome thier challenges to grow and thinks ERPNext and his skills and interests are a perfect alignment for what what he wants to do with the rest of his life. In his spare time he plays golf, rides (Bicycling and motorbiking) and travels and would like to combine all his interests on his trips - ERPNext, riding and golf.", + "https://discuss.erpnext.com/user_avatar/discuss.erpnext.com/jayram/240/6872_1.png") }} + {{ media("Rushabh Mehta, Director", "Rushabh is the CEO of Frappé Technologies Private Limited and one of the original creators of Frappé Framework and ERPNext. He built ERPNext for his family's business and then later published it as an open source project. Rushabh is an Industrial Engineer by training but a software developer by profession. In his free time, he likes to read and spend time relaxing at home.", + "https://discuss.erpnext.com/user_avatar/discuss.erpnext.com/rmehta/240/4147_1.png") }} + {{ media("Nabin Hait, Director", "Nabin is the Chief Operating Officer of Frappé Technologies Private Limited and the lead developer at ERPNext. Nabin is responsible for managing the ERPNext project and managing the team at Frappé. Nabin is a great cook and likes cooking and watching movies in his free time.", + "https://discuss.erpnext.com/user_avatar/discuss.erpnext.com/nabinhait/240/7_1.png") }} + {{ media("Prakash Hodage, Administrative Officer", "Prakash is the accountant and administrative officer of Frappé Technologies Private Limited. He is the person responsible for getting the foundation registered. Prakash has extensive experience in managing accounting and administration and is an expert ERPNext user, also handling user support from time to time. In his free time, Prakash loves to read and help people around him.", + "https://discuss.erpnext.com/user_avatar/discuss.erpnext.com/prakash/240/2703_1.png") }} + +
+{% endblock %} diff --git a/foundation/www/index.html b/foundation/www/index.html new file mode 100644 index 00000000..c9f1e3cd --- /dev/null +++ b/foundation/www/index.html @@ -0,0 +1,41 @@ +{% extends "templates/web.html" %} + +{% block title %}ERPNext Foundation{% endblock %} + +{% block content %} +
+ +
+
+

ERPNext Foundation

+

Free and Open Source Business Software for Millions of Entrepreneurs Worldwide

+
+
+

What is ERPNext?

+

ERPNext is a modern, fully featured open source Enterprise Resource Planning (ERP) system that is designed for small and medium sized businesses. +

+
+ +
+

What is the ERPNext Foundation?

+

ERPNext Foundation is a not-for-profit company registered with the objective of building and enhancing ERPNext as an open source project. The ERPNext Foundation is funded by annual memberships of individuals and companies who use ERPNext or support it.

+
+ +
+

How do I Get Started?

+

If you are looking to self host ERPNext, you should start with a remote Virtual Machine (VM) and install ERPNext using the Easy Install Script.

+

Alternatively you can download the Virtual Machine and run it on your desktop

+

You can also sign up for a free one user account on ERPNext hosting services like erpnext.com

+
+ +
+

Get Involved

+

ERPNext is built by feedback and contributions of hundreds of companies and developers and is backed by an active community. Be a part of the community that shapes ERPNext and help millions of small businesses get the software they deserve.

+

Become A Member

+
+ +{% endblock %} \ No newline at end of file diff --git a/foundation/www/members.html b/foundation/www/members.html new file mode 100644 index 00000000..872ce54b --- /dev/null +++ b/foundation/www/members.html @@ -0,0 +1,35 @@ +{% extends "templates/web.html" %} + +{% block title %}ERPNext Foundation - Memberships{% endblock %} + +{% from "foundation/templates/includes/macros.html" import media %} + +{% block content %} +
+

Memberships

+

Be a Part of the ERPNext Foundation

+
+
+

Introduction

+

+ The ERPNext Foundation aims to be driven by its members. By becoming a members, you get + a preferred listing on the ERPNext Job Board and access to incoming requests for implementation + and customization jobs +

+
+
+

Membership Types

+ {{ media("Gold Member", + "By becoming a Gold Member, you show your leadership and a premium positioning for your brand. As a Gold Member, you have priority on all the ERPNext Listings.", + "gold.png") }} + {{ media("Silver Member", + "Silver members also get priority listing on the Service Provider board after the Gold Members. Becoming a silver member will give you increased visibility in the ERPNext Community.", + "silver.png") }} + {{ media("Individual Member", + "As individual membership is ideal for users and freelancers who want to show their solidarity to the project and community. Individual members get listed above those with a free listing.", + "medal.png") }} +
+
+

Become A Member

+
+{% endblock %} \ No newline at end of file diff --git a/foundation/www/resources.html b/foundation/www/resources.html new file mode 100644 index 00000000..d0485ee4 --- /dev/null +++ b/foundation/www/resources.html @@ -0,0 +1,43 @@ +{% extends "templates/web.html" %} + +{% block title %}ERPNext Resources{% endblock %} + +{% from "foundation/templates/includes/macros.html" import media %} + +{% block content %} +
+

Resources

+

Information to help you get started on ERPNext

+
+
+

User Resources

+ + {{ media("User Manual", "Deep dive into ERPNext functionality with the ERPNext manual. Covers all issues regarding setup, operations and customizations", + "manual.png", "https://frappe.github.io/erpnext/user") }} + + {{ media("User Fourm", "Get help from the 3000 strong user community. Remember to introduce yourself and search before posting a query", + "forum.png", "https://discuss.erpnext.com") }} + + {{ media("Help Videos", "More than 50 videos explaining features, using ERPNext, detailed webinar recordings, tutorials and much more", + "video.png", "https://youtube.com") }} + +
+
+

Developer Resources

+

ERPNext is built on the Frappé Framework, a full stack web framework built in Python, Javascript on top of MariaDB, Node and Redis. To contribute fixes or built modules, it is recommended you go through the tutorial of Frappé Framework and make yourself familiar with its concepts.

+ {{ media("Source Code", "All of ERPNext and Frappe code is actively maintained on GitHub. Star the repo, fork it, report issues and contribute using pull requests", + "repo.png", "https://github.com/frappe/erpnext") }} + + {{ media("Frappé Framework", "ERPNext is built on the Frappé Framework, a full stack web application framework built on Python, JS, MariaDB, Redis and Node. Frappé allows you to extend ERPNext and build nifty extensions", + "frappe-bird-black.svg", "https://github.com/frappe/frappe") }} + + {{ media("Frappé Tutorial", "This step by step tutorial will help you build a simple application using Frappé, helping you explore its structure and meta-data driven modeling", "manual.png", "https://frappe.github.io/frappe/") }} +
+
+

Tools

+
    +
  1. Contribute Translations
  2. +
  3. Contribute Chart of Accounts for your Company
  4. +
+
+{% endblock %} \ No newline at end of file diff --git a/foundation/www/service-providers.html b/foundation/www/service-providers.html new file mode 100644 index 00000000..3c928f1d --- /dev/null +++ b/foundation/www/service-providers.html @@ -0,0 +1,83 @@ +{% extends "templates/web.html" %} + +{% from "foundation/templates/includes/macros.html" import media %} + +{% macro gold_member(m) %} +
+ {{ media(m.title, m.introduction, m.image, m.route) }} +
+{% endmacro %} + +{% macro silver_member(m) %} +
+

{{ m.title }}

+

{{ m.introduction[:100] }}

+

Details

+
+{% endmacro %} + +{% macro show_member(s) %} +
+

+ {{ s.title.title()[:25] }}
+

{{ s.introduction[:100] }}
+

+
+{% endmacro %} + +{% block page_content %} +

{{ title }}

+{% if form_dict.country %} +

All Serivce Providers

+{% endif %} +
+

Gold Members

+ {% for m in gold_members %} + {{ gold_member(m) }} + {% endfor %} + {% if has_gold_member %} +

+ Become a Gold Member and get your company featured here

+ {% endif %} +
+
+

Silver Members

+
+ {% for m in silver_members %} + {{ silver_member(m) }} + {% endfor %} +
+
+{% if form_dict.country %} +
+

ERPNext Foundation Members

+
+ {% for s in individual_members %} + {{ show_member(s) }} + {% endfor %} +
+
+
+

Other Service Providers

+
+ {% for s in service_providers %} + {{ show_member(s) }} + {% endfor %} +
+
+{% else %} +
+

Select by country

+
+ {% for c in countries %} + + {% endfor %} +
+
+{% endif %} + +{% endblock %} \ No newline at end of file diff --git a/foundation/www/service_providers.py b/foundation/www/service_providers.py new file mode 100644 index 00000000..5770e0e7 --- /dev/null +++ b/foundation/www/service_providers.py @@ -0,0 +1,74 @@ +import frappe + +def get_context(context): + context.form_dict = frappe.form_dict + context.title = 'Service Providers' + context.gold_members = [] + + filters = dict() + if frappe.form_dict.country: + filters['country'] = frappe.form_dict.country + + gold_members = [d.name for d in frappe.get_all('Member', dict(membership_type='Gold'))] + if gold_members: + filters['member'] = ('in', gold_members) + context.gold_members = frappe.get_all('Service Provider', 'title, introduction, `image`, route', + filters) + + if context.gold_members: + context.has_gold_member = 1 + else: + context.gold_members.append(dict( + title='Gold Member', + introduction='Become a Gold Member today and get your company featured here', + image='/assets/foundation/img/gold.png', + route='/members' + )) + + context.silver_members = [] + silver_members = [d.name for d in frappe.get_all('Member', dict(membership_type='Silver'))] + if silver_members: + filters['member'] = ('in', gold_members) + context.silver_members = frappe.get_all('Service Provider', 'title, introduction, `image`, route', + filters, debug=1) + + # round to 3 columns + for i in xrange(3 - (len(context.silver_members) % 3)): + context.silver_members.append(dict( + title='Silver Member', + introduction='Become a Silver Member today and get your company featured here', + image='/assets/foundation/img/silver.png', + route='/members' + )) + + + if context.form_dict.country: + context.title = 'ERPNext Service Providers in {0}'.format(context.form_dict.country) + + context.individual_members = [] + individual_members = [d.name for d in frappe.get_all('Member', dict(membership_type='Individual'))] + if individual_members: + filters['member'] = ('in', individual_members) + context.individual_members = frappe.get_all('Service Provider', 'title, introduction, `image`, route', filters) + else: + context.individual_members = [dict( + title='Individual Member', + introduction='Become an invidual member to list here', + route='/members' + )] + + context.service_providers = [d for d in frappe.get_all('Service Provider', 'name, title, introduction, `image`, route', + dict(country=frappe.form_dict.country, show_in_website=1), order_by='name') if d.name not in individual_members] + + else: + # countries + context.countries = frappe.db.sql('''select + distinct country, count(*) + from + `tabService Provider` + where + show_in_website = 1 + group by + country + order by + country''') \ No newline at end of file diff --git a/license.txt b/license.txt new file mode 100644 index 00000000..2fdf7c7c --- /dev/null +++ b/license.txt @@ -0,0 +1 @@ +License: MIT \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..5ac1c812 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +frappe \ No newline at end of file diff --git a/setup.py b/setup.py new file mode 100644 index 00000000..9282447c --- /dev/null +++ b/setup.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +from setuptools import setup, find_packages +from pip.req import parse_requirements +import re, ast + +# get version from __version__ variable in foundation/__init__.py +_version_re = re.compile(r'__version__\s+=\s+(.*)') + +with open('foundation/__init__.py', 'rb') as f: + version = str(ast.literal_eval(_version_re.search( + f.read().decode('utf-8')).group(1))) + +requirements = parse_requirements("requirements.txt", session="") + +setup( + name='foundation', + version=version, + description='Website for ERPNext Foundation', + author='EOSSF', + author_email='foundation@erpnext.org', + packages=find_packages(), + zip_safe=False, + include_package_data=True, + install_requires=[str(ir.req) for ir in requirements], + dependency_links=[str(ir._link) for ir in requirements if ir._link] +)