fix - tag code generation in tags
This commit is contained in:
46
apps/tag/migrations/0029_alter_tag_tag_code_tagbatch.py
Normal file
46
apps/tag/migrations/0029_alter_tag_tag_code_tagbatch.py
Normal 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,
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -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}'
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user