fix --> batch statistics

This commit is contained in:
2026-02-01 11:55:18 +03:30
parent d643237a77
commit e68485c4cc
2 changed files with 14 additions and 27 deletions

View File

@@ -86,18 +86,20 @@ class TagDistributionService:
return {'tag_distributions': distributions, 'distributions_batch': distributions_batch} return {'tag_distributions': distributions, 'distributions_batch': distributions_batch}
def edit_distribution_from_batch(self, dist_batch: TagDistributionBatch = None, data: dict = None, def edit_distribution_from_batch(
org: Organization = None): self, dist_batch: TagDistributionBatch = None,
data: dict = None,
org: Organization = None
):
""" """
edit record of distributed tags edit record of distributed tags
""" """
# clear and hard delete of distributions # clear and hard delete of distributions
distributions = dist_batch.distributions.all() dist_batch_distributions = dist_batch.distributions.all()
for dist in distributions: # free distributed tags from reserve for dist in dist_batch_distributions: # free distributed tags from reserve
dist.tag.all().update(status='F') dist.tag.all().update(status='F')
dist_batch.distributions.clear() dist_batch_distributions.delete()
distributions.delete()
# create new distributions and update batch # create new distributions and update batch
total_counted_tags = 0 total_counted_tags = 0
@@ -153,6 +155,7 @@ class TagDistributionService:
dist_batch.assigned_org = assigned_org dist_batch.assigned_org = assigned_org
dist_batch.total_tag_count = total_counted_tags dist_batch.total_tag_count = total_counted_tags
dist_batch.distribution_type = distribution_type # noqa dist_batch.distribution_type = distribution_type # noqa
dist_batch.save(update_fields=['assigned_org', 'total_tag_count', 'distribution_type'])
dist_batch.distributions.add(*distributions) dist_batch.distributions.add(*distributions)
return {'tag_distributions': distributions, 'distributions_batch': dist_batch} return {'tag_distributions': distributions, 'distributions_batch': dist_batch}

View File

@@ -1,26 +1,10 @@
from django.db.models import Count
from django.db.models.signals import m2m_changed from django.db.models.signals import m2m_changed
from django.db.models.signals import post_save from django.db.models.signals import post_save
from django.dispatch import receiver 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) @receiver(m2m_changed, sender=TagDistribution.tag.through)
def update_batch_on_distribution_change( def update_batch_on_distribution_change(
sender, instance: TagDistribution, action, **kwargs sender, instance: TagDistribution, action, **kwargs
@@ -35,9 +19,10 @@ def update_batch_on_distribution_change(
distributions = TagDistribution.objects.filter(batch=batch) distributions = TagDistribution.objects.filter(batch=batch)
distributed_tags = distributions.aggregate( distributed_tags = Tag.objects.filter(
total=Count('tag') distributions__batch=batch
)['total'] or 0 ).distinct().count()
print(distributed_tags)
batch.total_distributed_tags = distributed_tags batch.total_distributed_tags = distributed_tags
batch.total_remaining_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.parent.save(update_fields=['total_distributed_tag_count', 'remaining_tag_count'])
tag_dist_batch.remaining_tag_count = tag_dist_batch.total_tag_count tag_dist_batch.remaining_tag_count = tag_dist_batch.total_tag_count
print(tag_dist_batch.remaining_tag_count)
instance.flag = True instance.flag = True
tag_dist_batch.save(update_fields=['remaining_tag_count']) tag_dist_batch.save(update_fields=['remaining_tag_count'])