Merge pull request #30 from meichthys/develop

Hello Frappe Marketplace
This commit is contained in:
MeIchthys 2025-10-06 00:38:30 -04:00 committed by GitHub
commit b278c7f52a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
88 changed files with 2319 additions and 607 deletions

View File

@ -22,12 +22,15 @@ The following features have been implemented in this app (see the [🗺️ Roadm
- `Church Prayer Request` tracking
- Authenticated or Anonymous web-form submissions
- Authenticated users can manage their own prayer requests
- `Church Missionary` & `Church Missionary Agency` tracking
- Church module desk workspace with guided setup steps
- Event tracking
- Event types, details, basic attendance tracking & reporting
- Collection/donation tracking
- Donation entry with collection totals & split check support
- Bank reconciliation report
- Fund balance tracking
- Collections automatically update funds when saved
- Church Belief tracking
- Basic Church Website
- About Page
@ -35,40 +38,59 @@ The following features have been implemented in this app (see the [🗺️ Roadm
## 📥 Installing Frappe
To use this app, you must have a working Frappe environment. There are a variety of ways to install a Frappe instance. The recommended ways for this project are:
To use the 'Church' app, you must have a working Frappe environment first. There are a variety of ways to install a Frappe instance. The recommended ways for this project are:
### ☁️ In the Cloud
The easiest (but not free) way to get a working Frappe environment is to use [Frappe Cloud](https://frappe.io/cloud). For a few dollars per month you can run an instance in the cloud. You get your choice of support options and shouldn't need to worry about data loss yourself.
Note: Wit this option, the money you pay to FrappeCloud is not received by maintainers of this 'Church' app. - We offer the 'Church' software for free, but you pay for the cloud hosting through Frappe.
### 💪 Self-Host
If you're the more technical or frugal type, you can self-host an instance on a home pc or server. [Frappe Manager](https://github.com/rtcamp/frappe-manager) can be used to quickly setup a local frappe instance. The general steps are:
If you're the more technical and/or frugal type, you can self-host an instance on a home pc or server. [Frappe Manager](https://github.com/rtcamp/frappe-manager) can be used to quickly setup a local frappe instance. It's not as easy as a simple .exe file install, but we think you can do it (Please ask us for help if you can't)! The general steps are:
1. Find a machine onto which you can install Frappe (A dedicated linux-based machine is best. Windows is not recommended as it requires the use of [WSL](https://learn.microsoft.com/en-us/windows/wsl/install).)
1. Find a machine onto which you can install Frappe (A dedicated linux-based machine is best. Windows is possible, but is not recommended as it requires some extra steps and the use of [WSL](https://learn.microsoft.com/en-us/windows/wsl/install).)
2. Run the [frappe-manager install script](https://github.com/rtCamp/Frappe-Manager/tree/develop/scripts)
3. Create a new site using frappe-manager: `fm create -e prod your_site.com`.
3. Create a new site using frappe-manager: `fm create -e prod <church.your_site.com>`.
4. Update DNS records to point to your new site. This is a bit outside the scope of this project, but basically you need to either update your hosts file to map your site url (used in the above command) to the ip address of the machine hosting the frappe instance. Alternatively, you can update your DNS server on your router to point to your new site. If you need help with this, you can file an issue and I'd be glad to schedule a call to try to help you set it up.
Making a local instance of frappe accessible from outside of your network is currently out of the scope of this project, but with some persistence and some technical expertise, it can be achieved. If you are uncomfortable with this, it may be best to use the Frappe Cloud option above.
Making a local instance of frappe accessible from outside of your network is currently out of the scope of this project, but with some persistence and some technical expertise, it can be achieved. If you are completely lost or uncomfortable with this, it may be best to use the Frappe Cloud option above, or contact us for help. We'd be glad to help where we can.
## ⛪ Installing this Church app
You can install this app using the [bench](https://github.com/frappe/bench) CLI:
To install this app on your frappe instance:
If self-hosting, you can use bench by activating the bench environment with `fm shell`.
- If hosting on Frappe Cloud, you should be able to log into your Frappe Cloud dashboard, select your site, and install the app from the list of apps.
- If you are self-hosting, you can use bench by activating the [bench](https://github.com/frappe/bench) environment with `fm shell` and then running the following
To install Church:
```bash
# First we need to download the app:
bench get-app https://github.com/meichthys/church
## Or if you want to try the latest development version:
bench get-app https://github.com/meichthys/church --branch develop
```bash
# Set the bench command to use your site (Replace `<church.your_site.com>` with your actual site name):
bench use <church.your_site.com>
# Then we can install the app:
bench install-app church
```
# Download the app:
bench get-app https://github.com/meichthys/church
## Or if you want to try the latest development version:
bench get-app https://github.com/meichthys/church --branch develop
# Install the app:
bench install-app church
# Migrate the app for good measure:
bench migrate
# In the future, to update the app to the latest version, log into the host server and run:
fm shell
bench update
bench migrate
```
After the above installation you should be able to access the web interface using the URL you defined in the `bench create` command above. You should see the `Church` app installed when you view `Help > About`.
Before you start using the app, it is a good idea to setup a new `User` in the system with the `Church Admin` Role Profile and `Church Admin` Module Profile. This user will be able to manage all aspects of the church (the `Administrator` user should be reserved for system wide maintenance or troubleshooting). Additionally, if you want to delegate some responsibilities to other people, you can create additional `User`s with the `Church User` Role Profile and `Church User` Module Profiles. Thise types of users will be able to read and update most information, but not critical information. To see a list of permissions you can open the `Role Permissions Manager` and select the `Church Admin` or `Church User` roles to see what permissions these users roles have.
Before you start using the app be sure to:
1. Change the `Administrator` users's password (the default is `admin`). This user should only be used by the site administrator - and should not be used on a daily basis.
2. Setup a new user in the system by typing `New User` in the searchbar. Under the "Roles & Permissions" tab, Give this user the `Church Manager` Role Profile and `Church` Module Profile.
This user will be able to manage all aspects of the church.
3. If you want more than one user on the system, or if you want to delegate some responsibilities to other people, you can create additional users with the `Church User` Role Profile and `Church` Module Profiles.
These types of users will be able to read and update most information, but not certain critical information.
- To see a list of permissions you can open the `Role Permissions Manager` and select the `Church Manager` or `Church User` roles to see what permissions these users roles have.
## 🗺️ Feature Roadmap
@ -76,8 +98,6 @@ Hopefully this roadmap will help avoid too much scope creep and provide a sense
- Sermon Doctype
- Ministry tracking
- Fund Tracking
- Update fund balance after collection submission
- Add standard church website pages:
- Home/Welcome
- Missions

View File

@ -0,0 +1,108 @@
{
"actions": [],
"allow_rename": 1,
"autoname": "format:{date} - {#####}",
"creation": "2025-09-23 21:49:59.122163",
"description": "A letter sent to the church.",
"doctype": "DocType",
"editable_grid": 1,
"engine": "InnoDB",
"field_order": [
"date",
"is_private",
"column_break_zdbp",
"share_with_church",
"shared_date",
"section_break_qmpt",
"file",
"content"
],
"fields": [
{
"allow_in_quick_entry": 1,
"fieldname": "date",
"fieldtype": "Date",
"in_filter": 1,
"in_list_view": 1,
"in_preview": 1,
"in_standard_filter": 1,
"label": "Date Received",
"reqd": 1
},
{
"default": "0",
"description": "Check this to prevent the letter from being displayed publicly (i.e. on the website).",
"fieldname": "is_private",
"fieldtype": "Check",
"in_filter": 1,
"in_list_view": 1,
"in_preview": 1,
"in_standard_filter": 1,
"label": "Is Private?"
},
{
"fieldname": "column_break_zdbp",
"fieldtype": "Column Break"
},
{
"allow_in_quick_entry": 1,
"default": "0",
"description": "If this letter should be shared with the church.",
"fieldname": "share_with_church",
"fieldtype": "Check",
"in_filter": 1,
"in_list_view": 1,
"in_preview": 1,
"in_standard_filter": 1,
"label": "Share With Church?"
},
{
"description": "The date the letter was shared to the church.",
"fieldname": "shared_date",
"fieldtype": "Date",
"in_filter": 1,
"in_list_view": 1,
"in_preview": 1,
"in_standard_filter": 1,
"label": "Shared Date"
},
{
"fieldname": "section_break_qmpt",
"fieldtype": "Section Break"
},
{
"allow_in_quick_entry": 1,
"fieldname": "file",
"fieldtype": "Attach",
"in_filter": 1,
"in_list_view": 1,
"in_preview": 1,
"in_standard_filter": 1,
"label": "File"
},
{
"allow_in_quick_entry": 1,
"description": "Content of letter (if not sent as a file)",
"fieldname": "content",
"fieldtype": "Text Editor",
"in_list_view": 1,
"in_preview": 1,
"label": "Content"
}
],
"grid_page_length": 50,
"index_web_pages_for_search": 1,
"istable": 1,
"links": [],
"modified": "2025-10-03 23:08:55.266412",
"modified_by": "Administrator",
"module": "Church Communications",
"name": "Church Letter",
"naming_rule": "Expression",
"owner": "Administrator",
"permissions": [],
"row_format": "Dynamic",
"sort_field": "modified",
"sort_order": "DESC",
"states": []
}

View File

@ -0,0 +1,9 @@
# Copyright (c) 2025, meichthys and contributors
# For license information, please see license.txt
# import frappe
from frappe.model.document import Document
class ChurchLetter(Document):
pass

View File

@ -3,36 +3,37 @@
"add_translate_data": 0,
"columns": [
{
"fieldname": "parent",
"fieldname": "parenttype",
"fieldtype": "Link",
"label": "Type",
"options": "Doctype",
"width": 0
},
{
"fieldname": "parent",
"fieldtype": "Dynamic Link",
"label": "From",
"options": "Church Person",
"options": "parenttype",
"width": 0
},
{
"fieldname": "date",
"fieldtype": "Date",
"label": "Date",
"width": 0
},
{
"fieldname": "read_to_church",
"fieldtype": "Check",
"label": "Read to Church?",
"label": "Received",
"width": 0
},
{
"fieldname": "is_private",
"fieldtype": "Check",
"label": "Is Private?",
"label": "Private?",
"width": 0
},
{
"fieldname": "file",
"fieldtype": "Link",
"fieldtype": "Data",
"label": "File",
"options": "File",
"width": 0
"options": "URL",
"width": 200
},
{
"fieldname": "content",
@ -41,33 +42,23 @@
"width": 0
}
],
"creation": "2025-09-23 22:52:51.796888",
"creation": "2025-10-03 23:57:52.706273",
"disabled": 0,
"docstatus": 0,
"doctype": "Report",
"filters": [
{
"default": "Church Person",
"fieldname": "person",
"fieldtype": "Link",
"label": "Church Person",
"mandatory": 1,
"options": "Church Person",
"wildcard_filter": 0
}
],
"filters": [],
"idx": 0,
"is_standard": "Yes",
"letterhead": null,
"modified": "2025-09-23 23:56:51.124106",
"modified": "2025-10-04 00:57:20.117288",
"modified_by": "Administrator",
"module": "Church People",
"name": "Church Letters",
"module": "Church Communications",
"name": "Church Letters To Be Shared",
"owner": "Administrator",
"prepared_report": 0,
"query": "SELECT parent, date, read_to_church, is_private, file, content\nFROM `tabChurch Letter`\nWHERE parent = %(person)s\nORDER BY parent",
"query": "SELECT parenttype, parent, date, is_private, COALESCE(file, \" \"), content, name \nFROM `tabChurch Letter` \nWHERE share_with_church = True\n AND shared_date IS NULL;",
"ref_doctype": "Church Person",
"report_name": "Church Letters",
"report_name": "Church Letters To Be Shared",
"report_type": "Query Report",
"roles": [
{

View File

@ -0,0 +1,69 @@
{
"charts": [],
"content": "[{\"id\":\"nnvMTG5Sl5\",\"type\":\"paragraph\",\"data\":{\"text\":\"<i>\\\"Let no unwholesome talk come out of your mouths, but only what is helpful for building up the one in need and bringing grace to those who listen.\\\"/</i>\",\"col\":12}},{\"id\":\"ybuIQ-BIW-\",\"type\":\"card\",\"data\":{\"card_name\":\"Communication Reports\",\"col\":5}}]",
"creation": "2025-10-03 23:10:33.370229",
"custom_blocks": [],
"docstatus": 0,
"doctype": "Workspace",
"for_user": "",
"hide_custom": 0,
"icon": "mail",
"idx": 0,
"indicator_color": "green",
"is_hidden": 0,
"label": "Communications",
"links": [
{
"hidden": 0,
"is_query_report": 0,
"label": "Communication Reports",
"link_count": 3,
"link_type": "DocType",
"onboard": 0,
"type": "Card Break"
},
{
"hidden": 0,
"is_query_report": 1,
"label": "Missionary Letters",
"link_count": 0,
"link_to": "Church Missionary Letters",
"link_type": "Report",
"onboard": 0,
"type": "Link"
},
{
"hidden": 0,
"is_query_report": 1,
"label": "Person Letters",
"link_count": 0,
"link_to": "Church Person Letters",
"link_type": "Report",
"onboard": 0,
"type": "Link"
},
{
"hidden": 0,
"is_query_report": 1,
"label": "Letters Not Yet Shared With Curch",
"link_count": 0,
"link_to": "Church Letters To Be Shared",
"link_type": "Report",
"onboard": 0,
"type": "Link"
}
],
"modified": "2025-10-04 01:01:26.799817",
"modified_by": "Administrator",
"module": "Church Communications",
"name": "Communications",
"number_cards": [],
"owner": "Administrator",
"parent_page": "",
"public": 1,
"quick_lists": [],
"roles": [],
"sequence_id": 2.0,
"shortcuts": [],
"title": "Communications"
}

View File

View File

@ -0,0 +1,92 @@
{
"custom_fields": [],
"custom_perms": [
{
"_assign": null,
"_comments": null,
"_liked_by": null,
"_user_tags": null,
"amend": 0,
"cancel": 0,
"create": 1,
"creation": "2025-09-30 21:47:23.826602",
"delete": 1,
"docstatus": 0,
"email": 1,
"export": 1,
"idx": 0,
"if_owner": 0,
"import": 1,
"modified": "2025-09-30 21:47:23.826602",
"modified_by": "Administrator",
"name": "kdm4rn17ce",
"owner": "Administrator",
"parent": "Church Fund",
"permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "Church Manager",
"select": 1,
"share": 1,
"submit": 0,
"write": 1
},
{
"_assign": null,
"_comments": null,
"_liked_by": null,
"_user_tags": null,
"amend": 0,
"cancel": 0,
"create": 0,
"creation": "2025-09-26 23:06:43.941404",
"delete": 0,
"docstatus": 0,
"email": 0,
"export": 0,
"idx": 0,
"if_owner": 0,
"import": 0,
"modified": "2025-09-19 00:08:46.427725",
"modified_by": "Administrator",
"name": "q8iho1g2s6",
"owner": "Administrator",
"parent": "Church Fund",
"permlevel": 0,
"print": 0,
"read": 0,
"report": 0,
"role": "Church User",
"select": 0,
"share": 0,
"submit": 0,
"write": 0
}
],
"doctype": "Church Fund",
"links": [
{
"creation": "2025-09-02 01:11:30.383380",
"custom": 0,
"docstatus": 0,
"group": null,
"hidden": 0,
"idx": 1,
"is_child_table": 0,
"link_doctype": "Church Collection",
"link_fieldname": "fund",
"modified": "2025-09-26 23:06:33.331651",
"modified_by": "Administrator",
"name": "jptl8mpt67",
"owner": "Administrator",
"parent": "Church Fund",
"parent_doctype": null,
"parentfield": "links",
"parenttype": "DocType",
"table_fieldname": "donations"
}
],
"property_setters": [],
"sync_on_migrate": 1
}

View File

@ -11,18 +11,22 @@
"dynamic_filters_json": "[]",
"filters_json": "[]",
"group_by_type": "Count",
"idx": 2,
"idx": 3,
"is_public": 0,
"is_standard": 1,
"last_synced_on": "2025-09-21 22:10:31.079736",
"modified": "2025-09-21 22:40:42.003149",
"last_synced_on": "2025-10-03 22:59:38.179280",
"modified": "2025-10-03 23:00:21.417449",
"modified_by": "Administrator",
"module": "Church Finances",
"name": "Church Collections Sum",
"number_of_groups": 0,
"owner": "Administrator",
"parent_document_type": "Church Collection",
"roles": [],
"roles": [
{
"role": "Church Manager"
}
],
"show_values_over_chart": 1,
"source": "",
"time_interval": "Weekly",

View File

@ -0,0 +1,35 @@
{
"chart_name": "Church Fund Balances",
"chart_type": "Report",
"creation": "2025-10-02 01:25:37.459929",
"currency": "USD",
"custom_options": "{\"x_field\": \"fund\", \"chart_type\": \"Bar\", \"y_axis_fields\": [{\"idx\": 1, \"__islocal\": true, \"y_field\": \"balance\", \"color\": \"#29CD42\", \"name\": \"row 1\"}], \"y_fields\": [\"balance\"], \"colors\": [\"#29CD42\"]}",
"docstatus": 0,
"doctype": "Dashboard Chart",
"filters_json": "{}",
"group_by_type": "Count",
"idx": 0,
"is_public": 0,
"is_standard": 1,
"modified": "2025-10-02 01:26:04.007658",
"modified_by": "Administrator",
"module": "Church Finances",
"name": "Church Fund Balances",
"number_of_groups": 0,
"owner": "Administrator",
"report_name": "Church Fund Balances",
"roles": [],
"show_values_over_chart": 1,
"time_interval": "Yearly",
"timeseries": 0,
"timespan": "Last Year",
"type": "Bar",
"use_report_chart": 0,
"x_field": "fund",
"y_axis": [
{
"color": "#29CD42",
"y_field": "balance"
}
]
}

View File

@ -19,20 +19,57 @@ frappe.ui.form.on("Church Collection", {
},
});
// Keep Collection `total_amount` up to date when amounts are changed/added
frappe.ui.form.on("Church Donation", "amount", update_collection_total);
frappe.ui.form.on("Church Donation", "amount", function(frm, cdt, cdn) {
update_collection_total(frm);
update_fund_totals(frm);
});
// Keep Collection `total_amount` up to date when rows are removed from grid
frappe.ui.form.on("Church Donation", {
donations_remove: update_collection_total
donations_remove: function(frm) {
update_collection_total(frm);
update_fund_totals(frm);
}
});
// Also update when fund field changes
frappe.ui.form.on("Church Donation", "fund", function(frm, cdt, cdn) {
update_fund_totals(frm);
});
// Update Collection `total_amount` with sum of donation amounts
function update_collection_total(frm) {
var total = 0;
frm.doc.donations.forEach(function (donation) {
total += donation.amount || 0;
});
frm.set_value("total_amount", total);
var total = 0;
frm.doc.donations.forEach(function (donation) {
total += donation.amount || 0;
});
frm.set_value("total_amount", total);
}
// Update fund_totals table based on donations
function update_fund_totals(frm) {
// Clear existing fund_totals before each update
frm.clear_table("fund_totals");
// Calculate totals by fund
var fund_totals = {};
frm.doc.donations.forEach(function(donation) {
if (donation.fund && donation.amount) {
if (!fund_totals[donation.fund]) {
fund_totals[donation.fund] = 0;
}
fund_totals[donation.fund] += donation.amount;
}
});
// Add rows to fund_totals table
Object.keys(fund_totals).forEach(function(fund) {
var row = frm.add_child("fund_totals");
row.fund = fund;
row.total = fund_totals[fund];
});
// Refresh the fund_totals field to show updated data
frm.refresh_field("fund_totals");
}

View File

@ -11,6 +11,7 @@
"event",
"column_break_ijpy",
"total_amount",
"fund_totals",
"section_break_izta",
"donations"
],
@ -53,14 +54,22 @@
"fieldname": "total_amount",
"fieldtype": "Currency",
"in_list_view": 1,
"in_preview": 1,
"label": "Total Amount",
"read_only": 1
},
{
"fieldname": "fund_totals",
"fieldtype": "Table",
"label": "Fund Totals",
"options": "Church Collection Fund Total",
"read_only": 1
}
],
"grid_page_length": 50,
"index_web_pages_for_search": 1,
"links": [],
"modified": "2025-09-04 23:45:50.511534",
"modified": "2025-10-01 22:52:37.422727",
"modified_by": "Administrator",
"module": "Church Finances",
"name": "Church Collection",
@ -85,4 +94,4 @@
"sort_order": "DESC",
"states": [],
"track_changes": 1
}
}

View File

@ -1,9 +1,35 @@
# Copyright (c) 2025, meichthys and contributors
# For license information, please see license.txt
# import frappe
import frappe
from frappe.model.document import Document
class ChurchCollection(Document):
pass
def after_insert(self):
self.update_church_funds()
def update_church_funds(self):
# Group donations by fund
fund_data = {}
for donation in self.donations:
if donation.fund and donation.amount:
if donation.fund not in fund_data:
fund_data[donation.fund] = 0
fund_data[donation.fund] += donation.amount
# Update each Church Fund
for fund_name, fund_total in fund_data.items():
fund_doc = frappe.get_doc("Church Fund", fund_name)
# Add financial transaction
transaction = fund_doc.append(
"transactions",
{"amount": fund_total, "source_type": "Church Collection", "source": self.name},
)
transaction.creation = frappe.utils.now()
# Update balance (assuming you want to add to existing balance)
current_balance = fund_doc.get("balance") or 0
fund_doc.balance = current_balance + fund_total
fund_doc.save()

View File

@ -0,0 +1,47 @@
{
"actions": [],
"allow_rename": 1,
"creation": "2025-10-01 22:18:39.386224",
"description": "Total donations for specific `Church Fund`s",
"doctype": "DocType",
"engine": "InnoDB",
"field_order": [
"fund",
"total"
],
"fields": [
{
"fieldname": "fund",
"fieldtype": "Link",
"in_filter": 1,
"in_list_view": 1,
"in_standard_filter": 1,
"label": "Fund",
"options": "Church Fund",
"reqd": 1
},
{
"fieldname": "total",
"fieldtype": "Currency",
"in_filter": 1,
"in_list_view": 1,
"in_standard_filter": 1,
"label": "Total",
"reqd": 1
}
],
"grid_page_length": 50,
"index_web_pages_for_search": 1,
"istable": 1,
"links": [],
"modified": "2025-10-02 00:41:27.821263",
"modified_by": "Administrator",
"module": "Church Finances",
"name": "Church Collection Fund Total",
"owner": "Administrator",
"permissions": [],
"row_format": "Dynamic",
"sort_field": "modified",
"sort_order": "DESC",
"states": []
}

View File

@ -0,0 +1,9 @@
# Copyright (c) 2025, meichthys and contributors
# For license information, please see license.txt
# import frappe
from frappe.model.document import Document
class ChurchCollectionFundTotal(Document):
pass

View File

@ -0,0 +1,70 @@
{
"actions": [],
"allow_rename": 1,
"creation": "2025-10-01 23:06:24.774047",
"description": "A financial transaction from a source (i.e. Person, Business, etc)",
"doctype": "DocType",
"editable_grid": 1,
"engine": "InnoDB",
"field_order": [
"amount",
"source_type",
"source",
"notes"
],
"fields": [
{
"fieldname": "amount",
"fieldtype": "Currency",
"in_filter": 1,
"in_list_view": 1,
"in_preview": 1,
"in_standard_filter": 1,
"label": "Amount",
"reqd": 1
},
{
"fieldname": "notes",
"fieldtype": "Small Text",
"in_list_view": 1,
"in_preview": 1,
"label": "Notes"
},
{
"fieldname": "source_type",
"fieldtype": "Link",
"in_filter": 1,
"in_list_view": 1,
"in_preview": 1,
"in_standard_filter": 1,
"label": "Source Type",
"options": "DocType",
"reqd": 1
},
{
"fieldname": "source",
"fieldtype": "Dynamic Link",
"in_filter": 1,
"in_list_view": 1,
"in_preview": 1,
"in_standard_filter": 1,
"label": "Source",
"options": "source_type",
"reqd": 1
}
],
"grid_page_length": 50,
"index_web_pages_for_search": 1,
"istable": 1,
"links": [],
"modified": "2025-10-02 00:50:27.009030",
"modified_by": "Administrator",
"module": "Church Finances",
"name": "Church Financial Transaction",
"owner": "Administrator",
"permissions": [],
"row_format": "Dynamic",
"sort_field": "modified",
"sort_order": "DESC",
"states": []
}

View File

@ -0,0 +1,9 @@
# Copyright (c) 2025, meichthys and contributors
# For license information, please see license.txt
# import frappe
from frappe.model.document import Document
class ChurchFinancialTransaction(Document):
pass

View File

@ -11,7 +11,10 @@
"description",
"column_break_ojjy",
"start_date",
"end_date"
"end_date",
"balance",
"section_break_xcgh",
"transactions"
],
"fields": [
{
@ -42,6 +45,21 @@
"fieldname": "end_date",
"fieldtype": "Date",
"label": "End Date"
},
{
"fieldname": "balance",
"fieldtype": "Currency",
"label": "Balance"
},
{
"fieldname": "section_break_xcgh",
"fieldtype": "Section Break"
},
{
"fieldname": "transactions",
"fieldtype": "Table",
"label": "Transactions",
"options": "Church Financial Transaction"
}
],
"grid_page_length": 50,
@ -53,7 +71,7 @@
"table_fieldname": "donations"
}
],
"modified": "2025-09-08 23:10:00.488734",
"modified": "2025-10-01 23:11:07.400554",
"modified_by": "Administrator",
"module": "Church Finances",
"name": "Church Fund",
@ -79,4 +97,4 @@
"sort_order": "DESC",
"states": [],
"track_changes": 1
}
}

View File

@ -6,4 +6,18 @@ from frappe.model.document import Document
class ChurchFund(Document):
pass
def before_save(self):
# Ensure balance is always current before saving
self.recalculate_balance()
def on_update(self):
self.recalculate_balance()
def recalculate_balance(self):
# Calculate balance from all financial transactions
total_balance = 0
for transaction in self.transactions:
total_balance += transaction.amount or 0
# Update the balance field
self.balance = total_balance

View File

@ -17,10 +17,10 @@
"wildcard_filter": 0
}
],
"idx": 2,
"idx": 3,
"is_standard": "Yes",
"letterhead": null,
"modified": "2025-09-21 22:47:37.094571",
"modified": "2025-10-02 01:07:53.346443",
"modified_by": "Administrator",
"module": "Church Finances",
"name": "Church Collection Bank Reconciliation",
@ -33,6 +33,9 @@
"roles": [
{
"role": "System Manager"
},
{
"role": "Church Manager"
}
],
"timeout": 0

View File

@ -11,7 +11,7 @@
"is_standard": "Yes",
"json": "{\"filters\":[],\"fields\":[[\"name\",\"Church Collection\"],[\"event\",\"Church Collection\"],[\"fund\",\"Church Donation\"],[\"person\",\"Church Donation\"],[\"payment_type\",\"Church Donation\"],[\"check_number\",\"Church Donation\"],[\"amount\",\"Church Donation\"]],\"order_by\":\"`tabChurch Collection`.`modified` desc\",\"page_length\":20,\"column_widths\":{\"name\":120,\"event\":120,\"Church Donation:fund\":120,\"Church Donation:person\":120,\"Church Donation:payment_type\":120,\"Church Donation:check_number\":120,\"Church Donation:amount\":120},\"group_by\":null}",
"letterhead": null,
"modified": "2025-09-21 22:47:37.149849",
"modified": "2025-10-02 01:10:11.876159",
"modified_by": "Administrator",
"module": "Church Finances",
"name": "Church Donations",
@ -23,6 +23,9 @@
"roles": [
{
"role": "System Manager"
},
{
"role": "Church Manager"
}
],
"timeout": 0

View File

@ -11,7 +11,7 @@
"is_standard": "Yes",
"json": "{\"filters\":[[\"Church Collection\",\"date\",\"Timespan\",\"this year\",false]],\"fields\":[[\"person\",\"Church Donation\"],[\"_aggregate_column\",\"Church Donation\"]],\"order_by\":\"`tabChurch Collection`.`modified` desc\",\"add_totals_row\":true,\"page_length\":20,\"column_widths\":{\"Church Donation:person\":120,\"_aggregate_column\":200},\"group_by\":{\"group_by\":\"`tabChurch Donation`.`person`\",\"aggregate_function\":\"sum\",\"aggregate_on\":\"`tabChurch Donation`.`amount`\"}}",
"letterhead": null,
"modified": "2025-09-21 22:47:37.187395",
"modified": "2025-10-02 01:09:55.346449",
"modified_by": "Administrator",
"module": "Church Finances",
"name": "Church Donations by Person",
@ -23,6 +23,9 @@
"roles": [
{
"role": "System Manager"
},
{
"role": "Church Manager"
}
],
"timeout": 0

View File

@ -0,0 +1,46 @@
{
"add_total_row": 1,
"add_translate_data": 0,
"columns": [
{
"fieldname": "fund",
"fieldtype": "Link",
"label": "Fund",
"options": "Church Fund",
"width": 0
},
{
"fieldname": "balance",
"fieldtype": "Currency",
"label": "Balance",
"width": 0
}
],
"creation": "2025-10-01 23:58:31.335720",
"disabled": 0,
"docstatus": 0,
"doctype": "Report",
"filters": [],
"idx": 0,
"is_standard": "Yes",
"letterhead": null,
"modified": "2025-10-02 00:14:58.822835",
"modified_by": "Administrator",
"module": "Church Finances",
"name": "Church Fund Balances",
"owner": "Administrator",
"prepared_report": 0,
"query": "SELECT fund, balance\nFROM `tabChurch Fund`;",
"ref_doctype": "Church Fund",
"report_name": "Church Fund Balances",
"report_type": "Query Report",
"roles": [
{
"role": "Church User"
},
{
"role": "Church Manager"
}
],
"timeout": 0
}

View File

@ -0,0 +1,76 @@
{
"add_total_row": 1,
"add_translate_data": 0,
"columns": [
{
"fieldname": "fund",
"fieldtype": "Link",
"label": "Fund",
"options": "Church Fund",
"width": 0
},
{
"fieldname": "amount",
"fieldtype": "Currency",
"label": "Amount",
"width": 0
},
{
"fieldname": "notes",
"fieldtype": "Data",
"label": "Notes",
"width": 0
},
{
"fieldname": "creation",
"fieldtype": "Datetime",
"label": "Date",
"width": 0
}
],
"creation": "2025-10-02 00:08:03.097873",
"disabled": 0,
"docstatus": 0,
"doctype": "Report",
"filters": [
{
"default": "",
"fieldname": "from_date",
"fieldtype": "Date",
"label": "From Date",
"mandatory": 1,
"options": "",
"wildcard_filter": 0
},
{
"default": "",
"fieldname": "to_date",
"fieldtype": "Date",
"label": "To Date",
"mandatory": 1,
"wildcard_filter": 0
}
],
"idx": 0,
"is_standard": "Yes",
"letterhead": null,
"modified": "2025-10-02 00:37:51.943094",
"modified_by": "Administrator",
"module": "Church Finances",
"name": "Church Fund Transactions",
"owner": "Administrator",
"prepared_report": 0,
"query": "SELECT \n cf.fund, \n ft.amount, \n ft.notes, \n ft.creation\nFROM \n `tabChurch Fund` cf \nINNER JOIN \n `tabChurch Financial Transaction` ft ON ft.parent = cf.name \nWHERE \n ft.parenttype = 'Church Fund'\n AND (%(from_date)s IS NULL OR DATE(ft.creation) >= %(from_date)s) \n AND (%(to_date)s IS NULL OR DATE(ft.creation) <= %(to_date)s) \nORDER BY\n cf.fund, ft.creation DESC",
"ref_doctype": "Church Fund",
"report_name": "Church Fund Transactions",
"report_type": "Query Report",
"roles": [
{
"role": "Church User"
},
{
"role": "Church Manager"
}
],
"timeout": 0
}

View File

@ -0,0 +1,76 @@
{
"add_total_row": 1,
"add_translate_data": 0,
"columns": [
{
"fieldname": "fund",
"fieldtype": "Link",
"label": "Fund",
"options": "Church Fund",
"width": 0
},
{
"fieldname": "amount",
"fieldtype": "Currency",
"label": "Amount",
"width": 0
},
{
"fieldname": "notes",
"fieldtype": "Data",
"label": "Notes",
"width": 0
},
{
"fieldname": "creation",
"fieldtype": "Datetime",
"label": "Date",
"width": 0
}
],
"creation": "2025-10-02 00:47:04.809206",
"disabled": 0,
"docstatus": 0,
"doctype": "Report",
"filters": [
{
"default": "",
"fieldname": "from_date",
"fieldtype": "Date",
"label": "From Date",
"mandatory": 1,
"options": "",
"wildcard_filter": 0
},
{
"default": "",
"fieldname": "to_date",
"fieldtype": "Date",
"label": "To Date",
"mandatory": 1,
"wildcard_filter": 0
}
],
"idx": 0,
"is_standard": "Yes",
"letterhead": null,
"modified": "2025-10-02 00:47:04.809206",
"modified_by": "Administrator",
"module": "Church Finances",
"name": "Church Fund Transactions By Date",
"owner": "Administrator",
"prepared_report": 0,
"query": "SELECT \n cf.fund, \n ft.amount, \n ft.notes, \n ft.creation\nFROM \n `tabChurch Fund` cf \nINNER JOIN \n `tabChurch Financial Transaction` ft ON ft.parent = cf.name \nWHERE \n ft.parenttype = 'Church Fund'\n AND (%(from_date)s IS NULL OR DATE(ft.creation) >= %(from_date)s) \n AND (%(to_date)s IS NULL OR DATE(ft.creation) <= %(to_date)s) \nORDER BY\n cf.fund, ft.creation DESC",
"ref_doctype": "Church Fund",
"report_name": "Church Fund Transactions By Date",
"report_type": "Query Report",
"roles": [
{
"role": "Church User"
},
{
"role": "Church Manager"
}
],
"timeout": 0
}

View File

@ -1,11 +1,15 @@
{
"charts": [
{
"chart_name": "Church Fund Balances",
"label": "Church Fund Balances"
},
{
"chart_name": "Church Collections Sum",
"label": "Collections"
}
],
"content": "[{\"id\":\"mncYXd3Fp_\",\"type\":\"paragraph\",\"data\":{\"text\":\"<i>\\\"Which of you, wishing to build a tower, does not first sit down and \\ncount the cost to see if he has the resources to complete it?\\\"</i>\",\"col\":12}},{\"id\":\"MmG7zVkZbr\",\"type\":\"chart\",\"data\":{\"chart_name\":\"Collections\",\"col\":12}},{\"id\":\"nN5R0rrK8W\",\"type\":\"spacer\",\"data\":{\"col\":12}},{\"id\":\"Xwvf2HyJiA\",\"type\":\"card\",\"data\":{\"card_name\":\"Collection Documents\",\"col\":4}},{\"id\":\"m34hRRgTkK\",\"type\":\"card\",\"data\":{\"card_name\":\"Collection Reports\",\"col\":4}},{\"id\":\"l_H4g7YzJQ\",\"type\":\"spacer\",\"data\":{\"col\":12}}]",
"content": "[{\"id\":\"mncYXd3Fp_\",\"type\":\"paragraph\",\"data\":{\"text\":\"<i>\\\"Which of you, wishing to build a tower, does not first sit down and \\ncount the cost to see if he has the resources to complete it?\\\"</i>\",\"col\":12}},{\"id\":\"MmG7zVkZbr\",\"type\":\"chart\",\"data\":{\"chart_name\":\"Collections\",\"col\":6}},{\"id\":\"K7pkEdUhpZ\",\"type\":\"chart\",\"data\":{\"chart_name\":\"Church Fund Balances\",\"col\":6}},{\"id\":\"nN5R0rrK8W\",\"type\":\"spacer\",\"data\":{\"col\":12}},{\"id\":\"Xwvf2HyJiA\",\"type\":\"card\",\"data\":{\"card_name\":\"Collection Documents\",\"col\":4}},{\"id\":\"m34hRRgTkK\",\"type\":\"card\",\"data\":{\"card_name\":\"Collection Reports\",\"col\":4}},{\"id\":\"lFJ3k1PnBW\",\"type\":\"card\",\"data\":{\"card_name\":\"Fund Reports\",\"col\":4}},{\"id\":\"l_H4g7YzJQ\",\"type\":\"spacer\",\"data\":{\"col\":12}}]",
"creation": "2025-09-14 22:29:59.428671",
"custom_blocks": [],
"docstatus": 0,
@ -18,47 +22,6 @@
"is_hidden": 0,
"label": "Finances",
"links": [
{
"hidden": 0,
"is_query_report": 0,
"label": "Collection Reports",
"link_count": 3,
"link_type": "DocType",
"onboard": 0,
"type": "Card Break"
},
{
"hidden": 0,
"is_query_report": 0,
"label": "Donations",
"link_count": 0,
"link_to": "Church Donations",
"link_type": "Report",
"onboard": 0,
"report_ref_doctype": "Church Collection",
"type": "Link"
},
{
"hidden": 0,
"is_query_report": 1,
"label": "Collection Bank Reconciliation",
"link_count": 0,
"link_to": "Church Collection Bank Reconciliation",
"link_type": "Report",
"onboard": 0,
"type": "Link"
},
{
"hidden": 0,
"is_query_report": 0,
"label": "Donations by Person (This Year)",
"link_count": 0,
"link_to": "Church Donations by Person",
"link_type": "Report",
"onboard": 0,
"report_ref_doctype": "Church Collection",
"type": "Link"
},
{
"hidden": 0,
"is_query_report": 0,
@ -97,19 +60,79 @@
"link_type": "DocType",
"onboard": 0,
"type": "Link"
},
{
"hidden": 0,
"is_query_report": 0,
"label": "Fund Reports",
"link_count": 1,
"link_type": "DocType",
"onboard": 0,
"type": "Card Break"
},
{
"hidden": 0,
"is_query_report": 1,
"label": "Church Fund Balances",
"link_count": 0,
"link_to": "Church Fund Balances",
"link_type": "Report",
"onboard": 0,
"type": "Link"
},
{
"hidden": 0,
"is_query_report": 0,
"label": "Collection Reports",
"link_count": 3,
"link_type": "DocType",
"onboard": 0,
"type": "Card Break"
},
{
"hidden": 0,
"is_query_report": 0,
"label": "Donations",
"link_count": 0,
"link_to": "Church Donations",
"link_type": "Report",
"onboard": 0,
"report_ref_doctype": "Church Collection",
"type": "Link"
},
{
"hidden": 0,
"is_query_report": 1,
"label": "Collection Bank Reconciliation",
"link_count": 0,
"link_to": "Church Collection Bank Reconciliation",
"link_type": "Report",
"onboard": 0,
"type": "Link"
},
{
"hidden": 0,
"is_query_report": 0,
"label": "Donations Totals by Person (This Year)",
"link_count": 0,
"link_to": "Church Donations by Person",
"link_type": "Report",
"onboard": 0,
"report_ref_doctype": "Church Collection",
"type": "Link"
}
],
"modified": "2025-09-25 23:12:50.561032",
"modified": "2025-10-04 01:05:15.885894",
"modified_by": "Administrator",
"module": "Church Finances",
"name": "Finances",
"number_cards": [],
"owner": "Administrator",
"parent_page": "Church",
"parent_page": "",
"public": 1,
"quick_lists": [],
"roles": [],
"sequence_id": 26.0,
"sequence_id": 3.0,
"shortcuts": [],
"title": "Finances"
}

View File

@ -2,20 +2,29 @@
"allow_roles": [
{
"role": "Administrator"
},
{
"role": "Church Manager"
},
{
"role": "Church User"
}
],
"creation": "2025-09-07 00:14:45.033193",
"creation": "2025-09-26 23:06:43.733904",
"docstatus": 0,
"doctype": "Module Onboarding",
"documentation_url": "https://github.com/meichthys/church",
"idx": 0,
"is_complete": 0,
"modified": "2025-09-21 22:43:07.160106",
"modified": "2025-09-30 21:21:52.088048",
"modified_by": "Administrator",
"module": "Church Foundations",
"name": "Church",
"owner": "Administrator",
"steps": [
{
"step": "Church Manager"
},
{
"step": "Church Information"
},
@ -32,7 +41,7 @@
"step": "Church Prayer Request"
}
],
"subtitle": "People, Families, Events, Ministries, and more...",
"subtitle": "People, Families, Events, Ministries, Collections, and more...",
"success_message": "Your Church is setup! \ud83c\udf89 May God grow your ministry \ud83d\ude4f",
"title": "\u26ea Let's Set Up Your Church."
}

