from django.contrib import admin from django.utils import timezone from .models import ( Bareme, Entreprise, Client, Facture, LigneFacture, Depense, Paiement, ) @admin.register(Bareme) class BaremeAdmin(admin.ModelAdmin): list_display = ("annee", "activite", "taux_urssaf", "abattement_fiscal", "taux_vl", "seuil_ca", "seuil_tva_base") list_filter = ("annee", "activite") @admin.register(Entreprise) class EntrepriseAdmin(admin.ModelAdmin): list_display = ("nom", "activite", "franchise_tva", "versement_liberatoire", "num_tva_intracom", "email") list_filter = ("activite", "franchise_tva", "versement_liberatoire") search_fields = ("nom", "siret", "num_tva_intracom") @admin.register(Client) class ClientAdmin(admin.ModelAdmin): list_display = ("nom", "entreprise", "email", "siret") list_filter = ("entreprise",) search_fields = ("nom", "email", "siret") class LigneFactureInline(admin.TabularInline): model = LigneFacture extra = 1 @admin.action(description="Marquer comme encaissée (aujourd'hui)") def marquer_encaissee(modeladmin, request, queryset): queryset.update(statut="encaissee", date_encaissement=timezone.now().date()) @admin.register(Facture) class FactureAdmin(admin.ModelAdmin): list_display = ("numero", "entreprise", "client", "date_emission", "date_encaissement", "statut", "montant_ht", "montant_tva", "montant_ttc") list_filter = ("entreprise", "statut", "activite", "date_emission") search_fields = ("numero", "client__nom") date_hierarchy = "date_emission" inlines = [LigneFactureInline] actions = [marquer_encaissee] readonly_fields = ("montant_ht", "montant_tva", "montant_ttc") def save_related(self, request, form, formsets, change): super().save_related(request, form, formsets, change) form.instance.recompute_totaux() class DepenseInline(admin.TabularInline): model = Depense extra = 0 fields = ("date", "libelle", "activite", "regime_tva", "taux_tva", "montant_ttc", "montant_tva") @admin.register(Paiement) class PaiementAdmin(admin.ModelAdmin): list_display = ("date", "entreprise", "libelle", "sens", "montant_total", "reparti", "reste", "equilibre") list_filter = ("entreprise", "sens", "date") search_fields = ("libelle",) date_hierarchy = "date" inlines = [DepenseInline] @admin.display(description="Réparti") def reparti(self, obj): return obj.reparti @admin.display(description="Reste") def reste(self, obj): return obj.reste @admin.display(boolean=True, description="Équilibré") def equilibre(self, obj): return obj.equilibre @admin.register(Depense) class DepenseAdmin(admin.ModelAdmin): list_display = ("date", "entreprise", "libelle", "activite", "regime_tva", "montant_ttc", "montant_tva", "tva_autoliq", "paiement") list_filter = ("entreprise", "regime_tva", "activite", "categorie", "date") search_fields = ("libelle", "categorie") date_hierarchy = "date" @admin.display(description="TVA auto-liquidée") def tva_autoliq(self, obj): return obj.tva_autoliquidee