import --> tag distribution / tag disstribution batch / remove distribution / cancel distributions
This commit is contained in:
@@ -0,0 +1,28 @@
|
|||||||
|
# Generated by Django 5.0 on 2026-01-24 05:58
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
dependencies = [
|
||||||
|
('tag', '0037_tagdistribution_dist_identity_and_more'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='tagdistributionbatch',
|
||||||
|
name='distribution_type',
|
||||||
|
field=models.CharField(choices=[('random', 'RANDOM'), ('batch', 'BATCH')], default='batch', max_length=20,
|
||||||
|
null=True),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='tagdistributionbatch',
|
||||||
|
name='remaining_tag_count',
|
||||||
|
field=models.PositiveBigIntegerField(default=0),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='tagdistributionbatch',
|
||||||
|
name='total_distributed_tag_count',
|
||||||
|
field=models.PositiveBigIntegerField(default=0),
|
||||||
|
),
|
||||||
|
]
|
||||||
18
apps/tag/migrations/0039_tagbatch_total_distributed_tags.py
Normal file
18
apps/tag/migrations/0039_tagbatch_total_distributed_tags.py
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# Generated by Django 5.0 on 2026-01-24 06:38
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('tag', '0038_tagdistributionbatch_distribution_type_and_more'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='tagbatch',
|
||||||
|
name='total_distributed_tags',
|
||||||
|
field=models.PositiveBigIntegerField(default=0),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -69,6 +69,7 @@ class TagBatch(BaseModel):
|
|||||||
species_code = models.IntegerField(default=0)
|
species_code = models.IntegerField(default=0)
|
||||||
serial_from = models.PositiveBigIntegerField(default=0)
|
serial_from = models.PositiveBigIntegerField(default=0)
|
||||||
serial_to = models.PositiveBigIntegerField(default=0)
|
serial_to = models.PositiveBigIntegerField(default=0)
|
||||||
|
total_distributed_tags = models.PositiveBigIntegerField(default=0)
|
||||||
|
|
||||||
status = models.CharField(
|
status = models.CharField(
|
||||||
max_length=20,
|
max_length=20,
|
||||||
@@ -145,6 +146,8 @@ class TagDistributionBatch(BaseModel):
|
|||||||
)
|
)
|
||||||
distributions = models.ManyToManyField(TagDistribution, related_name='tag_distribution_batch')
|
distributions = models.ManyToManyField(TagDistribution, related_name='tag_distribution_batch')
|
||||||
total_tag_count = models.IntegerField(default=0)
|
total_tag_count = models.IntegerField(default=0)
|
||||||
|
total_distributed_tag_count = models.PositiveBigIntegerField(default=0)
|
||||||
|
remaining_tag_count = models.PositiveBigIntegerField(default=0)
|
||||||
is_closed = models.BooleanField(default=False)
|
is_closed = models.BooleanField(default=False)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import random
|
import random
|
||||||
|
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
|
from django.db.models import Sum
|
||||||
|
|
||||||
from apps.authentication.models import Organization
|
from apps.authentication.models import Organization
|
||||||
from apps.tag.exceptions import TagException
|
from apps.tag.exceptions import TagException
|
||||||
@@ -147,3 +148,16 @@ class TagDistributionService:
|
|||||||
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}
|
||||||
|
|
||||||
|
def distribution_batch_main_dashboard(self, org: Organization):
|
||||||
|
"""
|
||||||
|
distribution batch main page dashboard detail
|
||||||
|
"""
|
||||||
|
|
||||||
|
distributions_batch = TagDistributionBatch.objects.prefetch_related('distributions')
|
||||||
|
|
||||||
|
distributions_batch.aggregate(
|
||||||
|
total_tag_count=Sum('total_tag_count'),
|
||||||
|
total_distributed_tag_count=Sum('total_distributed_tag_count'),
|
||||||
|
remaining_tag_count=Sum('remaining_tag_count'),
|
||||||
|
)
|
||||||
|
|||||||
@@ -440,6 +440,27 @@ class TagDistributionViewSet(
|
|||||||
|
|
||||||
return Response(status=status.HTTP_200_OK)
|
return Response(status=status.HTTP_200_OK)
|
||||||
|
|
||||||
|
@action(
|
||||||
|
methods=['get'],
|
||||||
|
detail=False,
|
||||||
|
url_path='close_distributions_list',
|
||||||
|
url_name='close_distributions_list',
|
||||||
|
name='close_distributions_list',
|
||||||
|
)
|
||||||
|
def close_distributions_list(self, request):
|
||||||
|
"""
|
||||||
|
list of closed distributions
|
||||||
|
"""
|
||||||
|
|
||||||
|
queryset = self.get_queryset(visibility_by_org_scope=True).filter(is_closed=True).order_by('-create_date')
|
||||||
|
queryset = self.filter_query(queryset)
|
||||||
|
|
||||||
|
page = self.paginate_queryset(queryset)
|
||||||
|
if page is not None: # noqa
|
||||||
|
serializer = self.get_serializer(page, many=True)
|
||||||
|
return self.get_paginated_response(serializer.data)
|
||||||
|
return Response(self.serializer_class(queryset).data)
|
||||||
|
|
||||||
|
|
||||||
class TagDistributionBatchViewSet(
|
class TagDistributionBatchViewSet(
|
||||||
BaseViewSet,
|
BaseViewSet,
|
||||||
@@ -490,3 +511,24 @@ class TagDistributionBatchViewSet(
|
|||||||
dist_batch.distributions.all().update(is_closed=True) # close distributions of batch
|
dist_batch.distributions.all().update(is_closed=True) # close distributions of batch
|
||||||
|
|
||||||
return Response(status=status.HTTP_200_OK)
|
return Response(status=status.HTTP_200_OK)
|
||||||
|
|
||||||
|
@action(
|
||||||
|
methods=['get'],
|
||||||
|
detail=False,
|
||||||
|
url_path='closed_tag_dist_batch_list',
|
||||||
|
url_name='closed_tag_dist_batch_list',
|
||||||
|
name='closed_tag_dist_batch_list',
|
||||||
|
)
|
||||||
|
def close_tag_dist_batch_list(self, request):
|
||||||
|
"""
|
||||||
|
list of closed tag distributions batch
|
||||||
|
"""
|
||||||
|
|
||||||
|
queryset = self.get_queryset(visibility_by_org_scope=True).filter(is_closed=True).order_by('create_date')
|
||||||
|
queryset = self.filter_query(self.filter_queryset(queryset))
|
||||||
|
|
||||||
|
page = self.paginate_queryset(queryset)
|
||||||
|
if page is not None: # noqa
|
||||||
|
serializer = self.get_serializer(page, many=True)
|
||||||
|
return self.get_paginated_response(serializer.data)
|
||||||
|
return Response(self.serializer_class(queryset).data)
|
||||||
|
|||||||
Reference in New Issue
Block a user