def run(self, args): start = args['start'] end = args['end'] if (start.month == 1 and start.day == 1 and end.month == 12 and end.day == 31): description = _("Total revenue, expenses and gross profit for %s") % (start.year, ) else: description = _("Total revenue, expenses and gross profit for all months in a year") date_columns = ("extract(year FROM paid_date)||'-'||" "lpad(extract(month FROM paid_date)::char, 2, '0')") months = {} ns = dict(date_columns=date_columns, start=start.strftime('%Y-%m-%d'), end=end.strftime('%Y-%m-%d')) tmpl = string.Template(self.in_payments_query).substitute(ns) res = self.execute(tmpl) for date, total_in in res: year, month = map(int, date.split('-')) months.setdefault((year, month), {})['in'] = total_in or 0 tmpl = string.Template(self.out_payments_query).substitute(ns) res = self.execute(tmpl) for date, total_out in res: year, month = map(int, date.split('-')) months.setdefault((year, month), {})['out'] = total_out or 0 revenues = [] expenses = [] profits = [] items = [] keys = sorted(months) for key in keys: values = months[key] year, month = key month = int(month) total_in = values.get('in', 0) total_out = values.get('out', 0) revenues.append(float(total_in)) expenses.append(float(total_out)) profits.append(float(total_in - total_out)) items.append({'short_title': '%s' % (get_short_month_names()[month - 1], ), 'time': '%s, %d' % (get_month_names()[month - 1], year), 'revenue': int(total_in), 'expense': int(total_out), 'profit': int(total_in - total_out), 'year': year, 'month': month}) return {'data': [revenues, expenses, profits], 'description': description, 'items': items}
def _startup(self): options = {} options['monthNames'] = dateutils.get_month_names() options['monthNamesShort'] = dateutils.get_short_month_names() options['dayNames'] = dateutils.get_day_names() options['dayNamesShort'] = dateutils.get_short_day_names() options['buttonText'] = {"today": _('today'), "month": _('month'), "week": _('week'), "day": _('day')} options['defaultView'] = api.user_settings.get( 'calendar-view', 'month') # FIXME: This should not be tied to the language, rather be # picked up from libc, but it's a bit of work to translate # one into another so just take a shortcut options['columnFormat'] = { # month column format, eg "Mon", see: # http://arshaw.com/fullcalendar/docs/text/columnFormat/ 'month': _('ddd'), # week column format: eg, "Mon 9/7", see: # http://arshaw.com/fullcalendar/docs/text/columnFormat/ 'week': _('ddd M/d'), # day column format : eg "Monday 9/7", see: # http://arshaw.com/fullcalendar/docs/text/columnFormat/ 'day': _('dddd M/d'), } options['timeFormat'] = { # for agendaWeek and agendaDay, eg "5:00 - 6:30", see: # http://arshaw.com/fullcalendar/docs/text/timeFormat/ 'agenda': _('h:mm{ - h:mm}'), # for all other views, eg "7p", see: # http://arshaw.com/fullcalendar/docs/text/timeFormat/ '': _('h(:mm)t'), } options['titleFormat'] = { # month title, eg "September 2009", see: # http://arshaw.com/fullcalendar/docs/text/titleFormat/ 'month': _('MMMM yyyy'), # week title, eg "Sep 7 - 13 2009" see: # http://arshaw.com/fullcalendar/docs/text/titleFormat/ 'week': _("MMM d[ yyyy]{ '—'[ MMM] d yyyy}"), # day time, eg "Tuesday, Sep 8, 2009" see: # http://arshaw.com/fullcalendar/docs/text/titleFormat/ 'day': _('dddd, MMM d, yyyy'), } if get_weekday_start() == MO: firstday = 1 else: firstday = 0 options['firstDay'] = firstday options['isRTL'] = ( gtk.widget_get_default_direction() == gtk.TEXT_DIR_RTL) options['data'] = self._show_events options['loading_msg'] = _('Loading calendar content, please wait...') self.js_function_call('startup', options) self._update_title()
def _startup(self): options = {} options['monthNames'] = dateutils.get_month_names() options['monthNamesShort'] = dateutils.get_short_month_names() options['dayNames'] = dateutils.get_day_names() options['dayNamesShort'] = dateutils.get_short_day_names() options['buttonText'] = { "today": _('today'), "month": _('month'), "week": _('week'), "day": _('day') } options['defaultView'] = api.user_settings.get('calendar-view', 'month') # FIXME: This should not be tied to the language, rather be # picked up from libc, but it's a bit of work to translate # one into another so just take a shortcut options['columnFormat'] = { # month column format, eg "Mon", see: # http://arshaw.com/fullcalendar/docs/text/columnFormat/ 'month': _('ddd'), # week column format: eg, "Mon 9/7", see: # http://arshaw.com/fullcalendar/docs/text/columnFormat/ 'week': _('ddd M/d'), # day column format : eg "Monday 9/7", see: # http://arshaw.com/fullcalendar/docs/text/columnFormat/ 'day': _('dddd M/d'), } options['timeFormat'] = { # for agendaWeek and agendaDay, eg "5:00 - 6:30", see: # http://arshaw.com/fullcalendar/docs/text/timeFormat/ 'agenda': _('h:mm{ - h:mm}'), # for all other views, eg "7p", see: # http://arshaw.com/fullcalendar/docs/text/timeFormat/ '': _('h(:mm)t'), } options['titleFormat'] = { # month title, eg "September 2009", see: # http://arshaw.com/fullcalendar/docs/text/titleFormat/ 'month': _('MMMM yyyy'), # week title, eg "Sep 7 - 13 2009" see: # http://arshaw.com/fullcalendar/docs/text/titleFormat/ 'week': _("MMM d[ yyyy]{ '—'[ MMM] d yyyy}"), # day time, eg "Tuesday, Sep 8, 2009" see: # http://arshaw.com/fullcalendar/docs/text/titleFormat/ 'day': _('dddd, MMM d, yyyy'), } if get_weekday_start() == MO: firstday = 1 else: firstday = 0 options['firstDay'] = firstday options['isRTL'] = ( gtk.widget_get_default_direction() == gtk.TEXT_DIR_RTL) options['data'] = self._show_events options['loading_msg'] = _('Loading calendar content, please wait...') self.js_function_call('startup', options) self._update_title()
def run(self, args): start = args['start'] end = args['end'] if (start.month == 1 and start.day == 1 and end.month == 12 and end.day == 31): description = _("Total revenue, expenses and gross profit for %s" ) % (start.year, ) else: description = _( "Total revenue, expenses and gross profit for all months in a year" ) date_columns = "extract(year FROM paid_date)||'-'||lpad(extract(month FROM paid_date)::char, 2, '0')" months = {} ns = dict(date_columns=date_columns, start=start.strftime('%Y-%m-%d'), end=end.strftime('%Y-%m-%d')) tmpl = string.Template(self.in_payments_query).substitute(ns) res = self.execute(tmpl) for date, total_in in res: year, month = map(int, date.split('-')) months.setdefault((year, month), {})['in'] = total_in or 0 tmpl = string.Template(self.out_payments_query).substitute(ns) res = self.execute(tmpl) for date, total_out in res: year, month = map(int, date.split('-')) months.setdefault((year, month), {})['out'] = total_out or 0 revenues = [] expenses = [] profits = [] items = [] keys = sorted(months) for key in keys: values = months[key] year, month = key month = int(month) total_in = values.get('in', 0) total_out = values.get('out', 0) revenues.append(float(total_in)) expenses.append(float(total_out)) profits.append(float(total_in - total_out)) items.append({ 'short_title': '%s' % (get_short_month_names()[month - 1], ), 'time': '%s, %d' % (get_month_names()[month - 1], year), 'revenue': int(total_in), 'expense': int(total_out), 'profit': int(total_in - total_out), 'year': year, 'month': month }) return { 'data': [revenues, expenses, profits], 'description': description, 'items': items }