2018-07-26 15:53:42 +02:00
|
|
|
from django.contrib import admin
|
2018-08-02 17:55:27 +02:00
|
|
|
from django import forms
|
|
|
|
|
2018-08-08 16:45:29 +02:00
|
|
|
from .models import Equipment, EquipmentDefault, EquipmentRevision, EquipmentCategory, EquipmentLost, EquipmentAttributeValue, EquipmentAttribute
|
2018-08-02 17:55:27 +02:00
|
|
|
from .fields import IdField, IdWidget
|
|
|
|
|
2018-08-08 16:02:23 +02:00
|
|
|
|
2018-08-02 17:55:27 +02:00
|
|
|
class IdForm(forms.ModelForm):
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
|
|
if 'min_value' in kwargs:
|
|
|
|
kwargs.pop('min_value')
|
2018-08-04 05:38:03 +02:00
|
|
|
if 'num_choices' in kwargs:
|
|
|
|
num_choices = kwargs.pop('num_choices')
|
2018-08-27 15:31:44 +02:00
|
|
|
else:
|
|
|
|
num_choices = None
|
2018-08-02 17:55:27 +02:00
|
|
|
super(IdForm, self).__init__(*args, **kwargs)
|
|
|
|
|
|
|
|
for field in self.instance._meta.fields:
|
|
|
|
if isinstance(field, IdField):
|
2018-08-04 05:38:03 +02:00
|
|
|
if num_choices is None:
|
|
|
|
choices = []
|
|
|
|
else:
|
|
|
|
choices = [(k, str(k)) for k in range(1, num_choices+1)]
|
|
|
|
self.fields[field.name].choices = choices
|
|
|
|
self.fields[field.name].widget = IdWidget(choices=self.fields[field.name].choices)
|
|
|
|
|
2018-08-08 16:02:23 +02:00
|
|
|
|
2018-08-04 05:38:03 +02:00
|
|
|
class IdFormset(forms.models.BaseInlineFormSet):
|
|
|
|
def get_form_kwargs(self, index):
|
|
|
|
kwargs = super().get_form_kwargs(index)
|
|
|
|
if self.instance:
|
|
|
|
kwargs["num_choices"] = self.instance.stock
|
|
|
|
return kwargs
|
|
|
|
|
|
|
|
|
|
|
|
class EquipmentRevisionExtraInline(admin.TabularInline):
|
|
|
|
model = EquipmentRevision
|
|
|
|
extra = 0
|
2018-08-06 17:06:38 +02:00
|
|
|
form = IdForm
|
|
|
|
formset = IdFormset
|
2018-08-07 15:58:38 +02:00
|
|
|
classes = ['collapse']
|
2018-07-26 15:53:42 +02:00
|
|
|
|
|
|
|
|
2018-08-07 19:08:20 +02:00
|
|
|
class EquipmentDefaultExtraInline(admin.TabularInline):
|
|
|
|
model = EquipmentDefault
|
2018-07-26 15:53:42 +02:00
|
|
|
extra = 0
|
2018-08-06 17:06:38 +02:00
|
|
|
form = IdForm
|
|
|
|
formset = IdFormset
|
2018-08-07 15:58:38 +02:00
|
|
|
classes = ['collapse']
|
2018-07-26 15:53:42 +02:00
|
|
|
|
2018-08-07 19:08:20 +02:00
|
|
|
|
|
|
|
class EquipmentLostExtraInline(admin.TabularInline):
|
|
|
|
model = EquipmentLost
|
|
|
|
extra = 0
|
|
|
|
form = IdForm
|
|
|
|
formset = IdFormset
|
|
|
|
classes = ['collapse']
|
|
|
|
|
|
|
|
|
2018-08-08 16:45:29 +02:00
|
|
|
class EquipmentAttributeValueInline(admin.TabularInline):
|
|
|
|
model = EquipmentAttributeValue
|
|
|
|
extra = 0
|
|
|
|
|
|
|
|
|
2018-08-08 16:02:23 +02:00
|
|
|
class CategoryAdmin(admin.ModelAdmin):
|
2018-08-09 17:52:28 +02:00
|
|
|
readonly_fields = ['full_name_p']
|
|
|
|
list_display = ['name', 'parent', "full_name_p"]
|
2018-08-08 16:02:23 +02:00
|
|
|
ordering = ['name', 'parent']
|
2018-08-09 16:14:28 +02:00
|
|
|
search_fields = ['name',]
|
2018-08-27 15:31:44 +02:00
|
|
|
autocomplete_fields = ['parent', ]
|
2018-07-26 15:53:42 +02:00
|
|
|
|
2018-08-07 19:08:20 +02:00
|
|
|
|
2018-08-08 16:45:29 +02:00
|
|
|
class EquipmentAttributeAdmin(admin.ModelAdmin):
|
|
|
|
list_display = ['name']
|
|
|
|
ordering = ['name']
|
2018-08-09 16:14:28 +02:00
|
|
|
search_fields = ['name',]
|
2018-08-08 16:45:29 +02:00
|
|
|
|
|
|
|
|
2018-07-26 15:53:42 +02:00
|
|
|
class EquipmentAdmin(admin.ModelAdmin):
|
2018-08-09 18:34:36 +02:00
|
|
|
save_as_continue = True
|
|
|
|
save_on_top = True
|
2018-08-27 15:31:44 +02:00
|
|
|
autocomplete_fields = ['category', ]
|
2018-08-09 17:52:28 +02:00
|
|
|
readonly_fields = ['full_category_p',
|
|
|
|
'added_at',
|
|
|
|
'modified_at',
|
|
|
|
'stock_aviable_p',
|
|
|
|
'ids_aviable_p',
|
|
|
|
'stock_lost_p',
|
|
|
|
'ids_lost_p',
|
|
|
|
]
|
2018-08-09 14:06:40 +02:00
|
|
|
list_display = ['name', 'stock', 'owner', 'category', 'modified_at']
|
2018-08-09 17:52:28 +02:00
|
|
|
fieldsets = (
|
|
|
|
('Général', {
|
|
|
|
'fields': ('name', 'owner', 'stock', )
|
|
|
|
}),
|
|
|
|
('Info stock',
|
|
|
|
{
|
|
|
|
'fields': (
|
|
|
|
'stock_aviable_p',
|
|
|
|
'ids_aviable_p',
|
|
|
|
'stock_lost_p',
|
|
|
|
'ids_lost_p',
|
|
|
|
),
|
|
|
|
}),
|
|
|
|
('Catégorie', {
|
|
|
|
'fields': ('category', 'full_category_p'),
|
|
|
|
}),
|
|
|
|
('Description', {
|
|
|
|
'fields': ('description', 'added_at', 'modified_at',),
|
|
|
|
}),
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-08-08 16:02:23 +02:00
|
|
|
ordering = ['name', 'owner', 'category']
|
2018-08-08 16:45:29 +02:00
|
|
|
inlines = [EquipmentAttributeValueInline,
|
|
|
|
EquipmentDefaultExtraInline,
|
2018-08-07 19:08:20 +02:00
|
|
|
EquipmentLostExtraInline,
|
|
|
|
EquipmentRevisionExtraInline]
|
2018-08-09 16:14:28 +02:00
|
|
|
search_fields = ['name', 'description',]
|
2018-08-09 18:34:36 +02:00
|
|
|
list_filter = ['owner', 'category' ]
|
2018-07-26 15:53:42 +02:00
|
|
|
|
|
|
|
|
|
|
|
admin.site.register(Equipment, EquipmentAdmin)
|
2018-08-27 14:03:06 +02:00
|
|
|
admin.site.register(EquipmentCategory, CategoryAdmin)
|
|
|
|
admin.site.register(EquipmentAttribute, EquipmentAttributeAdmin)
|