add finance app

This commit is contained in:
behruz-dev
2025-08-04 13:35:22 +05:00
parent 1dffabde44
commit bb8fbd4ca7
32 changed files with 336 additions and 69 deletions

View File

@@ -0,0 +1,29 @@
# Generated by Django 5.2.4 on 2025-08-04 11:12
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('orders', '0003_delete_orderapplication'),
('projects', '0003_alter_project_folder'),
]
operations = [
migrations.RemoveField(
model_name='order',
name='project_department',
),
migrations.AddField(
model_name='order',
name='project_folder',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='order', to='projects.projectfolder'),
),
migrations.AlterField(
model_name='order',
name='project',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='orders', to='projects.project'),
),
]

View File

@@ -3,7 +3,7 @@ from django.utils.translation import gettext_lazy as _
from core.apps.shared.models import BaseModel
from core.apps.products.models import Product, Unity
from core.apps.projects.models import Project, ProjectDepartment
from core.apps.projects.models import Project, ProjectFolder
from core.apps.accounts.models import User
from core.apps.wherehouse.models import WhereHouse
@@ -21,11 +21,11 @@ class Order(BaseModel):
unity = models.ForeignKey(
Unity, on_delete=models.CASCADE, related_name='orders'
)
project = models.ForeignKey(
Project, on_delete=models.CASCADE, related_name='orders'
project_folder = models.ForeignKey(
ProjectFolder, on_delete=models.CASCADE, related_name='order', null=True
)
project_department = models.ForeignKey(
ProjectDepartment, on_delete=models.DO_NOTHING, null=True, blank=True
project = models.ForeignKey(
Project, on_delete=models.SET_NULL, related_name='orders', null=True, blank=True
)
wherehouse = models.ForeignKey(
WhereHouse, on_delete=models.CASCADE, related_name='orders'

View File

@@ -11,11 +11,8 @@ from core.apps.products.serializers.unity import UnityListSerializer
from core.apps.wherehouse.models import WhereHouse
from core.apps.wherehouse.serializers.wherehouse import WhereHouseListSerializer
# projects
from core.apps.projects.models import Project, ProjectDepartment
from core.apps.projects.serializers.project import (
ProjectListSerializer,
ProjectDepartmentListSerializer
)
from core.apps.projects.models import Project, ProjectFolder
from core.apps.projects.serializers.project import ProjectListSerializer
@@ -24,8 +21,8 @@ class OrderCreateSerializer(serializers.Serializer):
unity_id = serializers.UUIDField()
quantity = serializers.IntegerField()
wherehouse_id = serializers.UUIDField()
project_id = serializers.UUIDField()
project_department_id = serializers.UUIDField(required=False)
project_id = serializers.UUIDField(required=False)
project_folder_id = serializers.UUIDField()
date = serializers.DateField()
def validate(self, data):
@@ -33,10 +30,10 @@ class OrderCreateSerializer(serializers.Serializer):
product = Product.objects.get(id=data['product_id'])
unity = Unity.objects.get(id=data['unity_id'])
wherehouse = WhereHouse.objects.get(id=data['wherehouse_id'])
project = Project.objects.get(id=data['project_id'])
if data.get('project_department_id'):
ProjectDepartment.objects.get(
id=data['project_department_id']
project_folder = ProjectFolder.objects.get(id=data['project_folder_id'])
if data.get('project_id'):
Project.objects.get(
id=data['project_id']
)
except Product.DoesNotExist:
raise serializers.ValidationError("Product not found")
@@ -44,18 +41,18 @@ class OrderCreateSerializer(serializers.Serializer):
raise serializers.ValidationError("Unity not found")
except WhereHouse.DoesNotExist:
raise serializers.ValidationError("Where House not found")
except ProjectFolder.DoesNotExist:
raise serializers.ValidationError("Project Folder not found")
try:
if data.get('project_id'):
data['project'] = Project.objects.get(id=data['project_id'])
except Project.DoesNotExist:
raise serializers.ValidationError("Project not found")
try:
if data.get('project_department_id'):
data['project_department'] = ProjectDepartment.objects.get(id=data['project_department_id'])
except ProjectDepartment.DoesNotExist:
raise serializers.ValidationError("Project Department not found")
data['product'] = product
data['unity'] = unity
data['wherehouse'] = wherehouse
data['project'] = project
data['project_folder'] = project_folder
return data
def create(self, validated_data):
@@ -64,8 +61,8 @@ class OrderCreateSerializer(serializers.Serializer):
product=validated_data.get('product'),
unity=validated_data.get('unity'),
wherehouse=validated_data.get('wherehouse'),
project_folder=validated_data.get('project_folder'),
project=validated_data.get('project'),
project_department=validated_data.get('project_department'),
quantity=validated_data.get('quantity'),
date=validated_data.get('date')
)
@@ -76,12 +73,12 @@ class OrderListSerializer(serializers.ModelSerializer):
product = ProductListSerializer()
unity = UnityListSerializer()
project = ProjectListSerializer()
project_department = ProjectDepartmentListSerializer()
wherehouse = WhereHouseListSerializer()
project_folder = ProjectFolder()
class Meta:
model = Order
fields = [
'id', 'product', 'unity', 'quantity', 'project', 'project_department',
'id', 'product', 'unity', 'quantity', 'project', 'project_folder',
'wherehouse', 'date', 'status', 'employee'
]

View File

@@ -10,7 +10,7 @@ from core.apps.shared.paginations.custom import CustomPageNumberPagination
class OrderListApiView(generics.ListAPIView):
serializer_class = serializers.OrderListSerializer
queryset = Order.objects.select_related(
'product', 'unity', 'project', 'project_department', 'wherehouse'
'product', 'unity', 'project', 'project_folder', 'wherehouse'
)
permission_classes = [HasRolePermission]
required_permissions = []