diff --git a/apps/tag/services/tag_distribution_services.py b/apps/tag/services/tag_distribution_services.py index 9316a40..3e6eb86 100644 --- a/apps/tag/services/tag_distribution_services.py +++ b/apps/tag/services/tag_distribution_services.py @@ -86,18 +86,20 @@ class TagDistributionService: return {'tag_distributions': distributions, 'distributions_batch': distributions_batch} - def edit_distribution_from_batch(self, dist_batch: TagDistributionBatch = None, data: dict = None, - org: Organization = None): + def edit_distribution_from_batch( + self, dist_batch: TagDistributionBatch = None, + data: dict = None, + org: Organization = None + ): """ edit record of distributed tags """ # clear and hard delete of distributions - distributions = dist_batch.distributions.all() - for dist in distributions: # free distributed tags from reserve + dist_batch_distributions = dist_batch.distributions.all() + for dist in dist_batch_distributions: # free distributed tags from reserve dist.tag.all().update(status='F') - dist_batch.distributions.clear() - distributions.delete() + dist_batch_distributions.delete() # create new distributions and update batch total_counted_tags = 0 @@ -153,6 +155,7 @@ class TagDistributionService: dist_batch.assigned_org = assigned_org dist_batch.total_tag_count = total_counted_tags dist_batch.distribution_type = distribution_type # noqa + dist_batch.save(update_fields=['assigned_org', 'total_tag_count', 'distribution_type']) dist_batch.distributions.add(*distributions) return {'tag_distributions': distributions, 'distributions_batch': dist_batch} diff --git a/apps/tag/signals/tag_distribution_signals.py b/apps/tag/signals/tag_distribution_signals.py index 48e7737..e7d61c7 100644 --- a/apps/tag/signals/tag_distribution_signals.py +++ b/apps/tag/signals/tag_distribution_signals.py @@ -1,26 +1,10 @@ -from django.db.models import Count from django.db.models.signals import m2m_changed from django.db.models.signals import post_save from django.dispatch import receiver -from apps.tag.models import TagDistribution, TagDistributionBatch +from apps.tag.models import TagDistribution, TagDistributionBatch, Tag -# @receiver(post_save, sender=TagDistribution) -# def calculate_tag_batch_details(sender, instance: TagDistribution, **kwargs): -# """ -# calculate distribution & remaining tag count from batch -# """ -# distributions = TagDistribution.objects.filter(batch=instance.batch) -# -# distributed_tags = distributions.aggregate(count=Count('tag'))['count'] -# -# instance.batch.total_distributed_tags = distributed_tags \ -# if not instance.batch.total_distributed_tags != 0 \ -# else instance.total_tag_count -# instance.batch.total_remaining_tags = int(instance.batch.request_number) - distributed_tags -# instance.batch.save(update_fields=['total_distributed_tags', 'total_remaining_tags']) - @receiver(m2m_changed, sender=TagDistribution.tag.through) def update_batch_on_distribution_change( sender, instance: TagDistribution, action, **kwargs @@ -35,9 +19,10 @@ def update_batch_on_distribution_change( distributions = TagDistribution.objects.filter(batch=batch) - distributed_tags = distributions.aggregate( - total=Count('tag') - )['total'] or 0 + distributed_tags = Tag.objects.filter( + distributions__batch=batch + ).distinct().count() + print(distributed_tags) batch.total_distributed_tags = distributed_tags batch.total_remaining_tags = ( @@ -74,7 +59,6 @@ def calculate_tag_distribution_detail(sender, instance: TagDistributionBatch, ** tag_dist_batch.parent.save(update_fields=['total_distributed_tag_count', 'remaining_tag_count']) tag_dist_batch.remaining_tag_count = tag_dist_batch.total_tag_count - print(tag_dist_batch.remaining_tag_count) instance.flag = True tag_dist_batch.save(update_fields=['remaining_tag_count'])