GivingForecast Python Script

To install this script, copy all of the code below. Create a new Python document in Special Content using the name GivingForecast. Then paste the code into editor and save.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#Roles=Finance

from System import DateTime

Html = model.TextContent('GivingForecastHtml')
Style = model.TextContent('GivingForecastStyleHtml')
data = model.DynamicDataFromJson(model.TextContent('GivingForecastData'))

def FmtNumber(value):
    fmt = "N0".format()
    return "" if value== None else value.ToString(fmt)

def SafeDiv(num, dem):
    return float(num) / dem if dem > 0 else 0.0

def NewRow(row, combined):
    return '<th>{}</th><td>{:,d}</td><td>{:,d}</td><td>{:.1%}</td><td>{:,.0f}</td><td>{:.1%}</td><td>{:,.0f}</td>'.format(
        model.SpaceCamelCase(row.RowType), 
        row.FamilyCnt, 
        row.RecurringCnt, 
        SafeDiv(row.RecurringCnt, row.FamilyCnt), 
        row.MonthlyAmt, 
        SafeDiv(row.MonthlyAmt, combined.MonthlyAmt),
        row.MonthlyAmt * 12)

memberrow = NewRow(data.Member, data.Combined)
nonmemberrow = NewRow(data.NonMember, data.Combined)
combinedrow = NewRow(data.Combined, data.Combined)
print Html.format(
    style=Style,
    monthly=data.Combined.MonthlyAmt,
    projected=data.Combined.MonthlyAmt * 12,
    member=memberrow, 
    nonmember=nonmemberrow, 
    combined=combinedrow)

# the following is only used in development 
#Html = model.Content('C:/dev/bvcmsdocs/source/CustomProgramming/Python/Scripts/Giving/Forecast/Files/Content/GivingForecastHtml.text.html')
#Style = model.Content('C:/dev/bvcmsdocs/source/CustomProgramming/Python/Scripts/Giving/Forecast/Files/Content/GivingForecastStyleHtml.text.html')
#runfrom=C:/dev/bvcmsdocs/source/CustomProgramming/Python/Scripts/Giving/Forecast/Files/Content/GivingForecast.py