Three Year Giving¶
This is a report of individuals with a total of each of the past 3 years’ giving. If a couple gives jointly, the spouse will be included in each total and the spouse name will appear in a separate column. The code is specifying a calendar year date range and looks back for the most recent 3 complete years.
You can add this to the blue Toolbar so it can be run anywhere you see the Toolbar - for an individual, a Tag, an Involvement, or Search Builder results. It will display under the code icon.
We also have a recipe for a Five Year Giving Report that is that same as this one, but just looks at the past 5 complete years.
See also
Create Three Year Giving Report¶
- Step 1
Go to Admin > Advanced > Special Content and select the Python Scripts tab.
- Step 2
Select the green + New Python Script File button and enter the name as
ThreeYearGiving
and press Submit.- Step 3
Select and copy all of the code below and paste it into the new file you created.
Press the blue Save Python Script button at the bottom of the file.
- Step 4
Now press Run Script. It will run on the last search results your were viewing. To add this report to the Toolbar, press the Add Report to Menu button at the bottom of the report.
Note
For joint donors, it does not matter whether both spouses are in your search result list or not. It will present the HOH name as well as the spouse name and will combine the giving.
Three Year Giving Code¶
#Roles=Finance
template = """
;WITH givingunits AS (
SELECT p.PeopleId FROM dbo.People p JOIN dbo.TagPerson tp ON tp.PeopleId = p.PeopleId AND tp.Id = @BlueToolbarTagId
UNION
SELECT p.SpouseId FROM dbo.People p JOIN dbo.TagPerson tp ON tp.PeopleId = p.PeopleId AND tp.Id = @BlueToolbarTagId
WHERE ISNULL(p.ContributionOptionsId, IIF(p.MaritalStatusId = 2, 2, 1)) = 2
)
SELECT CreditGiverId,
SpouseId,
Amount,
DATEPART(YEAR, Date) Y,
c.PeopleId,
Date,
c.FundId
INTO #t
FROM dbo.Contributions2('1/1/{0}','12/31/{2}',0,0,NULL,1,NULL) c
WHERE EXISTS(SELECT NULL FROM givingunits WHERE PeopleId IN (c.CreditGiverId, c.CreditGiverId2))
AND Amount > 0
;WITH giving AS (
SELECT
CreditGiverId, SpouseId
, ISNULL((SELECT SUM(Amount)
FROM #t
WHERE CreditGiverId = tt.CreditGiverId
AND Y = {0}), 0) Tot{0}
, ISNULL((SELECT SUM(Amount)
FROM #t
WHERE CreditGiverId = tt.CreditGiverId
AND Y = {1}), 0) Tot{1}
, ISNULL((SELECT SUM(Amount)
FROM #t
WHERE CreditGiverId = tt.CreditGiverId
AND Y = {2}), 0) Tot{2}
FROM #t tt
GROUP BY tt.CreditGiverId, tt.SpouseId
)
SELECT
p.PeopleId,
Head = p.Name2,
Spouse = sp.PreferredName,
g.Tot{0},
g.Tot{1},
g.Tot{2}
FROM giving g
JOIN dbo.People p ON p.PeopleId = g.CreditGiverId
LEFT JOIN dbo.People sp ON sp.PeopleId = g.SpouseId
ORDER BY p.Name2
DROP TABLE #t
"""
year = model.DateTime.Year - 3
sql = template.format(year, year + 1, year + 2)
print model.SqlGrid(sql)
Latest Update |
3/5/2024 |
Updated menu location and code to include unclosed bundles