gold eggs backend
Some checks failed
Build and Push to Docker Hub / build-test-push (push) Failing after 1m55s
Some checks failed
Build and Push to Docker Hub / build-test-push (push) Failing after 1m55s
This commit is contained in:
113
core/apps/eggs/views/add_debt.py
Normal file
113
core/apps/eggs/views/add_debt.py
Normal file
@@ -0,0 +1,113 @@
|
||||
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")
|
||||
price = Decimal(request.data.get("price"))
|
||||
|
||||
if not all([market_id, price]):
|
||||
return Response(
|
||||
{"error": "Both market_id and price are required."},
|
||||
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"
|
||||
|
||||
send_sms_msg.delay(market.user_id.phone, message)
|
||||
|
||||
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,
|
||||
)
|
||||
Reference in New Issue
Block a user