View File

@ -5,7 +5,7 @@
"description": "Events can be used to track `Church Person` attendance and to link to `Church Collection`s",
"docstatus": 0,
"doctype": "Onboarding Step",
"idx": 0,
"idx": 1,
"is_complete": 0,
"is_single": 0,
"is_skipped": 0,

View File

@ -1,15 +1,16 @@
{
"action": "Create Entry",
"action_label": "Add Church Information",
"creation": "2025-09-18 00:37:00.347151",
"description": "Church information is used across the application to populate parts of the church website, letterheads, reports, etc.",
"docstatus": 0,
"doctype": "Onboarding Step",
"form_tour": "Church Information",
"idx": 0,
"idx": 1,
"is_complete": 0,
"is_single": 1,
"is_skipped": 0,
"modified": "2025-09-18 00:47:42.796050",
"modified": "2025-09-28 22:44:13.743291",
"modified_by": "Administrator",
"name": "Church Information",
"owner": "Administrator",

View File

@ -0,0 +1,21 @@
{
"action": "Create Entry",
"action_label": "Create Church Manager User",
"creation": "2025-09-30 20:52:59.340570",
"description": "Before you get started, you should create a new user. The 'Administrator' user should not be used on a daily basis and should be reserved for troubleshooting and system configuration. At least one separate user should be created with the 'Church Manager' RoleProfile and the 'Church' ModuleProfile permissions. These users will have full access to the Church app.\n\nAdditional users can also be created with the 'Church User' RoleProfile and 'Church' ModuleProfile permissions. These users will have access to most of the Church app, but will be restricted from modifying, or even seeing sensitive portions of the app. To see the exact permissions that these users have, you can (with the 'Administrator' account) use the seach bar at the top to search for 'Role Permissions Manager' and select the 'Church User' role to see what is accessible by those types of users.",
"docstatus": 0,
"doctype": "Onboarding Step",
"idx": 0,
"is_complete": 0,
"is_single": 0,
"is_skipped": 0,
"modified": "2025-09-30 20:53:20.314286",
"modified_by": "Administrator",
"name": "Church Manager",
"owner": "Administrator",
"reference_document": "User",
"show_form_tour": 0,
"show_full_form": 0,
"title": "Church Manager",
"validate_action": 1
}

View File

@ -1,7 +1,7 @@
{
"action": "Create Entry",
"action_label": "Add Church Person",
"creation": "2025-09-07 00:14:45.050314",
"creation": "2025-09-26 23:06:43.748709",
"description": "Adding `Church Person`s allows you to track the person's roles, attendance, donations, etc.",
"docstatus": 0,
"doctype": "Onboarding Step",
@ -10,7 +10,7 @@
"is_complete": 0,
"is_single": 0,
"is_skipped": 0,
"modified": "2025-09-18 00:37:50.242082",
"modified": "2025-09-07 00:57:18.263385",
"modified_by": "Administrator",
"name": "Church Person",
"owner": "Administrator",

View File

@ -4,7 +4,7 @@
"creation": "2025-09-13 01:20:43.693886",
"docstatus": 0,
"doctype": "Onboarding Step",
"idx": 0,
"idx": 1,
"is_complete": 0,
"is_single": 0,
"is_skipped": 0,

View File

@ -1,55 +0,0 @@
{
"charts": [
{
"chart_name": "Church Persons Count",
"label": "Church Persons"
},
{
"chart_name": "Church Members Count (New by Month)",
"label": "New Church Members"
},
{
"chart_name": "Church Collections Sum",
"label": "Church Collections"
}
],
"content": "[{\"id\":\"NSqchc_eQ4\",\"type\":\"onboarding\",\"data\":{\"onboarding_name\":\"Church\",\"col\":12}},{\"id\":\"qv6aLVY432\",\"type\":\"header\",\"data\":{\"text\":\"<span class=\\\"h4\\\"><b>Welcome</b></span>\",\"col\":12}},{\"id\":\"QKi-Jsh-R6\",\"type\":\"paragraph\",\"data\":{\"text\":\"This is your Church workspace. Workspaces can be customized by administrators to add shortcuts, graphs, number cards, and more. Some summary information is shown below, but feel free to customize the dashboard with your most commonly used shortcuts and information.\",\"col\":12}},{\"id\":\"72BkdyGGxD\",\"type\":\"paragraph\",\"data\":{\"text\":\"\ud83d\udc48&nbsp;Separate workspaces for different Church information can be found under this workspace in the left-hand sidebar.\",\"col\":12}},{\"id\":\"3LXNl1IbpH\",\"type\":\"paragraph\",\"data\":{\"text\":\"\ud83d\udcc4&nbsp;You can create your own custom reports by going to a specific `[Document] Report`, filtering the report, then choosing `save as` (custom)&nbsp; in the `...` report menu.\",\"col\":12}},{\"id\":\"sY8dboCPsj\",\"type\":\"number_card\",\"data\":{\"number_card_name\":\"Church Persons\",\"col\":4}},{\"id\":\"a_cA8V4z-J\",\"type\":\"number_card\",\"data\":{\"number_card_name\":\"Church Members\",\"col\":4}},{\"id\":\"36M5XhzNCx\",\"type\":\"number_card\",\"data\":{\"number_card_name\":\"Church Families\",\"col\":4}},{\"id\":\"bof2v_IrxC\",\"type\":\"chart\",\"data\":{\"chart_name\":\"Church Persons\",\"col\":6}},{\"id\":\"mQTGGrJNyq\",\"type\":\"chart\",\"data\":{\"chart_name\":\"New Church Members\",\"col\":6}},{\"id\":\"c3L6Nwh7-H\",\"type\":\"chart\",\"data\":{\"chart_name\":\"Church Collections\",\"col\":12}}]",
"creation": "2025-08-22 00:39:02.127277",
"custom_blocks": [],
"docstatus": 0,
"doctype": "Workspace",
"for_user": "",
"hide_custom": 0,
"icon": "church",
"idx": 0,
"indicator_color": "",
"is_hidden": 0,
"label": "Church",
"links": [],
"modified": "2025-09-21 22:52:16.053681",
"modified_by": "Administrator",
"module": "Church Foundations",
"name": "Church",
"number_cards": [
{
"label": "Church Persons",
"number_card_name": "Church Persons"
},
{
"label": "Church Members",
"number_card_name": "Church Members"
},
{
"label": "Church Families",
"number_card_name": "Church Families"
}
],
"owner": "Administrator",
"parent_page": "",
"public": 1,
"quick_lists": [],
"roles": [],
"sequence_id": 22.0,
"shortcuts": [],
"title": "Church"
}

View File

@ -0,0 +1,29 @@
{
"charts": [],
"content": "[{\"id\":\"qv6aLVY432\",\"type\":\"header\",\"data\":{\"text\":\"\u2139\ufe0f<span class=\\\"h4\\\"><b>About</b></span>\",\"col\":12}},{\"id\":\"3y9XjWNIDH\",\"type\":\"paragraph\",\"data\":{\"text\":\"`Church` is a completely free and open-source church management application. <i>\\\"Freely you have received; freely give. ~Jesus\\\"</i>\",\"col\":12}},{\"id\":\"LypZM8WJbL\",\"type\":\"header\",\"data\":{\"text\":\"\ud83c\udf1f<span class=\\\"h4\\\"><b>Overview</b></span>\",\"col\":12}},{\"id\":\"72BkdyGGxD\",\"type\":\"paragraph\",\"data\":{\"text\":\"<span class=\\\"h4\\\"></span><span class=\\\"h5\\\">Workspaces: </span>Each menu item to the left is called a 'Workspace'.<br>Custom workspaces can be created by clicking the `+New` button on the bottom right. Shortcuts, cards, graphs, notes, and other pieces of information can be added to your custom workspace. Keep in mind that custom workspaces are only visible to your user.\",\"col\":12}},{\"id\":\"nACFTYcDpg\",\"type\":\"paragraph\",\"data\":{\"text\":\"<span class=\\\"h5\\\">Navigation:</span>&nbsp;To navigate the system you can use the following:<br>&nbsp; &nbsp;&nbsp;\u2b05\ufe0f The sidebar items on the left will take you to a workspace for the given module<br>&nbsp; &nbsp;&nbsp;\u2196\ufe0f Clicking on the icon on the top left will take you back to this workspace page.<br>&nbsp; &nbsp;&nbsp;\u2197\ufe0f Using the search bar, you can search for different system items (i.e. Church Person, Church Collection, Church Information, etc)<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; You can also enter the following patterns in the search:<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; `New Church &lt;Document&gt;` - To Create a new document of the specified type (i.e. New Church Person)<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; `Church &lt;Document&gt; List` - To show a list of existing documents of the specified type (i.e. Church Person List)\",\"col\":12}},{\"id\":\"NSqchc_eQ4\",\"type\":\"onboarding\",\"data\":{\"onboarding_name\":\"Church\",\"col\":12}},{\"id\":\"CHRf80k2is\",\"type\":\"header\",\"data\":{\"text\":\"\u2753<span class=\\\"h4\\\"><b>FAQ</b></span>\",\"col\":12}},{\"id\":\"rUk2y7CBCh\",\"type\":\"paragraph\",\"data\":{\"text\":\"<b>Why is this free? Is there a catch?:&nbsp;</b><span class=\\\"h5\\\"><span style=\\\"font-weight: normal;\\\">There's no catch.&nbsp;The application is free in its entirety. The original developer was saddened to see businesses profiting off of a need for churches to be organized. The global church body should be able to support itself in all areas via the talents and generosity of it's members.</span></span><span class=\\\"h5\\\" style=\\\"font-weight: normal;\\\"><br><br><b>Can I customize the default options?</b>: Yes, most drop-down lists should give you an option to 'Create New &lt;Document&gt;'. Clicking this option will allow you to add an additional option to the drop-down list for future use. In fact, the system is entirely customizable to the Administrator account, to the point where you can create new 'DocTypes', Reports, Workflows, Webpages, etc. If you have ideas for improvements that other churches could use, you can report them to our github </span>repository<span class=\\\"h5\\\" style=\\\"font-weight: normal;\\\">.</span>\",\"col\":12}},{\"id\":\"42bOdD9xyC\",\"type\":\"header\",\"data\":{\"text\":\"\ud83c\udd98<span class=\\\"h4\\\"><b>Support</b></span>\",\"col\":12}},{\"id\":\"pJyhpxlSjA\",\"type\":\"paragraph\",\"data\":{\"text\":\"If you have issues or suggestions, please report them to the 'Church' Github <a href=\\\"https://github.com/meichthys/church/issues\\\" draggable=\\\"false\\\">repository</a>.\",\"col\":12}},{\"id\":\"8fQ8usz33T\",\"type\":\"header\",\"data\":{\"text\":\"\ud83e\udd1d<span class=\\\"h4\\\"><b>Contribute</b></span>\",\"col\":12}},{\"id\":\"dBcYsyF07e\",\"type\":\"paragraph\",\"data\":{\"text\":\"If you have technical expertise and would like to contribute to the development of this project, please join us on <a href=\\\"https://github.com/meichthys/church\\\">github</a>.<br>If you would like to support the project financially, don't. Instead, pray for the developers and for the churches using the software.\",\"col\":12}},{\"id\":\"JQvQ237QXM\",\"type\":\"header\",\"data\":{\"text\":\"\ud83d\udce2<span class=\\\"h4\\\"><b>Credits</b></span>\",\"col\":12}},{\"id\":\"Fbdz2raOGi\",\"type\":\"paragraph\",\"data\":{\"text\":\"- All the <a href=\\\"https://github.com/meichthys/church/graphs/contributors\\\">contributors</a> of this project. Thank You!<br>-&nbsp;<a href=\\\"https://frappe.io/\\\">Frappe</a>&nbsp;Framework - This application is built on top of this great open source software.<br>- Your IT Administrator - They set this application up for you!\",\"col\":12}}]",
"creation": "2025-08-22 00:39:02.127277",
"custom_blocks": [],
"docstatus": 0,
"doctype": "Workspace",
"for_user": "",
"hide_custom": 0,
"icon": "church",
"idx": 0,
"indicator_color": "",
"is_hidden": 0,
"label": "Getting Started",
"links": [],
"modified": "2025-10-03 23:11:34.746888",
"modified_by": "Administrator",
"module": "Church Foundations",
"name": "Getting Started",
"number_cards": [],
"owner": "Administrator",
"parent_page": "",
"public": 1,
"quick_lists": [],
"roles": [],
"sequence_id": 1.0,
"shortcuts": [],
"title": "Getting Started"
}

View File

@ -8,6 +8,7 @@
"engine": "InnoDB",
"field_order": [
"event_name",
"type",
"all_day",
"start_date",
"start_time",
@ -15,7 +16,6 @@
"end_time",
"column_break_bkje",
"attendance_total",
"type",
"address",
"description",
"section_break_dlpa",
@ -116,7 +116,7 @@
"grid_page_length": 50,
"index_web_pages_for_search": 1,
"links": [],
"modified": "2025-09-08 22:57:12.707907",
"modified": "2025-09-29 23:46:26.798142",
"modified_by": "Administrator",
"module": "Church Ministries",
"name": "Church Event",
@ -143,4 +143,4 @@
"states": [],
"track_changes": 1,
"track_views": 1
}
}

View File

@ -11,7 +11,7 @@
"is_standard": "Yes",
"json": "{\"filters\":[[\"Church Event Attendance\",\"person\",\"is\",\"set\",false],[\"Church Event Attendance\",\"attendance_type\",\"in\",[\"Confirmed\",\"Assumed\"],false]],\"fields\":[[\"person\",\"Church Event Attendance\"],[\"event_name\",\"Church Event\"],[\"type\",\"Church Event\"],[\"attendance_type\",\"Church Event Attendance\"],[\"name\",\"Church Event\"]],\"order_by\":\"`tabChurch Event`.`modified` desc\",\"page_length\":20,\"column_widths\":{\"Church Event Attendance:person\":120,\"event_name\":120,\"type\":182,\"Church Event Attendance:attendance_type\":120,\"name\":361},\"group_by\":null}",
"letterhead": null,
"modified": "2025-09-21 22:47:13.526081",
"modified": "2025-10-02 01:12:41.676774",
"modified_by": "Administrator",
"module": "Church Ministries",
"name": "Church Attendance",
@ -23,6 +23,12 @@
"roles": [
{
"role": "System Manager"
},
{
"role": "Church Manager"
},
{
"role": "Church User"
}
],
"timeout": 0

View File

@ -10,7 +10,7 @@
"idx": 1,
"is_standard": "Yes",
"letterhead": null,
"modified": "2025-09-21 22:47:13.616166",
"modified": "2025-10-02 01:11:23.917088",
"modified_by": "Administrator",
"module": "Church Ministries",
"name": "Church Event Attendance",
@ -23,6 +23,12 @@
"roles": [
{
"role": "System Manager"
},
{
"role": "Church Manager"
},
{
"role": "Church User"
}
],
"timeout": 0

View File

@ -28,7 +28,7 @@
"is_standard": "Yes",
"json": "{\"columns\":[{\"label\":\"Type\",\"fieldname\":\"type\",\"id\":\"type\",\"name\":\"Type\",\"width\":null,\"editable\":false,\"compareValue\":null},{\"label\":\"Count\",\"fieldname\":\"count\",\"id\":\"count\",\"name\":\"Count\",\"width\":null,\"editable\":false,\"compareValue\":null}],\"filters\":{\"start\":\"2025-06-01\",\"end\":\"2025-09-04\"}}",
"letterhead": null,
"modified": "2025-09-21 22:47:13.683013",
"modified": "2025-10-02 01:11:36.534790",
"modified_by": "Administrator",
"module": "Church Ministries",
"name": "Church Event Count by Type",
@ -42,6 +42,12 @@
"roles": [
{
"role": "System Manager"
},
{
"role": "Church Manager"
},
{
"role": "Church User"
}
],
"timeout": 0

View File

@ -93,17 +93,17 @@
"type": "Link"
}
],
"modified": "2025-09-25 23:11:31.704033",
"modified": "2025-10-03 23:11:34.945302",
"modified_by": "Administrator",
"module": "Church Ministries",
"name": "Ministries",
"number_cards": [],
"owner": "Administrator",
"parent_page": "Church",
"parent_page": "",
"public": 1,
"quick_lists": [],
"roles": [],
"sequence_id": 25.0,
"sequence_id": 4.0,
"shortcuts": [],
"title": "Ministries"
}

