summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfrappe <frappe@c5102bb99250>2026-03-17 17:56:48 +0000
committerfrappe <frappe@c5102bb99250>2026-03-17 17:56:48 +0000
commit2a9e19e287e77dd00e38f148b5da5c1acb3c754d (patch)
tree60658dd9b30171d685755a201ad059ee92c68699
downloadsupportive_help-2a9e19e287e77dd00e38f148b5da5c1acb3c754d.tar.xz
supportive_help-2a9e19e287e77dd00e38f148b5da5c1acb3c754d.zip
feat: Initialize App
-rw-r--r--.editorconfig21
-rw-r--r--.eslintrc124
-rw-r--r--.gitignore7
-rw-r--r--.pre-commit-config.yaml69
-rw-r--r--README.md33
-rw-r--r--license.txt21
-rw-r--r--pyproject.toml56
-rw-r--r--supportive_help/__init__.py1
-rw-r--r--supportive_help/config/__init__.py0
-rw-r--r--supportive_help/hooks.py249
-rw-r--r--supportive_help/modules.txt1
-rw-r--r--supportive_help/patches.txt6
-rw-r--r--supportive_help/public/.gitkeep0
-rw-r--r--supportive_help/supportive_help/__init__.py0
-rw-r--r--supportive_help/templates/__init__.py0
-rw-r--r--supportive_help/templates/pages/__init__.py0
16 files changed, 588 insertions, 0 deletions
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..b901702
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,21 @@
+# Root editor config file
+root = true
+
+# Common settings
+[*]
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true
+charset = utf-8
+
+# python, js indentation settings
+[{*.py,*.js,*.vue,*.css,*.scss,*.html}]
+indent_style = tab
+indent_size = 4
+max_line_length = 99
+
+# JSON files - mostly doctype schema files
+[{*.json}]
+insert_final_newline = false
+indent_style = space
+indent_size = 2
diff --git a/.eslintrc b/.eslintrc
new file mode 100644
index 0000000..c5e7d68
--- /dev/null
+++ b/.eslintrc
@@ -0,0 +1,124 @@
+{
+ "env": {
+ "browser": true,
+ "node": true,
+ "es2022": true
+ },
+ "parserOptions": {
+ "sourceType": "module"
+ },
+ "extends": "eslint:recommended",
+ "rules": {
+ "indent": "off",
+ "brace-style": "off",
+ "no-mixed-spaces-and-tabs": "off",
+ "no-useless-escape": "off",
+ "space-unary-ops": ["error", { "words": true }],
+ "linebreak-style": "off",
+ "quotes": ["off"],
+ "semi": "off",
+ "camelcase": "off",
+ "no-unused-vars": "off",
+ "no-console": ["warn"],
+ "no-extra-boolean-cast": ["off"],
+ "no-control-regex": ["off"],
+ },
+ "root": true,
+ "globals": {
+ "frappe": true,
+ "Vue": true,
+ "SetVueGlobals": true,
+ "__": true,
+ "repl": true,
+ "Class": true,
+ "locals": true,
+ "cint": true,
+ "cstr": true,
+ "cur_frm": true,
+ "cur_dialog": true,
+ "cur_page": true,
+ "cur_list": true,
+ "cur_tree": true,
+ "msg_dialog": true,
+ "is_null": true,
+ "in_list": true,
+ "has_common": true,
+ "posthog": true,
+ "has_words": true,
+ "validate_email": true,
+ "open_web_template_values_editor": true,
+ "validate_name": true,
+ "validate_phone": true,
+ "validate_url": true,
+ "get_number_format": true,
+ "format_number": true,
+ "format_currency": true,
+ "comment_when": true,
+ "open_url_post": true,
+ "toTitle": true,
+ "lstrip": true,
+ "rstrip": true,
+ "strip": true,
+ "strip_html": true,
+ "replace_all": true,
+ "flt": true,
+ "precision": true,
+ "CREATE": true,
+ "AMEND": true,
+ "CANCEL": true,
+ "copy_dict": true,
+ "get_number_format_info": true,
+ "strip_number_groups": true,
+ "print_table": true,
+ "Layout": true,
+ "web_form_settings": true,
+ "$c": true,
+ "$a": true,
+ "$i": true,
+ "$bg": true,
+ "$y": true,
+ "$c_obj": true,
+ "refresh_many": true,
+ "refresh_field": true,
+ "toggle_field": true,
+ "get_field_obj": true,
+ "get_query_params": true,
+ "unhide_field": true,
+ "hide_field": true,
+ "set_field_options": true,
+ "getCookie": true,
+ "getCookies": true,
+ "get_url_arg": true,
+ "md5": true,
+ "$": true,
+ "jQuery": true,
+ "moment": true,
+ "hljs": true,
+ "Awesomplete": true,
+ "Sortable": true,
+ "Showdown": true,
+ "Taggle": true,
+ "Gantt": true,
+ "Slick": true,
+ "Webcam": true,
+ "PhotoSwipe": true,
+ "PhotoSwipeUI_Default": true,
+ "io": true,
+ "JsBarcode": true,
+ "L": true,
+ "Chart": true,
+ "DataTable": true,
+ "Cypress": true,
+ "cy": true,
+ "it": true,
+ "describe": true,
+ "expect": true,
+ "context": true,
+ "before": true,
+ "beforeEach": true,
+ "after": true,
+ "qz": true,
+ "localforage": true,
+ "extend_cscript": true
+ }
+}
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/.pre-commit-config.yaml b/.pre-commit-config.yaml
new file mode 100644
index 0000000..eff2d6d
--- /dev/null
+++ b/.pre-commit-config.yaml
@@ -0,0 +1,69 @@
+exclude: 'node_modules|.git'
+default_stages: [pre-commit]
+fail_fast: false
+
+
+repos:
+ - repo: https://github.com/pre-commit/pre-commit-hooks
+ rev: v5.0.0
+ hooks:
+ - id: trailing-whitespace
+ files: "supportive_help.*"
+ exclude: ".*json$|.*txt$|.*csv|.*md|.*svg"
+ - id: check-merge-conflict
+ - id: check-ast
+ - id: check-json
+ - id: check-toml
+ - id: check-yaml
+ - id: debug-statements
+
+ - repo: https://github.com/astral-sh/ruff-pre-commit
+ rev: v0.8.1
+ hooks:
+ - id: ruff
+ name: "Run ruff import sorter"
+ args: ["--select=I", "--fix"]
+
+ - id: ruff
+ name: "Run ruff linter"
+
+ - id: ruff-format
+ name: "Run ruff formatter"
+
+ - repo: https://github.com/pre-commit/mirrors-prettier
+ rev: v2.7.1
+ hooks:
+ - id: prettier
+ types_or: [javascript, vue, scss]
+ # Ignore any files that might contain jinja / bundles
+ exclude: |
+ (?x)^(
+ supportive_help/public/dist/.*|
+ .*node_modules.*|
+ .*boilerplate.*|
+ supportive_help/templates/includes/.*|
+ supportive_help/public/js/lib/.*
+ )$
+
+
+ - repo: https://github.com/pre-commit/mirrors-eslint
+ rev: v8.44.0
+ hooks:
+ - id: eslint
+ types_or: [javascript]
+ args: ['--quiet']
+ # Ignore any files that might contain jinja / bundles
+ exclude: |
+ (?x)^(
+ supportive_help/public/dist/.*|
+ cypress/.*|
+ .*node_modules.*|
+ .*boilerplate.*|
+ supportive_help/templates/includes/.*|
+ supportive_help/public/js/lib/.*
+ )$
+
+ci:
+ autoupdate_schedule: weekly
+ skip: []
+ submodules: false
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..a1177b6
--- /dev/null
+++ b/README.md
@@ -0,0 +1,33 @@
+### Supportive Help
+
+The \"Supportive Assistance\" module provides administrative support for activities covered by the German Social Code.
+
+### Installation
+
+You can install this app using the [bench](https://github.com/frappe/bench) CLI:
+
+```bash
+cd $PATH_TO_YOUR_BENCH
+bench get-app $URL_OF_THIS_REPO --branch develop
+bench install-app supportive_help
+```
+
+### Contributing
+
+This app uses `pre-commit` for code formatting and linting. Please [install pre-commit](https://pre-commit.com/#installation) and enable it for this repository:
+
+```bash
+cd apps/supportive_help
+pre-commit install
+```
+
+Pre-commit is configured to use the following tools for checking and formatting your code:
+
+- ruff
+- eslint
+- prettier
+- pyupgrade
+
+### License
+
+mit
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/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000..8ab9837
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,56 @@
+[project]
+name = "supportive_help"
+authors = [
+ { name = "Leon Zimmermann", email = "oscoder@lczimmermann.eu"}
+]
+description = "The "Supportive Assistance" module provides administrative support for activities covered by the German Social Code."
+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"
+
+[tool.ruff]
+line-length = 110
+target-version = "py310"
+
+[tool.ruff.lint]
+select = [
+ "F",
+ "E",
+ "W",
+ "I",
+ "UP",
+ "B",
+ "RUF",
+]
+ignore = [
+ "B017", # assertRaises(Exception) - should be more specific
+ "B018", # useless expression, not assigned to anything
+ "B023", # function doesn't bind loop variable - will have last iteration's value
+ "B904", # raise inside except without from
+ "E101", # indentation contains mixed spaces and tabs
+ "E402", # module level import not at top of file
+ "E501", # line too long
+ "E741", # ambiguous variable name
+ "F401", # "unused" imports
+ "F403", # can't detect undefined names from * import
+ "F405", # can't detect undefined names from * import
+ "F722", # syntax error in forward type annotation
+ "W191", # indentation contains tabs
+]
+typing-modules = ["frappe.types.DF"]
+
+[tool.ruff.format]
+quote-style = "double"
+indent-style = "tab"
+docstring-code-format = true
diff --git a/supportive_help/__init__.py b/supportive_help/__init__.py
new file mode 100644
index 0000000..f102a9c
--- /dev/null
+++ b/supportive_help/__init__.py
@@ -0,0 +1 @@
+__version__ = "0.0.1"
diff --git a/supportive_help/config/__init__.py b/supportive_help/config/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/supportive_help/config/__init__.py
diff --git a/supportive_help/hooks.py b/supportive_help/hooks.py
new file mode 100644
index 0000000..21309d6
--- /dev/null
+++ b/supportive_help/hooks.py
@@ -0,0 +1,249 @@
+app_name = "supportive_help"
+app_title = "Supportive Help"
+app_publisher = "Leon Zimmermann"
+app_description = "The \"Supportive Assistance\" module provides administrative support for activities covered by the German Social Code."
+app_email = "oscoder@lczimmermann.eu"
+app_license = "mit"
+
+# Apps
+# ------------------
+
+# required_apps = []
+
+# Each item in the list will be shown as an app in the apps page
+# add_to_apps_screen = [
+# {
+# "name": "supportive_help",
+# "logo": "/assets/supportive_help/logo.png",
+# "title": "Supportive Help",
+# "route": "/supportive_help",
+# "has_permission": "supportive_help.api.permission.has_app_permission"
+# }
+# ]
+
+# Includes in <head>
+# ------------------
+
+# include js, css files in header of desk.html
+# app_include_css = "/assets/supportive_help/css/supportive_help.css"
+# app_include_js = "/assets/supportive_help/js/supportive_help.js"
+
+# include js, css files in header of web template
+# web_include_css = "/assets/supportive_help/css/supportive_help.css"
+# web_include_js = "/assets/supportive_help/js/supportive_help.js"
+
+# include custom scss in every website theme (without file extension ".scss")
+# website_theme_scss = "supportive_help/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 = "supportive_help/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": "supportive_help.utils.jinja_methods",
+# "filters": "supportive_help.utils.jinja_filters"
+# }
+
+# Installation
+# ------------
+
+# before_install = "supportive_help.install.before_install"
+# after_install = "supportive_help.install.after_install"
+
+# Uninstallation
+# ------------
+
+# before_uninstall = "supportive_help.uninstall.before_uninstall"
+# after_uninstall = "supportive_help.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 = "supportive_help.utils.before_app_install"
+# after_app_install = "supportive_help.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 = "supportive_help.utils.before_app_uninstall"
+# after_app_uninstall = "supportive_help.utils.after_app_uninstall"
+
+# Desk Notifications
+# ------------------
+# See frappe.core.notifications.get_notification_config
+
+# notification_config = "supportive_help.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": [
+# "supportive_help.tasks.all"
+# ],
+# "daily": [
+# "supportive_help.tasks.daily"
+# ],
+# "hourly": [
+# "supportive_help.tasks.hourly"
+# ],
+# "weekly": [
+# "supportive_help.tasks.weekly"
+# ],
+# "monthly": [
+# "supportive_help.tasks.monthly"
+# ],
+# }
+
+# Testing
+# -------
+
+# before_tests = "supportive_help.install.before_tests"
+
+# Overriding Methods
+# ------------------------------
+#
+# override_whitelisted_methods = {
+# "frappe.desk.doctype.event.event.get_events": "supportive_help.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": "supportive_help.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 = ["supportive_help.utils.before_request"]
+# after_request = ["supportive_help.utils.after_request"]
+
+# Job Events
+# ----------
+# before_job = ["supportive_help.utils.before_job"]
+# after_job = ["supportive_help.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 = [
+# "supportive_help.auth.validate"
+# ]
+
+# Automatically update python controller files with type annotations for this app.
+# export_python_type_annotations = True
+
+# default_log_clearing_doctypes = {
+# "Logging DocType Name": 30 # days to retain logs
+# }
+
+# Translation
+# ------------
+# List of apps whose translatable strings should be excluded from this app's translations.
+# ignore_translatable_strings_from = []
+
diff --git a/supportive_help/modules.txt b/supportive_help/modules.txt
new file mode 100644
index 0000000..34cfa1d
--- /dev/null
+++ b/supportive_help/modules.txt
@@ -0,0 +1 @@
+Supportive Help \ No newline at end of file
diff --git a/supportive_help/patches.txt b/supportive_help/patches.txt
new file mode 100644
index 0000000..f15c3a9
--- /dev/null
+++ b/supportive_help/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/supportive_help/public/.gitkeep b/supportive_help/public/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/supportive_help/public/.gitkeep
diff --git a/supportive_help/supportive_help/__init__.py b/supportive_help/supportive_help/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/supportive_help/supportive_help/__init__.py
diff --git a/supportive_help/templates/__init__.py b/supportive_help/templates/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/supportive_help/templates/__init__.py
diff --git a/supportive_help/templates/pages/__init__.py b/supportive_help/templates/pages/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/supportive_help/templates/pages/__init__.py