├── .github └── FUNDING.yml ├── .gitignore ├── MANIFEST.in ├── README.md ├── license.txt ├── requirements.txt ├── restaurant_management ├── __init__.py ├── config │ ├── __init__.py │ ├── desktop.py │ ├── docs.py │ └── restaurant_management.py ├── hooks.py ├── modules.txt ├── patches.txt ├── public │ ├── build.json │ ├── js │ │ ├── RM.helper.js │ │ ├── clusterize.min.js │ │ ├── drag.js │ │ ├── interact.min.js │ │ └── object-manage.js │ └── restaurant │ │ ├── css │ │ ├── action-buttons.css │ │ ├── editor-order.css │ │ ├── food-command.css │ │ ├── order-buttons.css │ │ ├── order-items-container.css │ │ ├── order-items.css │ │ ├── order-manage.css │ │ ├── process-manage.css │ │ ├── product-list.css │ │ ├── restaurant-object.css │ │ └── restaurant-room.css │ │ └── js │ │ ├── food-command-class.js │ │ ├── invoice-class.js │ │ ├── order-item-class.js │ │ ├── order-manage-class.js │ │ ├── pay-form-class.js │ │ ├── pos-restaurant-controller.js │ │ ├── process-manage-class.js │ │ ├── product-item-class.js │ │ ├── restaurant-object-class.js │ │ ├── restaurant-room-class.js │ │ └── table-order-class.js ├── restaurant_management │ ├── __init__.py │ ├── desk_form │ │ ├── __init__.py │ │ ├── order_item_editor │ │ │ ├── __init__.py │ │ │ ├── order_item_editor.js │ │ │ ├── order_item_editor.json │ │ │ └── order_item_editor.py │ │ ├── order_item_note │ │ │ ├── __init__.py │ │ │ ├── order_item_note.js │ │ │ ├── order_item_note.json │ │ │ └── order_item_note.py │ │ ├── payment_order │ │ │ ├── __init__.py │ │ │ ├── payment_order.js │ │ │ ├── payment_order.json │ │ │ └── payment_order.py │ │ ├── restaurant_order_customer │ │ │ ├── __init__.py │ │ │ ├── restaurant_order_customer.js │ │ │ ├── restaurant_order_customer.json │ │ │ └── restaurant_order_customer.py │ │ ├── restaurant_order_dinners │ │ │ ├── __init__.py │ │ │ ├── restaurant_order_dinners.js │ │ │ ├── restaurant_order_dinners.json │ │ │ └── restaurant_order_dinners.py │ │ ├── restaurant_permission_manage │ │ │ ├── __init__.py │ │ │ ├── restaurant_permission_manage.js │ │ │ ├── restaurant_permission_manage.json │ │ │ └── restaurant_permission_manage.py │ │ ├── restaurant_production_center │ │ │ ├── __init__.py │ │ │ ├── restaurant_production_center.js │ │ │ ├── restaurant_production_center.json │ │ │ └── restaurant_production_center.py │ │ ├── restaurant_room │ │ │ ├── __init__.py │ │ │ ├── restaurant_room.js │ │ │ ├── restaurant_room.json │ │ │ └── restaurant_room.py │ │ └── restaurant_table │ │ │ ├── __init__.py │ │ │ ├── restaurant_table.js │ │ │ ├── restaurant_table.json │ │ │ └── restaurant_table.py │ ├── desk_formorder_item_note.json │ ├── desk_page │ │ └── restaurant │ │ │ └── restaurant.json │ ├── doctype │ │ ├── __init__.py │ │ ├── order_entry_item │ │ │ ├── __init__.py │ │ │ ├── order_entry_item.js │ │ │ ├── order_entry_item.json │ │ │ ├── order_entry_item.py │ │ │ └── test_order_entry_item.py │ │ ├── order_payment │ │ │ ├── __init__.py │ │ │ ├── order_payment.json │ │ │ └── order_payment.py │ │ ├── production_center_group │ │ │ ├── __init__.py │ │ │ ├── production_center_group.json │ │ │ └── production_center_group.py │ │ ├── restaurant_exceptions │ │ │ ├── __init__.py │ │ │ ├── restaurant_exceptions.json │ │ │ └── restaurant_exceptions.py │ │ ├── restaurant_object │ │ │ ├── __init__.py │ │ │ ├── order_manage.html │ │ │ ├── restaurant_object.js │ │ │ ├── restaurant_object.json │ │ │ ├── restaurant_object.py │ │ │ └── test_restaurant_object.py │ │ ├── restaurant_permission │ │ │ ├── __init__.py │ │ │ ├── restaurant_permission.js │ │ │ ├── restaurant_permission.json │ │ │ ├── restaurant_permission.py │ │ │ └── test_restaurant_permission.py │ │ ├── restaurant_permission_manage │ │ │ ├── __init__.py │ │ │ ├── restaurant_permission_manage.js │ │ │ ├── restaurant_permission_manage.json │ │ │ ├── restaurant_permission_manage.py │ │ │ └── test_restaurant_permission_manage.py │ │ ├── restaurant_settings │ │ │ ├── __init__.py │ │ │ ├── restaurant_settings.js │ │ │ ├── restaurant_settings.json │ │ │ ├── restaurant_settings.py │ │ │ └── test_restaurant_settings.py │ │ ├── status_managed_production_center │ │ │ ├── __init__.py │ │ │ ├── status_managed_production_center.json │ │ │ └── status_managed_production_center.py │ │ └── table_order │ │ │ ├── __init__.py │ │ │ ├── divide_template.html │ │ │ ├── table_order.js │ │ │ ├── table_order.json │ │ │ ├── table_order.py │ │ │ └── test_table_order.py │ ├── page │ │ ├── __init__.py │ │ └── restaurant_manage │ │ │ ├── __init__.py │ │ │ ├── pos_restaurant_controller.js │ │ │ ├── restaurant_manage.css │ │ │ ├── restaurant_manage.html │ │ │ ├── restaurant_manage.js │ │ │ ├── restaurant_manage.json │ │ │ └── restaurant_manage.py │ ├── print_format │ │ ├── __init__.py │ │ └── order_account │ │ │ ├── __init__.py │ │ │ └── order_account.json │ ├── report │ │ ├── __init__.py │ │ └── restaurant_order_analytics │ │ │ ├── __init__.py │ │ │ ├── restaurant_order_analytics.js │ │ │ ├── restaurant_order_analytics.json │ │ │ └── restaurant_order_analytics.py │ ├── restaurant_manage.py │ └── workspace │ │ └── restaurant_management │ │ └── restaurant_management.json ├── setup │ └── install.py └── templates │ ├── __init__.py │ └── pages │ └── __init__.py └── setup.py /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: quantumbitcore # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | #patreon: alfredo_ramirez 5 | #open_collective: # Replace with a single Open Collective username 6 | #ko_fi: # Replace with a single Ko-fi username 7 | #tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | #community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | #liberapay: # Replace with a single Liberapay username 10 | #issuehunt: # Replace with a single IssueHunt username 11 | #otechie: # Replace with a single Otechie username 12 | #lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 13 | #custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 14 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | *.pyc 3 | *.egg-info 4 | *.swp 5 | tags 6 | restaurant_management/docs/current 7 | .idea 8 | /.idea/ 9 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include MANIFEST.in 2 | include requirements.txt 3 | include *.json 4 | include *.md 5 | include *.py 6 | include *.txt 7 | recursive-include restaurant_management *.css 8 | recursive-include restaurant_management *.csv 9 | recursive-include restaurant_management *.html 10 | recursive-include restaurant_management *.ico 11 | recursive-include restaurant_management *.js 12 | recursive-include restaurant_management *.json 13 | recursive-include restaurant_management *.md 14 | recursive-include restaurant_management *.png 15 | recursive-include restaurant_management *.py 16 | recursive-include restaurant_management *.svg 17 | recursive-include restaurant_management *.txt 18 | recursive-exclude restaurant_management *.pyc -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
5 | | 10 | 9 |||
13 | 14 | | 15 |
16 |
17 |
18 |
19 | |
20 |
21 |
22 |
23 | |
27 |
6 |
|
82 |
\n\t{{ doc.company }}
\n\t{{ _(\"Restaurant Order\") }}
\n
\n\t{{ _(\"Receipt No\") }}: {{ doc.name }}
\n\t{{ _(\"Customer\") }}: {{ doc.customer_name }}
\n\t{{ _(\"Table\") }}: {{ doc.table_description }}\n
{{ _(\"Item\") }} | \n\t\t\t{{ _(\"Qty\") }} | \n\t\t\t{{ _(\"Amount\") }} | \n\t\t
---|---|---|
\n\t\t\t\t{{ item.item_code }}\n\t\t\t\t{%- if item.item_name != item.item_code -%}\n\t\t\t\t\t {{ item.item_name }}\n\t\t\t\t{%- endif -%}\n\t\t\t\t{%- if item.serial_no -%}\n\t\t\t\t\t {{ _(\"SR.No\") }}: \n\t\t\t\t\t{{ item.serial_no | replace(\"\\n\", \", \") }}\n\t\t\t\t{%- endif -%}\n\t\t\t | \n\t\t\t{{ item.qty }} @ {{ item.get_formatted(\"rate\") }} | \n\t\t\t{{ item.get_formatted(\"amount\") }} | \n\t\t
\n\t\t\t\t{{ _(\"Tax\") }}\n\t\t\t | \n\t\t\t\n\t\t\t\t{{ doc.get_formatted(\"tax\") }}\n\t\t\t | \n\t\t
\n\t\t\t\t{{ _(\"Grand Total\") }}\n\t\t\t | \n\t\t\t\n\t\t\t\t{{ doc.get_formatted(\"amount\") }}\n\t\t\t | \n\t\t
{{ _(\"Thank you, please visit again.\") }}
", 13 | "idx": 0, 14 | "line_breaks": 0, 15 | "modified": "2021-07-23 18:00:28.460556", 16 | "modified_by": "Administrator", 17 | "module": "Restaurant Management", 18 | "name": "Order Account", 19 | "owner": "Administrator", 20 | "print_format_builder": 0, 21 | "print_format_type": "Jinja", 22 | "raw_printing": 0, 23 | "show_section_headings": 0, 24 | "standard": "Yes" 25 | } -------------------------------------------------------------------------------- /restaurant_management/restaurant_management/report/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alphabit-technology/erpnext-restaurant/446759bd0c5c163e614140780c5a2318e3b783d9/restaurant_management/restaurant_management/report/__init__.py -------------------------------------------------------------------------------- /restaurant_management/restaurant_management/report/restaurant_order_analytics/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alphabit-technology/erpnext-restaurant/446759bd0c5c163e614140780c5a2318e3b783d9/restaurant_management/restaurant_management/report/restaurant_order_analytics/__init__.py -------------------------------------------------------------------------------- /restaurant_management/restaurant_management/report/restaurant_order_analytics/restaurant_order_analytics.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2021, Quantum Bit Core and contributors 2 | // For license information, please see license.txt 3 | /* eslint-disable */ 4 | 5 | frappe.query_reports["Restaurant Order Analytics"] = { 6 | "filters": [ 7 | 8 | ] 9 | }; 10 | -------------------------------------------------------------------------------- /restaurant_management/restaurant_management/report/restaurant_order_analytics/restaurant_order_analytics.json: -------------------------------------------------------------------------------- 1 | { 2 | "add_total_row": 1, 3 | "creation": "2020-07-23 23:54:31.089254", 4 | "disable_prepared_report": 0, 5 | "disabled": 0, 6 | "docstatus": 0, 7 | "doctype": "Report", 8 | "idx": 0, 9 | "is_standard": "Yes", 10 | "json": "{}", 11 | "modified": "2020-07-23 23:54:49.631440", 12 | "modified_by": "Administrator", 13 | "module": "Restaurant Management", 14 | "name": "Restaurant Order Analytics", 15 | "owner": "Administrator", 16 | "prepared_report": 0, 17 | "ref_doctype": "Table Order", 18 | "report_name": "Restaurant Order Analytics", 19 | "report_type": "Report Builder", 20 | "roles": [ 21 | { 22 | "role": "Stock User" 23 | }, 24 | { 25 | "role": "Accounts User" 26 | }, 27 | { 28 | "role": "Sales Manager" 29 | }, 30 | { 31 | "role": "Restaurant Manager" 32 | }, 33 | { 34 | "role": "Restaurant User" 35 | } 36 | ] 37 | } -------------------------------------------------------------------------------- /restaurant_management/restaurant_management/report/restaurant_order_analytics/restaurant_order_analytics.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2021, Quantum Bit Core and contributors 2 | # For license information, please see license.txt 3 | 4 | from __future__ import unicode_literals 5 | # import frappe 6 | 7 | def execute(filters=None): 8 | columns, data = [], [] 9 | return columns, data 10 | -------------------------------------------------------------------------------- /restaurant_management/restaurant_management/restaurant_manage.py: -------------------------------------------------------------------------------- 1 | from __future__ import unicode_literals 2 | import frappe 3 | from frappe import _ 4 | 5 | 6 | def check_exceptions(model, error_message): 7 | if frappe.session.user == "Administrator": 8 | return True 9 | 10 | if frappe.has_permission(model["name"], model["action"]): 11 | has_permission = True 12 | 13 | if model["data"].owner != frappe.session.user or model["short_name"] == "table": 14 | has_permission = False 15 | 16 | exceptions = frappe.get_single("Restaurant Settings") 17 | profile = frappe.db.get_value("User", frappe.session.user, "role_profile_name") 18 | 19 | permissions = frappe.db.get_all("Restaurant Exceptions", fields=( 20 | "order_write", "order_delete", "order_manage" 21 | ), filters={ 22 | "role_profile": profile 23 | }) 24 | 25 | if model["short_name"] == "order" and not exceptions.restricted_to_owner_order: 26 | has_permission = True 27 | 28 | if model["short_name"] == "table" and not exceptions.restricted_to_owner_table: 29 | has_permission = True 30 | 31 | for permission in permissions: 32 | if model["short_name"] == "order" and exceptions.restricted_to_owner_order: 33 | has_permission = permission[f'{model["short_name"]}_{model["action"]}'] 34 | 35 | if model["short_name"] == "table" and exceptions.restricted_to_owner_table: 36 | has_permission = permission[f'{model["short_name"]}_{model["action"]}'] 37 | 38 | if not has_permission: 39 | frappe.throw(_(error_message)) 40 | else: 41 | frappe.throw(_("You do not have permissions to update " + model["short_name"])) 42 | 43 | return True 44 | -------------------------------------------------------------------------------- /restaurant_management/restaurant_management/workspace/restaurant_management/restaurant_management.json: -------------------------------------------------------------------------------- 1 | { 2 | "charts": [], 3 | "content": "[{\"id\":\"s5pXpGLdkx\",\"type\":\"header\",\"data\":{\"text\":\"Restaurant Management\",\"col\":12}},{\"id\":\"hRP5CGZTdn\",\"type\":\"shortcut\",\"data\":{\"shortcut_name\":\"POS Restaurant\",\"col\":3}},{\"id\":\"XeZ7JpnXpW\",\"type\":\"spacer\",\"data\":{\"col\":12}},{\"id\":\"SGeM1vjaSO\",\"type\":\"card\",\"data\":{\"card_name\":\"Profile\",\"col\":4}},{\"id\":\"TakfKRxIpo\",\"type\":\"card\",\"data\":{\"card_name\":\"Shift\",\"col\":4}},{\"id\":\"f9pyLDHT6e\",\"type\":\"card\",\"data\":{\"card_name\":\"Settings\",\"col\":4}}]", 4 | "creation": "2023-04-26 17:15:35.609631", 5 | "docstatus": 0, 6 | "doctype": "Workspace", 7 | "for_user": "", 8 | "hide_custom": 0, 9 | "icon": "sell", 10 | "idx": 0, 11 | "is_hidden": 0, 12 | "label": "Restaurant Management", 13 | "links": [ 14 | { 15 | "hidden": 0, 16 | "is_query_report": 0, 17 | "label": "POS Restaurant", 18 | "link_count": 0, 19 | "link_to": "restaurant-manage", 20 | "link_type": "Page", 21 | "onboard": 0, 22 | "type": "Link" 23 | }, 24 | { 25 | "hidden": 0, 26 | "is_query_report": 0, 27 | "label": "POS Profile", 28 | "link_count": 0, 29 | "link_to": "POS Profile", 30 | "link_type": "DocType", 31 | "onboard": 0, 32 | "type": "Link" 33 | }, 34 | { 35 | "hidden": 0, 36 | "is_query_report": 0, 37 | "label": "Opening Entry", 38 | "link_count": 0, 39 | "link_to": "POS Opening Entry", 40 | "link_type": "DocType", 41 | "onboard": 0, 42 | "type": "Link" 43 | }, 44 | { 45 | "hidden": 0, 46 | "is_query_report": 0, 47 | "label": "Settings", 48 | "link_count": 0, 49 | "link_to": "Restaurant Settings", 50 | "link_type": "DocType", 51 | "onboard": 0, 52 | "type": "Link" 53 | }, 54 | { 55 | "hidden": 0, 56 | "is_query_report": 0, 57 | "label": "Profile", 58 | "link_count": 1, 59 | "onboard": 0, 60 | "type": "Card Break" 61 | }, 62 | { 63 | "hidden": 0, 64 | "is_query_report": 0, 65 | "label": "POS Profile", 66 | "link_count": 0, 67 | "link_to": "POS Profile", 68 | "link_type": "DocType", 69 | "onboard": 0, 70 | "type": "Link" 71 | }, 72 | { 73 | "hidden": 0, 74 | "is_query_report": 0, 75 | "label": "Shift", 76 | "link_count": 1, 77 | "onboard": 0, 78 | "type": "Card Break" 79 | }, 80 | { 81 | "hidden": 0, 82 | "is_query_report": 0, 83 | "label": "Opening Entry", 84 | "link_count": 0, 85 | "link_to": "POS Opening Entry", 86 | "link_type": "DocType", 87 | "onboard": 0, 88 | "type": "Link" 89 | }, 90 | { 91 | "hidden": 0, 92 | "is_query_report": 0, 93 | "label": "Settings", 94 | "link_count": 1, 95 | "onboard": 0, 96 | "type": "Card Break" 97 | }, 98 | { 99 | "hidden": 0, 100 | "is_query_report": 0, 101 | "label": "Settings", 102 | "link_count": 0, 103 | "link_to": "Restaurant Settings", 104 | "link_type": "DocType", 105 | "onboard": 0, 106 | "type": "Link" 107 | } 108 | ], 109 | "modified": "2023-04-26 17:26:17.825621", 110 | "modified_by": "Administrator", 111 | "module": "Restaurant Management", 112 | "name": "Restaurant Management", 113 | "number_cards": [], 114 | "owner": "Administrator", 115 | "parent_page": "", 116 | "public": 1, 117 | "quick_lists": [], 118 | "roles": [], 119 | "sequence_id": 31.0, 120 | "shortcuts": [ 121 | { 122 | "color": "Grey", 123 | "doc_view": "List", 124 | "label": "POS Restaurant", 125 | "link_to": "restaurant-manage", 126 | "type": "Page" 127 | } 128 | ], 129 | "title": "Restaurant Management" 130 | } 131 | -------------------------------------------------------------------------------- /restaurant_management/setup/install.py: -------------------------------------------------------------------------------- 1 | from __future__ import unicode_literals 2 | from faulthandler import disable 3 | import frappe 4 | from itertools import chain 5 | 6 | docs = { 7 | "POS Profile User": dict( 8 | restaurant_permission=dict(label="Restaurant Permission", fieldtype="Button", 9 | options="Restaurant Permission", insert_after="User", in_list_view=1, read_only=1), 10 | parent=dict(label="Parent", fieldtype="Data", hidden=1), 11 | parenttype=dict(label="Parent Type", fieldtype="Data", hidden=1), 12 | restaurant_permissions=dict(label="Restaurant Permissions", fieldtype="Table", 13 | options="Restaurant Permission", hidden=1, insert_after="Restaurant Permission"), 14 | ), 15 | "POS Profile": dict( 16 | posa_tax_inclusive=dict( 17 | label="Tax Inclusive", fieldtype="Check", insert_after="tax_category", default_value=1) 18 | ), 19 | "POS Invoice Item": dict( 20 | identifier=dict(label="Identifier", fieldtype="Data"), 21 | ), 22 | "Sales Invoice Item": dict( 23 | identifier=dict(label="Identifier", fieldtype="Data"), 24 | ) 25 | } 26 | 27 | fields_not_needed = ['parent', 'parenttype', 'restaurant_permissions'] 28 | 29 | def after_install(): 30 | clear_custom_fields(); 31 | set_custom_fields() 32 | set_custom_scripts() 33 | 34 | def clear_custom_fields(): 35 | for doc in docs: 36 | for field_name in docs[doc]: 37 | if (field_name in fields_not_needed): 38 | test_field = frappe.get_value( 39 | "Custom Field", doc + "-" + field_name) 40 | 41 | if test_field is not None: 42 | frappe.db.sql("""DELETE FROM `tabCustom Field` WHERE name=%s""", test_field) 43 | 44 | def set_custom_fields(): 45 | for doc in docs: 46 | for field_name in docs[doc]: 47 | if (field_name in fields_not_needed): 48 | continue 49 | 50 | test_field = frappe.get_value( 51 | "Custom Field", doc + "-" + field_name) 52 | 53 | if test_field is None or field_name != "posa_tax_inclusive": 54 | CF = frappe.new_doc("Custom Field") if test_field is None else frappe.get_doc( 55 | "Custom Field", test_field) 56 | 57 | _values = dict(chain.from_iterable(d.items() for d in ( 58 | docs[doc][field_name], dict(dt=doc, fieldname=field_name)))) 59 | 60 | for key in _values: 61 | CF.set(key, _values[key]) 62 | 63 | CF.insert() if test_field is None else CF.save() 64 | 65 | 66 | def set_custom_scripts(): 67 | test_script = frappe.get_value("Client Script", "POS Profile-Form") 68 | if test_script is None: 69 | CS = frappe.new_doc("Client Script") 70 | CS.set("name", "POS Profile-Form") 71 | else: 72 | CS = frappe.get_doc("Client Script", test_script) 73 | 74 | CS.set("enabled", 1) 75 | CS.set("view", "Form") 76 | CS.set("dt", "POS Profile") 77 | CS.set("script", """ 78 | frappe.ui.form.on('POS Profile', { 79 | refresh(frm) { 80 | //refresh 81 | } 82 | }); 83 | 84 | frappe.ui.form.on('POS Profile User', { 85 | restaurant_permission(frm, cdt, cdn) { 86 | if(cdn.includes('new')){ 87 | frappe.show_alert(__("Save the record before assigning permissions")); 88 | return; 89 | } 90 | 91 | new DeskForm({ 92 | form_name: 'Restaurant Permission Manage', 93 | doc_name: cdn, 94 | callback: (self) => { 95 | self.hide(); 96 | }, 97 | title: __(`Room Access`), 98 | field_properties: { 99 | pos_profile_user: { 100 | value: cdn 101 | }, 102 | 'restaurant_permission.room': { 103 | "get_query": () => { 104 | return { 105 | filters: [ 106 | ['type', '=', 'Room'] 107 | ] 108 | } 109 | } 110 | } 111 | } 112 | }); 113 | } 114 | });""" 115 | ) 116 | CS.insert() if test_script is None else CS.save() 117 | -------------------------------------------------------------------------------- /restaurant_management/templates/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alphabit-technology/erpnext-restaurant/446759bd0c5c163e614140780c5a2318e3b783d9/restaurant_management/templates/__init__.py -------------------------------------------------------------------------------- /restaurant_management/templates/pages/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alphabit-technology/erpnext-restaurant/446759bd0c5c163e614140780c5a2318e3b783d9/restaurant_management/templates/pages/__init__.py -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from setuptools import setup, find_packages 3 | 4 | with open('requirements.txt') as f: 5 | install_requires = f.read().strip().split('\n') 6 | 7 | # get version from __version__ variable in restaurant_management/__init__.py 8 | from restaurant_management import __version__ as version 9 | 10 | setup( 11 | name='restaurant_management', 12 | version=version, 13 | description='Restaurant', 14 | author='Quantum Bit Core', 15 | author_email='qubitcore.io@gmail.com', 16 | packages=find_packages(), 17 | zip_safe=False, 18 | include_package_data=True, 19 | install_requires=install_requires 20 | ) 21 | --------------------------------------------------------------------------------