View File

@ -12,6 +12,8 @@
"photo",
"data_btqw",
"website",
"support_amount",
"support_frequency",
"column_break_vedu",
"country",
"mailing_address",
@ -24,12 +26,13 @@
"fields": [
{
"fieldname": "agency",
"fieldtype": "Data",
"fieldtype": "Link",
"in_filter": 1,
"in_list_view": 1,
"in_preview": 1,
"in_standard_filter": 1,
"label": "Agency"
"label": "Agency",
"options": "Church Missionary Agency"
},
{
"fieldname": "country",
@ -106,13 +109,26 @@
"fieldtype": "Table",
"label": "Letters to the Church",
"options": "Church Letter"
},
{
"fieldname": "support_amount",
"fieldtype": "Currency",
"label": "Support Amount",
"non_negative": 1
},
{
"fieldname": "support_frequency",
"fieldtype": "Link",
"label": "Support Frequency",
"mandatory_depends_on": "eval: doc.support_amount>0;",
"options": "Church Missionary Support Frequency"
}
],
"grid_page_length": 50,
"image_field": "photo",
"index_web_pages_for_search": 1,
"links": [],
"modified": "2025-09-23 22:20:41.577985",
"modified": "2025-10-02 22:27:52.752228",
"modified_by": "Administrator",
"module": "Church Missions",
"name": "Church Missionary",

