84 lines
2.9 KiB
Python
84 lines
2.9 KiB
Python
from django.db.models.signals import post_save, post_delete
|
|
from django.dispatch import receiver
|
|
from contracts.models import ContractOrderQuote, ContractOrderQuoteItem
|
|
|
|
|
|
@receiver(post_save, sender=ContractOrderQuote)
|
|
def update_order_total_on_quote_save(sender, instance, **kwargs):
|
|
"""
|
|
Met à jour le total_amount de la commande lorsqu'un devis est créé ou modifié.
|
|
"""
|
|
order = instance.order
|
|
order.total_amount = instance.get_total_amount()
|
|
order.save(update_fields=['total_amount'])
|
|
|
|
|
|
@receiver(post_delete, sender=ContractOrderQuote)
|
|
def clear_order_total_on_quote_delete(sender, instance, **kwargs):
|
|
"""
|
|
Réinitialise le total_amount de la commande lorsqu'un devis est supprimé.
|
|
"""
|
|
order = instance.order
|
|
order.total_amount = 0
|
|
order.save(update_fields=['total_amount'])
|
|
|
|
|
|
@receiver(post_save, sender=ContractOrderQuoteItem)
|
|
def update_order_total_on_quote_item_save(sender, instance, **kwargs):
|
|
"""
|
|
Met à jour le total_amount de la commande lorsqu'un item du devis est créé ou modifié.
|
|
"""
|
|
quote = instance.quote
|
|
order = quote.order
|
|
order.total_amount = quote.get_total_amount()
|
|
order.save(update_fields=['total_amount'])
|
|
|
|
|
|
@receiver(post_delete, sender=ContractOrderQuoteItem)
|
|
def update_order_total_on_quote_item_delete(sender, instance, **kwargs):
|
|
"""
|
|
Met à jour le total_amount de la commande lorsqu'un item du devis est supprimé.
|
|
"""
|
|
quote = instance.quote
|
|
order = quote.order
|
|
order.total_amount = quote.get_total_amount()
|
|
order.save(update_fields=['total_amount'])
|
|
|
|
|
|
from django.db.models.signals import m2m_changed
|
|
from contracts.models import CompanyMember, CompanyMemberHistory
|
|
from django.utils import timezone
|
|
|
|
@receiver(m2m_changed, sender=CompanyMember.teams.through)
|
|
def update_member_team_history(sender, instance, action, reverse, pk_set, **kwargs):
|
|
if reverse:
|
|
return
|
|
|
|
today = timezone.now().date()
|
|
|
|
if action == "post_add":
|
|
# Pour chaque équipe ajoutée, on crée un enregistrement d'historique s'il n'existe pas déjà de période active
|
|
for team_id in pk_set:
|
|
CompanyMemberHistory.objects.get_or_create(
|
|
member=instance,
|
|
team_id=team_id,
|
|
leave_date__isnull=True,
|
|
defaults={'join_date': today}
|
|
)
|
|
|
|
elif action == "post_remove":
|
|
# Pour chaque équipe retirée, on clôture la période d'appartenance active
|
|
for team_id in pk_set:
|
|
CompanyMemberHistory.objects.filter(
|
|
member=instance,
|
|
team_id=team_id,
|
|
leave_date__isnull=True
|
|
).update(leave_date=today)
|
|
|
|
elif action == "pre_clear":
|
|
# Avant d'effacer toutes les équipes d'un membre, on clôture toutes les périodes actives
|
|
CompanyMemberHistory.objects.filter(
|
|
member=instance,
|
|
leave_date__isnull=True
|
|
).update(leave_date=today)
|
|
|