class FinancialReportDialog(BasicDialog): title = _("Financial Report Dialog") def __init__(self, store): self.store = store self.date_filter = DateSearchFilter(_("Year:")) self.date_filter.clear_options() self._populate_date_filter(self.date_filter) self.date_filter.select() self.date_filter.set_use_date_entries(False) BasicDialog.__init__(self, title=self.title) self.main_label.set_justify(gtk.JUSTIFY_CENTER) self.ok_button.set_label(_("Generate")) self.add(self.date_filter) self.date_filter.show() def confirm(self): start = self.date_filter.get_start_date() if start is None: warning(_("There are no transactions yet")) return f = FinancialIntervalReport(self.store, start.year) if not f.run(): return temporary = tempfile.NamedTemporaryFile( # Translators: This will be part of a filename prefix=_("stoq-yearly-report"), suffix=".xls", delete=False, ) f.write(temporary) sse = SpreadSheetExporter() sse.export_temporary(temporary) self.close() self.temporary = temporary # # Private # def _populate_date_filter(self, date_filter): transaction = self.store.find(AccountTransaction).order_by(AccountTransaction.date).first() if transaction is None: return for i in range(transaction.date.year, localtoday().year + 1): year = datetime.datetime(i, 1, 1) date_filter.add_option_fixed_interval(_("Year %d") % (i,), year, year.replace(month=12, day=31), position=0) def _date_filter_query(self, search_spec, column): executer = QueryExecuter(self.store) executer.set_filter_columns(self.date_filter, [column]) executer.set_search_spec(search_spec) return executer.search([self.date_filter.get_state()])
class SintegraDialog(BasicDialog): title = _('Fiscal Printer History') def __init__(self, store): BasicDialog.__init__(self, title=self.title) self.main_label.set_justify(gtk.JUSTIFY_CENTER) self.store = store self.ok_button.set_label(_("Generate")) self.date_filter = DateSearchFilter(_('Month:')) self.date_filter.set_use_date_entries(False) self.date_filter.clear_options() self._populate_date_filter(self.date_filter) self.date_filter.select() self.add(self.date_filter) self.date_filter.show() def confirm(self): start = self.date_filter.get_start_date() end = self.date_filter.get_end_date() filename = save(_("Save Sintegra file"), self.get_toplevel(), "sintegra-%s.txt" % (start.strftime('%Y-%m'), )) if not filename: return try: generator = StoqlibSintegraGenerator(self.store, start, end) generator.write(filename) except SintegraError as e: warning(str(e)) return self.close() # # Private # def _populate_date_filter(self, date_filter): # The options we want to show to the users are the following: # 'May 2007' # 'June 2007' # ... # 'September 2008' initial_date = self.store.find(SystemTable).min( SystemTable.updated).date() # Start is the first day of the month # End is the last day of the month start = initial_date + relativedelta(day=1) end = localtoday().date() + relativedelta(day=31) intervals = [] while start < end: intervals.append((start, start + relativedelta(day=31))) start = start + relativedelta(months=1) # When we have the list of intervals, add them to the list and # make sure that they are translated month_names = get_month_names() for start, end in intervals: # Translators: Do not translate 'month' and 'year'. You can # change it's positions. In the way it is, # it will product for example 'December 2012' name = _('{month} {year}').format(month=month_names[start.month - 1], year=start.year) date_filter.add_option_fixed_interval(name, start, end, position=0) def _date_filter_query(self, search_spec, column): executer = QueryExecuter(self.store) executer.set_filter_columns(self.date_filter, [column]) executer.set_table(search_spec) return executer.search([self.date_filter.get_state()])
class SintegraDialog(BasicDialog): title = _('Fiscal Printer History') def __init__(self, store): BasicDialog.__init__(self, title=self.title) self.justify_label(gtk.JUSTIFY_CENTER) self.store = store self.ok_button.set_label(_("Generate")) self.date_filter = DateSearchFilter(_('Month:')) self.date_filter.set_use_date_entries(False) self.date_filter.clear_options() self._populate_date_filter(self.date_filter) self.date_filter.select() self.add(self.date_filter) self.date_filter.show() def confirm(self): start = self.date_filter.get_start_date() end = self.date_filter.get_end_date() filename = save(_("Save Sintegra file"), self.get_toplevel(), "sintegra-%s.txt" % (start.strftime('%Y-%m'), )) if not filename: return try: generator = StoqlibSintegraGenerator(self.store, start, end) generator.write(filename) except SintegraError as e: warning(str(e)) return self.close() # # Private # def _populate_date_filter(self, date_filter): # The options we want to show to the users are the following: # 'May 2007' # 'June 2007' # ... # 'September 2008' initial_date = self.store.find(SystemTable).min( SystemTable.updated).date() # Start is the first day of the month # End is the last day of the month start = initial_date + relativedelta(day=1) end = localtoday().date() + relativedelta(day=31) intervals = [] while start < end: intervals.append((start, start + relativedelta(day=31))) start = start + relativedelta(months=1) # When we have the list of intervals, add them to the list and # make sure that they are translated month_names = get_month_names() for start, end in intervals: # Translators: Do not translate 'month' and 'year'. You can # change it's positions. In the way it is, # it will product for example 'December 2012' name = _('{month} {year}').format( month=month_names[start.month - 1], year=start.year) date_filter.add_option_fixed_interval( name, start, end, position=0) def _date_filter_query(self, search_table, column): executer = QueryExecuter(self.store) executer.set_filter_columns(self.date_filter, [column]) executer.set_table(search_table) return executer.search([self.date_filter.get_state()])
class FinancialReportDialog(BasicDialog): title = _('Financial Report Dialog') def __init__(self, store): self.store = store self.date_filter = DateSearchFilter(_('Year:')) self.date_filter.clear_options() self._populate_date_filter(self.date_filter) self.date_filter.select() self.date_filter.set_use_date_entries(False) BasicDialog.__init__(self, title=self.title) self.justify_label(gtk.JUSTIFY_CENTER) self.ok_button.set_label(_("Generate")) self.add(self.date_filter) self.date_filter.show() def confirm(self): start = self.date_filter.get_start_date() if start is None: warning(_("There are no transactions yet")) return f = FinancialIntervalReport(self.store, start.year) if not f.run(): return temporary = tempfile.NamedTemporaryFile( # Translators: This will be part of a filename prefix=_('stoq-yearly-report'), suffix='.xls', delete=False) f.write(temporary) sse = SpreadSheetExporter() sse.export_temporary(temporary) self.close() # # Private # def _populate_date_filter(self, date_filter): transaction = self.store.find(AccountTransaction).order_by( AccountTransaction.date).first() if transaction is None: return for i in range(transaction.date.year, datetime.date.today().year + 1): year = datetime.datetime(i, 1, 1) date_filter.add_option_fixed_interval(_('Year %d') % (i, ), year, year.replace(month=12, day=31), position=0) def _date_filter_query(self, search_table, column): executer = QueryExecuter(self.store) executer.set_filter_columns(self.date_filter, [column]) executer.set_table(search_table) return executer.search([self.date_filter.get_state()])