ledger: Put account classification on each row in a hidden column.
This makes it easier to build formulas based on classification. Hiding it keeps the presentation neat for human readers.
This commit is contained in:
		
							parent
							
								
									27acf1f0c1
								
							
						
					
					
						commit
						5081c8934c
					
				
					 1 changed files with 6 additions and 0 deletions
				
			
		| 
						 | 
					@ -109,6 +109,7 @@ class LedgerODS(core.BaseODS[data.Posting, None]):
 | 
				
			||||||
        ('Assets', ['rt-id', 'receipt', 'approval', 'bank-statement']),
 | 
					        ('Assets', ['rt-id', 'receipt', 'approval', 'bank-statement']),
 | 
				
			||||||
        ('Liabilities', ['rt-id', 'receipt', 'approval', 'bank-statement']),
 | 
					        ('Liabilities', ['rt-id', 'receipt', 'approval', 'bank-statement']),
 | 
				
			||||||
    ])
 | 
					    ])
 | 
				
			||||||
 | 
					    CLASSIFICATION_COLUMN = "Account Classification"
 | 
				
			||||||
    # Excel 2003 was limited to 65,536 rows per worksheet.
 | 
					    # Excel 2003 was limited to 65,536 rows per worksheet.
 | 
				
			||||||
    # While we can probably count on all our users supporting more modern
 | 
					    # While we can probably count on all our users supporting more modern
 | 
				
			||||||
    # formats (Excel 2007 supports over 1 million rows per worksheet),
 | 
					    # formats (Excel 2007 supports over 1 million rows per worksheet),
 | 
				
			||||||
| 
						 | 
					@ -189,6 +190,7 @@ class LedgerODS(core.BaseODS[data.Posting, None]):
 | 
				
			||||||
            'Booked Amount': self.amount_column,
 | 
					            'Booked Amount': self.amount_column,
 | 
				
			||||||
            data.Metadata.human_name('project'): self.amount_column,
 | 
					            data.Metadata.human_name('project'): self.amount_column,
 | 
				
			||||||
            data.Metadata.human_name('rt-id'): self.amount_column,
 | 
					            data.Metadata.human_name('rt-id'): self.amount_column,
 | 
				
			||||||
 | 
					            self.CLASSIFICATION_COLUMN: self.column_style(3),
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @classmethod
 | 
					    @classmethod
 | 
				
			||||||
| 
						 | 
					@ -295,11 +297,13 @@ class LedgerODS(core.BaseODS[data.Posting, None]):
 | 
				
			||||||
        self.sheet_columns: Sequence[str] = [
 | 
					        self.sheet_columns: Sequence[str] = [
 | 
				
			||||||
            *self.CORE_COLUMNS,
 | 
					            *self.CORE_COLUMNS,
 | 
				
			||||||
            *(data.Metadata.human_name(meta_key) for meta_key in self.metadata_columns),
 | 
					            *(data.Metadata.human_name(meta_key) for meta_key in self.metadata_columns),
 | 
				
			||||||
 | 
					            self.CLASSIFICATION_COLUMN,
 | 
				
			||||||
        ]
 | 
					        ]
 | 
				
			||||||
        for col_name in self.sheet_columns:
 | 
					        for col_name in self.sheet_columns:
 | 
				
			||||||
            self.sheet.addElement(odf.table.TableColumn(
 | 
					            self.sheet.addElement(odf.table.TableColumn(
 | 
				
			||||||
                stylename=self.column_styles.get(col_name, self.default_column),
 | 
					                stylename=self.column_styles.get(col_name, self.default_column),
 | 
				
			||||||
            ))
 | 
					            ))
 | 
				
			||||||
 | 
					        self.sheet.lastChild.setAttribute('visibility', 'collapse')
 | 
				
			||||||
        self.add_row(*(
 | 
					        self.add_row(*(
 | 
				
			||||||
            self.string_cell(col_name, stylename=self.style_bold)
 | 
					            self.string_cell(col_name, stylename=self.style_bold)
 | 
				
			||||||
            for col_name in self.sheet_columns
 | 
					            for col_name in self.sheet_columns
 | 
				
			||||||
| 
						 | 
					@ -408,6 +412,7 @@ class LedgerODS(core.BaseODS[data.Posting, None]):
 | 
				
			||||||
        return len(self.account_groups[account])
 | 
					        return len(self.account_groups[account])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def write_entries(self, account: data.Account, rows: Iterable[data.Posting]) -> None:
 | 
					    def write_entries(self, account: data.Account, rows: Iterable[data.Posting]) -> None:
 | 
				
			||||||
 | 
					        classification = account.meta.get('classification', '')
 | 
				
			||||||
        for row in rows:
 | 
					        for row in rows:
 | 
				
			||||||
            if row.cost is None:
 | 
					            if row.cost is None:
 | 
				
			||||||
                amount_cell = odf.table.TableCell()
 | 
					                amount_cell = odf.table.TableCell()
 | 
				
			||||||
| 
						 | 
					@ -423,6 +428,7 @@ class LedgerODS(core.BaseODS[data.Posting, None]):
 | 
				
			||||||
                  if key in data.LINK_METADATA
 | 
					                  if key in data.LINK_METADATA
 | 
				
			||||||
                  else self.string_cell(row.meta.get(key, ''))
 | 
					                  else self.string_cell(row.meta.get(key, ''))
 | 
				
			||||||
                  for key in self.metadata_columns),
 | 
					                  for key in self.metadata_columns),
 | 
				
			||||||
 | 
					                self.string_cell(classification),
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def write(self, rows: Iterable[data.Posting]) -> None:
 | 
					    def write(self, rows: Iterable[data.Posting]) -> None:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue