Some checks failed
Build and Push to Docker Hub / build-test-push (push) Failing after 1m46s
125 lines
4.4 KiB
Python
125 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_company": f"{market.company_name}",
|
|
},
|
|
status=status.HTTP_200_OK,
|
|
)
|