mirror of
https://github.com/erpnext/foundation.git
synced 2026-10-16 18:00:47 +02:00
added apps, events etc
This commit is contained in:
@@ -3,3 +3,19 @@ from __future__ import unicode_literals
|
|||||||
|
|
||||||
__version__ = '0.0.1'
|
__version__ = '0.0.1'
|
||||||
|
|
||||||
|
from frappe.utils import getdate
|
||||||
|
import frappe
|
||||||
|
|
||||||
|
def get_last_membership():
|
||||||
|
'''Returns last membership if exists'''
|
||||||
|
last_membership = frappe.get_all('Membership', 'name,to_date,membership_type',
|
||||||
|
dict(member=frappe.session.user), order_by='to_date desc', limit=1)
|
||||||
|
|
||||||
|
return last_membership and last_membership[0]
|
||||||
|
|
||||||
|
def is_member():
|
||||||
|
'''Returns true if the user is still a member'''
|
||||||
|
last_membership = get_last_membership()
|
||||||
|
if last_membership and getdate(last_membership.to_date) > getdate():
|
||||||
|
return True
|
||||||
|
return False
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
// Copyright (c) 2017, EOSSF and contributors
|
||||||
|
// For license information, please see license.txt
|
||||||
|
|
||||||
|
frappe.ui.form.on('Frappe App', {
|
||||||
|
refresh: function(frm) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
330
foundation/erpnext_foundation/doctype/frappe_app/frappe_app.json
Normal file
330
foundation/erpnext_foundation/doctype/frappe_app/frappe_app.json
Normal file
@@ -0,0 +1,330 @@
|
|||||||
|
{
|
||||||
|
"allow_copy": 0,
|
||||||
|
"allow_guest_to_view": 1,
|
||||||
|
"allow_import": 0,
|
||||||
|
"allow_rename": 0,
|
||||||
|
"autoname": "field:app_name",
|
||||||
|
"beta": 0,
|
||||||
|
"creation": "2017-03-06 14:32:24.677299",
|
||||||
|
"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": "app_name",
|
||||||
|
"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": "App 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": "category",
|
||||||
|
"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": "Category",
|
||||||
|
"length": 0,
|
||||||
|
"no_copy": 0,
|
||||||
|
"options": "Domains\nDeveloper Tools\nFeature\nIntegrations\nPortal\nRegional Extensions",
|
||||||
|
"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": "publisher",
|
||||||
|
"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": "Publisher",
|
||||||
|
"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": "repository_url",
|
||||||
|
"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": "Repository URL",
|
||||||
|
"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,
|
||||||
|
"default": "Community",
|
||||||
|
"fieldname": "badge",
|
||||||
|
"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": "Badge",
|
||||||
|
"length": 0,
|
||||||
|
"no_copy": 0,
|
||||||
|
"options": "Community\nOfficial\nExperimental",
|
||||||
|
"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": 1,
|
||||||
|
"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": "url",
|
||||||
|
"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": "URL",
|
||||||
|
"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": "published",
|
||||||
|
"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": "Published",
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"has_web_view": 1,
|
||||||
|
"hide_heading": 0,
|
||||||
|
"hide_toolbar": 0,
|
||||||
|
"idx": 0,
|
||||||
|
"image_view": 0,
|
||||||
|
"in_create": 0,
|
||||||
|
"is_published_field": "published",
|
||||||
|
"is_submittable": 0,
|
||||||
|
"issingle": 0,
|
||||||
|
"istable": 0,
|
||||||
|
"max_attachments": 0,
|
||||||
|
"modified": "2017-03-06 15:55:42.139035",
|
||||||
|
"modified_by": "Administrator",
|
||||||
|
"module": "ERPNext Foundation",
|
||||||
|
"name": "Frappe App",
|
||||||
|
"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,
|
||||||
|
"route": "/apps",
|
||||||
|
"show_name_in_global_search": 0,
|
||||||
|
"sort_field": "modified",
|
||||||
|
"sort_order": "DESC",
|
||||||
|
"title_field": "app_name",
|
||||||
|
"track_changes": 1,
|
||||||
|
"track_seen": 0
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright (c) 2017, 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 FrappeApp(WebsiteGenerator):
|
||||||
|
def validate(self):
|
||||||
|
if not self.route:
|
||||||
|
self.route = 'apps/' + self.scrub(self.app_name)
|
||||||
|
|
||||||
|
def get_context(self, context):
|
||||||
|
context.parents = [dict(label='All Apps', route='apps')]
|
||||||
|
|
||||||
|
|
||||||
|
def get_list_context(context):
|
||||||
|
context.no_breadcrumbs = True
|
||||||
|
context.title = 'Apps / Extensions for ERPNext'
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
{% extends "templates/web.html" %}
|
||||||
|
|
||||||
|
{% block page_content %}
|
||||||
|
<h1>{{ app_name }}</h1>
|
||||||
|
|
||||||
|
{% if frappe.user == owner %}
|
||||||
|
<p><a class='btn btn-primary btn-sm' href="/submit-app?name={{ name }}">Edit App</a></p>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<table class='table table-bordered small'
|
||||||
|
style='max-width: 400px; margin-bottom: 0px; margin-top: 20px'>
|
||||||
|
<tr>
|
||||||
|
<td>Code</td>
|
||||||
|
<td><a href="{{ repository_url }}" target="_blank">{{ repository_url }}</a></td>
|
||||||
|
</tr>
|
||||||
|
{% if url and repository_url != url %}
|
||||||
|
<tr>
|
||||||
|
<td style='width: 38.2%'>Website</td>
|
||||||
|
<td><a href="{{ url }}" target="_blank">{{ url }}</a></td>
|
||||||
|
</tr>
|
||||||
|
{% endif %}
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<div style='margin: 20px 0px;'>{{ description }}</div>
|
||||||
|
|
||||||
|
<h3>Install on your Bench</h3>
|
||||||
|
|
||||||
|
<pre><code>bench get-app {{ repository_url }}
|
||||||
|
bench --site [yoursite] install-app {{ repository_url.split('/')[-1] }}
|
||||||
|
</code></pre>
|
||||||
|
|
||||||
|
<p><b>Note: </b>
|
||||||
|
<ol>
|
||||||
|
<li>Please read the app / extension README for any installation pre-requisites.
|
||||||
|
<li>Always best to try on a test site first.
|
||||||
|
<li>For help or reporting a bug, use <a href="{{ repository_url }}/issues">GitHub Issues</a> on that repository.
|
||||||
|
</ol>
|
||||||
|
</p>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<span class='label'>{{ doc.badge }}</span>
|
||||||
|
<span class='label'>{{ doc.category }}</span>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
<!-- this is a sample default web page template -->
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
<div class='with-border clickable' style='max-width: 600px;'>
|
||||||
|
<a href="/{{ doc.route }}">
|
||||||
|
<h3 style='margin-top: 0px'>{{ doc.app_name }}</h3>
|
||||||
|
<p>
|
||||||
|
<span class='label'>{{ doc.badge }}</span>
|
||||||
|
<span class='label'>{{ doc.category }}</span>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{{ html2text(doc.description[:200]) }}{% if doc.description|len > 200 %}...{% endif %}</p>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright (c) 2017, EOSSF and Contributors
|
||||||
|
# See license.txt
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
import frappe
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
class TestFrappeApp(unittest.TestCase):
|
||||||
|
pass
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"allow_copy": 0,
|
"allow_copy": 0,
|
||||||
|
"allow_guest_to_view": 0,
|
||||||
"allow_import": 0,
|
"allow_import": 0,
|
||||||
"allow_rename": 0,
|
"allow_rename": 0,
|
||||||
"autoname": "M-.YY.-.####",
|
"autoname": "M-.YY.-.####",
|
||||||
@@ -219,17 +220,17 @@
|
|||||||
"unique": 0
|
"unique": 0
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"has_web_view": 0,
|
||||||
"hide_heading": 0,
|
"hide_heading": 0,
|
||||||
"hide_toolbar": 0,
|
"hide_toolbar": 0,
|
||||||
"idx": 0,
|
"idx": 0,
|
||||||
"image_view": 0,
|
"image_view": 0,
|
||||||
"in_create": 0,
|
"in_create": 0,
|
||||||
"in_dialog": 0,
|
|
||||||
"is_submittable": 0,
|
"is_submittable": 0,
|
||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 0,
|
"istable": 0,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"modified": "2017-03-02 11:48:11.912727",
|
"modified": "2017-03-07 16:44:47.066560",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "ERPNext Foundation",
|
"module": "ERPNext Foundation",
|
||||||
"name": "Membership",
|
"name": "Membership",
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import frappe
|
|||||||
from frappe.model.document import Document
|
from frappe.model.document import Document
|
||||||
from frappe.utils import add_days, add_years, nowdate, getdate
|
from frappe.utils import add_days, add_years, nowdate, getdate
|
||||||
from frappe import _
|
from frappe import _
|
||||||
|
import foundation
|
||||||
|
|
||||||
class Membership(Document):
|
class Membership(Document):
|
||||||
def validate(self):
|
def validate(self):
|
||||||
@@ -24,15 +25,14 @@ class Membership(Document):
|
|||||||
self.member = member_name
|
self.member = member_name
|
||||||
|
|
||||||
# get last membership (if active)
|
# get last membership (if active)
|
||||||
last_membership = frappe.get_all('Membership', 'name,to_date', dict(member=member_name),
|
last_membership = foundation.get_last_membership()
|
||||||
order_by='to_date desc', limit=1)
|
|
||||||
|
|
||||||
if last_membership:
|
if last_membership:
|
||||||
# if last membership does not expire in 30 days, then do not allow to renew
|
# if last membership does not expire in 30 days, then do not allow to renew
|
||||||
if getdate(add_days(last_membership[-1].to_date, -30)) > getdate(nowdate()):
|
if getdate(add_days(last_membership.to_date, -30)) > getdate(nowdate()):
|
||||||
frappe.throw(_('You can only renew if your membership expires within 30 days'))
|
frappe.throw(_('You can only renew if your membership expires within 30 days'))
|
||||||
|
|
||||||
self.from_date = add_days(last_membership[-1].to_date, 1)
|
self.from_date = add_days(last_membership.to_date, 1)
|
||||||
else:
|
else:
|
||||||
self.from_date = nowdate()
|
self.from_date = nowdate()
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"allow_copy": 0,
|
"allow_copy": 0,
|
||||||
|
"allow_guest_to_view": 1,
|
||||||
"allow_import": 0,
|
"allow_import": 0,
|
||||||
"allow_rename": 0,
|
"allow_rename": 0,
|
||||||
"autoname": "field:event_title",
|
"autoname": "field:event_title",
|
||||||
@@ -23,7 +24,7 @@
|
|||||||
"ignore_user_permissions": 0,
|
"ignore_user_permissions": 0,
|
||||||
"ignore_xss_filter": 0,
|
"ignore_xss_filter": 0,
|
||||||
"in_filter": 0,
|
"in_filter": 0,
|
||||||
"in_global_search": 0,
|
"in_global_search": 1,
|
||||||
"in_list_view": 0,
|
"in_list_view": 0,
|
||||||
"in_standard_filter": 0,
|
"in_standard_filter": 0,
|
||||||
"label": "Event Title",
|
"label": "Event Title",
|
||||||
@@ -99,6 +100,35 @@
|
|||||||
"set_only_once": 0,
|
"set_only_once": 0,
|
||||||
"unique": 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": 1,
|
||||||
|
"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": 0,
|
||||||
|
"search_index": 0,
|
||||||
|
"set_only_once": 0,
|
||||||
|
"unique": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
"bold": 0,
|
"bold": 0,
|
||||||
@@ -156,48 +186,20 @@
|
|||||||
"search_index": 0,
|
"search_index": 0,
|
||||||
"set_only_once": 0,
|
"set_only_once": 0,
|
||||||
"unique": 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": 0,
|
|
||||||
"search_index": 0,
|
|
||||||
"set_only_once": 0,
|
|
||||||
"unique": 0
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"has_web_view": 1,
|
||||||
"hide_heading": 0,
|
"hide_heading": 0,
|
||||||
"hide_toolbar": 0,
|
"hide_toolbar": 0,
|
||||||
"idx": 0,
|
"idx": 0,
|
||||||
"image_view": 0,
|
"image_view": 0,
|
||||||
"in_create": 0,
|
"in_create": 0,
|
||||||
"in_dialog": 0,
|
"is_published_field": "published",
|
||||||
"is_submittable": 0,
|
"is_submittable": 0,
|
||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 0,
|
"istable": 0,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"modified": "2017-03-02 15:18:47.126672",
|
"modified": "2017-03-06 16:05:19.014553",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "ERPNext Foundation",
|
"module": "ERPNext Foundation",
|
||||||
"name": "Portal Event",
|
"name": "Portal Event",
|
||||||
@@ -228,9 +230,11 @@
|
|||||||
"quick_entry": 1,
|
"quick_entry": 1,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
"read_only_onload": 0,
|
"read_only_onload": 0,
|
||||||
|
"route": "events",
|
||||||
"show_name_in_global_search": 0,
|
"show_name_in_global_search": 0,
|
||||||
"sort_field": "modified",
|
"sort_field": "modified",
|
||||||
"sort_order": "DESC",
|
"sort_order": "DESC",
|
||||||
|
"title_field": "event_title",
|
||||||
"track_changes": 1,
|
"track_changes": 1,
|
||||||
"track_seen": 0
|
"track_seen": 0
|
||||||
}
|
}
|
||||||
@@ -8,13 +8,21 @@ import frappe
|
|||||||
from frappe.website.website_generator import WebsiteGenerator
|
from frappe.website.website_generator import WebsiteGenerator
|
||||||
|
|
||||||
class PortalEvent(WebsiteGenerator):
|
class PortalEvent(WebsiteGenerator):
|
||||||
|
_website = dict(
|
||||||
|
page_title_field = 'event_title'
|
||||||
|
)
|
||||||
def validate(self):
|
def validate(self):
|
||||||
if not self.route:
|
if not self.route:
|
||||||
self.route = 'events/' + self.scrub(self.event_title)
|
self.route = 'events/' + self.scrub(self.event_title)
|
||||||
|
|
||||||
|
def get_context(self, context):
|
||||||
|
context.parents = [dict(label='All Events',
|
||||||
|
route='/events')]
|
||||||
|
|
||||||
|
|
||||||
def get_list_context(context):
|
def get_list_context(context):
|
||||||
|
context.allow_guest = True
|
||||||
context.title = 'Upcoming Events'
|
context.title = 'Upcoming Events'
|
||||||
context.no_breadcrumbs = True
|
context.no_breadcrumbs = True
|
||||||
context.row_template = 'foundation/templates/includes/portal_event.html'
|
|
||||||
context.order_by = 'creation desc'
|
context.order_by = 'creation desc'
|
||||||
context.introduction = '<p><a href="/add-event">Add an event</a></p>'
|
context.introduction = '<p><a href="/add-event">Add an event</a></p>'
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
{% extends "templates/web.html" %}
|
||||||
|
|
||||||
|
{% block page_content %}
|
||||||
|
<h1>{{ event_title }}</h1>
|
||||||
|
{% if frappe.user == owner %}
|
||||||
|
<p><a class='btn btn-primary btn-sm' href="/add-event?name={{ name }}">Edit Event</a></p>
|
||||||
|
{% endif %}
|
||||||
|
<div>{{ details }}</div>
|
||||||
|
<hr>
|
||||||
|
<p>
|
||||||
|
<span class='label'>{{ doc.place }}</span>
|
||||||
|
<span class='label'>{{ frappe.format_date(date) }}</span>
|
||||||
|
</p>
|
||||||
|
{% endblock %}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
<div class='with-border clickable' style='max-width: 600px;'>
|
||||||
|
<a href="/{{ doc.route }}">
|
||||||
|
<h3 style='margin-top: 0px'>{{ doc.event_title }}</h3>
|
||||||
|
<p>
|
||||||
|
<span class='label'>{{ doc.place }}</span>
|
||||||
|
<span class='label'>{{ frappe.format_date(date) }}</span>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
{{ html2text(doc.details[:200]) }}{% if doc.details|len > 200 %}...{% endif %}</p>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"allow_copy": 0,
|
"allow_copy": 0,
|
||||||
|
"allow_guest_to_view": 1,
|
||||||
"allow_import": 0,
|
"allow_import": 0,
|
||||||
"allow_rename": 0,
|
"allow_rename": 0,
|
||||||
"beta": 0,
|
"beta": 0,
|
||||||
@@ -22,7 +23,7 @@
|
|||||||
"ignore_user_permissions": 0,
|
"ignore_user_permissions": 0,
|
||||||
"ignore_xss_filter": 0,
|
"ignore_xss_filter": 0,
|
||||||
"in_filter": 0,
|
"in_filter": 0,
|
||||||
"in_global_search": 0,
|
"in_global_search": 1,
|
||||||
"in_list_view": 0,
|
"in_list_view": 0,
|
||||||
"in_standard_filter": 0,
|
"in_standard_filter": 0,
|
||||||
"label": "Title",
|
"label": "Title",
|
||||||
@@ -110,7 +111,7 @@
|
|||||||
"ignore_user_permissions": 0,
|
"ignore_user_permissions": 0,
|
||||||
"ignore_xss_filter": 0,
|
"ignore_xss_filter": 0,
|
||||||
"in_filter": 0,
|
"in_filter": 0,
|
||||||
"in_global_search": 0,
|
"in_global_search": 1,
|
||||||
"in_list_view": 0,
|
"in_list_view": 0,
|
||||||
"in_standard_filter": 0,
|
"in_standard_filter": 0,
|
||||||
"label": "Description",
|
"label": "Description",
|
||||||
@@ -278,17 +279,18 @@
|
|||||||
"unique": 0
|
"unique": 0
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"has_web_view": 1,
|
||||||
"hide_heading": 0,
|
"hide_heading": 0,
|
||||||
"hide_toolbar": 0,
|
"hide_toolbar": 0,
|
||||||
"idx": 0,
|
"idx": 0,
|
||||||
"image_view": 0,
|
"image_view": 0,
|
||||||
"in_create": 0,
|
"in_create": 0,
|
||||||
"in_dialog": 0,
|
"is_published_field": "show_in_website",
|
||||||
"is_submittable": 0,
|
"is_submittable": 0,
|
||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 0,
|
"istable": 0,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"modified": "2017-02-28 15:08:29.884966",
|
"modified": "2017-03-06 16:04:54.620681",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "ERPNext Foundation",
|
"module": "ERPNext Foundation",
|
||||||
"name": "Portal Job",
|
"name": "Portal Job",
|
||||||
@@ -319,6 +321,7 @@
|
|||||||
"quick_entry": 1,
|
"quick_entry": 1,
|
||||||
"read_only": 0,
|
"read_only": 0,
|
||||||
"read_only_onload": 0,
|
"read_only_onload": 0,
|
||||||
|
"route": "/jobs",
|
||||||
"show_name_in_global_search": 0,
|
"show_name_in_global_search": 0,
|
||||||
"sort_field": "modified",
|
"sort_field": "modified",
|
||||||
"sort_order": "DESC",
|
"sort_order": "DESC",
|
||||||
|
|||||||
@@ -5,19 +5,21 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
import frappe
|
import frappe
|
||||||
from frappe.website.website_generator import WebsiteGenerator
|
from frappe.website.website_generator import WebsiteGenerator
|
||||||
|
import foundation
|
||||||
|
|
||||||
class PortalJob(WebsiteGenerator):
|
class PortalJob(WebsiteGenerator):
|
||||||
_website = dict(
|
def get_context(self, context):
|
||||||
condition_field = "show_in_website",
|
context.parents = [dict(label='View All Jobs',
|
||||||
template = "templates/generators/portal_job.html"
|
route='jobs')]
|
||||||
)
|
context.is_member = foundation.is_member()
|
||||||
|
|
||||||
def validate(self):
|
def validate(self):
|
||||||
if not self.route:
|
if not self.route:
|
||||||
self.route = 'jobs/' + self.scrub(self.title)
|
self.route = 'jobs/' + self.scrub(self.title)
|
||||||
|
|
||||||
def get_list_context(context):
|
def get_list_context(context):
|
||||||
|
context.allow_guest = True
|
||||||
context.title = 'ERPNext Jobs'
|
context.title = 'ERPNext Jobs'
|
||||||
context.no_breadcrumbs = True
|
context.no_breadcrumbs = True
|
||||||
context.row_template = 'foundation/templates/includes/portal_job.html'
|
|
||||||
context.order_by = 'creation desc'
|
context.order_by = 'creation desc'
|
||||||
context.introduction = '<div>Jobs for ERPNext Service Providers</div><br><button class="button green-btn">Post A Job</button>'
|
context.introduction = '<div>Jobs for ERPNext Service Providers</div><br><button class="button green-btn">Post A Job</button>'
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
{% extends "templates/web.html" %}
|
{% extends "templates/web.html" %}
|
||||||
|
|
||||||
{% from "foundation/templates/includes/macros.html" import media %}
|
|
||||||
|
|
||||||
{% block page_content %}
|
{% block page_content %}
|
||||||
<p><a href="/jobs">All ERPNext Jobs</a></p>
|
|
||||||
<h1>{{ title }}</h1>
|
<h1>{{ title }}</h1>
|
||||||
{% if frappe.user == owner %}
|
{% if frappe.user == owner %}
|
||||||
<p><a class='btn btn-primary btn-sm' href="/my-jobs?name={{ name }}">Edit Job</a></p>
|
<p><a class='btn btn-primary btn-sm' href="/my-jobs?name={{ name }}">Edit Job</a></p>
|
||||||
@@ -38,6 +35,6 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
{% else %}
|
{% else %}
|
||||||
<p><a class='green-btn button' href="/membership">Become an ERPNext Foundation member to view contact details</a></p>
|
<p><a href="/membership">Become an ERPNext Foundation member to view contact details</a></p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
<div style='margin-bottom: 30px; max-width: 600px;'
|
||||||
|
class='with-border clickable'>
|
||||||
|
<a href="/{{ doc.route }}">
|
||||||
|
<h3 style='margin-top: 0px;'>{{ doc.title }}</h3>
|
||||||
|
<p>
|
||||||
|
<span class='label'>{{ doc.country }}</span>
|
||||||
|
<span class='label'>{{ doc.job_type }}</span>
|
||||||
|
</p>
|
||||||
|
<p>{{ html2text(doc.description[:200]) }}{% if doc.description|len > 200 %}...{% endif %}</p>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"allow_copy": 0,
|
"allow_copy": 0,
|
||||||
|
"allow_guest_to_view": 1,
|
||||||
"allow_import": 0,
|
"allow_import": 0,
|
||||||
"allow_rename": 0,
|
"allow_rename": 0,
|
||||||
"autoname": "field:title",
|
"autoname": "field:title",
|
||||||
@@ -313,7 +314,7 @@
|
|||||||
"ignore_user_permissions": 0,
|
"ignore_user_permissions": 0,
|
||||||
"ignore_xss_filter": 0,
|
"ignore_xss_filter": 0,
|
||||||
"in_filter": 0,
|
"in_filter": 0,
|
||||||
"in_global_search": 0,
|
"in_global_search": 1,
|
||||||
"in_list_view": 0,
|
"in_list_view": 0,
|
||||||
"in_standard_filter": 0,
|
"in_standard_filter": 0,
|
||||||
"label": "Introduction",
|
"label": "Introduction",
|
||||||
@@ -342,7 +343,7 @@
|
|||||||
"ignore_user_permissions": 0,
|
"ignore_user_permissions": 0,
|
||||||
"ignore_xss_filter": 0,
|
"ignore_xss_filter": 0,
|
||||||
"in_filter": 0,
|
"in_filter": 0,
|
||||||
"in_global_search": 0,
|
"in_global_search": 1,
|
||||||
"in_list_view": 0,
|
"in_list_view": 0,
|
||||||
"in_standard_filter": 0,
|
"in_standard_filter": 0,
|
||||||
"label": "Details",
|
"label": "Details",
|
||||||
@@ -505,18 +506,19 @@
|
|||||||
"unique": 0
|
"unique": 0
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"has_web_view": 1,
|
||||||
"hide_heading": 0,
|
"hide_heading": 0,
|
||||||
"hide_toolbar": 0,
|
"hide_toolbar": 0,
|
||||||
"idx": 0,
|
"idx": 0,
|
||||||
"image_field": "image",
|
"image_field": "image",
|
||||||
"image_view": 0,
|
"image_view": 0,
|
||||||
"in_create": 0,
|
"in_create": 0,
|
||||||
"in_dialog": 0,
|
"is_published_field": "show_in_website",
|
||||||
"is_submittable": 0,
|
"is_submittable": 0,
|
||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 0,
|
"istable": 0,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"modified": "2017-02-27 11:42:44.665961",
|
"modified": "2017-03-06 16:04:35.370822",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "ERPNext Foundation",
|
"module": "ERPNext Foundation",
|
||||||
"name": "Service Provider",
|
"name": "Service Provider",
|
||||||
|
|||||||
@@ -9,12 +9,13 @@ from frappe.website.website_generator import WebsiteGenerator
|
|||||||
class ServiceProvider(WebsiteGenerator):
|
class ServiceProvider(WebsiteGenerator):
|
||||||
_website = frappe._dict(
|
_website = frappe._dict(
|
||||||
condition_field = "show_in_website",
|
condition_field = "show_in_website",
|
||||||
template = "templates/generators/service_provider.html"
|
|
||||||
)
|
)
|
||||||
def validate(self):
|
def validate(self):
|
||||||
if not self.route:
|
if not self.route:
|
||||||
self.route = 'service-providers/' + self.scrub(self.name)
|
self.route = 'service-providers/' + self.scrub(self.name)
|
||||||
|
|
||||||
def get_context(self, context):
|
def get_context(self, context):
|
||||||
|
context.parents = [dict(label='All Service Providers in {0}'.format(self.country),
|
||||||
|
route='service-providers?country={0}'.format(self.country))]
|
||||||
if not context.website.startswith('http'):
|
if not context.website.startswith('http'):
|
||||||
context.website = 'http://' + context.website
|
context.website = 'http://' + context.website
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
{% extends "templates/web.html" %}
|
||||||
|
|
||||||
|
{% from "foundation/templates/includes/macros.html" import media %}
|
||||||
|
|
||||||
|
{% block page_content %}
|
||||||
|
<h1 class="media-heading">{{ title }}</h1>
|
||||||
|
<section>
|
||||||
|
<div class="media" style="margin: 45px 0px; ">
|
||||||
|
<div class="media-left">
|
||||||
|
<a href="#">
|
||||||
|
<img class="media-object"
|
||||||
|
src="{{ image }}"
|
||||||
|
style="width: 80px; height: 80px; max-width: 80px; ">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="media-body">
|
||||||
|
{{ introduction }}
|
||||||
|
<table class='table table-bordered small'
|
||||||
|
style='max-width: 400px; margin-bottom: 0px; margin-top: 20px'>
|
||||||
|
<tr>
|
||||||
|
<td style='width: 38.2%'>Country</td>
|
||||||
|
<td>{{ country }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Address</td>
|
||||||
|
<td>{{ (address or '').replace('\n', '<br>') }}</td>
|
||||||
|
</tr>
|
||||||
|
</tr>
|
||||||
|
<td>Phone</td>
|
||||||
|
<td>{{ phone }}</td>
|
||||||
|
</tr>
|
||||||
|
</tr>
|
||||||
|
<td>Email</td>
|
||||||
|
<td><a href="mailto:{{ email }}" target="_blank">
|
||||||
|
{{ email }}</a></td>
|
||||||
|
</tr>
|
||||||
|
</tr>
|
||||||
|
<td>Website</td>
|
||||||
|
<td><a href="{{ website }}" target="_blank">{{ website }}</a></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
{{ details }}
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<p><a class='green-btn button' href="mailto:{{ email }}">Contact {{ title }}</a></p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
<div>
|
||||||
|
<a href={{ route }}>{{ title }}</a>
|
||||||
|
</div>
|
||||||
|
<!-- this is a sample default list template -->
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
frappe.ready(function() {
|
||||||
|
// bind events here
|
||||||
|
})
|
||||||
@@ -0,0 +1,94 @@
|
|||||||
|
{
|
||||||
|
"accept_payment": 0,
|
||||||
|
"allow_comments": 0,
|
||||||
|
"allow_delete": 0,
|
||||||
|
"allow_edit": 1,
|
||||||
|
"allow_incomplete": 0,
|
||||||
|
"allow_multiple": 1,
|
||||||
|
"allow_print": 0,
|
||||||
|
"amount": 0.0,
|
||||||
|
"amount_based_on_field": 0,
|
||||||
|
"creation": "2017-03-06 15:50:21.725600",
|
||||||
|
"doc_type": "Frappe App",
|
||||||
|
"docstatus": 0,
|
||||||
|
"doctype": "Web Form",
|
||||||
|
"idx": 0,
|
||||||
|
"is_standard": 1,
|
||||||
|
"login_required": 1,
|
||||||
|
"max_attachment_size": 0,
|
||||||
|
"modified": "2017-03-06 15:50:21.725600",
|
||||||
|
"modified_by": "Administrator",
|
||||||
|
"module": "ERPNext Foundation",
|
||||||
|
"name": "add-edit-app",
|
||||||
|
"owner": "Administrator",
|
||||||
|
"payment_button_label": "Buy Now",
|
||||||
|
"published": 1,
|
||||||
|
"route": "submit-app",
|
||||||
|
"show_sidebar": 1,
|
||||||
|
"sidebar_items": [],
|
||||||
|
"success_url": "/add-/-edit-app",
|
||||||
|
"title": "Add / Edit App",
|
||||||
|
"web_form_fields": [
|
||||||
|
{
|
||||||
|
"fieldname": "app_name",
|
||||||
|
"fieldtype": "Data",
|
||||||
|
"hidden": 0,
|
||||||
|
"label": "App Name",
|
||||||
|
"max_length": 0,
|
||||||
|
"max_value": 0,
|
||||||
|
"read_only": 0,
|
||||||
|
"reqd": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "category",
|
||||||
|
"fieldtype": "Select",
|
||||||
|
"hidden": 0,
|
||||||
|
"label": "Category",
|
||||||
|
"max_length": 0,
|
||||||
|
"max_value": 0,
|
||||||
|
"options": "Domains\nDeveloper Tools\nFeature\nIntegrations\nPortal\nRegional Extensions",
|
||||||
|
"read_only": 0,
|
||||||
|
"reqd": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "publisher",
|
||||||
|
"fieldtype": "Data",
|
||||||
|
"hidden": 0,
|
||||||
|
"label": "Publisher",
|
||||||
|
"max_length": 0,
|
||||||
|
"max_value": 0,
|
||||||
|
"read_only": 0,
|
||||||
|
"reqd": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "repository_url",
|
||||||
|
"fieldtype": "Data",
|
||||||
|
"hidden": 0,
|
||||||
|
"label": "Repository URL",
|
||||||
|
"max_length": 0,
|
||||||
|
"max_value": 0,
|
||||||
|
"read_only": 0,
|
||||||
|
"reqd": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "url",
|
||||||
|
"fieldtype": "Data",
|
||||||
|
"hidden": 0,
|
||||||
|
"label": "Website URL",
|
||||||
|
"max_length": 0,
|
||||||
|
"max_value": 0,
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
import frappe
|
||||||
|
|
||||||
|
def get_context(context):
|
||||||
|
# do your magic here
|
||||||
|
pass
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
frappe.ready(function() {
|
||||||
|
// bind events here
|
||||||
|
})
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
{
|
||||||
|
"accept_payment": 0,
|
||||||
|
"allow_comments": 0,
|
||||||
|
"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-03-03 12:47:46.824530",
|
||||||
|
"doc_type": "Portal Event",
|
||||||
|
"docstatus": 0,
|
||||||
|
"doctype": "Web Form",
|
||||||
|
"idx": 0,
|
||||||
|
"is_standard": 1,
|
||||||
|
"login_required": 1,
|
||||||
|
"max_attachment_size": 0,
|
||||||
|
"modified": "2017-03-03 12:47:46.824530",
|
||||||
|
"modified_by": "Administrator",
|
||||||
|
"module": "ERPNext Foundation",
|
||||||
|
"name": "add-event",
|
||||||
|
"owner": "Administrator",
|
||||||
|
"payment_button_label": "Buy Now",
|
||||||
|
"published": 1,
|
||||||
|
"route": "add-event",
|
||||||
|
"show_sidebar": 1,
|
||||||
|
"sidebar_items": [],
|
||||||
|
"success_url": "/add-event",
|
||||||
|
"title": "Add Event",
|
||||||
|
"web_form_fields": [
|
||||||
|
{
|
||||||
|
"fieldname": "event_title",
|
||||||
|
"fieldtype": "Data",
|
||||||
|
"hidden": 0,
|
||||||
|
"label": "Event Title",
|
||||||
|
"max_length": 0,
|
||||||
|
"max_value": 0,
|
||||||
|
"read_only": 0,
|
||||||
|
"reqd": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "place",
|
||||||
|
"fieldtype": "Data",
|
||||||
|
"hidden": 0,
|
||||||
|
"label": "Place",
|
||||||
|
"max_length": 0,
|
||||||
|
"max_value": 0,
|
||||||
|
"read_only": 0,
|
||||||
|
"reqd": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "event_date",
|
||||||
|
"fieldtype": "Date",
|
||||||
|
"hidden": 0,
|
||||||
|
"label": "Event Date",
|
||||||
|
"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": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
import frappe
|
||||||
|
|
||||||
|
def get_context(context):
|
||||||
|
# do your magic here
|
||||||
|
pass
|
||||||
@@ -19,13 +19,20 @@ frappe.ready(function() {
|
|||||||
var currency = $('[data-fieldname="amount"]').val(amount[membership_type]);
|
var currency = $('[data-fieldname="amount"]').val(amount[membership_type]);
|
||||||
}
|
}
|
||||||
|
|
||||||
var m = moment();
|
if(get_url_arg('name')) {
|
||||||
$('[data-fieldname="from_date"]').val(m.format()).trigger('change');
|
$('[data-fieldname="membership_type"]').prop('disabled', true);
|
||||||
$('[data-fieldname="to_date"]').val(m.add(1, 'year').format()).trigger('change');
|
$('[data-fieldname="currency"]').prop('disabled', true);
|
||||||
$('[data-fieldname="membership_type"]').on('change', function() { set_amount(); });
|
$('.page-content .btn-form-submit').addClass('hidden');
|
||||||
$('[data-fieldname="currency"]').val('USD')
|
} else {
|
||||||
.on('change', function() {
|
var m = moment();
|
||||||
set_amount();
|
$('[data-fieldname="from_date"]').val(m.format()).trigger('change');
|
||||||
})
|
$('[data-fieldname="to_date"]').val(m.add(1, 'year').format()).trigger('change');
|
||||||
.trigger('change');
|
$('[data-fieldname="membership_type"]').on('change', function() { set_amount(); });
|
||||||
|
$('[data-fieldname="currency"]').val('USD')
|
||||||
|
.on('change', function() {
|
||||||
|
set_amount();
|
||||||
|
})
|
||||||
|
.trigger('change');
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"accept_payment": 0,
|
"accept_payment": 1,
|
||||||
"allow_comments": 0,
|
"allow_comments": 0,
|
||||||
"allow_delete": 0,
|
"allow_delete": 0,
|
||||||
"allow_edit": 1,
|
"allow_edit": 1,
|
||||||
@@ -7,8 +7,10 @@
|
|||||||
"allow_multiple": 1,
|
"allow_multiple": 1,
|
||||||
"allow_print": 0,
|
"allow_print": 0,
|
||||||
"amount": 0.0,
|
"amount": 0.0,
|
||||||
"amount_based_on_field": 0,
|
"amount_based_on_field": 1,
|
||||||
|
"amount_field": "amount",
|
||||||
"creation": "2017-02-28 16:01:36.825878",
|
"creation": "2017-02-28 16:01:36.825878",
|
||||||
|
"currency": "",
|
||||||
"doc_type": "Membership",
|
"doc_type": "Membership",
|
||||||
"docstatus": 0,
|
"docstatus": 0,
|
||||||
"doctype": "Web Form",
|
"doctype": "Web Form",
|
||||||
@@ -16,12 +18,13 @@
|
|||||||
"is_standard": 1,
|
"is_standard": 1,
|
||||||
"login_required": 1,
|
"login_required": 1,
|
||||||
"max_attachment_size": 0,
|
"max_attachment_size": 0,
|
||||||
"modified": "2017-03-02 11:29:54.754782",
|
"modified": "2017-03-07 17:08:02.298823",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "ERPNext Foundation",
|
"module": "ERPNext Foundation",
|
||||||
"name": "memberships",
|
"name": "memberships",
|
||||||
"owner": "Administrator",
|
"owner": "Administrator",
|
||||||
"payment_button_label": "Buy Now",
|
"payment_button_help": "Pay for your membership using PayPal or RazorPay",
|
||||||
|
"payment_button_label": "Pay Now",
|
||||||
"published": 1,
|
"published": 1,
|
||||||
"route": "memberships",
|
"route": "memberships",
|
||||||
"show_sidebar": 1,
|
"show_sidebar": 1,
|
||||||
|
|||||||
@@ -37,24 +37,15 @@ web_include_css = "/assets/foundation/css/style.css"
|
|||||||
home_page = "index"
|
home_page = "index"
|
||||||
|
|
||||||
website_context = {
|
website_context = {
|
||||||
|
"navbar_search": 1,
|
||||||
"brand_html": "<img class='navbar-icon' src='/assets/foundation/img/erpnext-foundation-icon.svg' />ERPNext Foundation",
|
"brand_html": "<img class='navbar-icon' src='/assets/foundation/img/erpnext-foundation-icon.svg' />ERPNext Foundation",
|
||||||
|
"copyright": "ERPNext Open Source Software Foundation",
|
||||||
|
"footer_address": "<br>ERPNext is and will always be 100% Open Source",
|
||||||
"top_bar_items": [
|
"top_bar_items": [
|
||||||
{"label": "My Account", "url": "/me", "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": [
|
"footer_items": [
|
||||||
{"label": "ERPNext", "child_items": [
|
|
||||||
{"label": "Resources", "url": "/resources"},
|
|
||||||
{"label": "Documentation", "url": "https://frappe.github.io/erpnext", "target": "_blank"},
|
|
||||||
{"label": "Frappé Framework", "url": "https://frappe.github.io/frappe", "target": "_blank"},
|
|
||||||
{"label": "GitHub", "url": "https://github.com/frappe/erpnext", "target": "_blank"},
|
|
||||||
|
|
||||||
]},
|
|
||||||
{"label": "Foundation", "child_items": [
|
{"label": "Foundation", "child_items": [
|
||||||
{"label": "About", "url": "/members"},
|
{"label": "About", "url": "/about"},
|
||||||
{"label": "Memberships", "url": "/members"},
|
{"label": "Memberships", "url": "/members"},
|
||||||
{"label": "Contact", "url": "/contact"},
|
{"label": "Contact", "url": "/contact"},
|
||||||
{"label": "Legal", "url": "/legal"},
|
{"label": "Legal", "url": "/legal"},
|
||||||
@@ -63,19 +54,23 @@ website_context = {
|
|||||||
{"label": "Community", "child_items": [
|
{"label": "Community", "child_items": [
|
||||||
{"label": "Service Providers", "url": "/service-providers"},
|
{"label": "Service Providers", "url": "/service-providers"},
|
||||||
{"label": "Jobs", "url": "/jobs"},
|
{"label": "Jobs", "url": "/jobs"},
|
||||||
|
{"label": "Apps", "url": "/apps"},
|
||||||
{"label": "Events", "url": "/events"},
|
{"label": "Events", "url": "/events"},
|
||||||
{"label": "Forum", "url": "https://discuss.erpnext.com", "target": "_blank"}
|
{"label": "Forum", "url": "https://discuss.erpnext.com", "target": "_blank"}
|
||||||
]},
|
]},
|
||||||
|
{"label": "ERPNext", "child_items": [
|
||||||
|
{"label": "Resources", "url": "/resources"},
|
||||||
|
{"label": "Documentation", "url": "https://frappe.github.io/erpnext", "target": "_blank"},
|
||||||
|
{"label": "Frappé Framework", "url": "https://frappe.github.io/frappe", "target": "_blank"},
|
||||||
|
{"label": "GitHub", "url": "https://github.com/frappe/erpnext", "target": "_blank"},
|
||||||
|
{"label": "Forum", "url": "https://discuss.erpnext.com", "target": "_blank"},
|
||||||
|
|
||||||
|
]},
|
||||||
],
|
],
|
||||||
"hide_login": 1,
|
"hide_login": 1,
|
||||||
"favicon": "/assets/frappe_theme/img/favicon.ico"
|
"favicon": "/assets/frappe_theme/img/favicon.ico"
|
||||||
}
|
}
|
||||||
|
|
||||||
website_route_rules = [
|
|
||||||
{"from_route": "/jobs", "to_route": "Portal Job"},
|
|
||||||
{"from_route": "/events", "to_route": "Portal Event"},
|
|
||||||
]
|
|
||||||
|
|
||||||
# website user home page (by Role)
|
# website user home page (by Role)
|
||||||
# role_home_page = {
|
# role_home_page = {
|
||||||
# "Role": "home_page"
|
# "Role": "home_page"
|
||||||
@@ -88,12 +83,14 @@ website_route_rules = [
|
|||||||
# ----------
|
# ----------
|
||||||
|
|
||||||
# automatically create page for each record of this doctype
|
# automatically create page for each record of this doctype
|
||||||
website_generators = ["Service Provider", 'Portal Job']
|
# website_generators = ["Service Provider", 'Portal Job', 'Portal Event']
|
||||||
|
|
||||||
portal_menu_items = [
|
portal_menu_items = [
|
||||||
{'label': 'Service Provider Settings', 'route': '/service-provider-settings'},
|
{'label': 'My Profile', 'route': '/service-provider-settings'},
|
||||||
|
{'label': 'Membership', 'route': '/members/details'},
|
||||||
{'label': 'Jobs', 'route': '/my-jobs'},
|
{'label': 'Jobs', 'route': '/my-jobs'},
|
||||||
{'label': 'Membership', 'route': '/members/details'}
|
{'label': 'Events', 'route': '/add-event'},
|
||||||
|
{'label': 'Apps', 'route': '/submit-app'},
|
||||||
]
|
]
|
||||||
|
|
||||||
# Installation
|
# Installation
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ def migrate():
|
|||||||
frappe.flags.mute_emails = True
|
frappe.flags.mute_emails = True
|
||||||
source = Database(user='095452c6b4', password='FLpERmWJGuh4N3Eb')
|
source = Database(user='095452c6b4', password='FLpERmWJGuh4N3Eb')
|
||||||
|
|
||||||
|
|
||||||
# users = source.sql('select * from tabUser', as_dict=1)
|
# users = source.sql('select * from tabUser', as_dict=1)
|
||||||
# for u in users:
|
# for u in users:
|
||||||
# frappe.get_doc(dict(
|
# frappe.get_doc(dict(
|
||||||
@@ -42,27 +41,45 @@ def migrate():
|
|||||||
# )).insert(ignore_if_duplicate=True, ignore_mandatory=True)
|
# )).insert(ignore_if_duplicate=True, ignore_mandatory=True)
|
||||||
# print d.name
|
# print d.name
|
||||||
|
|
||||||
jobs = source.sql('select * from `tabFrappe Job`', as_dict=True)
|
# jobs = source.sql('select * from `tabFrappe Job`', as_dict=True)
|
||||||
frappe.db.sql('delete from `tabPortal Job`')
|
# frappe.db.sql('delete from `tabPortal Job`')
|
||||||
for j in jobs:
|
# for j in jobs:
|
||||||
if not frappe.db.exists('Country', j.country):
|
# if not frappe.db.exists('Country', j.country):
|
||||||
frappe.get_doc(dict(doctype='Country', country_name=j.country)).insert()
|
# 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
|
||||||
|
|
||||||
|
apps = source.sql('select * from `tabFrappe App`', as_dict=True)
|
||||||
|
frappe.db.sql('delete from `tabFrappe App`')
|
||||||
|
for a in apps:
|
||||||
d = frappe.get_doc(dict(
|
d = frappe.get_doc(dict(
|
||||||
doctype='Portal Job',
|
doctype='Frappe App',
|
||||||
title=j.job_title,
|
app_name = a.app_name,
|
||||||
company_name=j.company_name,
|
badge = a.badge,
|
||||||
country=j.country,
|
category = a.category,
|
||||||
status='Open' if j.status=='Assigned' else j.status,
|
route = a.route,
|
||||||
job_type={
|
url = a.url,
|
||||||
'ERP Implementation': 'Implementation',
|
repository_url = a.repository_url,
|
||||||
'Core Development': 'Feature Development',
|
published = 1,
|
||||||
'Website Development': 'Website Development',
|
description = markdown(a.description),
|
||||||
'Other': 'App Development'
|
owner=a.owner,
|
||||||
}.get(j.job_type, None) or j.job_type,
|
creation=a.creation,
|
||||||
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)
|
)).insert(ignore_if_duplicate=True, ignore_mandatory=True)
|
||||||
print d.name
|
print d.name
|
||||||
@@ -11,7 +11,7 @@ body {
|
|||||||
}
|
}
|
||||||
|
|
||||||
section {
|
section {
|
||||||
padding: 30px 0px;
|
padding: 10px 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
section:last-child {
|
section:last-child {
|
||||||
@@ -23,6 +23,15 @@ section p, section li, section .media-body {
|
|||||||
line-height: 1.8em;
|
line-height: 1.8em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.page_content {
|
||||||
|
font-size: 16px;
|
||||||
|
line-height: 1.8em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page_content li {
|
||||||
|
margin: 10px 0px;
|
||||||
|
}
|
||||||
|
|
||||||
h1 {
|
h1 {
|
||||||
font-size: 32px;
|
font-size: 32px;
|
||||||
}
|
}
|
||||||
@@ -55,10 +64,17 @@ h1, h2, h3, h4 {
|
|||||||
border: 0px;
|
border: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-primary, .btn-primary:visited {
|
.btn-primary, .btn-primary:visited, .btn-primary:active, .btn-primary:focus {
|
||||||
background: #458a49;
|
background: #458a49;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.label {
|
||||||
|
background-color: #d9f7dc;
|
||||||
|
font-size: 14px;
|
||||||
|
padding: 5px 10px;
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
.green-btn {
|
.green-btn {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
@@ -73,6 +89,11 @@ h1, h2, h3, h4 {
|
|||||||
padding-top: 0px;
|
padding-top: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.footer-bottom-line .text-muted {
|
||||||
|
font-size: 14px;
|
||||||
|
color: #161c23 !important;
|
||||||
|
}
|
||||||
|
|
||||||
.row-full{
|
.row-full{
|
||||||
width: 100vw;
|
width: 100vw;
|
||||||
position: relative;
|
position: relative;
|
||||||
@@ -82,14 +103,29 @@ h1, h2, h3, h4 {
|
|||||||
left: 50%;
|
left: 50%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.foundation-media {
|
.with-border {
|
||||||
border: 1px solid #161c23;
|
border: 1px solid #161c23;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
padding: 15px;
|
padding: 15px;
|
||||||
margin-bottom: 30px;
|
margin-bottom: 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
a .media-body:hover, a .media-heading:hover {
|
.with-border h3 {
|
||||||
|
margin-top: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
background-color: #fffdaf;
|
||||||
|
}
|
||||||
|
|
||||||
|
.with-border.clickable:hover {
|
||||||
|
border-color: #458a49;
|
||||||
|
background-color: #d9f7dc;
|
||||||
|
background-color: #fffdaf;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.with-border a, .with-border a:hover {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,6 +133,13 @@ a .media-body:hover, a .media-heading:hover {
|
|||||||
background-color: #d9f7dc;
|
background-color: #d9f7dc;
|
||||||
border-top: 4px solid #458a49;
|
border-top: 4px solid #458a49;
|
||||||
padding-bottom: 0px;
|
padding-bottom: 0px;
|
||||||
|
padding-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
.web-footer {
|
||||||
|
padding-left: 15px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar-default {
|
.navbar-default {
|
||||||
@@ -115,18 +158,16 @@ a .media-body:hover, a .media-heading:hover {
|
|||||||
width: 40%;
|
width: 40%;
|
||||||
}
|
}
|
||||||
|
|
||||||
#website-post-login {
|
/*#website-post-login {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
.gold-member {
|
|
||||||
border: 1px solid #161c23;
|
|
||||||
border-radius: 3px;
|
|
||||||
padding: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.silver-member {
|
.silver-member {
|
||||||
border: 1px solid #161c23;
|
|
||||||
border-radius: 3px;
|
|
||||||
padding: 0px 15px;
|
padding: 0px 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.page-breadcrumbs .breadcrumb {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
font-size: 16px;
|
||||||
|
/*color: #8D99A6;*/
|
||||||
|
}
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
{% extends "templates/web.html" %}
|
|
||||||
|
|
||||||
{% from "foundation/templates/includes/macros.html" import media %}
|
|
||||||
|
|
||||||
{% block page_content %}
|
|
||||||
<section>
|
|
||||||
<h1 class="media-heading">{{ title }}</h1>
|
|
||||||
<p><a href="/service-providers?country={{ country }}">
|
|
||||||
All ERPNext Serivce Providers in {{ country }}</a></p>
|
|
||||||
<div class="media" style="margin: 45px 0px; ">
|
|
||||||
<div class="media-left">
|
|
||||||
<a href="#">
|
|
||||||
<img class="media-object"
|
|
||||||
src="{{ image }}"
|
|
||||||
style="width: 80px; height: 80px; max-width: 80px; ">
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<div class="media-body">
|
|
||||||
{{ introduction }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<table class='table table-bordered small' style='max-width: 400px; margin-bottom: 0px;'>
|
|
||||||
<tr>
|
|
||||||
<td style='width: 38.2%'>Country</td>
|
|
||||||
<td>{{ country }}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Address</td>
|
|
||||||
<td>{{ address.replace('\n', '<br>') }}</td>
|
|
||||||
</tr>
|
|
||||||
</tr>
|
|
||||||
<td>Phone</td>
|
|
||||||
<td>{{ phone }}</td>
|
|
||||||
</tr>
|
|
||||||
</tr>
|
|
||||||
<td>Email</td>
|
|
||||||
<td><a href="mailto:{{ email }}" target="_blank">{{ email }}</a></td>
|
|
||||||
</tr>
|
|
||||||
</tr>
|
|
||||||
<td>Website</td>
|
|
||||||
<td><a href="{{ website }}" target="_blank">{{ website }}</a></td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
{{ details }}
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<p><a class='green-btn button' href="mailto:{{ email }}">Contact {{ title }}</a></p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
{% endblock %}
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
{% macro media(title, content, image, link) %}
|
{% macro media(title, content, image, link) %}
|
||||||
<div class="media foundation-media"
|
<div class="media with-border {% if link %}clickable{% endif %}"
|
||||||
{% if link %}style="cursor: pointer;"{% endif %}
|
{% if link %}style="cursor: pointer;"{% endif %}
|
||||||
{% if link %}onclick="location.href='{{ link }}'"{% endif %}>
|
{% if link %}onclick="location.href='{{ link }}'"{% endif %}>
|
||||||
<div class="media-left">
|
<div class="media-left">
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
<div style='margin-bottom: 30px; max-width: 600px;'>
|
|
||||||
<a href="/{{ doc.route }}"><h3>{{ doc.title }}</h3></a>
|
|
||||||
<p class='text-muted small'>{{ doc.place }} | {{ frappe.format_date(date) }}</p>
|
|
||||||
<p>{{ html2text(doc.description[:200]) }}{% if doc.description|len > 200 %}...{% endif %}</p>
|
|
||||||
</div>
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
<div style='margin-bottom: 30px; max-width: 600px;'>
|
|
||||||
<a href="/{{ doc.route }}"><h3>{{ doc.title }}</h3></a>
|
|
||||||
<p class='text-muted small'>{{ doc.country }} | {{ doc.job_type }}</p>
|
|
||||||
<p>{{ html2text(doc.description[:200]) }}{% if doc.description|len > 200 %}...{% endif %}</p>
|
|
||||||
</div>
|
|
||||||
@@ -25,5 +25,7 @@
|
|||||||
{{ 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.",
|
{{ 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") }}
|
"https://discuss.erpnext.com/user_avatar/discuss.erpnext.com/prakash/240/2703_1.png") }}
|
||||||
|
|
||||||
|
<p><a href="/contact">Want to talk to someone in the foundation? Get in touch</a></p>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -10,32 +10,16 @@
|
|||||||
<h1>ERPNext Foundation</h1>
|
<h1>ERPNext Foundation</h1>
|
||||||
<p class='lead'>Free and Open Source Business Software for Millions of Entrepreneurs Worldwide</p>
|
<p class='lead'>Free and Open Source Business Software for Millions of Entrepreneurs Worldwide</p>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<div class='with-border'>
|
||||||
<h3>What is ERPNext?</h3>
|
<h3>What is ERPNext?</h3>
|
||||||
<p>ERPNext is a modern, fully featured open source Enterprise Resource Planning (ERP) system that is designed for small and medium sized businesses.
|
<p>ERPNext is a modern, fully featured open source Enterprise Resource Planning (ERP) system that is designed for small and medium sized businesses that includes modules to help you manage Financial Accounting, Sales and CRM, Billing, Manufacturing, Inventory, HR and Payroll, Projects, E-Commerce and much more.</p>
|
||||||
<ul>
|
<p><a href="/resources" class="button green-btn">Start using ERPNext</a></p>
|
||||||
<li>ERPNext includes modules to help you manage Financial Accounting, Sales and CRM, Billing, Manufacturing, Inventory, HR and Payroll, Projects, E-Commerce and much more.
|
</div>
|
||||||
<li>ERPNext is designed to be <i>web-first</i> and is built for entreprenuers who want modern, clean design and great usablity. It is deeply integrated with email and other services and is designed to be deployed and managed on any remote server.
|
|
||||||
<li>ERPNext is <i>100% free and open source</i> (there are no paid modules) and is available under the GNU General Public License.
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
<div class='with-border'>
|
||||||
<h3>What is the ERPNext Foundation?</h3>
|
<h3>What is the ERPNext Foundation?</h3>
|
||||||
<p>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.</p>
|
<p>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.</p>
|
||||||
</section>
|
<p><a href="/members" class="button green-btn">Learn about Memberships</a></p>
|
||||||
|
</div>
|
||||||
<section>
|
|
||||||
<h3>How do I Get Started?</h3>
|
|
||||||
<p>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.</p>
|
|
||||||
<p>Alternatively you can download the Virtual Machine and run it on your desktop</p>
|
|
||||||
<p>You can also sign up for a free one user account on ERPNext hosting services like erpnext.com</p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<h3>Get Involved</h3>
|
|
||||||
<p>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.</p>
|
|
||||||
<p><a href="/members" class="button green-btn">Become A Member</a></p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
107
foundation/www/legal.md
Normal file
107
foundation/www/legal.md
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
# ERPNext Opens Source Software Foundation
|
||||||
|
|
||||||
|
## Memorandum of Association
|
||||||
|
|
||||||
|
Company Registration Number (CIN): U74999MH2016NPL288653
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<div class='text-center'>
|
||||||
|
THE COMPANIES ACT, 2013<br><br>
|
||||||
|
|
||||||
|
MEMORANDUM OF ASSOCIATION<br><br>
|
||||||
|
|
||||||
|
OF<br><br>
|
||||||
|
|
||||||
|
ERPNext Open Source Software Foundation<br><br>
|
||||||
|
|
||||||
|
(A Company limited by Share Capital Not for Profit under Section 8 of the Companies Act, 2013)
|
||||||
|
</div>
|
||||||
|
|
||||||
|
I. The name of the Company is ERPNext Open Source Software Foundation.
|
||||||
|
|
||||||
|
II. The registered office of the Company will be situated in the State of Maharashtra within the jurisdiction of Registrar of Companies, Maharashtra at Mumbai.
|
||||||
|
|
||||||
|
III. (A) THE OBJECTS FOR WHICH THE COMPANY IS ESTABLISHED ARE:
|
||||||
|
|
||||||
|
1. Educating, inspiring, improving, and furthering the development of the open-source enterprise resource planning (ERP) software “ERPNext” as well as the underlying software framework “Frappe Framework” and promoting its value to both users and developers.
|
||||||
|
1. Soliciting and managing contributions to the Frappe Framework and ERPNext code base.
|
||||||
|
1. Publicising, promoting the adoption of, and facilitating the ongoing development of related technology to Frappe Framework and ERPNext as well as educational resources. This includes, but is not limited to, maintaining a public web site, planning conferences and offering grants to Frappe Framework or ERPNext-related open source projects.
|
||||||
|
1. Building an ecosystem and enhancing communication within the ecosystem.
|
||||||
|
1. Creating products and marketplaces with which the community can interact and share information and services.
|
||||||
|
1. Continuously improving the project by sponsoring features, documentation, and fixing bugs.
|
||||||
|
1. Promoting the development of free and open source software, in India as well as around the globe and generating awareness about free and open source software in the general public and specifically among computer programmers and students.
|
||||||
|
1. Empowering local programmers to the use of free platforms, tools and technologies that provide the means to develop local solutions to local problems.
|
||||||
|
|
||||||
|
No objects of the Company will be carried out without obtaining prior approval/ NOC from concerned authority whenever required.
|
||||||
|
|
||||||
|
None of the objects of the Company will be carried out on commercial basis.
|
||||||
|
|
||||||
|
(B.) MATTERS WHICH ARE NECESSARY FOR FURTHERANCE OF THE OBJECTS SPECIFIED IN CLAUSE III(A) ARE:
|
||||||
|
|
||||||
|
1. To assist in setting up software groups and promoting group-centered activities.
|
||||||
|
2. To provide training on appropriate skills and enterprise management in connection with software developments.
|
||||||
|
3. Training software professionals on optimum and safe use of production inputs to help ensure the safety of both software professionals and end users.
|
||||||
|
4. To assist software professionals to build better technology related to ERPNext.
|
||||||
|
5. To conduct research and development in software and developing and supporting higher programmers.
|
||||||
|
6. To provide assistance to software professionals for marketing their products both in India and abroad, as well as providing all marketing information.
|
||||||
|
7. To conduct market studies in India and abroad, as well as on an adhoc basis.
|
||||||
|
8. To provide support to free software by way of documentation, expert help or any other means.
|
||||||
|
9. To offer services such as adjudication and conflict resolution within the free software domain.
|
||||||
|
10. To give opportunities to young professionals in the field of software development to acquire first-hand field experience.
|
||||||
|
11. To engage experts/consultants in information technology to educate software programmers on modern software development methods suitable to their professional needs.
|
||||||
|
12. To appoint agents or managers and constituting branches or agencies of the Company and conducting the objects of the Company through such agencies or branches within or outside of India.
|
||||||
|
13. To raise awareness of the public and software professionals of the advantages of free and open-source software through regular media campaigns.
|
||||||
|
14. Disseminating information useful to the software professionals through lectures, discussions, books, correspondence, and other methods.
|
||||||
|
15. To create and maintain relationships with any agency dedicated to establishing standards of ERP and related software.
|
||||||
|
16. To advise government, local authorities and public bodies on measures to be taken to prevent any contravention or undue unfair advantage by any of software professionals concerned where such contravention would affect the produce/price of software programmes.
|
||||||
|
17. To prepare, edit, print, publish, issue, acquire, and circulate books, papers, periodicals, gazettes, audio, video, and other literature.
|
||||||
|
18. To prepare, edit, print, publish, issue, acquire and circulate books, papers, periodicals, upon the industry, trade or commerce relating to the software.
|
||||||
|
19. Constructing, acquiring, purchasing, or leasing lands, buildings or other immovable or movable property that the company may from time to time deem necessary to acquire, purchase or take on lease.
|
||||||
|
20. Selling, improving, managing, developing, exchanging, loaning, subletting, mortgaging, disposing of, or otherwise dealing with all or any part of the property of the Company without entering into real estate business.
|
||||||
|
21. To enter into contracts in connection with the objectives of the Company including drawing, making, accepting, endorsing, discounting, and executing negotiable instruments and investing the surplus money not immediately required of the Company in any bank as approved by the Board of Directors.
|
||||||
|
22. To subscribe to, becoming a member of, and co-operating with any other association, whether incorporated or not, whose objects are, altogether or in part, similar to those contained in this Memorandum and to obtain from and communicate to any such Association such information as may likely to fulfill the objects of this Company.
|
||||||
|
23. To obtain loans, borrowings and financial facilities from banks, financial institutions, companies or corporations, and to furnish security by way of mortgage or other financial arrangements using the Company’s properties and assets.
|
||||||
|
24. To manage the Company with an institutional framework marked by independent and autonomous authority, responsibility, and flexibility for dynamic operation to achieve the following:
|
||||||
|
25. To encourage the mobility of staff from other organisations who can bring technical expertise to enrich the Company, including the various government departments, state/central public sector undertakings and autonomous organisations and societies to the Company.
|
||||||
|
26. To establish special procedures to facilitate the functioning of the Company and its various operational activities, including matters relating to recruitment, personnel, finance, administration, purchasing, and travel.
|
||||||
|
27. To procure prior approvals, no objection certificates, or licenses from the concerned authorities wherever required and / or prescribed, to carry out the main objects of the Company, including to comply with requirements of the Income Tax Act, 1961, Income Tax Rules, 1962, and any amendments thereto.
|
||||||
|
28. To amalgamate with, or enter into partnership or into any arrangement for sharing profits, union of interest, joint venture, reciprocal concession or co-operation with, any person or company carrying on, engaged in, or proposing to carry on or engage in, any business or transaction which the Company is authorized to carry on or engage in, or which is capable of being conducted so as directly or indirectly to benefit the Company, and to take or otherwise acquire and hold, sell or otherwise deal with shares, stock, securities, obligations or other interest in any such person or company, and to subsidize or otherwise assist any such person or company.
|
||||||
|
29. To acquire all or any part of the business, goodwill, assets or property, contracts, agreements rights, privileges, effects and to undertake any liabilities of any person or company possessed of property suitable for any purpose of the furthermore of the objects of the Company, or carrying on any business which the Company is authorized to carry on, and upon any terms and for any consideration, and in particular for money or money's worth or in consideration of the issue of shares, debentures, securities or obligations of the Company, or otherwise as may be deemed fit.
|
||||||
|
|
||||||
|
30. To apply for, promote and obtain any act, privilege, concession, license, authorization of any Government, state or municipal provisional order or license of any authority for enabling the Company to carry out its objects into effect or for extending any of the powers of the Company, or for effect any modification of the Company’s constitution, or for any other purpose which may seem expedient and to oppose any proceedings or applications which may seem calculated directly or indirectly to prejudice the interest of the Company or its members.
|
||||||
|
31. To undertake and execute any trusts, the undertaking of which may seem to the Company desirable and either gratuitous or otherwise.
|
||||||
|
32. To indemnify officers, directors, agents and servants of the Company against proceedings, costs, damages claims and demands in respect of anything done or ordered to be done by them for and in the interest of the Company, or any loss damage or misfortune, whatever, which shall happen in the execution of the duties of their office or in relation thereof.
|
||||||
|
33. To procure the Company to be registered or recognized in any part of the world.
|
||||||
|
34. To establish offices at such place or places in India or elsewhere in order to carry out the objects of the Company.
|
||||||
|
35. To open and operate upon accounts of any description with any bank or banks and close the same.
|
||||||
|
36. The doing of all other lawful things as are necessary, incidental or conducive to the attainment of the above object.
|
||||||
|
|
||||||
|
Provided that the company shall not support with its funds, or endeavour to impose on, or procure to be observed by, its member or others, any regulation or restriction which, if an object of the company, would make it a Trade Union.
|
||||||
|
|
||||||
|
IV. The objects of the Company extend to all countries in the world where the ecosystem exists.
|
||||||
|
|
||||||
|
V.
|
||||||
|
|
||||||
|
1. The profits, if any, or other income and property of the company, whensoever derived, shall be applied, solely for the promotion of its objects as set forth in this memorandum.
|
||||||
|
1. No portion of the profits, other income or property aforesaid shall be paid or transferred, directly or indirectly, by way of dividend, bonus or otherwise by way of profit, to persons who, at any time are, or have been, members of the company or to any one or more of them or to any persons claiming through any one or more of them.
|
||||||
|
1. No remuneration or other benefit in money or money's worth shall be given by the company to any of its members, whether officers or members of the company or not, except payment of out-of-pocket expenses, reasonable and proper interest on money lent, or reasonable and proper rent on premises let to the company.
|
||||||
|
1. Nothing in this clause shall prevent the payment by the company in good faith of prudent remuneration to any of its officers or servants (not being members) or to any other person (not being member), in return for any services actually rendered to the company.
|
||||||
|
1. Nothing in clauses (iii) and (iv) shall prevent the payment by the company in good faith of prudent remuneration to any of its members in return for any services (not being services of a kind which are required to be rendered by a member), actually rendered to the company.
|
||||||
|
|
||||||
|
VI. No alteration shall be made to this Memorandum of Association or to the Articles of Association of the Company which are for the time being in force, unless the alteration has been previously submitted to and approved by the Registrar of Companies.
|
||||||
|
|
||||||
|
VII. The liability of the members is limited.
|
||||||
|
|
||||||
|
VIII.
|
||||||
|
|
||||||
|
(a) The authorized Share Capital of the Company is Rs. 1,00,000/- (Indian Rupees One Lac only) divided into 10,000 (Ten Thousand) Equity Shares of Rs. 10/- (Indian Rupees Ten only) each.
|
||||||
|
|
||||||
|
(b) The Minimum paid-up capital of the Company is Rs. 1,00,000/- (Indian Rupees One Lac only) divided into 10,000 (Ten Thousand) Equity Shares of Rs. 10/- (Indian Rupees Ten only) each.
|
||||||
|
|
||||||
|
True accounts shall be kept of all sums of money received and expended by the company and the matters in respect of which such receipts and expenditure take place, and of the property, credits and liabilities of the company; and, subject to any reasonable restrictions as to the time and manner of inspecting the same that may be imposed in accordance with the regulations of the company for the time being in force, the accounts shall be open to the inspection of the members. Once at least in every year, the accounts of the company shall be examined and the correctness of the balance-sheet and the income and expenditure account ascertained by one or more properly qualified auditor or auditors.
|
||||||
|
|
||||||
|
If upon a winding up or dissolution of the company, there remains, after the satisfaction of all the debts and liabilities, any property whatsoever, the same shall not be distributed amongst the members of the company but shall be given or transferred to such other company having objects similar to the objects of this company, subject to such conditions as the Tribunal may impose, or may be sold and proceeds thereof credited to the Rehabilitation and Insolvency Fund formed under section 269 of the Companies Act, 2013.
|
||||||
|
|
||||||
|
The Company can be amalgamated only with another company registered under section 8 of the Companies Act, 2013 and having similar objects.
|
||||||
|
|
||||||
@@ -5,24 +5,29 @@
|
|||||||
{% block page_content %}
|
{% block page_content %}
|
||||||
<h2>Your Memberships</h2>
|
<h2>Your Memberships</h2>
|
||||||
{% if frappe.session.user=='Guest' %}
|
{% if frappe.session.user=='Guest' %}
|
||||||
<p>You must first sign up and login to become a member</p>
|
<div class='with-border'>
|
||||||
<p><a href="/login" class='button green-btn'>Login</a></p>
|
<p>You must first sign up and login to become a member</p>
|
||||||
|
<p><a href="/login" class='button green-btn'>Login</a></p>
|
||||||
|
</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
|
|
||||||
{% if not last_membership %}
|
{% if not last_membership %}
|
||||||
<p>You have never been a member of ERPNext Foundation. Click on the button below to start a new membership</p>
|
<p>You have never been a member of ERPNext Foundation. Click on the button below to start a new membership</p>
|
||||||
<p><a href="/memberships?new=1" class='btn btn-primary'>Become A Member</a></p>
|
<p><a href="/memberships?new=1" class='btn btn-primary'>Become A Member</a></p>
|
||||||
{% elif frappe.utils.getdate(last_membership[-1].to_date) < frappe.utils.getdate(frappe.utils.nowdate()) %}
|
|
||||||
|
{% elif frappe.utils.getdate(last_membership.to_date) < frappe.utils.getdate(frappe.utils.nowdate()) %}
|
||||||
<p>Your Membership has expired, Click the button below to start a new membership</p>
|
<p>Your Membership has expired, Click the button below to start a new membership</p>
|
||||||
<p><a href="/memberships?new=1" class='btn btn-primary'>Renew</a></p>
|
<p><a href="/memberships?new=1" class='btn btn-primary'>Renew</a></p>
|
||||||
<p><a href="/memberships" class='text-muted'>View Membership History</a></p>
|
<p><a href="/memberships" class='text-muted'>View Membership History</a></p>
|
||||||
{% elif frappe.utils.getdate(frappe.utils.add_days(last_membership[-1].to_date, -30)) < frappe.utils.getdate(frappe.utils.nowdate())%}
|
|
||||||
|
{% elif frappe.utils.getdate(frappe.utils.add_days(last_membership.to_date, -30)) < frappe.utils.getdate(frappe.utils.nowdate())%}
|
||||||
<p>Your Membership is due to expire soon. Click on the button below to renew</p>
|
<p>Your Membership is due to expire soon. Click on the button below to renew</p>
|
||||||
<p><a href="/memberships?new=1" class='btn btn-primary'>Renew</a></p>
|
<p><a href="/memberships?new=1" class='btn btn-primary'>Renew</a></p>
|
||||||
<p><a href="/memberships" class='text-muted'>View Membership History</a></p>
|
<p><a href="/memberships" class='text-muted'>View Membership History</a></p>
|
||||||
|
|
||||||
{% else %}
|
{% else %}
|
||||||
<p>Welcome back <b>{{ last_membership[-1].membership_type }} Member!</b></p>
|
<p>Welcome back <b>{{ last_membership.membership_type }} Member!</b></p>
|
||||||
<p>Your membership is due to expire on {{ frappe.format_date(last_membership[-1].to_date) }}.
|
<p>Your membership is due to expire on {{ frappe.format_date(last_membership.to_date) }}.
|
||||||
<p><a href="/memberships" class='text-muted'>View Membership History</a></p>
|
<p><a href="/memberships" class='text-muted'>View Membership History</a></p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import frappe
|
import frappe
|
||||||
|
import foundation
|
||||||
|
|
||||||
def get_context(context):
|
def get_context(context):
|
||||||
if frappe.session.user != 'Guest':
|
if frappe.session.user != 'Guest':
|
||||||
context.show_sidebar = True
|
context.show_sidebar = True
|
||||||
context.last_membership = frappe.get_all('Membership', 'name,to_date,membership_type',
|
context.last_membership = foundation.get_last_membership()
|
||||||
dict(member=frappe.session.user), order_by='to_date desc', limit=1)
|
|
||||||
|
|||||||
@@ -14,19 +14,19 @@
|
|||||||
<p>
|
<p>
|
||||||
The ERPNext Foundation aims to be driven by its members. By becoming a members, you get
|
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
|
a preferred listing on the ERPNext Job Board and access to incoming requests for implementation
|
||||||
and customization jobs
|
and customization jobs<br>
|
||||||
</p>
|
</p>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<h3>Membership Types</h3>
|
<h3>Membership Types</h3>
|
||||||
{{ media("Gold Member",
|
{{ 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.",
|
"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. <br>Membership Rate: <b>$5000</b> | ₹ 3,00,000",
|
||||||
"gold.png") }}
|
"gold.png") }}
|
||||||
{{ media("Silver Member",
|
{{ 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 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. <br>Membership Rate: <b>$1500</b> | ₹ 1,00,000",
|
||||||
"silver.png") }}
|
"silver.png") }}
|
||||||
{{ media("Individual Member",
|
{{ 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.",
|
"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. <br>Membership Rate: <b>$200</b> | ₹ 10,000",
|
||||||
"medal.png") }}
|
"medal.png") }}
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
|
|||||||
@@ -10,7 +10,23 @@
|
|||||||
<p class='lead'>Information to help you get started on ERPNext</p>
|
<p class='lead'>Information to help you get started on ERPNext</p>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
|
<h3>Start Using ERPNext</h3>
|
||||||
|
<p>There are many ways you can start using ERPNext, either on your own machine or on a remote machine or on the cloud.</p>
|
||||||
|
|
||||||
|
{{ media("Download Virtual Machine", "Use ERPNext on your current machine by downloading the pre-set Virtual Machine. The Virtual Machine is updated daily and contains both the developer and production versions",
|
||||||
|
"manual.png", "https://erpnext.com/download") }}
|
||||||
|
|
||||||
|
{{ media("Install and Setup Bench", "Bench is the tool you need to setup and manage ERPNext instances on your machine. To start a fresh install on a new machine or VM, just run the bench easy install on a fresh Linux installation (Ubuntu/CentOS/Debian). Warning: You need to be familiar with the Linux command line",
|
||||||
|
"manual.png", "https://github.com/frappe/bench") }}
|
||||||
|
|
||||||
|
{{ media("Sign up on ERPNext.com", "ERPNext.com offers 1 user free for unlimited time. It is a great way to quickly evaluate ERPNext for the first time.",
|
||||||
|
"manual.png", "https://erpnext.com/pricing") }}
|
||||||
|
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
|
||||||
<h3>User Resources</h3>
|
<h3>User Resources</h3>
|
||||||
|
<p>ERPNext is easy to get started, if you are looking for specific functionality, dive into the user manual, or just search using your favorite search engine</p>
|
||||||
|
|
||||||
{{ media("User Manual", "Deep dive into ERPNext functionality with the ERPNext manual. Covers all issues regarding setup, operations and customizations",
|
{{ 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") }}
|
"manual.png", "https://frappe.github.io/erpnext/user") }}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
{% macro gold_member(m) %}
|
{% macro gold_member(m) %}
|
||||||
<div class='gold-member'>
|
<div class='gold-member'>
|
||||||
<div class="media" style="cursor: pointer;" onclick="location.href='{{ m.route }}'">
|
<div class="media with-border clickable" style="cursor: pointer;" onclick="location.href='{{ m.route }}'">
|
||||||
<div class="media-left">
|
<div class="media-left">
|
||||||
<a href="{{ m.route }}">
|
<a href="{{ m.route }}">
|
||||||
<img class="media-object" src="{{ m.image or '/assets/foundation/img/gold.png' }}"
|
<img class="media-object" src="{{ m.image or '/assets/foundation/img/gold.png' }}"
|
||||||
@@ -21,10 +21,9 @@
|
|||||||
|
|
||||||
{% macro silver_member(m) %}
|
{% macro silver_member(m) %}
|
||||||
<div class='col-sm-4'>
|
<div class='col-sm-4'>
|
||||||
<div class='silver-member'>
|
<div class='silver-member with-border clickable' style="cursor: pointer;" onclick="location.href='{{ m.route }}'">
|
||||||
<h4>{{ m.title }}</h4>
|
<h4>{{ m.title }}</h4>
|
||||||
<p>{{ m.introduction[:100] }}</p>
|
<p>{{ m.introduction[:100] }}</p>
|
||||||
<p><a class='btn btn-default btn-sm' href='{{ m.route }}'>Details</a></p>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endmacro %}
|
{% endmacro %}
|
||||||
@@ -39,9 +38,8 @@
|
|||||||
{% endmacro %}
|
{% endmacro %}
|
||||||
|
|
||||||
{% block page_content %}
|
{% block page_content %}
|
||||||
<h1>{{ title }}</h1>
|
<h1 class='media-heading'>{{ title }}</h1>
|
||||||
{% if form_dict.country %}
|
{% if form_dict.country %}
|
||||||
<p><a href="/service-providers">All Serivce Providers</a></p>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<section>
|
<section>
|
||||||
<h2>Gold Members</h2>
|
<h2>Gold Members</h2>
|
||||||
|
|||||||
@@ -5,6 +5,10 @@ def get_context(context):
|
|||||||
context.title = 'Service Providers'
|
context.title = 'Service Providers'
|
||||||
context.gold_members = []
|
context.gold_members = []
|
||||||
|
|
||||||
|
if frappe.form_dict.country:
|
||||||
|
context.parents = [dict(label='All Service Providers',
|
||||||
|
route='service-providers')]
|
||||||
|
|
||||||
filters = dict()
|
filters = dict()
|
||||||
if frappe.form_dict.country:
|
if frappe.form_dict.country:
|
||||||
filters['country'] = frappe.form_dict.country
|
filters['country'] = frappe.form_dict.country
|
||||||
|
|||||||
9
foundation/www/terms.css
Normal file
9
foundation/www/terms.css
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
.page_content {
|
||||||
|
max-width: 700px;
|
||||||
|
font-size: 16px;
|
||||||
|
line-height: 1.8em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page_content li {
|
||||||
|
margin: 10px 0px;
|
||||||
|
}
|
||||||
14
foundation/www/terms.md
Normal file
14
foundation/www/terms.md
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
# Terms
|
||||||
|
|
||||||
|
These terms apply if you choose to become an ERPNext Open Source Software Foundation (EOSSF).
|
||||||
|
|
||||||
|
1. The period of membership is 1 year. You have to renew it every year to continue your association.
|
||||||
|
1. The membership fee is non refundable.
|
||||||
|
1. As a part of the membership, you will be acknowleged as an supporter of EOSSF and get premium listing on the website.
|
||||||
|
1. The membership does not guarantee you a listing. If you / your company is found using the listing in an improper manner, like spreading false information, using your membership to represent the organization without authorization, then EOSSF has the right to cancel your listing.
|
||||||
|
1. As a member you will get access to leads, jobs listing on the community portal. You are required not to resell this information, send inappropriate (spam) emails to the persons posting jobs.
|
||||||
|
1. Brand: If you are a member, you can use your membership in your website / other marketing material as "ERPNext Supporter" along with your membership grade. The membership does not entitle you to use the ERPNext brand in a way that you are an official representative.
|
||||||
|
1. As a member you will have the opportunity to participate in various committees. These committees will be invite only and you are expected to contribute your time and expertise if you want to remain a participant of the committee.
|
||||||
|
1. The membership does not give you any decision making right on the foundation unless you are a member of a committee.
|
||||||
|
|
||||||
|
If you have questions, please feel to email us at [foundation@erpnext.org](mailto:foundation@erpnext.com)
|
||||||
Reference in New Issue
Block a user