Added an email template for Customer Invoice to be filled with copywriting and customized payment links.

This commit is contained in:
rocketdebris 2026-01-23 13:55:28 -05:00
parent 5b2e362100
commit 44c15961c7
4 changed files with 177 additions and 101 deletions

View file

@ -37,13 +37,13 @@ requires = [
# Each item in the list will be shown as an app in the apps page
# add_to_apps_screen = [
# {
# "name": "custom_ui",
# "logo": "/assets/custom_ui/logo.png",
# "title": "Custom Ui",
# "route": "/custom_ui",
# "has_permission": "custom_ui.api.permission.has_app_permission"
# }
# {
# "name": "custom_ui",
# "logo": "/assets/custom_ui/logo.png",
# "title": "Custom Ui",
# "route": "/custom_ui",
# "has_permission": "custom_ui.api.permission.has_app_permission"
# }
# ]
# Includes in <head>
@ -86,7 +86,7 @@ requires = [
# website user home page (by Role)
# role_home_page = {
# "Role": "home_page"
# "Role": "home_page"
# }
# Generators
@ -100,8 +100,8 @@ requires = [
# add methods and filters to jinja environment
# jinja = {
# "methods": "custom_ui.utils.jinja_methods",
# "filters": "custom_ui.utils.jinja_filters"
# "methods": "custom_ui.utils.jinja_methods",
# "filters": "custom_ui.utils.jinja_filters"
# }
# Installation
@ -143,11 +143,11 @@ requires = [
# Permissions evaluated in scripted ways
# permission_query_conditions = {
# "Event": "frappe.desk.doctype.event.event.get_permission_query_conditions",
# "Event": "frappe.desk.doctype.event.event.get_permission_query_conditions",
# }
#
# has_permission = {
# "Event": "frappe.desk.doctype.event.event.has_permission",
# "Event": "frappe.desk.doctype.event.event.has_permission",
# }
# DocType Class
@ -155,7 +155,7 @@ requires = [
# Override standard doctype classes
# override_doctype_class = {
# "ToDo": "custom_app.overrides.CustomToDo"
# "ToDo": "custom_app.overrides.CustomToDo"
# }
# Document Events
@ -163,11 +163,11 @@ requires = [
# Hook on document methods and events
doc_events = {
"On-Site Meeting": {
"after_insert": "custom_ui.events.onsite_meeting.after_insert",
"On-Site Meeting": {
"after_insert": "custom_ui.events.onsite_meeting.after_insert",
"before_save": "custom_ui.events.onsite_meeting.before_save",
"before_insert": "custom_ui.events.onsite_meeting.before_insert"
},
},
"Address": {
"before_insert": "custom_ui.events.address.before_insert"
},
@ -196,6 +196,12 @@ doc_events = {
}
fixtures = [
{
"dt": "Email Template",
"filters": [
["name", "in", ["Customer Invoice"]]
]
},
{
"dt": "DocType",
"filters": [
@ -267,7 +273,7 @@ fixtures = [
["doc_type", "=", "Address"]
]
}
]
@ -276,21 +282,21 @@ fixtures = [
# ---------------
# scheduler_events = {
# "all": [
# "custom_ui.tasks.all"
# ],
# "daily": [
# "custom_ui.tasks.daily"
# ],
# "hourly": [
# "custom_ui.tasks.hourly"
# ],
# "weekly": [
# "custom_ui.tasks.weekly"
# ],
# "monthly": [
# "custom_ui.tasks.monthly"
# ],
# "all": [
# "custom_ui.tasks.all"
# ],
# "daily": [
# "custom_ui.tasks.daily"
# ],
# "hourly": [
# "custom_ui.tasks.hourly"
# ],
# "weekly": [
# "custom_ui.tasks.weekly"
# ],
# "monthly": [
# "custom_ui.tasks.monthly"
# ],
# }
# Testing
@ -302,14 +308,14 @@ fixtures = [
# ------------------------------
#
# override_whitelisted_methods = {
# "frappe.desk.doctype.event.event.get_events": "custom_ui.event.get_events"
# "frappe.desk.doctype.event.event.get_events": "custom_ui.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": "custom_ui.task.get_dashboard_data"
# "Task": "custom_ui.task.get_dashboard_data"
# }
# exempt linked doctypes from being automatically cancelled
@ -335,37 +341,37 @@ fixtures = [
# --------------------
# 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}"
# }
# {
# "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 = [
# "custom_ui.auth.validate"
# "custom_ui.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
# "Logging DocType Name": 30 # days to retain logs
# }