View File

@ -0,0 +1,8 @@
// Copyright (c) 2025, meichthys and contributors
// For license information, please see license.txt
// frappe.ui.form.on("Church Missionary Agency", {
// refresh(frm) {
// },
// });

View File

@ -0,0 +1,106 @@
{
"actions": [],
"allow_rename": 1,
"autoname": "format:{agency_name}",
"creation": "2025-10-02 22:14:45.520951",
"description": "Missionary support entities that aid in the sending of missionaries",
"doctype": "DocType",
"engine": "InnoDB",
"field_order": [
"name1",
"image_hhbv",
"notes",
"column_break_qofu",
"phone",
"email",
"mailing_address",
"website"
],
"fields": [
{
"allow_in_quick_entry": 1,
"fieldname": "name1",
"fieldtype": "Data",
"in_filter": 1,
"in_list_view": 1,
"in_preview": 1,
"in_standard_filter": 1,
"label": "Agency Name",
"reqd": 1
},
{
"allow_in_quick_entry": 1,
"fieldname": "mailing_address",
"fieldtype": "Link",
"label": "Mailing Address",
"options": "Address"
},
{
"allow_in_quick_entry": 1,
"fieldname": "phone",
"fieldtype": "Phone",
"in_list_view": 1,
"label": "Phone"
},
{
"allow_in_quick_entry": 1,
"fieldname": "email",
"fieldtype": "Data",
"in_list_view": 1,
"label": "Email",
"options": "Email"
},
{
"fieldname": "column_break_qofu",
"fieldtype": "Column Break"
},
{
"allow_in_quick_entry": 1,
"fieldname": "website",
"fieldtype": "Data",
"in_list_view": 1,
"label": "Website",
"options": "URL"
},
{
"allow_in_quick_entry": 1,
"fieldname": "notes",
"fieldtype": "Small Text",
"label": "Notes"
},
{
"allow_in_quick_entry": 1,
"fieldname": "image_hhbv",
"fieldtype": "Attach Image",
"label": "Logo"
}
],
"grid_page_length": 50,
"index_web_pages_for_search": 1,
"links": [],
"modified": "2025-10-02 22:28:28.306082",
"modified_by": "Administrator",
"module": "Church Missions",
"name": "Church Missionary Agency",
"naming_rule": "Expression",
"owner": "Administrator",
"permissions": [
{
"create": 1,
"delete": 1,
"email": 1,
"export": 1,
"print": 1,
"read": 1,
"report": 1,
"role": "System Manager",
"share": 1,
"write": 1
}
],
"quick_entry": 1,
"row_format": "Dynamic",
"sort_field": "modified",
"sort_order": "DESC",
"states": []
}

