Changeset - 90ae343a1ade
[Not reviewed]
0 1 0
Brett Smith - 4 years ago 2020-08-18 06:02:54
brettcsmith@brettcsmith.org
balance_sheet: Refactor out Report.start_sheet method.
1 file changed with 43 insertions and 78 deletions:
0 comments (0 inline, 0 general)
conservancy_beancount/reports/balance_sheet.py
Show inline comments
...
 
@@ -197,8 +197,9 @@ class Report(core.BaseODS[Sequence[None], None]):
 
                 date_fmt: str='%B %d, %Y',
 
    ) -> None:
 
        super().__init__()
 
        self.balances = balances
 
        self.date_fmt = date_fmt
 
        one_day = datetime.timedelta(days=1)
 
        date = balances.period_range.stop - one_day
 
        self.period_name = date.strftime(date_fmt)
 
        date = balances.prior_range.stop - one_day
...
 
@@ -247,25 +248,39 @@ class Report(core.BaseODS[Sequence[None], None]):
 
        return self.walk_classifications(self.balances.classifications(
 
            account, sort_period,
 
        ))
 

	
 
    def write_financial_position(self) -> None:
 
        self.use_sheet("Financial Position")
 
        for width in [3, 1.5, 1.5]:
 
            col_style = self.column_style(width)
 
    def start_sheet(self,
 
                    sheet_name: str,
 
                    *headers: Iterable[str],
 
                    totals_prefix: Sequence[str]=(),
 
                    first_width: Union[float, str]=3,
 
                    width: Union[float, str]=1.5,
 
    ) -> None:
 
        header_cells: Sequence[odf.table.TableCell] = [
 
            odf.table.TableCell(),
 
            *(self.multiline_cell(header_lines, stylename=self.style_huline)
 
              for header_lines in headers),
 
            *(self.multiline_cell([*totals_prefix, date_s], stylename=self.style_huline)
 
              for date_s in [self.period_name, self.opening_name]),
 
        ]
 
        self.col_count = len(header_cells)
 
        self.use_sheet(sheet_name)
 
        for index in range(self.col_count):
 
            col_style = self.column_style(width if index else first_width)
 
            self.sheet.addElement(odf.table.TableColumn(stylename=col_style))
 
        start_date = self.balances.period_range.start.strftime(self.date_fmt)
 
        self.add_row(
 
            self.multiline_cell([
 
                "DRAFT Statement of Financial Position",
 
                self.period_name,
 
            ], numbercolumnsspanned=3, stylename=self.style_header)
 
                f"DRAFT Statement of {sheet_name}",
 
                f"{start_date}—{self.period_name}",
 
            ], numbercolumnsspanned=self.col_count, stylename=self.style_header)
 
        )
 
        self.add_row()
 
        self.add_row(
 
            odf.table.TableCell(),
 
            self.string_cell(self.period_name, stylename=self.style_huline),
 
            self.string_cell(self.opening_name, stylename=self.style_huline),
 
        )
 
        self.add_row(*header_cells)
 

	
 
    def write_financial_position(self) -> None:
 
        self.start_sheet("Financial Position")
 

	
 
        prior_assets = core.MutableBalance()
 
        period_assets = core.MutableBalance()
 
        self.add_row(self.string_cell("Assets", stylename=self.style_bold))
...
 
@@ -357,37 +372,20 @@ class Report(core.BaseODS[Sequence[None], None]):
 
                              stylename=self.style_bottomline),
 
        )
 

	
 
    def write_activities(self) -> None:
 
        self.use_sheet("Activities")
 
        self.start_sheet(
 
            "Activities",
 
            ["Without Donor", "Restrictions"],
 
            ["With Donor", "Restrictions"],
 
            totals_prefix=["Total Year Ended"],
 
        )
 
        bal_kwargs: Sequence[Dict[str, Any]] = [
 
            {'period': Period.PERIOD, 'fund': Fund.UNRESTRICTED},
 
            {'period': Period.PERIOD, 'fund': Fund.RESTRICTED},
 
            {'period': Period.PERIOD},
 
            {'period': Period.PRIOR},
 
        ]
 
        col_count = len(bal_kwargs) + 1
 
        for index in range(col_count):
 
            col_style = self.column_style(1.5 if index else 3)
 
            self.sheet.addElement(odf.table.TableColumn(stylename=col_style))
 
        self.add_row(
 
            self.multiline_cell([
 
                "DRAFT Statement of Activities",
 
                self.period_name,
 
            ], numbercolumnsspanned=col_count, stylename=self.style_header)
 
        )
 
        self.add_row()
 
        self.add_row(
 
            odf.table.TableCell(),
 
            self.multiline_cell(["Without Donor", "Restrictions"],
 
                                stylename=self.style_huline),
 
            self.multiline_cell(["With Donor", "Restrictions"],
 
                                stylename=self.style_huline),
 
            self.multiline_cell(["Total Year Ended", self.period_name],
 
                                stylename=self.style_huline),
 
            self.multiline_cell(["Total Year Ended", self.opening_name],
 
                                stylename=self.style_huline),
 
        )
 

	
 
        totals = [core.MutableBalance() for _ in bal_kwargs]
 
        self.add_row(self.string_cell("Support and Revenue", stylename=self.style_bold))
 
        self.add_row()
