fix - tag code generation in tags

This commit is contained in:
2026-01-07 15:36:22 +03:30
parent 1bf107d81d
commit 8fb3bf5dc9
3 changed files with 82 additions and 21 deletions

View File

@@ -0,0 +1,46 @@
# Generated by Django 5.0 on 2026-01-07 11:55
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('authentication', '0060_organization_ownership_code'),
('tag', '0028_tagbatch'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.AlterField(
model_name='tag',
name='tag_code',
field=models.CharField(max_length=20, null=True),
),
migrations.CreateModel(
name='TagBatch',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('create_date', models.DateTimeField(auto_now_add=True)),
('modify_date', models.DateTimeField(auto_now=True)),
('creator_info', models.CharField(max_length=100, null=True)),
('modifier_info', models.CharField(max_length=100, null=True)),
('trash', models.BooleanField(default=False)),
('request_number', models.CharField(default='0', max_length=50, null=True)),
('species_code', models.IntegerField(default=0)),
('serial_from', models.PositiveBigIntegerField(default=0)),
('serial_to', models.PositiveBigIntegerField(default=0)),
('status', models.CharField(choices=[('created', 'CREATED'), ('distributed', 'DISTRIBUTED')], default='created', max_length=20, null=True)),
('description', models.TextField(blank=True, null=True)),
('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_createddby', to=settings.AUTH_USER_MODEL)),
('modified_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_modifiedby', to=settings.AUTH_USER_MODEL)),
('organization', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='tag_batches', to='authentication.organization')),
('tag', models.ManyToManyField(related_name='tags', to='tag.tag')),
],
options={
'abstract': False,
},
),
]

View File

@@ -15,7 +15,7 @@ class Tag(BaseModel):
ownership_code = models.IntegerField(default=0, help_text='ownership code of organizations like: 51, 52, etc') ownership_code = models.IntegerField(default=0, help_text='ownership code of organizations like: 51, 52, etc')
species_code = models.IntegerField(default=0, help_text='code of livestock type like: 1->sheep') species_code = models.IntegerField(default=0, help_text='code of livestock type like: 1->sheep')
serial = models.CharField(max_length=8, help_text='7 digit number as serial on tag code') serial = models.CharField(max_length=8, help_text='7 digit number as serial on tag code')
tag_code = models.CharField(max_length=20, unique=True, null=True) tag_code = models.CharField(max_length=20, null=True)
organization = models.ForeignKey( organization = models.ForeignKey(
auth_models.Organization, auth_models.Organization,
on_delete=models.CASCADE, on_delete=models.CASCADE,
@@ -29,12 +29,6 @@ class Tag(BaseModel):
) )
status = models.CharField(max_length=20, default="F") status = models.CharField(max_length=20, default="F")
# class Meta:
# indexes = [
# models.Index(fields=['ownership_code', 'species_code']),
# models.Index(fields=['status']),
# ]
def __str__(self): def __str__(self):
return f'{self.id}-{self.tag_code}' return f'{self.id}-{self.tag_code}'

View File

@@ -5,6 +5,7 @@ from apps.authentication.models import Organization
from apps.livestock.web.api.v1.serializers import LiveStockSerializer from apps.livestock.web.api.v1.serializers import LiveStockSerializer
from apps.tag.exceptions import TagException from apps.tag.exceptions import TagException
from apps.tag.models import Tag, TagBatch from apps.tag.models import Tag, TagBatch
from apps.tag.tools import tag_code_serial_scanning
class TagService: class TagService:
@@ -12,6 +13,24 @@ class TagService:
Different Services of Livestock Tags Different Services of Livestock Tags
""" """
def tag_code_compelition(self, tag_data: dict, serial, ownership_code, organization):
"""
complete data of tag
"""
tag_data.update({
'serial': serial,
'ownership_code': ownership_code,
'organization': organization,
'tag_code': f"{tag_data.get('country_code')}"
f"{tag_data.get('static_code')}"
f"{ownership_code}"
f"{tag_data.get('species_code')}"
f"{tag_code_serial_scanning(str(serial))}"
})
return tag_data
def create_tag( def create_tag(
self, self,
serial_start_range: int = None, serial_start_range: int = None,
@@ -24,7 +43,7 @@ class TagService:
""" """
# create tag batch # create tag batch
request_number = serial_end_range - serial_start_range request_number = (serial_end_range - serial_start_range) + 1
batch = TagBatch.objects.create( batch = TagBatch.objects.create(
organization=org, organization=org,
request_number=request_number if request_number > 0 else 1, request_number=request_number if request_number > 0 else 1,
@@ -36,12 +55,13 @@ class TagService:
tag_list = [] tag_list = []
while serial_start_range <= serial_end_range: while serial_start_range <= serial_end_range:
data.update({ tag_data = self.tag_code_compelition(
'serial': str(serial_start_range), tag_data=data,
'ownership_code': org.ownership_code, serial=serial_start_range,
'organization': org, organization=org,
}) ownership_code=org.ownership_code
tag_list.append(Tag(**data)) )
tag_list.append(Tag(**tag_data))
if Tag.objects.filter(serial=serial_start_range, species_code=data.get('species_code')).exists(): if Tag.objects.filter(serial=serial_start_range, species_code=data.get('species_code')).exists():
raise TagException(f' پلاک با مشخصات مورد نظر {serial_start_range} وجود دارد ', status_code=403) # noqa raise TagException(f' پلاک با مشخصات مورد نظر {serial_start_range} وجود دارد ', status_code=403) # noqa
@@ -66,7 +86,7 @@ class TagService:
""" """
# update tag batch # update tag batch
request_number = serial_end_range - serial_start_range request_number = (serial_end_range - serial_start_range) + 1
batch = TagBatch.objects.get(id=batch_id) batch = TagBatch.objects.get(id=batch_id)
batch.request_number = request_number batch.request_number = request_number
batch.species_code = data.get('species_code') batch.species_code = data.get('species_code')
@@ -77,12 +97,13 @@ class TagService:
# recreate tags for batch # recreate tags for batch
tag_list = [] tag_list = []
while serial_start_range <= serial_end_range: while serial_start_range <= serial_end_range:
data.update({ tag_data = self.tag_code_compelition(
'serial': str(serial_start_range), tag_data=data,
'ownership_code': org.ownership_code, serial=serial_start_range,
'organization': org, organization=org,
}) ownership_code=org.ownership_code
tag_list.append(Tag(**data)) )
tag_list.append(Tag(**tag_data))
if Tag.objects.filter( if Tag.objects.filter(
serial=serial_start_range, serial=serial_start_range,