Skip to content

Instantly share code, notes, and snippets.

@carlescliment
Last active October 6, 2017 12:34
Show Gist options
  • Save carlescliment/f82df7f9384c9488a2bda88a0fdf814b to your computer and use it in GitHub Desktop.
Save carlescliment/f82df7f9384c9488a2bda88a0fdf814b to your computer and use it in GitHub Desktop.
Open-closed xls
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