change serializer fields

This commit is contained in:
behruz-dev
2025-08-07 17:29:05 +05:00
parent 2999d4bdab
commit c902a09c7b
9 changed files with 157 additions and 8 deletions

View File

@@ -1,2 +1,3 @@
from .project import *
from .builder import *
from .builder import *
from .project_estimate import *

View File

@@ -0,0 +1,18 @@
from django.contrib import admin
from core.apps.projects.models.project_estimate import ProjectEstimate, EstimateWork, EstimateProduct
@admin.register(ProjectEstimate)
class ProjectEstimateAdmin(admin.ModelAdmin):
list_display = ['id', 'number', 'name']
@admin.register(EstimateWork)
class EstimateWorkAdmin(admin.ModelAdmin):
list_display = ['id', 'number', 'name', 'price', 'quantity']
@admin.register(EstimateProduct)
class EstimateProductAdmin(admin.ModelAdmin):
list_display = ['id', 'product', 'price', 'quantity']

View File

@@ -0,0 +1,65 @@
# Generated by Django 5.2.4 on 2025-08-07 16:01
import django.db.models.deletion
import uuid
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('products', '0004_product_type'),
('projects', '0012_project_is_archive'),
]
operations = [
migrations.CreateModel(
name='ProjectEstimate',
fields=[
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('number', models.PositiveIntegerField(default=1)),
('name', models.CharField(max_length=200)),
],
options={
'verbose_name': 'Loyiha smetasi',
'verbose_name_plural': 'Loyiha smetalari',
},
),
migrations.CreateModel(
name='EstimateProduct',
fields=[
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('quantity', models.PositiveIntegerField(default=1)),
('price', models.PositiveBigIntegerField(blank=True, null=True)),
('date', models.DateField(blank=True, null=True)),
('product', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='estimate_products', to='products.product')),
('unity', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='estimate_products', to='products.unity')),
],
options={
'verbose_name': 'Smeta mahsuloti',
'verbose_name_plural': 'Smeta mahsulotlari',
},
),
migrations.CreateModel(
name='EstimateWork',
fields=[
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('number', models.PositiveIntegerField(default=1)),
('name', models.CharField(max_length=200)),
('quantity', models.PositiveIntegerField(default=1)),
('price', models.PositiveBigIntegerField(blank=True, null=True)),
('date', models.DateField(blank=True, null=True)),
('unity', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='estimate_works', to='products.unity')),
('estimate', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='estimate_works', to='projects.projectestimate')),
],
options={
'verbose_name': 'Smeta ishlar',
},
),
]

View File

@@ -1,2 +1,3 @@
from .project import *
from .builder import *
from .builder import *
from .project_estimate import *

View File

@@ -79,7 +79,7 @@ class Project(BaseModel):
CashTransaction, related_name='projects'
)
currency = models.CharField(choices=[('usd', 'usd'),('uzs','uzs')], max_length=3, default='uzs')
benifit_plan = models.PositiveBigIntegerField(null=True)
benifit_plan = models.PositiveBigIntegerField(null=True, blank=True)
status = models.CharField(max_length=20, choices=STATUS, default='PLANNED')
is_archive = models.BooleanField(default=False)

View File

@@ -3,7 +3,55 @@ from django.utils.translation import gettext_lazy as _
from core.apps.shared.models import BaseModel
from core.apps.projects.models import Project
from core.apps.products.models import Unity, Product
class ProjectEstimate(BaseModel):
...
number = models.PositiveIntegerField(default=1)
name = models.CharField(max_length=200)
def __str__(self):
return f'{self.number}.{self.name}'
class Meta:
verbose_name = _('Loyiha smetasi')
verbose_name_plural = _('Loyiha smetalari')
class EstimateWork(BaseModel):
number = models.PositiveIntegerField(default=1)
name = models.CharField(max_length=200)
quantity = models.PositiveIntegerField(default=1)
unity = models.ForeignKey(
Unity, on_delete=models.SET_NULL, null=True, related_name='estimate_works'
)
price = models.PositiveBigIntegerField(null=True, blank=True)
estimate = models.ForeignKey(
ProjectEstimate, on_delete=models.CASCADE, related_name='estimate_works'
)
date = models.DateField(null=True, blank=True)
def __str__(self):
return f"{self.number}.{self.name}"
class Meta:
verbose_name = _("Smeta ish")
verbose_name = _("Smeta ishlar")
class EstimateProduct(BaseModel):
product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='estimate_products')
quantity = models.PositiveIntegerField(default=1)
price = models.PositiveBigIntegerField()
unity = models.ForeignKey(
Unity, on_delete=models.SET_NULL, null=True, related_name='estimate_products'
)
price = models.PositiveBigIntegerField(null=True, blank=True)
date = models.DateField(null=True, blank=True)
def __str__(self):
return f'{self.product} - {self.price}'
class Meta:
verbose_name = _('Smeta mahsuloti')
verbose_name_plural = _('Smeta mahsulotlari')

View File

@@ -89,8 +89,8 @@ class ProjectCreateSerializer(serializers.Serializer):
wherehouse = serializers.ListSerializer(child=serializers.UUIDField())
cash_transaction = serializers.ListSerializer(child=serializers.UUIDField())
currency = serializers.ChoiceField(choices=[('uzs', 'uzs'), ('usd', 'usd')])
benifit_plan = serializers.IntegerField()
currency = serializers.ChoiceField(choices=[('uzs', 'uzs'), ('usd', 'usd')], required=False)
benifit_plan = serializers.IntegerField(required=False)
def create(self, validated_data):
boss_ids = validated_data.pop('boss')
@@ -165,8 +165,8 @@ class ProjectFolderProjectCreateSerializer(serializers.Serializer):
wherehouse = serializers.ListSerializer(child=serializers.UUIDField())
cash_transaction = serializers.ListSerializer(child=serializers.UUIDField())
currency = serializers.ChoiceField(choices=[('uzs', 'uzs'), ('usd', 'usd')])
benifit_plan = serializers.IntegerField()
currency = serializers.ChoiceField(choices=[('uzs', 'uzs'), ('usd', 'usd')], required=False)
benifit_plan = serializers.IntegerField(required=False)
def validate(self, data):
folder = ProjectFolder.objects.filter(id=data['folder_id']).first()

View File

@@ -0,0 +1,11 @@
from rest_framework import serializers
from core.apps.projects.models.project_estimate import EstimateProduct, EstimateWork, ProjectEstimate
class ProjectEstimateListSerializer(serializers.ModelSerializer):
class Meta:
model = ProjectEstimate
fields = [
'id', 'number', 'name'
]

View File

@@ -0,0 +1,5 @@
from rest_framework import generics, views
from rest_framework.response import Response
from core.apps.accounts.permissions.permissions import HasRolePermission
from core.apps.projects.models.project_estimate import ProjectEstimate, EstimateProduct, EstimateWork