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')
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')
tag_code = models.CharField(max_length=20, unique=True, null=True)
tag_code = models.CharField(max_length=20, null=True)
organization = models.ForeignKey(
auth_models.Organization,
on_delete=models.CASCADE,
@@ -29,12 +29,6 @@ class Tag(BaseModel):
)
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):
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.tag.exceptions import TagException
from apps.tag.models import Tag, TagBatch
from apps.tag.tools import tag_code_serial_scanning
class TagService:
@@ -12,6 +13,24 @@ class TagService:
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(
self,
serial_start_range: int = None,
@@ -24,7 +43,7 @@ class TagService:
"""
# create tag batch
request_number = serial_end_range - serial_start_range
request_number = (serial_end_range - serial_start_range) + 1
batch = TagBatch.objects.create(
organization=org,
request_number=request_number if request_number > 0 else 1,
@@ -36,12 +55,13 @@ class TagService:
tag_list = []
while serial_start_range <= serial_end_range:
data.update({
'serial': str(serial_start_range),
'ownership_code': org.ownership_code,
'organization': org,
})
tag_list.append(Tag(**data))
tag_data = self.tag_code_compelition(
tag_data=data,
serial=serial_start_range,
organization=org,
ownership_code=org.ownership_code
)
tag_list.append(Tag(**tag_data))
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
@@ -66,7 +86,7 @@ class TagService:
"""
# 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.request_number = request_number
batch.species_code = data.get('species_code')
@@ -77,12 +97,13 @@ class TagService:
# recreate tags for batch
tag_list = []
while serial_start_range <= serial_end_range:
data.update({
'serial': str(serial_start_range),
'ownership_code': org.ownership_code,
'organization': org,
})
tag_list.append(Tag(**data))
tag_data = self.tag_code_compelition(
tag_data=data,
serial=serial_start_range,
organization=org,
ownership_code=org.ownership_code
)
tag_list.append(Tag(**tag_data))
if Tag.objects.filter(
serial=serial_start_range,