add: add new api for expence
This commit is contained in:
@@ -5,5 +5,5 @@ from core.apps.finance.models import Expence
|
||||
|
||||
@admin.register(Expence)
|
||||
class ExpenceAdmin(admin.ModelAdmin):
|
||||
list_display = ['id', 'price', 'cash_transaction']
|
||||
list_display = ['id', 'price', 'cash_transaction', 'status']
|
||||
|
||||
18
core/apps/finance/migrations/0024_expence_status.py
Normal file
18
core/apps/finance/migrations/0024_expence_status.py
Normal file
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 5.2.4 on 2025-09-24 18:44
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('finance', '0023_alter_expencecontract_project_folder'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='expence',
|
||||
name='status',
|
||||
field=models.CharField(blank=True, choices=[('CANCELLED', 'rad etildi'), ('PENDING', 'kutilmoqda'), ('CONFIRMED', 'tasdiqlangan')], default='PENDING', max_length=20, null=True),
|
||||
),
|
||||
]
|
||||
@@ -7,6 +7,11 @@ from core.apps.accounts.models import User
|
||||
|
||||
|
||||
class Expence(BaseModel):
|
||||
STATUS = (
|
||||
('CANCELLED', 'rad etildi'),
|
||||
('PENDING', 'kutilmoqda'),
|
||||
('CONFIRMED', 'tasdiqlangan'),
|
||||
)
|
||||
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='expences', null=True)
|
||||
cash_transaction = models.ForeignKey(CashTransaction, on_delete=models.CASCADE, related_name='expences')
|
||||
payment_type = models.ForeignKey(PaymentType, on_delete=models.CASCADE, related_name='expences')
|
||||
@@ -35,6 +40,7 @@ class Expence(BaseModel):
|
||||
comment = models.TextField(null=True, blank=True)
|
||||
audit = models.CharField(max_length=200, null=True, blank=True)
|
||||
file = models.FileField(null=True, blank=True, upload_to='finance/expence/files/')
|
||||
status = models.CharField(max_length=20, choices=STATUS, default='PENDING', null=True, blank=True)
|
||||
|
||||
def __str__(self):
|
||||
return f'{self.cash_transaction} kassa uchun chiqim {self.price}'
|
||||
|
||||
@@ -65,6 +65,7 @@ urlpatterns = [
|
||||
path('list/', expence_views.ExpenceListApiView.as_view()),
|
||||
path('create/', expence_views.ExpenceCreateApiView.as_view()),
|
||||
path('<uuid:counterparty_id>/list/', expence_views.CounterpartyExpenceListApiView.as_view()),
|
||||
path('<uuid:id>/change-status/', expence_views.ChangeExpenceStatusApiView.as_view()),
|
||||
]
|
||||
)),
|
||||
path('income_contract/', include(
|
||||
|
||||
@@ -57,8 +57,11 @@ class ExpenceListApiView(generics.GenericAPIView):
|
||||
|
||||
def get(self, request):
|
||||
cash_transaction_ids = request.query_params.getlist('cash_transaction')
|
||||
status = request.query_params.get('status')
|
||||
if cash_transaction_ids:
|
||||
self.queryset = self.queryset.filter(cash_transaction__in=cash_transaction_ids)
|
||||
self.queryset = self.queryset.filter(cash_transaction__in=cash_transaction_ids).distinct()
|
||||
if status:
|
||||
self.queryset = self.queryset.filter(status=status).distinct()
|
||||
page = self.paginate_queryset(self.filter_queryset(self.queryset))
|
||||
if page is not None:
|
||||
serializer = self.serializer_class(page, many=True)
|
||||
@@ -81,3 +84,27 @@ class CounterpartyExpenceListApiView(generics.GenericAPIView):
|
||||
ser = self.serializer_class(page, many=True)
|
||||
return self.get_paginated_response(ser.data)
|
||||
|
||||
|
||||
class ChangeExpenceStatusApiView(views.APIView):
|
||||
permission_classes = [HasRolePermission]
|
||||
|
||||
def post(self, request, id):
|
||||
expence = get_object_or_404(Expence, id=id)
|
||||
status = request.data.get('status', None)
|
||||
if status is None:
|
||||
return Response(
|
||||
{
|
||||
'success': False,
|
||||
'message': 'status field is required, choices PENDING, CANCELLED, CONFIRMED'
|
||||
},
|
||||
status=400
|
||||
)
|
||||
expence.status = status
|
||||
expence.save()
|
||||
return Response(
|
||||
{
|
||||
'success': True,
|
||||
'message': 'expence status successfully updated',
|
||||
},
|
||||
status=200
|
||||
)
|
||||
Reference in New Issue
Block a user