View File

@ -0,0 +1,9 @@
# Copyright (c) 2025, meichthys and contributors
# For license information, please see license.txt
# import frappe
from frappe.model.document import Document
class ChurchMissionaryAgency(Document):
pass

View File

@ -0,0 +1,9 @@
# Copyright (c) 2025, meichthys and Contributors
# See license.txt
# import frappe
from frappe.tests.utils import FrappeTestCase
class TestChurchMissionaryAgency(FrappeTestCase):
pass

View File

@ -0,0 +1,8 @@
// Copyright (c) 2025, meichthys and contributors
// For license information, please see license.txt
// frappe.ui.form.on("Church Missionary Support Frequency", {
// refresh(frm) {
// },
// });

View File

@ -0,0 +1,62 @@
{
"actions": [],
"allow_rename": 1,
"autoname": "format:{frequency}",
"creation": "2025-10-02 21:51:33.814292",
"description": "How often `Church Missionary` support is given",
"doctype": "DocType",
"engine": "InnoDB",
"field_order": [
"frequency",
"description"
],
"fields": [
{
"allow_in_quick_entry": 1,
"fieldname": "frequency",
"fieldtype": "Data",
"in_filter": 1,
"in_list_view": 1,
"in_preview": 1,
"in_standard_filter": 1,
"label": "Frequency",
"reqd": 1,
"unique": 1
},
{
"allow_in_quick_entry": 1,
"fieldname": "description",
"fieldtype": "Data",
"in_list_view": 1,
"in_preview": 1,
"label": "Description"
}
],
"grid_page_length": 50,
"index_web_pages_for_search": 1,
"links": [],
"modified": "2025-10-02 21:53:49.348848",
"modified_by": "Administrator",
"module": "Church Missions",
"name": "Church Missionary Support Frequency",
"naming_rule": "Expression",
"owner": "Administrator",
"permissions": [
{
"create": 1,
"delete": 1,
"email": 1,
"export": 1,
"print": 1,
"read": 1,
"report": 1,
"role": "System Manager",
"share": 1,
"write": 1
}
],
"row_format": "Dynamic",
"sort_field": "modified",
"sort_order": "DESC",
"states": []
}

View File

@ -0,0 +1,9 @@
# Copyright (c) 2025, meichthys and contributors
# For license information, please see license.txt
# import frappe
from frappe.model.document import Document
class ChurchMissionarySupportFrequency(Document):
pass

View File

@ -0,0 +1,9 @@
# Copyright (c) 2025, meichthys and Contributors
# See license.txt
# import frappe
from frappe.tests.utils import FrappeTestCase
class TestChurchMissionarySupportFrequency(FrappeTestCase):
pass

View File

@ -52,17 +52,17 @@
"type": "Link"
}
],
"modified": "2025-09-25 23:04:07.592076",
"modified": "2025-10-03 23:11:35.018155",
"modified_by": "Administrator",
"module": "Church Missions",
"name": "Missions",
"number_cards": [],
"owner": "Administrator",
"parent_page": "Church",
"parent_page": "",
"public": 1,
"quick_lists": [],
"roles": [],
"sequence_id": 24.1,
"sequence_id": 5.0,
"shortcuts": [],
"title": "Missions"
}

View File

@ -7,6 +7,7 @@
"doctype": "DocType",
"engine": "InnoDB",
"field_order": [
"section_break_acrr",
"family_name",
"head_of_household",
"column_break_pmch",
@ -31,8 +32,7 @@
"in_list_view": 1,
"in_standard_filter": 1,
"label": "Name",
"reqd": 1,
"unique": 1
"reqd": 1
},
{
"allow_in_quick_entry": 1,
@ -47,6 +47,10 @@
"fieldname": "photo",
"fieldtype": "Attach Image",
"label": "Photo"
},
{
"fieldname": "section_break_acrr",
"fieldtype": "Section Break"
}
],
"grid_page_length": 50,
@ -58,7 +62,7 @@
"link_fieldname": "family"
}
],
"modified": "2025-09-04 23:59:50.816837",
"modified": "2025-09-30 00:40:03.233398",
"modified_by": "Administrator",
"module": "Church People",
"name": "Church Family",
@ -86,4 +90,4 @@
"states": [],
"title_field": "family_name",
"track_changes": 1
}
}

View File

@ -9,9 +9,10 @@
"engine": "InnoDB",
"field_order": [
"date",
"column_break_zdbp",
"is_private",
"read_to_church",
"column_break_zdbp",
"share_with_church",
"shared_date",
"section_break_qmpt",
"file",
"content"
@ -29,7 +30,7 @@
"in_list_view": 1,
"in_preview": 1,
"in_standard_filter": 1,
"label": "Date",
"label": "Date Received",
"reqd": 1
},
{
@ -55,17 +56,6 @@
"in_preview": 1,
"label": "Content"
},
{
"allow_in_quick_entry": 1,
"default": "0",
"fieldname": "read_to_church",
"fieldtype": "Check",
"in_filter": 1,
"in_list_view": 1,
"in_preview": 1,
"in_standard_filter": 1,
"label": "Read to Church?"
},
{
"default": "0",
"description": "Check this to prevent the letter from being displayed publicly (i.e. on the website).",
@ -76,13 +66,31 @@
"in_preview": 1,
"in_standard_filter": 1,
"label": "Is Private?"
},
{
"allow_in_quick_entry": 1,
"default": "0",
"description": "If this letter should be shared with the church.",
"fieldname": "share_with_church",
"fieldtype": "Check",
"in_filter": 1,
"in_list_view": 1,
"in_preview": 1,
"in_standard_filter": 1,
"label": "Share With Church?"
},
{
"description": "The date the letter was shared to the church.",
"fieldname": "shared_date",
"fieldtype": "Date",
"label": "Shared Date"
}
],
"grid_page_length": 50,
"index_web_pages_for_search": 1,
"istable": 1,
"links": [],
"modified": "2025-09-23 22:41:59.658717",
"modified": "2025-09-29 23:55:37.070600",
"modified_by": "Administrator",
"module": "Church People",
"name": "Church Letter",

View File

@ -11,11 +11,13 @@ class ChurchPerson(Document):
def before_save(self):
# We set this here since virtual fields do not work with
# View Settings -> Title Field as of 2025-08-26
self.full_name = f"{self.first_name}" + (
(" " + self.last_name) if self.last_name else ""
)
self.full_name = f"{self.first_name}" + ((" " + self.last_name) if self.last_name else "")
def validate(self):
# Remove head of household status when family is removed
if not self.family and self.is_head_of_household:
self.set("is_head_of_household", False)
# Remove old head of household when new one is assigned - Also rename family
if self.is_head_of_household:
old_heads_of_household = frappe.db.get_all(
doctype="Church Person",
@ -26,6 +28,7 @@ class ChurchPerson(Document):
],
)
if old_heads_of_household:
# There should only be one head of household, but just in case we loop through all of them.
for head in old_heads_of_household:
head_doc = frappe.get_doc("Church Person", head["name"])
frappe.msgprint(
@ -33,35 +36,45 @@ class ChurchPerson(Document):
)
head_doc.is_head_of_household = False
head_doc.save()
# Rename family with new head of household
family_doc = frappe.get_doc("Church Family", self.family)
dashes = family_doc.family_name.rfind("-")
if dashes == -1: # If no dashes found, add one
family_doc.family_name = f"{self.family} - {self.first_name}"
else:
family_doc.family_name = f"{family_doc.family_name[: dashes + 1]} {self.first_name}"
family_doc.save()
# Sync spouses
if self.spouse:
if self.spouse and self.is_married:
# Sync spouses
spouse = frappe.get_doc("Church Person", self.spouse)
if spouse.spouse != self.name:
# Unlink spouse's old spouse if there was one
frappe.db.set_value("Church Person", spouse.spouse, "spouse", None)
frappe.db.set_value("Church Person", spouse.spouse, "anniversary", None)
frappe.db.set_value("Church Person", spouse.spouse, "is_married", False)
# Link spouses
frappe.db.set_value("Church Person", spouse.name, "spouse", self.name)
frappe.db.set_value("Church Person", spouse.name, "is_married", True)
frappe.msgprint(
f"Spouses have been linked:<br>"
f"{self.full_name} 👩‍❤️‍👨 {spouse.full_name}"
)
frappe.msgprint(f"Spouses have been linked:<br>{self.full_name} 👩‍❤️‍👨 {spouse.full_name}")
else:
if self._doc_before_save and self._doc_before_save.spouse:
if self._doc_before_save and self._doc_before_save.is_married and self._doc_before_save.spouse:
spouse = frappe.get_doc("Church Person", self._doc_before_save.spouse)
frappe.db.set_value("Church Person", spouse.name, "is_married", False)
frappe.db.set_value("Church Person", spouse.name, "spouse", None)
frappe.db.set_value("Church Person", spouse.name, "is_married", False)
self.spouse = None
self.anniversary = None
self.is_married = False
frappe.msgprint(
f"Spouses have been unlinked:<br>"
f"{self.full_name} 💔 {spouse.full_name}"
)
frappe.msgprint(f"Spouses have been unlinked:<br>{self.full_name} 💔 {spouse.full_name}")
@frappe.whitelist()
def new_family_from_person(self):
doc = frappe.new_doc("Church Family")
doc.family_name = self.last_name
doc.family_name = f"{self.last_name} - {self.first_name}"
doc.save()
self.set("family", doc)
self.set("is_head_of_household", True)
self.save()
self.reload()
frappe.msgprint(f"New family created: {doc.family_name}")
@ -73,10 +86,7 @@ class ChurchPerson(Document):
frappe.utils.get_datetime(role.start_date)
< datetime.now()
< frappe.utils.get_datetime(role.end_date)
) or (
not role.end_date
and frappe.utils.get_datetime(role.start_date) < datetime.now()
):
) or (not role.end_date and frappe.utils.get_datetime(role.start_date) < datetime.now()):
role.is_current_role = 1
else:
role.is_current_role = 0

View File

