from suit.widgets import LinkedSelect
from core.admin import SingletonAdmin,SliceInline,ServiceAttrAsTabInline, ReadOnlyAwareAdmin, PlStackTabularInline
+class ServiceInline(PlStackTabularInline):
+ model = CompositionServiceThrough
+ verbose_name = "Service"
+ verbose_name_plural = "Services"
+ extra = 0
+ #suit_classes = 'suit-tab suit-tab-general'
+ fields = ('backend_status_icon', 'service', 'order')
+ readonly_fields = ('backend_status_icon',)
+
class CompositionServiceAdmin(SingletonAdmin):
model = CompositionService
verbose_name = "Composition Service"
('serviceattrs','Additional Attributes'),
)
+class CompositionForm(forms.ModelForm):
+ model = Composition
+ class Media:
+ js = ('/static/js/menu-sort-2.js',)
+
class CompositionAdmin(ReadOnlyAwareAdmin):
list_display = ('backend_status_icon', 'name' )
list_display_links = ('backend_status_icon', 'name' )
+ form = CompositionForm
fields = ('backend_status_text', 'name')
readonly_fields = ('backend_status_text', )
user_readonly_fields = ('name',)
+ inlines = [ServiceInline]
+
class EndUserAdmin(ReadOnlyAwareAdmin):
list_display = ('backend_status_icon', 'email', 'macAddress', 'composition' )
list_display_links = ('backend_status_icon', 'email' )
name = models.CharField(max_length=255);
services = models.ManyToManyField(Service, through='CompositionServiceThrough', blank=True);
+ def __unicode__(self):
+ return self.name
+
class CompositionServiceThrough(PlCoreBase):
class Meta:
app_label = "servcomp"
+ ordering = ("order", )
- Composition = models.ForeignKey(Composition)
- Service = models.ForeignKey(Service, related_name="compositions")
+ composition = models.ForeignKey(Composition)
+ service = models.ForeignKey(Service, related_name="compositions")
order = models.IntegerField(default=0)
class EndUser(PlCoreBase):
macAddress = models.CharField(max_length=80)
composition = models.ForeignKey(Composition, related_name="endUsers", blank=True, null=True)
+ def __unicode__(self):
+ return self.email
+
--- /dev/null
+jQuery(function($) {
+ $("div.inline-group").sortable({
+ axis: 'y',
+ placeholder: 'ui-state-highlight',
+ forcePlaceholderSize: 'true',
+ items: '.row1, .row2',
+ update: update
+ });
+ $("div.inline-group").disableSelection();
+});
+function update() {
+ $('.row1, .row2').each(function(i) {
+ $(this).find('input[id$=order]').val(i+1);
+ });
+}
+jQuery(document).ready(function($){
+// $(this).find('input[id$=order]').parent('div').parent('div').hide().parent().parent().css('cursor','move');
+ $(this).find('input[id$=order]').parent('td').hide().parent('tr').parent('tbody').parent('table').find("th:contains('Order')").hide();
+ $(this).find('input[id$=order]').parent('td').hide().parent('tr').parent('tbody').parent('table').css('cursor','move');
+ $('.add-row a').click(update);
+});