From 548aac52ea90a9d379b9fa189df38a17c11fd934 Mon Sep 17 00:00:00 2001 From: Okeyo Gichana Mayaka Date: Wed, 15 Nov 2023 10:40:11 +0300 Subject: [PATCH] feat: Initialize App --- .github/workflows/ci.yml | 101 +++++++++ .gitignore | 7 + README.md | 7 + license.txt | 21 ++ navari_mpesa_b2c/__init__.py | 3 + navari_mpesa_b2c/config/__init__.py | 0 navari_mpesa_b2c/hooks.py | 221 +++++++++++++++++++ navari_mpesa_b2c/modules.txt | 1 + navari_mpesa_b2c/mpesa_b2c/__init__.py | 0 navari_mpesa_b2c/patches.txt | 6 + navari_mpesa_b2c/public/.gitkeep | 0 navari_mpesa_b2c/templates/__init__.py | 0 navari_mpesa_b2c/templates/pages/__init__.py | 0 pyproject.toml | 20 ++ 14 files changed, 387 insertions(+) create mode 100644 .github/workflows/ci.yml create mode 100644 .gitignore create mode 100644 README.md create mode 100644 license.txt create mode 100644 navari_mpesa_b2c/__init__.py create mode 100644 navari_mpesa_b2c/config/__init__.py create mode 100644 navari_mpesa_b2c/hooks.py create mode 100644 navari_mpesa_b2c/modules.txt create mode 100644 navari_mpesa_b2c/mpesa_b2c/__init__.py create mode 100644 navari_mpesa_b2c/patches.txt create mode 100644 navari_mpesa_b2c/public/.gitkeep create mode 100644 navari_mpesa_b2c/templates/__init__.py create mode 100644 navari_mpesa_b2c/templates/pages/__init__.py create mode 100644 pyproject.toml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..9085894 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,101 @@ + +name: CI + +on: + push: + branches: + - develop + pull_request: + +concurrency: + group: develop-navari_mpesa_b2c-${{ github.event.number }} + cancel-in-progress: true + +jobs: + tests: + runs-on: ubuntu-latest + strategy: + fail-fast: false + name: Server + + services: + redis-cache: + image: redis:alpine + ports: + - 13000:6379 + redis-queue: + image: redis:alpine + ports: + - 11000:6379 + mariadb: + image: mariadb:10.6 + env: + MYSQL_ROOT_PASSWORD: root + ports: + - 3306:3306 + options: --health-cmd="mariadb-admin ping" --health-interval=5s --health-timeout=2s --health-retries=3 + + steps: + - name: Clone + uses: actions/checkout@v3 + + - name: Setup Python + uses: actions/setup-python@v4 + with: + python-version: '3.10' + + - name: Setup Node + uses: actions/setup-node@v3 + with: + node-version: 18 + check-latest: true + + - name: Cache pip + uses: actions/cache@v2 + with: + path: ~/.cache/pip + key: ${{ runner.os }}-pip-${{ hashFiles('**/*requirements.txt', '**/pyproject.toml', '**/setup.py', '**/setup.cfg') }} + restore-keys: | + ${{ runner.os }}-pip- + ${{ runner.os }}- + + - name: Get yarn cache directory path + id: yarn-cache-dir-path + run: 'echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT' + + - uses: actions/cache@v3 + id: yarn-cache + with: + path: ${{ steps.yarn-cache-dir-path.outputs.dir }} + key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-yarn- + + - name: Install MariaDB Client + run: sudo apt-get install mariadb-client-10.6 + + - name: Setup + run: | + pip install frappe-bench + bench init --skip-redis-config-generation --skip-assets --python "$(which python)" ~/frappe-bench + mariadb --host 127.0.0.1 --port 3306 -u root -proot -e "SET GLOBAL character_set_server = 'utf8mb4'" + mariadb --host 127.0.0.1 --port 3306 -u root -proot -e "SET GLOBAL collation_server = 'utf8mb4_unicode_ci'" + + - name: Install + working-directory: /home/runner/frappe-bench + run: | + bench get-app navari_mpesa_b2c $GITHUB_WORKSPACE + bench setup requirements --dev + bench new-site --db-root-password root --admin-password admin test_site + bench --site test_site install-app navari_mpesa_b2c + bench build + env: + CI: 'Yes' + + - name: Run Tests + working-directory: /home/runner/frappe-bench + run: | + bench --site test_site set-config allow_tests true + bench --site test_site run-tests --app navari_mpesa_b2c + env: + TYPE: server diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ba04025 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +.DS_Store +*.pyc +*.egg-info +*.swp +tags +node_modules +__pycache__ \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..f6fa0e3 --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ +## MPesa B2C + +MPesa B2C Integration for ERPNext + +#### License + +mit \ No newline at end of file diff --git a/license.txt b/license.txt new file mode 100644 index 0000000..8aa2645 --- /dev/null +++ b/license.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) [year] [fullname] + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/navari_mpesa_b2c/__init__.py b/navari_mpesa_b2c/__init__.py new file mode 100644 index 0000000..7a0660b --- /dev/null +++ b/navari_mpesa_b2c/__init__.py @@ -0,0 +1,3 @@ + +__version__ = '0.0.1' + diff --git a/navari_mpesa_b2c/config/__init__.py b/navari_mpesa_b2c/config/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/navari_mpesa_b2c/hooks.py b/navari_mpesa_b2c/hooks.py new file mode 100644 index 0000000..58549c1 --- /dev/null +++ b/navari_mpesa_b2c/hooks.py @@ -0,0 +1,221 @@ +app_name = "navari_mpesa_b2c" +app_title = "MPesa B2C" +app_publisher = "Navari Ltd" +app_description = "MPesa B2C Integration for ERPNext" +app_email = "solutions@navari.co.ke" +app_license = "mit" +# required_apps = [] + +# Includes in +# ------------------ + +# include js, css files in header of desk.html +# app_include_css = "/assets/navari_mpesa_b2c/css/navari_mpesa_b2c.css" +# app_include_js = "/assets/navari_mpesa_b2c/js/navari_mpesa_b2c.js" + +# include js, css files in header of web template +# web_include_css = "/assets/navari_mpesa_b2c/css/navari_mpesa_b2c.css" +# web_include_js = "/assets/navari_mpesa_b2c/js/navari_mpesa_b2c.js" + +# include custom scss in every website theme (without file extension ".scss") +# website_theme_scss = "navari_mpesa_b2c/public/scss/website" + +# include js, css files in header of web form +# webform_include_js = {"doctype": "public/js/doctype.js"} +# webform_include_css = {"doctype": "public/css/doctype.css"} + +# include js in page +# page_js = {"page" : "public/js/file.js"} + +# include js in doctype views +# doctype_js = {"doctype" : "public/js/doctype.js"} +# doctype_list_js = {"doctype" : "public/js/doctype_list.js"} +# doctype_tree_js = {"doctype" : "public/js/doctype_tree.js"} +# doctype_calendar_js = {"doctype" : "public/js/doctype_calendar.js"} + +# Svg Icons +# ------------------ +# include app icons in desk +# app_include_icons = "navari_mpesa_b2c/public/icons.svg" + +# Home Pages +# ---------- + +# application home page (will override Website Settings) +# home_page = "login" + +# website user home page (by Role) +# role_home_page = { +# "Role": "home_page" +# } + +# Generators +# ---------- + +# automatically create page for each record of this doctype +# website_generators = ["Web Page"] + +# Jinja +# ---------- + +# add methods and filters to jinja environment +# jinja = { +# "methods": "navari_mpesa_b2c.utils.jinja_methods", +# "filters": "navari_mpesa_b2c.utils.jinja_filters" +# } + +# Installation +# ------------ + +# before_install = "navari_mpesa_b2c.install.before_install" +# after_install = "navari_mpesa_b2c.install.after_install" + +# Uninstallation +# ------------ + +# before_uninstall = "navari_mpesa_b2c.uninstall.before_uninstall" +# after_uninstall = "navari_mpesa_b2c.uninstall.after_uninstall" + +# Integration Setup +# ------------------ +# To set up dependencies/integrations with other apps +# Name of the app being installed is passed as an argument + +# before_app_install = "navari_mpesa_b2c.utils.before_app_install" +# after_app_install = "navari_mpesa_b2c.utils.after_app_install" + +# Integration Cleanup +# ------------------- +# To clean up dependencies/integrations with other apps +# Name of the app being uninstalled is passed as an argument + +# before_app_uninstall = "navari_mpesa_b2c.utils.before_app_uninstall" +# after_app_uninstall = "navari_mpesa_b2c.utils.after_app_uninstall" + +# Desk Notifications +# ------------------ +# See frappe.core.notifications.get_notification_config + +# notification_config = "navari_mpesa_b2c.notifications.get_notification_config" + +# Permissions +# ----------- +# Permissions evaluated in scripted ways + +# permission_query_conditions = { +# "Event": "frappe.desk.doctype.event.event.get_permission_query_conditions", +# } +# +# has_permission = { +# "Event": "frappe.desk.doctype.event.event.has_permission", +# } + +# DocType Class +# --------------- +# Override standard doctype classes + +# override_doctype_class = { +# "ToDo": "custom_app.overrides.CustomToDo" +# } + +# Document Events +# --------------- +# Hook on document methods and events + +# doc_events = { +# "*": { +# "on_update": "method", +# "on_cancel": "method", +# "on_trash": "method" +# } +# } + +# Scheduled Tasks +# --------------- + +# scheduler_events = { +# "all": [ +# "navari_mpesa_b2c.tasks.all" +# ], +# "daily": [ +# "navari_mpesa_b2c.tasks.daily" +# ], +# "hourly": [ +# "navari_mpesa_b2c.tasks.hourly" +# ], +# "weekly": [ +# "navari_mpesa_b2c.tasks.weekly" +# ], +# "monthly": [ +# "navari_mpesa_b2c.tasks.monthly" +# ], +# } + +# Testing +# ------- + +# before_tests = "navari_mpesa_b2c.install.before_tests" + +# Overriding Methods +# ------------------------------ +# +# override_whitelisted_methods = { +# "frappe.desk.doctype.event.event.get_events": "navari_mpesa_b2c.event.get_events" +# } +# +# each overriding function accepts a `data` argument; +# generated from the base implementation of the doctype dashboard, +# along with any modifications made in other Frappe apps +# override_doctype_dashboards = { +# "Task": "navari_mpesa_b2c.task.get_dashboard_data" +# } + +# exempt linked doctypes from being automatically cancelled +# +# auto_cancel_exempted_doctypes = ["Auto Repeat"] + +# Ignore links to specified DocTypes when deleting documents +# ----------------------------------------------------------- + +# ignore_links_on_delete = ["Communication", "ToDo"] + +# Request Events +# ---------------- +# before_request = ["navari_mpesa_b2c.utils.before_request"] +# after_request = ["navari_mpesa_b2c.utils.after_request"] + +# Job Events +# ---------- +# before_job = ["navari_mpesa_b2c.utils.before_job"] +# after_job = ["navari_mpesa_b2c.utils.after_job"] + +# User Data Protection +# -------------------- + +# user_data_fields = [ +# { +# "doctype": "{doctype_1}", +# "filter_by": "{filter_by}", +# "redact_fields": ["{field_1}", "{field_2}"], +# "partial": 1, +# }, +# { +# "doctype": "{doctype_2}", +# "filter_by": "{filter_by}", +# "partial": 1, +# }, +# { +# "doctype": "{doctype_3}", +# "strict": False, +# }, +# { +# "doctype": "{doctype_4}" +# } +# ] + +# Authentication and authorization +# -------------------------------- + +# auth_hooks = [ +# "navari_mpesa_b2c.auth.validate" +# ] diff --git a/navari_mpesa_b2c/modules.txt b/navari_mpesa_b2c/modules.txt new file mode 100644 index 0000000..0cef793 --- /dev/null +++ b/navari_mpesa_b2c/modules.txt @@ -0,0 +1 @@ +MPesa B2C \ No newline at end of file diff --git a/navari_mpesa_b2c/mpesa_b2c/__init__.py b/navari_mpesa_b2c/mpesa_b2c/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/navari_mpesa_b2c/patches.txt b/navari_mpesa_b2c/patches.txt new file mode 100644 index 0000000..f15c3a9 --- /dev/null +++ b/navari_mpesa_b2c/patches.txt @@ -0,0 +1,6 @@ +[pre_model_sync] +# Patches added in this section will be executed before doctypes are migrated +# Read docs to understand patches: https://frappeframework.com/docs/v14/user/en/database-migrations + +[post_model_sync] +# Patches added in this section will be executed after doctypes are migrated \ No newline at end of file diff --git a/navari_mpesa_b2c/public/.gitkeep b/navari_mpesa_b2c/public/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/navari_mpesa_b2c/templates/__init__.py b/navari_mpesa_b2c/templates/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/navari_mpesa_b2c/templates/pages/__init__.py b/navari_mpesa_b2c/templates/pages/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..53d3a11 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,20 @@ +[project] +name = "navari_mpesa_b2c" +authors = [ + { name = "Navari Ltd", email = "solutions@navari.co.ke"} +] +description = "MPesa B2C Integration for ERPNext" +requires-python = ">=3.10" +readme = "README.md" +dynamic = ["version"] +dependencies = [ + # "frappe~=15.0.0" # Installed and managed by bench. +] + +[build-system] +requires = ["flit_core >=3.4,<4"] +build-backend = "flit_core.buildapi" + +# These dependencies are only installed when developer mode is enabled +[tool.bench.dev-dependencies] +# package_name = "~=1.1.0"