@ -11,7 +11,7 @@
"is_standard": "Yes",
"json": "{\"filters\":[[\"Church Person\",\"birthday\",\"Timespan\",\"this week\",false]],\"fields\":[[\"name\",\"Church Person\"],[\"birthday\",\"Church Person\"]],\"order_by\":\"`tabChurch Person`.`modified` desc\",\"add_totals_row\":0,\"page_length\":20,\"column_widths\":{\"name\":120,\"birthday\":120},\"group_by\":null}",
"letterhead": null,
"modified": "2025-09-21 22:47:58.498524",
"modified": "2025-10-02 01:14:54.138648",
"modified_by": "Administrator",
"module": "Church People",
"name": "Church Person Birthdays (This Week)",
@ -23,6 +23,12 @@
"roles": [
{
"role": "System Manager"
},
{
"role": "Church Manager"
},
{
"role": "Church User"
}
],
"timeout": 0

View File

@ -11,7 +11,7 @@
"is_standard": "Yes",
"json": "{\"filters\":[[\"Church Role\",\"end_date\",\"Timespan\",\"this month\",false]],\"fields\":[[\"name\",\"Church Person\"],[\"role\",\"Church Role\"],[\"start_date\",\"Church Role\"],[\"end_date\",\"Church Role\"],[\"notes\",\"Church Role\"]],\"order_by\":\"`tabChurch Person`.`modified` desc\",\"add_totals_row\":0,\"page_length\":20,\"column_widths\":{\"name\":120,\"Church Role:role\":120,\"Church Role:start_date\":120,\"Church Role:end_date\":120,\"Church Role:notes\":120},\"group_by\":null}",
"letterhead": null,
"modified": "2025-09-21 22:47:58.412154",
"modified": "2025-10-02 01:15:17.185570",
"modified_by": "Administrator",
"module": "Church People",
"name": "Church Person Roles Ending This Month",
@ -23,6 +23,12 @@
"roles": [
{
"role": "System Manager"
},
{
"role": "Church Manager"
},
{
"role": "Church User"
}
],
"timeout": 0

View File

@ -11,7 +11,7 @@
"is_standard": "Yes",
"json": "{\"filters\":[[\"Church Role\",\"role\",\"is\",\"set\",false],[\"Church Role\",\"is_current_role\",\"=\",1,false]],\"fields\":[[\"name\",\"Church Person\"],[\"role\",\"Church Role\"],[\"start_date\",\"Church Role\"],[\"end_date\",\"Church Role\"],[\"notes\",\"Church Role\"]],\"order_by\":\"`tabChurch Person`.`modified` desc\",\"add_totals_row\":0,\"page_length\":20,\"column_widths\":{\"name\":120,\"Church Role:role\":120,\"Church Role:start_date\":120,\"Church Role:end_date\":120,\"Church Role:notes\":120},\"group_by\":null}",
"letterhead": null,
"modified": "2025-09-21 22:47:58.561958",
"modified": "2025-10-02 01:14:28.304991",
"modified_by": "Administrator",
"module": "Church People",
"name": "Current Church Person Roles",
@ -23,6 +23,12 @@
"roles": [
{
"role": "System Manager"
},
{
"role": "Church Manager"
},
{
"role": "Church User"
}
],
"timeout": 0

View File

@ -136,7 +136,7 @@
"type": "Link"
}
],
"modified": "2025-09-25 23:03:45.168893",
"modified": "2025-10-03 23:11:35.091797",
"modified_by": "Administrator",
"module": "Church People",
"name": "People",
@ -155,11 +155,11 @@
}
],
"owner": "Administrator",
"parent_page": "Church",
"parent_page": "",
"public": 1,
"quick_lists": [],
"roles": [],
"sequence_id": 23.0,
"sequence_id": 6.0,
"shortcuts": [],
"title": "People"
}

View File

@ -1,5 +1,6 @@
{
"actions": [],
"allow_import": 1,
"autoname": "autoincrement",
"creation": "2025-09-13 00:16:52.698863",
"description": "A request for prayer from (or for) a `Church Person`.",
@ -42,7 +43,8 @@
"in_preview": 1,
"in_standard_filter": 1,
"label": "Related Person",
"options": "Church Person"
"options": "Church Person",
"search_index": 1
},
{
"fieldname": "section_break_usaz",
@ -57,7 +59,7 @@
"in_preview": 1,
"in_standard_filter": 1,
"label": "Request",
"reqd": 1
"mandatory_depends_on": "eval: doc.type!=\"Unspoken\";"
},
{
"allow_in_quick_entry": 1,
@ -81,9 +83,8 @@
}
],
"grid_page_length": 50,
"index_web_pages_for_search": 1,
"links": [],
"modified": "2025-09-25 22:47:04.584440",
"modified": "2025-09-29 23:50:36.602523",
"modified_by": "Administrator",
"module": "Church Prayers",
"name": "Church Prayer Request",

View File

@ -0,0 +1,7 @@
{% extends "templates/web.html" %}
{% block page_content %}
<h1>{{ title }}</h1>
{% endblock %}
<!-- this is a sample default web page template -->

View File

@ -0,0 +1,4 @@
<div>
<a href="{{ doc.route }}">{{ doc.title or doc.name }}</a>
</div>
<!-- this is a sample default list template -->

View File

@ -6,7 +6,7 @@
"allow_multiple": 0,
"allow_print": 0,
"anonymous": 0,
"apply_document_permissions": 1,
"apply_document_permissions": 0,
"button_label": "Save",
"condition_json": "[[\"Church Prayer Request\",\"status\",\"!=\",\"Answered\",false],[\"Church Prayer Request\",\"owner\",\"in\",[\"User\",null],false]]",
"creation": "2025-09-13 22:28:01.939717",
@ -56,7 +56,7 @@
"list_title": "Your Prayer Requests",
"login_required": 1,
"max_attachment_size": 0,
"modified": "2025-09-21 22:49:35.504853",
"modified": "2025-10-03 22:41:24.052519",
"modified_by": "Administrator",
"module": "Church Prayers",
"name": "prayer-request",
@ -69,7 +69,7 @@
"title": "Prayer Request ",
"web_form_fields": [
{
"allow_read_on_all_link_options": 0,
"allow_read_on_all_link_options": 1,
"default": "Requested",
"fieldname": "status",
"fieldtype": "Link",
@ -84,7 +84,7 @@
"show_in_filter": 0
},
{
"allow_read_on_all_link_options": 0,
"allow_read_on_all_link_options": 1,
"default": "",
"fieldname": "type",
"fieldtype": "Link",
@ -112,7 +112,7 @@
"show_in_filter": 0
},
{
"allow_read_on_all_link_options": 0,
"allow_read_on_all_link_options": 1,
"default": "",
"depends_on": "eval:frappe.session.user!='Guest';",
"description": "If this request is for a specific person and the person is in this list, please select the person.",

View File

@ -35,7 +35,7 @@
],
"login_required": 0,
"max_attachment_size": 0,
"modified": "2025-09-21 22:49:35.688669",
"modified": "2025-10-03 22:44:08.779481",
"modified_by": "Administrator",
"module": "Church Prayers",
"name": "prayer-request-anonymous",
@ -90,23 +90,6 @@
"reqd": 0,
"show_in_filter": 0
},
{
"allow_read_on_all_link_options": 0,
"default": "",
"depends_on": "eval:frappe.session.user!='Guest';",
"description": "If this request is for a specific person and the person is in this list, please select the person.",
"fieldname": "related_person",
"fieldtype": "Link",
"hidden": 0,
"label": "Related Person",
"max_length": 0,
"max_value": 0,
"options": "Church Person",
"precision": "",
"read_only": 0,
"reqd": 0,
"show_in_filter": 0
},
{
"allow_read_on_all_link_options": 0,
"fieldname": "section_break_usaz",
@ -126,6 +109,7 @@
"fieldtype": "Small Text",
"hidden": 0,
"label": "Request",
"mandatory_depends_on": "eval: doc.type!=\"Unspoken\"",
"max_length": 0,
"max_value": 0,
"precision": "",

View File

@ -91,7 +91,7 @@
"type": "Link"
}
],
"modified": "2025-09-25 23:02:54.667929",
"modified": "2025-10-03 23:11:35.193488",
"modified_by": "Administrator",
"module": "Church Prayers",
"name": "Prayers",
@ -106,11 +106,11 @@
}
],
"owner": "Administrator",
"parent_page": "Church",
"parent_page": "",
"public": 1,
"quick_lists": [],
"roles": [],
"sequence_id": 24.0,
"sequence_id": 7.0,
"shortcuts": [],
"title": "Prayers"
}

View File

@ -43,17 +43,17 @@
"type": "Link"
}
],
"modified": "2025-09-25 23:13:00.638300",
"modified": "2025-10-03 23:11:35.273885",
"modified_by": "Administrator",
"module": "Church Study",
"name": "Study",
"number_cards": [],
"owner": "Administrator",
"parent_page": "Church",
"parent_page": "",
"public": 1,
"quick_lists": [],
"roles": [],
"sequence_id": 27.0,
"sequence_id": 8.0,
"shortcuts": [],
"title": "Study"
}

View File

@ -1,32 +1,38 @@
[
{
"balance": 0,
"description": "Funds for the building & maintenance of the church.",
"docstatus": 0,
"doctype": "Church Fund",
"end_date": null,
"fund": "Building",
"modified": "2025-09-02 01:31:36.308372",
"modified": "2025-10-02 00:56:20.007430",
"name": "Building",
"start_date": null
"start_date": null,
"transactions": []
},
{
"balance": 0,
"description": "Financial support for missionaries",
"docstatus": 0,
"doctype": "Church Fund",
"end_date": null,
"fund": "Missions",
"modified": "2025-09-02 01:32:34.460965",
"modified": "2025-10-02 01:02:06.137140",
"name": "Missions",
"start_date": null
"start_date": null,
"transactions": []
},
{
"balance": 0,
"description": "Church general fund.",
"docstatus": 0,
"doctype": "Church Fund",
"end_date": null,
"fund": "General",
"modified": "2025-09-02 01:30:04.152061",
"modified": "2025-10-02 01:03:14.200750",
"name": "General",
"start_date": null
"start_date": null,
"transactions": []
}
]

View File

@ -0,0 +1,50 @@
[
{
"description": "Support is sent once per year",
"docstatus": 0,
"doctype": "Church Missionary Support Frequency",
"frequency": "Yearly",
"modified": "2025-10-02 22:01:07.476782",
"name": "Yearly"
},
{
"description": "Support is sent 4 times per year",
"docstatus": 0,
"doctype": "Church Missionary Support Frequency",
"frequency": "Quarterly",
"modified": "2025-10-02 22:01:31.042863",
"name": "Quarterly"
},
{
"description": "Support is sent every two months",
"docstatus": 0,
"doctype": "Church Missionary Support Frequency",
"frequency": "Bi-Monthly",
"modified": "2025-10-02 22:01:48.560028",
"name": "Bi-Monthly"
},
{
"description": "Support is sent once per month",
"docstatus": 0,
"doctype": "Church Missionary Support Frequency",
"frequency": "Monthly",
"modified": "2025-10-02 22:02:02.944446",
"name": "Monthly"
},
{
"description": "Support is sent every two weeks",
"docstatus": 0,
"doctype": "Church Missionary Support Frequency",
"frequency": "Bi-Weekly",
"modified": "2025-10-02 22:02:38.770235",
"name": "Bi-Weekly"
},
{
"description": "Support is sent every week",
"docstatus": 0,
"doctype": "Church Missionary Support Frequency",
"frequency": "Weekly",
"modified": "2025-10-02 22:02:49.588365",
"name": "Weekly"
}
]

View File

@ -1,12 +1,4 @@
[
{
"description": null,
"docstatus": 0,
"doctype": "Church Payment Type",
"modified": "2025-09-02 01:45:57.381589",
"name": "Cash",
"type": "Cash"
},
{
"description": null,
"docstatus": 0,
@ -14,5 +6,13 @@
"modified": "2025-09-02 01:46:05.861238",
"name": "Check",
"type": "Check"
},
{
"description": null,
"docstatus": 0,
"doctype": "Church Payment Type",
"modified": "2025-09-02 01:45:57.381589",
"name": "Cash",
"type": "Cash"
}
]

View File

@ -167,14 +167,6 @@
"name": "Sister",
"relation_type": "Sister"
},
{
"description": null,
"docstatus": 0,
"doctype": "Church Person Relation Type",
"modified": "2025-08-26 01:30:00.557230",
"name": "Brother",
"relation_type": "Brother"
},
{
"description": null,
"docstatus": 0,
@ -190,5 +182,13 @@
"modified": "2025-08-26 01:24:08.691750",
"name": "Husband",
"relation_type": "Husband"
},
{
"description": null,
"docstatus": 0,
"doctype": "Church Person Relation Type",
"modified": "2025-08-26 01:30:00.557230",
"name": "Brother",
"relation_type": "Brother"
}
]

View File

@ -7,6 +7,14 @@
"name": "Requested",
"status": "Requested"
},
{
"description": "The prayer request is being prayed for",
"docstatus": 0,
"doctype": "Church Prayer Request Status",
"modified": "2025-09-30 01:13:47.596811",
"name": "Being Prayed For",
"status": "Being Prayed For"
},
{
"description": "The prayer request has been answered",
"docstatus": 0,
@ -14,13 +22,5 @@
"modified": "2025-09-13 00:49:57.973400",
"name": "Answered",
"status": "Answered"
},
{
"description": "The prayer request is being prayed for",
"docstatus": 0,
"doctype": "Church Prayer Request Status",
"modified": "2025-09-13 00:51:54.820822",
"name": "Intercession",
"status": "Intercession"
}
]

View File

