servcomp WIP, get inlines working with drag-sortable
authorScott Baker <smbaker@gmail.com>
Fri, 7 Nov 2014 07:41:32 +0000 (23:41 -0800)
committerScott Baker <smbaker@gmail.com>
Fri, 7 Nov 2014 07:41:32 +0000 (23:41 -0800)
planetstack/servcomp/admin.py
planetstack/servcomp/models.py
planetstack/servcomp/static/js/menu-sort-2.js [new file with mode: 0644]

index 65a646b..dc26b1e 100644 (file)
@@ -12,6 +12,15 @@ from django.contrib.contenttypes import generic
 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"
@@ -29,14 +38,22 @@ class CompositionServiceAdmin(SingletonAdmin):
         ('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' )
index a215409..3c17ffd 100644 (file)
@@ -16,12 +16,16 @@ class Composition(PlCoreBase):
     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):
@@ -34,3 +38,6 @@ 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
+
diff --git a/planetstack/servcomp/static/js/menu-sort-2.js b/planetstack/servcomp/static/js/menu-sort-2.js
new file mode 100644 (file)
index 0000000..d7e3005
--- /dev/null
@@ -0,0 +1,21 @@
+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);
+});