""" Signals для приложения products. Логирует изменения себестоимости товара через CostPriceHistory. """ from django.db.models.signals import post_save from django.dispatch import receiver from django.db import models from .models import Product, CostPriceHistory @receiver(post_save, sender=Product) def log_cost_price_changes(sender, instance, created, **kwargs): """ Логирует изменения себестоимости товара. Срабатывает при создании или обновлении товара. Создает запись в CostPriceHistory если себестоимость изменилась. """ if created: # При создании товара себестоимость обычно 0, логируем только если не 0 if instance.cost_price != 0: CostPriceHistory.objects.create( product=instance, old_cost_price=0, new_cost_price=instance.cost_price, reason='system', notes='Начальная себестоимость при создании товара' ) return # Получаем предыдущее значение себестоимости try: previous = Product.objects.get(pk=instance.pk) old_cost_price = previous.cost_price except Product.DoesNotExist: # Товар был удален, не логируем return # Если себестоимость изменилась, логируем if old_cost_price != instance.cost_price: CostPriceHistory.objects.create( product=instance, old_cost_price=old_cost_price, new_cost_price=instance.cost_price, reason='recalculation', notes='Себестоимость пересчитана на основе партий товара' )