Ejemplo n.º 1
0
	def create_opendocument(self):
		self.doc = OpenDocument(self.working_template, working_dir=self.working_dir)
		return self.doc
Ejemplo n.º 2
0
class StundenzettelGenerator:
	"""
	The StundenzettelGenerator is an extensible class for organizing the creation
	of a single time sheet.
	"""
	def __init__(self, template_filename, target_filename, template_data, logger=None):
		self.template_filename = template_filename
		self.template_dir = path.dirname(template_filename)
		if not self.template_dir:
			self.template_dir = getcwd()
		self.target_filename = target_filename
		self.arg = template_data

		self.working_dir = self.create_working_directory()

		if not logger:
			import logging # batteries included
			logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
			self.log = logging.getLogger(self.__class__.__name__)
		else:	self.log = logger

	def create_working_directory(self):
		from tempfile import mkdtemp
		return mkdtemp()

	def copy_template_file(self):
		source = self.template_filename
		target = path.join(self.working_dir, path.basename(source))
		self.log.info("Copying %s -> %s" % (source, target))
		copy(source, target)
		self.working_template = target

	def create_opendocument(self):
		self.doc = OpenDocument(self.working_template, working_dir=self.working_dir)
		return self.doc

	def create_schedule(self):
		# sollte irgendwann mal verschiedene Strategien erlauben
		self.strategy = StandupStrategy(self.arg)
		self.schedule = self.strategy.formatSchedule(self.strategy.createSchedule())
		return self.schedule

	def render_schedule(self):
		if not hasattr(self, 'schedule'):
			self.create_schedule()

		# Set up template data: Lowercase all existing variables
		data = {"var_"+k.lower(): v for k,v in self.arg.iteritems()}

		dayrows = self.schedule
		append_rows = 32 - len(dayrows)
		empty_row = {k:'' for k in ['date', 'begin', 'pause', 'end', 'dur', 'key', 'sign']}
		dayrows += [empty_row]*append_rows
		# and merge the schedule
		for i,day in enumerate(dayrows):
			for key, value in day.iteritems():
				data['%s%d' % (key, i)] = value

		print "data:"
		print data
		self.log.info("Running OpenDocument template")
		self.doc.run_template(data, render_pdf=True)

	def make(self):
		self.copy_template_file()
		self.create_opendocument()
		
		self.render_schedule()

		self.log.info("Copying PDF to "+self.template_dir)
		copy(self.doc.pdf_filename, self.template_dir)