Allow exporting levels with costs and counts
This commit is contained in:
parent
0522bac302
commit
13c867e77f
2 changed files with 37 additions and 7 deletions
|
@ -1,5 +1,5 @@
|
||||||
from django.contrib import admin, messages
|
from django.contrib import admin, messages
|
||||||
from import_export import resources
|
from import_export import resources, fields
|
||||||
from import_export.admin import ExportMixin
|
from import_export.admin import ExportMixin
|
||||||
|
|
||||||
from manuels.models import Teacher, Book, Level, Editor, SuppliesRequirement, CommonSupply
|
from manuels.models import Teacher, Book, Level, Editor, SuppliesRequirement, CommonSupply
|
||||||
|
@ -26,14 +26,36 @@ class TeacherAdmin(ExportMixin, admin.ModelAdmin):
|
||||||
actions = [send_link]
|
actions = [send_link]
|
||||||
|
|
||||||
|
|
||||||
class TeacherResource(resources.ModelResource):
|
class LevelResource(resources.ModelResource):
|
||||||
|
non_acquired_book_count = fields.Field(attribute='non_acquired_book_count')
|
||||||
|
non_acquired_book_price = fields.Field(attribute='non_acquired_book_price')
|
||||||
|
non_acquired_consumable_count = fields.Field(attribute='non_acquired_consumable_count')
|
||||||
|
non_acquired_consumable_price = fields.Field(attribute='non_acquired_consumable_price')
|
||||||
|
non_acquired_total_price = fields.Field(attribute='non_acquired_total_price')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Teacher
|
model = Level
|
||||||
fields = ('first_name', 'last_name', 'email', 'phone_number')
|
fields = (
|
||||||
|
'name',
|
||||||
|
'non_acquired_book_count',
|
||||||
|
'non_acquired_book_price',
|
||||||
|
'non_acquired_consumable_count',
|
||||||
|
'non_acquired_consumable_price',
|
||||||
|
'non_acquired_total_price',
|
||||||
|
)
|
||||||
|
export_order = (
|
||||||
|
'name',
|
||||||
|
'non_acquired_book_count',
|
||||||
|
'non_acquired_book_price',
|
||||||
|
'non_acquired_consumable_count',
|
||||||
|
'non_acquired_consumable_price',
|
||||||
|
'non_acquired_total_price',
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@admin.register(Level)
|
@admin.register(Level)
|
||||||
class LevelAdmin(admin.ModelAdmin):
|
class LevelAdmin(ExportMixin, admin.ModelAdmin):
|
||||||
|
resource_class = LevelResource
|
||||||
list_display = [
|
list_display = [
|
||||||
'name',
|
'name',
|
||||||
'order',
|
'order',
|
||||||
|
@ -47,7 +69,7 @@ class LevelAdmin(admin.ModelAdmin):
|
||||||
list_display_links = ['name']
|
list_display_links = ['name']
|
||||||
|
|
||||||
def non_acquired_book_count(self, obj: Level):
|
def non_acquired_book_count(self, obj: Level):
|
||||||
return obj.book_set.filter(previously_acquired=False, consumable=False).count()
|
return obj.non_acquired_book_count
|
||||||
non_acquired_book_count.short_description = 'Nombre de livres à acheter (hors consommables)'
|
non_acquired_book_count.short_description = 'Nombre de livres à acheter (hors consommables)'
|
||||||
|
|
||||||
def non_acquired_book_price(self, obj: Level):
|
def non_acquired_book_price(self, obj: Level):
|
||||||
|
@ -55,7 +77,7 @@ class LevelAdmin(admin.ModelAdmin):
|
||||||
non_acquired_book_price.short_description = 'Coût des livres à acheter (hors consommables)'
|
non_acquired_book_price.short_description = 'Coût des livres à acheter (hors consommables)'
|
||||||
|
|
||||||
def non_acquired_consumable_count(self, obj: Level):
|
def non_acquired_consumable_count(self, obj: Level):
|
||||||
return obj.book_set.filter(consumable=True, previously_acquired=False).count()
|
return obj.non_acquired_consumable_count
|
||||||
non_acquired_consumable_count.short_description = 'Nombre de consommables à acheter'
|
non_acquired_consumable_count.short_description = 'Nombre de consommables à acheter'
|
||||||
|
|
||||||
def non_acquired_consumable_price(self, obj: Level):
|
def non_acquired_consumable_price(self, obj: Level):
|
||||||
|
|
|
@ -116,6 +116,10 @@ class Level(BaseModel):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
@property
|
||||||
|
def non_acquired_consumable_count(self):
|
||||||
|
return self.book_set.filter(consumable=True, previously_acquired=False).count()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def non_acquired_consumable_price(self):
|
def non_acquired_consumable_price(self):
|
||||||
price = self.book_set.filter(consumable=True, previously_acquired=False).aggregate(Sum('price')).get('price__sum', 0)
|
price = self.book_set.filter(consumable=True, previously_acquired=False).aggregate(Sum('price')).get('price__sum', 0)
|
||||||
|
@ -123,6 +127,10 @@ class Level(BaseModel):
|
||||||
return 0
|
return 0
|
||||||
return price
|
return price
|
||||||
|
|
||||||
|
@property
|
||||||
|
def non_acquired_book_count(self):
|
||||||
|
return self.book_set.filter(consumable=False, previously_acquired=False).count()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def non_acquired_book_price(self):
|
def non_acquired_book_price(self):
|
||||||
price = self.book_set.filter(consumable=False, previously_acquired=False).aggregate(Sum('price')).get('price__sum', 0)
|
price = self.book_set.filter(consumable=False, previously_acquired=False).aggregate(Sum('price')).get('price__sum', 0)
|
||||||
|
|
Loading…
Reference in a new issue