Mercurial > hg > savane-forge
changeset 331:e29de6a47cc1
Select box choices display
author | Sylvain Beucler <beuc@beuc.net> |
---|---|
date | Sun, 22 Aug 2010 13:50:15 +0200 |
parents | 965cc693342b |
children | 7234fcf49cc0 |
files | migrate_old_savane.sql savane/tracker/models.py templates/tracker/item_form.html |
diffstat | 3 files changed, 51 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/migrate_old_savane.sql +++ b/migrate_old_savane.sql @@ -541,7 +541,10 @@ -- twice or something. -- Give priority to the last one. -- Need to create a real table - a temporary one has issues with being "reopened" in joins -DROP TABLE IF EXISTS temp_bugs_field_usage; +-- The following produces a warning that and MySQL employees can't +-- understand that it's a problem - commenting: +-- (http://bugs.mysql.com/bug.php?id=2839) +-- DROP TABLE IF EXISTS temp_bugs_field_usage; CREATE TABLE temp_bugs_field_usage AS SELECT * FROM savane_old.bugs_field_usage; ALTER TABLE temp_bugs_field_usage ADD (id INT auto_increment PRIMARY KEY); DELETE FROM temp_bugs_field_usage @@ -558,11 +561,11 @@ -- tracker.defs. TRUNCATE tracker_fieldoverlay; INSERT INTO tracker_fieldoverlay - (group_id, field_name, use_it, show_on_add_anonymous, show_on_add_connected, show_on_add_members, rank, + (tracker_id, group_id, field_name, use_it, show_on_add_anonymous, show_on_add_connected, show_on_add_members, rank, label, description, display_size, empty_ok, keep_history, transition_default_auth) SELECT - group_id, field_name, use_it, IF(show_on_add<2,0,1), IF(show_on_add%2=0,0,1), show_on_add_members, place, + 'bugs', group_id, field_name, use_it, IF(show_on_add<2,0,1), IF(show_on_add%2=0,0,1), show_on_add_members, place, custom_label, custom_description, custom_display_size, custom_empty_ok, IFNULL(custom_keep_history, 0), transition_default_auth FROM temp_bugs_field_usage JOIN savane_old.bugs_field @@ -587,10 +590,10 @@ -- field_id <- bug_field_id TRUNCATE tracker_fieldvalue; INSERT INTO tracker_fieldvalue - (group_id, field_name, value_id, `value`, description, - order_id, status, email_ad, send_all_flag) + (tracker_id, group_id, field_name, value_id, `value`, description, + rank, status, email_ad, send_all_flag) SELECT - group_id, field_name, value_id, `value`, savane_old.bugs_field_value.description, + 'bugs', group_id, field_name, value_id, `value`, savane_old.bugs_field_value.description, order_id, status, email_ad, send_all_flag FROM savane_old.bugs_field_value JOIN savane_old.bugs_field USING (bug_field_id);
--- a/savane/tracker/models.py +++ b/savane/tracker/models.py @@ -162,7 +162,8 @@ TRANSITION_DEFAULT_AUTH_CHOICES = (('', _('undefined')), ('A', _('allowed')), ('F', _('forbidden')),) - group = models.ForeignKey(auth_models.Group) + tracker = models.ForeignKey(Tracker) + group = models.ForeignKey(auth_models.Group, blank=True, null=True, help_text=_("NULL == default")) field_name = models.CharField(max_length=32) # If not Field.required: @@ -229,7 +230,8 @@ STATUS_CHOICES = (('A', _('active')), ('H', _('hidden')), # mask previously-active or system fields ('P', _('permanent')),) # status cannot be modified, always visible - group = models.ForeignKey(auth_models.Group) + tracker = models.ForeignKey(Tracker) + group = models.ForeignKey(auth_models.Group, blank=True, null=True, help_text=_("NULL == default")) field_name = models.CharField(max_length=32) value_id = models.IntegerField(db_index=True) # group_specific value identifier # It's not a duplicate of 'id', as it's the value referenced by @@ -237,7 +239,7 @@ # customized per-project. value = models.CharField(max_length=255) # label description = models.TextField() - order_id = models.IntegerField() # new:rank + rank = models.IntegerField() status = models.CharField(max_length=1, choices=STATUS_CHOICES, default='A', db_index=True) # Field category: specific (bad!) field for e-mail notifications @@ -245,6 +247,31 @@ help_text=_("comma-separated list of e-mail addresses to notify when an item is created or modified in this category")) send_all_flag = models.BooleanField(_("send on all updates"), default=True) + def __unicode__(self): + #return "%s.%s: %s (%d)" % (self.tracker_id, self.field_name, self.value, self.value_id) + group_name = '<default>' + if self.group_id != 0: + group_name = self.group.name + return "%s.%s: %s (%d)" % (group_name, self.field_name, self.value, self.value_id) + +def field_get_values(tracker_id, group, field_name): + """ + Return all possible values for this select box field + """ + if field_name == 'assigned_to': + # Hard-coded processing: it's a list of project members + default_values = [{'value_id' : -1, 'value' : _("None")}] + for user in group.user_set.order_by('username'): + default_values.append({'value_id' : user.pk, 'value' : user.username}) + else: + #tracker_id=tracker_id, + default_values = list(FieldValue.objects \ + .filter(group=None, field_name=field_name).exclude(status='H') \ + .values('value_id', 'value', 'rank')) + # value overlays + default_values.sort(key=lambda x: x['rank']) + return default_values + # Auto_increment counters # We could make this more generic, but we'd have to implement # per-tracker atomic ID increment manually. @@ -430,10 +457,13 @@ overlay values (cf. FieldOverlay model definition). """ fields = deepcopy(default_fields[self.tracker_id]) - overlays = FieldOverlay.objects.filter(group=self.group) + overlays = FieldOverlay.objects.filter(tracker=self.tracker_id, group=self.group) for overlay in overlays: name = overlay.field_name overlay.apply_on[fields[name]] + for name in fields: + if fields[name]['display_type'] == 'SB': + fields[name]['values'] = field_get_values(self.tracker_id, self.group, name) return fields def get_form_fields(self, user=None): @@ -477,7 +507,13 @@ html += '</select>\n' html += u'<input type="text" length="4" maxlength="4" name="%s_yearfd" value="TODO">' % (name) elif field['display_type'] == 'SB': - html += u'<select name="%s"><option value="-1">TODO</option></select>' % (name) + html += u'<select name="%s">\n' % name + for option in field['values']: + selected = '' + if option['value_id'] == value: + selected = ' selected="selected"' + html += u'<option value="%d"%s>%s</option>\n' % (option['value_id'], selected, ugettext(option['value'])) + html += '</select>' elif field['display_type'] == 'TA': html += u'<textarea name="%s">%s</textarea>' % (name, value) elif field['display_type'] == 'TF':
--- a/templates/tracker/item_form.html +++ b/templates/tracker/item_form.html @@ -41,6 +41,7 @@ <td>{{ object.date }}</td> <td colspan="2" class="button"><input type="submit" value="{% trans "Submit changes and return to this item" %}" /></td> </tr> +<tr><td colspan="4" style="height: 15px;"></td></tr> {{object.get_form}} </table>