From 7a52f382f113b3aa74a7bb4320e0ef0b7d24c837 Mon Sep 17 00:00:00 2001 From: behruz-dev Date: Thu, 11 Sep 2025 18:37:15 +0500 Subject: [PATCH] fix --- core/apps/finance/admin/__init__.py | 4 +- core/apps/finance/admin/expence_contract.py | 7 +++ core/apps/finance/admin/income_contract.py | 9 +++ .../0020_expencecontract_incomecontract.py | 61 +++++++++++++++++++ core/apps/finance/models/__init__.py | 4 +- core/apps/finance/models/expence_contract.py | 34 +++++++++++ core/apps/finance/models/income_contract.py | 34 +++++++++++ 7 files changed, 151 insertions(+), 2 deletions(-) create mode 100644 core/apps/finance/admin/expence_contract.py create mode 100644 core/apps/finance/admin/income_contract.py create mode 100644 core/apps/finance/migrations/0020_expencecontract_incomecontract.py create mode 100644 core/apps/finance/models/expence_contract.py create mode 100644 core/apps/finance/models/income_contract.py diff --git a/core/apps/finance/admin/__init__.py b/core/apps/finance/admin/__init__.py index 13ad81b..43e55ae 100644 --- a/core/apps/finance/admin/__init__.py +++ b/core/apps/finance/admin/__init__.py @@ -3,4 +3,6 @@ from .payment_type import * from .type_income import * from .income import * from .expence_type import * -from .expence import * \ No newline at end of file +from .expence import * +from .expence_contract import * +from .income_contract import * diff --git a/core/apps/finance/admin/expence_contract.py b/core/apps/finance/admin/expence_contract.py new file mode 100644 index 0000000..87a0bdb --- /dev/null +++ b/core/apps/finance/admin/expence_contract.py @@ -0,0 +1,7 @@ +from django.contrib import admin + +from core.apps.finance.models import ExpenceContract + + +class ExpenceContractAdmin(admin.ModelAdmin): + list_display = ['id', 'price', 'date', 'currency'] \ No newline at end of file diff --git a/core/apps/finance/admin/income_contract.py b/core/apps/finance/admin/income_contract.py new file mode 100644 index 0000000..205692a --- /dev/null +++ b/core/apps/finance/admin/income_contract.py @@ -0,0 +1,9 @@ +from django.contrib import admin + +from core.apps.finance.models import IncomeContract + + +@admin.register(IncomeContract) +class IncomeContractAdmin(admin.ModelAdmin): + list_display = ['id', 'price', 'date', 'currency'] + \ No newline at end of file diff --git a/core/apps/finance/migrations/0020_expencecontract_incomecontract.py b/core/apps/finance/migrations/0020_expencecontract_incomecontract.py new file mode 100644 index 0000000..4a26455 --- /dev/null +++ b/core/apps/finance/migrations/0020_expencecontract_incomecontract.py @@ -0,0 +1,61 @@ +# Generated by Django 5.2.4 on 2025-09-11 18:06 + +import django.db.models.deletion +import uuid +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('counterparty', '0006_rename_debit_counterparty_debit_usd_and_more'), + ('finance', '0019_expence_user_income_user'), + ('projects', '0016_estimatework_employee_estimatework_end_date_and_more'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='ExpenceContract', + 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)), + ('price', models.PositiveBigIntegerField()), + ('currency', models.CharField(choices=[('uzs', 'uzs'), ('usd', 'usd')], max_length=3)), + ('date', models.DateField()), + ('comment', models.TextField(blank=True, null=True)), + ('counterparty', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='expence_contracts', to='counterparty.counterparty')), + ('expence_type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='expence_contracts', to='finance.expencetype')), + ('project', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='expence_contracts', to='projects.project')), + ('project_folder', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='expence_contracts', to='projects.projectfolder')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='expence_contracts', to=settings.AUTH_USER_MODEL)), + ], + options={ + 'verbose_name': 'Chiqim Shartnomasi', + 'verbose_name_plural': 'Chiqim Shartnomalari', + }, + ), + migrations.CreateModel( + name='IncomeContract', + 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)), + ('price', models.PositiveBigIntegerField()), + ('currency', models.CharField(choices=[('uzs', 'uzs'), ('usd', 'usd')], max_length=3)), + ('date', models.DateField()), + ('comment', models.TextField(blank=True, null=True)), + ('counterparty', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='income_contracts', to='counterparty.counterparty')), + ('income_type', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='income_contracts', to='finance.typeincome')), + ('project', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='income_contracts', to='projects.project')), + ('project_folder', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='income_contracts', to='projects.projectfolder')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='income_contracts', to=settings.AUTH_USER_MODEL)), + ], + options={ + 'verbose_name': 'Kirim Shartnomasi', + 'verbose_name_plural': 'Kirim Shartnomalari', + }, + ), + ] diff --git a/core/apps/finance/models/__init__.py b/core/apps/finance/models/__init__.py index e57b1c1..5b9fe08 100644 --- a/core/apps/finance/models/__init__.py +++ b/core/apps/finance/models/__init__.py @@ -3,4 +3,6 @@ from .payment_type import * from .type_income import * from .income import * from .expence_type import * -from .expence import * \ No newline at end of file +from .expence import * +from .income_contract import * +from .expence_contract import * \ No newline at end of file diff --git a/core/apps/finance/models/expence_contract.py b/core/apps/finance/models/expence_contract.py new file mode 100644 index 0000000..d0002d4 --- /dev/null +++ b/core/apps/finance/models/expence_contract.py @@ -0,0 +1,34 @@ +from django.db import models + +from core.apps.shared.models import BaseModel +from core.apps.accounts.models import User +from core.apps.finance.models import ExpenceType +from core.apps.counterparty.models import Counterparty + + +class ExpenceContract(BaseModel): + user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='expence_contracts') + project_folder = models.ForeignKey( + 'projects.ProjectFolder', on_delete=models.CASCADE, related_name='expence_contracts' + ) + project = models.ForeignKey( + 'projects.Project', on_delete=models.SET_NULL, related_name='expence_contracts', null=True, blank=True + ) + expence_type = models.ForeignKey( + ExpenceType, on_delete=models.SET_NULL, related_name='expence_contracts', null=True, blank=True + ) + counterparty = models.ForeignKey( + Counterparty, on_delete=models.SET_NULL, related_name='expence_contracts', null=True, blank=True + ) + + price = models.PositiveBigIntegerField() + currency = models.CharField(max_length=3, choices=[('uzs', 'uzs'), ('usd', 'usd')]) + date = models.DateField() + comment = models.TextField(null=True, blank=True) + + def __str__(self): + return f'{self.counterparty} chiqim shartnomasa: {self.price} {self.currency}' + + class Meta: + verbose_name = 'Chiqim Shartnomasi' + verbose_name_plural = 'Chiqim Shartnomalari' \ No newline at end of file diff --git a/core/apps/finance/models/income_contract.py b/core/apps/finance/models/income_contract.py new file mode 100644 index 0000000..39b81e8 --- /dev/null +++ b/core/apps/finance/models/income_contract.py @@ -0,0 +1,34 @@ +from django.db import models + +from core.apps.shared.models import BaseModel +from core.apps.finance.models import TypeIncome +from core.apps.counterparty.models import Counterparty +from core.apps.accounts.models import User + + +class IncomeContract(BaseModel): + project_folder = models.ForeignKey( + 'projects.ProjectFolder', on_delete=models.CASCADE, related_name='income_contracts' + ) + project = models.ForeignKey( + 'projects.Project', on_delete=models.SET_NULL, related_name='income_contracts', null=True + ) + income_type = models.ForeignKey( + TypeIncome, on_delete=models.SET_NULL, related_name='income_contracts', null=True + ) + counterparty = models.ForeignKey( + Counterparty, on_delete=models.SET_NULL, related_name='income_contracts', null=True + ) + user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='income_contracts') + + price = models.PositiveBigIntegerField() + currency = models.CharField(max_length=3, choices=[('uzs', 'uzs'), ('usd', 'usd')]) + date = models.DateField() + comment = models.TextField(null=True, blank=True) + + def __str__(self): + return f'{self.counterparty} kirim shartnomasa: {self.price} {self.currency}' + + class Meta: + verbose_name = 'Kirim Shartnomasi' + verbose_name_plural = 'Kirim Shartnomalari' \ No newline at end of file