add company app

This commit is contained in:
behruz-dev
2025-08-01 11:07:10 +05:00
parent e8d525ef96
commit 9b403c46da
21 changed files with 190 additions and 2 deletions

View File

View File

@@ -0,0 +1,2 @@
from .company import *
from .branch import *

View File

@@ -0,0 +1,10 @@
from django.contrib import admin
from core.apps.company.models import Branch
@admin.register(Branch)
class BranchAdmin(admin.ModelAdmin):
list_display = ['name', 'location', 'company']
search_fields = ['name', 'location', 'company']
list_filter = ['company']

View File

@@ -0,0 +1,8 @@
from django.contrib import admin
from core.apps.company.models import Company
@admin.register(Company)
class CompanyAdmin(admin.ModelAdmin):
list_display = ['name']
search_fields = ['name']

View File

@@ -0,0 +1,9 @@
from django.apps import AppConfig
class CompanyConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'core.apps.company'
def ready(self):
from . import admin

View File

@@ -0,0 +1,44 @@
# Generated by Django 5.2.4 on 2025-08-01 10:39
import django.db.models.deletion
import uuid
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Company',
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)),
('name', models.CharField(db_index=True, max_length=200, unique=True)),
],
options={
'verbose_name': 'Kompaniya',
'verbose_name_plural': 'Kompaniyalar',
},
),
migrations.CreateModel(
name='Barnch',
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)),
('name', models.CharField(max_length=200)),
('location', models.CharField(max_length=250)),
('company', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='branches', to='company.company')),
],
options={
'verbose_name': 'Filial',
'verbose_name_plural': 'Filialar',
},
),
]

View File

@@ -0,0 +1,17 @@
# Generated by Django 5.2.4 on 2025-08-01 10:41
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('company', '0001_initial'),
]
operations = [
migrations.RenameModel(
old_name='Barnch',
new_name='Branch',
),
]

View File

View File

@@ -0,0 +1,2 @@
from .branch import *
from .comany import *

View File

@@ -0,0 +1,18 @@
from django.db import models
from django.utils.translation import gettext_lazy as _
from core.apps.shared.models import BaseModel
from core.apps.company.models.comany import Company
class Branch(BaseModel):
name = models.CharField(max_length=200)
company = models.ForeignKey(Company, on_delete=models.CASCADE, related_name='branches')
location = models.CharField(max_length=250)
def __str__(self):
return f"{self.name} - {self.company}"
class Meta:
verbose_name = _('Filial')
verbose_name_plural = _('Filialar')

View File

@@ -0,0 +1,15 @@
from django.db import models
from django.utils.translation import gettext_lazy as _
from core.apps.shared.models import BaseModel
class Company(BaseModel):
name = models.CharField(max_length=200, unique=True, db_index=True)
def __str__(self):
return self.name
class Meta:
verbose_name = _('Kompaniya')
verbose_name_plural = _("Kompaniyalar")

View File

@@ -0,0 +1,9 @@
from rest_framework import serializers
from core.apps.company.models import Branch
class BranchListSerializer(serializers.ModelSerializer):
class Meta:
model = Branch
fields = ['id', 'name', 'location']

View File

@@ -0,0 +1,18 @@
from rest_framework import serializers
from core.apps.company.models import Company
from core.apps.company.serializers.branch import BranchListSerializer
class CompanyListSerializer(serializers.ModelSerializer):
class Meta:
model = Company
fields = ['id', 'name']
class CompanyDetailSerializer(serializers.ModelSerializer):
branches = BranchListSerializer(many=True)
class Meta:
model = Company
fields = ['id', 'name', 'branches']

12
core/apps/company/urls.py Normal file
View File

@@ -0,0 +1,12 @@
from django.urls import path, include
from core.apps.company.views import company as company_views
urlpatterns = [
path('company/', include(
[
path('list/', company_views.CompanyListApiView.as_view(), name='company-list'),
path('<uuid:id>/', company_views.CompanyDetailApiView.as_view()),
]
)),
]

View File

View File

@@ -0,0 +1,22 @@
from rest_framework import generics, status
from rest_framework.response import Response
from core.apps.company.models import Company
from core.apps.company.serializers import company as serializers
from core.apps.accounts.permissions.permissions import HasRolePermission
class CompanyListApiView(generics.ListAPIView):
serializer_class = serializers.CompanyListSerializer
queryset = Company.objects.all()
permission_classes = [HasRolePermission]
required_permissions = []
class CompanyDetailApiView(generics.RetrieveAPIView):
serializer_class = serializers.CompanyDetailSerializer
queryset = Company.objects.prefetch_related('branches')
permission_classes = [HasRolePermission]
required_permissions = []
lookup_field = 'id'