Last active
October 6, 2017 12:34
-
-
Save carlescliment/f82df7f9384c9488a2bda88a0fdf814b to your computer and use it in GitHub Desktop.
Open-closed xls
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Sheet(object): | |
def __init__(self, name, main_header, data_headers, data): | |
self.name = name | |
self.main_header = main_header | |
self.data_headers = data_headers | |
self.data = data | |
def dump_to(self, document): | |
spreadsheet = document.add_spreadsheet(self.name) | |
self.main_header.dump_to(spreadsheet) | |
self.data_headers.dump_to(spreadsheet) | |
self.data.dump_to(spreadsheet) | |
class MainHeader(object): | |
def __init__(self, sheet_name): | |
self.sheet_name = sheet_name | |
def dump_to(self, spreadsheet): | |
# ... | |
class CostsByJobData(object) | |
def __init__(self, user_id): | |
self.user_id | |
def dump_to(self, spreadsheet): | |
costs_by_job = CostsByJobRepository.by_user_id(self.user_id) | |
for job in costs_by_job: | |
# ... | |
# Build the components | |
name = _('Jobs') | |
header = MainHeader(name) | |
data_headers = DataHeaders({ | |
'B:E': _('Job name'), | |
'F': _('Cost'), | |
#... | |
}) | |
data = CostsByJobData(user_id) | |
costs_by_job_sheet = Sheet(name, header, data_headers, data) | |
# Execute | |
costs_by_job_sheet.dump_to(document) | |
# More abstractions | |
class CostsReport | |
def __initialize(self): | |
self.sheets = [] | |
def add(self, sheet): | |
self.sheets.append(sheet) | |
return self | |
def dump_to(self, document): | |
for sheet in self.sheets: | |
sheet.dump_to(document) | |
(CostsReport().add(costs_by_crop_sheet) | |
.add(costs_by_field_sheet) | |
.add(costs_by_job_sheet) | |
.dump_to(document)) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment