def format_datetime():
     if not value:
         return ''
     format_ = date_format() + ' ' + HM_FORMAT
     if (not isinstance(value, datetime.datetime)
             or value.time() == datetime.time.min):
         format_ = date_format()
     return datetime_strftime(value, format_)
 def updateDatas(self, group):
     self.datas = {}
     self.labels = {}
     self.ids = {}
     self.group = group
     minx = None
     maxx = None
     for model in group:
         x = model[self.xfield['name']].get(model)
         if not minx:
             minx = x
         if not maxx:
             maxx = x
         minx = min(minx, x)
         maxx = max(maxx, x)
         self.labels[x] = model[self.xfield['name']].get_client(model)
         self.ids.setdefault(x, [])
         self.ids[x].append(model.id)
         self.datas.setdefault(x, {})
         for yfield in self.yfields:
             key = yfield.get('key', yfield['name'])
             self.datas[x].setdefault(key, 0.0)
             if yfield.get('domain'):
                 context = rpc.CONTEXT.copy()
                 context['context'] = context.copy()
                 context['_user'] = rpc._USER
                 for field in model.group.fields:
                     context[field] = model[field].get(model,
                         check_load=False)
                 if not PYSONDecoder(context).decode(yfield['domain']):
                     continue
             if yfield['name'] == '#':
                 self.datas[x][key] += 1
             else:
                 self.datas[x][key] += \
                         float(model[yfield['name']].get(model) or 0)
     if isinstance(minx, datetime.datetime):
         date = minx
         while date <= maxx:
             self.labels[date] = datetime_strftime(date, date_format())
             self.datas.setdefault(date, {})
             for yfield in self.yfields:
                 self.datas[date].setdefault(
                         yfield.get('key', yfield['name']), 0.0)
             date += relativedelta(days=1)
     elif isinstance(minx, datetime.date):
         date = minx
         while date <= maxx:
             self.labels[date] = datetime_strftime(date, date_format())
             self.datas.setdefault(date, {})
             for yfield in self.yfields:
                 self.datas[date].setdefault(
                         yfield.get('key', yfield['name']), 0.0)
             date += relativedelta(days=1)
示例#3
0
 def format_datetime():
     if not value:
         return ''
     format_ = date_format() + ' ' + time_format(field)
     if (not isinstance(value, datetime.datetime)
             or value.time() == datetime.time.min):
         format_ = date_format()
         time = value
     else:
         time = timezoned_date(value)
     return datetime_strftime(time, format_)
 def convert_datetime():
     try:
         return untimezoned_date(datetime.datetime(*time.strptime(value,
                     date_format() + ' ' + HM_FORMAT)[:6]))
     except ValueError:
         try:
             return untimezoned_date(datetime.datetime(*time.strptime(value,
                         date_format())[:6]))
         except ValueError:
             return
     except TypeError:
         return
示例#5
0
 def convert_datetime():
     try:
         return untimezoned_date(
             datetime.datetime(
                 *time.strptime(value,
                                date_format() + ' ' +
                                time_format(field))[:6]))
     except ValueError:
         try:
             return datetime.datetime(
                 *time.strptime(value, date_format())[:6])
         except ValueError:
             return
     except TypeError:
         return
