Files
eggs-backend/core/apps/eggs/views/add_debt.py
husanjon 477e79ed80
Some checks failed
Build and Push to Docker Hub / build-test-push (push) Failing after 1m55s
restore composer.json, add mysqli extension
2026-04-15 15:38:41 +05:00

126 lines
4.4 KiB
Python

from decimal import Decimal
from core.apps.eggs.models.debt import Debt, DebtTypeEnum
from drf_yasg import openapi
from drf_yasg.utils import swagger_auto_schema
from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import APIView
from core.apps.eggs.models import History, Monitoring, Notification
from core.apps.eggs.models.market import Market
from core.http.models import User
from core.apps.eggs.tasks.send_sms import send_sms_msg
class AddDebtView(APIView):
@swagger_auto_schema(
request_body=openapi.Schema(
type=openapi.TYPE_OBJECT,
properties={
"market_id": openapi.Schema(
type=openapi.TYPE_INTEGER,
description="Market ID",
),
"price": openapi.Schema(
type=openapi.TYPE_NUMBER,
description="Price",
),
},
),
responses={
200: openapi.Schema(
type=openapi.TYPE_OBJECT,
properties={
"message": openapi.Schema(
type=openapi.TYPE_STRING,
description="Debt added successfully.",
),
},
),
400: openapi.Schema(
type=openapi.TYPE_OBJECT,
properties={
"error": openapi.Schema(
type=openapi.TYPE_STRING,
description="Detailed error message when the request fails with a 400 status code.",
),
},
),
404: openapi.Schema(
type=openapi.TYPE_OBJECT,
properties={
"error": openapi.Schema(
type=openapi.TYPE_STRING,
description="Detailed error message when the request fails with a 404 status code.",
),
},
),
},
)
def post(self, request, *args, **kwargs):
market_id = request.data.get("market_id")
raw_price = request.data.get("price")
if not all([market_id, raw_price]):
return Response(
{"error": "Both market_id and price are required."},
status=status.HTTP_400_BAD_REQUEST,
)
try:
price = Decimal(str(raw_price))
except Exception:
return Response(
{"error": "Invalid price value."},
status=status.HTTP_400_BAD_REQUEST,
)
try:
market = Market.objects.get(pk=market_id)
except Market.DoesNotExist:
return Response(
{"error": "Market with given id does not exist."},
status=status.HTTP_404_NOT_FOUND,
)
Debt.objects.create(
market=market, debt_price=price, debt_type=DebtTypeEnum.ADDED.value
)
History.objects.create(
content_object=market,
action="add_debt_created",
user_id=request.user,
comment=f"Qarz qo'shildi: {price}",
avatar=market.avatar,
reason=f"Qarz qo'shildi: {price}",
created_by=market.name,
created_who=f"{request.user.first_name} {request.user.last_name}",
)
notification_users = User.objects.filter(role="admin")
for user in notification_users:
Notification.objects.create(
user=user,
title=f"Qarz muvaffaqiyatli qo'shildi {price} so'm",
body=f"Qarz muvaffaqiyatli qo'shildi {market.name} ga {price} so'm",
)
message = f"Hurmatli {market.user_id.first_name} {market.user_id.last_name}, Sizning Gold-eggs.uz tuxum yetkazib berish xizmati ilovasidagi xaridingizga {price} so'm qarz qo'shib qo'yildi Umumiy balans: {market.debt_unpaid} so'm Batafsil: +998914249515"
try:
send_sms_msg.delay(market.user_id.phone, message)
except Exception:
pass
return Response(
{
"message": "Qarz muvaffaqiyatli qo'shildi.",
"debt_unpaid": f"{market.debt_unpaid}",
"market_name": f"{market.name}",
"market_phone": f"{market.phone}",
"market_company": f"{market.company_name}",
},
status=status.HTTP_200_OK,
)