GivingTypes Python Script¶
To install this script, copy all of the code below. Create a new Python document in Special Content using the name GivingTypes. 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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | #Roles=Finance # Initialize global data IsAdmin = model.UserIsInRole("Admin") Shell = model.TextContent('GivingTypesHtmlShell') TablePattern = model.TextContent('GivingTypesHtmlTable') Sql = model.SqlContent('GivingTypesData') LookupData = q.SqlNameValues(Sql, 'FundsTypeRange', 'Total') ValidateUrl = '/RunScript/GivingTypesValidate' RowOrder = [ 'Online', 'Mobile', 'Recurring', 'SundayMainWorship', 'MissionTrip', 'BankDrafts', 'MailedChecksAndCash', 'SecureGive', 'Stock', 'Hispanic', 'Students', 'NonTaxDeductible', 'Unknown' ] DateRanges = [ ['Ytd', 'Year To Date'], ['30', 'Last 30 Days'], ['365', 'Last 365 Days'] ] def Percent(number, total): if number == None: return total * 0 return number / total * 100 def FormatNumber(value, ndecimals): fmt = "N{}".format(ndecimals) return "" if value== None else value.ToString(fmt) def BuildRow(rowType, dateRange): amt = LookupData['GtAllFunds-' + rowType + dateRange] total = LookupData['GtAllFunds-Total' + dateRange] pct = FormatNumber(Percent(amt, total), 1) amtallfunds = FormatNumber(amt, 0) amtmainfund = FormatNumber(LookupData['GtMainFund-' + rowType + dateRange], 0) amtother = FormatNumber(LookupData['GtOther-' + rowType + dateRange], 0) label = model.SpaceCamelCase(rowType) if rowType == 'Unknown' and amtallfunds == '' and amtmainfund == '' and amtother == '': return '' row = ''' <tr> <td>{title}</td><td>{all}</td><td>{pct}</td><td>{main}</td><td>{other}</td> </tr> ''' if IsAdmin: row = ''' <tr> <td>{title}</td> <td><a href="{url}?row={type}&col=1&dtrange={range}" target="detail">{all}</a></td> <td>{pct}</td> <td><a href="{url}?row={type}&col=2&dtrange={range}" target="detail">{main}</a></td> <td><a href="{url}?row={type}&col=3&dtrange={range}" target="detail">{other}</a></td> </tr> ''' return row.format(url=ValidateUrl, title=label, type=rowType, range=dateRange, all=amtallfunds, pct=pct, main=amtmainfund, other=amtother) def BuildTotalRow(dateRange): amtallfunds = FormatNumber(LookupData['GtAllFunds-Total' + dateRange], 0) amtmainfund = FormatNumber(LookupData['GtMainFund-Total'+ dateRange], 0) amtother = FormatNumber(LookupData['GtOther-Total' + dateRange], 0) row = '<tfoot><tr><th>Total</th><th>{all}</th><th></th><th>{main}</th><th>{other}</th></tr></tfoot>' if IsAdmin: row = ''' <tfoot><tr> <td>Total</th> <th><a href="{url}?fundset=1&rowtype=%&daterange={range}" target="detail">{all}</a></th> <th></th> <th><a href="{url}?fundset=2&&rowtype=%&daterange={range}" target="detail">{main}</a></th> <th><a href="{url}?fundset=3&&rowtype=%&daterange={range}" target="detail">{other}</a></th> </tr></tfoot> ''' return row.format(url=ValidateUrl, range=dateRange, all=amtallfunds, main=amtmainfund, other=amtother) def BuildTableRows(dateRange): rows = '<tbody>\n' for rowType in RowOrder: rows += BuildRow(rowType, dateRange) rows += '</tbody>\n' rows += BuildTotalRow(dateRange) return rows def BuildTables(): tables = '' for dateRange in DateRanges: rows = BuildTableRows(dateRange[0]) tables += TablePattern.format(dateRange[1], rows) return tables print Shell.replace('<!--tables-->', BuildTables()) # the following is only used in development #runfrom=C:/dev/bvcmsdocs/source/CustomProgramming/Python/Scripts/Giving/Types/Files/Content/GivingTypes.py ''' Shell = model.Content('C:/dev/bvcmsdocs/source/CustomProgramming/Python/Scripts/Giving/Types/Files/Content/GivingTypesHtmlShell.text.html') TablePattern = model.Content('C:/dev/bvcmsdocs/source/CustomProgramming/Python/Scripts/Giving/Types/Files/Content/GivingTypesHtmlTable.text.html') Sql = model.Content('C:/dev/bvcmsdocs/source/CustomProgramming/Python/Scripts/Giving/Types/Files/Content/GivingTypesData.sql') ''' |