@ -886,5 +886,125 @@
"share": 1,
"submit": 0,
"write": 1
},
{
"amend": 0,
"cancel": 0,
"create": 1,
"delete": 1,
"docstatus": 0,
"doctype": "Custom DocPerm",
"email": 1,
"export": 1,
"if_owner": 0,
"import": 1,
"modified": "2025-09-30 21:47:23.826602",
"name": "kdm4rn17ce",
"parent": "Church Fund",
"permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "Church Manager",
"select": 1,
"share": 1,
"submit": 0,
"write": 1
},
{
"amend": 0,
"cancel": 0,
"create": 1,
"delete": 1,
"docstatus": 0,
"doctype": "Custom DocPerm",
"email": 1,
"export": 1,
"if_owner": 0,
"import": 1,
"modified": "2025-10-02 21:54:50.582156",
"name": "g99k3mce0t",
"parent": "Church Missionary Support Frequency",
"permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "Church Manager",
"select": 1,
"share": 1,
"submit": 0,
"write": 1
},
{
"amend": 0,
"cancel": 0,
"create": 0,
"delete": 0,
"docstatus": 0,
"doctype": "Custom DocPerm",
"email": 0,
"export": 1,
"if_owner": 0,
"import": 0,
"modified": "2025-10-02 21:58:43.087571",
"name": "ihvofd4l63",
"parent": "Church Missionary Support Frequency",
"permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "Church User",
"select": 0,
"share": 0,
"submit": 0,
"write": 0
},
{
"amend": 0,
"cancel": 0,
"create": 1,
"delete": 1,
"docstatus": 0,
"doctype": "Custom DocPerm",
"email": 1,
"export": 1,
"if_owner": 0,
"import": 1,
"modified": "2025-10-02 22:30:18.146738",
"name": "525p9aqdk1",
"parent": "Church Missionary Agency",
"permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "Church Manager",
"select": 1,
"share": 1,
"submit": 0,
"write": 1
},
{
"amend": 0,
"cancel": 0,
"create": 0,
"delete": 0,
"docstatus": 0,
"doctype": "Custom DocPerm",
"email": 0,
"export": 1,
"if_owner": 0,
"import": 0,
"modified": "2025-10-02 22:30:30.295778",
"name": "55vaglqh4a",
"parent": "Church Missionary Agency",
"permlevel": 0,
"print": 1,
"read": 1,
"report": 1,
"role": "Church User",
"select": 0,
"share": 0,
"submit": 0,
"write": 0
}
]

View File

@ -1 +1,244 @@
[]
[
{
"aggregate_function_based_on": null,
"based_on": "creation",
"chart_name": "Church Persons Count",
"chart_type": "Count",
"color": null,
"currency": "USD",
"custom_options": null,
"docstatus": 0,
"doctype": "Dashboard Chart",
"document_type": "Church Person",
"dynamic_filters_json": "[]",
"filters_json": "[]",
"from_date": null,
"group_by_based_on": null,
"group_by_type": "Count",
"heatmap_year": null,
"is_public": 0,
"is_standard": 1,
"last_synced_on": "2025-10-02 01:15:21.344371",
"modified": "2025-09-21 22:40:56.438477",
"module": "Church People",
"name": "Church Persons Count",
"number_of_groups": 0,
"parent_document_type": "",
"report_name": null,
"roles": [],
"show_values_over_chart": 1,
"source": "",
"time_interval": "Monthly",
"timeseries": 1,
"timespan": "Last Year",
"to_date": null,
"type": "Line",
"use_report_chart": 0,
"value_based_on": "",
"x_field": null,
"y_axis": []
},
{
"aggregate_function_based_on": null,
"based_on": "membership_date",
"chart_name": "Church Members Count (New by Month)",
"chart_type": "Count",
"color": "#29CD42",
"currency": "",
"custom_options": null,
"docstatus": 0,
"doctype": "Dashboard Chart",
"document_type": "Church Person",
"dynamic_filters_json": "[]",
"filters_json": "[[\"Church Person\",\"is_member\",\"=\",1,false]]",
"from_date": null,
"group_by_based_on": null,
"group_by_type": "Count",
"heatmap_year": null,
"is_public": 1,
"is_standard": 1,
"last_synced_on": "2025-10-02 01:15:21.395905",
"modified": "2025-09-21 22:40:56.515222",
"module": "Church People",
"name": "Church Members Count (New by Month)",
"number_of_groups": 0,
"parent_document_type": "",
"report_name": null,
"roles": [],
"show_values_over_chart": 0,
"source": "",
"time_interval": "Monthly",
"timeseries": 1,
"timespan": "Last Year",
"to_date": null,
"type": "Bar",
"use_report_chart": 0,
"value_based_on": "",
"x_field": null,
"y_axis": []
},
{
"aggregate_function_based_on": null,
"based_on": "creation",
"chart_name": "Church Prayer Request Count (Active)",
"chart_type": "Count",
"color": "#ECAD4B",
"currency": "USD",
"custom_options": null,
"docstatus": 0,
"doctype": "Dashboard Chart",
"document_type": "Church Prayer Request",
"dynamic_filters_json": "[]",
"filters_json": "[[\"Church Prayer Request\",\"status\",\"in\",[\"Requested\",\"Intercession\"],false]]",
"from_date": null,
"group_by_based_on": null,
"group_by_type": "Count",
"heatmap_year": null,
"is_public": 1,
"is_standard": 1,
"last_synced_on": "2025-10-02 01:13:19.540401",
"modified": "2025-09-21 22:40:23.012857",
"module": "Church Prayers",
"name": "Church Prayer Request Count (Active)",
"number_of_groups": 0,
"parent_document_type": "",
"report_name": null,
"roles": [],
"show_values_over_chart": 1,
"source": "",
"time_interval": "Daily",
"timeseries": 1,
"timespan": "Last Year",
"to_date": null,
"type": "Line",
"use_report_chart": 0,
"value_based_on": "",
"x_field": null,
"y_axis": []
},
{
"aggregate_function_based_on": null,
"based_on": null,
"chart_name": "Church Fund Balances",
"chart_type": "Report",
"color": null,
"currency": "USD",
"custom_options": "{\"x_field\": \"fund\", \"chart_type\": \"Bar\", \"y_axis_fields\": [{\"idx\": 1, \"__islocal\": true, \"y_field\": \"balance\", \"color\": \"#29CD42\", \"name\": \"row 1\"}], \"y_fields\": [\"balance\"], \"colors\": [\"#29CD42\"]}",
"docstatus": 0,
"doctype": "Dashboard Chart",
"document_type": null,
"dynamic_filters_json": null,
"filters_json": "{}",
"from_date": null,
"group_by_based_on": null,
"group_by_type": "Count",
"heatmap_year": null,
"is_public": 0,
"is_standard": 1,
"last_synced_on": null,
"modified": "2025-10-02 01:26:04.007658",
"module": "Church Finances",
"name": "Church Fund Balances",
"number_of_groups": 0,
"parent_document_type": null,
"report_name": "Church Fund Balances",
"roles": [],
"show_values_over_chart": 1,
"source": null,
"time_interval": "Yearly",
"timeseries": 0,
"timespan": "Last Year",
"to_date": null,
"type": "Bar",
"use_report_chart": 0,
"value_based_on": null,
"x_field": "fund",
"y_axis": [
{
"color": "#29CD42",
"parent": "Church Fund Balances",
"parentfield": "y_axis",
"parenttype": "Dashboard Chart",
"y_field": "balance"
}
]
},
{
"aggregate_function_based_on": null,
"based_on": "creation",
"chart_name": "Church Collections Sum",
"chart_type": "Sum",
"color": "#138a25",
"currency": "USD",
"custom_options": null,
"docstatus": 0,
"doctype": "Dashboard Chart",
"document_type": "Church Donation",
"dynamic_filters_json": "[]",
"filters_json": "[]",
"from_date": null,
"group_by_based_on": null,
"group_by_type": "Count",
"heatmap_year": null,
"is_public": 0,
"is_standard": 1,
"last_synced_on": "2025-10-02 01:27:30.015664",
"modified": "2025-09-21 22:40:42.003149",
"module": "Church Finances",
"name": "Church Collections Sum",
"number_of_groups": 0,
"parent_document_type": "Church Collection",
"report_name": null,
"roles": [],
"show_values_over_chart": 1,
"source": "",
"time_interval": "Weekly",
"timeseries": 1,
"timespan": "Last Year",
"to_date": null,
"type": "Bar",
"use_report_chart": 0,
"value_based_on": "amount",
"x_field": null,
"y_axis": []
},
{
"aggregate_function_based_on": null,
"based_on": "modified",
"chart_name": "Church Prayer Requests (Answered)",
"chart_type": "Count",
"color": "#29CD42",
"currency": "USD",
"custom_options": null,
"docstatus": 0,
"doctype": "Dashboard Chart",
"document_type": "Church Prayer Request",
"dynamic_filters_json": "[]",
"filters_json": "[[\"Church Prayer Request\",\"status\",\"=\",\"Answered\",false]]",
"from_date": null,
"group_by_based_on": null,
"group_by_type": "Count",
"heatmap_year": null,
"is_public": 1,
"is_standard": 1,
"last_synced_on": "2025-10-02 01:13:19.727118",
"modified": "2025-09-21 22:40:23.088650",
"module": "Church Prayers",
"name": "Church Prayer Requests (Answered)",
"number_of_groups": 0,
"parent_document_type": "",
"report_name": null,
"roles": [],
"show_values_over_chart": 1,
"source": "",
"time_interval": "Daily",
"timeseries": 1,
"timespan": "Last Year",
"to_date": null,
"type": "Line",
"use_report_chart": 0,
"value_based_on": "",
"x_field": null,
"y_axis": []
}
]

View File

@ -7,7 +7,7 @@
"include_name_field": 0,
"is_standard": 1,
"list_name": "List",
"modified": "2025-09-06 02:00:55.841681",
"modified": "2025-09-30 21:54:12.850006",
"module": "Desk",
"name": "Church Person",
"new_document_form": 0,
@ -181,7 +181,7 @@
},
{
"child_doctype": null,
"description": "You can define `Church Role`s that this person had been or is currently assigned.\nGo ahead and assign this person a 'Secretary' role starting today.",
"description": "You can define `Church Role`s that this person had been or is currently assigned.\nGo ahead and assign this person a 'Secretary' role starting today by clicking on the `Add Row` button below.",
"element_selector": null,
"fieldname": "church_roles",
"fieldtype": "Table",
@ -239,5 +239,217 @@
"ui_tour": 0,
"view_name": "Workspaces",
"workspace_name": null
},
{
"dashboard_name": null,
"docstatus": 0,
"doctype": "Form Tour",
"first_document": 0,
"include_name_field": 0,
"is_standard": 1,
"list_name": "List",
"modified": "2025-09-30 21:21:09.575152",
"module": "Desk",
"name": "Church Manager",
"new_document_form": 0,
"page_name": null,
"page_route": null,
"reference_doctype": "User",
"report_name": "",
"save_on_complete": 1,
"steps": [
{
"child_doctype": null,
"description": "Enter the email of the user. This may be used for resetting passwords, sending notifications, etc.\nFor email notifications to work, the Administrator must configure a default outgoing email server using the `New Email Account` action.",
"element_selector": null,
"fieldname": "email",
"fieldtype": "Data",
"has_next_condition": 1,
"hide_buttons": 0,
"is_table_field": 0,
"label": "Email",
"modal_trigger": 0,
"next_form_tour": null,
"next_on_click": 0,
"next_step_condition": "eval: doc.email.includes(\"@\");",
"offset_x": 0,
"offset_y": 0,
"ondemand_description": null,
"parent": "Church Manager",
"parent_element_selector": null,
"parent_fieldname": null,
"parentfield": "steps",
"parenttype": "Form Tour",
"popover_element": 0,
"position": "Bottom",
"title": "Email",
"ui_tour": 0
},
{
"child_doctype": null,
"description": "A first name is required. You can use something generic like \"Manager\" or \"ChurchManager\".",
"element_selector": null,
"fieldname": "first_name",
"fieldtype": "Data",
"has_next_condition": 1,
"hide_buttons": 0,
"is_table_field": 0,
"label": "First Name",
"modal_trigger": 0,
"next_form_tour": null,
"next_on_click": 0,
"next_step_condition": "eval: doc.first_name !== null;",
"offset_x": 0,
"offset_y": 0,
"ondemand_description": null,
"parent": "Church Manager",
"parent_element_selector": null,
"parent_fieldname": null,
"parentfield": "steps",
"parenttype": "Form Tour",
"popover_element": 0,
"position": "Bottom",
"title": "First Name",
"ui_tour": 0
},
{
"child_doctype": null,
"description": "You may want to update the timezone if it doesn't match what you would expect.",
"element_selector": null,
"fieldname": "time_zone",
"fieldtype": "Autocomplete",
"has_next_condition": 0,
"hide_buttons": 0,
"is_table_field": 0,
"label": "Time Zone",
"modal_trigger": 0,
"next_form_tour": null,
"next_on_click": 0,
"next_step_condition": null,
"offset_x": 0,
"offset_y": 0,
"ondemand_description": null,
"parent": "Church Manager",
"parent_element_selector": null,
"parent_fieldname": null,
"parentfield": "steps",
"parenttype": "Form Tour",
"popover_element": 0,
"position": "Top",
"title": "Timezone",
"ui_tour": 0
},
{
"child_doctype": null,
"description": "Select \"Church\" as the Module Profile.\nThis gives the user access to all the 'Church' app modules.\n\n⚠ After saving this user, come back to this page and assign the \"Church Manager\" (or \"Church User\") 'RoleProfile' to this user (Not just the \"Church Manager\" permission). This will give the user permission to actually make changes to the Church records.",
"element_selector": null,
"fieldname": "module_profile",
"fieldtype": "Link",
"has_next_condition": 1,
"hide_buttons": 0,
"is_table_field": 0,
"label": "Module Profile",
"modal_trigger": 0,
"next_form_tour": null,
"next_on_click": 0,
"next_step_condition": "eval: doc.module_profile == \"Church\";",
"offset_x": 0,
"offset_y": 0,
"ondemand_description": null,
"parent": "Church Manager",
"parent_element_selector": null,
"parent_fieldname": null,
"parentfield": "steps",
"parenttype": "Form Tour",
"popover_element": 0,
"position": "Right Center",
"title": "Module Profile",
"ui_tour": 0
},
{
"child_doctype": null,
"description": "After saving the user, you can come back to this settings tab to set (reset) the user's password.",
"element_selector": "#user-settings_tab-tab",
"fieldname": "mute_sounds",
"fieldtype": "Check",
"has_next_condition": 0,
"hide_buttons": 0,
"is_table_field": 0,
"label": "Mute Sounds",
"modal_trigger": 0,
"next_form_tour": null,
"next_on_click": 0,
"next_step_condition": null,
"offset_x": 0,
"offset_y": 0,
"ondemand_description": null,
"parent": "Church Manager",
"parent_element_selector": null,
"parent_fieldname": null,
"parentfield": "steps",
"parenttype": "Form Tour",
"popover_element": 0,
"position": "Top",
"title": "Settings",
"ui_tour": 0
}
],
"title": "Church Manager",
"track_steps": 0,
"ui_tour": 0,
"view_name": "Workspaces",
"workspace_name": null
},
{
"dashboard_name": null,
"docstatus": 0,
"doctype": "Form Tour",
"first_document": 0,
"include_name_field": 0,
"is_standard": 1,
"list_name": "List",
"modified": "2025-09-28 22:47:37.075931",
"module": "Desk",
"name": "Church Information",
"new_document_form": 0,
"page_name": null,
"page_route": null,
"reference_doctype": "Church Information",
"report_name": "",
"save_on_complete": 0,
"steps": [
{
"child_doctype": null,
"description": "All of the information entered on this page may be used on the public-facing website. (i.e. in the footer or 'about-us' page.).\nWhen you are finished entering the information, click the 'save' button at the top right.",
"element_selector": "div.form-dashboard",
"fieldname": "legal_name",
"fieldtype": "Data",
"has_next_condition": 0,
"hide_buttons": 0,
"is_table_field": 0,
"label": "Legal Name",
"modal_trigger": 0,
"next_form_tour": null,
"next_on_click": 0,
"next_step_condition": null,
"offset_x": 0,
"offset_y": 0,
"ondemand_description": null,
"parent": "Church Information",
"parent_element_selector": null,
"parent_fieldname": null,
"parentfield": "steps",
"parenttype": "Form Tour",
"popover_element": 0,
"position": "Bottom",
"title": "Legal Name",
"ui_tour": 0
}
],
"title": "Church Information",
"track_steps": 0,
"ui_tour": 0,
"view_name": "Workspaces",
"workspace_name": null
}
]
]