示例#6
0
    def sig_logs(self, widget=None):
        obj_id = self.id_get()
        if obj_id < 0 or obj_id is False:
            self.message_info(_('You have to select one record!'))
            return False

        fields = [
            ('id', _('ID:')),
            ('create_uid.rec_name', _('Creation User:'******'create_date', _('Creation Date:')),
            ('write_uid.rec_name', _('Latest Modification by:')),
            ('write_date', _('Latest Modification Date:')),
        ]

        try:
            res = RPCExecute('model', self.model, 'read', [obj_id],
                [x[0] for x in fields], context=self.context)
        except RPCException:
            return
        message_str = ''
        for line in res:
            for (key, val) in fields:
                value = str(line.get(key, False) or '/')
                if line.get(key, False) \
                        and key in ('create_date', 'write_date'):
                    display_format = date_format() + ' %H:%M:%S'
                    date = timezoned_date(line[key])
                    value = common.datetime_strftime(date, display_format)
                message_str += val + ' ' + value + '\n'
        message_str += _('Model:') + ' ' + self.model
        message(message_str)
        return True
    def __init__(self, field_name, model_name, attrs=None, format=None):
        super(Calendar, self).__init__(field_name, model_name, attrs=attrs)

        if format is None:
            format = date_format()
        self.widget = date_widget.ComplexEntry(format, spacing=0)
        self.entry = self.widget.widget
        self.entry.set_property('activates_default', True)
        self.entry.connect('key_press_event', self.sig_key_press)
        self.entry.connect('activate', self.sig_activate)
        self.entry.connect('focus-in-event', lambda x, y: self._focus_in())
        self.entry.connect('focus-out-event', lambda x, y: self._focus_out())

        self.but_open = gtk.Button()
        img_find = gtk.Image()
        img_find.set_from_stock('tryton-find', gtk.ICON_SIZE_SMALL_TOOLBAR)
        self.but_open.set_image(img_find)
        self.but_open.set_relief(gtk.RELIEF_NONE)
        self.but_open.connect('clicked', self.cal_open)
        self.but_open.set_alignment(0.5, 0.5)
        self.widget.pack_start(self.but_open, expand=False, fill=False)
        self.widget.set_focus_chain([self.entry])

        tooltips = Tooltips()
        tooltips.set_tip(self.but_open, _('Open the calendar'))
        tooltips.enable()
示例#8
0
    def sig_logs(self, widget=None):
        obj_id = self.id_get()
        if obj_id < 0 or obj_id is False:
            self.message_info(_('You have to select one record!'))
            return False

        fields = [
            ('id', _('ID:')),
            ('create_uid.rec_name', _('Creation User:'******'create_date', _('Creation Date:')),
            ('write_uid.rec_name', _('Latest Modification by:')),
            ('write_date', _('Latest Modification Date:')),
        ]

        try:
            res = RPCExecute('model', self.model, 'read', [obj_id],
                [x[0] for x in fields], context=self.context)
        except RPCException:
            return
        message_str = ''
        for line in res:
            for (key, val) in fields:
                value = str(line.get(key, False) or '/')
                if line.get(key, False) \
                        and key in ('create_date', 'write_date'):
                    display_format = date_format() + ' %H:%M:%S'
                    date = timezoned_date(line[key])
                    value = common.datetime_strftime(date, display_format)
                message_str += val + ' ' + value + '\n'
        message_str += _('Model:') + ' ' + self.model
        message(message_str)
        return True
示例#9
0
 def get_client(self, record):
     value = super(DateTimeField, self).get_client(record)
     if value:
         value = common.timezoned_date(value)
         return datetime_strftime(value, date_format() + ' ' +
             self.time_format(record))
     return ''
示例#10
0
 def __init__(self, field_name, model_name, treeview, attrs=None,
         renderer=None):
     if renderer is None:
         renderer = partial(CellRendererDate, date_format())
     super(Date, self).__init__(field_name, model_name, treeview,
         attrs=attrs, renderer=renderer)
     self.renderer.connect('editing-started', self.editing_started)
示例#11
0
 def get_client(self, record):
     value = super(DateTimeField, self).get_client(record)
     if value:
         value = common.timezoned_date(value)
         return datetime_strftime(
             value,
             date_format() + ' ' + self.time_format(record))
     return ''
示例#12
0
 def set_client(self, record, value, force_change=False):
     if not isinstance(value, datetime.date):
         try:
             value = datetime.date(*time.strptime(value,
                     date_format())[:3])
         except ValueError:
             value = self._default
     super(DateField, self).set_client(record, value,
         force_change=force_change)
示例#13
0
 def set_client(self, record, value, force_change=False):
     if not isinstance(value, datetime.datetime):
         try:
             value = datetime.datetime(*time.strptime(value,
                     date_format() + ' ' + self.time_format(record))[:6])
             value = common.untimezoned_date(value)
         except ValueError:
             value = self._default
     super(DateTimeField, self).set_client(record, value,
         force_change=force_change)
示例#14
0
 def set_client(self, record, value, force_change=False):
     if isinstance(value, basestring):
         try:
             value = datetime.date(*time.strptime(value, date_format())[:3])
         except ValueError:
             value = self._default
     elif isinstance(value, datetime.datetime):
         assert (value.time() == datetime.time())
         value = value.date()
     super(DateField, self).set_client(record,
                                       value,
                                       force_change=force_change)
示例#15
0
 def set_client(self, record, value, force_change=False):
     if isinstance(value, basestring):
         try:
             value = datetime.datetime(*time.strptime(
                 value,
                 date_format() + ' ' + self.time_format(record))[:6])
         except ValueError:
             value = self._default
     if value:
         value = common.untimezoned_date(value)
     super(DateTimeField, self).set_client(record,
                                           value,
                                           force_change=force_change)
示例#16
0
 def get_client(self, record):
     value = super(DateField, self).get_client(record)
     if value:
         return datetime_strftime(value, date_format())
     return ''
示例#17
0
 def get_format(self, record, field):
     return date_format() + ' ' + field.time_format(record)
示例#18
0
 def get_format(self, record, field):
     return date_format()
示例#19
0
 def get_format(self):
     return date_format()
 def __init__(self, field_name, model_name, attrs=None):
     super(DateTime, self).__init__(field_name, model_name, attrs=attrs,
         format=date_format() + ' ' + HM_FORMAT)
示例#21
0
 def convert_date():
     try:
         return datetime.date(*time.strptime(value, date_format())[:3])
     except (ValueError, TypeError):
         return
示例#22
0
 def format_date():
     if not value:
         return ''
     return datetime_strftime(value, date_format())
 def convert_date():
     try:
         return datetime.date(*time.strptime(value, date_format())[:3])
     except (ValueError, TypeError):
         return
示例#24
0
 def updateDatas(self, group):
     self.datas = {}
     self.labels = {}
     self.ids = {}
     self.group = group
     minx = None
     maxx = None
     for model in group:
         x = model[self.xfield['name']].get(model)
         if not minx:
             minx = x
         if not maxx:
             maxx = x
         if minx is None and maxx is None:
             if isinstance(x, datetime.datetime):
                 minx, maxx = datetime.datetime.min, datetime.datetime.max
             elif isinstance(x, datetime.date):
                 minx, maxx = datetime.date.min, datetime.date.max
             elif isinstance(x, datetime.timedelta):
                 minx, maxx = datetime.timedelta.min, datetime.timedelta.max
         try:
             minx = min(minx, x)
             maxx = max(maxx, x)
         except TypeError:
             continue
         self.labels[x] = model[self.xfield['name']].get_client(model)
         self.ids.setdefault(x, [])
         self.ids[x].append(model.id)
         self.datas.setdefault(x, {})
         for yfield in self.yfields:
             key = yfield.get('key', yfield['name'])
             self.datas[x].setdefault(key, 0.0)
             if yfield.get('domain'):
                 context = rpc.CONTEXT.copy()
                 context['context'] = context.copy()
                 context['_user'] = rpc._USER
                 for field in model.group.fields:
                     context[field] = model[field].get(model)
                 if not PYSONDecoder(context).decode(yfield['domain']):
                     continue
             if yfield['name'] == '#':
                 self.datas[x][key] += 1
             else:
                 self.datas[x][key] += \
                     float(model[yfield['name']].get(model) or 0)
     if isinstance(minx, datetime.datetime):
         date = minx
         while date <= maxx:
             self.labels[date] = datetime_strftime(date, date_format())
             self.datas.setdefault(date, {})
             for yfield in self.yfields:
                 self.datas[date].setdefault(
                     yfield.get('key', yfield['name']), 0.0)
             date += relativedelta(days=1)
     elif isinstance(minx, datetime.date):
         date = minx
         while date <= maxx:
             self.labels[date] = datetime_strftime(date, date_format())
             self.datas.setdefault(date, {})
             for yfield in self.yfields:
                 self.datas[date].setdefault(
                     yfield.get('key', yfield['name']), 0.0)
             date += relativedelta(days=1)
    def search_box(self, button):
        def key_press(window, event):
            if event.keyval == gtk.keysyms.Escape:
                button.set_active(False)
                window.hide()

        def search():
            button.set_active(False)
            self.search_window.hide()
            text = ''
            for label, entry in self.search_table.fields:
                if isinstance(entry, gtk.ComboBox):
                    value = entry.get_active_text()
                else:
                    value = entry.get_text()
                if value:
                    text += label + ' ' + quote(value) + ' '
            self.set_text(text)
            self.do_search()

        def date_activate(entry):
            entry._focus_out(entry, None)
            search()

        if not self.search_window:
            self.search_window = gtk.Window()
            self.search_window.set_transient_for(button.get_toplevel())
            self.search_window.set_type_hint(
                gtk.gdk.WINDOW_TYPE_HINT_POPUP_MENU)
            self.search_window.set_destroy_with_parent(True)
            self.search_window.set_title('Tryton')
            self.search_window.set_icon(TRYTON_ICON)
            self.search_window.set_decorated(False)
            if hasattr(self.search_window, 'set_deletable'):
                self.search_window.set_deletable(False)
            self.search_window.connect('key-press-event', key_press)
            vbox = gtk.VBox()
            fields = [f for f in self.screen.domain_parser.fields.itervalues()
                if f.get('searchable', True)]
            fields.sort(key=operator.itemgetter('string'))
            self.search_table = gtk.Table(rows=len(fields), columns=2)
            self.search_table.set_border_width(5)
            self.search_table.set_row_spacings(2)
            self.search_table.set_col_spacings(2)

            # Fill table with fields
            self.search_table.fields = []
            for i, field in enumerate(fields):
                label = gtk.Label(field['string'])
                label.set_alignment(0.0, 0.5)
                self.search_table.attach(label, 0, 1, i, i + 1)
                if field['type'] in ('boolean', 'selection'):
                    if hasattr(gtk, 'ComboBoxText'):
                        entry = gtk.ComboBoxText()
                    else:
                        entry = gtk.combo_box_new_text()
                    entry.append_text('')
                    if field['type'] == 'boolean':
                        selections = (_('True'), _('False'))
                    else:
                        selections = tuple(x[1] for x in field['selection'])
                    for selection in selections:
                        entry.append_text(selection)
                    widget = entry
                elif field['type'] in ('date', 'datetime', 'time'):
                    if field['type'] == 'date':
                        format_ = date_format()
                    elif field['type'] == 'datetime':
                        format_ = date_format() + ' ' + common.HM_FORMAT
                    elif field['type'] == 'time':
                        format_ = common.HM_FORMAT
                    widget = common.date_widget.ComplexEntry(format_,
                        spacing=0)
                    entry = widget.widget
                    entry.connect('activate', date_activate)
                else:
                    entry = gtk.Entry()
                    widget = entry
                    entry.connect('activate', lambda *a: search())
                self.search_table.attach(widget, 1, 2, i, i + 1)
                self.search_table.fields.append((field['string'] + ':', entry))

            scrolled = gtk.ScrolledWindow()
            scrolled.add_with_viewport(self.search_table)
            scrolled.set_shadow_type(gtk.SHADOW_NONE)
            vbox.pack_start(scrolled, expand=True, fill=True)
            find_button = gtk.Button(_('Find'))
            find_button.connect('clicked', lambda *a: search())
            find_img = gtk.Image()
            find_img.set_from_stock('tryton-find', gtk.ICON_SIZE_SMALL_TOOLBAR)
            find_button.set_image(find_img)
            hbuttonbox = gtk.HButtonBox()
            hbuttonbox.set_spacing(5)
            hbuttonbox.pack_start(find_button)
            hbuttonbox.set_layout(gtk.BUTTONBOX_END)
            vbox.pack_start(hbuttonbox, expand=False, fill=True)
            self.search_window.add(vbox)
            vbox.show_all()

            # Disable scrolling:
            scrolled.set_policy(gtk.POLICY_NEVER, gtk.POLICY_NEVER)
            # See what changed:
            new_size = self.search_window.size_request()
            # Reenable scrolling:
            scrolled.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
            self.search_window.set_default_size(*new_size)

        parent = button.get_toplevel()
        button_x, button_y = button.translate_coordinates(parent,
            *parent.window.get_origin())
        button_allocation = button.get_allocation()

        # Resize the window to not be out of the screen
        width, height = self.search_window.get_default_size()
        screen = self.search_window.get_screen()
        screen_width = screen.get_width()
        screen_height = screen.get_height()
        delta_width = screen_width - (button_x + width)
        delta_height = screen_height - (button_y + button_allocation.height
            + height)
        if delta_width < 0:
            width += delta_width
        if delta_height < 0:
            height += delta_height
        self.search_window.resize(width, height)

        # Move the window under the button
        self.search_window.move(button_x,
            button_y + button_allocation.height)

        from tryton.gui.main import Main
        page = Main.get_main().get_page()
        if button.get_active():
            if self.search_window not in page.dialogs:
                page.dialogs.append(self.search_window)
            self.search_window.show()
        else:
            self.search_window.hide()
            if self.search_window in page.dialogs:
                page.dialogs.remove(self.search_window)
 def __init__(self, field_name, model_name, treeview, attrs=None):
     super(Datetime, self).__init__(field_name, model_name, treeview,
         attrs=attrs)
     self.renderer.format = date_format() + ' ' + HM_FORMAT
示例#27
0
 def get_format(self):
     return date_format()
示例#28
0
 def get_format(self):
     return date_format() + ' %H:%M:%S'  # got to find a way
示例#29
0
 def get_client(self, record):
     value = super(DateField, self).get_client(record)
     if value:
         return datetime_strftime(value, date_format())
     return ''
示例#30
0
 def setter(self, column, cell, store, iter):
     super(Datetime, self).setter(column, cell, store, iter)
     record = store.get_value(iter, 0)
     field = record[self.field_name]
     time_format = field.time_format(record)
     self.renderer.format = date_format() + ' ' + time_format
示例#31
0
 def get_format(self):
     return date_format() + ' %H:%M:%S'  # got to find a way
 def __init__(self, field_name, model_name, treeview, attrs=None):
     super(Date, self).__init__(field_name, model_name, treeview,
         attrs=attrs)
     self.renderer = CellRendererDate(date_format())
     self.renderer.connect('editing-started', self.editing_started)