add: income-expence update api

This commit is contained in:
behruz-dev
2025-09-25 17:16:45 +05:00
parent e93f91fdb1
commit dc079480e6
5 changed files with 154 additions and 4 deletions

View File

@@ -137,3 +137,53 @@ class ExpenceListSerializer(serializers.ModelSerializer):
class ExpenceDeleteSerializer(serializers.Serializer):
comment = serializers.CharField()
class ExpenceUpdateSerializer(serializers.ModelSerializer):
class Meta:
model = Expence
fields = [
'project_folder', 'project', 'price', 'expence_type', 'counterparty',
'date', 'comment', 'audit', 'file',
]
extra_kwargs = {
'price': {'required': False},
}
def update(self, instance, validated_data):
old_price = instance.price
instance.project_folder = validated_data.get('project_folder', instance.project_folder)
instance.project = validated_data.get('project', instance.project)
instance.price = validated_data.get('price', instance.price)
instance.expence_type = validated_data.get('expence_type', instance.expence_type)
instance.counterparty = validated_data.get('counterparty', instance.counterparty)
instance.date = validated_data.get('date', instance.date)
instance.comment = validated_data.get('comment', instance.comment)
instance.audit = validated_data.get('audit', instance.audit)
instance.file = validated_data.get('file', instance.file)
if validated_data.get('price'):
cash_transaction = instance.cash_transaction
payment_type = instance.payment_type
if old_price > validated_data.get('price'):
if instance.currency == 'uzs':
cash_transaction.expence_balance_uzs -= (old_price - validated_data.get('price'))
cash_transaction.total_balance_uzs -= (old_price - validated_data.get('price'))
payment_type.total_uzs -= (old_price - validated_data.get('price'))
else:
cash_transaction.expence_balance_usd -= (old_price - validated_data.get('price'))
cash_transaction.total_balance_usd -= (old_price - validated_data.get('price'))
payment_type.total_usd -= (old_price - validated_data.get('price'))
elif old_price < validated_data.get('price'):
if instance.currency == 'uzs':
cash_transaction.expence_balance_uzs += (old_price - validated_data.get('price'))
cash_transaction.total_balance_uzs += (old_price - validated_data.get('price'))
payment_type.total_uzs += (old_price - validated_data.get('price'))
else:
cash_transaction.expence_balance_usd += (old_price - validated_data.get('price'))
cash_transaction.total_balance_usd += (old_price - validated_data.get('price'))
payment_type.total_usd += (old_price - validated_data.get('price'))
cash_transaction.save()
payment_type.save()
instance.save()
return instance

View File

@@ -135,3 +135,53 @@ class IncomeCreateSerializer(serializers.ModelSerializer):
class IncomeDeleteSerializer(serializers.Serializer):
comment = serializers.CharField()
class IncomeUpdateSerializer(serializers.ModelSerializer):
class Meta:
model = Income
fields = [
'project_folder', 'project', 'price', 'type_income', 'counterparty',
'date', 'comment', 'audit', 'file',
]
extra_kwargs = {
'price': {'required': False},
}
def update(self, instance, validated_data):
old_price = instance.price
instance.project_folder = validated_data.get('project_folder', instance.project_folder)
instance.project = validated_data.get('project', instance.project)
instance.price = validated_data.get('price', instance.price)
instance.type_income = validated_data.get('type_income', instance.type_income)
instance.counterparty = validated_data.get('counterparty', instance.counterparty)
instance.date = validated_data.get('date', instance.date)
instance.comment = validated_data.get('comment', instance.comment)
instance.audit = validated_data.get('audit', instance.audit)
instance.file = validated_data.get('file', instance.file)
if validated_data.get('price'):
cash_transaction = instance.cash_transaction
payment_type = instance.payment_type
if old_price > validated_data.get('price'):
if instance.currency == 'uzs':
cash_transaction.income_balance_uzs -= (old_price - validated_data.get('price'))
cash_transaction.total_balance_uzs -= (old_price - validated_data.get('price'))
payment_type.total_uzs -= (old_price - validated_data.get('price'))
else:
cash_transaction.income_balance_usd -= (old_price - validated_data.get('price'))
cash_transaction.total_balance_usd -= (old_price - validated_data.get('price'))
payment_type.total_usd -= (old_price - validated_data.get('price'))
elif old_price < validated_data.get('price'):
if instance.currency == 'uzs':
cash_transaction.income_balance_uzs += (old_price - validated_data.get('price'))
cash_transaction.total_balance_uzs += (old_price - validated_data.get('price'))
payment_type.total_uzs += (old_price - validated_data.get('price'))
else:
cash_transaction.income_balance_usd += (old_price - validated_data.get('price'))
cash_transaction.total_balance_usd += (old_price - validated_data.get('price'))
payment_type.total_usd += (old_price - validated_data.get('price'))
cash_transaction.save()
payment_type.save()
instance.save()
return instance

View File

@@ -51,6 +51,7 @@ urlpatterns = [
path('create/', income_views.IncomeCreateApiView.as_view()),
path('<uuid:counterparty_id>/list/', income_views.CounterpartyIncomeListApiView.as_view()),
path('<uuid:id>/delete/', income_views.IncomeDeleteApiView.as_view()),
path('<uuid:id>/update/', income_views.IncomeUpdateApiView.as_view()),
]
)),
path('expence_type/', include(
@@ -68,6 +69,7 @@ urlpatterns = [
path('<uuid:counterparty_id>/list/', expence_views.CounterpartyExpenceListApiView.as_view()),
path('<uuid:id>/change-status/', expence_views.ChangeExpenceStatusApiView.as_view()),
path('<uuid:id>/delete/', expence_views.ExpenceDeleteApiView.as_view()),
path('<uuid:id>/update/', expence_views.ExpenceUpdateApiView.as_view()),
]
)),
path('income_contract/', include(

View File

@@ -143,3 +143,27 @@ class ExpenceDeleteApiView(generics.GenericAPIView):
'message': 'Expence deleted',
}, status=200
)
class ExpenceUpdateApiView(generics.GenericAPIView):
serializer_class = serializers.ExpenceUpdateSerializer
queryset = Expence.objects.all()
permission_classes = [HasRolePermission]
def patch(self, request, id):
expence = get_object_or_404(Expence, id=id)
serializer = self.serializer_class(data=request.data, instance=expence)
if serializer.is_valid(raise_exception=True):
serializer.save()
return Response(
{
'success': True,
'message': 'Expence updated'
}, status=200
)
return Response(
{
'success': False,
'message': serializer.errors,
}, status=400
)

View File

@@ -111,3 +111,27 @@ class IncomeDeleteApiView(generics.GenericAPIView):
'message': 'Income deleted',
}, status=200
)
class IncomeUpdateApiView(generics.GenericAPIView):
serializer_class = serializers.IncomeUpdateSerializer
queryset = Income.objects.all()
permission_classes = [HasRolePermission]
def patch(self, request, id):
income = get_object_or_404(Income, id=id)
serializer = self.serializer_class(data=request.data, instance=income)
if serializer.is_valid(raise_exception=True):
serializer.save()
return Response(
{
'success': True,
'message': 'Income updated'
}, status=200
)
return Response(
{
'success': False,
'message': serializer.errors,
}, status=400
)