View File

@ -6,16 +6,34 @@
"parentfield": "allow_roles",
"parenttype": "Module Onboarding",
"role": "Administrator"
},
{
"parent": "Church",
"parentfield": "allow_roles",
"parenttype": "Module Onboarding",
"role": "Church Manager"
},
{
"parent": "Church",
"parentfield": "allow_roles",
"parenttype": "Module Onboarding",
"role": "Church User"
}
],
"docstatus": 0,
"doctype": "Module Onboarding",
"documentation_url": "https://github.com/meichthys/church",
"is_complete": 0,
"modified": "2025-09-18 00:48:20.337101",
"module": "Church",
"modified": "2025-09-30 21:21:52.088048",
"module": "Church Foundations",
"name": "Church",
"steps": [
{
"parent": "Church",
"parentfield": "steps",
"parenttype": "Module Onboarding",
"step": "Church Manager"
},
{
"parent": "Church",
"parentfield": "steps",
@ -47,7 +65,7 @@
"step": "Church Prayer Request"
}
],
"subtitle": "People, Families, Events, Ministries, and more...",
"subtitle": "People, Families, Events, Ministries, Collections, and more...",
"success_message": "Your Church is setup! 🎉 May God grow your ministry 🙏",
"title": "⛪ Let's Set Up Your Church."
}

View File

@ -162,11 +162,41 @@
"parent": "Church",
"parentfield": "block_modules",
"parenttype": "Module Profile"
},
{
"module": "Communication",
"parent": "Church",
"parentfield": "block_modules",
"parenttype": "Module Profile"
},
{
"module": "Printing",
"parent": "Church",
"parentfield": "block_modules",
"parenttype": "Module Profile"
},
{
"module": "Portal",
"parent": "Church",
"parentfield": "block_modules",
"parenttype": "Module Profile"
},
{
"module": "Desk",
"parent": "Church",
"parentfield": "block_modules",
"parenttype": "Module Profile"
},
{
"module": "Core",
"parent": "Church",
"parentfield": "block_modules",
"parenttype": "Module Profile"
}
],
"docstatus": 0,
"doctype": "Module Profile",
"modified": "2025-09-18 23:50:02.346485",
"modified": "2025-09-29 23:11:31.779249",
"module_profile_name": "Church",
"name": "Church"
}

View File

@ -1,4 +1,33 @@
[
{
"action": "Create Entry",
"action_label": "Add a Church Family",
"callback_message": null,
"callback_title": null,
"description": "Adding a `Church Family` allows you to track which `Church Person`s belong to specific families.",
"docstatus": 0,
"doctype": "Onboarding Step",
"field": null,
"form_tour": "Church Family",
"intro_video_url": null,
"is_complete": 0,
"is_single": 0,
"is_skipped": 0,
"modified": "2025-09-18 00:37:57.629356",
"name": "Church Family",
"path": null,
"reference_document": "Church Family",
"reference_report": null,
"report_description": null,
"report_reference_doctype": null,
"report_type": null,
"show_form_tour": 1,
"show_full_form": 0,
"title": "Add families that are represented in your church.",
"validate_action": 1,
"value_to_validate": null,
"video_url": null
},
{
"action": "Create Entry",
"action_label": "Add Church Person",
@ -10,10 +39,10 @@
"field": null,
"form_tour": "Church Person",
"intro_video_url": null,
"is_complete": 0,
"is_complete": 1,
"is_single": 0,
"is_skipped": 0,
"modified": "2025-09-07 00:57:18.263385",
"modified": "2025-09-30 21:56:12.070093",
"name": "Church Person",
"path": null,
"reference_document": "Church Person",
@ -27,5 +56,121 @@
"validate_action": 1,
"value_to_validate": null,
"video_url": null
},
{
"action": "Create Entry",
"action_label": "Create Church Manager User",
"callback_message": null,
"callback_title": null,
"description": "Before you get started, you should create a new user. The `Administrator` user should not be used on a daily basis and should be reserved for setting up new users, troubleshooting and system configuration. At least one separate user should be created with the `Church Manager` RoleProfile and the `Church` ModuleProfile permissions. These users will have full access to the Church app.\n\nAdditional users can also be created with the `Church User` RoleProfile and `Church` ModuleProfile permissions. These users will have access to most of the Church app, but will be restricted from modifying, or even seeing sensitive portions of the app. To see the exact permissions that these users have, you can (with the `Administrator` account) use the seach bar at the top to search for `Role Permissions Manager` and select the `Church User` role to see what is accessible by those types of users.\n\n⚠ Only the `Administrator` user has permission to create new users.",
"docstatus": 0,
"doctype": "Onboarding Step",
"field": null,
"form_tour": "Church Manager",
"intro_video_url": null,
"is_complete": 0,
"is_single": 0,
"is_skipped": 0,
"modified": "2025-09-30 21:39:03.912218",
"name": "Church Manager",
"path": null,
"reference_document": "User",
"reference_report": null,
"report_description": null,
"report_reference_doctype": null,
"report_type": null,
"show_form_tour": 1,
"show_full_form": 1,
"title": "Church Manager",
"validate_action": 1,
"value_to_validate": null,
"video_url": null
},
{
"action": "Create Entry",
"action_label": "Add a Church Event",
"callback_message": null,
"callback_title": null,
"description": "Events can be used to track `Church Person` attendance and to link to `Church Collection`s",
"docstatus": 0,
"doctype": "Onboarding Step",
"field": null,
"form_tour": null,
"intro_video_url": null,
"is_complete": 0,
"is_single": 0,
"is_skipped": 0,
"modified": "2025-09-16 22:05:27.860375",
"name": "Church Event",
"path": null,
"reference_document": "Church Event",
"reference_report": null,
"report_description": null,
"report_reference_doctype": null,
"report_type": null,
"show_form_tour": 0,
"show_full_form": 0,
"title": "Add upcoming church events.",
"validate_action": 1,
"value_to_validate": null,
"video_url": null
},
{
"action": "Create Entry",
"action_label": "Add Prayer Request",
"callback_message": null,
"callback_title": null,
"description": null,
"docstatus": 0,
"doctype": "Onboarding Step",
"field": null,
"form_tour": null,
"intro_video_url": null,
"is_complete": 0,
"is_single": 0,
"is_skipped": 0,
"modified": "2025-09-13 01:21:56.200304",
"name": "Church Prayer Request",
"path": null,
"reference_document": "Church Prayer Request",
"reference_report": null,
"report_description": null,
"report_reference_doctype": null,
"report_type": null,
"show_form_tour": 0,
"show_full_form": 1,
"title": "Add prayer requests.",
"validate_action": 1,
"value_to_validate": null,
"video_url": null
},
{
"action": "Create Entry",
"action_label": "Add Church Information",
"callback_message": null,
"callback_title": null,
"description": "Church information is used across the application to populate parts of the church website, letterheads, reports, etc.\n\n⚠ Only `Church Manager`s can edit `Church Information`.",
"docstatus": 0,
"doctype": "Onboarding Step",
"field": null,
"form_tour": "Church Information",
"intro_video_url": null,
"is_complete": 0,
"is_single": 1,
"is_skipped": 0,
"modified": "2025-09-30 21:28:41.144848",
"name": "Church Information",
"path": null,
"reference_document": "Church Information",
"reference_report": null,
"report_description": null,
"report_reference_doctype": null,
"report_type": null,
"show_form_tour": 1,
"show_full_form": 1,
"title": "Add your church information",
"validate_action": 1,
"value_to_validate": null,
"video_url": null
}
]
]

View File

@ -2,58 +2,10 @@
{
"docstatus": 0,
"doctype": "Role Profile",
"modified": "2025-09-13 23:44:46.912938",
"modified": "2025-10-02 01:06:32.950462",
"name": "Church Manager",
"role_profile": "Church Manager",
"roles": [
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Academics User"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Accounts Manager"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Accounts User"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Agriculture Manager"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Agriculture User"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Analytics"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Auditor"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Blogger"
},
{
"parent": "Church Manager",
"parentfield": "roles",
@ -66,233 +18,11 @@
"parenttype": "Role Profile",
"role": "Church User"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Customer"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Dashboard Manager"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Delivery Manager"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Delivery User"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Employee"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Fleet Manager"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Fulfillment User"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "HR Manager"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "HR User"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Inbox User"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Item Manager"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Knowledge Base Contributor"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Knowledge Base Editor"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Maintenance Manager"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Maintenance User"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Manufacturing Manager"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Manufacturing User"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Newsletter Manager"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Prepared Report User"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Projects Manager"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Projects User"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Purchase Manager"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Purchase Master Manager"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Purchase User"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Quality Manager"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Report Manager"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Sales Manager"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Sales Master Manager"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Sales User"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Script Manager"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Stock Manager"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Stock User"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Supplier"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Support Team"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "System Manager"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Translator"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Website Manager"
},
{
"parent": "Church Manager",
"parentfield": "roles",
"parenttype": "Role Profile",
"role": "Workspace Manager"
}
]
},

View File

@ -14,7 +14,18 @@ fixtures = [
},
{
"dt": "Church Event Attendance Type",
"filters": [["type", "in", ("Absent", "Assumed", "Confirmed", "Unknown")]],
"filters": [
[
"type",
"in",
(
"Absent",
"Assumed",
"Confirmed",
"Unknown",
),
]
],
},
{
"dt": "Church Event Type",
@ -33,16 +44,20 @@ fixtures = [
]
],
},
# `Church Fund` fixtures are manually created since we don't want to export test data
{
"dt": "Church Fund",
"dt": "Church Missionary Support Frequency",
"filters": [
[
"fund",
"frequency",
"in",
(
"Building",
"General",
"Missions",
"Weekly",
"Bi-Weekly",
"Monthly",
"Bi-Monthly",
"Quarterly",
"Yearly",
),
]
],
@ -97,20 +112,60 @@ fixtures = [
},
{
"dt": "Church Member Status",
"filters": [["status", "in", ("Inactive", "Active")]],
"filters": [
[
"status",
"in",
(
"Inactive",
"Active",
),
]
],
},
{
"dt": "Church Prayer Request Status",
"filters": [["status", "in", ("Answered", "Intercession", "Requested")]],
"filters": [
[
"status",
"in",
(
"Answered",
"Being Prayed For",
"Requested",
),
]
],
},
{
"dt": "Church Prayer Request Type",
"filters": [["type", "in", ("Health", "Praise", "Salvation", "Unspoken")]],
"filters": [
[
"type",
"in",
(
"Health",
"Praise",
"Salvation",
"Unspoken",
),
]
],
},
{
"dt": "Church Role Type",
"filters": [
["role", "in", ("Deacon", "Elder", "Pastor", "Secretary", "Treasurer")]
[
"role",
"in",
(
"Deacon",
"Elder",
"Pastor",
"Secretary",
"Treasurer",
),
]
],
},
{
@ -119,23 +174,23 @@ fixtures = [
},
{
"dt": "Dashboard Chart",
"filters": [["module", "like", "church"]],
"filters": [["module", "like", "Church%"]],
},
{
"dt": "Form Tour",
"filters": [["Name", "in", ["Church Person"]]],
"filters": [["Name", "like", "Church%"]],
},
{
"dt": "Module Onboarding",
"filters": [["Name", "like", "church"]],
"filters": [["Name", "like", "Church%"]],
},
{
"dt": "Module Profile",
"filters": [["Name", "in", ("Church")]],
"filters": [["Name", "like", "Church%"]],
},
{
"dt": "Onboarding Step",
"filters": [["Name", "in", ["Church Person"]]],
"filters": [["Name", "like", "Church%"]],
},
{
"dt": "Role",
@ -143,11 +198,20 @@ fixtures = [
},
{
"dt": "Role Profile",
"filters": [["Name", "in", ["Church Manager", "Church User"]]],
"filters": [["Name", "like", "Church%"]],
},
{
"dt": "Web Page",
"filters": [["Name", "in", ["About Us", "Our Beliefs"]]],
"filters": [
[
"Name",
"in",
[
"About Us",
"Our Beliefs",
],
]
],
},
]
# Apps
@ -227,8 +291,8 @@ app_include_icons = ["church/icons/custom_icons.svg"]
# Installation
# ------------
#before_install = "install.before_install"
#after_install = "install.after_install"
# before_install = "install.before_install"
# after_install = "install.after_install"
# Uninstallation
# ------------

View File

@ -4,4 +4,6 @@ Church Ministries
Church Missions
Church Prayers
Church Foundations
Church Study
Church Study
Church Customizations
Church Communications