Source code for stoqlib.gui.dialogs.daterangedialog
# -*- coding: utf-8 -*-
# vi:si:et:sw=4:sts=4:ts=4
##
## Copyright (C) 2013 Async Open Source <http://www.async.com.br>
## All rights reserved
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU Lesser General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU Lesser General Public License for more details.
##
## You should have received a copy of the GNU Lesser General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., or visit: http://www.gnu.org/.
##
## Author(s): Stoq Team <stoq-devel@async.com.br>
##
import collections
from stoqlib.database.queryexecuter import DateQueryState
from stoqlib.gui.base.dialogs import BasicDialog
from stoqlib.gui.search.searchfilters import DateSearchFilter
from stoqlib.gui.search.searchoptions import Today, Yesterday, LastWeek, LastMonth
from stoqlib.lib.translation import stoqlib_gettext
_ = stoqlib_gettext
#: returned by :class:`DateRangeDialog` containing information about
#: the date range selected in it
date_range = collections.namedtuple('date_range', ['start', 'end'])
[docs]class DateRangeDialog(BasicDialog):
"""A simple dialog for selecting a date range
When confirmed, a :class:`date_range` object will be returned
containig the information about the date range selected
"""
title = _(u'Select a date range')
size = (-1, -1)
def __init__(self, title=None, header_text=None):
title = title or self.title
header_text = '<b>%s</b>' % header_text if header_text else ''
BasicDialog.__init__(self, title=title, header_text=header_text)
self._setup_widgets()
#
# BasicDialog
#
[docs] def confirm(self):
BasicDialog.confirm(self)
state = self.date_filter.get_state()
if isinstance(state, DateQueryState):
start, end = state.date, state.date
else:
start, end = state.start, state.end
self.retval = date_range(start=start, end=end)
#
# Private
#
def _setup_widgets(self):
self.date_filter = DateSearchFilter(_(u'Date:'))
# FIXME: add a remove_option method in DateSearchFilter.
self.date_filter.clear_options()
self.date_filter.add_custom_options()
for option in [Today, Yesterday, LastWeek, LastMonth]:
self.date_filter.add_option(option)
self.date_filter.select(position=0)
self.vbox.pack_start(self.date_filter, False, False)
self.date_filter.show_all()