...
 
@@ -512,40 +510,22 @@ class Report(core.BaseODS[Sequence[None], None]):
 
              for beg_bal, tot_bal in zip(beginnings, totals)),
 
        )
 

	
 
    def write_functional_expenses(self) -> None:
 
        self.use_sheet("Functional Expenses")
 
        self.start_sheet(
 
            "Functional Expenses",
 
            ["Program", "Services"],
 
            ["Management and", "Administrative"],
 
            ["Fundraising"],
 
            totals_prefix=["Total Year Ended"],
 
        )
 
        bal_kwargs: Sequence[Dict[str, Any]] = [
 
            {'period': Period.PERIOD, 'post_type': 'program'},
 
            {'period': Period.PERIOD, 'post_type': 'management'},
 
            {'period': Period.PERIOD, 'post_type': 'fundraising'},
 
            {'period': Period.PERIOD},
 
            {'period': Period.PRIOR},
 
        ]
 
        col_count = len(bal_kwargs) + 1
 
        for index in range(col_count):
 
            col_style = self.column_style(1.5 if index else 3)
 
            self.sheet.addElement(odf.table.TableColumn(stylename=col_style))
 
        self.add_row(
 
            self.multiline_cell([
 
                "DRAFT Statement of Functional Expenses",
 
                self.period_name,
 
            ], numbercolumnsspanned=col_count, stylename=self.style_header)
 
        )
 
        self.add_row()
 
        self.add_row(
 
            odf.table.TableCell(),
 
            self.multiline_cell(["Program", "Services"],
 
                                stylename=self.style_huline),
 
            self.multiline_cell(["Management and", "Administrative"],
 
                                stylename=self.style_huline),
 
            self.multiline_cell(["Fundraising"],
 
                                stylename=self.style_huline),
 
            self.multiline_cell(["Total Year Ended", self.period_name],
 
                                stylename=self.style_huline),
 
            self.multiline_cell(["Total Year Ended", self.opening_name],
 
                                stylename=self.style_huline),
 
        )
 

	
 
        totals = [core.MutableBalance() for _ in bal_kwargs]
 
        for text, classification in self.walk_classifications_by_account('Expenses'):
 
            text_cell = self.string_cell(text)
...
 
@@ -565,9 +545,9 @@ class Report(core.BaseODS[Sequence[None], None]):
 
                break_bal = sum(balances[:3], core.MutableBalance())
 
                if not (break_bal - balances[3]).clean_copy(1).is_zero():
 
                    logger.warning(
 
                        "Functional expenses breakdown does not match total on row %s",
 
                        len(self.sheet.childNodes) - col_count,
 
                        len(self.sheet.childNodes) - self.col_count,
 
                    )
 
                for total, bal in zip(totals, balances):
 
                    total += bal
 
        self.add_row()
...
 
@@ -577,29 +557,14 @@ class Report(core.BaseODS[Sequence[None], None]):
 
              for tot_bal in totals),
 
        )
 

	
 
    def write_cash_flows(self) -> None:
 
        self.use_sheet("Cash Flows")
 
        self.start_sheet("Cash Flows")
 
        bal_kwargs: Sequence[Dict[str, Any]] = [
 
            {'period': Period.PERIOD},
 
            {'period': Period.PRIOR},
 
        ]
 
        col_count = len(bal_kwargs) + 1
 
        for index in range(col_count):
 
            col_style = self.column_style(1.5 if index else 3)
 
            self.sheet.addElement(odf.table.TableColumn(stylename=col_style))
 
        self.add_row(
 
            self.multiline_cell([
 
                "DRAFT Statement of Cash Flows",
 
                self.period_name,
 
            ], numbercolumnsspanned=col_count, stylename=self.style_header)
 
        )
 
        self.add_row()
 
        self.add_row(
 
            odf.table.TableCell(),
 
            self.string_cell(self.period_name, stylename=self.style_huline),
 
            self.string_cell(self.opening_name, stylename=self.style_huline),
 
        )
 

	
 
        self.add_row(self.string_cell(
 
            "Cash Flows from Operating Activities",
 
            stylename=self.style_bold,
 
        ))
0 comments (0 inline, 0 general)