19785 lines
1.1 MiB
19785 lines
1.1 MiB
import random
|
||
import string
|
||
import threading
|
||
from datetime import datetime, timedelta
|
||
|
||
import jdatetime
|
||
import requests
|
||
from django.contrib.auth.models import User, Group
|
||
from django.db.models import Case, When, Avg
|
||
from django.http import JsonResponse, HttpResponse
|
||
from django.http import QueryDict
|
||
from django.shortcuts import get_object_or_404
|
||
from django.utils import timezone
|
||
from django.views.decorators.csrf import csrf_exempt
|
||
from django_filters.rest_framework import DjangoFilterBackend
|
||
from oauth2_provider.contrib.rest_framework import (
|
||
TokenHasReadWriteScope,
|
||
)
|
||
from rest_framework import status
|
||
from rest_framework import viewsets
|
||
from rest_framework.decorators import permission_classes, api_view
|
||
from rest_framework.generics import GenericAPIView
|
||
from rest_framework.pagination import PageNumberPagination
|
||
from rest_framework.permissions import AllowAny
|
||
from rest_framework.response import Response
|
||
from rest_framework.views import APIView
|
||
|
||
from authentication.arvan_image.arvan_storage import upload_object_resize
|
||
from authentication.models import UserProfile, SystemUserProfile, City, Province, SystemAddress
|
||
from authentication.serializer.serializer import SystemUserProfileSerializer
|
||
from authentication.sms_management import kill_request_province_sms, province_kill_request_to_kill_house_sms, \
|
||
kill_request_delete_province_sms, province_kill_request_accept_sms, document_discrepancy_sms, export_code_sms, \
|
||
car_allocation_vet_farm_sms, delete_car_allocation_vet_farm_sms, send_sms_for_bar_difference_request, \
|
||
confirm_price_poultry_request_direct_buying_sms, send_sms_fro_kill_request_market, send_sms_for_sale_bar
|
||
from authentication.views import ARTA_URL_CHANGE_MOBILE_NUMBER
|
||
from bot_eata import bot_eitaa_for_each_province_kill_request, bot_eitaa_for_each_delete_province_kill_request, \
|
||
send_single_bar_to_eitaa
|
||
from deposit_id import market_code_state
|
||
from general_urls import base_url_sms, base_url_for_sms_report
|
||
from panel.KillHouse.helpers import kill_house_requests_product_warehousing, kill_house_free_buying_product_warehousing, \
|
||
kill_house_free_sale_product_warehousing, get_finance_info, generate_unique_bar_code, \
|
||
send_ticket_for_bar_difference_request, market_poultry_request_remain_quantity, market_kill_request_share_quantity, \
|
||
calculate_governmental_quota, check_kill_house_remain_limitation_weight
|
||
from panel.KillHouse.serializers import (
|
||
KillHouseSerializer,
|
||
KillHouseRequestSerializer,
|
||
KillRequestSerializer,
|
||
KillHouseAssignmentInformationSerializer,
|
||
KillHouseCheckRequestSerializer,
|
||
KillHouseADDCARSerializer,
|
||
VetSerializer,
|
||
VetCheckRequestSerializer,
|
||
ProvinceKillRequestSerializer,
|
||
KillHouseRequestExchangeSerializer,
|
||
KillHouseRequestExchangeReserveSerializer,
|
||
KillHouseRequestExchangeAddCarSerializer,
|
||
KillHouseDriverSerializer,
|
||
KillHouseOperatorSerializer,
|
||
|
||
KillHouseRequestActionSerializer,
|
||
|
||
KillHouseRequestActionWinnerSerializer, DriverRequestCancelSerializer, KillHouseVetSerializer,
|
||
KillHouseComplaintSerializer, CheckKillHouseComplaintSerializer, CheckUnusualCasualtiesSerializer,
|
||
KillHousePercentageSerializer, KillHouseAssignmentImagesSerializer, KillRequestFactorSerializer,
|
||
KillRequestFactorPaymentSerializer, AutomaticKillRequestSerializer, KillHouseCreditorsSerializer,
|
||
KillHouseAllowVetSerializer, KillHouseWareHouseSerializer, KillHouseFreeBarInformationSerializer,
|
||
KillHouseRequestForBarManagementSerializer, ProvinceKillRequestProvinceWageSerializer,
|
||
KillHouseForProvinceWageSerializer, KillHouseforPurchaseRequestSerializer, KillHousePurchaseRequestSerializer,
|
||
KillHouseForAutomaticStewardAllocationSerializer, KillHouseForTotalReportAutomaticStewardAllocationSerializer,
|
||
PoultryRequestLetterForProvinceVetSerializer,
|
||
ProvinceKillRequestForKillingInformationDiscrepancyReportSerializer, KillHouseRequestForDiffrentBarInfoSerializer,
|
||
PoultryRequestForTotalInformationSerializer, PoultryRequestForTotalInformationInTableSerializer,
|
||
KillHouseWareHouseForDailyBroadCastOInDetailsSerializer, KillHouseAssignmentInformationForCompletedLoadsSerializer,
|
||
KillHouseFreeSaleBarInformationSerializer, KillHouseWageForTotalDashbordSerializer,
|
||
KillHouseForProvinceWageWithDateSerializer, SlaughterHouseTransactionSerializer, KillHouseWageSerializer,
|
||
KillHouseForFreeBarWageSerializer, KillHouseForFreeBarWageWithDateSerializer,
|
||
KillHouseForTotalProvinceWageTransactionSerializer, KillHouseForTotalProvinceWageTransactionWithDAteSerializer,
|
||
KillHouseForKillHouseRequestWageWithDateSerializer, KillHouseForKillHouseRequestWageSerializer,
|
||
KillHouseFreeBarInformationForWageTotalSerializer,
|
||
TotalWageInformationKillHouseExclusiveKillerSerializer, KillHouseLetterForProvinceSerializer,
|
||
PoultryRequestoutProvinceSerializer, BarDocumentStatusSerializer, GeneralKillHouseSerializer,
|
||
VetKillHouseSerializer, VetFarmListSerializer, KillHouseForKillHouseVetKillHouseSerializer,
|
||
KillHouseForFreeSaleBarInformationViewSetSerializer,
|
||
KillHouseForFreeSaleBarInformationViewSetWithDateSerializer, KillHouseForNewWageInormationSerializer,
|
||
KillHouseRequestForInputBarsSerializer, PosKillHouseSerializer, KillHouseForProvinceWareHouseDashboardSerializer,
|
||
ParentCompanyKillHouseForNewWageInormationSerializer, KillHouseForColdHouseSerializer,
|
||
KillHouseColdHousesSerializer, BarDifferenceRequestSerializer, distributionKillHouseSerializer,
|
||
KillHouseForPerformanceDashboardSerializer, DirectBuyingPaymentSerializer, KillRequestForDirectBuyingSerializer,
|
||
ProvinceKillRequestForDirectBuyingSerializer, KillHouseForCommonlyUsedSerializer, KillHouseMarketInfoSerializer,
|
||
KillHouseForColdHouseAllocationSerializer, KillHouseForSegmentationSerializer,
|
||
KillHouseComparativeInformationSerializer, KillRequestForDirectBuyingTrueSerializer,
|
||
ReturnProvinceKillRequestSerializer, TotalKillHouseRemainWeightViewSetSerializer,
|
||
TotalKillHouseWarehouseArchiveDashboardSerializer, PspKillHouseSerializer
|
||
)
|
||
from panel.ProvinceOperator.serializers import ProvinceFactorToKillHouseSerializer, StewardAllocationSerializer
|
||
from panel.ProvinceOperator.views import ARVAN_Kill_house_Factor_URL
|
||
from panel.ReportingPanel.helper import kill_house_request_filterset_fields, \
|
||
poultry_request_new_fields
|
||
from panel.ReportingPanel.views import get_gid_out_province
|
||
from panel.VetFarm.serializers import VetFarmSerializer
|
||
from panel.admin import PROJECT_API_KEY
|
||
from panel.filterset import KillHouseDriverFilterSet, VetFilterSet, KillHouseRequestFilterSet, \
|
||
ProvinceKillRequestFilterSet, KillHouseFilterSet, KillRequestFilterSet, PoultryRequestFilterSet, \
|
||
KillHouseFreeBarInformationFilterSet, DashboardEnterLoadInformationFilterSet, \
|
||
DashboardKillHouseFreeBarInformationFilterSet, VetFarmAndKillHouseFilterSet, ProvinceKillRequestNewFilterSet, \
|
||
DashboardKillRequestFilterSet, KillHouseFreeSaleBarInformationFilterSet, \
|
||
BarDifferenceRequestFilterSet, DirectBuyingPaymentFilterSet, ReturnProvinceKillRequestFilterSet
|
||
from panel.helper import build_query
|
||
from panel.models import (
|
||
KillHouse,
|
||
KillHouseRequest,
|
||
KillRequest,
|
||
ProvinceCheckOperatorRequest,
|
||
KillHouseCheckRequest,
|
||
KillHouseAssignmentInformation,
|
||
ProvinceFactorToKillHouse,
|
||
KillHouseADDCAR,
|
||
Vet,
|
||
VetCheckRequest,
|
||
ProvinceKillRequest,
|
||
KillHouseRequestExchange,
|
||
KillHouseRequestExchangeReserve,
|
||
PoultryRequestExchange,
|
||
KillHouseRequestExchangeAddCar,
|
||
PoultryRequest,
|
||
KillHouseDriver,
|
||
KillHouseOperator,
|
||
VetFarm,
|
||
KillHouseRequestAction,
|
||
KillHouseRequestActionWinner, DriverRequestCancel, KillHouseVet, PercentageOfLosses, KillHouseComplaint,
|
||
CheckKillHouseComplaint, ProvinceFactorToKillHouseForPoultry, CheckUnusualCasualties, KillHousePercentage,
|
||
TotalPoultryRequestQuantity, KillHouseAssignmentImages, VetSupervisor, KillRequestFactor, KillRequestFactorPayment,
|
||
Pricing, AutomaticKillRequest, KillHouseCreditors, ShareOfAllocation, ProvinceOperator, SmsLicense,
|
||
KillHouseAllowVet, Wallet, ProvinceAllowKillHouseRegisterCar, PoultryHatching, Poultry,
|
||
AutoAcceptProvinceKillRequest, KillHouseWareHouse, KillHouseFreeBarInformation, Guilds,
|
||
CityOperator, PoultryRequestAuction, ProvinceAllowKillHouseChooseStewardGuilds, KillHouseHourLimit,
|
||
ProvinceAllowKillHouseDirectBuying, KillHousePurchaseRequest, Steward, StewardAllocation, StewardWareHouse,
|
||
ColdHouseAllocations, KillHouseFreeSaleBarInformation, OperationLimitation,
|
||
EvacuationPermit, TimeRange, SlaughterHouseTransaction, WageType, PercentageOfWageType,
|
||
InternalTransaction, BarDocumentStatus, VetFarmAggregatePermission, OutProvinceCarcassesBuyer, RolesProducts,
|
||
AutomaticDirectBuyingPermission, FreeSaleWithinprovince, CityOperatorCheckRequest, POSMachine, ColdHouse,
|
||
BarDifferenceRequest, ChickenAgeRange, RequestLimitation, PriceConfirmation, DirectBuyingPayment,
|
||
DirectBuyingVerification, FinePermission, IndexWeightCategory, PosSegmentation, RestrictionCarcassDistribution,
|
||
AllowRegisterCodeForKillHouseFreeSaleBarInformation, ProductsTransactions,
|
||
LimitationForDirectPurchaseAndBarInformation, WarehouseArchive
|
||
)
|
||
# آدرس پایه مربوط به ذخیره عکس در گالری مربوط به کشتارگاه در استوریج آروان
|
||
from panel.poultry.helpers import poultry_prediction, create_update_chicken_commission_prices
|
||
from panel.poultry.serializers import PoultryRequestSerializer, PoultryRequestForKillingInformationSerializer
|
||
from ticket.bucket import upload_to_liara
|
||
from ticket.helper import send_image_to_server
|
||
|
||
ARVAN_Kill_house_URL = 'https://profileimagedefault.s3.ir-thr-at1.arvanstorage.ir/'
|
||
ARTA_URL_REGISTER = "https://userbackend.rasadyar.com/api/register/"
|
||
|
||
|
||
class CustomPagination(PageNumberPagination):
|
||
page_size = 10
|
||
|
||
|
||
from django.db.models import Q
|
||
|
||
|
||
def get_exclusive_killer_operation(kill_houses):
|
||
for kill_house in kill_houses:
|
||
total_unpaid_wage = 0
|
||
total_paid_wage = 0
|
||
province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user=kill_house,
|
||
state__in=('pending', 'accepted'), trash=False,
|
||
return_to_province=False,
|
||
first_car_allocated_quantity=0,
|
||
archive_wage=False,
|
||
)
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(Q(killer=kill_house) & Q(killhouse_user=kill_house)) | Q(
|
||
Q(killer__isnull=True) & Q(killhouse_user=kill_house)) | Q(
|
||
Q(killer__isnull=True) | Q(killer=kill_house)),
|
||
# killhouse_user=kill_house,
|
||
archive_wage=False,
|
||
trash=False
|
||
)
|
||
|
||
kill_house_requests = kill_house_requests.filter(Q(killer=kill_house) | Q(killhouse_user=kill_house))
|
||
|
||
free_bars = KillHouseFreeBarInformation.objects.filter(kill_house=kill_house, archive_wage=False,
|
||
trash=False)
|
||
|
||
total_unpaid_wage += province_kill_requests.aggregate(total=Sum('total_wage_amount'))[
|
||
'total'] or 0
|
||
total_unpaid_wage += free_bars.aggregate(total=Sum('total_wage_amount'))[
|
||
'total'] or 0
|
||
total_unpaid_wage += \
|
||
kill_house_requests.aggregate(total=Sum(F('accepted_real_weight') * F('province_kill_request__wage')))[
|
||
'total'] or 0
|
||
slaughter_transactions = InternalTransaction.objects.filter(
|
||
kill_house=kill_house, status='completed',
|
||
trash=False)
|
||
|
||
total_paid_wage += slaughter_transactions.aggregate(total=Sum('amount'))[
|
||
'total'] or 0
|
||
total_amount = total_unpaid_wage - total_paid_wage
|
||
kill_house_purchase = KillHousePurchaseRequest.objects.filter(limitation=True, kill_house=kill_house).first()
|
||
if kill_house_purchase:
|
||
if total_amount >= kill_house_purchase.limitation_number:
|
||
kill_house.show_exclusive = False
|
||
kill_house.save()
|
||
else:
|
||
kill_house.show_exclusive = True
|
||
kill_house.save()
|
||
else:
|
||
kill_house.show_exclusive = True
|
||
kill_house.save()
|
||
|
||
|
||
def update_kill_house_requests(province_kill_request, poultry_request):
|
||
# gate_way_percentage = PaymentGatewayPercentage.objects.get(trash=False)
|
||
kill_house_requests = KillHouseRequest.objects.filter(province_kill_request=province_kill_request, trash=False)
|
||
|
||
total_kill_house_requests_quantity = kill_house_requests.aggregate(total_quantity=Sum('accepted_real_quantity'))[
|
||
'total_quantity']
|
||
total_kill_house_requests_weight = kill_house_requests.aggregate(total_weight=Sum('accepted_real_weight'))[
|
||
'total_weight']
|
||
total_first_allocated_cars = kill_house_requests.aggregate(total_weight=Sum('quantity'))[
|
||
'total_weight']
|
||
|
||
province_kill_request.total_killed_quantity = total_kill_house_requests_quantity or province_kill_request.main_quantity
|
||
province_kill_request.first_car_allocated_quantity = total_first_allocated_cars or 0
|
||
province_kill_request.total_killed_weight = total_kill_house_requests_weight or int(
|
||
province_kill_request.main_quantity * poultry_request.Index_weight)
|
||
province_kill_request.total_wage_amount = province_kill_request.total_killed_weight * province_kill_request.wage
|
||
|
||
province_kill_request.save()
|
||
|
||
union_percent = province_kill_request.union_share_percent / 100 if province_kill_request.union_share_percent > 0 else 0
|
||
company_percent = province_kill_request.company_share_percent / 100 if province_kill_request.company_share_percent > 0 else 0
|
||
guilds_percent = province_kill_request.guilds_share_percent / 100 if province_kill_request.guilds_share_percent > 0 else 0
|
||
city_share_percent = province_kill_request.city_share_percent / 100 if province_kill_request.city_share_percent > 0 else 0
|
||
wallet_share_percent = province_kill_request.wallet_share_percent / 100 if province_kill_request.wallet_share_percent > 0 else 0
|
||
other_share_percent = province_kill_request.other_share_percent / 100 if province_kill_request.other_share_percent > 0 else 0
|
||
province_kill_request.union_share = int(union_percent * province_kill_request.total_wage_amount)
|
||
province_kill_request.company_share = int(company_percent * province_kill_request.total_wage_amount)
|
||
province_kill_request.guilds_share = int(guilds_percent * province_kill_request.total_wage_amount)
|
||
province_kill_request.city_share = int(city_share_percent * province_kill_request.total_wage_amount)
|
||
province_kill_request.wallet_share = int(wallet_share_percent * province_kill_request.total_wage_amount)
|
||
province_kill_request.other_share = int(other_share_percent * province_kill_request.total_wage_amount)
|
||
province_kill_request.save()
|
||
|
||
|
||
def update_province_kill_requests(poultry_hatching):
|
||
province_kill_requests = ProvinceKillRequest.objects.filter(
|
||
trash=False,
|
||
state__in=('pending', 'accepted'),
|
||
return_to_province=False,
|
||
province_request__poultry_request__hatching=poultry_hatching
|
||
)
|
||
|
||
total_killed_quantity = province_kill_requests.aggregate(total=Sum('total_killed_quantity'))['total']
|
||
total_extra_quantity = province_kill_requests.aggregate(total=Sum('extra_killed_quantity'))['total']
|
||
|
||
free_filter = Q(province_request__poultry_request__free_sale_in_province=True, state__in=('pending', 'accepted'),
|
||
trash=False)
|
||
governmental_filter = ~free_filter
|
||
|
||
total_free_quantity = \
|
||
province_kill_requests.filter(free_filter, province_request__poultry_request__export=False).aggregate(
|
||
total=Sum('total_killed_quantity'))[
|
||
'total']
|
||
total_free_weight = \
|
||
province_kill_requests.filter(free_filter, province_request__poultry_request__export=False).aggregate(
|
||
total=Sum('total_killed_weight'))['total']
|
||
total_governmental_quantity = \
|
||
province_kill_requests.filter(governmental_filter, province_request__poultry_request__export=False).aggregate(
|
||
total=Sum('total_killed_quantity'))['total']
|
||
total_governmental_weight = \
|
||
province_kill_requests.filter(governmental_filter, province_request__poultry_request__export=False).aggregate(
|
||
total=Sum('total_killed_weight'))['total']
|
||
total_export_quantity = \
|
||
province_kill_requests.filter(province_request__poultry_request__export=True).aggregate(
|
||
total=Sum('total_killed_quantity'))['total']
|
||
total_export_weight = \
|
||
province_kill_requests.filter(province_request__poultry_request__export=True).aggregate(
|
||
total=Sum('total_killed_weight'))['total']
|
||
|
||
poultry_hatching.free_killed_quantity = total_free_weight or 0
|
||
poultry_hatching.free_quantity = total_free_quantity or 0
|
||
poultry_hatching.governmental_killed_quantity = total_governmental_weight or 0
|
||
poultry_hatching.governmental_quantity = total_governmental_quantity or 0
|
||
poultry_hatching.export_killed_weight = total_export_weight or 0
|
||
poultry_hatching.export_killed_quantity = total_export_quantity or 0
|
||
poultry_hatching.extra_killed_quantity = total_extra_quantity or 0
|
||
poultry_hatching.killed_quantity = total_killed_quantity or 0
|
||
|
||
poultry_hatching.save()
|
||
|
||
|
||
class BarDocumentStatusViewset(viewsets.ModelViewSet):
|
||
queryset = BarDocumentStatus.objects.all()
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
serializer_class = BarDocumentStatusSerializer
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
bar_documents_status = BarDocumentStatus.objects.filter(trash=False).order_by('priority_id')
|
||
serializer = self.serializer_class(bar_documents_status, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
def update(self, request, pk=None, *args, **kwargs):
|
||
|
||
if 'priority_list' in request.data:
|
||
priority_list = request.data['priority_list']
|
||
priorities = {item['key']: item['value'] for item in priority_list}
|
||
bar_documents_status = BarDocumentStatus.objects.filter(trash=False).order_by('priority_id')
|
||
for document in bar_documents_status:
|
||
priority_id = priorities.get(str(document.key))
|
||
if priority_id is not None:
|
||
document.priority_id = priority_id
|
||
document.save()
|
||
|
||
return Response({"result": "با موفقیت انجام شد."}, status=status.HTTP_200_OK)
|
||
bar_documents_status = BarDocumentStatus.objects.get(key=request.data['bar_documents_status_key'], trash=False)
|
||
request.data.pop('bar_documents_status_key')
|
||
serializer = self.serializer_class(bar_documents_status)
|
||
serializer.update(instance=bar_documents_status, validated_data=request.data)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
def destroy(self, request, pk=None, *args, **kwargs):
|
||
bar_documents_status = BarDocumentStatus.objects.get(id=pk, trash=False)
|
||
if KillHouseRequest.objects.filter(bar_document_status=bar_documents_status,
|
||
trash=False).exists():
|
||
return Response({"result": "به علت استفاده ار این وضعیت سند بر روی بار امکان حذف وجود ندارد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
bar_documents_status.delete()
|
||
return Response({"result": "با موفقیت حذف شد."},
|
||
status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHouseCreditorsViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseCreditors.objects.all()
|
||
serializer_class = KillHouseCreditorsSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
user = SystemUserProfile.objects.get(user=request.user)
|
||
creditors = KillHouseCreditors.objects.filter(kill_house__system_address__province=user.province).order_by('id')
|
||
serializer_request = self.serializer_class(creditors, many=True)
|
||
return Response(serializer_request.data, status=status.HTTP_200_OK)
|
||
|
||
def update(self, request, pk=None, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
creditors = KillHouseCreditors.objects.get(key=request.data["key"], trash=False)
|
||
request.data.pop('key')
|
||
amount = request.data['amount']
|
||
request.data.pop('amount')
|
||
|
||
creditors.amount -= float(amount)
|
||
creditors.save()
|
||
|
||
serializer = self.serializer_class(creditors)
|
||
serializer.update(instance=creditors, validated_data=request.data)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
# ویوست مربوط به اپراتور کشتارگاه
|
||
class KillHouseOperatorViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseOperator.objects.all()
|
||
serializer_class = KillHouseOperatorSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def retrieve(self, request, pk=None, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
|
||
if 'profile' in request.GET:
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
kill_house_operator = KillHouseOperator.objects.get(user=user, trash=False)
|
||
kill_house_operator_serializer = KillHouseOperatorSerializer(kill_house_operator)
|
||
kill_house = KillHouse.objects.filter(kill_house_operator=kill_house_operator, trash=False)
|
||
kill_house_serializer = KillHouseSerializer(kill_house, many=True)
|
||
profile_info = {
|
||
# 'profile': user_serializer.data,
|
||
'kill_house_operator': kill_house_operator_serializer.data,
|
||
'kill_house': kill_house_serializer.data
|
||
}
|
||
return Response(profile_info, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHouseForKillHouseRequestWageViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouse.objects.all()
|
||
serializer_class = KillHouseForKillHouseRequestWageSerializer
|
||
pagination_class = CustomPagination
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = KillHouseFilterSet
|
||
filterset_fields = [
|
||
'name',
|
||
'kill_house_operator__user__fullname',
|
||
'kill_house_operator__user__mobile',
|
||
'system_address__city__name',
|
||
|
||
]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
|
||
if 'date1' in request.GET:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
if request.GET['role'] == 'ProvinceOPerator':
|
||
kill_houses = KillHouse.objects.filter(pk__in=KillHouseRequest.objects.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
archive_wage=False,
|
||
province_kill_request__union_share__gt=0,
|
||
trash=False).values(
|
||
'killhouse_user'), trash=False)
|
||
elif request.GET['role'] == 'Company':
|
||
kill_houses = KillHouse.objects.filter(pk__in=KillHouseRequest.objects.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
province_kill_request__company_share__gt=0,
|
||
archive_wage=False,
|
||
trash=False).values(
|
||
'killhouse_user'), trash=False)
|
||
elif request.GET['role'] == 'Guilds':
|
||
kill_houses = KillHouse.objects.filter(pk__in=KillHouseRequest.objects.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
province_kill_request__guilds_share__gt=0,
|
||
archive_wage=False,
|
||
trash=False).values(
|
||
'killhouse_user'), trash=False)
|
||
else:
|
||
|
||
kill_houses = KillHouse.objects.filter(pk__in=KillHouseRequest.objects.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
archive_wage=False,
|
||
trash=False).values(
|
||
'killhouse_user'), trash=False)
|
||
else:
|
||
|
||
if request.GET['role'] == 'ProvinceOPerator':
|
||
kill_houses = KillHouse.objects.filter(pk__in=KillHouseRequest.objects.filter(
|
||
province_kill_request__union_share__gt=0,
|
||
archive_wage=False,
|
||
trash=False).values(
|
||
'killhouse_user'), trash=False)
|
||
elif request.GET['role'] == 'Company':
|
||
kill_houses = KillHouse.objects.filter(pk__in=KillHouseRequest.objects.filter(
|
||
province_kill_request__company_share__gt=0,
|
||
archive_wage=False,
|
||
trash=False).values(
|
||
'killhouse_user'), trash=False)
|
||
elif request.GET['role'] == 'Guilds':
|
||
kill_houses = KillHouse.objects.filter(pk__in=KillHouseRequest.objects.filter(
|
||
province_kill_request__guilds_share__gt=0,
|
||
archive_wage=False,
|
||
trash=False).values(
|
||
'killhouse_user'), trash=False)
|
||
else:
|
||
|
||
kill_houses = KillHouse.objects.filter(pk__in=KillHouseRequest.objects.filter(
|
||
archive_wage=False,
|
||
trash=False).values(
|
||
'killhouse_user'), trash=False)
|
||
|
||
if 'search' in request.GET:
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "":
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=kill_houses
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=kill_houses)
|
||
kill_houses = ps.filter()
|
||
else:
|
||
kill_houses = kill_houses
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(kill_houses)
|
||
if page is not None:
|
||
if 'date1' in request.GET:
|
||
serializer = KillHouseForKillHouseRequestWageWithDateSerializer(page, many=True,
|
||
context={'request': request})
|
||
else:
|
||
|
||
serializer = self.get_serializer(page, many=True, context={'request': request})
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
if 'date1' in request.GET:
|
||
serializer = KillHouseForProvinceWageWithDateSerializer(kill_houses, many=True,
|
||
context={'request': request})
|
||
else:
|
||
|
||
serializer = self.get_serializer(kill_houses, many=True, context={'request': request})
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHouseForNewWageInormationViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouse.objects.all()
|
||
serializer_class = KillHouseForNewWageInormationSerializer
|
||
pagination_class = CustomPagination
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = KillHouseFilterSet
|
||
filterset_fields = [
|
||
'name',
|
||
'kill_house_operator__user__fullname',
|
||
'kill_house_operator__user__mobile',
|
||
'system_address__city__name',
|
||
|
||
]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
kill_house_ids = KillHousePercentage.objects.filter(kill_house__type='exclusive', trash=False).values_list(
|
||
'kill_house', flat=True)
|
||
kill_houses = KillHouse.objects.filter(out_province=False, trash=False).exclude(id__in=kill_house_ids).order_by(
|
||
'id')
|
||
serializer = self.get_serializer(kill_houses, many=True, context={'request': request})
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHouseForColdHouseViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouse.objects.all()
|
||
serializer_class = KillHouseForColdHouseSerializer
|
||
pagination_class = CustomPagination
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = KillHouseFilterSet
|
||
filterset_fields = [
|
||
'name',
|
||
'kill_house_operator__user__fullname',
|
||
'kill_house_operator__user__mobile',
|
||
'system_address__city__name',
|
||
|
||
]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
kill_houses = KillHouse.objects.filter(out_province=False, trash=False,
|
||
pk__in=ColdHouse.objects.filter(kill_house__isnull=False).values_list(
|
||
'kill_house', flat=True)).order_by('id')
|
||
if 'search' in request.GET:
|
||
if request.GET['search'] == 'filter':
|
||
kill_houses_list = []
|
||
if request.GET['value'] != "":
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=kill_houses
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=kill_houses)
|
||
kill_houses_list = ps.filter()
|
||
kill_houses = [] if len(kill_houses_list) == 0 else kill_houses_list
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(kill_houses)
|
||
if page is not None:
|
||
serializer = self.get_serializer(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
serializer = self.get_serializer(kill_houses, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHouseColdHousesViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouse.objects.all()
|
||
serializer_class = KillHouseColdHousesSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
kill_houses = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).first()
|
||
serializer = self.get_serializer(kill_houses)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class ParentCompanyKillHouseForNewWageInormationViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouse.objects.all()
|
||
serializer_class = ParentCompanyKillHouseForNewWageInormationSerializer
|
||
permission_classes = [AllowAny]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
kill_houses = KillHouse.objects.filter(out_province=False, trash=False).order_by('id')
|
||
serializer = self.get_serializer(kill_houses, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHouseForProvinceWareHouseDashboardViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouse.objects.filter(out_province=False, trash=False).order_by('id')
|
||
serializer_class = KillHouseForProvinceWareHouseDashboardSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
role = request.GET.get('role')
|
||
kill_house_filters = {'out_province': False, 'active': True, 'trash': False}
|
||
if role in ['CityJahad']:
|
||
kill_house_filters['kill_house_operator__user__city'] = user.city
|
||
|
||
kill_houses = KillHouse.objects.filter(**kill_house_filters).order_by(
|
||
'id')
|
||
|
||
kill_houses = kill_houses.annotate(
|
||
allocation_count=Count(
|
||
'kill_house_steward_allocation',
|
||
filter=Q(kill_house_steward_allocation__receiver_state__in=['pending', 'accepted'])
|
||
)
|
||
).order_by(
|
||
'-allocation_count'
|
||
)
|
||
serializer = self.get_serializer(kill_houses, many=True, context={'request': request})
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHouseForTotalProvinceWareHouseDashboardViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouse.objects.filter(out_province=False, trash=False).order_by('id')
|
||
serializer_class = KillHouseForProvinceWareHouseDashboardSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
role = request.GET.get('role')
|
||
kill_house_filters = {'out_province': False, 'active': True, 'trash': False}
|
||
if role in ['CityJahad']:
|
||
kill_house_filters['kill_house_operator__user__city'] = user.city
|
||
|
||
kill_houses = KillHouse.objects.filter(**kill_house_filters).order_by(
|
||
'id')
|
||
|
||
kill_houses = kill_houses.annotate(
|
||
allocation_count=Count(
|
||
'kill_house_steward_allocation',
|
||
filter=Q(kill_house_steward_allocation__receiver_state__in=['pending', 'accepted'])
|
||
)
|
||
).order_by(
|
||
'-allocation_count'
|
||
)
|
||
products = RolesProducts.objects.filter(kill_house__in=kill_houses, trash=False, name='مرغ گرم')
|
||
|
||
# products = RolesProducts.objects.filter(kill_house__in=kill_houses, trash=False)
|
||
# product_remain_weight = products.aggregate(total=Sum('total_remain_weight'))[
|
||
# 'total'] or 0
|
||
|
||
if 'date1' in request.GET:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
bars_date1 = date1
|
||
bars_date2 = date2
|
||
# bars_date1 = date1 - timedelta(days=1)
|
||
# bars_date2 = date2 - timedelta(days=1)
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
input_warehouse__in=kill_houses,
|
||
kill_request__recive_date__date__gte=bars_date1,
|
||
kill_request__recive_date__date__lte=bars_date2,
|
||
temporary_trash=False,
|
||
temporary_deleted=False,
|
||
trash=False, calculate_status=True, warehouse=True)
|
||
|
||
kill_house_free_bar_informations = KillHouseFreeBarInformation.objects.filter(Q(date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
buy_type='carcass') | Q(
|
||
create_date__date__gte=date1, create_date__date__lte=date2, buy_type='live'),
|
||
input_warehouse__in=kill_houses,
|
||
trash=False,
|
||
temporary_trash=False,
|
||
temporary_deleted=False,
|
||
calculate_status=True,
|
||
warehouse=True).exclude(
|
||
entered_message='ورود به انبار مجازی')
|
||
kill_house_free_Sale_bar_informations = KillHouseFreeSaleBarInformation.objects.filter(
|
||
kill_house__in=kill_houses,
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
trash=False,
|
||
temporary_trash=False,
|
||
temporary_deleted=False,
|
||
calculate_status=True, warehouse=True)
|
||
kill_house_allocations = StewardAllocation.objects.filter(kill_house__in=kill_houses, trash=False,
|
||
receiver_state__in=('pending', 'accepted'),
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
temporary_trash=False,
|
||
temporary_deleted=False,
|
||
to_cold_house__isnull=True,
|
||
calculate_status=True, warehouse=True)
|
||
segmentations = PosSegmentation.objects.filter(kill_house__in=kill_houses, trash=False,
|
||
date__date__gte=date1,
|
||
date__date__lte=date2, warehouse=True)
|
||
cold_house_allocations = StewardAllocation.objects.filter(
|
||
kill_house__in=kill_houses,
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
to_cold_house__isnull=False,
|
||
receiver_state__in=('accepted', 'pending'),
|
||
trash=False, warehouse=True)
|
||
transactions = ProductsTransactions.objects.filter(product__in=products, transaction__paid=True,
|
||
transaction__date__date__gte=date1,
|
||
transaction__date__date__lte=date2, trash=False,
|
||
warehouse=True)
|
||
archives = WarehouseArchive.objects.filter(kill_house__in=kill_houses, date__date__gte=date1,
|
||
date__date__lte=date2, trash=False, warehouse=True)
|
||
|
||
|
||
else:
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
input_warehouse__in=kill_houses,
|
||
temporary_trash=False,
|
||
temporary_deleted=False,
|
||
trash=False, calculate_status=True, warehouse=True)
|
||
|
||
kill_house_free_bar_informations = KillHouseFreeBarInformation.objects.filter(
|
||
input_warehouse__in=kill_houses,
|
||
trash=False,
|
||
temporary_trash=False,
|
||
temporary_deleted=False,
|
||
calculate_status=True, warehouse=True).exclude(entered_message='ورود به انبار مجازی')
|
||
kill_house_free_Sale_bar_informations = KillHouseFreeSaleBarInformation.objects.filter(
|
||
kill_house__in=kill_houses,
|
||
trash=False,
|
||
temporary_trash=False,
|
||
temporary_deleted=False,
|
||
calculate_status=True, warehouse=True)
|
||
kill_house_allocations = StewardAllocation.objects.filter(kill_house__in=kill_houses, trash=False,
|
||
receiver_state__in=('pending', 'accepted'),
|
||
temporary_trash=False,
|
||
temporary_deleted=False,
|
||
to_cold_house__isnull=True,
|
||
calculate_status=True, warehouse=True)
|
||
|
||
segmentations = PosSegmentation.objects.filter(kill_house__in=kill_houses, trash=False, warehouse=True)
|
||
cold_house_allocations = StewardAllocation.objects.filter(
|
||
kill_house__in=kill_houses,
|
||
to_cold_house__isnull=False,
|
||
receiver_state__in=('accepted', 'pending'),
|
||
trash=False, warehouse=True)
|
||
transactions = ProductsTransactions.objects.filter(product__in=products, transaction__paid=True,
|
||
trash=False, warehouse=True)
|
||
archives = WarehouseArchive.objects.filter(kill_house__in=kill_houses, trash=False, warehouse=True)
|
||
|
||
total_kill_house_requests_quantity = kill_house_requests.aggregate(total=Sum('accepted_real_quantity'))[
|
||
'total'] or 0
|
||
total_kill_house_requests_weight = kill_house_requests.aggregate(total=Sum('accepted_real_weight'))[
|
||
'total'] or 0
|
||
total_entered_kill_house_requests_carcasses_weight = \
|
||
kill_house_requests.filter(ware_house_confirmation=True).aggregate(
|
||
total=Sum('ware_house_accepted_real_weight'))[
|
||
'total'] or 0
|
||
total_entered_kill_house_requests_carcasses_governmental_weight = \
|
||
kill_house_requests.filter(ware_house_confirmation=True,
|
||
province_request__poultry_request__free_sale_in_province=False).aggregate(
|
||
total=Sum('ware_house_accepted_real_weight'))[
|
||
'total'] or 0
|
||
total_entered_kill_house_requests_carcasses_free_weight = \
|
||
kill_house_requests.filter(ware_house_confirmation=True,
|
||
province_request__poultry_request__free_sale_in_province=True).aggregate(
|
||
total=Sum('ware_house_accepted_real_weight'))[
|
||
'total'] or 0
|
||
kill_house_free_bar_informations_live = kill_house_free_bar_informations.filter(buy_type='live')
|
||
kill_house_free_bar_informations_carcasses = kill_house_free_bar_informations.filter(buy_type='carcass')
|
||
total_kill_house_free_bar_quantity = \
|
||
kill_house_free_bar_informations_live.aggregate(total=Sum('quantity'))['total'] or 0
|
||
total_kill_house_free_bar_weight = \
|
||
kill_house_free_bar_informations_live.aggregate(total=Sum('live_weight'))['total'] or 0
|
||
total_kill_house_free_bar_carcasses = \
|
||
kill_house_free_bar_informations_carcasses.aggregate(total=Sum('number_of_carcasses'))[
|
||
'total'] or 0
|
||
total_kill_house_free_bar_carcasses_weight = \
|
||
kill_house_free_bar_informations_carcasses.aggregate(total=Sum('weight_of_carcasses'))[
|
||
'total'] or 0
|
||
total_entered_kill_house_free_bar_carcasses_weight = \
|
||
kill_house_free_bar_informations.aggregate(total=Sum('weight_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
total_kill_house_free_sale__bar_carcasses_weight = \
|
||
kill_house_free_Sale_bar_informations.aggregate(total=Sum('real_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
total_kill_house_free_sale__bar_carcasses_governmental_weight = \
|
||
kill_house_free_Sale_bar_informations.filter(quota='governmental').aggregate(
|
||
total=Sum('real_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
total_kill_house_free_sale__bar_carcasses_free_weight = \
|
||
kill_house_free_Sale_bar_informations.filter(quota='free').aggregate(total=Sum('real_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
total_kill_house_allocations_weight = \
|
||
kill_house_allocations.aggregate(total=Sum('real_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
total_kill_house_allocations_governmental_weight = \
|
||
kill_house_allocations.filter(quota='governmental').aggregate(total=Sum('real_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
total_kill_house_allocations_free_weight = \
|
||
kill_house_allocations.filter(quota='free').aggregate(total=Sum('real_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
segmentations_weight = \
|
||
segmentations.aggregate(total=Sum('weight'))[
|
||
'total'] or 0
|
||
segmentations_governmental_weight = \
|
||
segmentations.filter(quota='governmental').aggregate(total=Sum('weight'))[
|
||
'total'] or 0
|
||
segmentations_free_weight = \
|
||
segmentations.filter(quota='free').aggregate(total=Sum('weight'))[
|
||
'total'] or 0
|
||
cold_house_allocations_weight = \
|
||
cold_house_allocations.aggregate(total=Sum('real_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
cold_house_allocations_governmental_weight = \
|
||
cold_house_allocations.filter(quota='governmental').aggregate(total=Sum('real_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
cold_house_allocations_free_weight = \
|
||
cold_house_allocations.filter(quota='free').aggregate(total=Sum('real_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
pos_allocated_weight_info = transactions.aggregate(
|
||
pos_allocated_weight=Sum('cur_weight'),
|
||
pos_governmental_allocated_weight=Sum('cur_weight',
|
||
filter=Q(price_approved=True)),
|
||
pos_free_allocated_weight=Sum('cur_weight', filter=Q(price_approved=False)),
|
||
|
||
)
|
||
archives_info = archives.aggregate(
|
||
total_archive_governmental_weight=Sum('weight', filter=Q(quota='governmental')),
|
||
total_archive_free_weight=Sum('weight', filter=Q(quota='free')),
|
||
)
|
||
pos_allocated_weight = pos_allocated_weight_info['pos_allocated_weight'] or 0
|
||
pos_governmental_allocated_weight = pos_allocated_weight_info['pos_governmental_allocated_weight'] or 0
|
||
pos_free_allocated_weight = pos_allocated_weight_info['pos_free_allocated_weight'] or 0
|
||
total_archive_governmental_weight = archives_info['total_archive_governmental_weight'] or 0
|
||
total_archive_free_weight = archives_info['total_archive_free_weight'] or 0
|
||
|
||
total_governmental_input_weight = total_entered_kill_house_requests_carcasses_governmental_weight
|
||
total_free_input_weight = total_entered_kill_house_requests_carcasses_free_weight + total_entered_kill_house_free_bar_carcasses_weight
|
||
total_governmental_output_weight = total_kill_house_free_sale__bar_carcasses_governmental_weight + segmentations_governmental_weight + total_kill_house_allocations_governmental_weight + cold_house_allocations_governmental_weight + int(pos_governmental_allocated_weight / 1000)
|
||
total_free_output_weight = total_kill_house_free_sale__bar_carcasses_free_weight + total_kill_house_allocations_free_weight + segmentations_free_weight + cold_house_allocations_free_weight + int(pos_free_allocated_weight / 1000)
|
||
total_governmental_remain_weight = (
|
||
total_governmental_input_weight - total_governmental_output_weight) - total_archive_governmental_weight if (
|
||
total_governmental_input_weight - total_governmental_output_weight) - total_archive_governmental_weight > 0 else 0
|
||
last_total_governmental_remain_weight = (
|
||
(
|
||
total_governmental_input_weight - total_governmental_output_weight) - total_archive_governmental_weight) * -1 if (
|
||
total_governmental_input_weight - total_governmental_output_weight) - total_archive_governmental_weight < 0 else 0
|
||
total_free_remain_weight = (total_free_input_weight - total_free_output_weight) - total_archive_free_weight if (
|
||
total_free_input_weight - total_free_output_weight) - total_archive_free_weight > 0 else 0
|
||
last_total_free_remain_weight = ((
|
||
total_free_input_weight - total_free_output_weight) - total_archive_free_weight) * -1 if (
|
||
total_free_input_weight - total_free_output_weight) - total_archive_free_weight < 0 else 0
|
||
last_total_remain_weight = last_total_governmental_remain_weight + last_total_free_remain_weight
|
||
warehouse_total_weight = total_kill_house_requests_weight + total_kill_house_free_bar_weight + total_kill_house_free_bar_carcasses_weight
|
||
warehouse_total_entered_carcasses_weight = total_entered_kill_house_requests_carcasses_weight + total_entered_kill_house_free_bar_carcasses_weight
|
||
result = {
|
||
"product_remain_weight": int(total_governmental_remain_weight + total_free_remain_weight),
|
||
"warehouse_total_quantity": int(
|
||
total_kill_house_requests_quantity + total_kill_house_free_bar_quantity + total_kill_house_free_bar_carcasses),
|
||
"warehouse_total_weight": int(warehouse_total_weight),
|
||
"warehouse_total_entered_carcasses_weight": int(warehouse_total_entered_carcasses_weight),
|
||
"total_kill_house_allocations_weight": int(total_kill_house_allocations_weight),
|
||
"total_kill_house_free_sale_bar_carcasses_weight": int(total_kill_house_free_sale__bar_carcasses_weight),
|
||
"segmentations_weight": int(segmentations_weight),
|
||
"cold_house_allocations_weight": int(cold_house_allocations_weight),
|
||
"total_governmental_input_weight": int(total_governmental_input_weight),
|
||
"total_free_input_weight": int(total_free_input_weight),
|
||
"total_governmental_output_weight": int(total_governmental_output_weight),
|
||
"total_free_output_weight": int(total_free_output_weight),
|
||
"total_governmental_remain_weight": int(total_governmental_remain_weight),
|
||
"total_free_remain_weight": int(total_free_remain_weight),
|
||
"last_total_governmental_remain_weight": int(last_total_governmental_remain_weight),
|
||
"last_total_free_remain_weight": int(last_total_free_remain_weight),
|
||
"last_total_remain_weight": int(last_total_remain_weight),
|
||
"pos_allocated_weight": int(pos_allocated_weight / 1000),
|
||
"pos_governmental_allocated_weight": int(pos_governmental_allocated_weight / 1000),
|
||
"pos_free_allocated_weight": int(pos_free_allocated_weight / 1000),
|
||
"total_archive_governmental_weight": total_archive_governmental_weight,
|
||
"total_archive_free_weight": total_archive_free_weight,
|
||
|
||
}
|
||
return Response(result, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHouseDistributionInormationViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouse.objects.all()
|
||
serializer_class = KillHouseForNewWageInormationSerializer
|
||
pagination_class = CustomPagination
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
role = request.GET.get('role')
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
if role == 'KillHouse':
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).first()
|
||
steward_allocations = StewardAllocation.objects.filter(kill_house=kill_house,
|
||
receiver_state__in=('pending', 'accepted'),
|
||
calculate_status=True, trash=False)
|
||
free_sales = KillHouseFreeSaleBarInformation.objects.filter(kill_house=kill_house, trash=False,
|
||
calculate_status=True)
|
||
steward_allocations_weight = \
|
||
steward_allocations.aggregate(total=Sum('real_weight_of_carcasses'))['total'] or 0
|
||
|
||
free_sales_weight = free_sales.aggregate(total=Sum('real_weight_of_carcasses'))['total'] or 0
|
||
|
||
else:
|
||
guild = Guilds.objects.get(user=user, trash=False)
|
||
steward_allocations = StewardAllocation.objects.filter(Q(steward=guild) | Q(guilds=guild),
|
||
receiver_state__in=('pending', 'accepted'),
|
||
calculate_status=True, trash=False)
|
||
steward_allocations_weight = \
|
||
steward_allocations.aggregate(total=Sum('real_weight_of_carcasses'))['total'] or 0
|
||
|
||
free_sales_weight = 0
|
||
|
||
result = {
|
||
"steward_allocations_weight": steward_allocations_weight,
|
||
"free_sales_weight": free_sales_weight,
|
||
}
|
||
|
||
return Response(result, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHouseTotalDashboardForNewWageInormationViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouse.objects.all()
|
||
serializer_class = KillHouseForKillHouseRequestWageSerializer
|
||
pagination_class = CustomPagination
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
kill_houses = KillHouse.objects.filter(out_province=False, trash=False).order_by('id')
|
||
total_wage_type = WageType.objects.filter(trash=False)
|
||
province_live_wage_type = total_wage_type.filter(en_name='province-kill-request', trash=False).first()
|
||
free_buying_live_weight_wage_type = total_wage_type.filter(en_name='live-buy', trash=False).first()
|
||
free_buying_carcesses_weight_wage_type = total_wage_type.filter(en_name='carcasse-buy', trash=False).first()
|
||
free_sell_carcesses_weight_wage_type = total_wage_type.filter(en_name='carcasse-sell', trash=False).first()
|
||
province_live_wage_type_amount = province_live_wage_type.amount if province_live_wage_type.status == True else 0
|
||
free_buying_live_weight_wage_type_amount = free_buying_live_weight_wage_type.amount if free_buying_live_weight_wage_type.status == True else 0
|
||
free_buying_carcesses_weight_wage_type_amount = free_buying_carcesses_weight_wage_type.amount if free_buying_carcesses_weight_wage_type.status == True else 0
|
||
free_sell_carcesses_weight_wage_type_amount = free_sell_carcesses_weight_wage_type.amount if free_sell_carcesses_weight_wage_type.status == True else 0
|
||
|
||
province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user__in=kill_houses, trash=False,
|
||
archive_wage=False, return_to_province=False,
|
||
state__in=('pending', 'accepted'),
|
||
first_car_allocated_quantity=0).order_by('id')
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(Q(killhouse_user__in=kill_houses) & Q(killer__in=kill_houses)) | Q(
|
||
Q(killhouse_user__in=kill_houses) & Q(killer__isnull=True)) | Q(
|
||
Q(killhouse_user__in=kill_houses) | Q(killer__in=kill_houses)), archive_wage=False,
|
||
trash=False
|
||
)
|
||
kill_house_free_bar_info = KillHouseFreeBarInformation.objects.filter(kill_house__in=kill_houses,
|
||
archive_wage=False,
|
||
trash=False)
|
||
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(
|
||
kill_house__in=kill_houses,
|
||
archive_wage=False,
|
||
trash=False)
|
||
|
||
slaughter_transactions = InternalTransaction.objects.filter(
|
||
kill_house__in=kill_houses, status='completed',
|
||
trash=False)
|
||
|
||
total_paid_wage = slaughter_transactions.aggregate(total=Sum('amount'))[
|
||
'total'] or 0
|
||
|
||
total_province_live_weight = province_kill_requests.aggregate(total=Sum('total_killed_weight'))['total'] or 0
|
||
total_province_live_weight += kill_house_requests.aggregate(total=Sum('accepted_real_weight'))['total'] or 0
|
||
total_out_selling_province_carcasses_weight = \
|
||
kill_house_free_sale_bar_info.aggregate(total=Sum('real_weight_of_carcasses'))['total'] or 0
|
||
total_province_carcasses_weight = total_province_live_weight * 0.75
|
||
total_pure_province_carcasses_weight = total_province_carcasses_weight - total_out_selling_province_carcasses_weight
|
||
total_out_live_buying_province_carcasses_weight = \
|
||
kill_house_free_bar_info.filter(buy_type='live').aggregate(total=Sum('live_weight'))['total'] or 0
|
||
total_out_carcasses_buying_province_carcasses_weight = \
|
||
kill_house_free_bar_info.filter(buy_type='carcass').aggregate(total=Sum('weight_of_carcasses'))[
|
||
'total'] or 0
|
||
total_pure_province_carcasses_price = total_pure_province_carcasses_weight * province_live_wage_type_amount
|
||
total_out_selling_province_carcasses_price = total_out_selling_province_carcasses_weight * free_sell_carcesses_weight_wage_type_amount
|
||
total_out_live_buying_province_carcasses_price = total_out_live_buying_province_carcasses_weight * free_buying_live_weight_wage_type_amount
|
||
total_out_carcasses_buying_province_carcasses_price = total_out_carcasses_buying_province_carcasses_weight * free_buying_carcesses_weight_wage_type_amount
|
||
total_price = total_pure_province_carcasses_price + total_out_selling_province_carcasses_price + total_out_live_buying_province_carcasses_price + total_out_carcasses_buying_province_carcasses_price
|
||
|
||
result = {
|
||
"total_province_live_weight": total_province_live_weight,
|
||
"total_province_carcasses_weight": total_province_carcasses_weight,
|
||
"total_out_selling_province_carcasses_weight": total_out_selling_province_carcasses_weight,
|
||
"total_pure_province_carcasses_weight": total_pure_province_carcasses_weight,
|
||
"total_pure_province_carcasses_price": total_pure_province_carcasses_price,
|
||
"total_out_selling_province_carcasses_price": total_out_selling_province_carcasses_price,
|
||
"total_out_carcasses_buying_province_carcasses_weight": total_out_carcasses_buying_province_carcasses_weight,
|
||
"total_out_carcasses_buying_province_carcasses_price": total_out_carcasses_buying_province_carcasses_price,
|
||
"total_out_live_buying_province_carcasses_weight": total_out_live_buying_province_carcasses_weight,
|
||
"total_out_live_buying_province_carcasses_price": total_out_live_buying_province_carcasses_price,
|
||
"total_paid_wage": total_paid_wage,
|
||
"total_price": total_price,
|
||
"province_live_wage_amount": province_live_wage_type_amount,
|
||
"free_buying_live_weight_amount": free_buying_live_weight_wage_type_amount,
|
||
"free_buying_carcesses_weight_amount": free_buying_carcesses_weight_wage_type_amount,
|
||
"free_sell_carcesses_weight_amount": free_sell_carcesses_weight_wage_type_amount,
|
||
|
||
}
|
||
return Response(result, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHouseForProvinceWageViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouse.objects.all()
|
||
serializer_class = KillHouseForProvinceWageSerializer
|
||
pagination_class = CustomPagination
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = KillHouseFilterSet
|
||
filterset_fields = [
|
||
'name',
|
||
'kill_house_operator__user__fullname',
|
||
'kill_house_operator__user__mobile',
|
||
'system_address__city__name',
|
||
|
||
]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
|
||
if request.GET['type'] == 'unpaid':
|
||
if 'date1' in request.GET:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
if request.GET['role'] == 'ProvinceOPerator':
|
||
kill_houses = KillHouse.objects.filter(pk__in=ProvinceKillRequest.objects.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
state__in=(
|
||
'pending',
|
||
'accepted'),
|
||
return_to_province=False,
|
||
archive_wage=False,
|
||
union_share__gt=0,
|
||
trash=False).values(
|
||
'killhouse_user'), trash=False)
|
||
elif request.GET['role'] == 'Company':
|
||
kill_houses = KillHouse.objects.filter(pk__in=ProvinceKillRequest.objects.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
state__in=(
|
||
'pending',
|
||
'accepted'),
|
||
return_to_province=False,
|
||
archive_wage=False,
|
||
company_share__gt=0,
|
||
trash=False).values(
|
||
'killhouse_user'), trash=False)
|
||
elif request.GET['role'] == 'Guilds':
|
||
kill_houses = KillHouse.objects.filter(pk__in=ProvinceKillRequest.objects.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
state__in=(
|
||
'pending',
|
||
'accepted'),
|
||
return_to_province=False,
|
||
archive_wage=False,
|
||
guilds_share__gt=0,
|
||
trash=False).values(
|
||
'killhouse_user'), trash=False)
|
||
else:
|
||
kill_houses = KillHouse.objects.filter(pk__in=ProvinceKillRequest.objects.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
state__in=(
|
||
'pending',
|
||
'accepted'),
|
||
return_to_province=False,
|
||
archive_wage=False,
|
||
trash=False).values(
|
||
'killhouse_user'), trash=False)
|
||
|
||
else:
|
||
|
||
if request.GET['role'] == 'ProvinceOPerator':
|
||
kill_houses = KillHouse.objects.filter(pk__in=ProvinceKillRequest.objects.filter(
|
||
state__in=(
|
||
'pending',
|
||
'accepted'),
|
||
return_to_province=False,
|
||
archive_wage=False,
|
||
union_share__gt=0,
|
||
trash=False).values(
|
||
'killhouse_user'), trash=False)
|
||
elif request.GET['role'] == 'Company':
|
||
kill_houses = KillHouse.objects.filter(pk__in=ProvinceKillRequest.objects.filter(
|
||
state__in=(
|
||
'pending',
|
||
'accepted'),
|
||
return_to_province=False,
|
||
company_share__gt=0,
|
||
archive_wage=False,
|
||
trash=False).values(
|
||
'killhouse_user'), trash=False)
|
||
elif request.GET['role'] == 'Guilds':
|
||
kill_houses = KillHouse.objects.filter(pk__in=ProvinceKillRequest.objects.filter(
|
||
state__in=(
|
||
'pending',
|
||
'accepted'),
|
||
return_to_province=False,
|
||
archive_wage=False,
|
||
|
||
guilds_share__gt=0,
|
||
trash=False).values(
|
||
'killhouse_user'), trash=False)
|
||
else:
|
||
kill_houses = KillHouse.objects.filter(pk__in=ProvinceKillRequest.objects.filter(
|
||
|
||
state__in=(
|
||
'pending',
|
||
'accepted'),
|
||
return_to_province=False,
|
||
archive_wage=False,
|
||
trash=False).values(
|
||
'killhouse_user'), trash=False)
|
||
|
||
if 'search' in request.GET:
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "":
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=kill_houses
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=kill_houses)
|
||
kill_houses = ps.filter()
|
||
else:
|
||
kill_houses = kill_houses
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(kill_houses)
|
||
if page is not None:
|
||
if 'date1' in request.GET:
|
||
serializer = KillHouseForProvinceWageWithDateSerializer(page, many=True, context={'request': request})
|
||
else:
|
||
|
||
serializer = self.get_serializer(page, many=True, context={'request': request})
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
if 'date1' in request.GET:
|
||
serializer = KillHouseForProvinceWageWithDateSerializer(kill_houses, many=True,
|
||
context={'request': request})
|
||
else:
|
||
|
||
serializer = self.get_serializer(kill_houses, many=True, context={'request': request})
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
# class KillHouseForProvinceWageViewSet(viewsets.ModelViewSet):
|
||
# queryset = KillHouse.objects.all()
|
||
# serializer_class = KillHouseForProvinceWageSerializer
|
||
# pagination_class = CustomPagination
|
||
# permission_classes = [TokenHasReadWriteScope]
|
||
# filter_backends = [DjangoFilterBackend]
|
||
# filterset_class = KillHouseFilterSet
|
||
# filterset_fields = [
|
||
# 'name',
|
||
# 'kill_house_operator__user__fullname',
|
||
# 'kill_house_operator__user__mobile',
|
||
# 'system_address__city__name',
|
||
#
|
||
# ]
|
||
#
|
||
# def list(self, request, *args, **kwargs):
|
||
#
|
||
# if request.GET['type'] == 'unpaid':
|
||
# if 'date1' in request.GET:
|
||
# date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
# date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
# kill_houses = KillHouse.objects.filter(pk__in=ProvinceKillRequest.objects.filter(wage_pay=False,
|
||
# kill_request__recive_date__date__gte=date1,
|
||
# kill_request__recive_date__date__lte=date2,
|
||
# state__in=(
|
||
# 'pending',
|
||
# 'accepted'),
|
||
# archive_by_province=False,
|
||
# return_to_province=False,
|
||
# trash=False).values(
|
||
# 'killhouse_user'), trash=False)
|
||
# else:
|
||
#
|
||
# kill_houses = KillHouse.objects.filter(pk__in=ProvinceKillRequest.objects.filter(wage_pay=False,
|
||
# state__in=(
|
||
# 'pending',
|
||
# 'accepted'),
|
||
# archive_by_province=False,
|
||
# return_to_province=False,
|
||
# trash=False).values(
|
||
# 'killhouse_user'), trash=False)
|
||
#
|
||
#
|
||
# elif request.GET['type'] == 'paid':
|
||
# if 'date1' in request.GET:
|
||
# date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
# date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
# kill_houses = KillHouse.objects.filter(pk__in=ProvinceKillRequest.objects.filter(wage_pay=True,
|
||
# kill_request__recive_date__date__gte=date1,
|
||
# kill_request__recive_date__date__lte=date2,
|
||
# state__in=(
|
||
# 'pending',
|
||
# 'accepted'),
|
||
# archive_by_province=False,
|
||
# return_to_province=False,
|
||
# trash=False).values(
|
||
# 'killhouse_user'), trash=False)
|
||
#
|
||
# else:
|
||
# kill_houses = KillHouse.objects.filter(pk__in=ProvinceKillRequest.objects.filter(wage_pay=True,
|
||
# state__in=(
|
||
# 'pending',
|
||
# 'accepted'),
|
||
# archive_by_province=False,
|
||
# return_to_province=False,
|
||
# trash=False).values(
|
||
# 'killhouse_user'), trash=False)
|
||
#
|
||
#
|
||
# elif request.GET['type'] == 'archive':
|
||
# if 'date1' in request.GET:
|
||
# date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
# date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
# kill_houses = KillHouse.objects.filter(pk__in=ProvinceKillRequest.objects.filter(wage_pay=False,
|
||
# kill_request__recive_date__date__gte=date1,
|
||
# kill_request__recive_date__date__lte=date2,
|
||
# state__in=(
|
||
# 'pending',
|
||
# 'accepted'),
|
||
# archive_by_province=True,
|
||
# return_to_province=False,
|
||
# trash=False).values(
|
||
# 'killhouse_user'), trash=False)
|
||
#
|
||
# else:
|
||
# kill_houses = KillHouse.objects.filter(pk__in=ProvinceKillRequest.objects.filter(wage_pay=False,
|
||
# state__in=(
|
||
# 'pending',
|
||
# 'accepted'),
|
||
# archive_by_province=True,
|
||
# return_to_province=False,
|
||
# trash=False).values(
|
||
# 'killhouse_user'), trash=False)
|
||
#
|
||
# else:
|
||
# if 'date1' in request.GET:
|
||
# date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
# date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
# kill_houses = KillHouse.objects.filter(
|
||
# pk__in=ProvinceKillRequest.objects.filter(
|
||
# kill_request__recive_date__date__gte=date1,
|
||
# kill_request__recive_date__date__lte=date2,
|
||
# state__in=('pending', 'accepted'), trash=False).values(
|
||
# 'killhouse_user'), trash=False)
|
||
# else:
|
||
# kill_houses = KillHouse.objects.filter(
|
||
# pk__in=ProvinceKillRequest.objects.filter(state__in=('pending', 'accepted'), trash=False).values(
|
||
# 'killhouse_user'), trash=False)
|
||
#
|
||
# if 'search' in request.GET:
|
||
# if request.GET['search'] == 'filter':
|
||
# if request.GET['value'] != "":
|
||
# for item in self.filterset_fields:
|
||
# query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
# if (self.filterset_class(
|
||
# data=query,
|
||
# queryset=kill_houses
|
||
# )
|
||
# ).filter():
|
||
# ps = self.filterset_class(data=query, queryset=kill_houses)
|
||
# kill_houses = ps.filter()
|
||
# else:
|
||
# kill_houses = kill_houses
|
||
# page_size = request.query_params.get('page_size', None)
|
||
# if page_size:
|
||
# self.pagination_class.page_size = int(page_size)
|
||
#
|
||
# page = self.paginate_queryset(kill_houses)
|
||
# if page is not None:
|
||
# if 'date1' in request.GET:
|
||
# serializer = KillHouseForProvinceWageWithDateSerializer(page, many=True, context={'request': request})
|
||
# else:
|
||
#
|
||
# serializer = self.get_serializer(page, many=True, context={'request': request})
|
||
# return self.get_paginated_response(serializer.data)
|
||
#
|
||
# if 'date1' in request.GET:
|
||
# serializer = KillHouseForProvinceWageWithDateSerializer(kill_houses, many=True,
|
||
# context={'request': request})
|
||
# else:
|
||
#
|
||
# serializer = self.get_serializer(kill_houses, many=True, context={'request': request})
|
||
# return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHouseForTotalProvinceWageTransactionViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouse.objects.all()
|
||
serializer_class = KillHouseForTotalProvinceWageTransactionSerializer
|
||
pagination_class = CustomPagination
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = KillHouseFilterSet
|
||
filterset_fields = [
|
||
'name',
|
||
'kill_house_operator__user__fullname',
|
||
'kill_house_operator__user__mobile',
|
||
'system_address__city__name',
|
||
|
||
]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
|
||
if 'date1' in request.GET:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
if request.GET['role'] == 'ProvinceOperator':
|
||
kill_houses = KillHouse.objects.filter(pk__in=InternalTransaction.objects.filter(
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
status='completed',
|
||
payer_type='kill_house',
|
||
union_share__gt=0,
|
||
trash=False).values(
|
||
'kill_house'), trash=False)
|
||
|
||
elif request.GET['role'] == 'Company':
|
||
kill_houses = KillHouse.objects.filter(pk__in=InternalTransaction.objects.filter(
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
status='completed',
|
||
payer_type='kill_house',
|
||
company_share__gt=0,
|
||
trash=False).values(
|
||
'kill_house'), trash=False)
|
||
elif request.GET['role'] == 'Guilds':
|
||
kill_houses = KillHouse.objects.filter(pk__in=InternalTransaction.objects.filter(
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
status='completed',
|
||
payer_type='kill_house',
|
||
guilds_share__gt=0,
|
||
trash=False).values(
|
||
'kill_house'), trash=False)
|
||
|
||
elif request.GET['role'] == 'SuperAdmin':
|
||
kill_houses = KillHouse.objects.filter(pk__in=InternalTransaction.objects.filter(
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
payer_type='kill_house',
|
||
status='completed',
|
||
trash=False).exclude(union_share=0, company_share=0, guilds_share=0).values(
|
||
'kill_house'), trash=False)
|
||
else:
|
||
kill_houses = KillHouse.objects.filter(pk__in=InternalTransaction.objects.filter(
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
payer_type='kill_house',
|
||
status='completed',
|
||
trash=False).values(
|
||
'kill_house'), trash=False)
|
||
else:
|
||
|
||
if request.GET['role'] == 'ProvinceOperator':
|
||
kill_houses = KillHouse.objects.filter(pk__in=InternalTransaction.objects.filter(
|
||
status='completed',
|
||
payer_type='kill_house',
|
||
union_share__gt=0,
|
||
trash=False).values(
|
||
'kill_house'), trash=False)
|
||
|
||
elif request.GET['role'] == 'Company':
|
||
kill_houses = KillHouse.objects.filter(pk__in=InternalTransaction.objects.filter(
|
||
status='completed',
|
||
payer_type='kill_house',
|
||
company_share__gt=0,
|
||
trash=False).values(
|
||
'kill_house'), trash=False)
|
||
elif request.GET['role'] == 'Guilds':
|
||
kill_houses = KillHouse.objects.filter(pk__in=InternalTransaction.objects.filter(
|
||
status='completed',
|
||
payer_type='kill_house',
|
||
guilds_share__gt=0,
|
||
trash=False).values(
|
||
'kill_house'), trash=False)
|
||
|
||
elif request.GET['role'] == 'SuperAdmin':
|
||
kill_houses = KillHouse.objects.filter(pk__in=InternalTransaction.objects.filter(
|
||
status='completed',
|
||
payer_type='kill_house',
|
||
trash=False).exclude(union_share=0, company_share=0, guilds_share=0).values(
|
||
'kill_house'), trash=False)
|
||
else:
|
||
kill_houses = KillHouse.objects.filter(pk__in=InternalTransaction.objects.filter(
|
||
status='completed',
|
||
payer_type='kill_house',
|
||
trash=False).values(
|
||
'kill_house'), trash=False)
|
||
|
||
if 'search' in request.GET:
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "":
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=kill_houses
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=kill_houses)
|
||
kill_houses = ps.filter()
|
||
else:
|
||
kill_houses = kill_houses
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(kill_houses)
|
||
if page is not None:
|
||
if 'date1' in request.GET:
|
||
serializer = KillHouseForTotalProvinceWageTransactionWithDAteSerializer(page, many=True,
|
||
context={'request': request})
|
||
else:
|
||
|
||
serializer = self.get_serializer(page, many=True, context={'request': request})
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
if 'date1' in request.GET:
|
||
serializer = KillHouseForTotalProvinceWageTransactionWithDAteSerializer(kill_houses, many=True,
|
||
context={'request': request})
|
||
else:
|
||
|
||
serializer = self.get_serializer(kill_houses, many=True, context={'request': request})
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHouseForFreeBarWageViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouse.objects.all()
|
||
serializer_class = KillHouseForFreeBarWageSerializer
|
||
pagination_class = CustomPagination
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = KillHouseFilterSet
|
||
filterset_fields = [
|
||
'name',
|
||
'kill_house_operator__user__fullname',
|
||
'kill_house_operator__user__mobile',
|
||
'system_address__city__name',
|
||
|
||
]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
type = request.GET['type']
|
||
|
||
if 'date1' in request.GET:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
if request.GET['role'] == 'ProvinceOperator':
|
||
kill_houses = KillHouse.objects.filter(pk__in=KillHouseFreeBarInformation.objects.filter(
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
buy_type=type,
|
||
archive_wage=False,
|
||
union_share__gt=0,
|
||
trash=False).values(
|
||
'kill_house'), trash=False)
|
||
elif request.GET['role'] == 'Company':
|
||
kill_houses = KillHouse.objects.filter(pk__in=KillHouseFreeBarInformation.objects.filter(
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
buy_type=type,
|
||
company_share__gt=0,
|
||
archive_wage=False,
|
||
trash=False).values(
|
||
'kill_house'), trash=False)
|
||
elif request.GET['role'] == 'Guilds':
|
||
kill_houses = KillHouse.objects.filter(pk__in=KillHouseFreeBarInformation.objects.filter(
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
buy_type=type,
|
||
guilds_share__gt=0,
|
||
archive_wage=False,
|
||
trash=False).values(
|
||
'kill_house'), trash=False)
|
||
else:
|
||
|
||
kill_houses = KillHouse.objects.filter(pk__in=KillHouseFreeBarInformation.objects.filter(
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
buy_type=type,
|
||
archive_wage=False,
|
||
trash=False).values(
|
||
'kill_house'), trash=False)
|
||
else:
|
||
|
||
if request.GET['role'] == 'ProvinceOperator':
|
||
kill_houses = KillHouse.objects.filter(pk__in=KillHouseFreeBarInformation.objects.filter(
|
||
buy_type=type,
|
||
union_share__gt=0,
|
||
archive_wage=False,
|
||
trash=False).values(
|
||
'kill_house'), trash=False)
|
||
elif request.GET['role'] == 'Company':
|
||
kill_houses = KillHouse.objects.filter(pk__in=KillHouseFreeBarInformation.objects.filter(
|
||
buy_type=type,
|
||
company_share__gt=0,
|
||
archive_wage=False,
|
||
trash=False).values(
|
||
'kill_house'), trash=False)
|
||
elif request.GET['role'] == 'Guilds':
|
||
kill_houses = KillHouse.objects.filter(pk__in=KillHouseFreeBarInformation.objects.filter(
|
||
buy_type=type,
|
||
guilds_share__gt=0,
|
||
archive_wage=False,
|
||
trash=False).values(
|
||
'kill_house'), trash=False)
|
||
else:
|
||
|
||
kill_houses = KillHouse.objects.filter(pk__in=KillHouseFreeBarInformation.objects.filter(
|
||
buy_type=type,
|
||
archive_wage=False,
|
||
trash=False).values(
|
||
'kill_house'), trash=False)
|
||
if 'search' in request.GET:
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "":
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=kill_houses
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=kill_houses)
|
||
kill_houses = ps.filter()
|
||
else:
|
||
kill_houses = kill_houses
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(kill_houses)
|
||
if page is not None:
|
||
if 'date1' in request.GET:
|
||
serializer = KillHouseForFreeBarWageWithDateSerializer(page, many=True, context={'request': request})
|
||
else:
|
||
|
||
serializer = self.get_serializer(page, many=True, context={'request': request})
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
if 'date1' in request.GET:
|
||
serializer = KillHouseForFreeBarWageWithDateSerializer(kill_houses, many=True,
|
||
context={'request': request})
|
||
else:
|
||
|
||
serializer = self.get_serializer(kill_houses, many=True, context={'request': request})
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHouseForFreeSaleBarInformationViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouse.objects.all()
|
||
serializer_class = KillHouseForFreeSaleBarInformationViewSetSerializer
|
||
pagination_class = CustomPagination
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = KillHouseFilterSet
|
||
filterset_fields = [
|
||
'name',
|
||
'kill_house_operator__user__fullname',
|
||
'kill_house_operator__user__mobile',
|
||
'system_address__city__name',
|
||
|
||
]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
if 'date1' in request.GET:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
if request.GET['role'] in ['ProvinceOperator', 'SuperAdmin', 'AdminX', 'Supporter']:
|
||
free_sales = KillHouseFreeSaleBarInformation.objects.filter(trash=False, date__date__gte=date1,
|
||
date__date__lte=date2)
|
||
|
||
|
||
else:
|
||
free_sales = KillHouseFreeSaleBarInformation.objects.filter(kill_house__system_address__city=user.city,
|
||
trash=False, date__date__gte=date1,
|
||
date__date__lte=date2)
|
||
|
||
|
||
|
||
else:
|
||
if request.GET['role'] in ['ProvinceOperator', 'SuperAdmin', 'AdminX', 'Supporter']:
|
||
free_sales = KillHouseFreeSaleBarInformation.objects.filter(trash=False)
|
||
|
||
|
||
|
||
else:
|
||
free_sales = KillHouseFreeSaleBarInformation.objects.filter(kill_house__system_address__city=user.city,
|
||
trash=False)
|
||
|
||
kill_houses = KillHouse.objects.filter(pk__in=free_sales.values_list('kill_house', flat=True)).order_by('id')
|
||
|
||
if 'date1' in request.GET:
|
||
serializer = KillHouseForFreeSaleBarInformationViewSetWithDateSerializer(kill_houses, many=True,
|
||
context={'request': request})
|
||
else:
|
||
|
||
serializer = self.get_serializer(kill_houses, many=True, context={'request': request})
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
# ویوست مربوط به ثبت کشتارگاه
|
||
|
||
|
||
class KillHouseforPurchaseRequestViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouse.objects.filter(trash=False, out_province=False).order_by('id')
|
||
serializer_class = KillHouseforPurchaseRequestSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
|
||
class KillHousePurchaseRequestPermissionViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHousePurchaseRequest.objects.all()
|
||
serializer_class = KillHousePurchaseRequestSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
total_unpaid_wage = 0
|
||
total_paid_wage = 0
|
||
permission = True
|
||
exclusive = False
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
kill_house_role = Group.objects.get(name='KillHouse')
|
||
if kill_house_role in user.role.all():
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).first()
|
||
exclusive = True if kill_house.type == 'exclusive' else False
|
||
purchase = KillHousePurchaseRequest.objects.filter(kill_house=kill_house).first()
|
||
if purchase:
|
||
if purchase.total_limitation == True:
|
||
permission = False
|
||
else:
|
||
permission = True
|
||
else:
|
||
permission = True
|
||
|
||
return Response({
|
||
"permission": permission,
|
||
"exclusive": exclusive
|
||
}, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHousePurchaseRequestViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHousePurchaseRequest.objects.all()
|
||
serializer_class = KillHousePurchaseRequestSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def update(self, request, pk=None, *args, **kwargs):
|
||
kill_house = KillHouse.objects.get(key=request.data['kill_house_key'], trash=False)
|
||
request.data.pop('kill_house_key')
|
||
serializer = self.serializer_class(data=request.data)
|
||
purchace = KillHousePurchaseRequest.objects.filter(kill_house=kill_house).first()
|
||
if purchace:
|
||
serializer.update(instance=purchace, validated_data=request.data)
|
||
else:
|
||
if serializer.is_valid():
|
||
purchace = serializer.create(validated_data=request.data)
|
||
purchace.kill_house = kill_house
|
||
purchace.save()
|
||
|
||
return Response({"result": "با موفقیت انجام شد."}, status=status.HTTP_200_OK)
|
||
|
||
|
||
class TotalReportOfKillHouseWareHouseForDailyBroadCastInDetailsViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouse.objects.all()
|
||
serializer_class = KillHouseWareHouseForDailyBroadCastOInDetailsSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
kill_house_ware_houses = KillHouseWareHouse.objects.filter(
|
||
Q(weight_of_carcasses__gt=0) | Q(free_weight_of_carcasses__gt=0) | Q(
|
||
pre_cold_weight_of_carcasses_to_ware_house__gt=0), date__date__gte=date1,
|
||
date__date__lte=date2, trash=False)
|
||
kill_houses = KillHouse.objects.filter(
|
||
pk__in=kill_house_ware_houses.values('kill_house')
|
||
)
|
||
|
||
serializer = self.serializer_class(kill_houses, many=True, context={'request': request})
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class TotalReportOfKillHouseWareHouseForDailyBroadCastViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseWareHouse.objects.all()
|
||
serializer_class = KillHouseWareHouseSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
kill_house_ware_houses = KillHouseWareHouse.objects.filter(
|
||
Q(weight_of_carcasses__gt=0) | Q(free_weight_of_carcasses__gt=0) | Q(
|
||
pre_cold_weight_of_carcasses_to_ware_house__gt=0), date__date__gte=date1,
|
||
date__date__lte=date2, trash=False)
|
||
number_of_kill_houses = KillHouse.objects.filter(
|
||
pk__in=kill_house_ware_houses.values('kill_house')
|
||
)
|
||
|
||
steward_allocations = StewardAllocation.objects.filter(
|
||
Q(type='manual') | Q(type='auto', system_registration_code=True),
|
||
ware_house__in=kill_house_ware_houses, receiver_state__in=('pending', 'accepted'), trash=False).order_by(
|
||
'id')
|
||
|
||
guild_allocations = steward_allocations.filter(guilds__isnull=False, trash=False)
|
||
number_of_guild = guild_allocations.values('guilds').distinct().count() if guild_allocations else 0
|
||
|
||
steward_allocations_for_number_of_steward = steward_allocations.filter(steward__isnull=False, trash=False)
|
||
number_of_steward = steward_allocations_for_number_of_steward.values(
|
||
'steward').distinct().count() if steward_allocations_for_number_of_steward else 0
|
||
|
||
total_pre_cold_quantity = \
|
||
kill_house_ware_houses.aggregate(total=Sum('pre_cold_number_of_carcasses_to_ware_house'))[
|
||
'total']
|
||
total_pre_cold_weight = \
|
||
kill_house_ware_houses.aggregate(total=Sum('pre_cold_weight_of_carcasses_to_ware_house'))[
|
||
'total']
|
||
total_number_of_free_carcasses = kill_house_ware_houses.aggregate(total=Sum('number_of_free_carcasses'))[
|
||
'total']
|
||
total_free_weight_of_carcasses = kill_house_ware_houses.aggregate(total=Sum('free_weight_of_carcasses'))[
|
||
'total']
|
||
total_number_of_carcasses = kill_house_ware_houses.aggregate(total=Sum('number_of_carcasses'))[
|
||
'total']
|
||
total_weight_of_carcasses = kill_house_ware_houses.aggregate(total=Sum('weight_of_carcasses'))[
|
||
'total']
|
||
|
||
final_total_number_of_carcasses = \
|
||
kill_house_ware_houses.aggregate(total=Sum('final_total_number_of_carcasses'))[
|
||
'total']
|
||
final_total_weight_of_carcasses = \
|
||
kill_house_ware_houses.aggregate(total=Sum('final_total_weight_of_carcasses'))[
|
||
'total']
|
||
|
||
total_remain_quantity = \
|
||
kill_house_ware_houses.aggregate(total=Sum('remain_total_number_of_carcasses'))[
|
||
'total']
|
||
|
||
total_remain_weight = \
|
||
kill_house_ware_houses.aggregate(total=Sum('remain_total_weight_of_carcasses'))[
|
||
'total']
|
||
|
||
total_allocated_quantity = \
|
||
steward_allocations.aggregate(total=Sum('real_number_of_carcasses'))[
|
||
'total']
|
||
|
||
total_allocated_weight = \
|
||
steward_allocations.aggregate(total=Sum('real_weight_of_carcasses'))[
|
||
'total']
|
||
|
||
total_accepted_allocated_quantity = \
|
||
steward_allocations.aggregate(total=Sum('receiver_real_number_of_carcasses'))[
|
||
'total']
|
||
|
||
total_accepted_allocated_weight = \
|
||
steward_allocations.aggregate(total=Sum('receiver_real_weight_of_carcasses'))[
|
||
'total']
|
||
|
||
return Response({
|
||
"buyers": len(number_of_kill_houses),
|
||
"incoming_quantity_of_cold_house": 0,
|
||
"incoming_weight_of_cold_house": 0,
|
||
"total_pre_cold_quantity": total_pre_cold_quantity if total_pre_cold_quantity != None else 0,
|
||
"total_pre_cold_weight": total_pre_cold_weight if total_pre_cold_weight != None else 0,
|
||
"total_number_of_free_carcasses": total_number_of_free_carcasses if total_number_of_free_carcasses != None else 0,
|
||
"total_free_weight_of_carcasses": total_free_weight_of_carcasses if total_free_weight_of_carcasses != None else 0,
|
||
"total_number_of_carcasses": total_number_of_carcasses if total_number_of_carcasses != None else 0,
|
||
"total_weight_of_carcasses": total_weight_of_carcasses if total_weight_of_carcasses != None else 0,
|
||
"final_total_number_of_carcasses": final_total_number_of_carcasses if final_total_number_of_carcasses != None else 0,
|
||
"final_total_weight_of_carcasses": final_total_weight_of_carcasses if final_total_weight_of_carcasses != None else 0,
|
||
"total_allocated_quantity": total_allocated_quantity if total_allocated_quantity != None else 0,
|
||
"total_allocated_weight": total_allocated_weight if total_allocated_weight != None else 0,
|
||
"total_accepted_allocated_quantity": total_accepted_allocated_quantity if total_accepted_allocated_quantity != None else 0,
|
||
"total_accepted_allocated_weight": total_accepted_allocated_weight if total_accepted_allocated_weight != None else 0,
|
||
"total_remain_quantity": total_remain_quantity if total_remain_quantity != None else 0,
|
||
"total_remain_weight": total_remain_weight if total_remain_weight != None else 0,
|
||
"number_of_guild": number_of_guild,
|
||
"number_of_steward": number_of_steward,
|
||
|
||
})
|
||
|
||
|
||
class TotalReportForDailyBroadCastViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouse.objects.all()
|
||
serializer_class = KillHouseForTotalReportAutomaticStewardAllocationSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
date = datetime.strptime(str(request.GET['date']), '%Y-%m-%d').date()
|
||
date_one_day_ago = date - timedelta(days=1)
|
||
province_kill_requests = ProvinceKillRequest.objects.filter(state__in=('pending', 'accepted'),
|
||
kill_request__recive_date__date=date_one_day_ago).select_related(
|
||
'killhouse_user')
|
||
kill_houses = KillHouse.objects.filter(
|
||
pk__in=province_kill_requests.values('killhouse_user')
|
||
)
|
||
kill_house_ware_houses = KillHouseWareHouse.objects.filter(kill_house__in=kill_houses, date__date=date)
|
||
steward_allocations = StewardAllocation.objects.filter(
|
||
Q(type='manual') | Q(type='auto', system_registration_code=True),
|
||
ware_house__in=kill_house_ware_houses, trash=False,
|
||
date__date=date).order_by('id')
|
||
|
||
total_number_of_carcasses = kill_house_ware_houses.aggregate(total=Sum('final_total_number_of_carcasses'))[
|
||
'total']
|
||
total_weight_of_carcasses = kill_house_ware_houses.aggregate(total=Sum('final_total_weight_of_carcasses'))[
|
||
'total']
|
||
allocated_total_number_of_carcasses = \
|
||
kill_house_ware_houses.aggregate(total=Sum('allocated_total_number_of_carcasses'))['total']
|
||
allocated_total_weight_of_carcasses = \
|
||
kill_house_ware_houses.aggregate(total=Sum('allocated_total_weight_of_carcasses'))['total']
|
||
remain_total_number_of_carcasses = \
|
||
kill_house_ware_houses.aggregate(total=Sum('remain_total_number_of_carcasses'))['total']
|
||
remain_total_weight_of_carcasses = \
|
||
kill_house_ware_houses.aggregate(total=Sum('remain_total_weight_of_carcasses'))['total']
|
||
|
||
return Response({
|
||
"buyers": len(kill_house_ware_houses),
|
||
"allocations": len(steward_allocations),
|
||
"total_number_of_carcasses": total_number_of_carcasses if total_number_of_carcasses != None else 0,
|
||
"total_weight_of_carcasses": total_weight_of_carcasses if total_weight_of_carcasses != None else 0,
|
||
"allocated_total_number_of_carcasses": allocated_total_number_of_carcasses if allocated_total_number_of_carcasses != None else 0,
|
||
"allocated_total_weight_of_carcasses": allocated_total_weight_of_carcasses if allocated_total_weight_of_carcasses != None else 0,
|
||
"remain_total_number_of_carcasses": remain_total_number_of_carcasses if remain_total_number_of_carcasses != None else 0,
|
||
"remain_total_weight_of_carcasses": remain_total_weight_of_carcasses if remain_total_weight_of_carcasses != None else 0,
|
||
})
|
||
|
||
|
||
class KillHouseForTotalReportAutomaticStewardAllocationViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouse.objects.all()
|
||
serializer_class = KillHouseForTotalReportAutomaticStewardAllocationSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
date = datetime.strptime(str(request.GET['date']), '%Y-%m-%d').date()
|
||
kill_house = KillHouse.objects.get(key=request.GET['kill_house_key'])
|
||
serializer = self.serializer_class(kill_house, context={'request': request})
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHouseForAutomaticStewardAllocationViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouse.objects.all()
|
||
serializer_class = KillHouseForAutomaticStewardAllocationSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
date = datetime.strptime(str(request.GET['date']), '%Y-%m-%d').date()
|
||
date = date - timedelta(days=1)
|
||
if request.GET['role'] == 'KillHouse':
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user)
|
||
serializer = self.serializer_class(kill_house, many=True, context={'request': request})
|
||
else:
|
||
province_kill_requests = ProvinceKillRequest.objects.filter(state__in=('pending', 'accepted'),
|
||
kill_request__recive_date__date=date).select_related(
|
||
'killhouse_user')
|
||
kill_houses = KillHouse.objects.filter(
|
||
pk__in=province_kill_requests.values('killhouse_user')
|
||
)
|
||
|
||
serializer = self.serializer_class(kill_houses, context={'request': request}, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHouseViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouse.objects.all()
|
||
serializer_class = KillHouseSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
# تابع مربوط به ثبت کشتارگاه
|
||
def create(self, request, *args, **kwargs):
|
||
group = Group.objects.get(name__exact="KillHouse")
|
||
city = City.objects.get(name=request.data['city'])
|
||
request.data.pop('city')
|
||
province = Province.objects.get(key=city.province.key)
|
||
system_profile = SystemUserProfile.objects.filter(mobile=request.data['mobile'], trash=False).last()
|
||
if system_profile:
|
||
if KillHouse.objects.filter(kill_house_operator__user=system_profile, trash=False).exists():
|
||
return Response({"result": "این کشتارگاه قبلا ثبت شده است"}, status=status.HTTP_403_FORBIDDEN)
|
||
|
||
else:
|
||
password = request.data['password']
|
||
data = {
|
||
"username": request.data['mobile'],
|
||
"password": password,
|
||
"api_key": PROJECT_API_KEY
|
||
}
|
||
req = requests.post(
|
||
url=ARTA_URL_REGISTER,
|
||
data=data,
|
||
verify=False
|
||
)
|
||
|
||
if req.status_code == 200:
|
||
user = User(username=request.data['mobile'], first_name=request.data['first_name'],
|
||
last_name=request.data['last_name'])
|
||
user.save()
|
||
base_id = SystemUserProfile.objects.all()
|
||
if base_id.count() > 0:
|
||
base_id = int(base_id.last().base_order) + 1
|
||
else:
|
||
base_id = 1000
|
||
system_profile = SystemUserProfile(
|
||
mobile=request.data['mobile'],
|
||
first_name=request.data['first_name'],
|
||
last_name=request.data['last_name'],
|
||
fullname=request.data['first_name'] + " " + request.data['last_name'],
|
||
user=user,
|
||
base_order=base_id,
|
||
password=password,
|
||
national_id=request.data['national_id'],
|
||
city=city,
|
||
province=province
|
||
)
|
||
system_profile.save()
|
||
else:
|
||
return Response({"result": "در ثبت کاربر مشکلی بوجود آمده است "}, status=status.HTTP_403_FORBIDDEN)
|
||
address = SystemAddress(city=city, province=province, address=request.data['address'])
|
||
address.save()
|
||
wallet = Wallet()
|
||
wallet.save()
|
||
system_profile.role.add(group)
|
||
operator = KillHouseOperator.objects.filter(user=system_profile, trash=False).last()
|
||
if operator:
|
||
pass
|
||
else:
|
||
operator = KillHouseOperator(
|
||
user=system_profile,
|
||
address=address,
|
||
wallet=wallet,
|
||
)
|
||
operator.save()
|
||
request.data.pop('mobile')
|
||
request.data.pop('first_name')
|
||
request.data.pop('last_name')
|
||
request.data.pop('address')
|
||
request.data.pop('national_id')
|
||
request.data.pop('password')
|
||
serializer = self.serializer_class(data=request.data)
|
||
if serializer.is_valid():
|
||
kill_house = serializer.create(validated_data=request.data)
|
||
kill_house.kill_house_operator = operator
|
||
kill_house.system_address = address
|
||
kill_house.save()
|
||
percentage = KillHousePercentage(kill_house=kill_house)
|
||
percentage.save()
|
||
province_allow_kill_house_choose_steward_guilds = ProvinceAllowKillHouseChooseStewardGuilds(
|
||
kill_house=kill_house)
|
||
province_allow_kill_house_choose_steward_guilds.save()
|
||
province_allow_direct_buying = ProvinceAllowKillHouseDirectBuying(kill_house=kill_house)
|
||
province_allow_direct_buying.save()
|
||
return Response({"result": "با موفقیت ثبت شد."}, status=status.HTTP_201_CREATED)
|
||
return Response(serializer.errors)
|
||
|
||
# تابع برای نمایش مربوط به نمایش کشتارگاه
|
||
def list(self, request, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
if 'role' in request.GET:
|
||
# if 'kill_house' in request.GET:
|
||
# kill_house = KillHouse.objects.filter(system_address__province=user.province, killer=False, trash=False)
|
||
#
|
||
# else:
|
||
if request.GET['role'] == 'KillHouse':
|
||
kill_house_operator = KillHouseOperator.objects.get(user=user, trash=False)
|
||
kill_house = KillHouse.objects.filter(kill_house_operator=kill_house_operator,
|
||
trash=False)
|
||
|
||
# if request.GET['role'] == 'ProvinceInspector' or request.GET['role'] == 'ProvinceOperator':
|
||
else:
|
||
kill_house = KillHouse.objects.filter(system_address__province=user.province, trash=False)
|
||
serializer = KillHouseSerializer(kill_house, many=True)
|
||
elif 'kill_house' in request.GET:
|
||
kill_house = KillHouse.objects.filter(system_address__province=user.province,
|
||
kill_house_operator__killer=False, killer=False, trash=False)
|
||
serializer = KillHouseSerializer(kill_house, many=True)
|
||
|
||
elif 'all' in request.GET:
|
||
kill_house = KillHouse.objects.filter(system_address__province=user.province, trash=False)
|
||
serializer = KillHouseSerializer(kill_house, many=True)
|
||
|
||
elif 'psp' in request.GET:
|
||
kill_house = KillHouse.objects.filter(out_province=False, trash=False)
|
||
serializer = PspKillHouseSerializer(kill_house, many=True)
|
||
|
||
elif 'self_kill_houses' in request.GET:
|
||
kill_house_operator = KillHouseOperator.objects.get(user=user, trash=False)
|
||
kill_house = KillHouse.objects.filter(kill_house_operator=kill_house_operator,
|
||
trash=False)
|
||
serializer = KillHouseSerializer(kill_house, many=True)
|
||
elif 'exclusive-killers' in request.GET:
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).first()
|
||
percentage = KillHousePercentage.objects.filter(
|
||
Q(kill_house=kill_house) | Q(kill_house_for_killer=kill_house, kill_house__type='exclusive',
|
||
kill_house__show_exclusive=True),
|
||
trash=False).values_list('kill_house__id', flat=True).distinct()
|
||
kill_houses = KillHouse.objects.filter(id__in=percentage, trash=False)
|
||
|
||
serializer = KillHouseSerializer(kill_houses, many=True)
|
||
|
||
elif 'total-exclude-exclusive-killers' in request.GET:
|
||
percentage = KillHousePercentage.objects.filter(kill_house_for_killer__isnull=False,
|
||
kill_house__type='exclusive',
|
||
kill_house__show_exclusive=True, trash=False).values_list(
|
||
'kill_house__id', flat=True).distinct()
|
||
kill_houses = KillHouse.objects.filter(trash=False).exclude(id__in=percentage).order_by('id', 'killer')
|
||
|
||
serializer = distributionKillHouseSerializer(kill_houses, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
elif 'exclusive-killers-free-bar' in request.GET:
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).first()
|
||
|
||
percentage = KillHousePercentage.objects.filter(kill_house_for_killer=kill_house,
|
||
kill_house__type='exclusive',
|
||
kill_house__show_exclusive=True, trash=False).values_list(
|
||
'kill_house__id', flat=True)
|
||
|
||
kill_houses = KillHouse.objects.filter(Q(id__in=percentage) | Q(killer=True, type='public'), trash=False)
|
||
|
||
serializer = KillHouseSerializer(kill_houses, many=True)
|
||
|
||
elif 'dispenser' in request.GET:
|
||
kill_house = KillHouse.objects.filter(system_address__province=user.province,
|
||
out_province=False, trash=False).order_by('id')
|
||
serializer = GeneralKillHouseSerializer(kill_house, many=True)
|
||
|
||
elif 'gate-way-kill-houses' in request.GET:
|
||
kill_house = KillHouse.objects.filter(system_address__province=user.province,
|
||
out_province=False, trash=False)
|
||
serializer = GeneralKillHouseSerializer(kill_house, many=True)
|
||
|
||
|
||
else:
|
||
try:
|
||
kill_house_operator = KillHouseOperator.objects.get(user=user, trash=False)
|
||
kill_house = KillHouse.objects.filter(kill_house_operator=kill_house_operator, trash=False).first()
|
||
serializer = KillHouseSerializer(kill_house)
|
||
except:
|
||
kill_house = KillHouse.objects.filter(out_province=False, type='public', trash=False)
|
||
serializer = KillHouseSerializer(kill_house, many=True)
|
||
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
# تابع برای ویرایش درخواست کشتار ثبت شده از سمت کشتارگاه
|
||
def update(self, request, *args, pk=None, **kwargs):
|
||
# refresh(request.user.id)
|
||
|
||
kill_house = KillHouse.objects.filter(
|
||
key=request.data['kill_house_key'], trash=False
|
||
).select_related('kill_house_operator__user').last()
|
||
system_user_profile = SystemUserProfile.objects.get(key=kill_house.kill_house_operator.user.key)
|
||
|
||
if 'company_gateway_percent' in request.data.keys():
|
||
kill_house.company_gateway_percent = request.data['company_gateway_percent']
|
||
kill_house.union_gateway_percent = request.data['union_gateway_percent']
|
||
kill_house.guilds_gateway_percent = request.data['guilds_gateway_percent']
|
||
kill_house.other_gateway_percent = request.data['other_gateway_percent']
|
||
kill_house.save()
|
||
elif 'quota' in request.data.keys():
|
||
kill_house.quota = request.data['quota']
|
||
kill_house.governmental_quota = request.data['governmental_quota']
|
||
kill_house.quota_max_kill_limit = request.data['quota_max_kill_limit']
|
||
kill_house.quota_request = request.data['quota_request']
|
||
kill_house.quota_custom = request.data['quota_custom']
|
||
kill_house.quota_custom_quantity = request.data['quota_custom_quantity']
|
||
kill_house.save()
|
||
elif 'maximum_load_volume_increase' in request.data.keys():
|
||
kill_house.maximum_load_volume_increase = request.data['maximum_load_volume_increase']
|
||
kill_house.maximum_load_volume_reduction = request.data['maximum_load_volume_reduction']
|
||
kill_house.save()
|
||
|
||
elif 'ware_house_remaining_weight_limitation_status' in request.data.keys():
|
||
kill_house.ware_house_remaining_weight_limitation_status = request.data[
|
||
'ware_house_remaining_weight_limitation_status']
|
||
kill_house.ware_house_remaining_weight_limitation = request.data['ware_house_remaining_weight_limitation']
|
||
kill_house.ware_house_remaining_percent_limitation_status = request.data[
|
||
'ware_house_remaining_percent_limitation_status']
|
||
kill_house.ware_house_remaining_percent_limitation = request.data['ware_house_remaining_percent_limitation']
|
||
kill_house.save()
|
||
|
||
|
||
elif 'total_kill_capacity' in request.data.keys():
|
||
kill_house.max_kill_limit = request.data['max_kill_limit']
|
||
kill_house.total_kill_capacity = request.data['total_kill_capacity']
|
||
kill_house.extra_bar_kill_percent = request.data['extra_bar_kill_percent']
|
||
kill_house.save()
|
||
elif 'name' in request.data.keys():
|
||
kill_house.name = request.data['name']
|
||
kill_house.save()
|
||
elif 'active' in request.data.keys():
|
||
kill_house.active = request.data['active']
|
||
kill_house.save()
|
||
elif 'type' in request.data.keys():
|
||
kill_house.type = request.data['type']
|
||
kill_house.save()
|
||
|
||
elif 'out_province_selling_limitation' in request.data.keys():
|
||
kill_house.out_province_selling_limitation = request.data['out_province_selling_limitation']
|
||
kill_house.out_province_selling_limitation_percent = request.data['out_province_selling_limitation_percent']
|
||
kill_house.save()
|
||
elif 'in_province_selling_limitation' in request.data.keys():
|
||
kill_house.in_province_selling_limitation = request.data['in_province_selling_limitation']
|
||
kill_house.in_province_selling_limitation_percent = request.data['in_province_selling_limitation_percent']
|
||
kill_house.save()
|
||
elif 'governmental_selling_permission' in request.data.keys():
|
||
kill_house.governmental_selling_permission = request.data['governmental_selling_permission']
|
||
kill_house.in_province_governmental_selling_percent = request.data[
|
||
'in_province_governmental_selling_percent']
|
||
kill_house.out_province_governmental_selling_percent = request.data[
|
||
'out_province_governmental_selling_percent']
|
||
kill_house.segmentation_governmental_percent = request.data['segmentation_governmental_percent']
|
||
|
||
kill_house.save()
|
||
|
||
elif 'free_selling_permission' in request.data.keys():
|
||
kill_house.free_selling_permission = request.data['free_selling_permission']
|
||
kill_house.in_province_free_selling_percent = request.data['in_province_free_selling_percent']
|
||
kill_house.out_province_free_selling_percent = request.data['out_province_free_selling_percent']
|
||
kill_house.segmentation_free_selling_percent = request.data['segmentation_free_selling_percent']
|
||
|
||
kill_house.save()
|
||
|
||
elif 'ware_house_remaining_weight_archive_percent':
|
||
kill_house.ware_house_remaining_weight_archive_percent = request.data[
|
||
'ware_house_remaining_weight_archive_percent']
|
||
kill_house.save()
|
||
|
||
else:
|
||
system_user_profile.first_name = request.data['first_name']
|
||
system_user_profile.last_name = request.data['last_name']
|
||
system_user_profile.fullname = request.data['first_name'] + " " + request.data['last_name']
|
||
system_user_profile.save()
|
||
first_mobile_number = system_user_profile.mobile
|
||
second_mobile_number = request.data['mobile']
|
||
request.data.pop('mobile')
|
||
if first_mobile_number != second_mobile_number:
|
||
if SystemUserProfile.objects.filter(mobile=second_mobile_number).exists():
|
||
return Response({"result": "این شماره در سامانه به نام شخص دیگری است"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
data = {
|
||
"first_mobile_number": first_mobile_number,
|
||
"second_mobile_number": second_mobile_number,
|
||
}
|
||
req = requests.post(
|
||
url=ARTA_URL_CHANGE_MOBILE_NUMBER,
|
||
data=data,
|
||
verify=False
|
||
)
|
||
if req.status_code == 200:
|
||
second_mobile_number = second_mobile_number
|
||
user = User.objects.get(id=system_user_profile.user.id)
|
||
user.username = second_mobile_number
|
||
user.save()
|
||
system_user_profile.mobile = second_mobile_number
|
||
system_user_profile.save()
|
||
return Response({"result": "باموفقیت ویرایش شد"}, status=status.HTTP_200_OK)
|
||
|
||
# ویوست مربوط به ثبت کشتارگاه
|
||
|
||
|
||
class PosKillHouseViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouse.objects.all()
|
||
serializer_class = PosKillHouseSerializer
|
||
permission_classes = [AllowAny]
|
||
pagination_class = CustomPagination
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = KillHouseFilterSet
|
||
filterset_fields = [
|
||
'name',
|
||
'kill_house_operator__user__fullname',
|
||
'kill_house_operator__user__mobile',
|
||
'system_address__city__name',
|
||
|
||
]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
pos = POSMachine.objects.get(pos_id=request.GET['pos-id'], trash=False)
|
||
if pos.kill_house:
|
||
kill_houses = KillHouse.objects.filter(out_province=False, trash=False).order_by('id').exclude(
|
||
id=pos.kill_house.id)
|
||
|
||
else:
|
||
kill_houses = KillHouse.objects.filter(out_province=False, trash=False).order_by('id')
|
||
|
||
if 'search' in request.GET:
|
||
if request.GET['search'] == 'filter':
|
||
kill_houses_list = []
|
||
if request.GET['value'] != "":
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=kill_houses
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=kill_houses)
|
||
kill_houses_list = ps.filter()
|
||
kill_houses = [] if len(kill_houses_list) == 0 else kill_houses_list
|
||
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(kill_houses)
|
||
if page is not None:
|
||
serializer = self.get_serializer(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = self.serializer_class(kill_houses, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHouseAllowVetViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseAllowVet.objects.all()
|
||
serializer_class = KillHouseAllowVetSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
# تابع مربوط به ثبت کشتارگاه
|
||
def create(self, request, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
kill_house_operator = KillHouseOperator.objects.get(user=user)
|
||
kill_houses = KillHouse.objects.filter(kill_house_operator=kill_house_operator)
|
||
kill_house_allow_vets = KillHouseAllowVet.objects.filter(kill_house__in=kill_houses)
|
||
allow = request.data['allow']
|
||
if kill_house_allow_vets.count() > 0:
|
||
for kill_house_allow_vet in kill_house_allow_vets:
|
||
kill_house_allow_vet.allow = allow
|
||
kill_house_allow_vet.save()
|
||
else:
|
||
for kill_house in kill_houses:
|
||
serializer = self.serializer_class(data=request.data)
|
||
if serializer.is_valid():
|
||
allow = serializer.create(validated_data=request.data)
|
||
allow.kill_house = kill_house
|
||
allow.save()
|
||
return Response({"result": "created"}, status=status.HTTP_201_CREATED)
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
kill_house_operator = KillHouseOperator.objects.get(user=user)
|
||
kill_houses = KillHouse.objects.filter(kill_house_operator=kill_house_operator)
|
||
kill_house_allow_vet = KillHouseAllowVet.objects.filter(kill_house__in=kill_houses)
|
||
serializer = KillHouseAllowVetSerializer(kill_house_allow_vet, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHousePercentageViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHousePercentage.objects.all()
|
||
serializer_class = KillHousePercentageSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
percents = []
|
||
user_profile = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
kill_house = KillHouse.objects.filter(system_address__province=user_profile.province, trash=False)
|
||
if kill_house:
|
||
percents = KillHousePercentage.objects.filter(kill_house__in=kill_house).order_by('-percent')
|
||
|
||
serializer = KillHousePercentageSerializer(percents, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
def update(self, request, pk=None, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
if 'percentage_list' in request.data.keys():
|
||
kill_house_percentage_lists = request.data['percentage_list']
|
||
request.data.pop('percentage_list')
|
||
if request.data['type'] == 'manual':
|
||
for kill_house_percentage_list in kill_house_percentage_lists:
|
||
kill_house_percentage = KillHousePercentage.objects.get(key=kill_house_percentage_list["key"],
|
||
trash=False)
|
||
kill_house_percentage.percent = kill_house_percentage_list["percent"]
|
||
if 'killer_kill_house_key' in kill_house_percentage_list.keys():
|
||
if kill_house_percentage_list['killer_kill_house_key'] != None:
|
||
kill_house_percentage.kill_house_for_killer = KillHouse.objects.get(
|
||
key=kill_house_percentage_list['killer_kill_house_key'], trash=False)
|
||
kill_house_percentage.save()
|
||
else:
|
||
|
||
guilds = Guilds.objects.filter(kill_house_centers_allocation__isnull=False, trash=False)
|
||
total_count = len(guilds)
|
||
total_weight = guilds.aggregate(total_quantity=Sum('allocation_limit')).get('total_quantity', 0)
|
||
|
||
if total_count == 0:
|
||
return Response({"result": "صنفی وجود ندارد برای کشتارگاه ها و کشتارکن ها"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
if request.data['type'] == 'guilds_weight':
|
||
|
||
for kill_house_percentage_list in kill_house_percentage_lists:
|
||
kill_house_percentage = KillHousePercentage.objects.get(key=kill_house_percentage_list["key"],
|
||
trash=False)
|
||
kill_house_percentage_weight = 0
|
||
for guild in guilds:
|
||
if len(guild.kill_house_centers_allocation) == 0 or guild.kill_house_centers_allocation == None:
|
||
continue
|
||
if guild.kill_house_centers_allocation[0]['value'] == str(
|
||
kill_house_percentage.kill_house.key):
|
||
kill_house_percentage_weight += guild.allocation_limit
|
||
kill_house_percentage.percent = round((kill_house_percentage_weight / total_weight) * 100, 2)
|
||
kill_house_percentage.guilds_weight = kill_house_percentage_weight
|
||
kill_house_percentage.last_guilds_update_date = str(datetime.now())
|
||
kill_house_percentage.save()
|
||
|
||
|
||
else:
|
||
|
||
for kill_house_percentage_list in kill_house_percentage_lists:
|
||
kill_house_percentage = KillHousePercentage.objects.get(key=kill_house_percentage_list["key"],
|
||
trash=False)
|
||
kill_house_percentage_counter = 0
|
||
for guild in guilds:
|
||
if len(guild.kill_house_centers_allocation) == 0 or guild.kill_house_centers_allocation == None:
|
||
continue
|
||
if guild.kill_house_centers_allocation[0]['value'] == str(
|
||
kill_house_percentage.kill_house.key):
|
||
kill_house_percentage_counter += 1
|
||
kill_house_percentage.percent = round((kill_house_percentage_counter / total_count) * 100, 2)
|
||
kill_house_percentage.guilds_quantity = kill_house_percentage_counter
|
||
kill_house_percentage.last_guilds_update_date = str(datetime.now())
|
||
kill_house_percentage.save()
|
||
|
||
elif 'percentage_key' in request.data.keys():
|
||
percentage = KillHousePercentage.objects.get(key=request.data['percentage_key'])
|
||
if 'identity' in request.data.keys():
|
||
kill_house = KillHouse.objects.get(key=percentage.kill_house.key)
|
||
if kill_house.killer == False:
|
||
if request.data['identity'] == 'Killer':
|
||
previous_state = kill_house.killer
|
||
if KillHousePercentage.objects.filter(
|
||
kill_house_for_killer=kill_house).exists():
|
||
return Response({
|
||
"result": "این کشتارگاه توسط چندین کشتارکن رزرو شده است و امکان تغییر ماهیت وجود ندارد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
if KillRequest.objects.filter(remain_quantity__gt=0, slaughter_house=kill_house,
|
||
trash=False).exists():
|
||
return Response({
|
||
"result": "این کشتارگاه توسط چندین کشتارکن در قسمت اعلام نیاز کشتارگاه رزرو شده است و امکان تغییر ماهیت وجود ندارد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
kill_house.killer = True
|
||
kill_house.save()
|
||
new_state = kill_house.killer
|
||
percentage.change_data = {
|
||
"previous_killer_state": previous_state,
|
||
"new_killer_state": new_state,
|
||
"type": kill_house.type,
|
||
"fullname": user.fullname,
|
||
"mobile": user.mobile,
|
||
"date": str(datetime.now()),
|
||
"kill_house": percentage.kill_house_for_killer.name if percentage.kill_house_for_killer != None else None,
|
||
|
||
}
|
||
percentage.save()
|
||
|
||
|
||
else:
|
||
if request.data['identity'] == 'KillHouse':
|
||
previous_state = kill_house.killer
|
||
kill_house.killer = False
|
||
kill_house.save()
|
||
new_state = kill_house.killer
|
||
percentage.kill_house_for_killer = None
|
||
percentage.change_data = {
|
||
"previous_killer_state": previous_state,
|
||
"new_killer_state": new_state,
|
||
"type": kill_house.type,
|
||
"fullname": user.fullname,
|
||
"mobile": user.mobile,
|
||
"date": str(datetime.now()),
|
||
"kill_house": percentage.kill_house_for_killer.name if percentage.kill_house_for_killer != None else None,
|
||
|
||
}
|
||
percentage.save()
|
||
|
||
|
||
else:
|
||
kill_house = KillHouse.objects.get(key=request.data['kill_house_key'])
|
||
percentage.kill_house_for_killer = kill_house
|
||
if percentage.change_data:
|
||
percentage.change_data["kill_house"] = kill_house.name
|
||
percentage.change_data["date"] = str(datetime.now())
|
||
percentage.save()
|
||
return Response({"result": "با موفقیت ویرایش شد."}, status=status.HTTP_200_OK)
|
||
|
||
|
||
# ویوست مربوط به اضافه کردن خودرو به کشتارگاه
|
||
class KillHouseDriverViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseDriver.objects.all()
|
||
serializer_class = KillHouseDriverSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = KillHouseDriverFilterSet
|
||
filterset_fields = [
|
||
'health_code',
|
||
'user__mobile',
|
||
'user__national_id',
|
||
'user__base_order',
|
||
]
|
||
|
||
# تابع مربوط به اضافه کردن خودرو به کشتارگاه
|
||
def create(self, request, *args, **kwargs):
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
role = request.data['role']
|
||
request.data.pop('role')
|
||
|
||
# refresh(request.user.id)
|
||
kill_house = None
|
||
if 'kill_house_key' in request.data.keys():
|
||
if request.data['kill_house_key'] != None:
|
||
kill_house = KillHouse.objects.get(key=request.data['kill_house_key'])
|
||
request.data.pop('kill_house_key')
|
||
if role == 'KillHouse':
|
||
kill_house_operator = KillHouseOperator.objects.get(user=user, trash=False)
|
||
kill_house = KillHouse.objects.filter(kill_house_operator=kill_house_operator, trash=False)
|
||
# if not ProvinceAllowKillHouseRegisterCar.objects.filter(
|
||
# kill_house__in=kill_house, allow=True).exists():
|
||
# return Response({"result": "شما اجازه ساخت ماشین ندارید"}, status=status.HTTP_403_FORBIDDEN)
|
||
person = SystemUserProfile.objects.get(user=request.user)
|
||
group = Group.objects.get(name__exact="Driver")
|
||
city = City.objects.get(name=request.data['city_name'])
|
||
province = Province.objects.get(key=user.province.key)
|
||
request.data.pop('city_name')
|
||
# request.data.pop('province_name')
|
||
if KillHouseDriver.objects.filter(pelak=request.data['pelak'], trash=False).exists():
|
||
return Response({"result": "این ماشین قبلا ثبت شده!"}, status=status.HTTP_403_FORBIDDEN)
|
||
system_profile = SystemUserProfile.objects.filter(mobile=request.data['driver_mobile'], trash=False)
|
||
if system_profile.count() > 0:
|
||
system_profile = system_profile.last()
|
||
if group not in system_profile.role.all():
|
||
system_profile.role.add(group)
|
||
|
||
else:
|
||
|
||
password = "00100"
|
||
data = {
|
||
"username": request.data['driver_mobile'],
|
||
"password": password,
|
||
"api_key": PROJECT_API_KEY
|
||
}
|
||
req = requests.post(
|
||
url=ARTA_URL_REGISTER,
|
||
data=data,
|
||
verify=False
|
||
)
|
||
if req.status_code == 200:
|
||
user = User(username=request.data['driver_mobile'], first_name=request.data['first_name'],
|
||
last_name=request.data['last_name'])
|
||
user.save()
|
||
base_id = SystemUserProfile.objects.all()
|
||
if base_id.count() > 0:
|
||
base_id = int(base_id.last().base_order) + 1
|
||
else:
|
||
base_id = 1000
|
||
system_profile = SystemUserProfile(
|
||
mobile=request.data['driver_mobile'],
|
||
first_name=request.data['first_name'],
|
||
last_name=request.data['last_name'],
|
||
fullname=request.data['first_name'] + " " + request.data['last_name'],
|
||
user=user,
|
||
base_order=base_id,
|
||
password=password,
|
||
city=city,
|
||
province=province
|
||
)
|
||
system_profile.save()
|
||
system_profile.role.add(group)
|
||
|
||
|
||
else:
|
||
return Response({"result": "در ثبت کاربر مشکلی پیش آمده است!"}, status=status.HTTP_403_FORBIDDEN)
|
||
|
||
wallet = Wallet()
|
||
wallet.save()
|
||
serializer = self.serializer_class(data=request.data)
|
||
if serializer.is_valid():
|
||
full_name = request.data['first_name'] + " " + request.data['last_name']
|
||
request.data.pop('first_name')
|
||
request.data.pop('last_name')
|
||
kill_house_driver = serializer.create(validated_data=request.data)
|
||
kill_house_driver.user = system_profile
|
||
kill_house_driver.wallet = wallet
|
||
kill_house_driver.registrar = {
|
||
"role": role,
|
||
"full_name": person.fullname,
|
||
"mobile": person.mobile,
|
||
"date": str(kill_house_driver.create_date)
|
||
}
|
||
kill_house_driver.driver_name = full_name
|
||
kill_house_driver.save()
|
||
if kill_house != None:
|
||
if KillHouseADDCAR.objects.filter(kill_house__in=kill_house, driver=kill_house_driver,
|
||
trash=False).exists():
|
||
return Response({"result": "این ماشین قبلا برای کشتارگاه ثبت شده!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
else:
|
||
add_car = KillHouseADDCAR(
|
||
kill_house=kill_house.last(),
|
||
driver=kill_house_driver
|
||
)
|
||
add_car.save()
|
||
else:
|
||
if kill_house_driver.type == 'rental':
|
||
# kill_houses = KillHouse.objects.filter(trash=False)
|
||
# for kill_house in kill_houses:
|
||
add_car = KillHouseADDCAR(
|
||
# kill_house=kill_house,
|
||
driver=kill_house_driver
|
||
)
|
||
add_car.save()
|
||
|
||
return Response({"result": "ماشین با موفقیت ثبت شد."}, status=status.HTTP_201_CREATED)
|
||
return Response(serializer.errors)
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
if 'role' in request.GET:
|
||
# refresh(request.user.id)
|
||
user = SystemUserProfile.objects.get(user=request.user)
|
||
list_car = []
|
||
if 'health_code' in request.GET:
|
||
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}={1}'.format(item, request.GET['health_code']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=self.queryset.filter(trash=False)
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=self.queryset)
|
||
filtered_kill_house_driver = ps.filter()
|
||
serializer = self.serializer_class(filtered_kill_house_driver, many=True)
|
||
return Response(serializer.data)
|
||
return Response(list_car)
|
||
|
||
|
||
# cars = KillHouseDriver.objects.filter(health_code=request.GET['health_code'],
|
||
# trash=False)
|
||
# if cars.count() > 0:
|
||
# cars = cars.last()
|
||
# dict1 = {
|
||
# "id": cars.id,
|
||
# "key": cars.key,
|
||
# "driver_name": cars.driver_name,
|
||
# "driver_mobile": cars.driver_mobile,
|
||
# "type_car": cars.type_car,
|
||
# "pelak": cars.pelak,
|
||
# "capocity": float(cars.capocity),
|
||
# "weight_without_load": cars.weight_without_load,
|
||
# "health_code": cars.health_code,
|
||
# }
|
||
# list_car.append(dict1)
|
||
# return Response(list_car, status=status.HTTP_200_OK)
|
||
else:
|
||
if request.GET['role'] == 'KillHouse':
|
||
kill_house_drivers = KillHouseDriver.objects.filter(user__province=user.province, type='rental',
|
||
archive=False)
|
||
kill_house_operator = KillHouseOperator.objects.get(user=user, trash=False)
|
||
kill_house = KillHouse.objects.filter(kill_house_operator=kill_house_operator, trash=False).first()
|
||
add_car = KillHouseADDCAR.objects.filter(kill_house=kill_house, trash=False,
|
||
archive=False).order_by('id')
|
||
if add_car.count() > 0:
|
||
kill_house_list = []
|
||
for add_car_obj in add_car:
|
||
allow = ProvinceAllowKillHouseRegisterCar.objects.filter(
|
||
kill_house=add_car_obj.kill_house)
|
||
if allow.count() > 0:
|
||
allow_state = allow.last().allow
|
||
else:
|
||
allow_state = None
|
||
kill_house_name = add_car_obj.kill_house.name
|
||
kill_house_key = add_car_obj.kill_house.key
|
||
kill_house_dict = {"kill_house_name": kill_house_name, "kill_house_key": kill_house_key,
|
||
"allow_state": allow_state}
|
||
if not any(d["kill_house_name"] == kill_house_name for d in kill_house_list):
|
||
kill_house_list.append(kill_house_dict)
|
||
|
||
dict1 = {
|
||
"id": add_car_obj.driver.id,
|
||
"key": add_car_obj.driver.key,
|
||
"add_car_key": add_car_obj.key,
|
||
"driver_name": add_car_obj.driver.driver_name,
|
||
"driver_type": add_car_obj.driver.type,
|
||
"driver_active_state": add_car_obj.driver.active_state,
|
||
"add_car_active_state": add_car_obj.active_state,
|
||
"first_name": add_car_obj.driver.user.first_name,
|
||
"last_name": add_car_obj.driver.user.last_name,
|
||
"city": add_car_obj.driver.user.city.name,
|
||
"driver_mobile": add_car_obj.driver.driver_mobile,
|
||
"kill_house_list": kill_house_list,
|
||
"type_car": add_car_obj.driver.type_car,
|
||
"type": add_car_obj.driver.type,
|
||
"pelak": add_car_obj.driver.pelak,
|
||
"capocity": float(add_car_obj.driver.capocity),
|
||
"weight_without_load": add_car_obj.driver.weight_without_load,
|
||
"health_code": add_car_obj.driver.health_code,
|
||
}
|
||
list_car.append(dict1)
|
||
if kill_house_drivers:
|
||
for kill_house_driver in kill_house_drivers:
|
||
dict2 = {
|
||
"id": kill_house_driver.id,
|
||
"key": kill_house_driver.key,
|
||
"add_car_key": None,
|
||
"add_car_active_state": kill_house_driver.active_state,
|
||
"driver_name": kill_house_driver.driver_name,
|
||
"driver_type": kill_house_driver.type,
|
||
"driver_active_state": kill_house_driver.active_state,
|
||
"first_name": kill_house_driver.user.first_name,
|
||
"last_name": kill_house_driver.user.last_name,
|
||
"city": kill_house_driver.user.city.name,
|
||
"driver_mobile": kill_house_driver.driver_mobile,
|
||
"kill_house_list": [],
|
||
"type_car": kill_house_driver.type_car,
|
||
"type": kill_house_driver.type,
|
||
"pelak": kill_house_driver.pelak,
|
||
"capocity": float(kill_house_driver.capocity),
|
||
"weight_without_load": kill_house_driver.weight_without_load,
|
||
"health_code": kill_house_driver.health_code,
|
||
}
|
||
list_car.append(dict2)
|
||
|
||
return Response(list_car, status=status.HTTP_200_OK)
|
||
else:
|
||
list_car = []
|
||
cars = KillHouseDriver.objects.filter(user__province=user.province, trash=False,
|
||
archive=False).order_by('id') \
|
||
.select_related('user')
|
||
|
||
if cars.count() > 0:
|
||
for car in cars:
|
||
add_car = KillHouseADDCAR.objects.filter(driver=car, trash=False,
|
||
archive=False).select_related(
|
||
'kill_house')
|
||
if add_car.count() > 0:
|
||
kill_house_list = []
|
||
for add_car_obj in add_car:
|
||
if add_car_obj.kill_house != None:
|
||
allow = ProvinceAllowKillHouseRegisterCar.objects.filter(
|
||
kill_house=add_car_obj.kill_house)
|
||
if allow.count() > 0:
|
||
allow_state = allow.last().allow
|
||
else:
|
||
allow_state = None
|
||
kill_house_name = add_car_obj.kill_house.name
|
||
kill_house_key = add_car_obj.kill_house.key
|
||
kill_house_dict = {"kill_house_name": kill_house_name,
|
||
"kill_house_key": kill_house_key, "allow_state": allow_state}
|
||
if not any(d["kill_house_name"] == kill_house_name for d in kill_house_list):
|
||
kill_house_list.append(kill_house_dict)
|
||
|
||
dict1 = {
|
||
"id": car.id,
|
||
"key": car.key,
|
||
"add_car_key": None,
|
||
"driver_name": car.driver_name,
|
||
"driver_type": car.type,
|
||
"driver_active_state": car.active_state,
|
||
"type": car.type,
|
||
"first_name": car.user.first_name,
|
||
"last_name": car.user.last_name,
|
||
"city": car.user.city.name,
|
||
"driver_mobile": car.driver_mobile,
|
||
"kill_house_list": kill_house_list,
|
||
"type_car": car.type_car,
|
||
"pelak": car.pelak,
|
||
"capocity": float(car.capocity),
|
||
"weight_without_load": car.weight_without_load,
|
||
"health_code": car.health_code,
|
||
}
|
||
list_car.append(dict1)
|
||
else:
|
||
dict1 = {
|
||
"id": car.id,
|
||
"type": car.type,
|
||
"add_car_key": None,
|
||
"key": car.key,
|
||
"driver_type": car.type,
|
||
"driver_name": car.driver_name,
|
||
"driver_active_state": car.active_state,
|
||
"first_name": car.user.first_name,
|
||
"last_name": car.user.last_name,
|
||
"city": car.user.city.name,
|
||
"driver_mobile": car.driver_mobile,
|
||
"kill_house_list": [],
|
||
"type_car": car.type_car,
|
||
"pelak": car.pelak,
|
||
"capocity": float(car.capocity),
|
||
"weight_without_load": car.weight_without_load,
|
||
"health_code": car.health_code,
|
||
}
|
||
list_car.append(dict1)
|
||
|
||
return Response(list_car, status=status.HTTP_200_OK)
|
||
else:
|
||
return Response(list_car, status=status.HTTP_200_OK)
|
||
|
||
else:
|
||
return Response([], status=status.HTTP_200_OK)
|
||
|
||
def update(self, request, pk=None, *args, **kwargs):
|
||
if 'change_activation' in request.data.keys():
|
||
car = KillHouseDriver.objects.get(key=request.data["driver_key"])
|
||
|
||
add_cars = KillHouseADDCAR.objects.filter(driver=car, trash=False)
|
||
for add_car in add_cars:
|
||
add_car.active_state = request.data['change_activation']
|
||
add_car.save()
|
||
car.active_state = request.data['change_activation']
|
||
car.save()
|
||
return Response({"result": "با موفقیت انجام شد"}, status=status.HTTP_200_OK)
|
||
elif 'add_car_change_activation' in request.data.keys():
|
||
add_car = KillHouseADDCAR.objects.get(key=request.data["add_car_key"], trash=False)
|
||
add_car.active_state = request.data['add_car_change_activation']
|
||
add_car.save()
|
||
return Response({"result": "با موفقیت انجام شد"}, status=status.HTTP_200_OK)
|
||
|
||
|
||
|
||
else:
|
||
car = KillHouseDriver.objects.get(key=request.data["driver_key"])
|
||
|
||
if 'city_name' in request.data.keys() and request.data['city_name'] != None:
|
||
city = City.objects.get(name=request.data['city_name'])
|
||
else:
|
||
city = None
|
||
request.data.pop('city_name')
|
||
|
||
user = SystemUserProfile.objects.get(key=car.user.key)
|
||
request.data.pop('driver_key')
|
||
first_name = request.data['first_name']
|
||
last_name = request.data['last_name']
|
||
request.data.pop('first_name')
|
||
request.data.pop('last_name')
|
||
if first_name != None:
|
||
user.first_name = first_name
|
||
if last_name != None:
|
||
user.last_name = last_name
|
||
if city != None:
|
||
user.city = city
|
||
if first_name != None and last_name != None:
|
||
car.driver_name = first_name + "" + last_name
|
||
user.fullname = first_name + "" + last_name
|
||
# serializer = self.serializer_class(car)
|
||
user.save()
|
||
car.save()
|
||
serializer = self.serializer_class(car)
|
||
serializer.update(instance=car, validated_data=request.data)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
def destroy(self, request, pk=None, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
car = KillHouseDriver.objects.get(key=request.GET["key"])
|
||
if KillHouseRequest.objects.filter(active_state='active', add_car__driver=car, trash=False).exists():
|
||
return Response({"result": "ماشین دارای بار فعال میباشد"}, status=status.HTTP_403_FORBIDDEN)
|
||
|
||
kill_house_cars = KillHouseADDCAR.objects.filter(driver=car, trash=False)
|
||
if kill_house_cars:
|
||
for add_car in kill_house_cars:
|
||
add_car.trash = True
|
||
add_car.save()
|
||
|
||
car.trash = True
|
||
car.save()
|
||
return Response('ماشین با موفقیت حذف شد', status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHouseDriverTotalDashboardViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseDriver.objects.all()
|
||
serializer_class = KillHouseDriverSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
|
||
if request.GET['role'] == 'KillHouse':
|
||
user = SystemUserProfile.objects.get(trash=False, user=request.user)
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).first()
|
||
kill_house_drivers = KillHouseDriver.objects.filter(archive=False, pk__in=KillHouseADDCAR.objects.filter(
|
||
Q(kill_house=kill_house) | Q(kill_house__isnull=True, driver__type='rental'), trash=False,
|
||
archive=False).values_list(
|
||
'driver__id', flat=True), trash=False)
|
||
active = kill_house_drivers.filter(pk__in=KillHouseADDCAR.objects.filter(
|
||
Q(kill_house=kill_house) | Q(kill_house__isnull=True, driver__type='rental'), trash=False,
|
||
active_state=True, archive=False).values_list('driver__id', flat=True))
|
||
inactive = kill_house_drivers.filter(pk__in=KillHouseADDCAR.objects.filter(
|
||
Q(kill_house=kill_house) | Q(kill_house__isnull=True, driver__type='rental'), trash=False,
|
||
active_state=False, archive=False).values_list('driver__id', flat=True))
|
||
suspended = 0
|
||
|
||
else:
|
||
kill_house_drivers = KillHouseDriver.objects.filter(trash=False, archive=False)
|
||
|
||
active = kill_house_drivers.filter(pk__in=KillHouseADDCAR.objects.filter(
|
||
Q(kill_house__isnull=False) | Q(kill_house__isnull=True, driver__type='rental'), trash=False,
|
||
active_state=True, archive=False).values_list('driver__id', flat=True))
|
||
inactive = kill_house_drivers.filter(pk__in=KillHouseADDCAR.objects.filter(
|
||
Q(kill_house__isnull=False) | Q(kill_house__isnull=True, driver__type='rental'), trash=False,
|
||
active_state=False, archive=False).values_list('driver__id', flat=True))
|
||
suspended = kill_house_drivers.exclude(pk__in=KillHouseADDCAR.objects.filter(
|
||
Q(kill_house__isnull=False) | Q(kill_house__isnull=True, driver__type='rental'),
|
||
trash=False, archive=False).values_list('driver__id', flat=True))
|
||
suspended = len(suspended)
|
||
|
||
rental = kill_house_drivers.filter(type='rental')
|
||
exclusive = kill_house_drivers.filter(type='exclusive')
|
||
|
||
result = {
|
||
"total": len(kill_house_drivers),
|
||
"exclusive": len(exclusive),
|
||
"rental": len(rental),
|
||
"active": len(active),
|
||
"inactive": len(inactive),
|
||
"suspended": suspended,
|
||
}
|
||
|
||
return Response(result, status=status.HTTP_200_OK)
|
||
|
||
|
||
# ویوست مربوط به اضافه کردن خودرو به کشتارگاه
|
||
class KillHouseADDCARViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseADDCAR.objects.all()
|
||
serializer_class = KillHouseADDCARSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
# تابع مربوط به اضافه کردن خودرو به کشتارگاه
|
||
def create(self, request, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
kill_house = KillHouse.objects.get(key=request.data['kill_house_key'], trash=False)
|
||
driver = KillHouseDriver.objects.get(key=request.data['driver_key'])
|
||
request.data.pop('driver_key')
|
||
request.data.pop('kill_house_key')
|
||
if 'role' in request.data.keys():
|
||
request.data.pop('role')
|
||
serializer = self.serializer_class(data=request.data)
|
||
if serializer.is_valid():
|
||
if KillHouseADDCAR.objects.filter(kill_house=kill_house, driver=driver, trash=False):
|
||
return Response({"result": "already exist"}, status=status.HTTP_403_FORBIDDEN)
|
||
kill_house_car = serializer.create(validated_data=request.data)
|
||
kill_house_car.kill_house = kill_house
|
||
kill_house_car.driver = driver
|
||
kill_house_car.save()
|
||
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
||
return Response(serializer.errors)
|
||
|
||
# تابع مربوط به نمایش خودروهای ثبت شده کشتارگاه
|
||
def list(self, request, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
if 'kill_request_key' in request.GET:
|
||
kill_request = KillRequest.objects.get(key=request.GET['kill_request_key'])
|
||
list_car = []
|
||
if 'key' in request.GET:
|
||
poultry_request = PoultryRequest.objects.get(key=request.GET['key'])
|
||
else:
|
||
poultry_request = None
|
||
if 'kill_house_key' in request.GET:
|
||
kill_house = KillHouse.objects.get(key=request.GET['kill_house_key'], trash=False)
|
||
|
||
if kill_house.killer == True:
|
||
if KillHouseADDCAR.objects.filter(kill_house=kill_house, trash=False, archive=False).exists():
|
||
cars = KillHouseADDCAR.objects.filter(
|
||
Q(kill_house=kill_house) | Q(kill_house__isnull=True, driver__type='rental'),
|
||
trash=False, archive=False).order_by('driver__type')
|
||
else:
|
||
killer_kill_house = KillHouse.objects.get(key=kill_request.slaughter_house.key)
|
||
cars = KillHouseADDCAR.objects.filter(
|
||
Q(kill_house=killer_kill_house) | Q(kill_house__isnull=True, driver__type='rental'),
|
||
trash=False, archive=False).order_by('driver__type')
|
||
else:
|
||
cars = KillHouseADDCAR.objects.filter(
|
||
Q(kill_house=kill_house) | Q(kill_house__isnull=True, driver__type='rental'), trash=False,
|
||
archive=False).order_by(
|
||
'driver__type')
|
||
|
||
else:
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
kill_house_operator = KillHouseOperator.objects.get(user=user, trash=False)
|
||
kill_house = KillHouse.objects.filter(kill_house_operator=kill_house_operator, trash=False)
|
||
cars = KillHouseADDCAR.objects.filter(
|
||
Q(kill_house__in=kill_house) | Q(kill_house__isnull=True, driver__type='rental'), trash=False,
|
||
archive=False).order_by(
|
||
'driver__type')
|
||
# if poultry_request != None:
|
||
# send_date = poultry_request.send_date.date()
|
||
# list1 = []
|
||
# kill_house_requests = KillHouseRequest.objects.filter(active_state='active')
|
||
# for kill_house_request in kill_house_requests:
|
||
# if kill_house_request.province_kill_request != None:
|
||
# date = kill_house_request.province_request.city_request_Poultry.poultry_request.send_date.date()
|
||
# if send_date.year == date.year and send_date.month == date.month and send_date.day == date.day:
|
||
# list1.append(kill_house_request)
|
||
# else:
|
||
# date2 = kill_house_request.kill_house_request_auction_winner.kill_house_request_auction.poultry_request.send_date.date()
|
||
# if send_date.year == date2.year and send_date.month == date2.month and send_date.day == date2.day:
|
||
# list1.append(kill_house_request)
|
||
# if len(list1) > 0:
|
||
# for kill_house_car in cars:
|
||
# list2 = []
|
||
# i = 0
|
||
# for request_car in list1:
|
||
# if i == len(list1):
|
||
# break
|
||
# if kill_house_car.driver.pelak == request_car.add_car.driver.pelak:
|
||
# dict1 = {
|
||
# "id": kill_house_car.id,
|
||
# "key": kill_house_car.key,
|
||
# "driver_name": kill_house_car.driver.driver_name,
|
||
# "driver_mobile": kill_house_car.driver.driver_mobile,
|
||
# "type_car": kill_house_car.driver.type_car,
|
||
# "pelak": kill_house_car.driver.pelak,
|
||
# "capocity": float(kill_house_car.driver.capocity),
|
||
# "weight_without_load": kill_house_car.driver.weight_without_load,
|
||
# "health_code": kill_house_car.driver.health_code,
|
||
# "busy": True
|
||
# }
|
||
# list2.append(dict1)
|
||
# i += 1
|
||
# if len(list2) > 0:
|
||
# list_car.append(list2[0])
|
||
# else:
|
||
# dict1 = {
|
||
# "id": kill_house_car.id,
|
||
# "key": kill_house_car.key,
|
||
# "driver_name": kill_house_car.driver.driver_name,
|
||
# "driver_mobile": kill_house_car.driver.driver_mobile,
|
||
# "type_car": kill_house_car.driver.type_car,
|
||
# "pelak": kill_house_car.driver.pelak,
|
||
# "capocity": float(kill_house_car.driver.capocity),
|
||
# "weight_without_load": kill_house_car.driver.weight_without_load,
|
||
# "health_code": kill_house_car.driver.health_code,
|
||
# "busy": False
|
||
# }
|
||
# list_car.append(dict1)
|
||
# return Response(list_car, status=status.HTTP_200_OK)
|
||
|
||
for car in cars:
|
||
if car.active_state == True:
|
||
dict1 = {
|
||
"id": car.id,
|
||
"key": car.key,
|
||
"type": car.driver.type,
|
||
"driver_name": car.driver.driver_name,
|
||
"driver_mobile": car.driver.driver_mobile,
|
||
"type_car": car.driver.type_car,
|
||
"pelak": car.driver.pelak,
|
||
"capocity": float(car.driver.capocity),
|
||
"weight_without_load": car.driver.weight_without_load,
|
||
"health_code": car.driver.health_code,
|
||
}
|
||
list_car.append(dict1)
|
||
return Response(list_car, status=status.HTTP_200_OK)
|
||
|
||
# تابع مربوط به حذف خودروهای ثبت شده کشتارگاه
|
||
def destroy(self, request, pk=None, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
car = KillHouseDriver.objects.get(key=request.GET["driver_key"])
|
||
kill_house = KillHouse.objects.get(key=request.GET["kill_house_key"])
|
||
if KillHouseRequest.objects.filter(active_state='active', add_car__driver=car, trash=False).exists():
|
||
return Response({"result": "ماشین دارای بار فعال میباشد"}, status=status.HTTP_403_FORBIDDEN)
|
||
add_car = KillHouseADDCAR.objects.filter(driver=car, kill_house=kill_house, trash=False)
|
||
if add_car.count() > 0:
|
||
add_car = add_car.last()
|
||
add_car.trash = True
|
||
add_car.save()
|
||
return Response('ماشین با موفقیت حذف شد', status=status.HTTP_200_OK)
|
||
else:
|
||
return Response('مشکلی در حذف ماشین به وجود آمده است !', status=status.HTTP_403_FORBIDDEN)
|
||
|
||
def update(self, request, pk=None, *args, **kwargs):
|
||
car = KillHouseADDCAR.objects.get(key=request.data["add_car_key"])
|
||
request.data.pop('add_car_key')
|
||
serializer = self.serializer_class(car)
|
||
serializer.update(instance=car, validated_data=request.data)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class AutomaticKillRequestViewSet(viewsets.ModelViewSet):
|
||
queryset = AutomaticKillRequest.objects.all()
|
||
serializer_class = AutomaticKillRequestSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
# def create(self, request, *args, **kwargs):
|
||
# # refresh(request.user.id)
|
||
# state = request.data['active']
|
||
# auomatic_kill_reqs = AutomaticKillRequest.objects.all()
|
||
# if auomatic_kill_reqs.count() > 0:
|
||
# auomatic_kill_reqs = auomatic_kill_reqs.last()
|
||
# auomatic_kill_reqs.active = state
|
||
# auomatic_kill_reqs.save()
|
||
# serializer_request = self.serializer_class(auomatic_kill_reqs)
|
||
# return Response(serializer_request.data, status=status.HTTP_200_OK)
|
||
# else:
|
||
# serializer = self.serializer_class(data=request.data)
|
||
# if serializer.is_valid():
|
||
# auomatic_kill_reqs = serializer.create(validated_data=request.data)
|
||
#
|
||
# serializer_request = self.serializer_class(auomatic_kill_reqs)
|
||
# return Response(serializer_request.data, status=status.HTTP_201_CREATED)
|
||
|
||
def create(self, request, *args, **kwargs):
|
||
try:
|
||
automatic_kill_req = AutomaticKillRequest.objects.latest('id')
|
||
except AutomaticKillRequest.DoesNotExist:
|
||
automatic_kill_req = None
|
||
|
||
serializer = self.serializer_class(automatic_kill_req, data=request.data)
|
||
if serializer.is_valid():
|
||
if automatic_kill_req:
|
||
serializer.save()
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
else:
|
||
serializer.save()
|
||
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
||
else:
|
||
return Response(serializer.errors)
|
||
|
||
|
||
class KillRequestForPoultryViewSet(viewsets.ModelViewSet):
|
||
queryset = KillRequest.objects.all()
|
||
serializer_class = KillRequestSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def update(self, request, pk=None, *args, **kwargs):
|
||
kill_req = KillRequest.objects.get(key=request.data['kill_req_key'], trash=False)
|
||
kill_req.remain_quantity_for_poultry += int(request.data['quantity_sum'])
|
||
kill_req.save()
|
||
return Response({"result": "با موفقیت انجام شد"}, status=status.HTTP_200_OK)
|
||
|
||
|
||
class DeleteDebtorsKillRequestsViewSet(viewsets.ModelViewSet):
|
||
queryset = KillRequest.objects.all()
|
||
serializer_class = KillRequestSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def destroy(self, request, pk=None, *args, **kwargs):
|
||
today = datetime.now().date()
|
||
kill_requests = KillRequest.objects.filter(trash=False, recive_date__date=today, market=False)
|
||
for kill_request in kill_requests:
|
||
kill_house = kill_request.kill_house
|
||
kill_house_purchase = KillHousePurchaseRequest.objects.filter(limitation=True,
|
||
kill_house=kill_house).first()
|
||
if kill_house_purchase:
|
||
total_unpaid_wage = 0
|
||
total_paid_wage = 0
|
||
total_unpaid_wage = get_finance_info(kill_house)['total_price']
|
||
slaughter_transactions = InternalTransaction.objects.filter(
|
||
Q(kill_house=kill_house) | Q(parent_kill_house=kill_house),
|
||
status='completed',
|
||
trash=False)
|
||
|
||
total_paid_wage += slaughter_transactions.aggregate(total=Sum('amount'))[
|
||
'total'] or 0
|
||
total_amount = total_unpaid_wage - total_paid_wage
|
||
if total_amount >= kill_house_purchase.limitation_number:
|
||
if not ProvinceKillRequest.objects.filter(trash=False, return_to_province=False,
|
||
kill_request__recive_date__date=today,
|
||
killhouse_user=kill_house).exists():
|
||
kill_request.message = 'به علت بدهی اعلام نیاز حذف گردید'
|
||
kill_request.trash = True
|
||
kill_request.save()
|
||
|
||
return Response({"result": "با موفقیت انجام شد!"}, status=status.HTTP_200_OK)
|
||
|
||
|
||
# ویوست مربوط به ثبت درخواست کشتار از سمت کشتارگاه
|
||
class KillRequestViewSet(viewsets.ModelViewSet):
|
||
queryset = KillRequest.objects.all()
|
||
serializer_class = KillRequestSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
pagination_class = CustomPagination
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = KillRequestFilterSet
|
||
filterset_fields = [
|
||
'kill_house__kill_house_operator__user__fullname',
|
||
'kill_house__kill_house_operator__user__first_name',
|
||
'kill_house__kill_house_operator__user__last_name',
|
||
'kill_house__kill_house_operator__user__mobile',
|
||
'kill_house__name',
|
||
'slaughter_house__name',
|
||
'export_country',
|
||
'export_code',
|
||
'direct_buying_code',
|
||
'poultry__user__fullname',
|
||
'poultry__user__mobile',
|
||
'poultry__unit_name',
|
||
]
|
||
|
||
# تابع مربوط به ثبت درخواست کشتار از سمت کشتارگاه
|
||
def create(self, request, *args, **kwargs):
|
||
total_unpaid_wage = 0
|
||
total_paid_wage = 0
|
||
|
||
limitation_direct_purchase = LimitationForDirectPurchaseAndBarInformation.objects.filter(
|
||
trash=False, active=True).first()
|
||
is_in_limitation_range = False
|
||
|
||
if limitation_direct_purchase:
|
||
if not limitation_direct_purchase.allow_buying:
|
||
is_in_limitation_range = False
|
||
else:
|
||
if limitation_direct_purchase.start_time and limitation_direct_purchase.end_time:
|
||
current_time = datetime.now().time()
|
||
if limitation_direct_purchase.start_time <= current_time <= limitation_direct_purchase.end_time:
|
||
is_in_limitation_range = True
|
||
|
||
if not is_in_limitation_range:
|
||
time_range = TimeRange.objects.filter(trash=False).first()
|
||
if time_range:
|
||
time = next(
|
||
(t for t in time_range.time_range if t.get("name") == "kill_request" and t.get("active", False)),
|
||
None)
|
||
if time:
|
||
start_hour = datetime.strptime(time.get("start", 0), "%H:%M:%S").time()
|
||
end_hour = datetime.strptime(time.get("end", 0), "%H:%M:%S").time()
|
||
current_hour = datetime.now().time().replace(second=0, microsecond=0)
|
||
if not (start_hour < current_hour < end_hour):
|
||
return Response(
|
||
{"result": "لطفا در ساعات مجاز برای ثبت درخواست اقدام نمایید!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
if 'role' in request.data.keys() and request.data['role'] != None:
|
||
role = request.data['role']
|
||
request.data.pop('role')
|
||
else:
|
||
role = None
|
||
if role != None and role == 'KillHouse':
|
||
now_request_date = datetime.now().date()
|
||
now = datetime.now().time()
|
||
now_hour = KillHouseHourLimit.objects.filter(trash=False).last()
|
||
if now_hour and 'poultry_key' not in request.data.keys():
|
||
if now_hour.active == True:
|
||
request_date = datetime.strptime(request.data['recive_date'], '%Y-%m-%d %H:%M:%S').date()
|
||
if request_date.year >= now_request_date.year and request_date.month >= now_request_date.month and request_date.day > now_request_date.day:
|
||
pass
|
||
|
||
else:
|
||
if now.hour >= now_hour.hour:
|
||
text = 'زمان ثبت درخواست کشتار درامروز تا ساعت {0} بوده است. شما میتوانید برای تاریخ های آینده درخواست ثبت نمایید ! '.format(
|
||
now_hour.hour)
|
||
if 'role' not in request.data.keys():
|
||
return Response({'result': text}, status=status.HTTP_403_FORBIDDEN)
|
||
|
||
killer_kill_house = None
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
kill_house = KillHouse.objects.get(key=request.data['kill_house_key'], trash=False)
|
||
request.data.pop('kill_house_key')
|
||
if kill_house.out_province == True:
|
||
return Response({
|
||
"result": "امکان ثبت اعلام نیاز برای کشتارگاه خارج از استان وجود ندارد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
kill_house_purchase = KillHousePurchaseRequest.objects.filter(kill_house=kill_house).first()
|
||
if kill_house_purchase:
|
||
if kill_house_purchase.allow == False:
|
||
return Response({
|
||
"result": "شما مجاز به ثبت درخواست خرید نمیباشید جهت اطلاع با اتحادیه مرغ گوشتی استان خود تماس حاصل فرمایید"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
else:
|
||
if kill_house_purchase.limitation == True:
|
||
try:
|
||
recive_date = datetime.strptime(str(request.data['recive_date']),
|
||
'%Y-%m-%dT%H:%M:%S.%fZ').date()
|
||
except:
|
||
recive_date = datetime.strptime(str(request.data['recive_date']), '%Y-%m-%d %H:%M:%S').date()
|
||
total_unpaid_wage = get_finance_info(kill_house)['total_price']
|
||
if kill_house.killer and kill_house.type == 'public':
|
||
slaughter_transactions = InternalTransaction.objects.filter(
|
||
kill_house=kill_house,parent_kill_house=kill_house,
|
||
status='completed',
|
||
trash=False)
|
||
else:
|
||
slaughter_transactions = InternalTransaction.objects.filter(
|
||
Q(kill_house=kill_house) | Q(parent_kill_house=kill_house),
|
||
status='completed',
|
||
trash=False)
|
||
|
||
total_paid_wage += slaughter_transactions.aggregate(total=Sum('amount'))[
|
||
'total'] or 0
|
||
|
||
if kill_house_purchase.limitation_number <= total_unpaid_wage - total_paid_wage:
|
||
if not ProvinceKillRequest.objects.filter(killhouse_user=kill_house,
|
||
kill_request__recive_date__date=recive_date,
|
||
trash=False,
|
||
state__in=('pending', 'accepted')).exists():
|
||
return Response({
|
||
"result": "به علت بدهی امکان ثبت درخواست وحود ندارد لطفا بدهی خود را در پنل کارمزد ها تسویه کنید"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
if kill_house.poultry_payment_limitation:
|
||
today_check_date = datetime.now().date()
|
||
if ProvinceKillRequest.objects.filter(Q(payment_deadline_date__date__lt=today_check_date,
|
||
extension_payment_deadline_date__isnull=True) | Q(
|
||
payment_deadline_date__date__lt=today_check_date,
|
||
extension_payment_deadline_date__date__lt=today_check_date), trash=False, temporary_trash=False,
|
||
return_to_province=False,
|
||
state__in=('pending', 'accepted'), payment_deadline_archive=False,
|
||
payment_deadline_state__in=('pending', 'rejected')).exists():
|
||
return Response({
|
||
"result": "به دلیل عدم تسویه با مرغدار شما مجاز به خرید نمی باشید لطفا اطلاعات پرداخت را در بخش تسویه حساب بارگزاری کنید!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
if 'killer_kill_house_key' in request.data.keys():
|
||
if request.data['killer_kill_house_key'] != None:
|
||
killer_kill_house = KillHouse.objects.get(key=request.data['killer_kill_house_key'], trash=False)
|
||
request.data.pop('killer_kill_house_key')
|
||
else:
|
||
request.data.pop('killer_kill_house_key')
|
||
cash = request.data['cash']
|
||
credit = request.data['credit']
|
||
low_weight = request.data['low_weight']
|
||
high_weight = request.data['high_weight']
|
||
credit = request.data['credit']
|
||
request.data.pop('cash')
|
||
request.data.pop('credit')
|
||
request.data.pop('low_weight')
|
||
request.data.pop('high_weight')
|
||
poultry = None
|
||
hatching = None
|
||
if 'poultry_key' in request.data.keys():
|
||
poultry = Poultry.objects.get(key=request.data['poultry_key'])
|
||
hatching = PoultryHatching.objects.get(key=request.data['hatching_key'])
|
||
request.data.pop('poultry_key')
|
||
request.data.pop('hatching_key')
|
||
if poultry.order_limit:
|
||
return Response({
|
||
"result": "امکان ثبت کشتار برای مرغدار وجود ندارد جهت اطلاعات بیشتر بااتحادیه استان خود هماهنگ کنید!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
if 'confirm_poultry_mobile' in request.data.keys() and len(request.data['confirm_poultry_mobile']) == 11:
|
||
|
||
first_mobile_number = poultry.user.mobile
|
||
second_mobile_number = request.data['confirm_poultry_mobile']
|
||
request.data.pop('confirm_poultry_mobile')
|
||
if first_mobile_number != second_mobile_number:
|
||
system_user_profile = SystemUserProfile.objects.get(mobile=first_mobile_number, trash=False)
|
||
system_person = SystemUserProfile.objects.filter(mobile=second_mobile_number, trash=False)
|
||
if system_person:
|
||
return Response({"result": f'این شماره در سامانه به نام {system_person.first().fullname} است'},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
data = {
|
||
"first_mobile_number": first_mobile_number,
|
||
"second_mobile_number": second_mobile_number,
|
||
}
|
||
req = requests.post(
|
||
url=ARTA_URL_CHANGE_MOBILE_NUMBER,
|
||
data=data,
|
||
verify=False
|
||
)
|
||
if req.status_code == 200:
|
||
system_user_profile.user.username = second_mobile_number
|
||
system_user_profile.user.save()
|
||
system_user_profile.mobile = second_mobile_number
|
||
system_user_profile.save()
|
||
|
||
try:
|
||
recive_date = datetime.strptime(str(request.data['recive_date']), '%Y-%m-%dT%H:%M:%S.%fZ').date()
|
||
except:
|
||
recive_date = datetime.strptime(str(request.data['recive_date']), '%Y-%m-%d %H:%M:%S').date()
|
||
|
||
if request.data['free_direct_buying'] == True:
|
||
|
||
if kill_house.quota:
|
||
kill_house_info = calculate_governmental_quota(kill_house)
|
||
if kill_house_info == 'not_allowed':
|
||
return Response({"result": " امکان خرید آزاد تا تکمیل تعهد دولتی وجود ندارد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
age_range = ChickenAgeRange.objects.filter(trash=False).first()
|
||
if role and role not in ('AdminX', 'SuperAdmin'):
|
||
|
||
if age_range.active == True:
|
||
chicken_age = (datetime.now().date() - hatching.date.date()).days + 1
|
||
if chicken_age < age_range.minimum or chicken_age > age_range.maximum:
|
||
return Response(
|
||
{"result": "به علت استاندارد نبودن سن مرغ برای کشتار امکان ثبت درخواست وجود ندارد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
if kill_house.max_kill_limit and kill_house.total_kill_capacity > 0:
|
||
recive_date = datetime.strptime(str(request.data['recive_date']), '%Y-%m-%dT%H:%M:%S.%fZ').date()
|
||
|
||
if kill_house.max_kill_limit and kill_house.total_kill_capacity > 0:
|
||
total_province_kill_requests = ProvinceKillRequest.objects.filter(trash=False,
|
||
return_to_province=False,
|
||
archive_wage=False,
|
||
state__in=('pending', 'accepted'),
|
||
killhouse_user=kill_house,
|
||
kill_request__recive_date__date=recive_date)
|
||
total_province_kill_requests_quantity = \
|
||
total_province_kill_requests.aggregate(total=Sum('total_killed_quantity'))['total'] or 0
|
||
if kill_house.total_kill_capacity < total_province_kill_requests_quantity + int(
|
||
request.data['kill_capacity']):
|
||
return Response({"result": "تعداد وارد شده از مانده سهمیه کشتار روزانه کشتارگاه بیشتر است !"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
dict1 = {}
|
||
dict2 = {}
|
||
if kill_house.ware_house_remaining_weight_limitation_status:
|
||
if kill_house.total_remain_warehouse_governmental_weight > kill_house.ware_house_remaining_weight_limitation:
|
||
return Response({
|
||
"result": "باقی مانده انبار شما از حداکثر محدودیت وزن باقی مانده انبار بیشتر است !"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
if kill_house.ware_house_remaining_percent_limitation_status:
|
||
if not check_kill_house_remain_limitation_weight(kill_house):
|
||
return Response({
|
||
"result": "باقی مانده انبار شما از حداکثر محدودیت وزن باقی مانده روزانه انبار بیشتر است !"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
serializer = self.serializer_class(data=request.data)
|
||
if serializer.is_valid():
|
||
kill_request = serializer.create(validated_data=request.data)
|
||
buying_verification = DirectBuyingVerification.objects.filter(trash=False).first()
|
||
price_confirmation = PriceConfirmation.objects.filter(trash=False).first()
|
||
price_confirmation = price_confirmation.poultry_status if price_confirmation else False
|
||
kill_request.kill_house = kill_house
|
||
free_sale_in_province = False if kill_request.free_direct_buying == False else True
|
||
kill_request.previous_kill_capacity = kill_request.kill_capacity
|
||
if poultry != None:
|
||
# hatching = PoultryHatching.objects.filter(trash=False, poultry=poultry).only('chicken_breed').first()
|
||
if 'payment_deadline_days' in request.data.keys():
|
||
kill_request.payment_deadline_date = datetime.now() + timedelta(
|
||
days=request.data['payment_deadline_days'])
|
||
kill_request.payment_deadline = True
|
||
|
||
kill_request.chicken_breed = hatching.chicken_breed
|
||
province_operator = SystemUserProfile.objects.filter(trash=False, role__name='ProvinceOperator').first()
|
||
kill_request.poultry = poultry
|
||
kill_request.poultry_hatching = hatching
|
||
mobile = poultry.user.mobile
|
||
poultry_name = poultry.user.fullname
|
||
code = str(random.randint(10000, 99000))
|
||
kill_request.direct_buying_code = code
|
||
buyer = kill_request.kill_house.kill_house_operator.user.fullname
|
||
buyer_mobile = kill_request.kill_house.kill_house_operator.user.mobile
|
||
quantity = kill_request.kill_capacity
|
||
kill_place = kill_request.slaughter_house.name if kill_request.slaughter_house != None else kill_request.kill_house.name
|
||
date_str = str(kill_request.recive_date)
|
||
# if kill_request.recive_date.date().day == datetime.now().date().day:
|
||
try:
|
||
date = datetime.strptime(date_str, '%Y-%m-%dT%H:%M:%S.%f%z').date()
|
||
except:
|
||
date = datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S').date()
|
||
date = jdatetime.datetime.fromgregorian(year=date.year, month=date.month,
|
||
day=date.day).strftime(
|
||
'%Y-%m-%d')
|
||
date_list = reversed(date.split('-'))
|
||
separate = "-"
|
||
date = separate.join(date_list)
|
||
if kill_request.export_status == False:
|
||
pass
|
||
|
||
# sms_direct_buying_sms = threading.Thread(
|
||
# target=direct_buying_code_sms,
|
||
# args=(
|
||
# mobile, buyer, buyer_mobile, quantity, kill_place, date, code))
|
||
# sms_direct_buying_sms.start()
|
||
else:
|
||
export_country = kill_request.export_country
|
||
sms_export_sms = threading.Thread(
|
||
target=export_code_sms,
|
||
args=(
|
||
mobile, buyer, buyer_mobile, quantity, kill_place, date, export_country,
|
||
code, poultry_name, province_operator.mobile))
|
||
sms_export_sms.start()
|
||
|
||
# kill_request.remain_quantity_for_poultry = kill_request.kill_capacity
|
||
if killer_kill_house != None:
|
||
kill_request.slaughter_house = killer_kill_house
|
||
kill_request.remain_quantity = kill_request.kill_capacity
|
||
dict1.update({
|
||
'cash': cash,
|
||
'credit': credit
|
||
})
|
||
kill_request.buy_type = dict1
|
||
dict2.update({
|
||
'low_weight': low_weight,
|
||
'high_weight': high_weight
|
||
|
||
})
|
||
kill_request.weight_type = dict2
|
||
if role != None:
|
||
kill_request.registrar = {
|
||
"role": role,
|
||
"full_name": user.fullname,
|
||
"date": str(kill_request.create_date)
|
||
}
|
||
kill_request.save()
|
||
permission_duirect_buying = AutomaticDirectBuyingPermission.objects.first()
|
||
if role == 'KillHouse':
|
||
if kill_request.poultry is None:
|
||
if SmsLicense.objects.filter(kill_request=True).exists():
|
||
province_operator = ProvinceOperator.objects.filter(
|
||
user=SystemUserProfile.objects.get(role__name='ProvinceOperator', province=user.province))
|
||
|
||
if province_operator.count() > 0:
|
||
province_operator = province_operator.last()
|
||
quantity = kill_request.kill_capacity
|
||
chicken_breed = kill_request.chicken_breed
|
||
date_str = kill_request.recive_date
|
||
try:
|
||
send_date = datetime.strptime(date_str, '%Y-%m-%dT%H:%M:%S.%f%z').date()
|
||
except:
|
||
send_date = datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S').date()
|
||
# send_date = datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S').date()
|
||
send_date = jdatetime.datetime.fromgregorian(year=send_date.year, month=send_date.month,
|
||
day=send_date.day).strftime('%Y-%m-%d')
|
||
date_list = reversed(send_date.split('-'))
|
||
separate = "-"
|
||
send_date = separate.join(date_list)
|
||
province = kill_request.kill_house.system_address.province.name
|
||
city = kill_request.kill_house.system_address.city.name
|
||
kill_house_name = kill_request.kill_house.name
|
||
province_operator_mobile = province_operator.user.mobile
|
||
province_operator_name = province_operator.user.fullname
|
||
sms_kill_request_province_sms = threading.Thread(target=kill_request_province_sms,
|
||
args=(
|
||
province_operator_mobile, kill_house_name,
|
||
quantity,
|
||
chicken_breed,
|
||
send_date, province, city))
|
||
sms_kill_request_province_sms.start()
|
||
serializer_request = self.serializer_class(kill_request)
|
||
if price_confirmation:
|
||
kill_request.price_confirmation = True
|
||
kill_request.save()
|
||
return Response({"result": "درخواست شما با موفقیت برای استان ارسال شد."},
|
||
status=status.HTTP_201_CREATED)
|
||
|
||
else:
|
||
kill_request.remain_quantity = kill_request.kill_capacity
|
||
kill_request.province_state = 'accepted'
|
||
kill_request.final_accept = True
|
||
kill_request.save()
|
||
price = Pricing.objects.all()
|
||
if price.count() > 0:
|
||
price = price.last()
|
||
factor = KillRequestFactor(
|
||
kill_request=kill_request,
|
||
amount=round(
|
||
(kill_request.kill_capacity * kill_request.Index_weight) * price.live_chicken_price,
|
||
0),
|
||
minimum_amount=round(
|
||
((kill_request.kill_capacity * kill_request.Index_weight) * price.live_chicken_price) * (
|
||
70 / 100),
|
||
0)
|
||
|
||
)
|
||
factor.save()
|
||
kill_request.factor_amount = factor.amount
|
||
kill_request.save()
|
||
if kill_request.poultry is None:
|
||
if SmsLicense.objects.filter(kill_request=True).exists():
|
||
mobile = kill_request.kill_house.kill_house_operator.user.mobile
|
||
kill_house_name = kill_request.kill_house.name
|
||
sms_province_kill_request_accept_sms = threading.Thread(
|
||
target=province_kill_request_accept_sms,
|
||
args=(
|
||
kill_house_name,))
|
||
sms_province_kill_request_accept_sms.start()
|
||
now = datetime.now().time().replace(second=0, microsecond=0)
|
||
if price_confirmation:
|
||
poultry_fullname = poultry.unit_name
|
||
# poultry_mobile = poultry.user.mobile
|
||
poultry_mobile = second_mobile_number if not kill_request.direct_buying_intermediary_mobile else kill_request.direct_buying_intermediary_mobile
|
||
quantity = kill_request.kill_capacity
|
||
chicken_breed = kill_request.chicken_breed
|
||
request_kill_house = kill_request.kill_house.name
|
||
date_str = kill_request.recive_date
|
||
clean_date_str = date_str.split('T')[0] + ' ' + date_str.split('T')[1].split('.')[0]
|
||
send_date = datetime.strptime(str(clean_date_str), '%Y-%m-%d %H:%M:%S').date()
|
||
send_date = jdatetime.datetime.fromgregorian(year=send_date.year, month=send_date.month,
|
||
day=send_date.day).strftime('%Y-%m-%d')
|
||
date_list = reversed(send_date.split('-'))
|
||
separate = "-"
|
||
send_date = separate.join(date_list)
|
||
confirm_price_poultry_request = threading.Thread(
|
||
target=confirm_price_poultry_request_direct_buying_sms,
|
||
args=(
|
||
poultry_mobile, poultry_fullname,
|
||
quantity, chicken_breed,
|
||
send_date,
|
||
kill_request.free_direct_buying,
|
||
kill_request.amount, request_kill_house,
|
||
code))
|
||
confirm_price_poultry_request.start()
|
||
kill_request.price_confirmation = True
|
||
kill_request.save()
|
||
return Response({"result": "درخواست شما با موفقیت ارسال شد."},
|
||
status=status.HTTP_201_CREATED)
|
||
else:
|
||
if permission_duirect_buying.allow == True and not buying_verification.poultry_code_mandatory and permission_duirect_buying.start_time < \
|
||
now < permission_duirect_buying.end_time:
|
||
poultry_requests = PoultryRequest.objects.filter(poultry=kill_request.poultry,
|
||
trash=False).order_by(
|
||
'create_date')
|
||
if not hatching:
|
||
hatching = PoultryHatching.objects.filter(poultry=kill_request.poultry, state='pending',
|
||
archive=False,
|
||
allow_hatching='pending', trash=False).order_by(
|
||
'id').last()
|
||
|
||
poultry = Poultry.objects.get(key=kill_request.poultry.key, trash=False)
|
||
vet_farm = VetFarm.objects.filter(trash=False, poultry=poultry).first()
|
||
last_poultry_request = PoultryRequest.objects.all()
|
||
if last_poultry_request.count() > 0:
|
||
general_order_code = last_poultry_request.last().general_order_code + 1
|
||
else:
|
||
general_order_code = 1
|
||
|
||
if poultry_requests.count() > 0:
|
||
order_code = poultry_requests.last().order_code + 1
|
||
else:
|
||
order_code = int(str(poultry.user.base_order) + '0001')
|
||
city_operator = CityOperator.objects.filter(unit_name=poultry.city_operator, trash=False).last()
|
||
if not city_operator:
|
||
city_operator = CityOperator.objects.filter(unit_name='اتحادیه استان (فاقد تعاونی)',
|
||
trash=False).last()
|
||
if hatching.left_over < kill_request.kill_capacity:
|
||
return Response({"result": "تعداد جوجه در سالن کمتر از تعداد درخواستی است"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
poultry_request = PoultryRequest(
|
||
hatching=hatching,
|
||
order_code=order_code,
|
||
general_order_code=general_order_code,
|
||
city_operator=city_operator,
|
||
poultry=poultry,
|
||
previous_quantity=kill_request.kill_capacity,
|
||
remain_quantity=kill_request.kill_capacity,
|
||
quantity=kill_request.kill_capacity,
|
||
first_quantity=kill_request.kill_capacity,
|
||
chicken_breed=hatching.chicken_breed,
|
||
Index_weight=kill_request.Index_weight,
|
||
state_process='accepted',
|
||
province_state='accepted',
|
||
direct_buying=True,
|
||
free_sale_in_province=free_sale_in_province,
|
||
send_date=kill_request.recive_date,
|
||
amount=kill_request.amount,
|
||
)
|
||
if kill_request.freezing:
|
||
poultry_request.freezing = True
|
||
poultry_request.save()
|
||
kill_request.poultry_request = poultry_request
|
||
if kill_request.export_status == True:
|
||
poultry_request.export = True
|
||
send_date_str = poultry_request.send_date
|
||
send_date_datetime = datetime.strptime(str(send_date_str), '%Y-%m-%dT%H:%M:%S.%fZ')
|
||
poultry_request.killing_age = (send_date_datetime.date() - hatching.date.date()).days + 1
|
||
|
||
poultry_request.state = {
|
||
"city_operator": city_operator.user.fullname,
|
||
"city_state": poultry_request.state_process,
|
||
"city_operator_mobile": city_operator.user.mobile,
|
||
"province_operator": "",
|
||
"province_state": ""
|
||
}
|
||
poultry_request.registrar = {
|
||
"role": role,
|
||
"fullname": user.fullname,
|
||
"date": str(poultry_request.create_date)
|
||
}
|
||
poultry_request.save()
|
||
|
||
city_operator_check_request = CityOperatorCheckRequest(
|
||
city_operator_system=poultry_request.city_operator,
|
||
poultry_request=poultry_request,
|
||
state='accept',
|
||
province_accept=True,
|
||
province_state='accept',
|
||
allow_hatching=True
|
||
|
||
)
|
||
city_operator_check_request.save()
|
||
province_operator = ProvinceOperator.objects.filter(
|
||
user=SystemUserProfile.objects.get(role__name='ProvinceOperator', province=user.province))
|
||
|
||
if province_operator.count() > 0:
|
||
province_operator = province_operator.last()
|
||
|
||
check = ProvinceCheckOperatorRequest(
|
||
province_operator_system=province_operator,
|
||
poultry_request=poultry_request,
|
||
city_request_Poultry=city_operator_check_request,
|
||
quantity=poultry_request.quantity,
|
||
|
||
state='accept',
|
||
)
|
||
check.save()
|
||
wage_type = WageType.objects.filter(en_name='province-kill-request', trash=False).first()
|
||
wage = wage_type.amount if wage_type.status == True else 0
|
||
percentages_wage_type = PercentageOfWageType.objects.filter(wage_type=wage_type, percent__gt=0,
|
||
trash=False)
|
||
province_killrequest = ProvinceKillRequest(
|
||
killhouse_user=kill_request.kill_house,
|
||
kill_request=kill_request,
|
||
province_request=check,
|
||
quantity=kill_request.kill_capacity,
|
||
total_killed_quantity=kill_request.kill_capacity,
|
||
total_killed_weight=int(kill_request.kill_capacity * poultry_request.Index_weight),
|
||
main_quantity=kill_request.kill_capacity,
|
||
wage=wage,
|
||
direct_buying=True,
|
||
total_wage_amount=wage * int(kill_request.kill_capacity * poultry_request.Index_weight),
|
||
)
|
||
province_killrequest.save()
|
||
# fine = FinePermission.objects.filter(trash=False).first()
|
||
# time_for_fine = datetime.now()
|
||
# time_for_fine = time_for_fine.replace(second=0, microsecond=0).time()
|
||
# if fine.direct_buying:
|
||
# if fine.direct_buying_start_time < time_for_fine < fine.direct_buying_end_time:
|
||
# province_killrequest.direct_buying_fine = True
|
||
# province_killrequest.direct_buying_fine_amount = fine.direct_buying_fine_coefficient * province_killrequest.total_wage_amount
|
||
# province_killrequest.direct_buying_fine_coefficient = fine.direct_buying_fine_coefficient
|
||
create_update_chicken_commission_prices()
|
||
if wage_type and wage_type.status == True and percentages_wage_type:
|
||
for percentage_wage_type in percentages_wage_type:
|
||
if percentage_wage_type.share_type.en_name == 'union':
|
||
province_killrequest.union_share = int(
|
||
(percentage_wage_type.percent / 100) * province_killrequest.total_wage_amount)
|
||
province_killrequest.union_share_percent = percentage_wage_type.percent
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'company':
|
||
province_killrequest.company_share = int(
|
||
(percentage_wage_type.percent / 100) * province_killrequest.total_wage_amount)
|
||
province_killrequest.company_share_percent = percentage_wage_type.percent
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'guilds':
|
||
province_killrequest.guilds_share = int(
|
||
(percentage_wage_type.percent / 100) * province_killrequest.total_wage_amount)
|
||
province_killrequest.guilds_share_percent = percentage_wage_type.percent
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'city':
|
||
province_killrequest.city_share = int(
|
||
(percentage_wage_type.percent / 100) * province_killrequest.total_wage_amount)
|
||
province_killrequest.city_share_percent = percentage_wage_type.percent
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'other':
|
||
province_killrequest.other_share = int(
|
||
(percentage_wage_type.percent / 100) * province_killrequest.total_wage_amount)
|
||
province_killrequest.other_share_percent = percentage_wage_type.percent
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'wallet':
|
||
province_killrequest.wallet_share = int(
|
||
(percentage_wage_type.percent / 100) * province_killrequest.total_wage_amount)
|
||
province_killrequest.wallet_share_percent = percentage_wage_type.percent
|
||
|
||
else:
|
||
province_killrequest.other_share = int(
|
||
(percentage_wage_type.percent / 100) * province_killrequest.total_wage_amount)
|
||
province_killrequest.other_share_percent = percentage_wage_type.percent
|
||
province_killrequest.save()
|
||
|
||
tomorrow = datetime.now().date() + timedelta(days=1)
|
||
if not KillHouseWareHouse.objects.filter(kill_house=kill_request.kill_house,
|
||
date__date=tomorrow).exists():
|
||
ware_house_date = datetime(year=tomorrow.year, month=tomorrow.month, day=tomorrow.day,
|
||
hour=1,
|
||
minute=12, second=20)
|
||
kill_house_ware_house = KillHouseWareHouse(
|
||
kill_house=kill_request.kill_house,
|
||
date=ware_house_date
|
||
)
|
||
kill_house_ware_house.save()
|
||
kill_house_check = KillHouseCheckRequest(
|
||
province_kill_request=province_killrequest,
|
||
state='accepted'
|
||
)
|
||
|
||
kill_house_check.save()
|
||
province_killrequest.state = 'accepted'
|
||
if buying_verification.payment_deadline:
|
||
province_killrequest.payment_deadline = True
|
||
province_killrequest.payment_deadline_date = datetime.now() + timedelta(
|
||
days=request.data['payment_deadline_days'])
|
||
province_killrequest.save()
|
||
check.quantity = 0
|
||
check.save()
|
||
|
||
if poultry_request.export == True:
|
||
hatching.export_killed_weight += int(
|
||
kill_request.kill_capacity * poultry_request.Index_weight)
|
||
hatching.export_killed_quantity += kill_request.kill_capacity
|
||
|
||
|
||
elif poultry_request.free_sale_in_province == True:
|
||
hatching.free_killed_quantity += int(
|
||
kill_request.kill_capacity * poultry_request.Index_weight)
|
||
hatching.free_quantity += kill_request.kill_capacity
|
||
|
||
else:
|
||
hatching.governmental_killed_quantity += int(
|
||
kill_request.kill_capacity * poultry_request.Index_weight)
|
||
hatching.governmental_quantity += kill_request.kill_capacity
|
||
hatching.killed_quantity += kill_request.kill_capacity
|
||
hatching.save()
|
||
poultry_request.remain_quantity = 0
|
||
poultry_request.direct_buying_kill_place = kill_request.kill_house.name
|
||
poultry_request.direct_buying_buyer_info = {
|
||
"buyer_fullname": kill_request.kill_house.kill_house_operator.user.fullname,
|
||
"buyer_mobile": kill_request.kill_house.kill_house_operator.user.mobile,
|
||
}
|
||
poultry_request.save()
|
||
if kill_request.export_status == True:
|
||
kill_request.export_state = 'accepted'
|
||
kill_request.direct_buying_message = request.data['direct_buying_message']
|
||
|
||
else:
|
||
kill_request.direct_buying_state = 'accepted'
|
||
|
||
kill_request.accept_reject_date = datetime.now()
|
||
|
||
kill_request.save()
|
||
poultry_fullname = poultry.unit_name
|
||
# poultry_mobile = poultry.user.mobile
|
||
poultry_mobile = second_mobile_number if not kill_request.direct_buying_intermediary_mobile else kill_request.direct_buying_intermediary_mobile
|
||
quantity = kill_request.kill_capacity
|
||
chicken_breed = kill_request.chicken_breed
|
||
request_kill_house = kill_request.kill_house.name
|
||
date_str = kill_request.recive_date
|
||
if isinstance(date_str, str):
|
||
clean_date_str = date_str.split('.')[0]
|
||
clean_date_str = clean_date_str.replace('T', ' ')
|
||
clean_date_str = clean_date_str.replace('Z', '')
|
||
|
||
send_date = datetime.strptime(clean_date_str, '%Y-%m-%d %H:%M:%S').date()
|
||
|
||
elif isinstance(date_str, datetime):
|
||
send_date = date_str.date()
|
||
# clean_date_str = date_str.split('T')[0] + ' ' + date_str.split('T')[1].split('.')[0]
|
||
# send_date = datetime.strptime(str(clean_date_str), '%Y-%m-%d %H:%M:%S').date()
|
||
send_date = jdatetime.datetime.fromgregorian(year=send_date.year, month=send_date.month,
|
||
day=send_date.day).strftime('%Y-%m-%d')
|
||
date_list = reversed(send_date.split('-'))
|
||
separate = "-"
|
||
code = "-"
|
||
send_date = separate.join(date_list)
|
||
confirm_price_poultry_request = threading.Thread(
|
||
target=confirm_price_poultry_request_direct_buying_sms,
|
||
args=(
|
||
poultry_mobile, poultry_fullname,
|
||
quantity, chicken_breed,
|
||
send_date,
|
||
kill_request.free_direct_buying,
|
||
kill_request.amount, request_kill_house,
|
||
code))
|
||
confirm_price_poultry_request.start()
|
||
bot_eitaa_for_each_province_kill_request(province_killrequest, vet_farm)
|
||
return Response({"result": "درخواست شما با موفقیت ارسال شد."},
|
||
status=status.HTTP_201_CREATED)
|
||
else:
|
||
poultry_fullname = poultry.unit_name
|
||
# poultry_mobile = poultry.user.mobile
|
||
poultry_mobile = second_mobile_number if not kill_request.direct_buying_intermediary_mobile else kill_request.direct_buying_intermediary_mobile
|
||
quantity = kill_request.kill_capacity
|
||
chicken_breed = kill_request.chicken_breed
|
||
request_kill_house = kill_request.kill_house.name
|
||
date_str = kill_request.recive_date
|
||
if isinstance(date_str, str):
|
||
clean_date_str = date_str.split('.')[0]
|
||
clean_date_str = clean_date_str.replace('T', ' ')
|
||
clean_date_str = clean_date_str.replace('Z', '')
|
||
|
||
send_date = datetime.strptime(clean_date_str, '%Y-%m-%d %H:%M:%S').date()
|
||
|
||
elif isinstance(date_str, datetime):
|
||
send_date = date_str.date()
|
||
# clean_date_str = date_str.split('T')[0] + ' ' + date_str.split('T')[1].split('.')[0]
|
||
# send_date = datetime.strptime(str(clean_date_str), '%Y-%m-%d %H:%M:%S').date()
|
||
send_date = jdatetime.datetime.fromgregorian(year=send_date.year, month=send_date.month,
|
||
day=send_date.day).strftime('%Y-%m-%d')
|
||
date_list = reversed(send_date.split('-'))
|
||
separate = "-"
|
||
code = "-"
|
||
send_date = separate.join(date_list)
|
||
confirm_price_poultry_request = threading.Thread(
|
||
target=confirm_price_poultry_request_direct_buying_sms,
|
||
args=(
|
||
poultry_mobile, poultry_fullname,
|
||
quantity, chicken_breed,
|
||
send_date,
|
||
kill_request.free_direct_buying,
|
||
kill_request.amount, request_kill_house,
|
||
code))
|
||
confirm_price_poultry_request.start()
|
||
return Response({"result": "درخواست شما با موفقیت به پنل تخصیص اضافه شد."},
|
||
status=status.HTTP_201_CREATED)
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
now = datetime.now().date()
|
||
if 'role' in request.GET:
|
||
if request.GET['role'] == 'KillHouse':
|
||
kill_house_operator = KillHouseOperator.objects.get(user=user, trash=False)
|
||
kill_house = KillHouse.objects.filter(kill_house_operator=kill_house_operator, trash=False)
|
||
date1 = datetime.strptime(str(request.GET['date1']),
|
||
'%Y-%m-%d').date() if 'date1' in request.GET else now
|
||
date2 = datetime.strptime(str(request.GET['date2']),
|
||
'%Y-%m-%d').date() if 'date2' in request.GET else now
|
||
if 'direct_buying' in request.GET:
|
||
from django.db.models import Value
|
||
kill_req_list = []
|
||
# if request.GET['type'] == 'pending':
|
||
# querysets = KillRequest.objects.filter(kill_house__in=kill_house, recive_date__date__gte=date1,
|
||
# recive_date__date__lte=date2, poultry__isnull=False,
|
||
# direct_buying_state='pending',
|
||
# export_status=False,trash=False
|
||
# ).order_by(
|
||
# 'recive_date')
|
||
# else:
|
||
querysets = KillRequest.objects.filter(kill_house__in=kill_house, recive_date__date__gte=date1,
|
||
recive_date__date__lte=date2, poultry__isnull=False,
|
||
direct_buying_state__in=(
|
||
'accepted', 'rejected', 'deleted', 'pending'),
|
||
export_status=False, trash=False, market=False,
|
||
).order_by(
|
||
Case(
|
||
When(direct_buying_state='pending', then=Value(0)),
|
||
default=Value(1)
|
||
),
|
||
'-recive_date' # مرتبسازی بر اساس تاریخ بعد از مرتبسازی بر اساس حالت
|
||
)
|
||
if 'search' in request.GET:
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "":
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=querysets
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=querysets)
|
||
kill_req_list = ps.filter()
|
||
querysets = [] if len(kill_req_list) == 0 else kill_req_list
|
||
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(querysets)
|
||
if page is not None:
|
||
serializer = KillRequestSerializer(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = KillRequestSerializer(querysets, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
if 'export' in request.GET:
|
||
kill_req_list = []
|
||
if request.GET['type'] == 'pending':
|
||
querysets = KillRequest.objects.filter(kill_house__in=kill_house, recive_date__date__gte=date1,
|
||
recive_date__date__lte=date2, poultry__isnull=False,
|
||
export_status=True, market=False,
|
||
export_state='pending'
|
||
).order_by(
|
||
'recive_date')
|
||
else:
|
||
querysets = KillRequest.objects.filter(kill_house__in=kill_house, recive_date__date__gte=date1,
|
||
recive_date__date__lte=date2, poultry__isnull=False,
|
||
export_status=True, market=False,
|
||
export_state__in=(
|
||
'accepted', 'rejected', 'deleted'),
|
||
).order_by(
|
||
'recive_date')
|
||
|
||
if 'search' in request.GET:
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "":
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=querysets
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=querysets)
|
||
kill_req_list = ps.filter()
|
||
querysets = [] if len(kill_req_list) == 0 else kill_req_list
|
||
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(querysets)
|
||
if page is not None:
|
||
serializer = KillRequestSerializer(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = KillRequestSerializer(querysets, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
queryset_list = KillRequest.objects.filter(kill_house__in=kill_house, trash=False, market=False,
|
||
poultry__isnull=True).order_by(
|
||
'recive_date')
|
||
querysets = [
|
||
kill_request for kill_request in queryset_list
|
||
if date1 <= kill_request.recive_date.date() <= date2
|
||
]
|
||
elif request.GET['role'] in ['ProvinceOperator', 'SuperAdmin', 'AdminX']:
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
date1 = datetime.strptime(str(request.GET['date1']),
|
||
'%Y-%m-%d').date() if 'date1' in request.GET else now
|
||
date2 = datetime.strptime(str(request.GET['date2']),
|
||
'%Y-%m-%d').date() if 'date2' in request.GET else now
|
||
|
||
if 'direct_buying' in request.GET:
|
||
from django.db.models import Value
|
||
kill_req_list = []
|
||
# if request.GET['type'] == 'pending':
|
||
# querysets = KillRequest.objects.filter(
|
||
# recive_date__date__gte=date1,
|
||
# recive_date__date__lte=date2, poultry__isnull=False,
|
||
# direct_buying_state='pending',
|
||
# export_status=False,trash=False
|
||
# ).order_by(
|
||
# 'recive_date')
|
||
# else:
|
||
querysets = KillRequest.objects.filter(
|
||
recive_date__date__gte=date1,
|
||
recive_date__date__lte=date2, poultry__isnull=False, market=False,
|
||
final_accept=True,
|
||
direct_buying_state__in=(
|
||
'accepted', 'rejected', 'deleted', 'pending'),
|
||
export_status=False, trash=False
|
||
).select_related(
|
||
'poultry', 'kill_house', 'slaughter_house', 'poultry_hatching'
|
||
|
||
).order_by(
|
||
Case(
|
||
When(direct_buying_state='pending', then=Value(0)),
|
||
default=Value(1)
|
||
),
|
||
'-recive_date' # مرتبسازی بر اساس تاریخ بعد از مرتبسازی بر اساس حالت
|
||
)
|
||
if 'search' in request.GET:
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "":
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=querysets
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=querysets)
|
||
kill_req_list = ps.filter()
|
||
querysets = [] if len(kill_req_list) == 0 else kill_req_list
|
||
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(querysets)
|
||
if page is not None:
|
||
serializer = KillRequestForDirectBuyingTrueSerializer(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = KillRequestSerializer(querysets, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
if 'export' in request.GET:
|
||
kill_req_list = []
|
||
if request.GET['type'] == 'pending':
|
||
querysets = KillRequest.objects.filter(
|
||
recive_date__date__gte=date1,
|
||
recive_date__date__lte=date2, poultry__isnull=False,
|
||
export_status=True, market=False,
|
||
export_state='pending'
|
||
).order_by(
|
||
'recive_date')
|
||
else:
|
||
querysets = KillRequest.objects.filter(
|
||
recive_date__date__gte=date1,
|
||
recive_date__date__lte=date2, poultry__isnull=False,
|
||
export_status=True, market=False,
|
||
export_state__in=(
|
||
'accepted', 'rejected', 'deleted'),
|
||
).order_by(
|
||
'recive_date')
|
||
|
||
if 'search' in request.GET:
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "":
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=querysets
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=querysets)
|
||
kill_req_list = ps.filter()
|
||
querysets = [] if len(kill_req_list) == 0 else kill_req_list
|
||
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(querysets)
|
||
if page is not None:
|
||
serializer = KillRequestSerializer(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = KillRequestSerializer(querysets, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
querysets_list = KillRequest.objects.filter(
|
||
trash=False, poultry__isnull=True).order_by('-recive_date')
|
||
# for queryset in querysets_list:
|
||
# if (now - queryset.recive_date.date()).days > 2:
|
||
# queryset.remain_quantity = 0
|
||
# queryset.save()
|
||
|
||
querysets = [
|
||
queryset_list for queryset_list in querysets_list
|
||
if date1 <= queryset_list.recive_date.date() <= date2
|
||
]
|
||
elif 'poultry_key' in request.GET:
|
||
kill_requests = []
|
||
today = datetime.now().date()
|
||
poultry = Poultry.objects.get(key=request.GET['poultry_key'], trash=False)
|
||
kill_requests = KillRequest.objects.filter(direct_buying_state__in=('pending', 'accepted'), market=False,
|
||
poultry=poultry, recive_date__date=today, trash=False)
|
||
serializer = KillRequestSerializer(kill_requests, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
else:
|
||
if '0' in request.GET:
|
||
poultry_request = PoultryRequest.objects.get(key=request.GET['0'])
|
||
|
||
queryset = KillRequest.objects.filter(
|
||
recive_date__year=poultry_request.send_date.year,
|
||
recive_date__month=poultry_request.send_date.month,
|
||
recive_date__day=poultry_request.send_date.day,
|
||
province_state='accepted', market=False,
|
||
# automatic=False,
|
||
trash=False, poultry__isnull=True).order_by('id')
|
||
result_list = []
|
||
if len(poultry_request.kill_house_list) != 0:
|
||
querysets = []
|
||
for item in poultry_request.kill_house_list:
|
||
parts = item.split("(")
|
||
name = parts[0].strip()
|
||
result_list.append(name)
|
||
for kill_house in result_list:
|
||
priority_requests = []
|
||
remaining_requests = []
|
||
for kill_request in queryset:
|
||
if kill_request.kill_house.name == kill_house:
|
||
priority_requests.append(kill_request)
|
||
kill_request.priority = True
|
||
kill_request.save()
|
||
else:
|
||
kill_request.priority = False
|
||
kill_request.save()
|
||
remaining_requests.append(kill_request)
|
||
for x in priority_requests:
|
||
if x in querysets:
|
||
pass
|
||
else:
|
||
querysets.append(x)
|
||
for y in remaining_requests:
|
||
if y in querysets:
|
||
pass
|
||
else:
|
||
querysets.append(y)
|
||
|
||
|
||
else:
|
||
|
||
for kill_request in queryset:
|
||
kill_request.priority = False
|
||
kill_request.save()
|
||
querysets = queryset
|
||
|
||
else:
|
||
querysets = []
|
||
serializer = KillRequestSerializer(querysets, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
# تابع مربوط به حذف درخواست کشتارهای ثبت شده از سمت کشتارگاه
|
||
def destroy(self, request, pk=None, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
if 'role' in request.GET:
|
||
kill_request = KillRequest.objects.get(key=request.GET['kill_request_key'])
|
||
|
||
limitation_direct_purchase = LimitationForDirectPurchaseAndBarInformation.objects.filter(
|
||
trash=False, active=True).first()
|
||
|
||
if limitation_direct_purchase and limitation_direct_purchase.start_time and limitation_direct_purchase.end_time:
|
||
current_time = datetime.now().time()
|
||
if limitation_direct_purchase.start_time <= current_time <= limitation_direct_purchase.end_time:
|
||
record_create_time = kill_request.create_date.time()
|
||
if not (
|
||
limitation_direct_purchase.start_time <= record_create_time <= limitation_direct_purchase.end_time):
|
||
return Response(
|
||
{"result": "شما فقط میتوانید بارهایی که در بازه زمانی مجاز ثبت شدهاند را حذف کنید!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
if request.GET['role'] == 'KillHouse':
|
||
if kill_request.direct_buying_state != 'pending' and kill_request.export_status == False:
|
||
return Response({"result": "به علت تایید یا رد استان شما نمیتوانیددرخواست رو حذف کنید"})
|
||
if kill_request.export_state != 'pending' and kill_request.export_status == True:
|
||
return Response({"result": "به علت تایید یا رد استان شما نمیتوانیددرخواست رو حذف کنید"})
|
||
if kill_request.export_status == False:
|
||
kill_request.direct_buying_state = 'deleted'
|
||
else:
|
||
kill_request.export_state = 'deleted'
|
||
|
||
kill_request.trash = True
|
||
kill_request.save()
|
||
return Response({"result": "با موفقیت حذف شد"}, status=status.HTTP_200_OK)
|
||
|
||
user = SystemUserProfile.objects.get(user=request.user)
|
||
kill_request = KillRequest.objects.get(id=pk)
|
||
if ProvinceKillRequest.objects.filter(kill_request=kill_request, trash=False).exists():
|
||
return Response({"result": "error"}, status=status.HTTP_403_FORBIDDEN)
|
||
if SmsLicense.objects.filter(kill_request=True).exists():
|
||
province_operator = ProvinceOperator.objects.filter(
|
||
user=SystemUserProfile.objects.get(role__name='ProvinceOperator', province=user.province))
|
||
|
||
if province_operator.count() > 0:
|
||
province_operator = province_operator.last()
|
||
quantity = kill_request.kill_capacity
|
||
chicken_breed = kill_request.chicken_breed
|
||
date_str = str(kill_request.recive_date)
|
||
send_date = datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S').date()
|
||
send_date = jdatetime.datetime.fromgregorian(year=send_date.year, month=send_date.month,
|
||
day=send_date.day).strftime('%Y-%m-%d')
|
||
date_list = reversed(send_date.split('-'))
|
||
separate = "-"
|
||
send_date = separate.join(date_list)
|
||
province = kill_request.kill_house.system_address.province.name
|
||
city = kill_request.kill_house.system_address.city.name
|
||
kill_house_name = kill_request.kill_house.name
|
||
province_operator_mobile = province_operator.user.mobile
|
||
province_operator_name = province_operator.user.fullname
|
||
# kill_request_province_sms(province_operator_mobile, kill_house_name, quantity, chicken_breed,
|
||
# send_date, province, city)
|
||
|
||
sms_kill_request_delete_province_sms = threading.Thread(target=kill_request_delete_province_sms,
|
||
args=(
|
||
province_operator_mobile, kill_house_name,
|
||
quantity,
|
||
chicken_breed,
|
||
send_date, province, city))
|
||
sms_kill_request_delete_province_sms.start()
|
||
kill_request.trash = True
|
||
kill_request.save()
|
||
|
||
return Response('request deleted', status=status.HTTP_200_OK)
|
||
|
||
def update(self, request, pk=None, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
|
||
if 'kill_request_key' in request.data.keys():
|
||
kill_request_instance = KillRequest.objects.filter(key=request.data['kill_request_key'],
|
||
trash=False).first()
|
||
if kill_request_instance:
|
||
limitation_direct_purchase = LimitationForDirectPurchaseAndBarInformation.objects.filter(
|
||
trash=False, active=True).first()
|
||
|
||
if limitation_direct_purchase and limitation_direct_purchase.start_time and limitation_direct_purchase.end_time:
|
||
current_time = datetime.now().time()
|
||
if limitation_direct_purchase.start_time <= current_time <= limitation_direct_purchase.end_time:
|
||
record_create_time = kill_request_instance.create_date.time()
|
||
if not (
|
||
limitation_direct_purchase.start_time <= record_create_time <= limitation_direct_purchase.end_time):
|
||
return Response(
|
||
{
|
||
"result": "شما فقط میتوانید بارهایی که در بازه زمانی مجاز ثبت شدهاند را ویرایش کنید!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
if 'role' in request.data.keys():
|
||
kill_request = KillRequest.objects.get(key=request.data['kill_request_key'])
|
||
if kill_request.trash:
|
||
return Response({"result": "به علت بدهی درخواست شما حذف گردید!"}, status=status.HTTP_403_FORBIDDEN)
|
||
if request.data['role'] == 'KillHouse':
|
||
if kill_request.direct_buying_state != 'pending':
|
||
return Response({"result": "به علت تایید یا رد استان شما نمیتوانیددرخواست رو ویرایش کنید"})
|
||
request.data.pop('role')
|
||
request.data.pop('kill_request_key')
|
||
if 'input_direct_buying_code' in request.data.keys():
|
||
if request.data['input_direct_buying_code'] != None or request.data['input_direct_buying_code'] != "":
|
||
if request.data['input_direct_buying_code'] != kill_request.direct_buying_code:
|
||
return Response({"result": "کد وارد شده صحیح نمی باشد"}, status=status.HTTP_403_FORBIDDEN)
|
||
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
now = datetime.now().time().replace(second=0, microsecond=0)
|
||
|
||
free_sale_in_province = False if kill_request.free_direct_buying == False else True
|
||
|
||
permission_duirect_buying = AutomaticDirectBuyingPermission.objects.first()
|
||
|
||
if permission_duirect_buying.allow == True and permission_duirect_buying.start_time < \
|
||
now < permission_duirect_buying.end_time:
|
||
# kill_request.kill_capacity = int(request.data['quantity'])
|
||
# kill_request.remain_quantity = int(request.data['quantity'])
|
||
# kill_request.save()
|
||
# request.data.pop('quantity')
|
||
poultry_requests = PoultryRequest.objects.filter(poultry__user=kill_request.poultry.user,
|
||
trash=False).order_by(
|
||
'create_date')
|
||
|
||
if kill_request.poultry_hatching:
|
||
hatching = kill_request.poultry_hatching
|
||
else:
|
||
|
||
hatching = PoultryHatching.objects.filter(poultry=kill_request.poultry, state='pending',
|
||
archive=False,
|
||
allow_hatching='pending', trash=False).order_by(
|
||
'id').last()
|
||
|
||
poultry = Poultry.objects.get(key=kill_request.poultry.key, trash=False)
|
||
vet_farm = VetFarm.objects.filter(trash=False, poultry=poultry).first()
|
||
last_poultry_request = PoultryRequest.objects.all()
|
||
if last_poultry_request.count() > 0:
|
||
general_order_code = last_poultry_request.last().general_order_code + 1
|
||
else:
|
||
general_order_code = 1
|
||
|
||
if poultry_requests.count() > 0:
|
||
order_code = poultry_requests.last().order_code + 1
|
||
else:
|
||
order_code = int(str(poultry.user.base_order) + '0001')
|
||
city_operator = CityOperator.objects.filter(unit_name=poultry.city_operator, trash=False).last()
|
||
if not city_operator:
|
||
city_operator = CityOperator.objects.filter(unit_name='اتحادیه استان (فاقد تعاونی)',
|
||
trash=False).last()
|
||
if hatching.left_over < kill_request.kill_capacity:
|
||
return Response({"result": "تعداد جوجه در سالن کمتر از تعداد درخواستی است"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
if kill_request.kill_house.max_kill_limit and kill_request.kill_house.total_kill_capacity > 0:
|
||
total_province_kill_requests = ProvinceKillRequest.objects.filter(trash=False,
|
||
return_to_province=False,
|
||
archive_wage=False,
|
||
state__in=(
|
||
'pending', 'accepted'),
|
||
killhouse_user=kill_request.kill_house,
|
||
kill_request__recive_date__date=kill_request.recive_date.date())
|
||
total_province_kill_requests_quantity = \
|
||
total_province_kill_requests.aggregate(total=Sum('total_killed_quantity'))['total'] or 0
|
||
if kill_request.kill_house.total_kill_capacity < total_province_kill_requests_quantity + kill_request.kill_capacity:
|
||
return Response(
|
||
{"result": "تعداد وارد شده از مانده سهمیه کشتار روزانه کشتارگاه بیشتر است !"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
poultry_request = PoultryRequest(
|
||
hatching=hatching,
|
||
order_code=order_code,
|
||
general_order_code=general_order_code,
|
||
city_operator=city_operator,
|
||
poultry=poultry,
|
||
previous_quantity=kill_request.kill_capacity,
|
||
remain_quantity=kill_request.kill_capacity,
|
||
quantity=kill_request.kill_capacity,
|
||
first_quantity=kill_request.kill_capacity,
|
||
chicken_breed=hatching.chicken_breed,
|
||
Index_weight=kill_request.Index_weight,
|
||
state_process='accepted',
|
||
province_state='accepted',
|
||
direct_buying=True,
|
||
amount=kill_request.amount,
|
||
free_sale_in_province=free_sale_in_province,
|
||
send_date=kill_request.recive_date
|
||
)
|
||
if kill_request.freezing:
|
||
poultry_request.freezing = True
|
||
|
||
poultry_request.save()
|
||
kill_request.poultry_request = poultry_request
|
||
poultry_prediction(poultry_request.poultry)
|
||
|
||
if kill_request.export_status == True:
|
||
poultry_request.export = True
|
||
|
||
send_date_str = poultry_request.send_date
|
||
|
||
if isinstance(send_date_str, str):
|
||
# حذف میلیثانیه و کاراکترهای اضافی
|
||
clean_date_str = send_date_str.split('.')[0] # حذف بخش .759000
|
||
clean_date_str = clean_date_str.replace('T', ' ') # جایگزینی T با فاصله
|
||
clean_date_str = clean_date_str.replace('Z', '') # حذف Z اگر وجود دارد
|
||
|
||
# تبدیل به تاریخ میلادی
|
||
send_date_datetime = datetime.strptime(clean_date_str, '%Y-%m-%d %H:%M:%S').date()
|
||
|
||
# اگر از قبل شی datetime است
|
||
elif isinstance(send_date_str, datetime):
|
||
send_date_datetime = send_date_str.date()
|
||
|
||
# send_date_datetime = datetime.strptime(str(send_date_str), '%Y-%m-%dT%H:%M:%S.%fZ')
|
||
poultry_request.killing_age = (send_date_datetime - hatching.date.date()).days + 1
|
||
|
||
poultry_request.state = {
|
||
"city_operator": city_operator.user.fullname,
|
||
"city_state": poultry_request.state_process,
|
||
"city_operator_mobile": city_operator.user.mobile,
|
||
"province_operator": "",
|
||
"province_state": ""
|
||
}
|
||
poultry_request.registrar = {
|
||
"role": 'KillHouse',
|
||
"fullname": user.fullname,
|
||
"date": str(poultry_request.create_date)
|
||
}
|
||
poultry_request.save()
|
||
|
||
city_operator_check_request = CityOperatorCheckRequest(
|
||
city_operator_system=poultry_request.city_operator,
|
||
poultry_request=poultry_request,
|
||
state='accept',
|
||
province_accept=True,
|
||
province_state='accept',
|
||
allow_hatching=True
|
||
|
||
)
|
||
city_operator_check_request.save()
|
||
province_operator = ProvinceOperator.objects.filter(
|
||
user=SystemUserProfile.objects.get(role__name='ProvinceOperator', province=user.province))
|
||
|
||
if province_operator.count() > 0:
|
||
province_operator = province_operator.last()
|
||
|
||
check = ProvinceCheckOperatorRequest(
|
||
province_operator_system=province_operator,
|
||
poultry_request=poultry_request,
|
||
city_request_Poultry=city_operator_check_request,
|
||
quantity=poultry_request.quantity,
|
||
|
||
state='accept',
|
||
)
|
||
check.save()
|
||
wage_type = WageType.objects.filter(en_name='province-kill-request', trash=False).first()
|
||
wage = wage_type.amount if wage_type.status == True else 0
|
||
percentages_wage_type = PercentageOfWageType.objects.filter(wage_type=wage_type, percent__gt=0,
|
||
trash=False)
|
||
province_killrequest = ProvinceKillRequest(
|
||
killhouse_user=kill_request.kill_house,
|
||
kill_request=kill_request,
|
||
province_request=check,
|
||
quantity=kill_request.kill_capacity,
|
||
total_killed_quantity=kill_request.kill_capacity,
|
||
total_killed_weight=int(kill_request.kill_capacity * poultry_request.Index_weight),
|
||
main_quantity=kill_request.kill_capacity,
|
||
wage=wage,
|
||
direct_buying=True,
|
||
total_wage_amount=wage * int(kill_request.kill_capacity * poultry_request.Index_weight),
|
||
)
|
||
province_killrequest.save()
|
||
# fine = FinePermission.objects.filter(trash=False).first()
|
||
# time_for_fine = datetime.now()
|
||
# time_for_fine = time_for_fine.replace(second=0, microsecond=0).time()
|
||
# if fine.direct_buying:
|
||
# if fine.direct_buying_start_time < time_for_fine < fine.direct_buying_end_time:
|
||
# province_killrequest.direct_buying_fine = True
|
||
# province_killrequest.direct_buying_fine_amount = (
|
||
# fine.direct_buying_fine_coefficient - 1) * province_killrequest.total_wage_amount if fine.direct_buying_fine_coefficient > 1 else province_killrequest.total_wage_amount
|
||
# province_killrequest.direct_buying_fine_coefficient = fine.direct_buying_fine_coefficient
|
||
if wage_type and wage_type.status == True and percentages_wage_type:
|
||
for percentage_wage_type in percentages_wage_type:
|
||
if percentage_wage_type.share_type.en_name == 'union':
|
||
province_killrequest.union_share = int(
|
||
(percentage_wage_type.percent / 100) * province_killrequest.total_wage_amount)
|
||
province_killrequest.union_share_percent = percentage_wage_type.percent
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'company':
|
||
province_killrequest.company_share = int(
|
||
(percentage_wage_type.percent / 100) * province_killrequest.total_wage_amount)
|
||
province_killrequest.company_share_percent = percentage_wage_type.percent
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'guilds':
|
||
province_killrequest.guilds_share = int(
|
||
(percentage_wage_type.percent / 100) * province_killrequest.total_wage_amount)
|
||
province_killrequest.guilds_share_percent = percentage_wage_type.percent
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'city':
|
||
province_killrequest.city_share = int(
|
||
(percentage_wage_type.percent / 100) * province_killrequest.total_wage_amount)
|
||
province_killrequest.city_share_percent = percentage_wage_type.percent
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'other':
|
||
province_killrequest.other_share = int(
|
||
(percentage_wage_type.percent / 100) * province_killrequest.total_wage_amount)
|
||
province_killrequest.other_share_percent = percentage_wage_type.percent
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'wallet':
|
||
province_killrequest.wallet_share = int(
|
||
(percentage_wage_type.percent / 100) * province_killrequest.total_wage_amount)
|
||
province_killrequest.wallet_share_percent = percentage_wage_type.percent
|
||
|
||
else:
|
||
province_killrequest.other_share = int(
|
||
(percentage_wage_type.percent / 100) * province_killrequest.total_wage_amount)
|
||
province_killrequest.other_share_percent = percentage_wage_type.percent
|
||
province_killrequest.save()
|
||
|
||
tomorrow = datetime.now().date() + timedelta(days=1)
|
||
if not KillHouseWareHouse.objects.filter(kill_house=kill_request.kill_house,
|
||
date__date=tomorrow).exists():
|
||
ware_house_date = datetime(year=tomorrow.year, month=tomorrow.month, day=tomorrow.day, hour=1,
|
||
minute=12, second=20)
|
||
kill_house_ware_house = KillHouseWareHouse(
|
||
kill_house=kill_request.kill_house,
|
||
date=ware_house_date
|
||
)
|
||
kill_house_ware_house.save()
|
||
kill_house_check = KillHouseCheckRequest(
|
||
province_kill_request=province_killrequest,
|
||
state='accepted'
|
||
)
|
||
|
||
kill_house_check.save()
|
||
province_killrequest.state = 'accepted'
|
||
|
||
if kill_request.payment_deadline:
|
||
province_killrequest.payment_deadline = True
|
||
province_killrequest.payment_deadline_date = kill_request.payment_deadline_date
|
||
province_killrequest.save()
|
||
check.quantity = 0
|
||
check.save()
|
||
|
||
if poultry_request.export == True:
|
||
hatching.export_killed_weight += int(kill_request.kill_capacity * poultry_request.Index_weight)
|
||
hatching.export_killed_quantity += kill_request.kill_capacity
|
||
|
||
|
||
elif poultry_request.free_sale_in_province == True:
|
||
hatching.free_killed_quantity += int(kill_request.kill_capacity * poultry_request.Index_weight)
|
||
hatching.free_quantity += kill_request.kill_capacity
|
||
|
||
else:
|
||
hatching.governmental_killed_quantity += int(
|
||
kill_request.kill_capacity * poultry_request.Index_weight)
|
||
hatching.governmental_quantity += kill_request.kill_capacity
|
||
hatching.killed_quantity += kill_request.kill_capacity
|
||
hatching.save()
|
||
poultry_request.remain_quantity = 0
|
||
poultry_request.direct_buying_kill_place = kill_request.kill_house.name
|
||
poultry_request.direct_buying_buyer_info = {
|
||
"buyer_fullname": kill_request.kill_house.kill_house_operator.user.fullname,
|
||
"buyer_mobile": kill_request.kill_house.kill_house_operator.user.mobile,
|
||
}
|
||
poultry_request.save()
|
||
if kill_request.export_status == True:
|
||
kill_request.export_state = 'accepted'
|
||
kill_request.direct_buying_message = request.data['direct_buying_message']
|
||
|
||
else:
|
||
kill_request.direct_buying_state = 'accepted'
|
||
|
||
kill_request.accept_reject_date = datetime.now()
|
||
kill_request.automatic_accept = True
|
||
kill_request.input_direct_buying_code = request.data['input_direct_buying_code']
|
||
kill_request.save()
|
||
bot_eitaa_for_each_province_kill_request(province_killrequest, vet_farm)
|
||
return Response({"result": "درخواست شما با موفقیت تایید و ارسال شد."},
|
||
status=status.HTTP_201_CREATED)
|
||
if 'input_export_code' in request.data.keys():
|
||
if request.data['input_export_code'] != None or request.data['input_export_code'] != "":
|
||
if request.data['input_export_code'] != kill_request.export_code:
|
||
return Response({"result": "کد وارد شده صحیح نمی باشد"}, status=status.HTTP_403_FORBIDDEN)
|
||
|
||
if 'final_accept' in request.data.keys():
|
||
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
kill_request.final_accept = True
|
||
now = datetime.now().time().replace(second=0, microsecond=0)
|
||
price_confirmation = PriceConfirmation.objects.filter(trash=False).first()
|
||
price_confirmation = price_confirmation.poultry_status if price_confirmation else False
|
||
buying_verification = DirectBuyingVerification.objects.filter(trash=False).first()
|
||
|
||
if buying_verification.poultry_code_mandatory:
|
||
poultry_fullname = kill_request.poultry.unit_name
|
||
poultry_mobile = kill_request.poultry.user.mobile if not kill_request.direct_buying_intermediary_mobile else kill_request.direct_buying_intermediary_mobile
|
||
quantity = kill_request.kill_capacity
|
||
chicken_breed = kill_request.chicken_breed
|
||
request_kill_house = kill_request.kill_house.name
|
||
date_str = kill_request.recive_date
|
||
# clean_date_str = date_str.split('T')[0] + ' ' + date_str.split('T')[1].split('.')[0]
|
||
|
||
# send_date = datetime.strptime(str(date_str), '%Y-%m-%d %H:%M:%S').date()
|
||
# send_date = jdatetime.datetime.fromgregorian(year=send_date.year, month=send_date.month,
|
||
# day=send_date.day).strftime('%Y-%m-%d')
|
||
#
|
||
# date_list = reversed(send_date.split('-'))
|
||
# separate = "-"
|
||
# send_date = separate.join(date_list)
|
||
|
||
if isinstance(date_str, str):
|
||
clean_date_str = date_str.split('.')[0]
|
||
clean_date_str = clean_date_str.replace('T', ' ')
|
||
clean_date_str = clean_date_str.replace('Z', '')
|
||
|
||
send_date = datetime.strptime(clean_date_str, '%Y-%m-%d %H:%M:%S').date()
|
||
|
||
elif isinstance(date_str, datetime):
|
||
send_date = date_str.date()
|
||
|
||
jalali_date = jdatetime.date.fromgregorian(
|
||
year=send_date.year,
|
||
month=send_date.month,
|
||
day=send_date.day
|
||
)
|
||
|
||
formatted_jalali = jalali_date.strftime('%Y-%m-%d')
|
||
|
||
date_parts = formatted_jalali.split('-')
|
||
send_date = '-'.join(reversed(date_parts))
|
||
|
||
confirm_price_poultry_request = threading.Thread(
|
||
target=confirm_price_poultry_request_direct_buying_sms,
|
||
args=(
|
||
poultry_mobile, poultry_fullname,
|
||
quantity, chicken_breed,
|
||
send_date,
|
||
kill_request.free_direct_buying,
|
||
kill_request.amount, request_kill_house,
|
||
kill_request.direct_buying_code))
|
||
confirm_price_poultry_request.start()
|
||
kill_request.price_confirmation = price_confirmation
|
||
kill_request.save()
|
||
return Response({"result": "درخواست شما با موفقیت تایید و ارسال شد."},
|
||
status=status.HTTP_201_CREATED)
|
||
else:
|
||
free_sale_in_province = False if kill_request.free_direct_buying == False else True
|
||
|
||
permission_duirect_buying = AutomaticDirectBuyingPermission.objects.first()
|
||
|
||
if permission_duirect_buying.allow == True and permission_duirect_buying.start_time < \
|
||
now < permission_duirect_buying.end_time:
|
||
# kill_request.kill_capacity = int(request.data['quantity'])
|
||
# kill_request.remain_quantity = int(request.data['quantity'])
|
||
# kill_request.save()
|
||
# request.data.pop('quantity')
|
||
poultry_requests = PoultryRequest.objects.filter(poultry__user=kill_request.poultry.user,
|
||
trash=False).order_by(
|
||
'create_date')
|
||
|
||
if kill_request.poultry_hatching:
|
||
hatching = kill_request.poultry_hatching
|
||
else:
|
||
|
||
hatching = PoultryHatching.objects.filter(poultry=kill_request.poultry, state='pending',
|
||
archive=False,
|
||
allow_hatching='pending', trash=False).order_by(
|
||
'id').last()
|
||
# hatching = PoultryHatching.objects.filter(poultry=kill_request.poultry, state='pending',
|
||
# archive=False,
|
||
# allow_hatching='pending', trash=False).order_by(
|
||
# 'left_over').last()
|
||
|
||
poultry = Poultry.objects.get(key=kill_request.poultry.key, trash=False)
|
||
vet_farm = VetFarm.objects.filter(trash=False, poultry=poultry).first()
|
||
last_poultry_request = PoultryRequest.objects.all()
|
||
if last_poultry_request.count() > 0:
|
||
general_order_code = last_poultry_request.last().general_order_code + 1
|
||
else:
|
||
general_order_code = 1
|
||
|
||
if poultry_requests.count() > 0:
|
||
order_code = poultry_requests.last().order_code + 1
|
||
else:
|
||
order_code = int(str(poultry.user.base_order) + '0001')
|
||
city_operator = CityOperator.objects.filter(unit_name=poultry.city_operator, trash=False).last()
|
||
if not city_operator:
|
||
city_operator = CityOperator.objects.filter(unit_name='اتحادیه استان (فاقد تعاونی)',
|
||
trash=False).last()
|
||
if hatching.left_over < kill_request.kill_capacity:
|
||
return Response({"result": "تعداد جوجه در سالن کمتر از تعداد درخواستی است"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
if kill_request.kill_house.max_kill_limit and kill_request.kill_house.total_kill_capacity > 0:
|
||
total_province_kill_requests = ProvinceKillRequest.objects.filter(trash=False,
|
||
return_to_province=False,
|
||
archive_wage=False,
|
||
state__in=(
|
||
'pending',
|
||
'accepted'),
|
||
killhouse_user=kill_request.kill_house,
|
||
kill_request__recive_date__date=kill_request.recive_date.date())
|
||
total_province_kill_requests_quantity = \
|
||
total_province_kill_requests.aggregate(total=Sum('total_killed_quantity'))['total'] or 0
|
||
if kill_request.kill_house.total_kill_capacity < total_province_kill_requests_quantity + kill_request.kill_capacity:
|
||
return Response(
|
||
{"result": "تعداد وارد شده از مانده سهمیه کشتار روزانه کشتارگاه بیشتر است !"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
poultry_request = PoultryRequest(
|
||
hatching=hatching,
|
||
order_code=order_code,
|
||
general_order_code=general_order_code,
|
||
city_operator=city_operator,
|
||
poultry=poultry,
|
||
previous_quantity=kill_request.kill_capacity,
|
||
remain_quantity=kill_request.kill_capacity,
|
||
quantity=kill_request.kill_capacity,
|
||
first_quantity=kill_request.kill_capacity,
|
||
chicken_breed=hatching.chicken_breed,
|
||
Index_weight=kill_request.Index_weight,
|
||
state_process='accepted',
|
||
province_state='accepted',
|
||
direct_buying=True,
|
||
amount=kill_request.amount,
|
||
free_sale_in_province=free_sale_in_province,
|
||
send_date=kill_request.recive_date
|
||
)
|
||
if kill_request.freezing:
|
||
poultry_request.freezing = True
|
||
|
||
poultry_request.save()
|
||
kill_request.poultry_request = poultry_request
|
||
poultry_prediction(poultry_request.poultry)
|
||
|
||
if kill_request.export_status == True:
|
||
poultry_request.export = True
|
||
date_str = poultry_request.send_date
|
||
if isinstance(date_str, str):
|
||
# حذف میلیثانیه و کاراکترهای اضافی
|
||
clean_date_str = date_str.split('.')[0] # حذف بخش .759000
|
||
clean_date_str = clean_date_str.replace('T', ' ') # جایگزینی T با فاصله
|
||
clean_date_str = clean_date_str.replace('Z', '') # حذف Z اگر وجود دارد
|
||
|
||
# تبدیل به تاریخ میلادی
|
||
send_date_datetime = datetime.strptime(clean_date_str, '%Y-%m-%d %H:%M:%S').date()
|
||
|
||
# اگر از قبل شی datetime است
|
||
elif isinstance(date_str, datetime):
|
||
send_date_datetime = date_str.date()
|
||
# send_date_datetime = datetime.strptime(str(send_date_str), '%Y-%m-%dT%H:%M:%S')
|
||
poultry_request.killing_age = (send_date_datetime - hatching.date.date()).days + 1
|
||
|
||
poultry_request.state = {
|
||
"city_operator": city_operator.user.fullname,
|
||
"city_state": poultry_request.state_process,
|
||
"city_operator_mobile": city_operator.user.mobile,
|
||
"province_operator": "",
|
||
"province_state": ""
|
||
}
|
||
poultry_request.registrar = {
|
||
"role": "KillHouse",
|
||
"fullname": user.fullname,
|
||
"date": str(poultry_request.create_date)
|
||
}
|
||
poultry_request.save()
|
||
|
||
city_operator_check_request = CityOperatorCheckRequest(
|
||
city_operator_system=poultry_request.city_operator,
|
||
poultry_request=poultry_request,
|
||
state='accept',
|
||
province_accept=True,
|
||
province_state='accept',
|
||
allow_hatching=True
|
||
|
||
)
|
||
city_operator_check_request.save()
|
||
province_operator = ProvinceOperator.objects.filter(
|
||
user=SystemUserProfile.objects.get(role__name='ProvinceOperator', province=user.province))
|
||
|
||
if province_operator.count() > 0:
|
||
province_operator = province_operator.last()
|
||
|
||
check = ProvinceCheckOperatorRequest(
|
||
province_operator_system=province_operator,
|
||
poultry_request=poultry_request,
|
||
city_request_Poultry=city_operator_check_request,
|
||
quantity=poultry_request.quantity,
|
||
|
||
state='accept',
|
||
)
|
||
check.save()
|
||
wage_type = WageType.objects.filter(en_name='province-kill-request', trash=False).first()
|
||
wage = wage_type.amount if wage_type.status == True else 0
|
||
percentages_wage_type = PercentageOfWageType.objects.filter(wage_type=wage_type, percent__gt=0,
|
||
trash=False)
|
||
province_killrequest = ProvinceKillRequest(
|
||
killhouse_user=kill_request.kill_house,
|
||
kill_request=kill_request,
|
||
province_request=check,
|
||
quantity=kill_request.kill_capacity,
|
||
total_killed_quantity=kill_request.kill_capacity,
|
||
total_killed_weight=int(kill_request.kill_capacity * poultry_request.Index_weight),
|
||
main_quantity=kill_request.kill_capacity,
|
||
wage=wage,
|
||
direct_buying=True,
|
||
total_wage_amount=wage * int(kill_request.kill_capacity * poultry_request.Index_weight),
|
||
)
|
||
province_killrequest.save()
|
||
# fine = FinePermission.objects.filter(trash=False).first()
|
||
# time_for_fine = datetime.now()
|
||
# time_for_fine = time_for_fine.replace(second=0, microsecond=0).time()
|
||
# if fine.direct_buying:
|
||
# if fine.direct_buying_start_time < time_for_fine < fine.direct_buying_end_time:
|
||
# province_killrequest.direct_buying_fine = True
|
||
# province_killrequest.direct_buying_fine_amount = (
|
||
# fine.direct_buying_fine_coefficient - 1) * province_killrequest.total_wage_amount if fine.direct_buying_fine_coefficient > 1 else province_killrequest.total_wage_amount
|
||
# province_killrequest.direct_buying_fine_coefficient = fine.direct_buying_fine_coefficient
|
||
if wage_type and wage_type.status == True and percentages_wage_type:
|
||
for percentage_wage_type in percentages_wage_type:
|
||
if percentage_wage_type.share_type.en_name == 'union':
|
||
province_killrequest.union_share = int(
|
||
(percentage_wage_type.percent / 100) * province_killrequest.total_wage_amount)
|
||
province_killrequest.union_share_percent = percentage_wage_type.percent
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'company':
|
||
province_killrequest.company_share = int(
|
||
(percentage_wage_type.percent / 100) * province_killrequest.total_wage_amount)
|
||
province_killrequest.company_share_percent = percentage_wage_type.percent
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'guilds':
|
||
province_killrequest.guilds_share = int(
|
||
(percentage_wage_type.percent / 100) * province_killrequest.total_wage_amount)
|
||
province_killrequest.guilds_share_percent = percentage_wage_type.percent
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'city':
|
||
province_killrequest.city_share = int(
|
||
(percentage_wage_type.percent / 100) * province_killrequest.total_wage_amount)
|
||
province_killrequest.city_share_percent = percentage_wage_type.percent
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'other':
|
||
province_killrequest.other_share = int(
|
||
(percentage_wage_type.percent / 100) * province_killrequest.total_wage_amount)
|
||
province_killrequest.other_share_percent = percentage_wage_type.percent
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'wallet':
|
||
province_killrequest.wallet_share = int(
|
||
(percentage_wage_type.percent / 100) * province_killrequest.total_wage_amount)
|
||
province_killrequest.wallet_share_percent = percentage_wage_type.percent
|
||
|
||
else:
|
||
province_killrequest.other_share = int(
|
||
(percentage_wage_type.percent / 100) * province_killrequest.total_wage_amount)
|
||
province_killrequest.other_share_percent = percentage_wage_type.percent
|
||
province_killrequest.save()
|
||
|
||
tomorrow = datetime.now().date() + timedelta(days=1)
|
||
if not KillHouseWareHouse.objects.filter(kill_house=kill_request.kill_house,
|
||
date__date=tomorrow).exists():
|
||
ware_house_date = datetime(year=tomorrow.year, month=tomorrow.month, day=tomorrow.day,
|
||
hour=1,
|
||
minute=12, second=20)
|
||
kill_house_ware_house = KillHouseWareHouse(
|
||
kill_house=kill_request.kill_house,
|
||
date=ware_house_date
|
||
)
|
||
kill_house_ware_house.save()
|
||
kill_house_check = KillHouseCheckRequest(
|
||
province_kill_request=province_killrequest,
|
||
state='accepted'
|
||
)
|
||
|
||
kill_house_check.save()
|
||
province_killrequest.state = 'accepted'
|
||
if kill_request.payment_deadline:
|
||
province_killrequest.payment_deadline = True
|
||
province_killrequest.payment_deadline_date = kill_request.payment_deadline_date
|
||
province_killrequest.save()
|
||
check.quantity = 0
|
||
check.save()
|
||
|
||
if poultry_request.export == True:
|
||
hatching.export_killed_weight += int(
|
||
kill_request.kill_capacity * poultry_request.Index_weight)
|
||
hatching.export_killed_quantity += kill_request.kill_capacity
|
||
|
||
|
||
elif poultry_request.free_sale_in_province == True:
|
||
hatching.free_killed_quantity += int(
|
||
kill_request.kill_capacity * poultry_request.Index_weight)
|
||
hatching.free_quantity += kill_request.kill_capacity
|
||
|
||
else:
|
||
hatching.governmental_killed_quantity += int(
|
||
kill_request.kill_capacity * poultry_request.Index_weight)
|
||
hatching.governmental_quantity += kill_request.kill_capacity
|
||
hatching.killed_quantity += kill_request.kill_capacity
|
||
hatching.save()
|
||
poultry_request.remain_quantity = 0
|
||
poultry_request.direct_buying_kill_place = kill_request.kill_house.name
|
||
poultry_request.direct_buying_buyer_info = {
|
||
"buyer_fullname": kill_request.kill_house.kill_house_operator.user.fullname,
|
||
"buyer_mobile": kill_request.kill_house.kill_house_operator.user.mobile,
|
||
}
|
||
poultry_request.save()
|
||
if kill_request.export_status == True:
|
||
kill_request.export_state = 'accepted'
|
||
kill_request.direct_buying_message = request.data['direct_buying_message']
|
||
|
||
else:
|
||
kill_request.direct_buying_state = 'accepted'
|
||
|
||
kill_request.accept_reject_date = datetime.now()
|
||
kill_request.automatic_accept = True
|
||
|
||
kill_request.save()
|
||
poultry_fullname = poultry.unit_name
|
||
poultry_mobile = poultry.user.mobile if not kill_request.direct_buying_intermediary_mobile else kill_request.direct_buying_intermediary_mobile
|
||
quantity = kill_request.kill_capacity
|
||
chicken_breed = kill_request.chicken_breed
|
||
request_kill_house = kill_request.kill_house.name
|
||
date_str = kill_request.recive_date
|
||
if isinstance(date_str, str):
|
||
clean_date_str = date_str.split('T')[0] + ' ' + date_str.split('T')[1].split('.')[0]
|
||
else:
|
||
clean_date_str = date_str.strftime('%Y-%m-%d %H:%M:%S')
|
||
send_date = datetime.strptime(str(clean_date_str), '%Y-%m-%d %H:%M:%S').date()
|
||
send_date = jdatetime.datetime.fromgregorian(year=send_date.year, month=send_date.month,
|
||
day=send_date.day).strftime('%Y-%m-%d')
|
||
date_list = reversed(send_date.split('-'))
|
||
separate = "-"
|
||
code = "-"
|
||
send_date = separate.join(date_list)
|
||
confirm_price_poultry_request = threading.Thread(
|
||
target=confirm_price_poultry_request_direct_buying_sms,
|
||
args=(
|
||
poultry_mobile, poultry_fullname,
|
||
quantity, chicken_breed,
|
||
send_date,
|
||
kill_request.free_direct_buying,
|
||
kill_request.amount, request_kill_house,
|
||
code))
|
||
confirm_price_poultry_request.start()
|
||
|
||
bot_eitaa_for_each_province_kill_request(province_killrequest, vet_farm)
|
||
return Response({"result": "درخواست شما با موفقیت تایید و ارسال شد."},
|
||
status=status.HTTP_201_CREATED)
|
||
|
||
|
||
|
||
else:
|
||
poultry = Poultry.objects.get(key=kill_request.poultry.key, trash=False)
|
||
poultry_fullname = poultry.unit_name
|
||
poultry_mobile = poultry.user.mobile if not kill_request.direct_buying_intermediary_mobile else kill_request.direct_buying_intermediary_mobile
|
||
quantity = kill_request.kill_capacity
|
||
chicken_breed = kill_request.chicken_breed
|
||
request_kill_house = kill_request.kill_house.name
|
||
date_str = kill_request.recive_date
|
||
if isinstance(date_str, str):
|
||
clean_date_str = date_str.split('T')[0] + ' ' + date_str.split('T')[1].split('.')[0]
|
||
else:
|
||
clean_date_str = date_str.strftime('%Y-%m-%d %H:%M:%S')
|
||
send_date = datetime.strptime(str(clean_date_str), '%Y-%m-%d %H:%M:%S').date()
|
||
send_date = jdatetime.datetime.fromgregorian(year=send_date.year, month=send_date.month,
|
||
day=send_date.day).strftime('%Y-%m-%d')
|
||
date_list = reversed(send_date.split('-'))
|
||
separate = "-"
|
||
code = "-"
|
||
send_date = separate.join(date_list)
|
||
confirm_price_poultry_request = threading.Thread(
|
||
target=confirm_price_poultry_request_direct_buying_sms,
|
||
args=(
|
||
poultry_mobile, poultry_fullname,
|
||
quantity, chicken_breed,
|
||
send_date,
|
||
kill_request.free_direct_buying,
|
||
kill_request.amount, request_kill_house,
|
||
code))
|
||
confirm_price_poultry_request.start()
|
||
kill_request.save()
|
||
return Response({"result": "درخواست شما با موفقیت تایید و ارسال شد."},
|
||
status=status.HTTP_201_CREATED)
|
||
kill_request.save()
|
||
serializer = self.serializer_class(data=request.data)
|
||
if serializer.is_valid():
|
||
serializer.update(instance=kill_request, validated_data=request.data)
|
||
return Response({"result": "با موفقیت ویرایش شد"}, status=status.HTTP_200_OK)
|
||
else:
|
||
return Response({"result": "در ثبت مقادیر مشکلی به وجود آمده است !"}, status=status.HTTP_403_FORBIDDEN)
|
||
|
||
if 'previous_requests' in request.data.keys():
|
||
now = datetime.now().date()
|
||
user = SystemUserProfile.objects.get(user=request.user)
|
||
querysets_list = KillRequest.objects.filter(
|
||
kill_house__system_address__province=user.province,
|
||
trash=False, remain_quantity__gt=0).order_by('-recive_date')
|
||
for queryset in querysets_list:
|
||
if (now - queryset.recive_date.date()).days > 2:
|
||
queryset.remain_quantity = 0
|
||
queryset.save()
|
||
return Response({"result": "با موفقیت ثبت شد"},
|
||
status=status.HTTP_200_OK)
|
||
|
||
province_kill_request_quantity = 0
|
||
kill_request = KillRequest.objects.get(key=request.data["kill_request_key"], trash=False)
|
||
request.data.pop('kill_request_key')
|
||
quantity = int(request.data['quantity'])
|
||
request.data.pop('quantity')
|
||
province_kill_requests = ProvinceKillRequest.objects.filter(kill_request=kill_request, trash=False)
|
||
if province_kill_requests.count() > 0:
|
||
|
||
for province_kill_request in province_kill_requests:
|
||
province_kill_request_quantity += province_kill_request.main_quantity
|
||
if quantity < province_kill_request_quantity:
|
||
return Response({"result": "تعداد وارد شده از تعداد تخصیص داده شده کمتر است "},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
if int(quantity) < kill_request.kill_capacity:
|
||
kill_request.remain_quantity -= kill_request.kill_capacity - int(quantity)
|
||
else:
|
||
kill_request.remain_quantity += int(quantity) - kill_request.kill_capacity
|
||
else:
|
||
kill_request.remain_quantity = int(quantity)
|
||
|
||
kill_request.kill_capacity = int(quantity)
|
||
kill_request.save()
|
||
serializer = self.serializer_class(kill_request)
|
||
serializer.update(instance=kill_request, validated_data=request.data)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillRequestFactorViewSet(viewsets.ModelViewSet):
|
||
queryset = KillRequestFactor.objects.all()
|
||
serializer_class = KillRequestFactorSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
now = datetime.now().date()
|
||
date1 = datetime.strptime(str(request.GET['date1']),
|
||
'%Y-%m-%d').date() if 'date1' in request.GET else now
|
||
date2 = datetime.strptime(str(request.GET['date2']),
|
||
'%Y-%m-%d').date() if 'date2' in request.GET else now
|
||
user_profile = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
kill_house_user = get_object_or_404(KillHouseOperator, user=user_profile)
|
||
kill_house = KillHouse.objects.filter(kill_house_operator=kill_house_user)
|
||
|
||
factor_list = KillRequestFactor.objects.filter(kill_request__kill_house__in=kill_house, trash=False).order_by(
|
||
'id')
|
||
factors = [
|
||
kill_request_factor for kill_request_factor in factor_list
|
||
if date1 <= kill_request_factor.kill_request.recive_date.date() <= date2
|
||
]
|
||
serializer = KillRequestFactorSerializer(factors, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
def update(self, request, pk=None, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
if 'state' in request.data:
|
||
if request.data['state'] == 'cancel':
|
||
factor = KillRequestFactor.objects.get(key=request.data['factor_key'], trash=False)
|
||
kill_request = KillRequest.objects.get(key=factor.kill_request.key)
|
||
kill_request.trash = True
|
||
kill_request.save()
|
||
factor.trash = True
|
||
factor.save()
|
||
return Response({"result": "done!"}, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillRequestFactorPaymentViewSet(viewsets.ModelViewSet):
|
||
queryset = KillRequestFactorPayment.objects.all()
|
||
serializer_class = KillRequestFactorPaymentSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def create(self, request, *args, **kwargs):
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
factor = KillRequestFactor.objects.get(key=request.data['factor_key'], trash=False)
|
||
kill_request = KillRequest.objects.get(key=factor.kill_request.key)
|
||
kill_house = KillHouse.objects.get(key=kill_request.kill_house.key)
|
||
request.data.pop('factor_key')
|
||
image = request.data['image']
|
||
request.data.pop('image')
|
||
serializer = self.serializer_class(data=request.data)
|
||
if serializer.is_valid():
|
||
factor_payment = serializer.create(validated_data=request.data)
|
||
factor_payment.kill_request_factor = factor
|
||
factor_payment.image = send_image_to_server(image)
|
||
factor_payment.remain_amount = float(request.data['amount'])
|
||
factor_payment.state = 'paid'
|
||
factor_payment.save()
|
||
factor.state = 'paid'
|
||
factor.save()
|
||
kill_request.payment_info = {
|
||
"amount": factor_payment.amount,
|
||
"total_amount": factor.amount,
|
||
"image": factor_payment.image,
|
||
"date": str(factor_payment.create_date)
|
||
}
|
||
kill_request.factor_deposit = factor_payment.amount
|
||
kill_request.save()
|
||
kill_house.wallet_amount += factor_payment.amount
|
||
kill_house.save()
|
||
|
||
serializer_request = self.serializer_class(factor_payment)
|
||
return Response(serializer_request.data, status=status.HTTP_201_CREATED)
|
||
return Response(serializer.errors)
|
||
|
||
|
||
def update_province_kill_request():
|
||
wage = ShareOfAllocation.objects.all().last()
|
||
wage = wage.province_union if wage else 0
|
||
for province_kill_request in ProvinceKillRequest.objects.all():
|
||
province_request = ProvinceCheckOperatorRequest.objects.filter(
|
||
key=province_kill_request.province_request.key).last()
|
||
province_kill_request.total_amount = wage * (
|
||
province_kill_request.main_quantity * province_request.poultry_request.Index_weight)
|
||
province_kill_request.save()
|
||
|
||
|
||
from django.db import models, transaction
|
||
from django.db.models import Sum, Count, F
|
||
|
||
|
||
# ... (previous code)
|
||
|
||
class ReportingProvinceKillRequestsWageViewSet(viewsets.ModelViewSet):
|
||
queryset = ProvinceKillRequest.objects.all()
|
||
serializer_class = ProvinceKillRequestSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
province_kill_requests = ProvinceKillRequest.objects.filter(
|
||
trash=False, return_to_province=False, state__in=('accepted', 'pending')
|
||
).annotate(
|
||
total_quantity=Sum('total_killed_quantity'),
|
||
total_weight=Sum('total_killed_weight'),
|
||
total_amount_wage=Sum(
|
||
F('wage') * F('total_killed_weight')),
|
||
total_paid=Count('id', filter=models.Q(wage_pay=True, archive_by_province=False)),
|
||
total_unpaid=Count('id', filter=models.Q(wage_pay=False, archive_by_province=False)),
|
||
total_archive=Count('id', filter=models.Q(wage_pay=False, archive_by_province=True)),
|
||
# total_kill_houses=Count('kill_request__kill_house', distinct=True)
|
||
)
|
||
|
||
total_requests_buyers = province_kill_requests.values('kill_request__kill_house').distinct().count()
|
||
total_requests = province_kill_requests.count()
|
||
total_requests_quantity = province_kill_requests.aggregate(total=Sum('total_quantity'))['total']
|
||
total_requests_weight = province_kill_requests.aggregate(total=Sum('total_weight'))['total']
|
||
total_requests_amount = province_kill_requests.aggregate(total=Sum('total_amount_wage'))['total']
|
||
total_paid_requests = province_kill_requests.aggregate(total=Sum('total_paid'))['total']
|
||
total_paid_requests_quantity = \
|
||
province_kill_requests.filter(wage_pay=True).aggregate(total=Sum('total_quantity'))['total']
|
||
total_paid_requests_weight = province_kill_requests.filter(wage_pay=True).aggregate(total=Sum('total_weight'))[
|
||
'total']
|
||
total_paid_requests_amount = \
|
||
province_kill_requests.filter(wage_pay=True).aggregate(total=Sum('total_amount_wage'))['total']
|
||
total_unpaid_requests = province_kill_requests.aggregate(total=Sum('total_unpaid'))['total']
|
||
total_unpaid_requests_quantity = \
|
||
province_kill_requests.filter(wage_pay=False, archive_by_province=False).aggregate(
|
||
total=Sum('total_quantity'))['total']
|
||
total_unpaid_requests_weight = \
|
||
province_kill_requests.filter(wage_pay=False, archive_by_province=False).aggregate(
|
||
total=Sum('total_weight'))['total']
|
||
total_unpaid_requests_amount = \
|
||
province_kill_requests.filter(wage_pay=False, archive_by_province=False).aggregate(
|
||
total=Sum('total_amount_wage'))['total']
|
||
|
||
total_archive_requests = province_kill_requests.aggregate(total=Sum('total_archive'))['total']
|
||
total_archive_requests_quantity = \
|
||
province_kill_requests.filter(wage_pay=False, archive_by_province=True).aggregate(
|
||
total=Sum('total_quantity'))['total']
|
||
total_archive_requests_weight = \
|
||
province_kill_requests.filter(wage_pay=False, archive_by_province=True).aggregate(
|
||
total=Sum('total_weight'))['total']
|
||
total_archive_requests_amount = \
|
||
province_kill_requests.filter(wage_pay=False, archive_by_province=True).aggregate(
|
||
total=Sum('total_amount_wage'))['total']
|
||
total_free_request = province_kill_requests.filter(
|
||
province_request__poultry_request__free_sale_in_province=True)
|
||
total_free_request_quantity = total_free_request.aggregate(total=Sum('total_quantity'))['total']
|
||
total_free_request_weight = total_free_request.aggregate(total=Sum('total_weight'))['total']
|
||
|
||
total_government_request = province_kill_requests.filter(
|
||
province_request__poultry_request__free_sale_in_province=False)
|
||
total_government_request_quantity = total_government_request.aggregate(total=Sum('total_quantity'))['total']
|
||
total_government_request_weight = total_government_request.aggregate(total=Sum('total_weight'))['total']
|
||
|
||
return Response({
|
||
"total_requests_buyers": total_requests_buyers,
|
||
"total_requests": total_requests,
|
||
"total_requests_quantity": total_requests_quantity,
|
||
"total_requests_weight": total_requests_weight,
|
||
"total_requests_amount": total_requests_amount,
|
||
"total_paid_requests": total_paid_requests,
|
||
"total_paid_requests_quantity": total_paid_requests_quantity if total_paid_requests_quantity != None else 0,
|
||
"total_paid_requests_weight": total_paid_requests_weight if total_paid_requests_weight != None else 0,
|
||
"total_paid_requests_amount": total_paid_requests_amount if total_paid_requests_amount != None else 0,
|
||
"total_unpaid_requests": total_unpaid_requests,
|
||
"total_unpaid_requests_quantity": total_unpaid_requests_quantity,
|
||
"total_unpaid_requests_weight": total_unpaid_requests_weight,
|
||
"total_unpaid_requests_amount": total_unpaid_requests_amount,
|
||
"total_archive_requests": total_archive_requests,
|
||
"total_archive_requests_quantity": total_archive_requests_quantity,
|
||
"total_archive_requests_weight": total_archive_requests_weight,
|
||
"total_archive_requests_amount": total_archive_requests_amount,
|
||
"total_free_request": len(total_free_request),
|
||
"total_free_request_quantity": total_free_request_quantity,
|
||
"total_free_request_weight": total_free_request_weight,
|
||
"total_government_request": len(total_government_request),
|
||
"total_government_request_quantity": total_government_request_quantity,
|
||
"total_government_request_weight": total_government_request_weight,
|
||
|
||
}, status=status.HTTP_200_OK)
|
||
|
||
|
||
def provincearchiveprovincekillrequestforwage(province_kill_request_list, message, role, user_fullname, date):
|
||
province_kill_requests = ProvinceKillRequest.objects.filter(key__in=province_kill_request_list,
|
||
trash=False)
|
||
for province_kill_request in province_kill_requests:
|
||
province_kill_request.archive_by_province = True
|
||
province_kill_request.archive_message = message
|
||
province_kill_request.archiver = {
|
||
"role": role,
|
||
"fullname": user_fullname,
|
||
"date": date,
|
||
}
|
||
province_kill_request.save()
|
||
|
||
|
||
# class ReportingProvinceKillRequestsWageViewSet(viewsets.ModelViewSet):
|
||
# queryset = ProvinceKillRequest.objects.all()
|
||
# serializer_class = ProvinceKillRequestSerializer
|
||
# permission_classes = [TokenHasReadWriteScope]
|
||
#
|
||
# def list(self, request, *args, **kwargs):
|
||
# total_requests_buyers = 0
|
||
# total_requests = 0
|
||
# total_requests_quantity = 0
|
||
# total_requests_weight = 0
|
||
# total_requests_amount = 0
|
||
# total_paid_requests = 0
|
||
# total_paid_requests_quantity = 0
|
||
# total_paid_requests_weight = 0
|
||
# total_paid_requests_amount = 0
|
||
# total_unpaid_requests = 0
|
||
# total_unpaid_requests_quantity = 0
|
||
# total_unpaid_requests_weight = 0
|
||
# total_unpaid_requests_amount = 0
|
||
# province_kill_requests = ProvinceKillRequest.objects.filter(trash=False, state__in=('accepted', 'pending'))
|
||
# for province_kill_request in province_kill_requests:
|
||
# if province_kill_request.wage_pay == True:
|
||
# total_paid_requests +=1
|
||
# total_paid_requests_quantity += province_kill_request.main_quantity
|
||
# total_paid_requests_weight += int(province_kill_request.main_quantity * province_kill_request.province_request.poultry_request.Index_weight)
|
||
# total_paid_requests_amount += int(province_kill_request.wage * (province_kill_request.main_quantity * province_kill_request.province_request.poultry_request.Index_weight))
|
||
# else:
|
||
#
|
||
# total_unpaid_requests +=1
|
||
# total_unpaid_requests_quantity += province_kill_request.main_quantity
|
||
# total_unpaid_requests_weight += int(province_kill_request.main_quantity * province_kill_request.province_request.poultry_request.Index_weight)
|
||
# total_unpaid_requests_amount += int(province_kill_request.wage * (province_kill_request.main_quantity * province_kill_request.province_request.poultry_request.Index_weight))
|
||
#
|
||
# total_requests_buyers = len(province_kill_requests)
|
||
# total_requests = total_paid_requests + total_unpaid_requests
|
||
# total_requests_quantity = total_paid_requests_quantity + total_unpaid_requests_quantity
|
||
# total_requests_weight = total_paid_requests_weight + total_unpaid_requests_weight
|
||
# total_requests_amount = total_paid_requests_amount + total_unpaid_requests_amount
|
||
#
|
||
#
|
||
# return Response({
|
||
#
|
||
# "total_requests_buyers":total_requests_buyers,
|
||
# "total_requests":total_requests,
|
||
# "total_requests_quantity" :total_requests_quantity,
|
||
# "total_requests_weight":total_requests_weight,
|
||
# "total_requests_amount":total_requests_amount,
|
||
# "total_paid_requests":total_paid_requests,
|
||
# "total_paid_requests_quantity":total_paid_requests_quantity,
|
||
# "total_paid_requests_weight":total_paid_requests_weight,
|
||
# "total_paid_requests_amount":total_paid_requests_amount,
|
||
# "total_unpaid_requests":total_unpaid_requests,
|
||
# "total_unpaid_requests_quantity":total_unpaid_requests_quantity,
|
||
# "total_unpaid_requests_weight":total_unpaid_requests_weight,
|
||
# "total_unpaid_requests_amount":total_unpaid_requests_amount,
|
||
# },status=status.HTTP_200_OK
|
||
# )
|
||
|
||
|
||
# def auto_steward_allocation(kill_house_key, quantity, weight, date):
|
||
# kill_house = KillHouse.objects.get(key=kill_house_key, trash=False)
|
||
# stewards = Steward.objects.filter(guilds__steward=True, trash=False).order_by('id')
|
||
# stewards_list = []
|
||
# allocatated_quantity = 0
|
||
# kill_house_total_quantity = 0
|
||
# for steward in stewards:
|
||
# if steward.centers_allocation != None:
|
||
# for center_allocation in steward.centers_allocation:
|
||
# if str(kill_house.key) == center_allocation['value']:
|
||
# kill_house_total_quantity += steward.allocation_limit
|
||
# stewards_list.append(steward)
|
||
# if len(stewards_list) > 0:
|
||
# for steward_list in stewards_list:
|
||
# allocatated_quantity = (steward_list.allocation_limit / kill_house_total_quantity) * quantity
|
||
# auto_allocation = StewardAllocation(
|
||
# kill_house=kill_house,
|
||
# steward=steward_list,
|
||
# number_of_carcasses=allocatated_quantity,
|
||
# real_number_of_carcasses=allocatated_quantity,
|
||
# weight_of_carcasses=int(allocatated_quantity * weight),
|
||
# real_weight_of_carcasses=int(allocatated_quantity * weight),
|
||
# type='auto',
|
||
# date=date
|
||
# )
|
||
# auto_allocation.save()
|
||
class WalletWagePaymentViewSet(viewsets.ModelViewSet):
|
||
queryset = ProvinceKillRequest.objects.all()
|
||
serializer_class = ProvinceKillRequestSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
# def update(self, request, *args, **kwargs):
|
||
# user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
# province_kill_request_keys = []
|
||
# for province_kill_request_key in request.data['province_kill_requests']:
|
||
# province_kill_request_keys.append(province_kill_request_key)
|
||
# province_kill_requests = ProvinceKillRequest.objects.filter(
|
||
# key__in=province_kill_request_keys).order_by('id')
|
||
# kill_house = KillHouse.objects.get(key=province_kill_requests.last().killhouse_user.key, trash=False)
|
||
# now = datetime.now()
|
||
# total_amount = 0
|
||
#
|
||
# for province_kill_request in province_kill_requests:
|
||
# province_kill_request.wage_pay = True
|
||
# province_kill_request.wallet_pay = True
|
||
# province_kill_request.depositor = {
|
||
# "role": request.data['role'],
|
||
# "payer": user.fullname,
|
||
# "date": str(now),
|
||
# "payment_type": 'wallet',
|
||
# "tracking_code": '-',
|
||
# "refId": '-',
|
||
# "orderId": '-',
|
||
# "total_amount": province_kill_request.total_killed_weight * province_kill_request.wage
|
||
# }
|
||
# province_kill_request.save()
|
||
# total_amount += province_kill_request.total_killed_weight * province_kill_request.wage
|
||
# transaction = ExternalTransaction(
|
||
# amount=total_amount,
|
||
# type="withdraw",
|
||
# transaction_type="wallet",
|
||
# status='completed',
|
||
# kill_house_user=kill_house.kill_house_operator.user,
|
||
# creator=user,
|
||
# receiver=user,
|
||
# creator_role='KillHouse',
|
||
# receiver_role='ProvinceOperator',
|
||
# payer=kill_house.kill_house_operator.user.fullname,
|
||
#
|
||
# )
|
||
# transaction.save()
|
||
#
|
||
# return Response({"result": "با موفقیت انجام شد!"}, status=status.HTTP_200_OK)
|
||
|
||
|
||
# ویوست مربوط به تخصیص به کشتارگاه توسط استان
|
||
class ProvinceKillRequestViewSet(viewsets.ModelViewSet):
|
||
queryset = ProvinceKillRequest.objects.all()
|
||
serializer_class = ProvinceKillRequestSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
filterset_class = ProvinceKillRequestNewFilterSet
|
||
|
||
# تابع مربوط به تخصیص به کشتارگاه توسط استان
|
||
def create(self, request, *args, **kwargs):
|
||
wage = 0
|
||
province_check = ProvinceCheckOperatorRequest.objects.get(key=request.data['province_check_request_key'],
|
||
trash=False)
|
||
if province_check.poultry_request.price_confirmation and not province_check.poultry_request.input_price_confirmation_code:
|
||
return Response({"result": "به علت عدم ورود کد احراز مرغدار امکان تخصیص وجود ندارد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
if province_check.poultry_request.freezing == True:
|
||
wage_type = WageType.objects.filter(en_name='province-kill-request-freezing', trash=False).first()
|
||
else:
|
||
|
||
wage_type = WageType.objects.filter(en_name='province-kill-request', trash=False).first()
|
||
if wage_type.status == True:
|
||
wage = wage_type.amount
|
||
time_range = TimeRange.objects.filter(trash=False).first()
|
||
if time_range:
|
||
time = next(
|
||
(t for t in time_range.time_range if
|
||
t.get("name") == "province_kill_request" and t.get("active", False)), None)
|
||
if time:
|
||
start_hour = datetime.strptime(time.get("start", 0), "%H:%M:%S").time()
|
||
end_hour = datetime.strptime(time.get("end", 0), "%H:%M:%S").time()
|
||
current_hour = datetime.now().time().replace(second=0, microsecond=0)
|
||
if not (start_hour < current_hour < end_hour):
|
||
return Response(
|
||
{"result": "لطفا در ساعات مجاز برای ثبت درخواست اقدام نمایید!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
now = datetime.now().date()
|
||
kill_request = KillRequest.objects.get(key=request.data['kill_request_key'], trash=False)
|
||
if OperationLimitation.objects.all().first().province_allocation_limitation == True:
|
||
|
||
if now != kill_request.recive_date.date():
|
||
return Response({"result": "مغایرت در تاریخ اعلام نیاز کشتار گاه و تاریخ تخصیص به کشتارگاه !"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
kill_house = KillHouse.objects.get(id=kill_request.kill_house.id, trash=False)
|
||
poultry_request = PoultryRequest.objects.get(key=province_check.poultry_request.key)
|
||
hatching = PoultryHatching.objects.get(key=poultry_request.hatching.key)
|
||
if hatching.left_over < int(request.data['quantity']):
|
||
return Response({"result": "تعداد تخصیص داده شده کمتر از تعداد موجود در سالن مرغدار است!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
request.data.pop('kill_request_key')
|
||
request.data.pop('province_check_request_key')
|
||
if poultry_request.send_date.year != kill_request.recive_date.year or poultry_request.send_date.month != kill_request.recive_date.month or poultry_request.send_date.day != kill_request.recive_date.day:
|
||
return Response({"result": "تاریخ درخواست کشتارها یکی نیست!"}, status=status.HTTP_403_FORBIDDEN)
|
||
if province_check.quantity == 0:
|
||
return Response("forbidden", status=status.HTTP_403_FORBIDDEN)
|
||
if int(request.data['quantity']) > kill_request.remain_quantity:
|
||
return Response({"result": "تعداد وارد شده از مانده سهمیه بیشتر است !"}, status=status.HTTP_403_FORBIDDEN)
|
||
if kill_house.max_kill_limit and kill_house.total_kill_capacity > 0:
|
||
total_province_kill_requests = ProvinceKillRequest.objects.filter(trash=False, return_to_province=False,
|
||
archive_wage=False,
|
||
state__in=('pending', 'accepted'),
|
||
killhouse_user=kill_house,
|
||
kill_request__recive_date__date=kill_request.recive_date.date())
|
||
total_province_kill_requests_quantity = \
|
||
total_province_kill_requests.aggregate(total=Sum('total_killed_quantity'))['total'] or 0
|
||
|
||
if kill_house.total_kill_capacity < total_province_kill_requests_quantity + int(request.data['quantity']):
|
||
return Response({"result": "تعداد وارد شده از مانده سهمیه کشتار روزانه کشتارگاه بیشتر است !"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
if poultry_request.free_sale_in_province == True:
|
||
|
||
if kill_house.quota:
|
||
kill_house_info = calculate_governmental_quota(kill_house)
|
||
if kill_house_info == 'not_allowed':
|
||
return Response({"result": " امکان خرید آزاد تا تکمیل تعهد دولتی وجود ندارد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
if kill_house.ware_house_remaining_weight_limitation_status:
|
||
if kill_house.total_remain_warehouse_governmental_weight > kill_house.ware_house_remaining_weight_limitation:
|
||
return Response({
|
||
"result": "باقی مانده انبار شما از حداکثر محدودیت وزن باقی مانده انبار بیشتر است !"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
if kill_house.ware_house_remaining_percent_limitation_status:
|
||
if not check_kill_house_remain_limitation_weight(kill_house):
|
||
return Response({
|
||
"result": "باقی مانده انبار شما از حداکثر محدودیت وزن باقی مانده روزانه انبار بیشتر است !"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
province_kills = ProvinceKillRequest.objects.filter(killhouse_user=kill_house,
|
||
province_request__city_request_Poultry__poultry_request_id=province_check.city_request_Poultry.poultry_request.id,
|
||
state__in=('pending', 'accepted'), trash=False)
|
||
if province_kills.count() > 0:
|
||
province = province_kills.last()
|
||
|
||
if province.main_quantity == province.quantity:
|
||
province.total_killed_quantity += int(request.data['quantity'])
|
||
province.total_killed_weight += int(int(request.data['quantity']) * poultry_request.Index_weight)
|
||
province.quantity += int(request.data['quantity'])
|
||
province.main_quantity += int(request.data['quantity'])
|
||
kill_request.remain_quantity = kill_request.remain_quantity - int(request.data['quantity'])
|
||
kill_request.save()
|
||
province.save()
|
||
province_check.quantity -= int(request.data['quantity'])
|
||
province_check.save()
|
||
poultry_request.remain_quantity -= int(request.data['quantity'])
|
||
poultry_request.save()
|
||
if poultry_request.export == True:
|
||
hatching.export_killed_weight += int(int(request.data['quantity']) * poultry_request.Index_weight)
|
||
hatching.export_killed_quantity += int(request.data['quantity'])
|
||
elif poultry_request.free_sale_in_province == True:
|
||
hatching.free_killed_quantity += int(int(request.data['quantity']) * poultry_request.Index_weight)
|
||
hatching.free_quantity += int(request.data['quantity'])
|
||
else:
|
||
hatching.governmental_killed_quantity += int(
|
||
int(request.data['quantity']) * poultry_request.Index_weight)
|
||
|
||
hatching.governmental_quantity += int(request.data['quantity'])
|
||
hatching.save()
|
||
tomorrow = now + timedelta(days=1)
|
||
if not KillHouseWareHouse.objects.filter(kill_house=kill_house, date__date=tomorrow).exists():
|
||
ware_house_date = datetime(year=tomorrow.year, month=tomorrow.month, day=tomorrow.day, hour=1,
|
||
minute=12, second=20)
|
||
kill_house_ware_house = KillHouseWareHouse(
|
||
kill_house=kill_house,
|
||
date=ware_house_date
|
||
)
|
||
kill_house_ware_house.save()
|
||
province.total_wage_amount = province.total_killed_weight * province.wage
|
||
province.save()
|
||
percentages_wage_type = PercentageOfWageType.objects.filter(wage_type=wage_type, percent__gt=0, trash=False)
|
||
|
||
if wage_type and wage_type.status == True and percentages_wage_type:
|
||
for percentage_wage_type in percentages_wage_type:
|
||
if percentage_wage_type.share_type.en_name == 'union':
|
||
province.union_share = int((percentage_wage_type.percent / 100) * province.total_wage_amount)
|
||
province.union_share_percent = percentage_wage_type.percent
|
||
province.save()
|
||
elif percentage_wage_type.share_type.en_name == 'company':
|
||
province.company_share = int((percentage_wage_type.percent / 100) * province.total_wage_amount)
|
||
province.company_share_percent = percentage_wage_type.percent
|
||
province.save()
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'guilds':
|
||
province.guilds_share = int((percentage_wage_type.percent / 100) * province.total_wage_amount)
|
||
province.guilds_share_percent = percentage_wage_type.percent
|
||
province.save()
|
||
elif percentage_wage_type.share_type.en_name == 'city':
|
||
province.city_share = int((percentage_wage_type.percent / 100) * province.total_wage_amount)
|
||
province.city_share_percent = percentage_wage_type.percent
|
||
province.save()
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'wallet':
|
||
province.wallet_share = int((percentage_wage_type.percent / 100) * province.total_wage_amount)
|
||
province.wallet_share_percent = percentage_wage_type.percent
|
||
province.save()
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'other':
|
||
province.other_share = int((percentage_wage_type.percent / 100) * province.total_wage_amount)
|
||
province.other_share_percent = percentage_wage_type.percent
|
||
province.save()
|
||
|
||
else:
|
||
province.other_share = int((percentage_wage_type.percent / 100) * province.total_wage_amount)
|
||
province.other_share_percent = percentage_wage_type.percent
|
||
province.save()
|
||
|
||
return Response({"result": "object create"}, status=status.HTTP_201_CREATED)
|
||
|
||
serializer = self.serializer_class(data=request.data)
|
||
|
||
if serializer.is_valid():
|
||
province_kill_request_list = []
|
||
if hatching.left_over < int(request.data['quantity']):
|
||
return Response({"result": "تعداد تخصیص داده شده بیشتر از تعداد موجود در سالن مرغدار است!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
province_kill_request = serializer.create(validated_data=request.data)
|
||
province_kill_request.kill_request = kill_request
|
||
province_kill_request.province_request = province_check
|
||
province_kill_request.wage = wage
|
||
province_kill_request.state = "pending"
|
||
if province_check.quantity < int(request.data['quantity']):
|
||
province_kill_request.quantity = province_check.quantity
|
||
province_kill_request.killhouse_user = kill_house
|
||
province_kill_request.main_quantity = int(request.data['quantity'])
|
||
province_kill_request.total_killed_quantity = province_kill_request.main_quantity
|
||
province_kill_request.total_killed_weight = int(
|
||
province_kill_request.main_quantity * poultry_request.Index_weight)
|
||
province_kill_request.total_wage_amount = province_kill_request.total_killed_weight * province_kill_request.wage
|
||
percentages_wage_type = PercentageOfWageType.objects.filter(wage_type=wage_type, percent__gt=0, trash=False)
|
||
if wage_type and wage_type.status == True and percentages_wage_type:
|
||
for percentage_wage_type in percentages_wage_type:
|
||
if percentage_wage_type.share_type.en_name == 'union':
|
||
province_kill_request.union_share = int(
|
||
(percentage_wage_type.percent / 100) * province_kill_request.total_wage_amount)
|
||
province_kill_request.union_share_percent = percentage_wage_type.percent
|
||
elif percentage_wage_type.share_type.en_name == 'company':
|
||
province_kill_request.company_share = int(
|
||
(percentage_wage_type.percent / 100) * province_kill_request.total_wage_amount)
|
||
province_kill_request.company_share_percent = percentage_wage_type.percent
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'guilds':
|
||
province_kill_request.guilds_share = int(
|
||
(percentage_wage_type.percent / 100) * province_kill_request.total_wage_amount)
|
||
province_kill_request.guilds_share_percent = percentage_wage_type.percent
|
||
elif percentage_wage_type.share_type.en_name == 'city':
|
||
province_kill_request.city_share = int(
|
||
(percentage_wage_type.percent / 100) * province_kill_request.total_wage_amount)
|
||
province_kill_request.city_share_percent = percentage_wage_type.percent
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'other':
|
||
province_kill_request.other_share = int(
|
||
(percentage_wage_type.percent / 100) * province_kill_request.total_wage_amount)
|
||
province_kill_request.other_share_percent = percentage_wage_type.percent
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'wallet':
|
||
province_kill_request.wallet_share = int(
|
||
(percentage_wage_type.percent / 100) * province_kill_request.total_wage_amount)
|
||
province_kill_request.wallet_share_percent = percentage_wage_type.percent
|
||
|
||
else:
|
||
province_kill_request.other_share = int(
|
||
(percentage_wage_type.percent / 100) * province_kill_request.total_wage_amount)
|
||
province_kill_request.other_share_percent = percentage_wage_type.percent
|
||
province_kill_request.save()
|
||
|
||
province_kill_request.save()
|
||
poultry_request.remain_quantity -= province_kill_request.main_quantity
|
||
poultry_request.save()
|
||
|
||
province_check.quantity = province_check.quantity - int(int(request.data['quantity']))
|
||
if province_check.quantity < 0 or province_check.quantity == 0:
|
||
province_check.quantity = 0
|
||
province_check.province_show_kill_house = 'accepted'
|
||
province_check.save()
|
||
kill_request.remain_quantity -= province_kill_request.main_quantity
|
||
kill_request.save()
|
||
kill_house_request_serializer = self.serializer_class(province_kill_request)
|
||
dict1 = {
|
||
"kill_house_req_key": str(province_kill_request.key),
|
||
"kill_req_key": province_kill_request.kill_request.key,
|
||
"province_kill_request_state": province_kill_request.state,
|
||
"kill_house_name": province_kill_request.kill_request.kill_house.name,
|
||
"kill_house_user_name": province_kill_request.kill_request.kill_house.kill_house_operator.user.fullname,
|
||
"kill_house_user_city": province_kill_request.kill_request.kill_house.kill_house_operator.address.city.name,
|
||
"kill_house_mobile": province_kill_request.kill_request.kill_house.kill_house_operator.user.mobile,
|
||
"quantity": province_kill_request.quantity,
|
||
"fee": province_kill_request.fee,
|
||
"time": province_kill_request.kill_request.recive_time,
|
||
"date": province_kill_request.kill_request.recive_date,
|
||
}
|
||
|
||
factor = KillRequestFactor.objects.filter(kill_request=kill_request)
|
||
if factor.count() > 0:
|
||
factor = factor.last()
|
||
if KillRequestFactorPayment.objects.filter(kill_request_factor=factor).exists():
|
||
factor.state = 'paid'
|
||
else:
|
||
factor.state = 'unpaid'
|
||
factor.save()
|
||
province_kill_request_list.append(province_kill_request.key)
|
||
|
||
if AutoAcceptProvinceKillRequest.objects.filter(allow=True).exists():
|
||
kill_house_check = KillHouseCheckRequest(
|
||
province_kill_request=province_kill_request,
|
||
role="ProvinceOperator",
|
||
state="accepted"
|
||
|
||
)
|
||
province_kill_request.state = 'accepted'
|
||
kill_house_check.save()
|
||
province_kill_request.save()
|
||
if poultry_request.export == True:
|
||
hatching.export_killed_weight += int(int(request.data['quantity']) * poultry_request.Index_weight)
|
||
hatching.export_killed_quantity += int(request.data['quantity'])
|
||
elif poultry_request.free_sale_in_province == True:
|
||
hatching.free_killed_quantity += int(int(request.data['quantity']) * poultry_request.Index_weight)
|
||
hatching.free_quantity += int(request.data['quantity'])
|
||
else:
|
||
hatching.governmental_killed_quantity += int(
|
||
int(request.data['quantity']) * poultry_request.Index_weight)
|
||
|
||
hatching.governmental_quantity += int(request.data['quantity'])
|
||
hatching.save()
|
||
vet_farm = VetFarm.objects.filter(trash=False, poultry=hatching.poultry).first()
|
||
if SmsLicense.objects.filter(province_kill_request=True).exists():
|
||
kill_house_name = kill_house.name
|
||
kill_house_mobile = kill_house.kill_house_operator.user.mobile
|
||
kill_house_second_mobile = kill_house.alternate_number
|
||
quantity = province_kill_request.quantity
|
||
sale_in_province = province_check.poultry_request.free_sale_in_province
|
||
amount = province_check.poultry_request.amount
|
||
chicken_breed = province_check.poultry_request.chicken_breed
|
||
poultry_name = province_check.poultry_request.poultry.unit_name
|
||
poultry_mobile = province_check.poultry_request.poultry.user.mobile
|
||
date_str = str(province_check.poultry_request.send_date)
|
||
send_date = datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S').date()
|
||
send_date = jdatetime.datetime.fromgregorian(year=send_date.year, month=send_date.month,
|
||
day=send_date.day).strftime('%Y-%m-%d')
|
||
date_list = reversed(send_date.split('-'))
|
||
separate = "-"
|
||
send_date = separate.join(date_list)
|
||
province = province_check.poultry_request.poultry.address.province.name
|
||
city = province_check.poultry_request.poultry.address.city.name
|
||
province_kill_request_to_kill_house_sms(kill_house_mobile, quantity, chicken_breed, send_date,
|
||
poultry_name,
|
||
poultry_mobile, province, city, sale_in_province, amount,
|
||
kill_house_name
|
||
)
|
||
if kill_house_second_mobile != None:
|
||
province_kill_request_to_kill_house_sms_threading = threading.Thread(
|
||
target=province_kill_request_to_kill_house_sms,
|
||
args=(
|
||
kill_house_second_mobile, quantity, chicken_breed, send_date,
|
||
poultry_name,
|
||
poultry_mobile, province, city, sale_in_province, amount,
|
||
kill_house_name
|
||
))
|
||
province_kill_request_to_kill_house_sms_threading.start()
|
||
if not KillHouseWareHouse.objects.filter(kill_house=kill_house, date__date=now).exists():
|
||
ware_house_date = datetime(year=now.year, month=now.month, day=now.day, hour=1, minute=12, second=20)
|
||
kill_house_ware_house = KillHouseWareHouse(
|
||
kill_house=kill_house,
|
||
date=ware_house_date
|
||
)
|
||
kill_house_ware_house.save()
|
||
if base_url_sms == 'ha':
|
||
poultry_name = province_kill_request.province_request.poultry_request.poultry.unit_name
|
||
poultry_mobile = province_kill_request.province_request.poultry_request.poultry.user.mobile
|
||
quantity = province_kill_request.main_quantity
|
||
Index_weight = province_kill_request.province_request.poultry_request.Index_weight
|
||
kill_house_name = province_kill_request.killhouse_user.name
|
||
kill_house_mobile = province_kill_request.killhouse_user.kill_house_operator.user.mobile
|
||
date_str = str(
|
||
province_kill_request.province_request.poultry_request.send_date)
|
||
send_date = datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S').date()
|
||
send_date = jdatetime.datetime.fromgregorian(year=send_date.year, month=send_date.month,
|
||
day=send_date.day).strftime('%Y-%m-%d')
|
||
date_list = reversed(send_date.split('-'))
|
||
separate = "-"
|
||
send_date = separate.join(date_list)
|
||
# city = province_kill_request.province_request.poultry_request.poultry.address.city.name
|
||
# vet_farm = VetFarm.objects.filter(
|
||
# poultry=province_kill_request.province_request.poultry_request.poultry).first()
|
||
# sms_allocation_for_vet_farm(poultry_name, poultry_mobile,
|
||
# quantity, Index_weight, kill_house_name, kill_house_mobile, city, send_date,
|
||
# vet_farm.vet.user.mobile)
|
||
create_update_chicken_commission_prices()
|
||
bot_eitaa_for_each_province_kill_request(province_kill_request, vet_farm)
|
||
return Response(dict1, status=status.HTTP_201_CREATED)
|
||
return Response(serializer.errors, status=status.HTTP_403_FORBIDDEN)
|
||
|
||
# تابع مربوط به نمایش تخصیصات به کشتارگاها توسط استان
|
||
def list(self, request, *args, **kwargs):
|
||
now = datetime.now().date()
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
# refresh(request.user.id)
|
||
info_dict_list = []
|
||
exclusive_killer = False
|
||
info_list = []
|
||
province_kill_reqs = []
|
||
|
||
if 'role' in request.GET:
|
||
if request.GET['role'] == 'KillHouse':
|
||
date1 = datetime.strptime(str(request.GET['date1']),
|
||
'%Y-%m-%d').date() if 'date1' in request.GET else now
|
||
date2 = datetime.strptime(str(request.GET['date2']),
|
||
'%Y-%m-%d').date() if 'date2' in request.GET else now
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user,
|
||
trash=False)
|
||
|
||
if 'car' in request.GET:
|
||
if KillHousePercentage.objects.filter(kill_house_for_killer__in=kill_house,
|
||
kill_house__type='exclusive').exists():
|
||
exclusive_killer = True
|
||
province_kill_reqs = ProvinceKillRequest.objects.filter(
|
||
Q(killhouse_user__in=kill_house) | Q(
|
||
kill_request__slaughter_house__in=kill_house),
|
||
province_request__poultry_request__send_date__date__gte=date1,
|
||
province_request__poultry_request__send_date__date__lte=date2,
|
||
state='accepted',
|
||
return_to_province=False,
|
||
province_request__city_request_Poultry__poultry_request__final_state='pending',
|
||
trash=False, quantity__gt=0).order_by(
|
||
'province_request__city_request_Poultry__poultry_request__send_date')
|
||
# province_kill_reqs = [
|
||
# province_request for province_request in province_kill_req_lists
|
||
# if date1 <= province_request.province_request.poultry_request.send_date.date() <= date2
|
||
# ]
|
||
elif 'id' in request.GET:
|
||
poultry_request = PoultryRequest.objects.get(id=int(request.GET['id']))
|
||
province_kill_reqs = ProvinceKillRequest.objects.filter(state='accepted',
|
||
killhouse_user__in=kill_house,
|
||
province_request__city_request_Poultry__poultry_request=poultry_request,
|
||
province_request__city_request_Poultry__poultry_request__final_state='pending',
|
||
trash=False).order_by(
|
||
'province_request__city_request_Poultry__poultry_request__send_date')
|
||
elif 'allocations' in request.GET:
|
||
if 'date1' in request.GET and 'date2' in request.GET:
|
||
trash = True if 'deleted_object' in request.GET else False
|
||
province_kill_requests = ProvinceKillRequest.objects.filter(
|
||
Q(killhouse_user__in=kill_house) | Q(
|
||
kill_request__slaughter_house__in=kill_house),
|
||
trash=trash,
|
||
delete_message__isnull=False if trash else True,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
temporary_trash=False, temporary_deleted=False
|
||
).select_related(
|
||
'province_request__poultry_request__poultry',
|
||
'province_request__city_request_Poultry__poultry_request__poultry__user',
|
||
'province_request__city_request_Poultry__poultry_request__poultry__user__city',
|
||
'kill_request__kill_house',
|
||
'kill_request__kill_house__kill_house_operator__user',
|
||
'kill_request__kill_house__system_address__city'
|
||
).values(
|
||
"province_request__poultry_request__order_code",
|
||
"province_request__poultry_request__amount",
|
||
"province_request__poultry_request__financial_operation",
|
||
"province_request__poultry_request__Index_weight",
|
||
"province_request__poultry_request__send_date",
|
||
"province_request__poultry_request__freezing",
|
||
"province_request__poultry_request__export",
|
||
"province_request__poultry_request__poultry__unit_name",
|
||
"province_request__poultry_request__poultry__user__fullname",
|
||
"province_request__city_request_Poultry__poultry_request__poultry__user__mobile",
|
||
"province_request__city_request_Poultry__poultry_request__poultry__user__city__name",
|
||
"province_request__poultry_request__quantity",
|
||
"kill_request__market",
|
||
"kill_request__kill_house__name",
|
||
"kill_request__kill_house__kill_house_operator__user__mobile",
|
||
"kill_request__kill_house__system_address__city__name",
|
||
"create_date",
|
||
"main_quantity",
|
||
"quantity",
|
||
"return_to_province",
|
||
"returner",
|
||
"key",
|
||
"state",
|
||
"kill_house_price",
|
||
"province_request__poultry_request__union",
|
||
"province_request__poultry_request__direct_buying",
|
||
"province_request__poultry_request__free_sale_in_province",
|
||
# "allocated_car_state"
|
||
).order_by('province_request__poultry_request__send_date')
|
||
value = request.GET.get('value')
|
||
search = request.GET.get('search')
|
||
if value and search == 'filter':
|
||
if value != 'undefined' and value.strip():
|
||
province_kill_requests = province_kill_requests.filter(
|
||
build_query(self.filterset_class, value)
|
||
)
|
||
province_kill_reqs_list_final_state = []
|
||
for request_data in province_kill_requests:
|
||
allocated_car_state = True if request_data.get('main_quantity') != request_data.get(
|
||
'quantity') else False
|
||
|
||
internal_dict = {
|
||
"order_code": request_data.get('province_request__poultry_request__order_code'),
|
||
"freezing": request_data.get('province_request__poultry_request__freezing'),
|
||
"export": request_data.get('province_request__poultry_request__export'),
|
||
"amount": request_data.get('province_request__poultry_request__amount'),
|
||
"financial_operation": request_data.get(
|
||
'province_request__poultry_request__financial_operation'),
|
||
"index_weight": request_data.get('province_request__poultry_request__Index_weight'),
|
||
"total_weight": request_data.get('main_quantity') * request_data.get(
|
||
'province_request__poultry_request__Index_weight'),
|
||
"send_date": request_data.get('province_request__poultry_request__send_date'),
|
||
"poultry_unit_name": request_data.get(
|
||
'province_request__poultry_request__poultry__unit_name'),
|
||
"poultry_full_name": request_data.get(
|
||
'province_request__poultry_request__poultry__user__fullname'),
|
||
"poultry_mobile": request_data.get(
|
||
'province_request__city_request_Poultry__poultry_request__poultry__user__mobile'),
|
||
"poultry_city": request_data.get(
|
||
'province_request__city_request_Poultry__poultry_request__poultry__user__city__name'),
|
||
"poultry_quantity": request_data.get('province_request__poultry_request__quantity'),
|
||
"kill_house_name": request_data.get('kill_request__kill_house__name'),
|
||
"market": request_data.get('kill_request__market'),
|
||
"kill_house_mobile": request_data.get(
|
||
'kill_request__kill_house__kill_house_operator__user__mobile'),
|
||
"kill_house_city": request_data.get(
|
||
'kill_request__kill_house__system_address__city__name'),
|
||
"date_of_allocate": request_data.get('create_date'),
|
||
"allocated_quantity": request_data.get('main_quantity'),
|
||
"return_to_province": request_data.get('return_to_province'),
|
||
"returner": request_data.get('returner'),
|
||
"allocated_remain_quantity": request_data.get('quantity') if request_data.get(
|
||
'return_to_province') == False else 0,
|
||
"province_kill_request_key": request_data.get('key'),
|
||
"allocated_state": request_data.get('state'),
|
||
"union": request_data.get('province_request__poultry_request__union'),
|
||
"direct_buying": request_data.get(
|
||
'province_request__poultry_request__direct_buying'),
|
||
"allocated_car_state": allocated_car_state,
|
||
"free_sale_in_province": request_data.get(
|
||
'province_request__poultry_request__free_sale_in_province'),
|
||
"kill_house_price": request_data.get('kill_house_price')
|
||
}
|
||
|
||
province_kill_reqs_list_final_state.append(internal_dict)
|
||
return Response(province_kill_reqs_list_final_state, status=status.HTTP_200_OK)
|
||
elif 'allocated_car_state' in request.GET:
|
||
if 'date1' in request.GET and 'date2' in request.GET:
|
||
trash = True if 'deleted_object' in request.GET else False
|
||
province_kill_requests = ProvinceKillRequest.objects.filter(
|
||
Q(killhouse_user__in=kill_house) | Q(
|
||
kill_request__slaughter_house__in=kill_house),
|
||
trash=trash,
|
||
delete_message__isnull=False if trash else True,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
temporary_trash=False, temporary_deleted=False, first_car_allocated_quantity=0
|
||
).select_related(
|
||
'province_request__poultry_request__poultry',
|
||
'province_request__city_request_Poultry__poultry_request__poultry__user',
|
||
'province_request__city_request_Poultry__poultry_request__poultry__user__city',
|
||
'kill_request__kill_house',
|
||
'kill_request__kill_house__kill_house_operator__user',
|
||
'kill_request__kill_house__system_address__city'
|
||
).values(
|
||
"province_request__poultry_request__order_code",
|
||
"province_request__poultry_request__amount",
|
||
"province_request__poultry_request__financial_operation",
|
||
"province_request__poultry_request__Index_weight",
|
||
"province_request__poultry_request__send_date",
|
||
"province_request__poultry_request__freezing",
|
||
"province_request__poultry_request__export",
|
||
"province_request__poultry_request__poultry__unit_name",
|
||
"province_request__poultry_request__poultry__user__fullname",
|
||
"province_request__city_request_Poultry__poultry_request__poultry__user__mobile",
|
||
"province_request__city_request_Poultry__poultry_request__poultry__user__city__name",
|
||
"province_request__poultry_request__quantity",
|
||
"kill_request__kill_house__name",
|
||
"kill_request__market",
|
||
"kill_request__kill_house__kill_house_operator__user__mobile",
|
||
"kill_request__kill_house__system_address__city__name",
|
||
"create_date",
|
||
"main_quantity",
|
||
"quantity",
|
||
"return_to_province",
|
||
"returner",
|
||
"key",
|
||
"state",
|
||
"kill_house_price",
|
||
"province_request__poultry_request__union",
|
||
"province_request__poultry_request__direct_buying",
|
||
"province_request__poultry_request__free_sale_in_province",
|
||
# "allocated_car_state"
|
||
).order_by('province_request__poultry_request__send_date')
|
||
value = request.GET.get('value')
|
||
search = request.GET.get('search')
|
||
if value and search == 'filter':
|
||
if value != 'undefined' and value.strip():
|
||
province_kill_requests = province_kill_requests.filter(
|
||
build_query(self.filterset_class, value)
|
||
)
|
||
province_kill_reqs_list_final_state = []
|
||
for request_data in province_kill_requests:
|
||
allocated_car_state = True if request_data.get('main_quantity') != request_data.get(
|
||
'quantity') else False
|
||
|
||
internal_dict = {
|
||
"order_code": request_data.get('province_request__poultry_request__order_code'),
|
||
"freezing": request_data.get('province_request__poultry_request__freezing'),
|
||
"export": request_data.get('province_request__poultry_request__export'),
|
||
"amount": request_data.get('province_request__poultry_request__amount'),
|
||
"financial_operation": request_data.get(
|
||
'province_request__poultry_request__financial_operation'),
|
||
"index_weight": request_data.get('province_request__poultry_request__Index_weight'),
|
||
"total_weight": request_data.get('main_quantity') * request_data.get(
|
||
'province_request__poultry_request__Index_weight'),
|
||
"send_date": request_data.get('province_request__poultry_request__send_date'),
|
||
"poultry_unit_name": request_data.get(
|
||
'province_request__poultry_request__poultry__unit_name'),
|
||
"poultry_full_name": request_data.get(
|
||
'province_request__poultry_request__poultry__user__fullname'),
|
||
"poultry_mobile": request_data.get(
|
||
'province_request__city_request_Poultry__poultry_request__poultry__user__mobile'),
|
||
"poultry_city": request_data.get(
|
||
'province_request__city_request_Poultry__poultry_request__poultry__user__city__name'),
|
||
"poultry_quantity": request_data.get('province_request__poultry_request__quantity'),
|
||
"kill_house_name": request_data.get('kill_request__kill_house__name'),
|
||
"market": request_data.get('kill_request__market'),
|
||
"kill_house_mobile": request_data.get(
|
||
'kill_request__kill_house__kill_house_operator__user__mobile'),
|
||
"kill_house_city": request_data.get(
|
||
'kill_request__kill_house__system_address__city__name'),
|
||
"date_of_allocate": request_data.get('create_date'),
|
||
"allocated_quantity": request_data.get('main_quantity'),
|
||
"return_to_province": request_data.get('return_to_province'),
|
||
"returner": request_data.get('returner'),
|
||
"allocated_remain_quantity": request_data.get('quantity') if request_data.get(
|
||
'return_to_province') == False else 0,
|
||
"province_kill_request_key": request_data.get('key'),
|
||
"allocated_state": request_data.get('state'),
|
||
"union": request_data.get('province_request__poultry_request__union'),
|
||
"direct_buying": request_data.get(
|
||
'province_request__poultry_request__direct_buying'),
|
||
"allocated_car_state": allocated_car_state,
|
||
"free_sale_in_province": request_data.get(
|
||
'province_request__poultry_request__free_sale_in_province'),
|
||
"kill_house_price": request_data.get('kill_house_price')
|
||
}
|
||
|
||
province_kill_reqs_list_final_state.append(internal_dict)
|
||
return Response(province_kill_reqs_list_final_state, status=status.HTTP_200_OK)
|
||
else:
|
||
province_kill_reqs = ProvinceKillRequest.objects.filter(
|
||
province_request__poultry_request__send_date__date__gte=date1,
|
||
province_request__poultry_request__send_date__date__lte=date2, killhouse_user__in=kill_house,
|
||
province_request__city_request_Poultry__poultry_request__final_state='pending',
|
||
trash=False,
|
||
state='pending',
|
||
dont_show_kill_house=False).select_related('province_request__poultry_request').order_by(
|
||
'province_request__city_request_Poultry__poultry_request__send_date')
|
||
|
||
# province_kill_reqs = [
|
||
# province_request for province_request in province_kill_req_list
|
||
# if date1 <= province_request.province_request.poultry_request.send_date.date() <= date2
|
||
# ]
|
||
elif request.GET['role'] in ['ProvinceOperator', 'SuperAdmin', 'AdminX', 'Supporter']:
|
||
|
||
if 'id' in request.GET:
|
||
poultry_request = PoultryRequest.objects.get(id=int(request.GET['id']))
|
||
province_kill_reqs = ProvinceKillRequest.objects.filter(state='accepted',
|
||
province_request__city_request_Poultry__poultry_request=poultry_request,
|
||
trash=False).order_by(
|
||
'province_request__city_request_Poultry__poultry_request__send_date')
|
||
elif 'allocations' in request.GET:
|
||
if 'date1' in request.GET and 'date2' in request.GET:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
trash = True if 'deleted_object' in request.GET else False
|
||
province_kill_requests = ProvinceKillRequest.objects.filter(
|
||
province_request__city_request_Poultry__poultry_request__poultry__user__province=user.province,
|
||
trash=trash,
|
||
delete_message__isnull=False if trash else True,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
temporary_trash=False, temporary_deleted=False
|
||
).select_related(
|
||
'province_request__poultry_request__poultry',
|
||
'province_request__city_request_Poultry__poultry_request__poultry__user',
|
||
'province_request__city_request_Poultry__poultry_request__poultry__user__city',
|
||
'kill_request__kill_house',
|
||
'kill_request__kill_house__kill_house_operator__user',
|
||
'kill_request__kill_house__system_address__city'
|
||
).values(
|
||
"province_request__poultry_request__order_code",
|
||
"province_request__poultry_request__amount",
|
||
"province_request__poultry_request__financial_operation",
|
||
"province_request__poultry_request__Index_weight",
|
||
"province_request__poultry_request__send_date",
|
||
"province_request__poultry_request__freezing",
|
||
"province_request__poultry_request__export",
|
||
"province_request__poultry_request__poultry__unit_name",
|
||
"province_request__poultry_request__poultry__user__fullname",
|
||
"province_request__city_request_Poultry__poultry_request__poultry__user__mobile",
|
||
"province_request__city_request_Poultry__poultry_request__poultry__user__city__name",
|
||
"province_request__poultry_request__quantity",
|
||
"kill_request__kill_house__name",
|
||
"kill_request__market",
|
||
"kill_request__kill_house__kill_house_operator__user__mobile",
|
||
"kill_request__kill_house__system_address__city__name",
|
||
"create_date",
|
||
"main_quantity",
|
||
"quantity",
|
||
"return_to_province",
|
||
"returner",
|
||
"key",
|
||
"state",
|
||
"kill_house_price",
|
||
"province_request__poultry_request__union",
|
||
"province_request__poultry_request__direct_buying",
|
||
"province_request__poultry_request__free_sale_in_province",
|
||
# "allocated_car_state"
|
||
).order_by('province_request__poultry_request__send_date')
|
||
value = request.GET.get('value')
|
||
search = request.GET.get('filter')
|
||
if value and search == 'search':
|
||
if value != 'undefined' and value.strip():
|
||
province_kill_requests = province_kill_requests.filter(
|
||
build_query(self.filterset_class, value)
|
||
)
|
||
province_kill_reqs_list_final_state = []
|
||
for request_data in province_kill_requests:
|
||
allocated_car_state = True if request_data.get('main_quantity') != request_data.get(
|
||
'quantity') else False
|
||
|
||
internal_dict = {
|
||
"order_code": request_data.get('province_request__poultry_request__order_code'),
|
||
"freezing": request_data.get('province_request__poultry_request__freezing'),
|
||
"export": request_data.get('province_request__poultry_request__export'),
|
||
"amount": request_data.get('province_request__poultry_request__amount'),
|
||
"financial_operation": request_data.get(
|
||
'province_request__poultry_request__financial_operation'),
|
||
"index_weight": request_data.get('province_request__poultry_request__Index_weight'),
|
||
"total_weight": request_data.get('main_quantity') * request_data.get(
|
||
'province_request__poultry_request__Index_weight'),
|
||
"send_date": request_data.get('province_request__poultry_request__send_date'),
|
||
"poultry_unit_name": request_data.get(
|
||
'province_request__poultry_request__poultry__unit_name'),
|
||
"poultry_full_name": request_data.get(
|
||
'province_request__poultry_request__poultry__user__fullname'),
|
||
"poultry_mobile": request_data.get(
|
||
'province_request__city_request_Poultry__poultry_request__poultry__user__mobile'),
|
||
"poultry_city": request_data.get(
|
||
'province_request__city_request_Poultry__poultry_request__poultry__user__city__name'),
|
||
"poultry_quantity": request_data.get('province_request__poultry_request__quantity'),
|
||
"kill_house_name": request_data.get('kill_request__kill_house__name'),
|
||
"market": request_data.get('kill_request__market'),
|
||
"kill_house_mobile": request_data.get(
|
||
'kill_request__kill_house__kill_house_operator__user__mobile'),
|
||
"kill_house_city": request_data.get(
|
||
'kill_request__kill_house__system_address__city__name'),
|
||
"date_of_allocate": request_data.get('create_date'),
|
||
"allocated_quantity": request_data.get('main_quantity'),
|
||
"return_to_province": request_data.get('return_to_province'),
|
||
"returner": request_data.get('returner'),
|
||
"allocated_remain_quantity": request_data.get('quantity') if request_data.get(
|
||
'return_to_province') == False else 0,
|
||
"province_kill_request_key": request_data.get('key'),
|
||
"allocated_state": request_data.get('state'),
|
||
"union": request_data.get('province_request__poultry_request__union'),
|
||
"direct_buying": request_data.get(
|
||
'province_request__poultry_request__direct_buying'),
|
||
"allocated_car_state": allocated_car_state,
|
||
"free_sale_in_province": request_data.get(
|
||
'province_request__poultry_request__free_sale_in_province'),
|
||
"kill_house_price": request_data.get('kill_house_price')
|
||
}
|
||
|
||
province_kill_reqs_list_final_state.append(internal_dict)
|
||
return Response(province_kill_reqs_list_final_state, status=status.HTTP_200_OK)
|
||
elif 'allocated_car_state' in request.GET:
|
||
if 'date1' in request.GET and 'date2' in request.GET:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
trash = True if 'deleted_object' in request.GET else False
|
||
province_kill_requests = ProvinceKillRequest.objects.filter(
|
||
province_request__city_request_Poultry__poultry_request__poultry__user__province=user.province,
|
||
trash=trash,
|
||
delete_message__isnull=False if trash else True,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
temporary_trash=False, temporary_deleted=False, first_car_allocated_quantity=0
|
||
).select_related(
|
||
'province_request__poultry_request__poultry',
|
||
'province_request__city_request_Poultry__poultry_request__poultry__user',
|
||
'province_request__city_request_Poultry__poultry_request__poultry__user__city',
|
||
'kill_request__kill_house',
|
||
'kill_request__kill_house__kill_house_operator__user',
|
||
'kill_request__kill_house__system_address__city'
|
||
).values(
|
||
"province_request__poultry_request__order_code",
|
||
"province_request__poultry_request__amount",
|
||
"province_request__poultry_request__financial_operation",
|
||
"province_request__poultry_request__Index_weight",
|
||
"province_request__poultry_request__send_date",
|
||
"province_request__poultry_request__freezing",
|
||
"province_request__poultry_request__export",
|
||
"province_request__poultry_request__poultry__unit_name",
|
||
"province_request__poultry_request__poultry__user__fullname",
|
||
"province_request__city_request_Poultry__poultry_request__poultry__user__mobile",
|
||
"province_request__city_request_Poultry__poultry_request__poultry__user__city__name",
|
||
"province_request__poultry_request__quantity",
|
||
"kill_request__kill_house__name",
|
||
"kill_request__market",
|
||
"kill_request__kill_house__kill_house_operator__user__mobile",
|
||
"kill_request__kill_house__system_address__city__name",
|
||
"create_date",
|
||
"main_quantity",
|
||
"quantity",
|
||
"return_to_province",
|
||
"returner",
|
||
"key",
|
||
"state",
|
||
"kill_house_price",
|
||
"province_request__poultry_request__union",
|
||
"province_request__poultry_request__direct_buying",
|
||
"province_request__poultry_request__free_sale_in_province",
|
||
# "allocated_car_state"
|
||
).order_by('province_request__poultry_request__send_date')
|
||
value = request.GET.get('value')
|
||
search = request.GET.get('filter')
|
||
if value and search == 'search':
|
||
if value != 'undefined' and value.strip():
|
||
province_kill_requests = province_kill_requests.filter(
|
||
build_query(self.filterset_class, value)
|
||
)
|
||
province_kill_reqs_list_final_state = []
|
||
for request_data in province_kill_requests:
|
||
allocated_car_state = True if request_data.get('main_quantity') != request_data.get(
|
||
'quantity') else False
|
||
|
||
internal_dict = {
|
||
"order_code": request_data.get('province_request__poultry_request__order_code'),
|
||
"freezing": request_data.get('province_request__poultry_request__freezing'),
|
||
"export": request_data.get('province_request__poultry_request__export'),
|
||
"amount": request_data.get('province_request__poultry_request__amount'),
|
||
"financial_operation": request_data.get(
|
||
'province_request__poultry_request__financial_operation'),
|
||
"index_weight": request_data.get('province_request__poultry_request__Index_weight'),
|
||
"total_weight": request_data.get('main_quantity') * request_data.get(
|
||
'province_request__poultry_request__Index_weight'),
|
||
"send_date": request_data.get('province_request__poultry_request__send_date'),
|
||
"poultry_unit_name": request_data.get(
|
||
'province_request__poultry_request__poultry__unit_name'),
|
||
"poultry_full_name": request_data.get(
|
||
'province_request__poultry_request__poultry__user__fullname'),
|
||
"poultry_mobile": request_data.get(
|
||
'province_request__city_request_Poultry__poultry_request__poultry__user__mobile'),
|
||
"poultry_city": request_data.get(
|
||
'province_request__city_request_Poultry__poultry_request__poultry__user__city__name'),
|
||
"poultry_quantity": request_data.get('province_request__poultry_request__quantity'),
|
||
"kill_house_name": request_data.get('kill_request__kill_house__name'),
|
||
"market": request_data.get('kill_request__market'),
|
||
"kill_house_mobile": request_data.get(
|
||
'kill_request__kill_house__kill_house_operator__user__mobile'),
|
||
"kill_house_city": request_data.get(
|
||
'kill_request__kill_house__system_address__city__name'),
|
||
"date_of_allocate": request_data.get('create_date'),
|
||
"allocated_quantity": request_data.get('main_quantity'),
|
||
"return_to_province": request_data.get('return_to_province'),
|
||
"returner": request_data.get('returner'),
|
||
"allocated_remain_quantity": request_data.get('quantity') if request_data.get(
|
||
'return_to_province') == False else 0,
|
||
"province_kill_request_key": request_data.get('key'),
|
||
"allocated_state": request_data.get('state'),
|
||
"union": request_data.get('province_request__poultry_request__union'),
|
||
"direct_buying": request_data.get(
|
||
'province_request__poultry_request__direct_buying'),
|
||
"allocated_car_state": allocated_car_state,
|
||
"free_sale_in_province": request_data.get(
|
||
'province_request__poultry_request__free_sale_in_province'),
|
||
"kill_house_price": request_data.get('kill_house_price')
|
||
}
|
||
|
||
province_kill_reqs_list_final_state.append(internal_dict)
|
||
return Response(province_kill_reqs_list_final_state, status=status.HTTP_200_OK)
|
||
elif request.GET['role'] == 'KillHouseVet':
|
||
vet = Vet.objects.filter(user=user, trash=False)
|
||
if vet.count() > 0:
|
||
vet = vet.last()
|
||
kill_house_vet = KillHouseVet.objects.filter(vet=vet)
|
||
kill_house_vet = kill_house_vet.last()
|
||
|
||
if 'id' in request.GET:
|
||
poultry_request = PoultryRequest.objects.get(id=int(request.GET['id']))
|
||
province_kill_reqs = ProvinceKillRequest.objects.filter(state='accepted',
|
||
killhouse_user=kill_house_vet.kill_house,
|
||
province_request__city_request_Poultry__poultry_request=poultry_request,
|
||
trash=False).order_by(
|
||
'province_request__city_request_Poultry__poultry_request__send_date')
|
||
else:
|
||
province_kill_reqs = ProvinceKillRequest.objects.filter(killhouse_user=kill_house_vet.kill_house,
|
||
trash=False).order_by(
|
||
'province_request__city_request_Poultry__poultry_request__send_date')
|
||
elif request.GET['role'] == 'VetFarm':
|
||
vet = Vet.objects.filter(user=user, trash=False)
|
||
poultries = []
|
||
if vet.count() > 0:
|
||
vet = vet.last()
|
||
vet_farms = VetFarm.objects.filter(vet=vet)
|
||
for vet_farm in vet_farms:
|
||
if vet_farm.poultry in poultries:
|
||
pass
|
||
else:
|
||
poultries.append(vet_farm.poultry)
|
||
if len(poultries) == 0:
|
||
return Response([], status=status.HTTP_200_OK)
|
||
province_kill_reqs = ProvinceKillRequest.objects.filter(
|
||
province_request__poultry_request__poultry__in=poultries,
|
||
province_request__poultry_request__poultry__address__province=vet.user.province,
|
||
trash=False).order_by(
|
||
'province_request__city_request_Poultry__poultry_request__send_date')
|
||
elif request.GET['role'] == 'VetSupervisor':
|
||
vet = VetSupervisor.objects.get(user=user, trash=False)
|
||
|
||
province_kill_reqs = ProvinceKillRequest.objects.filter(
|
||
province_request__poultry_request__poultry__address__province=vet.user.province,
|
||
trash=False).order_by(
|
||
'province_request__city_request_Poultry__poultry_request__send_date')
|
||
|
||
|
||
else:
|
||
if 'state' in request.GET:
|
||
if request.GET['state'] == 'accepted':
|
||
province_kill_reqs = ProvinceKillRequest.objects.filter(state='accepted', trash=False)
|
||
else:
|
||
province_kill_reqs = ProvinceKillRequest.objects.filter(vet_state='accepted', trash=False)
|
||
if len(province_kill_reqs) == 0:
|
||
return Response(province_kill_reqs, status=status.HTTP_200_OK)
|
||
value = request.GET.get('value')
|
||
search = request.GET.get('search')
|
||
if value and search == 'filter':
|
||
if value != 'undefined' and value.strip():
|
||
province_kill_reqs = province_kill_reqs.filter(
|
||
build_query(self.filterset_class, value)
|
||
)
|
||
for province_kill_req in province_kill_reqs:
|
||
check_key = KillHouseCheckRequest.objects.filter(province_kill_request=province_kill_req)
|
||
if check_key.count() > 0:
|
||
check_key = check_key.last().key
|
||
else:
|
||
check_key = None
|
||
internal_dict_infos = {
|
||
"poultry_req_id": province_kill_req.province_request.city_request_Poultry.poultry_request.id,
|
||
"freezing": province_kill_req.province_request.city_request_Poultry.poultry_request.freezing,
|
||
"direct_buying": province_kill_req.province_request.city_request_Poultry.poultry_request.direct_buying,
|
||
"export": province_kill_req.province_request.city_request_Poultry.poultry_request.export,
|
||
"amount": province_kill_req.province_request.city_request_Poultry.poultry_request.amount,
|
||
"financial_operation": province_kill_req.province_request.city_request_Poultry.poultry_request.financial_operation,
|
||
"poultry_req_key": province_kill_req.province_request.city_request_Poultry.poultry_request.key,
|
||
"province_kill_req_key": province_kill_req.key,
|
||
"poultry_name": province_kill_req.province_request.city_request_Poultry.poultry_request.poultry.user.fullname,
|
||
"order_code": province_kill_req.province_request.city_request_Poultry.poultry_request.order_code,
|
||
"send_date": province_kill_req.province_request.city_request_Poultry.poultry_request.send_date,
|
||
"city": province_kill_req.province_request.city_request_Poultry.poultry_request.poultry.address.city.name,
|
||
"province": province_kill_req.province_request.city_request_Poultry.poultry_request.poultry.user.province.name,
|
||
"poultry_mobile": province_kill_req.province_request.city_request_Poultry.poultry_request.poultry.user.mobile,
|
||
"kill_house_key": province_kill_req.kill_request.kill_house.key,
|
||
"kill_house_check_key": check_key,
|
||
"kill_house_name": province_kill_req.kill_request.kill_house.name,
|
||
"kill_house_mobile": province_kill_req.kill_request.kill_house.kill_house_operator.user.mobile,
|
||
"quantity": province_kill_req.quantity if province_kill_req.return_to_province == False else 0,
|
||
"main_quantity": province_kill_req.main_quantity,
|
||
"time": province_kill_req.kill_request.recive_time,
|
||
"date": province_kill_req.kill_request.recive_date,
|
||
"age": (
|
||
datetime.now() - province_kill_req.province_request.city_request_Poultry.poultry_request.hatching.date).days + 1,
|
||
"province_kill_req": province_kill_req.key,
|
||
"return_to_province": province_kill_req.return_to_province,
|
||
"returner": province_kill_req.returner,
|
||
"kill_request_key": province_kill_req.kill_request.key,
|
||
"market": province_kill_req.kill_request.market,
|
||
"province_kill_state": province_kill_req.state,
|
||
"allocated_quantity": province_kill_req.main_quantity - province_kill_req.quantity,
|
||
"remain_quantity": province_kill_req.quantity,
|
||
"chicken_breed": province_kill_req.kill_request.chicken_breed,
|
||
"index_weight": province_kill_req.province_request.poultry_request.Index_weight,
|
||
"total_weight": province_kill_req.main_quantity * province_kill_req.province_request.poultry_request.Index_weight,
|
||
"province_kill_reviewer": province_kill_req.reviewer,
|
||
"province_kill_clearance_code": province_kill_req.clearance_code,
|
||
"exclusive_killer": exclusive_killer,
|
||
"kill_house_price": province_kill_req.kill_house_price,
|
||
"province_kill_request_key": province_kill_req.key,
|
||
"kill_house_assignments": "",
|
||
"free_sale_in_province": province_kill_req.province_request.poultry_request.free_sale_in_province,
|
||
|
||
}
|
||
kill_house_check = KillHouseCheckRequest.objects.filter(province_kill_request=province_kill_req,
|
||
trash=False)
|
||
if kill_house_check:
|
||
kill_house_check = kill_house_check.last()
|
||
internal_dict_infos.update({
|
||
"kill_house_check_key": kill_house_check.key,
|
||
})
|
||
for kill_house_req_obj in KillHouseRequest.objects.filter(
|
||
province_kill_request=province_kill_req, trash=False):
|
||
internal_kill_house_request_dict_infos = {
|
||
"kill_house_req_key": kill_house_req_obj.key,
|
||
"kill_req_key": kill_house_req_obj.kill_request.key,
|
||
"barcod": kill_house_req_obj.bar_code,
|
||
"kill_house_state": kill_house_req_obj.state,
|
||
"kill_house_name": kill_house_req_obj.kill_request.kill_house.name,
|
||
"kill_house_user_name": kill_house_req_obj.kill_request.kill_house.kill_house_operator.user.fullname,
|
||
"kill_house_user_city": kill_house_req_obj.kill_request.kill_house.kill_house_operator.address.city.name,
|
||
"kill_house_mobile": kill_house_req_obj.kill_request.kill_house.kill_house_operator.user.mobile,
|
||
"quantity": kill_house_req_obj.quantity,
|
||
"time": kill_house_req_obj.kill_request.recive_time,
|
||
"date": kill_house_req_obj.kill_request.recive_date,
|
||
"cars": kill_house_req_obj.car,
|
||
"show_kill_house": kill_house_req_obj.show_kill_house,
|
||
"kill_house_message": kill_house_req_obj.kill_house_message,
|
||
}
|
||
|
||
info_list.append(internal_kill_house_request_dict_infos)
|
||
|
||
internal_dict_infos["kill_house_assignments"] = info_list
|
||
|
||
info_dict_list.append(internal_dict_infos)
|
||
return Response(info_dict_list, status=status.HTTP_200_OK)
|
||
|
||
def update(self, request, pk=None, *args, **kwargs):
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
role = request.data['role']
|
||
request.data.pop('role')
|
||
if 'type' in request.data.keys():
|
||
if request.data['type'] == 'archive':
|
||
user_fullname = user.fullname
|
||
date = str(datetime.now())
|
||
archive_province_kill_request_wage_threading = threading.Thread(
|
||
target=provincearchiveprovincekillrequestforwage,
|
||
args=(
|
||
request.data['province_kill_request_list'], request.data['message'], role, user_fullname, date
|
||
))
|
||
archive_province_kill_request_wage_threading.start()
|
||
return Response({"result": "با موفقیت انجام شد"}, status=status.HTTP_200_OK)
|
||
|
||
|
||
elif request.data['type'] == 'return_archive':
|
||
user_fullname = user.fullname
|
||
date = str(datetime.now().date())
|
||
province_kill_request = ProvinceKillRequest.objects.get(key=request.data['province_kill_request_key'])
|
||
province_kill_request.archive_by_province = False
|
||
if 'return_archive_message' in request.data.keys():
|
||
province_kill_request.return_archive_message = request.data['return_archive_message']
|
||
province_kill_request.returner = {
|
||
"fullname": user_fullname,
|
||
"date": date,
|
||
"role": role
|
||
}
|
||
province_kill_request.save()
|
||
return Response({"result": "با موفقیت انجام شد"}, status=status.HTTP_200_OK)
|
||
elif 'edit_allocation_quantity' in request.data.keys():
|
||
wage = 0
|
||
province_kill_request = ProvinceKillRequest.objects.get(key=request.data['province_kill_request_key'],
|
||
trash=False)
|
||
if province_kill_request.market:
|
||
return Response({"result": "امکان ویرایش برای تخصیصات پنل معاملات وجود ندارد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
poultry_request = PoultryRequest.objects.get(key=province_kill_request.province_request.poultry_request.key,
|
||
trash=False)
|
||
if poultry_request.freezing == True:
|
||
wage_type = WageType.objects.filter(en_name='province-kill-request-freezing', trash=False).first()
|
||
else:
|
||
|
||
wage_type = WageType.objects.filter(en_name='province-kill-request', trash=False).first()
|
||
if wage_type.status == True:
|
||
wage = wage_type.amount
|
||
hatching = PoultryHatching.objects.get(key=poultry_request.hatching.key, trash=False)
|
||
if KillHouseRequest.objects.filter(trash=False, province_kill_request=province_kill_request).exists():
|
||
return Response({"result": "برای این تخصیص بارایجاد شده است امکان ویرایش وجود ندارد"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
amount = province_kill_request.main_quantity
|
||
if request.data['quantity'] > amount:
|
||
different_amount = request.data['quantity'] - amount
|
||
province_kill_requests = ProvinceKillRequest.objects.filter(trash=False, return_to_province=False,
|
||
province_request__poultry_request=poultry_request)
|
||
total_quantity = \
|
||
province_kill_requests.aggregate(total=Sum('main_quantity'))['total'] or 0
|
||
if different_amount + total_quantity > poultry_request.quantity:
|
||
return Response({"result": "تعداد وارد شده بیشتر از اعلام نیاز مرغدار است!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
total_quantity_for_hatching = province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
|
||
'total'] or 0
|
||
if different_amount + total_quantity_for_hatching > hatching.left_over:
|
||
return Response({"result": "تعداد وارد شده بیشتر از باقی مانده جوجه ریزی مرغدار است!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
province_kill_requests_for_kill_request = ProvinceKillRequest.objects.filter(trash=False,
|
||
return_to_province=False,
|
||
kill_request=province_kill_request.kill_request)
|
||
total_quantity_for_kill_request = \
|
||
province_kill_requests_for_kill_request.aggregate(total=Sum('main_quantity'))['total'] or 0
|
||
if province_kill_request.kill_request.kill_capacity < total_quantity_for_kill_request + different_amount:
|
||
return Response({"result": "تعداد وارد شده بیشتر از اعلام نیاز کشتارگاه است!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
province_kill_request.province_request.quantity -= different_amount
|
||
if province_kill_request.province_request.quantity < 0:
|
||
province_kill_request.province_request.quantity = 0
|
||
province_kill_request.province_request.save()
|
||
province_kill_request.kill_request.remain_quantity = province_kill_request.kill_request.kill_capacity - total_quantity_for_kill_request
|
||
province_kill_request.kill_request.remain_quantity -= different_amount
|
||
province_kill_request.kill_request.save()
|
||
poultry_request.remain_quantity -= different_amount
|
||
poultry_request.save()
|
||
else:
|
||
province_kill_requests_for_kill_request = ProvinceKillRequest.objects.filter(trash=False,
|
||
return_to_province=False,
|
||
kill_request=province_kill_request.kill_request)
|
||
total_quantity_for_kill_request = \
|
||
province_kill_requests_for_kill_request.aggregate(total=Sum('main_quantity'))['total'] or 0
|
||
different_amount = amount - request.data['quantity']
|
||
province_kill_request.province_request.quantity += different_amount
|
||
province_kill_request.province_request.save()
|
||
province_kill_request.kill_request.remain_quantity = province_kill_request.kill_request.kill_capacity - total_quantity_for_kill_request
|
||
province_kill_request.kill_request.remain_quantity += different_amount
|
||
province_kill_request.kill_request.save()
|
||
poultry_request.remain_quantity += different_amount
|
||
poultry_request.save()
|
||
|
||
province_kill_request.main_quantity = int(request.data['quantity'])
|
||
province_kill_request.total_killed_quantity = province_kill_request.main_quantity
|
||
province_kill_request.total_killed_weight = int(
|
||
province_kill_request.main_quantity * poultry_request.Index_weight)
|
||
province_kill_request.total_wage_amount = province_kill_request.total_killed_weight * province_kill_request.wage
|
||
percentages_wage_type = PercentageOfWageType.objects.filter(wage_type=wage_type, percent__gt=0, trash=False)
|
||
if wage_type and wage_type.status == True and percentages_wage_type:
|
||
for percentage_wage_type in percentages_wage_type:
|
||
if percentage_wage_type.share_type.en_name == 'union':
|
||
province_kill_request.union_share = int(
|
||
(percentage_wage_type.percent / 100) * province_kill_request.total_wage_amount)
|
||
province_kill_request.union_share_percent = percentage_wage_type.percent
|
||
elif percentage_wage_type.share_type.en_name == 'company':
|
||
province_kill_request.company_share = int(
|
||
(percentage_wage_type.percent / 100) * province_kill_request.total_wage_amount)
|
||
province_kill_request.company_share_percent = percentage_wage_type.percent
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'guilds':
|
||
province_kill_request.guilds_share = int(
|
||
(percentage_wage_type.percent / 100) * province_kill_request.total_wage_amount)
|
||
province_kill_request.guilds_share_percent = percentage_wage_type.percent
|
||
elif percentage_wage_type.share_type.en_name == 'city':
|
||
province_kill_request.city_share = int(
|
||
(percentage_wage_type.percent / 100) * province_kill_request.total_wage_amount)
|
||
province_kill_request.city_share_percent = percentage_wage_type.percent
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'other':
|
||
province_kill_request.other_share = int(
|
||
(percentage_wage_type.percent / 100) * province_kill_request.total_wage_amount)
|
||
province_kill_request.other_share_percent = percentage_wage_type.percent
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'wallet':
|
||
province_kill_request.wallet_share = int(
|
||
(percentage_wage_type.percent / 100) * province_kill_request.total_wage_amount)
|
||
province_kill_request.wallet_share_percent = percentage_wage_type.percent
|
||
|
||
else:
|
||
province_kill_request.other_share = int(
|
||
(percentage_wage_type.percent / 100) * province_kill_request.total_wage_amount)
|
||
province_kill_request.other_share_percent = percentage_wage_type.percent
|
||
province_kill_request.save()
|
||
|
||
province_kill_request.save()
|
||
update_province_kill_requests(hatching)
|
||
poultry_prediction(hatching.poultry)
|
||
|
||
return Response({"result": "با موفقیت انجام شد"}, status=status.HTTP_200_OK)
|
||
|
||
else:
|
||
|
||
province_kill_request = ProvinceKillRequest.objects.get(key=request.data['province_kill_request_key'])
|
||
request.data.pop('province_kill_request_key')
|
||
if 'kill_house_price' not in request.data.keys():
|
||
if province_kill_request.prev_total_amount == None:
|
||
province_kill_request.prev_total_amount = province_kill_request.total_amount
|
||
province_kill_request.total_amount_editor = {
|
||
"role": role,
|
||
"fullname": user.fullname,
|
||
"mobile": user.mobile,
|
||
"date": str(datetime.now())
|
||
}
|
||
province_kill_request.save()
|
||
if 'kill_house_price' in request.data.keys():
|
||
kill_house_requests = KillHouseRequest.objects.filter(trash=False,
|
||
province_kill_request=province_kill_request)
|
||
if kill_house_requests:
|
||
kill_house_requests.update(amount=request.data['kill_house_price'])
|
||
|
||
serializer = self.serializer_class(province_kill_request)
|
||
serializer.update(instance=province_kill_request, validated_data=request.data)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
def destroy(self, request, pk=None, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
|
||
if 'delete_allocation' in request.GET:
|
||
|
||
province_kill_request = ProvinceKillRequest.objects.get(key=request.GET['province_kill_request_key'],
|
||
trash=False)
|
||
if request.GET['role'] == 'KillHouse':
|
||
if province_kill_request.market:
|
||
return Response({
|
||
"result": "امکان حذف برای تخصیص پنل معاملاتی وجود ندارد. در صورت نیاز به کاربر اتحادیه اطلاع دهید."},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
now = datetime.now()
|
||
now_time = now.time()
|
||
if now.date() != province_kill_request.kill_request.recive_date.date():
|
||
return Response({"result": "با توجه به مغایرت تاریخ امکان حذف وجود ندارد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
if now_time.hour >= 16:
|
||
return Response({"result": "با توجه به اتمام زمان حذف مجاز امکان حذف وجود ندارد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
if province_kill_request.quantity != province_kill_request.main_quantity:
|
||
return Response({"result": "برای تخصیص ماشین ثبت شده امکان حذف وجود ندارد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
poultry_request = PoultryRequest.objects.get(key=province_kill_request.province_request.poultry_request.key,
|
||
trash=False)
|
||
province_check = ProvinceCheckOperatorRequest.objects.get(poultry_request=poultry_request)
|
||
|
||
hatching = PoultryHatching.objects.get(key=poultry_request.hatching.key, trash=False)
|
||
if poultry_request.export == True:
|
||
hatching.export_killed_weight -= int(int(request.data['quantity']) * poultry_request.Index_weight)
|
||
hatching.export_killed_quantity -= int(request.data['quantity'])
|
||
elif poultry_request.free_sale_in_province == True:
|
||
hatching.free_killed_quantity -= province_kill_request.total_killed_weight
|
||
# hatching.free_killed_quantity -= int(province_kill_request.main_quantity * poultry_request.Index_weight)
|
||
hatching.free_quantity -= province_kill_request.total_killed_quantity
|
||
# hatching.free_quantity -= province_kill_request.main_quantity
|
||
else:
|
||
hatching.governmental_killed_quantity -= province_kill_request.total_killed_weight
|
||
# hatching.governmental_killed_quantity -= int(
|
||
# province_kill_request.main_quantity * poultry_request.Index_weight)
|
||
|
||
hatching.governmental_quantity -= province_kill_request.total_killed_quantity
|
||
# hatching.governmental_quantity -= province_kill_request.main_quantity
|
||
# hatching.killed_quantity -= province_kill_request.main_quantity
|
||
hatching.save()
|
||
|
||
if poultry_request.remain_quantity > 0:
|
||
# province_check = ProvinceCheckOperatorRequest.objects.get(poultry_request=poultry_request)
|
||
province_check.quantity += province_kill_request.main_quantity
|
||
province_check.save()
|
||
poultry_request.remain_quantity += province_kill_request.main_quantity
|
||
poultry_request.save()
|
||
else:
|
||
|
||
# province_check = ProvinceCheckOperatorRequest.objects.get(poultry_request=poultry_request)
|
||
province_check.quantity += province_kill_request.main_quantity
|
||
province_check.save()
|
||
poultry_request.remain_quantity += province_kill_request.main_quantity
|
||
poultry_request.save()
|
||
# poultry_request.quantity -= province_kill_request.quantity
|
||
# poultry_request.first_quantity -= province_kill_request.quantity
|
||
# poultry_request.previous_quantity -= province_kill_request.quantity
|
||
# poultry_request.save()
|
||
# if poultry_request.quantity == 0:
|
||
# poultry_request.trash = True
|
||
# poultry_request.save()
|
||
# hatching.left_over += province_kill_request.quantity
|
||
# hatching.state = 'pending'
|
||
# hatching.allow_hatching = 'pending'
|
||
# hatching.save()
|
||
kill_request = KillRequest.objects.get(key=province_kill_request.kill_request.key)
|
||
kill_request.remain_quantity += province_kill_request.main_quantity
|
||
if kill_request.market:
|
||
user = SystemUserProfile.objects.get(trash=False, user=request.user)
|
||
kill_request.market_state_message = {
|
||
"fullname": user.fullname,
|
||
"mobile": user.mobile,
|
||
"date": str(datetime.now())
|
||
}
|
||
kill_request.market_state = 'deleted'
|
||
else:
|
||
if kill_request.poultry_request:
|
||
kill_request.trash = True
|
||
kill_request.save()
|
||
province_kill_request.delete_message = request.GET['message']
|
||
province_kill_request.trash = True
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
province_kill_request.returner = {"fullname": user.fullname, "mobile": user.mobile,
|
||
"date": str(datetime.now())}
|
||
province_kill_request.save()
|
||
bot_eitaa_for_each_delete_province_kill_request(province_kill_request)
|
||
return Response({"result": "با موفقیت حذف شد"}, status=status.HTTP_200_OK)
|
||
elif 'return_allocation_quantity' in request.GET:
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
|
||
province_kill_request = ProvinceKillRequest.objects.get(key=request.GET['province_kill_request_key'],
|
||
trash=False)
|
||
if province_kill_request.quantity == 0:
|
||
return Response({"result": "باقی مانده تخصیص صفر است امکان بازگشت تعداد وجود ندارد"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
amount = province_kill_request.quantity
|
||
|
||
poultry_request = PoultryRequest.objects.get(key=province_kill_request.province_request.poultry_request.key,
|
||
trash=False)
|
||
hatching = PoultryHatching.objects.get(key=poultry_request.hatching.key, trash=False)
|
||
|
||
if province_kill_request.main_quantity - province_kill_request.quantity == 0:
|
||
province_check = ProvinceCheckOperatorRequest.objects.get(poultry_request=poultry_request)
|
||
province_check.quantity += province_kill_request.main_quantity
|
||
province_check.save()
|
||
poultry_request.remain_quantity += province_kill_request.main_quantity
|
||
poultry_request.save()
|
||
kill_request = KillRequest.objects.get(key=province_kill_request.kill_request.key)
|
||
kill_request.remain_quantity += province_kill_request.main_quantity
|
||
if kill_request.market:
|
||
kill_request.market_state = 'deleted'
|
||
user = SystemUserProfile.objects.get(trash=False, user=request.user)
|
||
kill_request.market_state_message = {
|
||
"fullname": user.fullname,
|
||
"mobile": user.mobile,
|
||
"date": str(datetime.now())
|
||
}
|
||
|
||
else:
|
||
if kill_request.poultry_request:
|
||
kill_request.trash = True
|
||
kill_request.save()
|
||
if poultry_request.export == True:
|
||
hatching.export_killed_weight -= int(int(request.data['quantity']) * poultry_request.Index_weight)
|
||
hatching.export_killed_quantity -= int(request.data['quantity'])
|
||
elif poultry_request.free_sale_in_province == True:
|
||
hatching.free_killed_quantity -= province_kill_request.total_killed_weight
|
||
# hatching.free_killed_quantity -= int(amount * poultry_request.Index_weight)
|
||
hatching.free_quantity -= province_kill_request.total_killed_quantity
|
||
# hatching.free_quantity -= amount
|
||
else:
|
||
hatching.governmental_killed_quantity -= province_kill_request.total_killed_weight
|
||
# hatching.governmental_killed_quantity -= int(amount * poultry_request.Index_weight)
|
||
hatching.governmental_quantity -= province_kill_request.total_killed_quantity
|
||
# hatching.governmental_quantity -= amount
|
||
# hatching.killed_quantity -= amount
|
||
hatching.save()
|
||
# province_kill_request.trash = True
|
||
province_kill_request.quantity = 0
|
||
province_kill_request.total_killed_quantity = 0
|
||
province_kill_request.total_killed_weight = 0
|
||
province_kill_request.return_to_province = True
|
||
province_kill_request.returner = {"fullname": user.fullname, "mobile": user.mobile,
|
||
"date": str(datetime.now())}
|
||
province_kill_request.save()
|
||
bot_eitaa_for_each_delete_province_kill_request(province_kill_request)
|
||
else:
|
||
|
||
province_check = ProvinceCheckOperatorRequest.objects.get(poultry_request=poultry_request)
|
||
province_check.quantity += province_kill_request.main_quantity - province_kill_request.quantity
|
||
province_check.save()
|
||
poultry_request.remain_quantity += province_kill_request.main_quantity - province_kill_request.quantity
|
||
poultry_request.save()
|
||
kill_request = KillRequest.objects.get(key=province_kill_request.kill_request.key)
|
||
kill_request.remain_quantity += province_kill_request.main_quantity - province_kill_request.quantity
|
||
kill_request.save()
|
||
if poultry_request.export == True:
|
||
hatching.export_killed_weight -= int(int(request.data['quantity']) * poultry_request.Index_weight)
|
||
hatching.export_killed_quantity -= int(request.data['quantity'])
|
||
elif poultry_request.free_sale_in_province == True:
|
||
hatching.free_killed_quantity -= int((
|
||
province_kill_request.main_quantity - province_kill_request.quantity) * poultry_request.Index_weight)
|
||
# hatching.free_killed_quantity -= int(amount * poultry_request.Index_weight)
|
||
hatching.free_quantity -= province_kill_request.total_killed_quantity
|
||
# hatching.free_quantity -= amount
|
||
else:
|
||
hatching.governmental_killed_quantity -= int((
|
||
province_kill_request.main_quantity - province_kill_request.quantity) * poultry_request.Index_weight)
|
||
# hatching.governmental_killed_quantity -= int(amount * poultry_request.Index_weight)
|
||
hatching.governmental_quantity -= province_kill_request.main_quantity - province_kill_request.quantity
|
||
# hatching.governmental_quantity -= amount
|
||
# hatching.killed_quantity -= amount
|
||
hatching.save()
|
||
province_kill_request.main_quantity = province_kill_request.main_quantity - province_kill_request.quantity
|
||
province_kill_request.quantity = 0
|
||
province_kill_request.save()
|
||
|
||
return Response({"result": "با موفقیت انجام شد"}, status=status.HTTP_200_OK)
|
||
queryset = ProvinceKillRequest.objects.get(key=request.GET['key'])
|
||
poultry_request = PoultryRequest.objects.get(key=queryset.province_request.poultry_request.key)
|
||
hatching = PoultryHatching.objects.get(key=poultry_request.hatching.key, trash=False)
|
||
check = KillHouseCheckRequest.objects.filter(province_kill_request=queryset, state='accepted')
|
||
if check.count() > 0:
|
||
return Response({"result": "can not delete"}, status=status.HTTP_403_FORBIDDEN)
|
||
province = ProvinceCheckOperatorRequest.objects.get(key=queryset.province_request.key)
|
||
province.quantity += queryset.quantity
|
||
province.save()
|
||
kill_request = KillRequest.objects.get(key=queryset.kill_request.key)
|
||
kill_request.remain_quantity += queryset.quantity
|
||
kill_request.save()
|
||
# queryset.delete()
|
||
poultry_request.remain_quantity += queryset.quantity
|
||
poultry_request.save()
|
||
if poultry_request.export == True:
|
||
hatching.export_killed_weight -= int(int(request.data['quantity']) * poultry_request.Index_weight)
|
||
hatching.export_killed_quantity -= int(request.data['quantity'])
|
||
elif poultry_request.free_sale_in_province == True:
|
||
hatching.free_killed_quantity -= queryset.total_killed_weight
|
||
# hatching.free_killed_quantity -= int(queryset.quantity * poultry_request.Index_weight)
|
||
hatching.free_quantity -= queryset.total_killed_quantity
|
||
else:
|
||
hatching.governmental_killed_quantity -= queryset.total_killed_weight
|
||
# hatching.governmental_killed_quantity -= int(
|
||
# queryset.quantity * poultry_request.Index_weight)
|
||
hatching.governmental_quantity -= queryset.total_killed_quantity
|
||
# hatching.killed_quantity -= queryset.total_killed_quantity
|
||
hatching.save()
|
||
bot_eitaa_for_each_delete_province_kill_request(queryset)
|
||
queryset.delete()
|
||
return Response(status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHouseWageForTotalDashbordViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouse.objects.all()
|
||
serializer_class = KillHouseWageForTotalDashbordSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).first()
|
||
serializer = self.get_serializer(kill_house)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class ProvinceKillRequestProvinceWageViewSet(viewsets.ModelViewSet):
|
||
queryset = ProvinceKillRequest.objects.all()
|
||
serializer_class = ProvinceKillRequestProvinceWageSerializer
|
||
pagination_class = CustomPagination
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = ProvinceKillRequestFilterSet
|
||
filterset_fields = [
|
||
'province_request__poultry_request__chicken_breed',
|
||
'province_request__poultry_request__order_code',
|
||
'province_request__poultry_request__poultry__address__city__name',
|
||
'province_request__poultry_request__poultry__user__mobile',
|
||
'province_request__poultry_request__poultry__user__fullname',
|
||
|
||
]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
if 'type' in request.GET:
|
||
if 'date1' in request.GET:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
|
||
if request.GET['role'] in ['ProvinceOperator', 'SuperAdmin', 'AdminX', 'Company', 'Guilds', 'Supporter']:
|
||
if request.GET['type'] == 'unpaid':
|
||
if 'date1' in request.GET:
|
||
|
||
if request.GET['role'] == 'ProvinceOperator':
|
||
province_kill_request = self.queryset.filter(
|
||
killhouse_user__key=request.GET['kill_house_key'],
|
||
state__in=('pending', 'accepted'),
|
||
return_to_province=False,
|
||
archive_wage=False,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
union_share__gt=0,
|
||
trash=False).order_by('kill_request__recive_date')
|
||
elif request.GET['role'] == 'Company':
|
||
province_kill_request = self.queryset.filter(
|
||
killhouse_user__key=request.GET['kill_house_key'],
|
||
state__in=('pending', 'accepted'),
|
||
return_to_province=False,
|
||
archive_wage=False,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
company_share__gt=0,
|
||
trash=False).order_by('kill_request__recive_date')
|
||
|
||
elif request.GET['role'] == 'Guilds':
|
||
province_kill_request = self.queryset.filter(
|
||
killhouse_user__key=request.GET['kill_house_key'],
|
||
state__in=('pending', 'accepted'),
|
||
return_to_province=False,
|
||
archive_wage=False,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
guilds_share__gt=0,
|
||
trash=False).order_by('kill_request__recive_date')
|
||
|
||
elif request.GET['role'] in ['SuperAdmin', 'AdminX', 'Supporter']:
|
||
province_kill_request = self.queryset.filter(
|
||
killhouse_user__key=request.GET['kill_house_key'],
|
||
state__in=('pending', 'accepted'),
|
||
return_to_province=False,
|
||
archive_wage=False,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
trash=False).order_by('kill_request__recive_date')
|
||
else:
|
||
if request.GET['role'] == 'ProvinceOperator':
|
||
province_kill_request = self.queryset.filter(
|
||
killhouse_user__key=request.GET['kill_house_key'],
|
||
state__in=('pending', 'accepted'),
|
||
return_to_province=False,
|
||
archive_wage=False,
|
||
union_share__gt=0,
|
||
trash=False).order_by('kill_request__recive_date')
|
||
elif request.GET['role'] == 'Company':
|
||
province_kill_request = self.queryset.filter(
|
||
killhouse_user__key=request.GET['kill_house_key'],
|
||
state__in=('pending', 'accepted'),
|
||
return_to_province=False,
|
||
archive_wage=False,
|
||
company_share__gt=0,
|
||
trash=False).order_by('kill_request__recive_date')
|
||
|
||
elif request.GET['role'] == 'Guilds':
|
||
province_kill_request = self.queryset.filter(
|
||
killhouse_user__key=request.GET['kill_house_key'],
|
||
state__in=('pending', 'accepted'),
|
||
return_to_province=False,
|
||
archive_wage=False,
|
||
guilds_share__gt=0,
|
||
trash=False).order_by('kill_request__recive_date')
|
||
|
||
elif request.GET['role'] in ['SuperAdmin', 'AdminX', 'Supporter']:
|
||
province_kill_request = self.queryset.filter(
|
||
killhouse_user__key=request.GET['kill_house_key'],
|
||
state__in=('pending', 'accepted'),
|
||
return_to_province=False,
|
||
archive_wage=False,
|
||
trash=False).order_by('kill_request__recive_date')
|
||
|
||
|
||
else:
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False)
|
||
|
||
if request.GET['type'] == 'unpaid':
|
||
if 'date1' in request.GET:
|
||
|
||
province_kill_request = self.queryset.filter(killhouse_user__in=kill_house,
|
||
state__in=('pending', 'accepted'),
|
||
return_to_province=False,
|
||
archive_wage=False,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
trash=False).order_by('kill_request__recive_date')
|
||
else:
|
||
province_kill_request = self.queryset.filter(killhouse_user__in=kill_house,
|
||
state__in=('pending', 'accepted'), wage_pay=False,
|
||
archive_wage=False,
|
||
return_to_province=False,
|
||
trash=False).order_by('kill_request__recive_date')
|
||
|
||
if 'search' in request.GET:
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "":
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=province_kill_request
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=province_kill_request)
|
||
province_kill_request = ps.filter()
|
||
else:
|
||
province_kill_request = province_kill_request
|
||
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(province_kill_request)
|
||
if page is not None:
|
||
serializer = self.get_serializer(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = self.get_serializer(province_kill_request, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
# class ProvinceKillRequestProvinceWageViewSet(viewsets.ModelViewSet):
|
||
# queryset = ProvinceKillRequest.objects.all()
|
||
# serializer_class = ProvinceKillRequestProvinceWageSerializer
|
||
# pagination_class = CustomPagination
|
||
# permission_classes = [TokenHasReadWriteScope]
|
||
# filter_backends = [DjangoFilterBackend]
|
||
# filterset_class = ProvinceKillRequestFilterSet
|
||
# filterset_fields = [
|
||
# 'province_request__poultry_request__chicken_breed',
|
||
# 'province_request__poultry_request__order_code',
|
||
# 'province_request__poultry_request__poultry__address__city__name',
|
||
# 'province_request__poultry_request__poultry__user__mobile',
|
||
# 'province_request__poultry_request__poultry__user__fullname',
|
||
#
|
||
# ]
|
||
#
|
||
# def list(self, request, *args, **kwargs):
|
||
# if 'type' in request.GET:
|
||
# if 'date1' in request.GET:
|
||
# date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
#
|
||
# date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
#
|
||
# if request.GET['role'] in ['ProvinceOperator', 'SuperAdmin']:
|
||
# if request.GET['type'] == 'unpaid':
|
||
# if 'date1' in request.GET:
|
||
#
|
||
# province_kill_request = self.queryset.filter(killhouse_user__key=request.GET['kill_house_key'],
|
||
# state__in=('pending', 'accepted'), wage_pay=False,
|
||
# archive_by_province=False,
|
||
# return_to_province=False,
|
||
# kill_request__recive_date__date__gte=date1,
|
||
# kill_request__recive_date__date__lte=date2,
|
||
# trash=False).order_by('kill_request__recive_date')
|
||
# else:
|
||
# province_kill_request = self.queryset.filter(killhouse_user__key=request.GET['kill_house_key'],
|
||
# state__in=('pending', 'accepted'), wage_pay=False,
|
||
# archive_by_province=False,
|
||
# return_to_province=False,
|
||
# trash=False).order_by('kill_request__recive_date')
|
||
#
|
||
# elif request.GET['type'] == 'archive':
|
||
# if 'date1' in request.GET:
|
||
#
|
||
# province_kill_request = self.queryset.filter(killhouse_user__key=request.GET['kill_house_key'],
|
||
# state__in=('pending', 'accepted'), wage_pay=False,
|
||
# archive_by_province=True,
|
||
# return_to_province=False,
|
||
# kill_request__recive_date__date__gte=date1,
|
||
# kill_request__recive_date__date__lte=date2,
|
||
# trash=False).order_by('kill_request__recive_date')
|
||
# else:
|
||
# province_kill_request = self.queryset.filter(killhouse_user__key=request.GET['kill_house_key'],
|
||
# state__in=('pending', 'accepted'), wage_pay=False,
|
||
# archive_by_province=True,
|
||
# return_to_province=False,
|
||
#
|
||
# trash=False).order_by('kill_request__recive_date')
|
||
#
|
||
#
|
||
# else:
|
||
# if 'date1' in request.GET:
|
||
#
|
||
# province_kill_request = self.queryset.filter(killhouse_user__key=request.GET['kill_house_key'],
|
||
# state__in=('pending', 'accepted'), wage_pay=True,
|
||
# archive_by_province=False,
|
||
# return_to_province=False,
|
||
# kill_request__recive_date__date__gte=date1,
|
||
# kill_request__recive_date__date__lte=date2,
|
||
# trash=False).order_by('kill_request__recive_date')
|
||
# else:
|
||
# province_kill_request = self.queryset.filter(killhouse_user__key=request.GET['kill_house_key'],
|
||
# state__in=('pending', 'accepted'), wage_pay=True,
|
||
# archive_by_province=False,
|
||
# return_to_province=False,
|
||
# trash=False).order_by('kill_request__recive_date')
|
||
#
|
||
# else:
|
||
# user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
# kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False)
|
||
#
|
||
# if request.GET['type'] == 'unpaid':
|
||
# if 'date1' in request.GET:
|
||
#
|
||
# province_kill_request = self.queryset.filter(killhouse_user__in=kill_house,
|
||
# state__in=('pending', 'accepted'), wage_pay=False,
|
||
# archive_by_province=False,
|
||
# return_to_province=False,
|
||
# kill_request__recive_date__date__gte=date1,
|
||
# kill_request__recive_date__date__lte=date2,
|
||
# trash=False).order_by('kill_request__recive_date')
|
||
# else:
|
||
# province_kill_request = self.queryset.filter(killhouse_user__in=kill_house,
|
||
# state__in=('pending', 'accepted'), wage_pay=False,
|
||
# archive_by_province=False,
|
||
# return_to_province=False,
|
||
# trash=False).order_by('kill_request__recive_date')
|
||
# elif request.GET['type'] == 'archive':
|
||
# if 'date1' in request.GET:
|
||
#
|
||
# province_kill_request = self.queryset.filter(killhouse_user__in=kill_house,
|
||
# state__in=('pending', 'accepted'), wage_pay=False,
|
||
# archive_by_province=True,
|
||
# return_to_province=False,
|
||
# kill_request__recive_date__date__gte=date1,
|
||
# kill_request__recive_date__date__lte=date2,
|
||
# trash=False).order_by('kill_request__recive_date')
|
||
# else:
|
||
#
|
||
# province_kill_request = self.queryset.filter(killhouse_user__in=kill_house,
|
||
# state__in=('pending', 'accepted'), wage_pay=False,
|
||
# archive_by_province=True,
|
||
# return_to_province=False,
|
||
# trash=False).order_by('kill_request__recive_date')
|
||
#
|
||
# else:
|
||
#
|
||
# if 'date1' in request.GET:
|
||
#
|
||
# province_kill_request = self.queryset.filter(killhouse_user__in=kill_house,
|
||
# state__in=('pending', 'accepted'), wage_pay=True,
|
||
# archive_by_province=False,
|
||
# return_to_province=False,
|
||
# kill_request__recive_date__date__gte=date1,
|
||
# kill_request__recive_date__date__lte=date2,
|
||
# trash=False).order_by('kill_request__recive_date')
|
||
# else:
|
||
# province_kill_request = self.queryset.filter(killhouse_user__in=kill_house,
|
||
# state__in=('pending', 'accepted'), wage_pay=True,
|
||
# archive_by_province=False,
|
||
# return_to_province=False,
|
||
# trash=False).order_by('kill_request__recive_date')
|
||
# if 'search' in request.GET:
|
||
# if request.GET['search'] == 'filter':
|
||
# if request.GET['value'] != "":
|
||
# for item in self.filterset_fields:
|
||
# query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
# if (self.filterset_class(
|
||
# data=query,
|
||
# queryset=province_kill_request
|
||
# )
|
||
# ).filter():
|
||
# ps = self.filterset_class(data=query, queryset=province_kill_request)
|
||
# province_kill_request = ps.filter()
|
||
# else:
|
||
# province_kill_request = province_kill_request
|
||
#
|
||
# page_size = request.query_params.get('page_size', None)
|
||
# if page_size:
|
||
# self.pagination_class.page_size = int(page_size)
|
||
#
|
||
# page = self.paginate_queryset(province_kill_request)
|
||
# if page is not None:
|
||
# serializer = self.get_serializer(page, many=True)
|
||
# return self.get_paginated_response(serializer.data)
|
||
#
|
||
# serializer = self.get_serializer(province_kill_request, many=True)
|
||
# return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
# ویوست مربوط به تایید یا رد تخصیص از سمت استان توسط کشتارگاه
|
||
class KillHouseCheckRequestViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseCheckRequest.objects.all()
|
||
serializer_class = KillHouseCheckRequestSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
# تابع مربوط به تایید یا رد تخصیص از سمت استان توسط کشتارگاه
|
||
def create(self, request, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
user = SystemUserProfile.objects.get(user=request.user)
|
||
# role = request.data['role']
|
||
province_kill_house_request = ProvinceKillRequest.objects.get(key=request.data['province_kill_request_key'],
|
||
trash=False)
|
||
kill_request = KillRequest.objects.get(id=province_kill_house_request.kill_request.id, trash=False)
|
||
request.data.pop('province_kill_request_key')
|
||
# request.data.pop('role')
|
||
province_check = ProvinceCheckOperatorRequest.objects.get(id=province_kill_house_request.province_request.id,
|
||
trash=False)
|
||
poultry_request = PoultryRequest.objects.get(key=province_check.poultry_request.key)
|
||
hatching = PoultryHatching.objects.get(key=poultry_request.hatching.key)
|
||
serializer = self.serializer_class(data=request.data)
|
||
if serializer.is_valid():
|
||
if KillHouseCheckRequest.objects.filter(province_kill_request=province_kill_house_request,
|
||
trash=False).exists():
|
||
return Response({'result': 'already exist'}, status=status.HTTP_403_FORBIDDEN)
|
||
kill_house_check_request = serializer.create(validated_data=request.data)
|
||
kill_house_check_request.province_kill_request = province_kill_house_request
|
||
|
||
if kill_house_check_request.state == 'accepted':
|
||
province_kill_house_request.state = 'accepted'
|
||
province_kill_house_request.save()
|
||
# barcode = kill_house_request.bar_code
|
||
# driver_mobile = kill_house_request.car['driver_mobile']
|
||
# driver_name = kill_house_request.car['driver_name']
|
||
# quantity = kill_house_request.quantity
|
||
# kill_house = kill_house_request.kill_request.kill_house.name
|
||
# poultry = kill_house_request.province_request.city_request_Poultry.poultry_request.user.fullname
|
||
# province = kill_house_request.province_request.city_request_Poultry.poultry_request.user.address.province
|
||
# city = kill_house_request.province_request.city_request_Poultry.poultry_request.user.address.city
|
||
# address = kill_house_request.province_request.city_request_Poultry.poultry_request.user.address.address
|
||
# date = kill_house_request.province_request.city_request_Poultry.poultry_request.send_date.date()
|
||
# date = (str(jdatetime.datetime.fromgregorian(year=date.year, month=date.month, day=date.day).date()))
|
||
# time1 = kill_request.recive_time
|
||
# list1 = reversed(date.split('-'))
|
||
# s = "-"
|
||
# date1 = s.join(list1)
|
||
# time = reversed(kill_request.recive_time.split('-'))
|
||
# o = "-"
|
||
# time1 = o.join(time)
|
||
# driver_sms(driver_mobile, driver_name, quantity, poultry, barcode, province, city, address, date,
|
||
# time1,
|
||
# kill_house)
|
||
elif kill_house_check_request.state == 'rejected':
|
||
if poultry_request.free_sale_in_province == True:
|
||
hatching.free_killed_quantity -= int(
|
||
province_kill_house_request.main_quantity * poultry_request.Index_weight)
|
||
hatching.free_killed_quantity -= province_kill_house_request.main_quantity
|
||
else:
|
||
hatching.governmental_killed_quantity -= int(
|
||
province_kill_house_request.main_quantity * poultry_request.Index_weight)
|
||
hatching.governmental_quantity -= province_kill_house_request.main_quantity
|
||
# hatching.killed_quantity -= province_kill_house_request.main_quantity
|
||
hatching.save()
|
||
province_kill_house_request.state = 'rejected'
|
||
province_kill_house_request.message = kill_house_check_request.message
|
||
province_kill_house_request.save()
|
||
province_check.quantity += province_kill_house_request.quantity
|
||
province_check.save()
|
||
# kill_request.cars.append(kill_house_request.car)
|
||
kill_request.remain_quantity += province_kill_house_request.quantity
|
||
kill_request.save()
|
||
poultry_request.remain_quantity += province_kill_house_request.quantity
|
||
poultry_request.save()
|
||
# kill_house_check_request.role = {
|
||
# "role": role,
|
||
# "name": user.fullname,
|
||
# "mobile": user.mobile
|
||
# }
|
||
kill_house_check_request.save()
|
||
if kill_house_check_request.state == 'accepted':
|
||
# if SmsLicense.objects.filter().exists():
|
||
province_operator = ProvinceOperator.objects.filter(
|
||
user=SystemUserProfile.objects.get(role__name='ProvinceOperator', province=user.province))
|
||
|
||
if province_operator.count() > 0:
|
||
province_operator = province_operator.last()
|
||
province_operator_mobile = province_operator.user.mobile
|
||
province_operator_name = province_operator.user.fullname
|
||
kill_house_name = kill_house_check_request.province_kill_request.kill_request.kill_house.name
|
||
kill_house_mobile = kill_house_check_request.province_kill_request.kill_request.kill_house.kill_house_operator.user.mobile
|
||
quantity = kill_house_check_request.province_kill_request.quantity
|
||
chicken_breed = kill_house_check_request.province_kill_request.province_request.poultry_request.chicken_breed
|
||
poultry_name = kill_house_check_request.province_kill_request.province_request.poultry_request.poultry.unit_name
|
||
poultry_mobile = kill_house_check_request.province_kill_request.province_request.poultry_request.poultry.user.mobile
|
||
Index_weight = kill_house_check_request.province_kill_request.province_request.poultry_request.Index_weight
|
||
date_str = str(
|
||
kill_house_check_request.province_kill_request.province_request.poultry_request.send_date)
|
||
send_date = datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S').date()
|
||
send_date = jdatetime.datetime.fromgregorian(year=send_date.year, month=send_date.month,
|
||
day=send_date.day).strftime('%Y-%m-%d')
|
||
date_list = reversed(send_date.split('-'))
|
||
separate = "-"
|
||
send_date = separate.join(date_list)
|
||
province = kill_house_check_request.province_kill_request.province_request.poultry_request.poultry.address.province.name
|
||
city = kill_house_check_request.province_kill_request.province_request.poultry_request.poultry.address.city.name
|
||
# kill_house_province_kill_request_accept_to_province_sms(province_operator_mobile,
|
||
# province_operator_name, quantity,
|
||
# chicken_breed, send_date, poultry_name,
|
||
# poultry_mobile, province, city, kill_house_name,
|
||
#
|
||
# )
|
||
|
||
kill_house_check_request_serializer = self.serializer_class(kill_house_check_request)
|
||
return Response(kill_house_check_request_serializer.data, status=status.HTTP_201_CREATED)
|
||
return Response(serializer.errors, status=status.HTTP_403_FORBIDDEN)
|
||
|
||
|
||
class KillHouseWareHouseAcceptedKillHouseRequestViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseRequest.objects.all()
|
||
serializer_class = KillHouseRequestSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def update(self, request, pk=None, *args, **kwargs):
|
||
kill_house_request = KillHouseRequest.objects.get(key=request.data['kill_house_request_key'], trash=False)
|
||
request.data.pop('kill_house_request_key')
|
||
kill_house = kill_house_request.killhouse_user
|
||
bar_date = kill_house_request.kill_request.recive_date.date() + timedelta(days=1)
|
||
now = datetime.now().date()
|
||
product = RolesProducts.objects.filter(parent_product__product_id=2, kill_house=kill_house).first()
|
||
if not product:
|
||
return Response(
|
||
{"result": "جهت افزایش موجودی محصول ابتدا محصول را برای کشتارگاه ثبت کنید! "},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
if kill_house_request.date_of_ware_house:
|
||
if now != datetime.strptime(kill_house_request.date_of_ware_house, '%Y-%m-%d %H:%M:%S.%f').date():
|
||
return Response(
|
||
{"result": "بازه زمانی ویرایش این بار به اتمام رسیده ! "},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
input_weight = request.data['ware_house_accepted_real_weight'] if request.data[
|
||
'input_type'] == 'input_weight' else int(
|
||
kill_house_request.accepted_real_weight - (
|
||
(kill_house_request.accepted_real_weight * request.data['loss_percent']) / 100))
|
||
if kill_house_request.ware_house_accepted_real_weight > input_weight:
|
||
diffrence = kill_house_request.ware_house_accepted_real_weight - input_weight
|
||
if product.total_remain_weight - diffrence < 0:
|
||
return Response(
|
||
{"result": "به علت منفی شدن موجودی انبار امکان ویرایش وجود ندارد! "},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
if request.data['input_type'] == 'input_weight':
|
||
kill_house_request.ware_house_accepted_real_quantity = request.data['ware_house_accepted_real_quantity']
|
||
kill_house_request.ware_house_accepted_real_weight = request.data['ware_house_accepted_real_weight']
|
||
kill_house_request.weight_loss = request.data['loss_percent']
|
||
else:
|
||
# kill_house_request.ware_house_accepted_real_quantity = int(kill_house_request.accepted_real_quantity - (
|
||
# (kill_house_request.accepted_real_quantity * request.data['loss_percent']) / 100))
|
||
kill_house_request.ware_house_accepted_real_quantity = kill_house_request.accepted_real_quantity
|
||
kill_house_request.ware_house_accepted_real_weight = int(kill_house_request.accepted_real_weight - (
|
||
(kill_house_request.accepted_real_weight * request.data['loss_percent']) / 100))
|
||
kill_house_request.weight_loss = request.data['loss_percent']
|
||
poultry_prediction(kill_house_request.province_request.poultry_request.poultry)
|
||
|
||
kill_house_request.ware_house_input_type = request.data['input_type']
|
||
kill_house_request.ware_house_confirmation = True
|
||
kill_house_request.date_of_ware_house = str(datetime.now())
|
||
govermental_commitment_percent = kill_house.in_province_governmental_selling_percent
|
||
free_commitment_percent = kill_house.in_province_free_selling_percent
|
||
if kill_house_request.province_request.poultry_request.free_sale_in_province:
|
||
kill_house_request.warehouse_commitment_weight = int(
|
||
(free_commitment_percent / 100) * kill_house_request.ware_house_accepted_real_weight)
|
||
else:
|
||
kill_house_request.warehouse_commitment_weight = int(
|
||
(govermental_commitment_percent / 100) * kill_house_request.ware_house_accepted_real_weight)
|
||
if 'input_warehouse' in request.data.keys():
|
||
if request.data['input_warehouse'] == 'self':
|
||
kill_house_request.input_warehouse = kill_house_request.killhouse_user
|
||
else:
|
||
kill_house_request.input_warehouse = kill_house_request.killer
|
||
product = RolesProducts.objects.filter(parent_product__product_id=2,
|
||
kill_house=kill_house_request.killer).first()
|
||
|
||
else:
|
||
kill_house_request.input_warehouse = kill_house_request.killhouse_user
|
||
|
||
kill_house_request.save()
|
||
kill_house_requests_product_warehousing(product)
|
||
return Response({"result": "با موفقیت انجام شد"}, status=status.HTTP_200_OK)
|
||
|
||
|
||
# ویوست مربوط به ایجاد درخواست کشتار توسط کشتارگاه بعد از تخصیص
|
||
class KillHouseRequestViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseRequest.objects.all()
|
||
serializer_class = KillHouseRequestSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
# تابع مربوط به ایجاد درخواست کشتار توسط کشتارگاه بعد از تخصیص
|
||
def create(self, request, *args, **kwargs):
|
||
|
||
limitation_direct_purchase = LimitationForDirectPurchaseAndBarInformation.objects.filter(
|
||
trash=False, active=True).first()
|
||
is_in_limitation_range = False
|
||
|
||
if limitation_direct_purchase and limitation_direct_purchase.start_time and limitation_direct_purchase.end_time:
|
||
current_time = datetime.now().time()
|
||
if limitation_direct_purchase.start_time <= current_time <= limitation_direct_purchase.end_time:
|
||
is_in_limitation_range = True
|
||
|
||
if not is_in_limitation_range:
|
||
time_range = TimeRange.objects.filter(trash=False).first()
|
||
if time_range:
|
||
time = next(
|
||
(t for t in time_range.time_range if
|
||
t.get("name") == "kill_house_request" and t.get("active", False)),
|
||
None)
|
||
if time:
|
||
start_hour = datetime.strptime(time.get("start", 0), "%H:%M:%S").time()
|
||
end_hour = datetime.strptime(time.get("end", 0), "%H:%M:%S").time()
|
||
current_hour = datetime.now().time().replace(second=0, microsecond=0)
|
||
if not (start_hour < current_hour < end_hour):
|
||
return Response(
|
||
{"result": "لطفا در ساعات مجاز برای ثبت درخواست اقدام نمایید!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
real_car = None
|
||
killer_for_kill_house = None
|
||
if 'real_car_key' in request.data.keys():
|
||
real_car = KillHouseADDCAR.objects.get(key=request.data['real_car_key'], trash=False)
|
||
request.data.pop('real_car_key')
|
||
date_time_of_now = datetime.now().date()
|
||
tomorrow = datetime.now().date() + timedelta(days=1)
|
||
role = request.data['role']
|
||
request.data.pop('role')
|
||
dict1 = {}
|
||
try:
|
||
kill_house_auction_winner_key = request.data['winner_key']
|
||
|
||
kill_house_auction_winner = KillHouseRequestActionWinner.objects.get(key=kill_house_auction_winner_key,
|
||
trash=False)
|
||
kill_house = kill_house_auction_winner.kill_house_request_auction.kill_house
|
||
request.data.pop('winner_key')
|
||
|
||
except:
|
||
kill_house_auction_winner = None
|
||
|
||
try:
|
||
kill_house_check_key = request.data['kill_house_check_key']
|
||
|
||
kill_house_check = KillHouseCheckRequest.objects.get(key=kill_house_check_key, trash=False)
|
||
kill_house = kill_house_check.province_kill_request.kill_request.kill_house
|
||
request.data.pop('kill_house_check_key')
|
||
|
||
except:
|
||
kill_house_check = None
|
||
if kill_house_check != None:
|
||
kill_house = KillHouse.objects.get(id=kill_house_check.province_kill_request.kill_request.kill_house.id,
|
||
trash=False)
|
||
kill_req = KillRequest.objects.get(id=kill_house_check.province_kill_request.kill_request.id, trash=False)
|
||
if OperationLimitation.objects.all().first().kill_house_allocation_limitation == True:
|
||
|
||
if date_time_of_now != kill_req.recive_date.date():
|
||
# if date_time_of_now > kill_req.recive_date.date() + timedelta(days=1):
|
||
return Response({"result": "مغایرت در تاریخ اعلام نیاز کشتار گاه و تاریخ تخصیص به خودرو !"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
province_request = ProvinceCheckOperatorRequest.objects.get(
|
||
id=kill_house_check.province_kill_request.province_request.id, trash=False)
|
||
province_kill_request = ProvinceKillRequest.objects.get(id=kill_house_check.province_kill_request.id,
|
||
trash=False)
|
||
if province_kill_request.market:
|
||
if province_kill_request.first_car_allocated_quantity > 0:
|
||
if province_kill_request.total_killed_quantity + request.data[
|
||
'quantity'] > province_kill_request.main_quantity:
|
||
return Response(
|
||
{"result": "مجموع حجم ماشین های ایجاد شده بیشتر از تخصیص داده شده از پنل معاملات میباشد"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
else:
|
||
if request.data['quantity'] > province_kill_request.main_quantity:
|
||
return Response(
|
||
{"result": "مجموع حجم ماشین های ایجاد شده بیشتر از تخصیص داده شده از پنل معاملات میباشد"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
poultry_request = PoultryRequest.objects.get(key=province_request.poultry_request.key)
|
||
poultry_hatching = PoultryHatching.objects.get(key=poultry_request.hatching.key)
|
||
|
||
user = province_request.city_request_Poultry.poultry_request.poultry.user
|
||
if province_kill_request.quantity == 0:
|
||
return Response({"result": "quantity is 0"}, status=status.HTTP_403_FORBIDDEN)
|
||
elif kill_house_auction_winner != None:
|
||
user = kill_house_auction_winner.kill_house_request_auction.poultry_request.poultry.user
|
||
kill_house = KillHouse.objects.get(id=kill_house_auction_winner.kill_house_request_auction.kill_house.id,
|
||
trash=False)
|
||
if 'killer_key' in request.data.keys():
|
||
if request.data['killer_key'] != None:
|
||
killer_for_kill_house = KillHouse.objects.get(key=request.data['killer_key'], trash=False)
|
||
if kill_house.id != killer_for_kill_house.id:
|
||
kill_house_purchase = KillHousePurchaseRequest.objects.filter(limitation=True,
|
||
kill_house=killer_for_kill_house).first()
|
||
if kill_house_purchase:
|
||
total_unpaid_wage = 0
|
||
total_paid_wage = 0
|
||
|
||
total_unpaid_wage = get_finance_info(killer_for_kill_house)['total_price']
|
||
slaughter_transactions = InternalTransaction.objects.filter(
|
||
kill_house=killer_for_kill_house, status='completed',
|
||
trash=False)
|
||
|
||
total_paid_wage += slaughter_transactions.aggregate(total=Sum('amount'))[
|
||
'total'] or 0
|
||
total_amount = total_unpaid_wage - total_paid_wage
|
||
if total_amount >= kill_house_purchase.limitation_number:
|
||
return Response(
|
||
{
|
||
"result": "به علت بدهی کشتارکن اختصاصی امکان ایجاد بار برای کشتار کن امکان پذیر نیست!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
request.data.pop('killer_key')
|
||
|
||
car = request.data['car']
|
||
add_car = KillHouseADDCAR.objects.get(key=car['key'], trash=False)
|
||
request.data.pop('car')
|
||
if request.data['quantity'] > (poultry_hatching.left_over + province_kill_request.main_quantity + (
|
||
(poultry_hatching.quantity * 5) / 100)):
|
||
return Response({"result": "تعداد قطعه وارد شده بیشتراز مانده در سالن مرغدار است!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
if kill_house.max_kill_limit and kill_house.total_kill_capacity > 0:
|
||
extra_bar_kill_percent = (kill_house.extra_bar_kill_percent / 100) * kill_house.total_kill_capacity
|
||
|
||
total_province_kill_requests = ProvinceKillRequest.objects.filter(trash=False, return_to_province=False,
|
||
archive_wage=False,
|
||
state__in=('pending', 'accepted'),
|
||
killhouse_user=kill_house,
|
||
first_car_allocated_quantity=0,
|
||
kill_request__recive_date__date=kill_req.recive_date.date()).exclude(
|
||
id=kill_house_check.province_kill_request.id)
|
||
|
||
total_province_kill_requests_quantity_with_out_bar = \
|
||
total_province_kill_requests.aggregate(total=Sum('total_killed_quantity'))['total'] or 0
|
||
|
||
total_kill_house_requests = KillHouseRequest.objects.filter(trash=False,
|
||
archive_wage=False,
|
||
killhouse_user=kill_house,
|
||
kill_request__recive_date__date=kill_req.recive_date.date())
|
||
total_kill_house_requests_quantity = \
|
||
total_kill_house_requests.aggregate(total=Sum('accepted_real_quantity'))['total'] or 0
|
||
|
||
if (
|
||
kill_house.total_kill_capacity + extra_bar_kill_percent) < total_kill_house_requests_quantity + \
|
||
request.data['quantity'] + total_province_kill_requests_quantity_with_out_bar:
|
||
return Response({"result": "تعداد وارد شده از مانده سهمیه کشتار روزانه کشتارگاه بیشتر است !"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
serializer = self.serializer_class(data=request.data)
|
||
if serializer.is_valid():
|
||
kill_house_request = serializer.create(validated_data=request.data)
|
||
kill_house_request.accepted_real_quantity = int(kill_house_request.quantity)
|
||
kill_house_request.accepted_real_weight = float(
|
||
kill_house_request.quantity) * kill_house_check.province_kill_request.province_request.poultry_request.Index_weight
|
||
if kill_house_check != None:
|
||
bar_code = KillHouseRequest.objects.filter(
|
||
province_request__city_request_Poultry__poultry_request__poultry__user=user, trash=False)
|
||
|
||
else:
|
||
bar_code = KillHouseRequest.objects.filter(
|
||
kill_house_request_auction_winner__kill_house_request_auction__poultry_request__poultry__user=user,
|
||
trash=False)
|
||
if bar_code.count() > 0:
|
||
bar_code = bar_code.order_by(
|
||
'create_date')
|
||
if bar_code.last().bar_code != None:
|
||
kill_house_request.bar_code = bar_code.last().bar_code + 1
|
||
|
||
else:
|
||
if kill_house_check != None:
|
||
kill_house_request.bar_code = int(
|
||
str(province_request.city_request_Poultry.poultry_request.order_code) + '0001')
|
||
else:
|
||
kill_house_request.bar_code = int(
|
||
str(kill_house_auction_winner.kill_house_request_auction.poultry_request.order_code) + '0001')
|
||
|
||
if kill_house_check != None:
|
||
kill_house_request.kill_request = kill_req
|
||
kill_house_request.province_request = province_request
|
||
kill_house_request.fee = kill_house_check.province_kill_request.fee
|
||
kill_house_request.province_kill_request = province_kill_request
|
||
kill_house_request.amount = province_kill_request.kill_house_price
|
||
if kill_house_check.state == 'accepted':
|
||
kill_house_request.state = "accepted"
|
||
kill_house_request.save()
|
||
|
||
else:
|
||
|
||
kill_house_request.kill_house_request_auction_winner = kill_house_auction_winner
|
||
kill_house_request.state = "accepted"
|
||
kill_house_request.fee = kill_house_auction_winner.fee
|
||
kill_house_request.auction = True
|
||
kill_house_auction_winner.quantity -= int(kill_house_request.quantity)
|
||
kill_house_auction_winner.save()
|
||
kill_house_request.role = {
|
||
'role': role,
|
||
'name': user.fullname,
|
||
'mobile': user.mobile
|
||
}
|
||
kill_house_request.save()
|
||
|
||
kill_house_request.car = car
|
||
kill_house_request.add_car = add_car
|
||
if real_car != None:
|
||
kill_house_request.real_add_car = real_car
|
||
if killer_for_kill_house != None:
|
||
kill_house_request.killer = killer_for_kill_house
|
||
kill_house_request.killhouse_user = kill_house
|
||
kill_house_request.show_kill_house = "accepted"
|
||
kill_house_request.save()
|
||
province_kill_request.first_car_allocated_quantity += kill_house_request.quantity
|
||
province_kill_request.save()
|
||
|
||
kill_house_request_serializer = self.serializer_class(kill_house_request)
|
||
|
||
ware_house = KillHouseWareHouse.objects.filter(kill_house=kill_house, date__date=tomorrow).first()
|
||
if not ware_house:
|
||
ware_house = KillHouseWareHouse(
|
||
kill_house=kill_house,
|
||
date=tomorrow
|
||
)
|
||
ware_house.save()
|
||
|
||
update_kill_house_requests(province_kill_request, poultry_request)
|
||
update_province_kill_requests(poultry_hatching)
|
||
poultry_prediction(poultry_hatching.poultry)
|
||
vet_farm = VetFarm.objects.filter(trash=False,
|
||
poultry=kill_house_request.province_request.poultry_request.poultry).first()
|
||
if vet_farm:
|
||
car_allocation_vet_farm_sms(kill_house_request.kill_request.recive_date.date(),
|
||
kill_house_request.province_request.poultry_request.poultry.user.fullname,
|
||
kill_house_request.province_request.poultry_request.hatching.chicken_age,
|
||
kill_house_request.quantity, kill_house_request.add_car.driver.type_car,
|
||
kill_house_request.traffic_code,
|
||
kill_house_request.add_car.driver.pelak,
|
||
kill_house_request.kill_request.kill_house.name,
|
||
vet_farm.vet.user.mobile,
|
||
kill_house_request.province_request.poultry_request.amount,
|
||
kill_house_request.province_request.poultry_request.free_sale_in_province)
|
||
|
||
if kill_house_check != None:
|
||
|
||
dict1 = {
|
||
"kill_house_req_key": str(kill_house_request.key),
|
||
"kill_req_key": kill_house_request.kill_request.key,
|
||
"barcod": kill_house_request.bar_code,
|
||
"kill_house_state": kill_house_request.state,
|
||
"kill_house_name": kill_house_request.kill_request.kill_house.name,
|
||
"kill_house_user_name": kill_house_request.kill_request.kill_house.kill_house_operator.user.fullname,
|
||
"kill_house_user_city": kill_house_request.kill_request.kill_house.system_address.city.name,
|
||
"kill_house_mobile": kill_house_request.kill_request.kill_house.kill_house_operator.user.mobile,
|
||
"quantity": kill_house_request.quantity,
|
||
"time": kill_house_request.kill_request.recive_time,
|
||
"date": kill_house_request.kill_request.recive_date,
|
||
"car": kill_house_request.car,
|
||
}
|
||
elif kill_house_auction_winner != None:
|
||
|
||
dict1 = {
|
||
"kill_house_req_key": str(kill_house_request.key),
|
||
"barcod": kill_house_request.bar_code,
|
||
"kill_house_state": kill_house_request.state,
|
||
"kill_house_name": kill_house_request.kill_house_request_auction_winner.kill_house_request_auction.kill_house.name,
|
||
"kill_house_user_name": kill_house_request.kill_house_request_auction_winner.kill_house_request_auction.kill_house.kill_house_operator.user.fullname,
|
||
"kill_house_user_city": kill_house_request.kill_house_request_auction_winner.kill_house_request_auction.kill_house.system_address.city.name,
|
||
"kill_house_mobile": kill_house_request.kill_house_request_auction_winner.kill_house_request_auction.kill_house.kill_house_operator.user.mobile,
|
||
"quantity": kill_house_request.quantity,
|
||
"date": kill_house_request.kill_house_request_auction_winner.kill_house_request_auction.poultry_request.send_date,
|
||
"car": kill_house_request.car,
|
||
}
|
||
|
||
# ارسال بار به ایتای دامپزشک (فقط برای همدان و در ساعات 16 تا 23:59)
|
||
if base_url_for_sms_report == 'ha':
|
||
current_hour = datetime.now().hour
|
||
if 16 <= current_hour <= 23:
|
||
try:
|
||
send_single_bar_to_eitaa(kill_house_request)
|
||
except Exception as e:
|
||
pass
|
||
|
||
return Response(dict1, status=status.HTTP_201_CREATED)
|
||
return Response(serializer.errors, status=status.HTTP_403_FORBIDDEN)
|
||
|
||
# تابع مربوط به نمایش درخواست کشتار های ایجاد شده توسط کشتارگاه بعد از تخصیص
|
||
def list(self, request, *args, **kwargs):
|
||
from django.db.models import Q
|
||
info_dict = []
|
||
info_list = []
|
||
# refresh(request.user.id)
|
||
|
||
if request.GET['operator'] == 'ProvinceOperator':
|
||
queryset = KillHouseRequest.objects.filter(trash=False).order_by('create_date')
|
||
serializer = KillHouseRequestSerializer(queryset, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
elif request.GET['operator'] == 'VetSupervisor':
|
||
now = datetime.now().date()
|
||
date1 = datetime.strptime(str(request.GET['date1']),
|
||
'%Y-%m-%d').date() if 'date1' in request.GET else now
|
||
date2 = datetime.strptime(str(request.GET['date2']),
|
||
'%Y-%m-%d').date() if 'date2' in request.GET else now
|
||
|
||
querysets_list = KillHouseRequest.objects.filter(
|
||
vet_state__in=('pending', 'accepted'),
|
||
active_state__in=('active', 'inactive'), trash=False).order_by(
|
||
'create_date')
|
||
queryset = [
|
||
queryset_list for queryset_list in querysets_list
|
||
if date1 <= queryset_list.province_request.poultry_request.send_date.date() <= date2
|
||
]
|
||
if len(queryset) > 0:
|
||
info_list = []
|
||
|
||
for kill_house_req_obj in queryset:
|
||
kill_place = kill_house_req_obj.kill_request.kill_house.name if not kill_house_req_obj.kill_request.slaughter_house else kill_house_req_obj.kill_request.slaughter_house.name
|
||
real_car = None
|
||
if kill_house_req_obj.real_add_car != None:
|
||
real_car = {
|
||
"real_driver_name": kill_house_req_obj.real_add_car.driver.driver_name,
|
||
"real_driver_mobile": kill_house_req_obj.real_add_car.driver.driver_mobile,
|
||
"real_pelak": kill_house_req_obj.real_add_car.driver.pelak,
|
||
"real_type_car": kill_house_req_obj.real_add_car.driver.type_car
|
||
}
|
||
exclusive_killer = None
|
||
if kill_house_req_obj.killer != None:
|
||
exclusive_killer = {
|
||
"killer_name": kill_house_req_obj.killer.name,
|
||
"killer_mobile": kill_house_req_obj.killer.kill_house_operator.user.mobile,
|
||
"killer_fullname": kill_house_req_obj.killer.kill_house_operator.user.fullname,
|
||
}
|
||
vet_check_date = None
|
||
vet_check = VetCheckRequest.objects.filter(kill_house_request=kill_house_req_obj).first()
|
||
if vet_check:
|
||
vet_check_date = vet_check.create_date
|
||
if kill_house_req_obj.province_kill_request != None:
|
||
|
||
internal_dict_infos = {
|
||
"poultry_request_id": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.id,
|
||
"poultry_request_key": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.key,
|
||
"chicken_breed": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.chicken_breed,
|
||
"index_weight": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.Index_weight,
|
||
"amount": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.amount,
|
||
"bar_amount": kill_house_req_obj.amount,
|
||
"poultry_name": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.poultry.user.fullname,
|
||
"poultry_mobile": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.poultry.user.mobile,
|
||
"send_date": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.send_date,
|
||
"create_date": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.create_date,
|
||
"poultry_request_quantity": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.quantity,
|
||
"poultry_city": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.poultry.user.city.name,
|
||
"poultry_province": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.poultry.user.province.name,
|
||
"barcod": kill_house_req_obj.bar_code,
|
||
"order_code": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.order_code,
|
||
"freezing": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.freezing,
|
||
"kill_house_name": kill_house_req_obj.kill_request.kill_house.name,
|
||
"kill_house_mobile": kill_house_req_obj.kill_request.kill_house.kill_house_operator.user.mobile,
|
||
"quantity": kill_house_req_obj.quantity,
|
||
"time": kill_house_req_obj.kill_request.recive_time,
|
||
"date": kill_house_req_obj.kill_request.recive_date,
|
||
"accepted_real_quantity": kill_house_req_obj.accepted_real_quantity,
|
||
"accepted_real_weight": kill_house_req_obj.accepted_real_weight,
|
||
"kill_house_request_key": kill_house_req_obj.key,
|
||
"clearance_code": kill_house_req_obj.clearance_code,
|
||
"vet_state": kill_house_req_obj.vet_state,
|
||
"traffic_code": kill_house_req_obj.traffic_code,
|
||
"driver_name": kill_house_req_obj.add_car.driver.driver_name,
|
||
"driver_mobile": kill_house_req_obj.add_car.driver.driver_mobile,
|
||
"pelak": kill_house_req_obj.add_car.driver.pelak,
|
||
"car_key": kill_house_req_obj.add_car.key,
|
||
"type_car": kill_house_req_obj.add_car.driver.type_car,
|
||
"real_car": real_car,
|
||
"killer": exclusive_killer,
|
||
"age": (
|
||
datetime.now() - kill_house_req_obj.province_kill_request.province_request.city_request_Poultry.poultry_request.hatching.date).days + 1,
|
||
|
||
"vet_check_date": vet_check_date,
|
||
"first_weight": kill_house_req_obj.quantity * kill_house_req_obj.province_kill_request.province_request.city_request_Poultry.poultry_request.Index_weight,
|
||
"kill_place": kill_place,
|
||
"auction": "False"
|
||
}
|
||
elif kill_house_req_obj.kill_house_request_auction_winner != None:
|
||
|
||
internal_dict_infos = {
|
||
"poultry_request_id": kill_house_req_obj.kill_house_request_auction_winner.kill_house_request_auction.poultry_request.id,
|
||
"poultry_request_key": kill_house_req_obj.kill_house_request_auction_winner.kill_house_request_auction.poultry_request.key,
|
||
"poultry_name": kill_house_req_obj.kill_house_request_auction_winner.kill_house_request_auction.poultry_request.poultry.user.fullname,
|
||
"mobile": kill_house_req_obj.kill_house_request_auction_winner.kill_house_request_auction.poultry_request.poultry.user.mobile,
|
||
"city": kill_house_req_obj.kill_house_request_auction_winner.kill_house_request_auction.poultry_request.poultry.user.city.name,
|
||
"province": kill_house_req_obj.kill_house_request_auction_winner.kill_house_request_auction.poultry_request.poultry.user.province.name,
|
||
"send_date": kill_house_req_obj.kill_house_request_auction_winner.kill_house_request_auction.poultry_request.send_date,
|
||
"freezing": kill_house_req_obj.kill_house_request_auction_winner.kill_house_request_auction.poultry_request.freezing,
|
||
"create_date": kill_house_req_obj.kill_house_request_auction_winner.kill_house_request_auction.poultry_request.create_date,
|
||
"poultry_quantity": kill_house_req_obj.kill_house_request_auction_winner.kill_house_request_auction.poultry_request.quantity,
|
||
"barcod": kill_house_req_obj.bar_code,
|
||
"kill_house_name": kill_house_req_obj.kill_house_request_auction_winner.kill_house_request_auction.kill_house.name,
|
||
"kill_house_mobile": kill_house_req_obj.kill_house_request_auction_winner.kill_house_request_auction.kill_house.kill_house_operator.user.mobile,
|
||
"quantity": kill_house_req_obj.quantity,
|
||
"time": kill_house_req_obj.kill_request.recive_time,
|
||
"date": kill_house_req_obj.kill_request.recive_date,
|
||
"kill_house_request_key": kill_house_req_obj.key,
|
||
"auction": "True"
|
||
|
||
}
|
||
|
||
info_list.append(internal_dict_infos)
|
||
# info_dict.append(info_list)
|
||
return Response(info_list, status=status.HTTP_200_OK)
|
||
|
||
elif request.GET['operator'] == 'KillHouseVet':
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
# vet = Vet.objects.get(user=user, trash=False)
|
||
kill_house_vet = KillHouseVet.objects.filter(vet__user=user, trash=False)
|
||
kill_house_list = kill_house_vet.values_list('kill_house', flat=True).distinct()
|
||
# for kill_house in kill_house_vet:
|
||
# kill_house_list.append(kill_house.kill_house)
|
||
|
||
now = datetime.now().date()
|
||
date1 = datetime.strptime(str(request.GET['date1']),
|
||
'%Y-%m-%d').date() if 'date1' in request.GET else now
|
||
date2 = datetime.strptime(str(request.GET['date2']),
|
||
'%Y-%m-%d').date() if 'date2' in request.GET else now
|
||
|
||
queryset = KillHouseRequest.objects.filter(
|
||
Q(killhouse_user__in=kill_house_list) | Q(
|
||
kill_request__slaughter_house__in=kill_house_list),
|
||
province_request__poultry_request__send_date__date__gte=date1,
|
||
province_request__poultry_request__send_date__date__lte=date2,
|
||
vet_state__in=('pending', 'accepted'),
|
||
active_state__in=('active', 'inactive'), trash=False).order_by(
|
||
'create_date')
|
||
# queryset = [
|
||
# queryset_list for queryset_list in querysets_list
|
||
# if date1 <= queryset_list.province_request.poultry_request.send_date.date() <= date2
|
||
# ]
|
||
if len(queryset) > 0:
|
||
info_dict = []
|
||
info_list = []
|
||
|
||
for kill_house_req_obj in queryset:
|
||
kill_place = kill_house_req_obj.kill_request.kill_house.name if not kill_house_req_obj.kill_request.slaughter_house else kill_house_req_obj.kill_request.slaughter_house.name
|
||
vet_check_date = None
|
||
real_car = None
|
||
if kill_house_req_obj.real_add_car != None:
|
||
real_car = {
|
||
"real_driver_name": kill_house_req_obj.real_add_car.driver.driver_name,
|
||
"real_driver_mobile": kill_house_req_obj.real_add_car.driver.driver_mobile,
|
||
"real_pelak": kill_house_req_obj.real_add_car.driver.pelak,
|
||
"real_type_car": kill_house_req_obj.real_add_car.driver.type_car
|
||
}
|
||
exclusive_killer = None
|
||
if kill_house_req_obj.killer != None:
|
||
exclusive_killer = {
|
||
"killer_name": kill_house_req_obj.killer.name,
|
||
"killer_mobile": kill_house_req_obj.killer.kill_house_operator.user.mobile,
|
||
"killer_fullname": kill_house_req_obj.killer.kill_house_operator.user.fullname,
|
||
}
|
||
vet_check = VetCheckRequest.objects.filter(kill_house_request=kill_house_req_obj).first()
|
||
if vet_check:
|
||
vet_check_date = vet_check.create_date
|
||
if kill_house_req_obj.province_kill_request != None:
|
||
|
||
internal_dict_infos = {
|
||
"poultry_request_id": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.id,
|
||
"poultry_request_key": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.key,
|
||
"chicken_breed": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.chicken_breed,
|
||
"index_weight": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.Index_weight,
|
||
"amount": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.amount,
|
||
"bar_amount": kill_house_req_obj.amount,
|
||
"poultry_name": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.poultry.user.fullname,
|
||
"poultry_mobile": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.poultry.user.mobile,
|
||
"send_date": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.send_date,
|
||
"freezing": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.freezing,
|
||
"create_date": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.create_date,
|
||
"poultry_request_quantity": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.quantity,
|
||
"poultry_city": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.poultry.user.city.name,
|
||
"poultry_province": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.poultry.user.province.name,
|
||
"barcod": kill_house_req_obj.bar_code,
|
||
"order_code": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.order_code,
|
||
"kill_house_name": kill_house_req_obj.kill_request.kill_house.name,
|
||
"kill_house_mobile": kill_house_req_obj.kill_request.kill_house.kill_house_operator.user.mobile,
|
||
"quantity": kill_house_req_obj.quantity,
|
||
"time": kill_house_req_obj.kill_request.recive_time,
|
||
"date": kill_house_req_obj.kill_request.recive_date,
|
||
"accepted_real_quantity": kill_house_req_obj.accepted_real_quantity,
|
||
"accepted_real_weight": kill_house_req_obj.accepted_real_weight,
|
||
"kill_house_request_key": kill_house_req_obj.key,
|
||
"clearance_code": kill_house_req_obj.clearance_code,
|
||
"vet_state": kill_house_req_obj.vet_state,
|
||
"traffic_code": kill_house_req_obj.traffic_code,
|
||
"driver_name": kill_house_req_obj.add_car.driver.driver_name,
|
||
"driver_mobile": kill_house_req_obj.add_car.driver.driver_mobile,
|
||
"pelak": kill_house_req_obj.add_car.driver.pelak,
|
||
"car_key": kill_house_req_obj.add_car.key,
|
||
"type_car": kill_house_req_obj.add_car.driver.type_car,
|
||
"real_car": real_car,
|
||
"killer": exclusive_killer,
|
||
"first_weight": kill_house_req_obj.quantity * kill_house_req_obj.province_kill_request.province_request.city_request_Poultry.poultry_request.Index_weight,
|
||
"age": (
|
||
datetime.now() - kill_house_req_obj.province_kill_request.province_request.city_request_Poultry.poultry_request.hatching.date).days + 1,
|
||
|
||
"vet_check_date": vet_check_date,
|
||
"kill_place": kill_place,
|
||
"auction": "False"
|
||
}
|
||
elif kill_house_req_obj.kill_house_request_auction_winner != None:
|
||
|
||
internal_dict_infos = {
|
||
"poultry_request_id": kill_house_req_obj.kill_house_request_auction_winner.kill_house_request_auction.poultry_request.id,
|
||
"poultry_request_key": kill_house_req_obj.kill_house_request_auction_winner.kill_house_request_auction.poultry_request.key,
|
||
"poultry_name": kill_house_req_obj.kill_house_request_auction_winner.kill_house_request_auction.poultry_request.poultry.user.fullname,
|
||
"mobile": kill_house_req_obj.kill_house_request_auction_winner.kill_house_request_auction.poultry_request.poultry.user.mobile,
|
||
"city": kill_house_req_obj.kill_house_request_auction_winner.kill_house_request_auction.poultry_request.poultry.user.city.name,
|
||
"province": kill_house_req_obj.kill_house_request_auction_winner.kill_house_request_auction.poultry_request.poultry.user.province.name,
|
||
"send_date": kill_house_req_obj.kill_house_request_auction_winner.kill_house_request_auction.poultry_request.send_date,
|
||
"freezing": kill_house_req_obj.kill_house_request_auction_winner.kill_house_request_auction.poultry_request.freezing,
|
||
"create_date": kill_house_req_obj.kill_house_request_auction_winner.kill_house_request_auction.poultry_request.create_date,
|
||
"poultry_quantity": kill_house_req_obj.kill_house_request_auction_winner.kill_house_request_auction.poultry_request.quantity,
|
||
"barcod": kill_house_req_obj.bar_code,
|
||
"kill_house_name": kill_house_req_obj.kill_house_request_auction_winner.kill_house_request_auction.kill_house.name,
|
||
"kill_house_mobile": kill_house_req_obj.kill_house_request_auction_winner.kill_house_request_auction.kill_house.kill_house_operator.user.mobile,
|
||
"quantity": kill_house_req_obj.quantity,
|
||
"time": kill_house_req_obj.kill_request.recive_time,
|
||
"date": kill_house_req_obj.kill_request.recive_date,
|
||
"kill_house_request_key": kill_house_req_obj.key,
|
||
"auction": "True"
|
||
|
||
}
|
||
|
||
info_list.append(internal_dict_infos)
|
||
# info_dict.append(info_list)
|
||
return Response(info_list, status=status.HTTP_200_OK)
|
||
|
||
elif request.GET['operator'] == 'KillHouse':
|
||
# info_dict = []
|
||
info_list = []
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
now = datetime.now().date()
|
||
date1 = datetime.strptime(str(request.GET['date1']),
|
||
'%Y-%m-%d').date() if 'date1' in request.GET else now
|
||
date2 = datetime.strptime(str(request.GET['date2']),
|
||
'%Y-%m-%d').date() if 'date2' in request.GET else now
|
||
if 'role' in request.GET:
|
||
if request.GET['role'] == 'KillHouseVet':
|
||
vet = Vet.objects.filter(user=user, trash=False)
|
||
if vet.count() > 0:
|
||
kill_house_list = []
|
||
vet = vet.last()
|
||
kill_house_vet = KillHouseVet.objects.filter(vet=vet, trash=False)
|
||
for k_vet in kill_house_vet:
|
||
kill_house_list.append(k_vet.kill_house)
|
||
# kill_house = KillHouse.objects.filter(key=kill_house_vet.kill_house.key, trash=False)
|
||
kill_house_allow_vet = KillHouseAllowVet.objects.filter(kill_house__in=kill_house_list)
|
||
|
||
if kill_house_allow_vet.count() > 0:
|
||
|
||
kill_house_allow_vet = kill_house_allow_vet.last()
|
||
if vet != None and kill_house_allow_vet.allow == False:
|
||
return Response(info_list)
|
||
|
||
kill_requests_list = KillHouseRequest.objects.filter((Q(killhouse_user__in=kill_house_list) | Q(
|
||
kill_request__slaughter_house__in=kill_house_list)),
|
||
active_state__in=('active', 'inactive'),
|
||
trash=False)
|
||
now = datetime.now().date()
|
||
date1 = datetime.strptime(str(request.GET['date1']),
|
||
'%Y-%m-%d').date() if 'date1' in request.GET else now
|
||
date2 = datetime.strptime(str(request.GET['date2']),
|
||
'%Y-%m-%d').date() if 'date2' in request.GET else now
|
||
kill_requests = [
|
||
kill_request_list for kill_request_list in kill_requests_list
|
||
if date1 <= kill_request_list.kill_request.recive_date.date() <= date2
|
||
]
|
||
for kill_house_req_obj in kill_requests:
|
||
vet_check_date = None
|
||
real_car = None
|
||
if kill_house_req_obj.real_add_car != None:
|
||
real_car = {
|
||
"real_driver_name": kill_house_req_obj.real_add_car.driver.driver_name,
|
||
"real_driver_mobile": kill_house_req_obj.real_add_car.driver.driver_mobile,
|
||
"real_pelak": kill_house_req_obj.real_add_car.driver.pelak,
|
||
"real_type_car": kill_house_req_obj.real_add_car.driver.type_car
|
||
}
|
||
exclusive_killer = None
|
||
if kill_house_req_obj.killer != None:
|
||
exclusive_killer = {
|
||
"killer_name": kill_house_req_obj.killer.name,
|
||
"killer_mobile": kill_house_req_obj.killer.kill_house_operator.user.mobile,
|
||
"killer_fullname": kill_house_req_obj.killer.kill_house_operator.user.fullname,
|
||
}
|
||
vet_check = VetCheckRequest.objects.filter(kill_house_request=kill_house_req_obj).first()
|
||
if vet_check:
|
||
vet_check_date = vet_check.create_date
|
||
if kill_house_req_obj.province_kill_request != None:
|
||
check = KillHouseCheckRequest.objects.get(
|
||
province_kill_request=kill_house_req_obj.province_kill_request)
|
||
bar_info = KillHouseAssignmentInformation.objects.filter(
|
||
kill_house_request=kill_house_req_obj)
|
||
if bar_info.count() > 0:
|
||
bar_info = bar_info.last()
|
||
assignment_info = {
|
||
"kill_house_assignment_key": bar_info.key,
|
||
"kill_house_weight_without_load": bar_info.car_weight_without_load,
|
||
"kill_house_weight_with_load": bar_info.car_weight_with_load,
|
||
"kill_house_image_without_load": bar_info.car_weight_without_load_image,
|
||
"kill_house_image_with_load": bar_info.car_weight_with_load_image,
|
||
"kill_house_net_weight": bar_info.net_weight,
|
||
"driver_name": bar_info.kill_house_request.add_car.driver.driver_name,
|
||
"pelak": bar_info.kill_house_request.add_car.driver.pelak,
|
||
"type_car": bar_info.kill_house_request.add_car.driver.type_car,
|
||
"kill_house_assignment_state": bar_info.state,
|
||
"real_quantity": bar_info.real_quantity,
|
||
|
||
}
|
||
else:
|
||
assignment_info = None
|
||
|
||
internal_dict_infos = {
|
||
"poultry_request_id": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.id,
|
||
"poultry_request_key": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.key,
|
||
"amount": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.amount,
|
||
"bar_amount": kill_house_req_obj.amount,
|
||
"poultry_name": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.poultry.user.fullname,
|
||
"poultry_mobile": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.poultry.user.mobile,
|
||
"send_date": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.send_date,
|
||
"freezing": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.freezing,
|
||
"create_date": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.create_date,
|
||
"poultry_request_quantity": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.quantity,
|
||
"poultry_city": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.poultry.user.city.name,
|
||
"poultry_province": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.poultry.user.province.name,
|
||
"barcod": kill_house_req_obj.bar_code,
|
||
"order_code": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.order_code,
|
||
"kill_house_name": kill_house_req_obj.kill_request.kill_house.name,
|
||
"kill_house_mobile": kill_house_req_obj.kill_request.kill_house.kill_house_operator.user.mobile,
|
||
"quantity": kill_house_req_obj.quantity,
|
||
"time": kill_house_req_obj.kill_request.recive_time,
|
||
"date": kill_house_req_obj.kill_request.recive_date,
|
||
"kill_house_request_key": kill_house_req_obj.key,
|
||
"vet_state": kill_house_req_obj.vet_state,
|
||
"traffic_code": kill_house_req_obj.traffic_code,
|
||
"driver_name": kill_house_req_obj.add_car.driver.driver_name,
|
||
"driver_mobile": kill_house_req_obj.add_car.driver.driver_mobile,
|
||
"pelak": kill_house_req_obj.add_car.driver.pelak,
|
||
"car_key": kill_house_req_obj.add_car.key,
|
||
"type_car": kill_house_req_obj.add_car.driver.type_car,
|
||
"real_car": real_car,
|
||
"killer": exclusive_killer,
|
||
"kill_house_check_key": check.key,
|
||
"bar_info": assignment_info,
|
||
"auction": "False",
|
||
"kill_house_create_date": kill_house_req_obj.create_date,
|
||
"accepted_real_quantity": kill_house_req_obj.accepted_real_quantity,
|
||
"accepted_real_weight": kill_house_req_obj.accepted_real_weight,
|
||
"vet_check_date": vet_check_date,
|
||
"first_weight": kill_house_req_obj.quantity * kill_house_req_obj.province_kill_request.province_request.city_request_Poultry.poultry_request.Index_weight,
|
||
|
||
"age": (
|
||
datetime.now() - kill_house_req_obj.province_kill_request.province_request.city_request_Poultry.poultry_request.hatching.date).days + 1,
|
||
|
||
}
|
||
|
||
elif kill_house_req_obj.kill_house_request_auction_winner != None:
|
||
|
||
internal_dict_infos = {
|
||
"poultry_name": kill_house_req_obj.kill_house_request_auction_winner.kill_house_request_auction.poultry_request.poultry.user.fullname,
|
||
"poultry_mobile": kill_house_req_obj.kill_house_request_auction_winner.kill_house_request_auction.poultry_request.poultry.user.mobile,
|
||
"barcod": kill_house_req_obj.bar_code,
|
||
"kill_house_name": kill_house_req_obj.kill_house_request_auction_winner.kill_house_request_auction.kill_house.name,
|
||
"kill_house_mobile": kill_house_req_obj.kill_house_request_auction_winner.kill_house_request_auction.kill_house.kill_house_operator.user.mobile,
|
||
"quantity": kill_house_req_obj.quantity,
|
||
"time": kill_house_req_obj.kill_request.recive_time,
|
||
"date": kill_house_req_obj.kill_request.recive_date,
|
||
"cars": kill_house_req_obj.car,
|
||
"kill_house_request_key": kill_house_req_obj.key
|
||
}
|
||
|
||
info_list.append(internal_dict_infos)
|
||
# info_dict.append(info_list)
|
||
return Response(info_list, status=status.HTTP_200_OK)
|
||
|
||
else:
|
||
# kill_house_operator = KillHouseOperator.objects.get(user=user, trash=False)
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False)
|
||
kill_request_car = KillHouseRequest.objects.filter(
|
||
(Q(killhouse_user__in=kill_house) | Q(kill_request__slaughter_house__in=kill_house) | Q(
|
||
killer__in=kill_house)), kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
active_state__in=('active', 'inactive'),
|
||
assignment_state_archive='pending',
|
||
trash=False).select_related('province_request__city_request_Poultry__poultry_request',
|
||
'real_add_car__driver', 'killer',
|
||
'kill_request__kill_house__kill_house_operator')
|
||
|
||
# kill_request_car = [
|
||
# kill_request for kill_request in kill_requests
|
||
# if date1 <= kill_request.kill_request.recive_date.date() <= date2
|
||
# ]
|
||
for kill_house_req_obj in kill_request_car:
|
||
vet_check_date = None
|
||
real_car = None
|
||
if kill_house_req_obj.real_add_car != None:
|
||
real_car = {
|
||
"real_driver_name": kill_house_req_obj.real_add_car.driver.driver_name,
|
||
"real_driver_mobile": kill_house_req_obj.real_add_car.driver.driver_mobile,
|
||
"real_pelak": kill_house_req_obj.real_add_car.driver.pelak,
|
||
"real_type_car": kill_house_req_obj.real_add_car.driver.type_car
|
||
}
|
||
exclusive_killer = None
|
||
if kill_house_req_obj.killer != None:
|
||
exclusive_killer = {
|
||
"killer_name": kill_house_req_obj.killer.name,
|
||
"killer_mobile": kill_house_req_obj.killer.kill_house_operator.user.mobile,
|
||
"killer_fullname": kill_house_req_obj.killer.kill_house_operator.user.fullname,
|
||
}
|
||
vet_check = VetCheckRequest.objects.filter(kill_house_request=kill_house_req_obj).first()
|
||
if vet_check:
|
||
vet_check_date = vet_check.create_date
|
||
if kill_house_req_obj.province_kill_request != None:
|
||
check = KillHouseCheckRequest.objects.get(
|
||
province_kill_request=kill_house_req_obj.province_kill_request)
|
||
bar_info = KillHouseAssignmentInformation.objects.filter(
|
||
kill_house_request=kill_house_req_obj)
|
||
if bar_info.count() > 0:
|
||
bar_info = bar_info.last()
|
||
assignment_info = {
|
||
"kill_house_assignment_key": bar_info.key,
|
||
"kill_house_weight_without_load": bar_info.car_weight_without_load,
|
||
"kill_house_weight_with_load": bar_info.car_weight_with_load,
|
||
"kill_house_image_without_load": bar_info.car_weight_without_load_image,
|
||
"kill_house_image_with_load": bar_info.car_weight_with_load_image,
|
||
"kill_house_net_weight": bar_info.net_weight,
|
||
"driver_name": bar_info.kill_house_request.add_car.driver.driver_name,
|
||
"pelak": bar_info.kill_house_request.add_car.driver.pelak,
|
||
"type_car": bar_info.kill_house_request.add_car.driver.type_car,
|
||
"kill_house_assignment_state": bar_info.state,
|
||
"real_quantity": bar_info.real_quantity,
|
||
|
||
}
|
||
else:
|
||
assignment_info = None
|
||
|
||
internal_dict_infos = {
|
||
"poultry_request_id": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.id,
|
||
"poultry_request_key": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.key,
|
||
"amount": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.amount,
|
||
"bar_amount": kill_house_req_obj.amount,
|
||
"poultry_name": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.poultry.user.fullname,
|
||
"poultry_mobile": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.poultry.user.mobile,
|
||
"send_date": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.send_date,
|
||
"freezing": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.freezing,
|
||
"create_date": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.create_date,
|
||
"poultry_request_quantity": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.quantity,
|
||
"poultry_city": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.poultry.user.city.name,
|
||
"poultry_province": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.poultry.user.province.name,
|
||
"barcod": kill_house_req_obj.bar_code,
|
||
"order_code": kill_house_req_obj.province_request.city_request_Poultry.poultry_request.order_code,
|
||
"kill_house_name": kill_house_req_obj.kill_request.kill_house.name,
|
||
"kill_house_mobile": kill_house_req_obj.kill_request.kill_house.kill_house_operator.user.mobile,
|
||
"quantity": kill_house_req_obj.quantity,
|
||
"time": kill_house_req_obj.kill_request.recive_time,
|
||
"date": kill_house_req_obj.kill_request.recive_date,
|
||
"kill_house_request_key": kill_house_req_obj.key,
|
||
"vet_state": kill_house_req_obj.vet_state,
|
||
"traffic_code": kill_house_req_obj.traffic_code,
|
||
"driver_name": kill_house_req_obj.add_car.driver.driver_name,
|
||
"driver_mobile": kill_house_req_obj.add_car.driver.driver_mobile,
|
||
"pelak": kill_house_req_obj.add_car.driver.pelak,
|
||
"car_key": kill_house_req_obj.add_car.key,
|
||
"type_car": kill_house_req_obj.add_car.driver.type_car,
|
||
"real_car": real_car,
|
||
"killer": exclusive_killer,
|
||
"kill_house_check_key": check.key,
|
||
"free_sale_in_province": kill_house_req_obj.province_request.poultry_request.free_sale_in_province,
|
||
"bar_info": assignment_info,
|
||
"age": (
|
||
datetime.now() - kill_house_req_obj.province_kill_request.province_request.city_request_Poultry.poultry_request.hatching.date).days + 1,
|
||
|
||
"auction": "False",
|
||
"kill_house_create_date": kill_house_req_obj.create_date,
|
||
"accepted_real_quantity": kill_house_req_obj.accepted_real_quantity,
|
||
"accepted_real_weight": kill_house_req_obj.accepted_real_weight,
|
||
"vet_check_date": vet_check_date,
|
||
"first_weight": kill_house_req_obj.quantity * kill_house_req_obj.province_kill_request.province_request.city_request_Poultry.poultry_request.Index_weight,
|
||
|
||
}
|
||
|
||
elif kill_house_req_obj.kill_house_request_auction_winner != None:
|
||
|
||
internal_dict_infos = {
|
||
"poultry_name": kill_house_req_obj.kill_house_request_auction_winner.kill_house_request_auction.poultry_request.poultry.user.fullname,
|
||
"poultry_mobile": kill_house_req_obj.kill_house_request_auction_winner.kill_house_request_auction.poultry_request.poultry.user.mobile,
|
||
"barcod": kill_house_req_obj.bar_code,
|
||
"kill_house_name": kill_house_req_obj.kill_house_request_auction_winner.kill_house_request_auction.kill_house.name,
|
||
"kill_house_mobile": kill_house_req_obj.kill_house_request_auction_winner.kill_house_request_auction.kill_house.kill_house_operator.user.mobile,
|
||
"quantity": kill_house_req_obj.quantity,
|
||
"time": kill_house_req_obj.kill_request.recive_time,
|
||
"date": kill_house_req_obj.kill_request.recive_date,
|
||
"cars": kill_house_req_obj.car,
|
||
"kill_house_request_key": kill_house_req_obj.key
|
||
}
|
||
|
||
info_list.append(internal_dict_infos)
|
||
# info_dict.append(info_list)
|
||
return Response(info_list, status=status.HTTP_200_OK)
|
||
|
||
# تابع مربوط به ویرایش درخواست کشتار های ایجاد شده توسط کشتارگاه بعد از تخصیص
|
||
def update(self, request, pk=None, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
now = datetime.now().date()
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
kill_house_request = KillHouseRequest.objects.get(key=request.data['key'], trash=False)
|
||
|
||
if 'traffic_code' in request.data.keys():
|
||
if kill_house_request.clearance_code:
|
||
return Response(
|
||
{"result": "به علت وارد شدن کد قرنطینه، امکان ویرایش وجود ندارد!"},
|
||
status=status.HTTP_403_FORBIDDEN
|
||
)
|
||
|
||
bar_date = kill_house_request.kill_request.recive_date.date()
|
||
if now != bar_date:
|
||
return Response(
|
||
{"result": "فقط بار همان روز قابل ویرایش است!"},
|
||
status=status.HTTP_403_FORBIDDEN
|
||
)
|
||
|
||
if 'non_receipt' not in request.data.keys():
|
||
if 'bar_document_status_key' in request.data.keys() and request.data['bar_document_status_key'] != None:
|
||
document_status = BarDocumentStatus.objects.get(key=request.data['bar_document_status_key'])
|
||
kill_house_request.bar_document_status = document_status
|
||
kill_house_request.save()
|
||
request.data.pop('bar_document_status_key')
|
||
|
||
if 'quarantine_quantity' not in request.data.keys():
|
||
role = request.data['role']
|
||
if role == 'KillHouse' and now > kill_house_request.kill_request.recive_date.date() + timedelta(days=1) \
|
||
and 'traffic_code' in request.data.keys():
|
||
return Response(
|
||
{"result": "تنها یک روز بعد از ثبت اطلاعات امکان تغییر وجود دارد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
request.data.pop('role')
|
||
kill_house_request.editor_traffic_code = {
|
||
"role": role,
|
||
"full_name": user.first_name,
|
||
"mobile": user.mobile
|
||
}
|
||
kill_house_request.save()
|
||
|
||
# kill_house_request.assignment_state_archive = 'accepted'
|
||
# kill_house_request.save()
|
||
serializer = self.serializer_class(kill_house_request)
|
||
serializer.update(instance=kill_house_request, validated_data=request.data)
|
||
if kill_house_request.bar_document_status is not None and kill_house_request.bar_document_status.sms == True:
|
||
document_discrepancy_sms(kill_house_request.killhouse_user.killer, kill_house_request.killhouse_user.name,
|
||
kill_house_request.bar_code, kill_house_request.bar_document_status.title,
|
||
kill_house_request.killhouse_user.kill_house_operator.user.mobile,
|
||
kill_house_request.kill_request.recive_date.date())
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
# تابع مربوط به حذف درخواست کشتار های ایجاد شده توسط کشتارگاه بعد از تخصیص
|
||
def destroy(self, request, pk=None, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
tomorrow = datetime.now().date() + timedelta(days=1)
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
if 'delete_bar' in request.GET:
|
||
|
||
kill_house_req = KillHouseRequest.objects.get(key=request.GET['kill_house_request_key'], trash=False)
|
||
|
||
if KillHouseAssignmentInformation.objects.filter(kill_house_request=kill_house_req, trash=False).exists():
|
||
return Response({"result": "به علت ورود اطلاعات بار امکان حذف وجود ندارد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
# if kill_house_req.vet_state == 'accepted' or kill_house_req.assignment_state_archive == 'True':
|
||
# return Response({"result": "به علت تایید تخلیه توسط دامپزشک امکان حذف وجود ندارد!"},
|
||
# status=status.HTTP_403_FORBIDDEN)
|
||
province_kill_req = ProvinceKillRequest.objects.get(key=kill_house_req.province_kill_request.key,
|
||
trash=False)
|
||
kill_house_req.trash = True
|
||
kill_house_req.save()
|
||
province_kill_req.first_car_allocated_quantity -= kill_house_req.quantity
|
||
if province_kill_req.first_car_allocated_quantity < 0:
|
||
province_kill_req.first_car_allocated_quantity = 0
|
||
province_kill_req.save()
|
||
# kill_house_requests = KillHouseRequest.objects.filter(province_kill_request=province_kill_req,
|
||
# trash=False)
|
||
|
||
poultry_request = PoultryRequest.objects.get(key=province_kill_req.province_request.poultry_request.key,
|
||
trash=False)
|
||
hatching = PoultryHatching.objects.get(key=poultry_request.hatching.key, trash=False)
|
||
update_kill_house_requests(province_kill_req, poultry_request)
|
||
update_province_kill_requests(hatching)
|
||
poultry_prediction(hatching.poultry)
|
||
|
||
|
||
else:
|
||
kill_house_req = KillHouseRequest.objects.get(key=request.GET['kill_house_request_key'], trash=False)
|
||
if KillHouseAssignmentInformation.objects.filter(kill_house_request=kill_house_req, trash=False).exists():
|
||
return Response({"result": "به علت ورود اطلاعات بار امکان حذف وجود ندارد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
if kill_house_req.vet_state == 'accepted' or kill_house_req.clearance_code != None:
|
||
return Response({"result": "به علت وارد شدن کد قرنطینه امکان حذف وجود ندارد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
kill_house_req.trash = True
|
||
kill_house_req.save()
|
||
|
||
if kill_house_req.kill_house_request_auction_winner != None:
|
||
kill_house_request_auction_winner = KillHouseRequestActionWinner.objects.get(
|
||
key=kill_house_req.kill_house_request_auction_winner.key)
|
||
kill_house_request_auction_winner.quantity += kill_house_req.quantity
|
||
kill_house_request_auction_winner.save()
|
||
else:
|
||
province_kill_request = ProvinceKillRequest.objects.get(key=kill_house_req.province_kill_request.key,
|
||
trash=False)
|
||
province_kill_request.first_car_allocated_quantity -= kill_house_req.quantity
|
||
if province_kill_request.first_car_allocated_quantity < 0:
|
||
province_kill_request.first_car_allocated_quantity = 0
|
||
province_kill_request.save()
|
||
# kill_house_requests = KillHouseRequest.objects.filter(province_kill_request=province_kill_request,
|
||
# trash=False)
|
||
poultry_request = PoultryRequest.objects.get(
|
||
key=province_kill_request.province_request.poultry_request.key,
|
||
trash=False)
|
||
hatching = PoultryHatching.objects.get(key=poultry_request.hatching.key, trash=False)
|
||
vet_farm = VetFarm.objects.filter(trash=False,
|
||
poultry=kill_house_req.province_request.poultry_request.poultry).first()
|
||
delete_car_allocation_vet_farm_sms(kill_house_req.kill_request.recive_date.date(),
|
||
kill_house_req.province_request.poultry_request.poultry.user.fullname,
|
||
kill_house_req.province_request.poultry_request.hatching.chicken_age,
|
||
kill_house_req.quantity, kill_house_req.add_car.driver.type_car,
|
||
kill_house_req.traffic_code,
|
||
kill_house_req.add_car.driver.pelak,
|
||
kill_house_req.kill_request.kill_house.name,
|
||
vet_farm.vet.user.mobile,
|
||
kill_house_req.province_request.poultry_request.amount,
|
||
kill_house_req.province_request.poultry_request.free_sale_in_province
|
||
)
|
||
update_kill_house_requests(province_kill_request, poultry_request)
|
||
update_province_kill_requests(hatching)
|
||
poultry_prediction(hatching.poultry)
|
||
|
||
kill_house_req.trash = True
|
||
if 'message' in request.GET:
|
||
message = request.GET['message']
|
||
else:
|
||
message = 'حذف توسط کشتارگاه'
|
||
|
||
kill_house_req.message = message
|
||
role = request.GET['role'] if 'role' in request.GET else 'KillHouse'
|
||
now = datetime.now()
|
||
kill_house_req.bar_remover = {
|
||
"full_name": user.fullname,
|
||
"role": role,
|
||
"mobile": user.mobile,
|
||
"date": str(now)
|
||
}
|
||
kill_house_req.save()
|
||
|
||
ware_house = KillHouseWareHouse.objects.filter(kill_house=kill_house_req.killhouse_user,
|
||
date__date=tomorrow).first()
|
||
if ware_house:
|
||
ware_house.final_total_number_of_carcasses -= kill_house_req.accepted_real_quantity
|
||
ware_house.final_total_weight_of_carcasses -= kill_house_req.accepted_real_weight
|
||
ware_house.total_number_of_carcasses -= kill_house_req.accepted_real_quantity
|
||
ware_house.total_weight_of_carcasses -= kill_house_req.accepted_real_weight
|
||
ware_house.remain_total_number_of_carcasses -= kill_house_req.accepted_real_quantity
|
||
ware_house.remain_total_weight_of_carcasses -= kill_house_req.accepted_real_weight
|
||
ware_house.bar_quantity -= 1
|
||
# ware_house.allocated_quantity -= kill_house_req.accepted_real_quantity
|
||
ware_house.bar_live_weight -= kill_house_req.accepted_real_weight
|
||
ware_house.number_of_carcasses -= kill_house_req.accepted_real_quantity
|
||
ware_house.save()
|
||
return Response("object deleted", status=status.HTTP_200_OK)
|
||
|
||
|
||
class UpdateKillHouseRequestViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseRequest.objects.all()
|
||
serializer_class = KillHouseRequestSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def update(self, request, pk=None, *args, **kwargs):
|
||
now = datetime.now().date()
|
||
kill_house_request = KillHouseRequest.objects.get(key=request.data['key'], trash=False)
|
||
if 'traffic_code' in request.data.keys() or 'car_key' in request.data.keys():
|
||
if kill_house_request.clearance_code:
|
||
return Response(
|
||
{"result": "به علت وارد شدن کد قرنطینه، امکان ویرایش وجود ندارد!"},
|
||
status=status.HTTP_403_FORBIDDEN
|
||
)
|
||
|
||
bar_date = kill_house_request.kill_request.recive_date.date()
|
||
if now != bar_date:
|
||
return Response(
|
||
{"result": "فقط بار همان روز قابل ویرایش است!"},
|
||
status=status.HTTP_403_FORBIDDEN
|
||
)
|
||
if 'car_key' in request.data.keys():
|
||
add_car = KillHouseADDCAR.objects.get(key=request.data['car_key'], trash=False)
|
||
kill_house_request.add_car = add_car
|
||
kill_house_request.car = {
|
||
"id": add_car.id,
|
||
"key": str(add_car.key),
|
||
"pelak": add_car.driver.pelak,
|
||
"capocity": add_car.driver.capocity,
|
||
"type_car": add_car.driver.type_car,
|
||
"driver_name": add_car.driver.driver_name,
|
||
"driver_mobile": add_car.driver.driver_mobile,
|
||
"weight_without_load": add_car.driver.weight_without_load,
|
||
}
|
||
kill_house_request.save()
|
||
request.data.pop('car_key')
|
||
|
||
serializer = self.serializer_class(kill_house_request)
|
||
serializer.update(instance=kill_house_request, validated_data=request.data)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHouseRequestPricingViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseRequest.objects.all()
|
||
serializer_class = KillHouseRequestSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def update(self, request, pk=None, *args, **kwargs):
|
||
now = datetime.now()
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
kill_house_request = KillHouseRequest.objects.get(key=request.data['key'], trash=False)
|
||
role = request.data.get('role')
|
||
image = request.FILES.get('file')
|
||
if image:
|
||
file_url = upload_to_liara(image, image.name)
|
||
kill_house_request.image = file_url
|
||
if kill_house_request.price_registerar:
|
||
kill_house_request.price_editor = user.fullname
|
||
kill_house_request.price_editor_role = role
|
||
kill_house_request.price_editor_date = now
|
||
else:
|
||
kill_house_request.price_registerar = user.fullname
|
||
kill_house_request.price_registerar_role = role
|
||
kill_house_request.price_register_date = now
|
||
kill_house_request.save()
|
||
serializer = self.serializer_class(kill_house_request)
|
||
serializer.update(instance=kill_house_request, validated_data=request.data)
|
||
return Response({"result": "با موفقیت انجام شد"}, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHouseRequestForCompleteInformationViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseRequest.objects.all()
|
||
serializer_class = KillHouseRequestForBarManagementSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
pagination_class = CustomPagination
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = KillHouseRequestFilterSet
|
||
filterset_fields = [
|
||
'killhouse_user__kill_house_operator__user__fullname',
|
||
'killhouse_user__kill_house_operator__user__mobile',
|
||
'province_request__poultry_request__poultry__user__fullname',
|
||
'province_request__poultry_request__poultry__user__mobile',
|
||
'province_request__poultry_request__order_code',
|
||
'bar_code',
|
||
]
|
||
|
||
# تابع مربوط به نمایش درخواست کشتار های ایجاد شده توسط کشتارگاه بعد از تخصیص
|
||
def list(self, request, *args, **kwargs):
|
||
kill_house_request_list = []
|
||
now = datetime.now().date()
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
date1 = datetime.strptime(str(request.GET['date1']),
|
||
'%Y-%m-%d').date() if 'date1' in request.GET else now
|
||
date2 = datetime.strptime(str(request.GET['date2']),
|
||
'%Y-%m-%d').date() if 'date2' in request.GET else now
|
||
if request.GET['role'] == 'KillHouseVet':
|
||
kill_house_vet = KillHouseVet.objects.filter(vet__user=user, trash=False)
|
||
kill_house_list = kill_house_vet.values_list('kill_house', flat=True).distinct()
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(killhouse_user__in=kill_house_list) | Q(
|
||
kill_request__slaughter_house__in=kill_house_list), kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
assignment_state_archive='pending',
|
||
non_receipt=False,
|
||
trash=False).order_by(
|
||
'create_date')
|
||
|
||
else:
|
||
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False)
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
(Q(killhouse_user__in=kill_house) | Q(kill_request__slaughter_house__in=kill_house) | Q(
|
||
killer__in=kill_house)), kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
assignment_state_archive='pending',
|
||
non_receipt=False,
|
||
trash=False)
|
||
|
||
if 'search' in request.GET:
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=kill_house_requests
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=kill_house_requests)
|
||
kill_house_request_list = ps.filter()
|
||
kill_house_requests = [] if len(kill_house_request_list) == 0 else kill_house_request_list
|
||
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(kill_house_requests)
|
||
if page is not None:
|
||
serializer = self.serializer_class(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = self.serializer_class(kill_house_requests, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHouseRequestStatisticsDashboardViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseRequest.objects.all()
|
||
permission_classes = [AllowAny]
|
||
serializer_class = KillHouseRequestSerializer
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
|
||
now = timezone.now().date()
|
||
ten_days_ago = now - timedelta(days=int(request.GET['day']))
|
||
|
||
kill_house_requests_list = []
|
||
|
||
for day in range(int(request.GET['day']) + 1):
|
||
date = ten_days_ago + timedelta(days=day)
|
||
|
||
total_quantites = KillHouseRequest.objects.filter(
|
||
kill_request__recive_date__date=date,
|
||
trash=False
|
||
).aggregate(total_quantity=Sum('quantity'))['total_quantity'] or 0
|
||
|
||
if 'role' in request.GET:
|
||
if request.GET['role'] == 'CityOperator':
|
||
user = SystemUserProfile.objects.get(user=request.user)
|
||
city_operator = CityOperator.objects.get(trash=False, user=user)
|
||
total_quantity = total_quantites.filter(
|
||
province_request__poultry_request__poultry__city_operator=city_operator.unit_name)
|
||
elif request.GET['role'] in ['CityJahad', 'CityPoultry']:
|
||
user = SystemUserProfile.objects.get(user=request.user)
|
||
total_quantity = total_quantites.filter(
|
||
province_request__poultry_request__poultry__address__city=user.city)
|
||
else:
|
||
total_quantity = total_quantites
|
||
else:
|
||
total_quantity = total_quantites
|
||
|
||
kill_house_requests_list.append({"date": str(date), "quantity": total_quantity})
|
||
|
||
return Response(kill_house_requests_list)
|
||
|
||
|
||
class KillHouseRequestWeightStatisticsDashboardViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseRequest.objects.all()
|
||
permission_classes = [AllowAny]
|
||
serializer_class = KillHouseRequestSerializer
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
|
||
now = timezone.now().date()
|
||
ten_days_ago = now - timedelta(days=int(request.GET['day']))
|
||
|
||
kill_house_requests_list = []
|
||
|
||
for day in range(int(request.GET['day']) + 1):
|
||
date = ten_days_ago + timedelta(days=day)
|
||
total_weight = 0
|
||
kill_house_requestes = KillHouseRequest.objects.filter(
|
||
kill_request__recive_date__date=date,
|
||
trash=False
|
||
)
|
||
|
||
if 'role' in request.GET:
|
||
if request.GET['role'] == 'CityOperator':
|
||
user = SystemUserProfile.objects.get(user=request.user)
|
||
city_operator = CityOperator.objects.get(trash=False, user=user)
|
||
kill_house_requests = kill_house_requestes.filter(
|
||
province_request__poultry_request__poultry__city_operator=city_operator.unit_name)
|
||
elif request.GET['role'] in ['CityJahad', 'CityPoultry']:
|
||
user = SystemUserProfile.objects.get(user=request.user)
|
||
kill_house_requests = kill_house_requestes.filter(
|
||
province_request__poultry_request__poultry__address__city=user.city)
|
||
else:
|
||
kill_house_requests = kill_house_requestes
|
||
else:
|
||
kill_house_requests = kill_house_requestes
|
||
if kill_house_requests:
|
||
for kill_house_request in kill_house_requests:
|
||
kill_house_request_information = KillHouseAssignmentInformation.objects.filter(
|
||
kill_house_request=kill_house_request).last()
|
||
if kill_house_request_information:
|
||
total_weight += kill_house_request_information.net_weight
|
||
else:
|
||
total_weight += kill_house_request.province_request.poultry_request.Index_weight * kill_house_request.quantity
|
||
|
||
kill_house_requests_list.append({"date": str(date), "weight": total_weight})
|
||
|
||
return Response(kill_house_requests_list)
|
||
|
||
|
||
class KillHouseRequestChangeStateViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseRequest.objects.all()
|
||
serializer_class = KillHouseRequestSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def update(self, request, pk=None, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
|
||
keys = request.data['keys']
|
||
request.data.pop('keys')
|
||
for key in keys:
|
||
kill_house_request = KillHouseRequest.objects.get(key=key, trash=False)
|
||
kill_house_request.show_kill_house = 'accepted'
|
||
kill_house_request.save()
|
||
return Response("objects updated", status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHouseAssignmentImagesViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseAssignmentImages.objects.all()
|
||
serializer_class = KillHouseAssignmentImagesSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
# تابع مربوط به وارد کردن اطلاعات بار توسط کشتارگاه
|
||
|
||
def create(self, request, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
role = request.data['role']
|
||
request.data.pop('role')
|
||
kill_house = KillHouse.objects.get(key=request.data['kill_house_key'], trash=False)
|
||
request.data.pop('kill_house_key')
|
||
|
||
try:
|
||
health_certificate_image = request.data['health_certificate_img']
|
||
request.data.pop('health_certificate_img')
|
||
|
||
except:
|
||
health_certificate_image = None
|
||
try:
|
||
national_card_image = request.data['national_card_image']
|
||
except:
|
||
national_card_image = None
|
||
try:
|
||
birth_certificate_image = request.data['birth_certificate_image']
|
||
except:
|
||
birth_certificate_image = None
|
||
try:
|
||
police_clearance_image = request.data['police_clearance_image']
|
||
except:
|
||
police_clearance_image = None
|
||
try:
|
||
no_addiction_image = request.data['no_addiction_image']
|
||
except:
|
||
no_addiction_image = None
|
||
|
||
serializer = self.serializer_class(data=request.data)
|
||
if serializer.is_valid():
|
||
kill_house_images = KillHouseAssignmentImages.objects.filter(kill_house=kill_house)
|
||
if kill_house_images.count() > 0:
|
||
kill_house_images = kill_house_images.last()
|
||
else:
|
||
kill_house_images = serializer.create(validated_data=request.data)
|
||
if health_certificate_image != None:
|
||
kill_house_images.health_certificate_image = send_image_to_server(health_certificate_image)
|
||
if national_card_image != None:
|
||
kill_house_images.national_card_image = send_image_to_server(national_card_image)
|
||
if birth_certificate_image != None:
|
||
kill_house_images.birth_certificate_image = send_image_to_server(birth_certificate_image)
|
||
if police_clearance_image != None:
|
||
kill_house_images.police_clearance_image = send_image_to_server(police_clearance_image)
|
||
if no_addiction_image != None:
|
||
kill_house_images.no_addiction_image = send_image_to_server(no_addiction_image)
|
||
kill_house_images.save()
|
||
|
||
kill_house_images_serializer = self.serializer_class(kill_house_images)
|
||
return Response(kill_house_images_serializer.data, status=status.HTTP_201_CREATED)
|
||
|
||
return Response(serializer.errors, status=status.HTTP_403_FORBIDDEN)
|
||
|
||
|
||
class KillHouseAssignmentInformationForAggregateLoadViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseAssignmentInformation.objects.all()
|
||
serializer_class = KillHouseAssignmentInformationSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def create(self, request, *args, **kwargs):
|
||
now = datetime.now().date()
|
||
user = SystemUserProfile.objects.get(user=request.user)
|
||
kill_house_request = KillHouseRequest.objects.get(key=request.data['kill_house_request_key'], trash=False)
|
||
province_kill_request = ProvinceKillRequest.objects.get(key=kill_house_request.province_kill_request.key)
|
||
poultry_request = PoultryRequest.objects.get(key=province_kill_request.province_request.poultry_request.key)
|
||
hatching = PoultryHatching.objects.get(key=poultry_request.hatching.key)
|
||
kill_house_check = KillHouseCheckRequest.objects.get(
|
||
province_kill_request__key=kill_house_request.province_kill_request.key)
|
||
if OperationLimitation.objects.all().first().vet_check_kill_house_assignment_limitation == True:
|
||
if kill_house_request.vet_state == 'pending':
|
||
return Response({"result": "به علت عدم تایید تخلیه دامپزشک کشتارگاه امکان ثبت اطلاعات وجود ندارد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
date_time_of_now = datetime.now().date()
|
||
if OperationLimitation.objects.all().first().kill_house_assignment_limitation == True:
|
||
|
||
if date_time_of_now > kill_house_request.kill_request.recive_date.date() + timedelta(days=1):
|
||
return Response({"result": "به علت مغایرت در تاریخ ثبت و تاریخ کشتار امکان ثبت اطلاعات وجود ندارد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
role = request.data['role']
|
||
request.data.pop('kill_house_request_key')
|
||
request.data.pop('role')
|
||
assignment_info = KillHouseAssignmentInformation.objects.filter(kill_house_request=kill_house_request).first()
|
||
if not assignment_info:
|
||
assignment_info = KillHouseAssignmentInformation()
|
||
assignment_info.save()
|
||
|
||
# serializer = self.serializer_class(data=request.data)
|
||
# if serializer.is_valid():
|
||
# assignment_info = serializer.create(validated_data=request.data)
|
||
assignment_info.kill_house_check = kill_house_check
|
||
assignment_info.kill_house_request = kill_house_request
|
||
assignment_info.car_weight_with_load = int(request.data['net_weight'])
|
||
assignment_info.net_weight = int(request.data['net_weight'])
|
||
assignment_info.real_quantity = int(request.data['real_quantity'])
|
||
assignment_info.importer = {
|
||
"fullname": user.fullname,
|
||
"mobile": user.mobile,
|
||
"date": str(now),
|
||
"role": role
|
||
}
|
||
assignment_info.save()
|
||
kill_house_request.accepted_real_weight = int(request.data['net_weight'])
|
||
kill_house_request.accepted_real_quantity = int(request.data['real_quantity'])
|
||
kill_house_request.accepted_assignment_real_quantity = int(request.data['net_weight'])
|
||
kill_house_request.accepted_assignment_real_weight = int(request.data['real_quantity'])
|
||
kill_house_request.save()
|
||
# kill_house_requests = KillHouseRequest.objects.filter(province_kill_request=province_kill_request,
|
||
# trash=False)
|
||
|
||
update_kill_house_requests(province_kill_request, poultry_request)
|
||
update_province_kill_requests(hatching)
|
||
poultry_prediction(hatching.poultry)
|
||
|
||
kill_house_request.accepted_real_weight = int(request.data['net_weight'])
|
||
kill_house_request.accepted_real_quantity = int(request.data['real_quantity'])
|
||
assignment_info.save()
|
||
if assignment_info.net_weight != 0 and assignment_info.real_quantity != 0 and assignment_info.car_weight_with_load_image != None:
|
||
kill_house_request.assignment_state_archive = 'True'
|
||
kill_house_request.save()
|
||
|
||
return Response({"result": "با موفقیت ثبت شد"}, status=status.HTTP_201_CREATED)
|
||
|
||
def update(self, request, pk=None, *args, **kwargs):
|
||
image = request.data['image']
|
||
role = request.data['role']
|
||
now = datetime.now()
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
ran = ''.join(random.choices(string.ascii_uppercase + string.digits, k=15))
|
||
image_url = send_image_to_server(image)
|
||
# upload_object_resize(image_data=image, bucket_name="profileimagedefault",
|
||
# object_name="{0}.jpg".format(str(ran)))
|
||
if 'bar_key' in request.data.keys():
|
||
bar_key = request.data['bar_key']
|
||
request.data.pop('bar_key')
|
||
kill_house_request = KillHouseRequest.objects.get(key=bar_key, trash=False)
|
||
kill_house_check = KillHouseCheckRequest.objects.get(
|
||
province_kill_request__key=kill_house_request.province_kill_request.key)
|
||
assignment_info = KillHouseAssignmentInformation.objects.filter(
|
||
kill_house_request__key=bar_key).first()
|
||
if OperationLimitation.objects.all().first().vet_check_kill_house_assignment_limitation == True:
|
||
if kill_house_request.vet_state == 'pending':
|
||
return Response({"result": "به علت عدم تایید تخلیه دامپزشک کشتارگاه امکان ثبت اطلاعات وجود ندارد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
date_time_of_now = datetime.now().date()
|
||
if OperationLimitation.objects.all().first().kill_house_assignment_limitation == True:
|
||
|
||
if date_time_of_now > kill_house_request.kill_request.recive_date.date() + timedelta(days=1):
|
||
return Response(
|
||
{"result": "به علت مغایرت در تاریخ ثبت و تاریخ کشتار امکان ثبت اطلاعات وجود ندارد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
if not assignment_info:
|
||
assignment_info = KillHouseAssignmentInformation(kill_house_check=kill_house_check,
|
||
kill_house_request=kill_house_request)
|
||
assignment_info.save()
|
||
# serializer = self.serializer_class(data=request.data)
|
||
# if serializer.is_valid():
|
||
# assignment_info = serializer.create(validated_data=request.data)
|
||
# assignment_info.car_weight_with_load_image = ARVAN_Kill_house_URL + "{0}.jpg".format(str(ran))
|
||
assignment_info.car_weight_with_load_image = image_url
|
||
assignment_info.importer = {
|
||
"fullname": user.fullname,
|
||
"mobile": user.mobile,
|
||
"date": str(now),
|
||
"role": role
|
||
}
|
||
assignment_info.save()
|
||
kill_house_request = KillHouseRequest.objects.get(key=bar_key, trash=False)
|
||
if assignment_info.net_weight != 0 and assignment_info.real_quantity != 0 and assignment_info.car_weight_with_load_image != None:
|
||
kill_house_request.assignment_state_archive = 'True'
|
||
kill_house_request.save()
|
||
|
||
else:
|
||
assingment_info_keys = request.data['bar_keys']
|
||
request.data.pop('bar_keys')
|
||
for assingment_info_key in assingment_info_keys:
|
||
kill_house_request = KillHouseRequest.objects.get(key=assingment_info_key, trash=False)
|
||
kill_house_check = KillHouseCheckRequest.objects.get(
|
||
province_kill_request__key=kill_house_request.province_kill_request.key)
|
||
if OperationLimitation.objects.all().first().vet_check_kill_house_assignment_limitation == True:
|
||
if kill_house_request.vet_state == 'pending':
|
||
return Response(
|
||
{"result": "به علت عدم تایید تخلیه دامپزشک کشتارگاه امکان ثبت اطلاعات وجود ندارد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
date_time_of_now = datetime.now().date()
|
||
if OperationLimitation.objects.all().first().kill_house_assignment_limitation == True:
|
||
|
||
if date_time_of_now > kill_house_request.kill_request.recive_date.date() + timedelta(days=1):
|
||
return Response(
|
||
{"result": "به علت مغایرت در تاریخ ثبت و تاریخ کشتار امکان ثبت اطلاعات وجود ندارد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
assignment_info = KillHouseAssignmentInformation.objects.filter(
|
||
kill_house_request__key=assingment_info_key).first()
|
||
|
||
if not assignment_info:
|
||
assignment_info = KillHouseAssignmentInformation(kill_house_check=kill_house_check,
|
||
kill_house_request=kill_house_request)
|
||
assignment_info.save()
|
||
|
||
if assignment_info.car_weight_with_load_image == None:
|
||
# assignment_info.car_weight_with_load_image = ARVAN_Kill_house_URL + "{0}.jpg".format(str(ran))
|
||
assignment_info.car_weight_with_load_image = image_url
|
||
assignment_info.importer = {
|
||
"fullname": user.fullname,
|
||
"mobile": user.mobile,
|
||
"date": str(now),
|
||
"role": role
|
||
}
|
||
assignment_info.save()
|
||
kill_house_request = KillHouseRequest.objects.get(key=assignment_info.kill_house_request.key,
|
||
trash=False)
|
||
if assignment_info.net_weight != 0 and assignment_info.real_quantity != 0 and assignment_info.car_weight_with_load_image != None:
|
||
kill_house_request.assignment_state_archive = 'True'
|
||
kill_house_request.save()
|
||
|
||
return Response({"result": "با موفقیت ثبت شد"}, status=status.HTTP_200_OK)
|
||
|
||
|
||
# class KillHouseAssignmentInformationForcompletedloadsViewSet(viewsets.ModelViewSet):
|
||
# queryset = KillHouseAssignmentInformation.objects.all()
|
||
# serializer_class = KillHouseAssignmentInformationSerializer
|
||
# permission_classes = [TokenHasReadWriteScope]
|
||
#
|
||
# def list(self, request, *args, **kwargs):
|
||
# # refresh(request.user.id)
|
||
# user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
# now = datetime.now().date()
|
||
# date1 = datetime.strptime(str(request.GET['date1']),
|
||
# '%Y-%m-%d').date() if 'date1' in request.GET else now
|
||
# date2 = datetime.strptime(str(request.GET['date2']),
|
||
# '%Y-%m-%d').date() if 'date2' in request.GET else now
|
||
# province = user.province.name
|
||
# if request.GET['role'] in ('ProvinceFinancial', 'ProvinceOperator'):
|
||
# kill_house_assignments = KillHouseAssignmentInformation.objects.filter(
|
||
# Q(car_weight_with_load_image__isnull=False) | Q(car_weight_without_load_image__isnull=False),
|
||
# kill_house_request__killhouse_user__kill_house_operator__address__province__name=province,
|
||
# net_weight__gt=0,
|
||
# real_quantity__gt=0,
|
||
# kill_house_request__kill_request__recive_date__date__gte=date1,
|
||
# kill_house_request__kill_request__recive_date__date__lte=date2,
|
||
# trash=False).select_related(
|
||
# 'kill_house_request__province_request__poultry_request__hatching',
|
||
# 'kill_house_request__province_request__poultry_request__poultry',
|
||
# 'kill_house_request__province_request__poultry_request__poultry__user__city',
|
||
# 'kill_house_request__province_request__poultry_request__poultry__user__province',
|
||
# 'kill_house_request__province_request__poultry_request__poultry__user',
|
||
#
|
||
# 'kill_house_request__kill_request__kill_house',
|
||
# 'kill_house_request__kill_request__slaughter_house',
|
||
# 'kill_house_request__killhouse_user',
|
||
# 'kill_house_request__killhouse_user__kill_house_operator__user',
|
||
# 'kill_house_request__add_car__driver',
|
||
# 'kill_house_request__real_add_car__driver',
|
||
# ).values(
|
||
# "kill_house_request__province_request__poultry_request__poultry__user__province__name",
|
||
# "kill_house_request__province_request__poultry_request__poultry__user__city__name",
|
||
# "kill_house_request__province_request__poultry_request__poultry__user__fullname",
|
||
# "kill_house_request__province_request__poultry_request__poultry__user__mobile",
|
||
# "kill_house_request__province_request__poultry_request__poultry__unit_name",
|
||
# "kill_house_request__province_request__poultry_request__poultry__key",
|
||
# "kill_house_request__province_request__poultry_request__order_code",
|
||
# "kill_house_request__province_request__poultry_request__quantity",
|
||
# "kill_house_request__province_request__poultry_request__id",
|
||
# "kill_house_request__province_request__poultry_request__Index_weight",
|
||
# "kill_house_request__province_request__poultry_request__chicken_breed",
|
||
# "kill_house_request__province_request__poultry_request__create_date",
|
||
# "kill_house_request__province_request__poultry_request__send_date",
|
||
# "kill_house_request__province_request__poultry_request__cell_type",
|
||
# "kill_house_request__province_request__poultry_request__hatching__losses",
|
||
# "kill_house_request__province_request__poultry_request__hatching__date",
|
||
# "kill_house_request__killhouse_user",
|
||
# 'kill_house_request__kill_request__kill_house__name',
|
||
# 'kill_house_request__kill_request__slaughter_house__name',
|
||
# "kill_house_request__add_car__driver__driver_name",
|
||
# "kill_house_request__add_car__driver__driver_mobile",
|
||
# "kill_house_request__add_car__driver__type_car",
|
||
# "kill_house_request__add_car__driver__pelak",
|
||
# "kill_house_request__add_car__driver__health_code",
|
||
# "kill_house_request__real_add_car__driver__driver_name",
|
||
# "kill_house_request__real_add_car__driver__driver_mobile",
|
||
# "kill_house_request__real_add_car__driver__type_car",
|
||
# "kill_house_request__real_add_car__driver__pelak",
|
||
# "kill_house_request__real_add_car__driver__health_code",
|
||
# "kill_house_request__quantity",
|
||
# "kill_house_request__bar_code",
|
||
# "kill_house_request__quarantine_quantity",
|
||
# "kill_house_request__vet_state",
|
||
# "kill_house_request__assignment_state_archive",
|
||
# "kill_house_request__clearance_code",
|
||
# "kill_house_request__traffic_code",
|
||
# "kill_house_request__accepted_real_quantity",
|
||
# "kill_house_request__accepted_real_weight",
|
||
# "kill_house_request",
|
||
# "car_weight_without_load",
|
||
# "car_weight_without_load_image",
|
||
# "car_weight_with_load",
|
||
# "car_weight_with_load_image",
|
||
# "net_weight",
|
||
# "state",
|
||
# "real_quantity",
|
||
# "protest_time",
|
||
#
|
||
# # "allocated_car_state"
|
||
# )
|
||
# else:
|
||
# if request.GET['role'] == 'KillHouse':
|
||
# operator = KillHouseOperator.objects.get(user=user, trash=False)
|
||
# kill_house = KillHouse.objects.filter(kill_house_operator=operator, trash=False)
|
||
# else:
|
||
# vet = Vet.objects.get(user=user)
|
||
# kill_house_vet = KillHouseVet.objects.filter(vet=vet, trash=False)
|
||
# kill_house_list = [kill_house.kill_house.key for kill_house in kill_house_vet]
|
||
# kill_house = KillHouse.objects.filter(key__in=kill_house_list)
|
||
#
|
||
# kill_house_assignments = KillHouseAssignmentInformation.objects.filter(
|
||
# # state='pending',
|
||
# Q(car_weight_with_load_image__isnull=False) | Q(car_weight_without_load_image__isnull=False),
|
||
#
|
||
# kill_house_request__killhouse_user__in=kill_house,
|
||
# # car_weight_with_load_image__isnull=False,
|
||
# net_weight__gt=0,
|
||
# real_quantity__gt=0,
|
||
# trash=False,
|
||
# kill_house_request__kill_request__recive_date__date__gte=date1,
|
||
# kill_house_request__kill_request__recive_date__date__lte=date2,
|
||
# unusual_casualties=False).select_related(
|
||
# 'kill_house_request__province_request__poultry_request__hatching',
|
||
# 'kill_house_request__province_request__poultry_request__poultry',
|
||
# 'kill_house_request__province_request__poultry_request__poultry__user__city',
|
||
# 'kill_house_request__province_request__poultry_request__poultry__user__province',
|
||
# 'kill_house_request__province_request__poultry_request__poultry__user',
|
||
#
|
||
# 'kill_house_request__kill_request__kill_house',
|
||
# 'kill_house_request__kill_request__slaughter_house',
|
||
# 'kill_house_request__killhouse_user',
|
||
# 'kill_house_request__killhouse_user__kill_house_operator__user',
|
||
# 'kill_house_request__add_car__driver',
|
||
# 'kill_house_request__real_add_car__driver',
|
||
# ).values(
|
||
# "kill_house_request__province_request__poultry_request__poultry__user__province__name",
|
||
# "kill_house_request__province_request__poultry_request__poultry__user__city__name",
|
||
# "kill_house_request__province_request__poultry_request__poultry__user__fullname",
|
||
# "kill_house_request__province_request__poultry_request__poultry__user__mobile",
|
||
# "kill_house_request__province_request__poultry_request__poultry__unit_name",
|
||
# "kill_house_request__province_request__poultry_request__poultry__key",
|
||
# "kill_house_request__province_request__poultry_request__order_code",
|
||
# "kill_house_request__province_request__poultry_request__quantity",
|
||
# "kill_house_request__province_request__poultry_request__id",
|
||
# "kill_house_request__province_request__poultry_request__Index_weight",
|
||
# "kill_house_request__province_request__poultry_request__chicken_breed",
|
||
# "kill_house_request__province_request__poultry_request__create_date",
|
||
# "kill_house_request__province_request__poultry_request__send_date",
|
||
# "kill_house_request__province_request__poultry_request__cell_type",
|
||
# "kill_house_request__province_request__poultry_request__hatching__losses",
|
||
# "kill_house_request__province_request__poultry_request__hatching__date",
|
||
# "kill_house_request__killhouse_user",
|
||
# 'kill_house_request__kill_request__kill_house__name',
|
||
# 'kill_house_request__kill_request__slaughter_house__name',
|
||
# "kill_house_request__add_car__driver__driver_name",
|
||
# "kill_house_request__add_car__driver__driver_mobile",
|
||
# "kill_house_request__add_car__driver__type_car",
|
||
# "kill_house_request__add_car__driver__pelak",
|
||
# "kill_house_request__add_car__driver__health_code",
|
||
# "kill_house_request__real_add_car__driver__driver_name",
|
||
# "kill_house_request__real_add_car__driver__driver_mobile",
|
||
# "kill_house_request__real_add_car__driver__type_car",
|
||
# "kill_house_request__real_add_car__driver__pelak",
|
||
# "kill_house_request__real_add_car__driver__health_code",
|
||
# "kill_house_request__quantity",
|
||
# "kill_house_request__bar_code",
|
||
# "kill_house_request__quarantine_quantity",
|
||
# "kill_house_request__vet_state",
|
||
# "kill_house_request__assignment_state_archive",
|
||
# "kill_house_request__clearance_code",
|
||
# "kill_house_request__traffic_code",
|
||
# "kill_house_request__accepted_real_quantity",
|
||
# "kill_house_request__accepted_real_weight",
|
||
# "kill_house_request",
|
||
# "car_weight_without_load",
|
||
# "car_weight_without_load_image",
|
||
# "car_weight_with_load",
|
||
# "car_weight_with_load_image",
|
||
# "net_weight",
|
||
# "state",
|
||
# "real_quantity",
|
||
# "protest_time",
|
||
#
|
||
# # "allocated_car_state"
|
||
# )
|
||
#
|
||
# assignments_list_final_state = []
|
||
# allocation = ShareOfAllocation.objects.all()
|
||
# if allocation.count() > 0:
|
||
# allocation = allocation.last().total
|
||
# else:
|
||
# allocation = 0
|
||
# for request_data in kill_house_assignments:
|
||
# poultry_name_of_bank_user = None
|
||
# poultry_bank_name = None
|
||
# poultry_card = None
|
||
# poultry_account = None
|
||
# poultry_shaba = None
|
||
# province_name_of_bank_user = None
|
||
# province_bank_name = None
|
||
# province_card = None
|
||
# province_account = None
|
||
# province_shaba = None
|
||
# kill_house_vet = KillHouseVet.objects.filter(
|
||
# kill_house=request_data.get('kill_house_request__killhouse_user'), trash=False).select_related('vet__user').values(
|
||
# 'vet__user__fullname',
|
||
# 'vet__user__mobile',
|
||
# )
|
||
# if kill_house_vet.count() > 0:
|
||
# kill_house_vet = kill_house_vet.last()
|
||
# kill_house_vet_name = kill_house_vet.get('vet__user__fullname')
|
||
# kill_house_vet_mobile = kill_house_vet.get('vet__user__mobile')
|
||
# if request_data.get('kill_house_request__kill_request__slaughter_house') != None:
|
||
# kill_place = request_data.get('kill_house_request__kill_request__slaughter_house__name')
|
||
# else:
|
||
# kill_place = request_data.get('kill_house_request__kill_request__kill_house__name')
|
||
#
|
||
# vet_check = VetCheckRequest.objects.filter(
|
||
# kill_house_request=request_data.get('kill_house_request'), trash=False).select_related('kill_house_request').values('kill_house_request','create_date').first()
|
||
#
|
||
# vet_check_date = vet_check.get('create_date') if vet_check else None
|
||
# poultry = Poultry.objects.filter(
|
||
# key=request_data.get('kill_house_request__province_request__poultry_request__poultry__key'),
|
||
# trash=False).select_related('user_bank_info').values(
|
||
# 'user_bank_info',
|
||
# 'user_bank_info__name_of_bank_user',
|
||
# 'user_bank_info__bank_name',
|
||
# 'user_bank_info__card',
|
||
# 'user_bank_info__account',
|
||
# 'user_bank_info__shaba',
|
||
# ).first()
|
||
# if poultry.get('user_bank_info') != None:
|
||
# poultry_name_of_bank_user = poultry.get('user_bank_info__name_of_bank_user')
|
||
# poultry_bank_name = poultry.get('user_bank_info__bank_name')
|
||
# poultry_card = poultry.get('user_bank_info__card')
|
||
# poultry_account = poultry.get('user_bank_info__account')
|
||
# poultry_shaba = poultry.get('user_bank_info__shaba')
|
||
# operator = ProvinceOperator.objects.filter(trash=False).select_related('user_bank_info').values(
|
||
# 'user_bank_info',
|
||
# 'user_bank_info__name_of_bank_user',
|
||
# 'user_bank_info__bank_name',
|
||
# 'user_bank_info__card',
|
||
# 'user_bank_info__account',
|
||
# 'user_bank_info__shaba',
|
||
# )
|
||
# if operator.last().get('user_bank_info') != None:
|
||
# operator = operator.last()
|
||
# province_name_of_bank_user = operator.get('user_bank_info__name_of_bank_user')
|
||
# province_bank_name = operator.get('user_bank_info__bank_name')
|
||
# province_card = operator.get('user_bank_info__card')
|
||
# province_account = operator.get('user_bank_info__account')
|
||
# province_shaba = operator.get('user_bank_info__shaba')
|
||
#
|
||
# internal_dict = {
|
||
# "order_code": request_data.get('kill_house_request__province_request__poultry_request__order_code'),
|
||
# "poultry_province": request_data.get(
|
||
# 'kill_house_request__province_request__poultry_request__poultry__user__province__name'),
|
||
# "poultry_city": request_data.get(
|
||
# 'kill_house_request__province_request__poultry_request__poultry__user__city__name'),
|
||
# "poultry_fullname": request_data.get(
|
||
# 'kill_house_request__province_request__poultry_request__poultry__user__fullname'),
|
||
# "poultry_mobile": request_data.get(
|
||
# 'kill_house_request__province_request__poultry_request__poultry__user__mobile'),
|
||
# "poultry_name": request_data.get(
|
||
# 'kill_house_request__province_request__poultry_request__poultry__unit_name'),
|
||
# "poultry_key": request_data.get('kill_house_request__province_request__poultry_request__poultry__key'),
|
||
# "poultry_request_quantity": request_data.get(
|
||
# 'kill_house_request__province_request__poultry_request__quantity'),
|
||
# "poultry_request_id": request_data.get('kill_house_request__province_request__poultry_request__id'),
|
||
# "Index_weight": request_data.get('kill_house_request__province_request__poultry_request__Index_weight'),
|
||
# "chicken_breed": request_data.get(
|
||
# 'kill_house_request__province_request__poultry_request__chicken_breed'),
|
||
# "create_date": request_data.get('kill_house_request__province_request__poultry_request__create_date'),
|
||
# "send_date": request_data.get('kill_house_request__province_request__poultry_request__send_date'),
|
||
# "cell_type": request_data.get('kill_house_request__province_request__poultry_request__cell_type'),
|
||
# "losses": request_data.get('kill_house_request__province_request__poultry_request__hatching__losses'),
|
||
# "hatching__date": request_data.get(
|
||
# 'kill_house_request__province_request__poultry_request__hatching__date'),
|
||
# "driver_name": request_data.get('kill_house_request__add_car__driver__driver_name'),
|
||
# "driver_mobile": request_data.get('kill_house_request__add_car__driver__driver_mobile'),
|
||
# "type_car": request_data.get('kill_house_request__add_car__driver__type_car'),
|
||
# "pelak": request_data.get('kill_house_request__add_car__driver__pelak'),
|
||
# "health_code": request_data.get('kill_house_request__add_car__driver__health_code'),
|
||
# "real_driver_name": request_data.get('kill_house_request__real_add_car__driver__driver_name'),
|
||
# "real_driver_mobile": request_data.get('kill_house_request__real_add_car__driver__driver_mobile'),
|
||
# "real_type_car": request_data.get('kill_house_request__real_add_car__driver__type_car'),
|
||
# "real_pelak": request_data.get('kill_house_request__real_add_car__driver__pelak'),
|
||
# "real_health_code": request_data.get('kill_house_request__real_add_car__driver__health_code'),
|
||
# "quantity": request_data.get('kill_house_request__quantity'),
|
||
# "bar_code": request_data.get('kill_house_request__bar_code'),
|
||
# "quarantine_quantity": request_data.get('kill_house_request__quarantine_quantity'),
|
||
# "vet_state": request_data.get('kill_house_request__vet_state'),
|
||
# "assignment_state_archive": request_data.get('kill_house_request__assignment_state_archive'),
|
||
# "clearance_code": request_data.get('kill_house_request__clearance_code'),
|
||
# "traffic_code": request_data.get('kill_house_request__traffic_code'),
|
||
# "accepted_real_quantity": request_data.get('kill_house_request__accepted_real_quantity'),
|
||
# "accepted_real_weight": request_data.get('kill_house_request__accepted_real_weight'),
|
||
# "car_weight_without_load": request_data.get('car_weight_without_load'),
|
||
# "car_weight_without_load_image": request_data.get('car_weight_without_load_image'),
|
||
# "car_weight_with_load": request_data.get('car_weight_with_load'),
|
||
# "car_weight_with_load_image": request_data.get('car_weight_with_load_image'),
|
||
# "net_weight": request_data.get('net_weight'),
|
||
# "state": request_data.get('state'),
|
||
# "real_quantity": request_data.get('real_quantity'),
|
||
# "protest_time": request_data.get('protest_time'),
|
||
# "average_weight": request_data.get('net_weight') / request_data.get('real_quantity') ,
|
||
# "first_weight": request_data.get('kill_house_request__quantity') * request_data.get('kill_house_request__province_request__poultry_request__Index_weight') ,
|
||
# "poultry_name_of_bank_user": poultry_name_of_bank_user,
|
||
# "poultry_bank_name": poultry_bank_name,
|
||
# "poultry_card": poultry_card,
|
||
# "poultry_account": poultry_account,
|
||
# "poultry_shaba": poultry_shaba,
|
||
# "province_name_of_bank_user": province_name_of_bank_user,
|
||
# "province_bank_name": province_bank_name,
|
||
# "province_card": province_card,
|
||
# "province_account": province_account,
|
||
# "province_shaba": province_shaba,
|
||
# "kill_house_vet_name": kill_house_vet_name,
|
||
# "kill_house_vet_mobile": kill_house_vet_mobile,
|
||
# "kill_place": kill_place,
|
||
# "vet_check_date": vet_check_date,
|
||
# "allocation": allocation,
|
||
#
|
||
# }
|
||
#
|
||
# assignments_list_final_state.append(internal_dict)
|
||
# return Response(len(assignments_list_final_state), status=status.HTTP_200_OK)
|
||
class KillHouseAssignmentInformationForcompletedloadsViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseAssignmentInformation.objects.all()
|
||
serializer_class = KillHouseAssignmentInformationForCompletedLoadsSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
pagination_class = CustomPagination
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
now = datetime.now().date()
|
||
date1 = datetime.strptime(str(request.GET['date1']),
|
||
'%Y-%m-%d').date() if 'date1' in request.GET else now
|
||
date2 = datetime.strptime(str(request.GET['date2']),
|
||
'%Y-%m-%d').date() if 'date2' in request.GET else now
|
||
province = user.province.name
|
||
if request.GET['role'] in ('ProvinceFinancial', 'ProvinceOperator'):
|
||
kill_house_assignments = KillHouseAssignmentInformation.objects.filter(
|
||
Q(car_weight_with_load_image__isnull=False) | Q(car_weight_without_load_image__isnull=False),
|
||
kill_house_request__killhouse_user__kill_house_operator__address__province__name=province,
|
||
net_weight__gt=0,
|
||
real_quantity__gt=0,
|
||
kill_house_request__kill_request__recive_date__date__gte=date1,
|
||
kill_house_request__kill_request__recive_date__date__lte=date2,
|
||
trash=False)
|
||
else:
|
||
if request.GET['role'] == 'KillHouse':
|
||
operator = KillHouseOperator.objects.get(user=user, trash=False)
|
||
kill_house = KillHouse.objects.filter(kill_house_operator=operator, trash=False)
|
||
else:
|
||
vet = Vet.objects.get(user=user)
|
||
kill_house_vet = KillHouseVet.objects.filter(vet=vet, trash=False)
|
||
kill_house_list = [kill_house.kill_house.key for kill_house in kill_house_vet]
|
||
kill_house = KillHouse.objects.filter(key__in=kill_house_list)
|
||
|
||
kill_house_assignments = KillHouseAssignmentInformation.objects.filter(
|
||
# state='pending',
|
||
Q(car_weight_with_load_image__isnull=False) | Q(car_weight_without_load_image__isnull=False),
|
||
|
||
kill_house_request__killhouse_user__in=kill_house,
|
||
# car_weight_with_load_image__isnull=False,
|
||
net_weight__gt=0,
|
||
real_quantity__gt=0,
|
||
trash=False,
|
||
kill_house_request__kill_request__recive_date__date__gte=date1,
|
||
kill_house_request__kill_request__recive_date__date__lte=date2,
|
||
unusual_casualties=False)
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(kill_house_assignments)
|
||
if page is not None:
|
||
serializer = self.get_serializer(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
serializer = self.serializer_class(kill_house_assignments, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
# ویوست مربوط به وارد کردن اطلاعات بار توسط کشتارگاه
|
||
class KillHouseAssignmentInformationViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseAssignmentInformation.objects.all()
|
||
serializer_class = KillHouseAssignmentInformationSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
pagination_class = CustomPagination
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = KillHouseRequestFilterSet
|
||
filterset_fields = [
|
||
'killhouse_user__kill_house_operator__user__fullname',
|
||
'killhouse_user__kill_house_operator__user__mobile',
|
||
'province_request__poultry_request__poultry__user__fullname',
|
||
'province_request__poultry_request__poultry__user__mobile',
|
||
'province_request__poultry_request__order_code',
|
||
'bar_code',
|
||
'bar_document_status__title',
|
||
]
|
||
|
||
# تابع مربوط به وارد کردن اطلاعات بار توسط کشتارگاه
|
||
|
||
def create(self, request, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
pic = []
|
||
dict1 = {}
|
||
role = request.data['role']
|
||
request.data.pop('role')
|
||
date_time_of_now = datetime.now().date()
|
||
kill_house_request = KillHouseRequest.objects.get(key=request.data['kill_house_request_key'], trash=False)
|
||
province_kill_request = ProvinceKillRequest.objects.get(key=kill_house_request.province_kill_request.key)
|
||
if OperationLimitation.objects.all().first().vet_check_kill_house_assignment_limitation == True:
|
||
if kill_house_request.vet_state == 'pending':
|
||
return Response({"result": "به علت عدم تایید تخلیه دامپزشک کشتارگاه امکان ثبت اطلاعات وجود ندارد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
if OperationLimitation.objects.all().first().kill_house_assignment_limitation == True:
|
||
if date_time_of_now > kill_house_request.kill_request.recive_date.date() + timedelta(days=1):
|
||
return Response({"result": "به علت مغایرت در تاریخ ثبت و تاریخ کشتار امکان ثبت اطلاعات وجود ندارد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
# if kill_house_request.vet_state == 'pending':
|
||
# return Response({"result": "بار توسط دامپزشک تخلیه نشده است !"}, status=status.HTTP_403_FORBIDDEN)
|
||
if kill_house_request.province_kill_request != None:
|
||
kill_house_check = KillHouseCheckRequest.objects.get(
|
||
province_kill_request__key=kill_house_request.province_kill_request.key)
|
||
else:
|
||
kill_house_check = None
|
||
# if 'car_without_load_image' in request.data.keys() and 'car_with_load_image' in request.data.keys():
|
||
# if request.data['car_without_load_image'] != None and request.data['car_with_load_image'] != None:
|
||
# car_without_load_image = request.data['car_without_load_image']
|
||
# car_with_load_image = request.data['car_with_load_image']
|
||
# pic.append(car_without_load_image)
|
||
# pic.append(car_with_load_image)
|
||
# request.data.pop('car_without_load_image')
|
||
# request.data.pop('car_with_load_image')
|
||
|
||
if 'car_with_load_image' in request.data.keys():
|
||
if request.data['car_with_load_image'] != None:
|
||
car_with_load_image = request.data['car_with_load_image']
|
||
pic.append(car_with_load_image)
|
||
request.data.pop('car_with_load_image')
|
||
|
||
request.data.pop('kill_house_request_key')
|
||
|
||
if KillHouseAssignmentInformation.objects.filter(kill_house_request=kill_house_request).exists():
|
||
return Response({'result': 'already exist'}, status=status.HTTP_403_FORBIDDEN)
|
||
if 'killer_key' in request.data.keys():
|
||
if request.data['killer_key'] != None:
|
||
killer = KillHouse.objects.get(key=request.data['killer_key'])
|
||
kill_house_request.killer = killer
|
||
request.data.pop('killer_key')
|
||
serializer = self.serializer_class(data=request.data)
|
||
if serializer.is_valid():
|
||
assignment_info = serializer.create(validated_data=request.data)
|
||
if kill_house_check != None:
|
||
assignment_info.kill_house_check = kill_house_check
|
||
assignment_info.kill_house_request = kill_house_request
|
||
if len(pic) > 0:
|
||
for p in pic:
|
||
ran = ''.join(random.choices(string.ascii_uppercase + string.digits, k=15))
|
||
# upload_object_resize(image_data=p, bucket_name="profileimagedefault",
|
||
# object_name="{0}.jpg".format(str(ran)))
|
||
# if p == car_without_load_image:
|
||
# assignment_info.car_weight_without_load_image = ARVAN_Kill_house_URL + "{0}.jpg".format(
|
||
# str(ran))
|
||
# # os.remove("{0}.jpg".format(str(ran)))
|
||
# else:
|
||
# assignment_info.car_weight_with_load_image = ARVAN_Kill_house_URL + "{0}.jpg".format(str(ran))
|
||
assignment_info.car_weight_with_load_image = send_image_to_server(p)
|
||
# os.remove("{0}.jpg".format(str(ran)))
|
||
kill_house_request.assignment_state_archive = 'True'
|
||
kill_house_request.save()
|
||
if role == 'Poultry':
|
||
dict1.update({
|
||
"Poultry": True,
|
||
"CityOperator": False,
|
||
"ProvinceOperator": False,
|
||
"ProvinceFinancial": False,
|
||
"KillHouse": False,
|
||
})
|
||
elif role == 'CityOperator':
|
||
dict1.update({
|
||
"Poultry": False,
|
||
"CityOperator": True,
|
||
"ProvinceOperator": False,
|
||
"ProvinceFinancial": False,
|
||
"KillHouse": False,
|
||
})
|
||
elif role == 'ProvinceFinancial':
|
||
dict1.update({
|
||
"Poultry": False,
|
||
"CityOperator": False,
|
||
"ProvinceOperator": False,
|
||
"ProvinceFinancial": True,
|
||
"KillHouse": False,
|
||
})
|
||
elif role == 'ProvinceOperator':
|
||
dict1.update({
|
||
"Poultry": False,
|
||
"CityOperator": False,
|
||
"ProvinceOperator": True,
|
||
"ProvinceFinancial": False,
|
||
"KillHouse": False,
|
||
})
|
||
else:
|
||
dict1.update({
|
||
"Poultry": False,
|
||
"CityOperator": False,
|
||
"ProvinceOperator": False,
|
||
"ProvinceFinancial": False,
|
||
"KillHouse": True,
|
||
})
|
||
assignment_info.importer = dict1
|
||
now = datetime.now()
|
||
houre = PercentageOfLosses.objects.all()
|
||
if houre.count() > 0:
|
||
houre = houre.last().houre
|
||
assignment_info.protest_time = now + timedelta(hours=int(houre))
|
||
assignment_info.net_weight = float(assignment_info.car_weight_with_load) - float(
|
||
assignment_info.car_weight_without_load)
|
||
assignment_info.save()
|
||
kill_house_request.active_state = 'inactive'
|
||
poultry = PoultryRequest.objects.get(
|
||
key=kill_house_request.province_request.city_request_Poultry.poultry_request.key)
|
||
poultry.assignment = True
|
||
poultry.save()
|
||
kill_house_request.accepted_real_quantity = assignment_info.real_quantity
|
||
kill_house_request.accepted_real_weight = assignment_info.net_weight
|
||
kill_house_request.accepted_assignment_real_quantity = assignment_info.real_quantity
|
||
kill_house_request.accepted_assignment_real_weight = assignment_info.net_weight
|
||
kill_house_request.save()
|
||
hatching = PoultryHatching.objects.get(key=poultry.hatching.key)
|
||
update_kill_house_requests(province_kill_request, poultry)
|
||
update_province_kill_requests(hatching)
|
||
poultry_prediction(hatching.poultry)
|
||
kill_house_request.accepted_real_quantity = assignment_info.real_quantity
|
||
kill_house_request.accepted_real_weight = assignment_info.net_weight
|
||
kill_house_request.save()
|
||
assignment_info_serializer = self.serializer_class(assignment_info)
|
||
return Response(assignment_info_serializer.data, status=status.HTTP_201_CREATED)
|
||
|
||
return Response(serializer.errors, status=status.HTTP_403_FORBIDDEN)
|
||
|
||
# تابع مربوط به نمایش اطلاعات بار وارد شده توسط کشتارگاه
|
||
def list(self, request, *args, **kwargs):
|
||
user = SystemUserProfile.objects.get(user=request.user)
|
||
# user = SystemUserProfile.objects.get(user=request.user)
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
kill_house = []
|
||
kill_house_requests_list = []
|
||
|
||
if request.GET['role'] == 'KillHouse':
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False)
|
||
|
||
elif request.GET['role'] == 'KillHouseVet':
|
||
kill_house_vets = KillHouseVet.objects.filter(vet__user=user, trash=False).select_related('kill_house')
|
||
for kill_house_vet in kill_house_vets:
|
||
kill_house.append(kill_house_vet.kill_house)
|
||
|
||
else:
|
||
kill_house = KillHouse.objects.filter(system_address__province=user.province, trash=False)
|
||
|
||
if request.GET['role'] in ['CityOperator', 'CityJahad', 'CityPoultry']:
|
||
if request.GET['role'] == 'CityOperator':
|
||
city_operator = CityOperator.objects.get(user=user, trash=False)
|
||
if 'without_bar_document' in request.GET and request.GET['without_bar_document'] == "true":
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
(Q(killhouse_user__in=kill_house) | Q(kill_request__slaughter_house__in=kill_house)),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
assignment_state_archive='True',
|
||
bar_document_status__isnull=True,
|
||
non_receipt=False,
|
||
trash=False, province_request__poultry_request__poultry__city_operator=city_operator.unit_name,
|
||
|
||
).order_by('-kill_request__recive_date')
|
||
else:
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
(Q(killhouse_user__in=kill_house) | Q(kill_request__slaughter_house__in=kill_house)),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
assignment_state_archive='True',
|
||
non_receipt=False,
|
||
trash=False, province_request__poultry_request__poultry__city_operator=city_operator.unit_name,
|
||
|
||
).order_by('-kill_request__recive_date')
|
||
else:
|
||
if 'without_bar_document' in request.GET and request.GET['without_bar_document'] == "true":
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
(Q(killhouse_user__in=kill_house) | Q(kill_request__slaughter_house__in=kill_house)),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
assignment_state_archive='True',
|
||
bar_document_status__isnull=True,
|
||
non_receipt=False,
|
||
trash=False, province_request__poultry_request__poultry__address__city=user.city
|
||
|
||
).order_by('-kill_request__recive_date')
|
||
else:
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
(Q(killhouse_user__in=kill_house) | Q(kill_request__slaughter_house__in=kill_house)),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
assignment_state_archive='True',
|
||
non_receipt=False,
|
||
trash=False, province_request__poultry_request__poultry__address__city=user.city
|
||
|
||
).order_by('-kill_request__recive_date')
|
||
|
||
else:
|
||
|
||
if 'without_bar_document' in request.GET and request.GET['without_bar_document'] == "true":
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
(Q(killhouse_user__in=kill_house) | Q(kill_request__slaughter_house__in=kill_house) | Q(
|
||
killer__in=kill_house)),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
assignment_state_archive='True',
|
||
bar_document_status__isnull=True,
|
||
non_receipt=False,
|
||
trash=False,
|
||
|
||
).order_by('-kill_request__recive_date')
|
||
else:
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
(Q(killhouse_user__in=kill_house) | Q(kill_request__slaughter_house__in=kill_house) | Q(
|
||
killer__in=kill_house)),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
assignment_state_archive='True',
|
||
non_receipt=False,
|
||
trash=False,
|
||
|
||
).order_by('-kill_request__recive_date')
|
||
|
||
if 'search' in request.GET:
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=kill_house_requests
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=kill_house_requests)
|
||
kill_house_requests_list = ps.filter()
|
||
kill_house_requests = [] if len(kill_house_requests_list) == 0 else kill_house_requests_list
|
||
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(kill_house_requests)
|
||
if page is not None:
|
||
serializer = KillHouseRequestForBarManagementSerializer(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = KillHouseRequestForBarManagementSerializer(kill_house_requests, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
# تابع مربوط به نمایش اطلاعات بار وارد شده توسط کشتارگاه
|
||
def update(self, request, pk=None, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
|
||
role = request.data['role']
|
||
request.data.pop('role')
|
||
kill_house_assignment = KillHouseAssignmentInformation.objects.get(key=request.data['key'], trash=False)
|
||
if kill_house_assignment.state == 'accepted':
|
||
return Response({"result": "به علت تایید اطلاعات از سمت استان امکان ویرایش وجود ندارد!"})
|
||
kill_house_request = KillHouseRequest.objects.get(key=kill_house_assignment.kill_house_request.key)
|
||
province_kill_request = ProvinceKillRequest.objects.get(key=kill_house_request.province_kill_request.key)
|
||
poultry_request = PoultryRequest.objects.get(key=province_kill_request.province_request.poultry_request.key)
|
||
date_time_of_now = datetime.now().date()
|
||
if OperationLimitation.objects.all().first().kill_house_assignment_limitation == True:
|
||
|
||
if date_time_of_now > kill_house_request.kill_request.recive_date.date() + timedelta(days=1):
|
||
return Response({"result": "به علت مغایرت در تاریخ ثبت و تاریخ کشتار امکان ثبت اطلاعات وجود ندارد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
hatching = PoultryHatching.objects.get(key=poultry_request.hatching.key)
|
||
car_with_load_image = request.data['car_with_load_image']
|
||
request.data.pop('key')
|
||
|
||
request.data.pop('car_with_load_image')
|
||
if 'killer_key' in request.data.keys():
|
||
if request.data['killer_key'] != None:
|
||
killer = KillHouse.objects.get(key=request.data['killer_key'])
|
||
kill_house_request.killer = killer
|
||
request.data.pop('killer_key')
|
||
|
||
pic = []
|
||
# if 'car_without_load_image' in request.data.keys():
|
||
# car_without_load_image = request.data['car_without_load_image']
|
||
# request.data.pop('car_without_load_image')
|
||
# pic.append(car_without_load_image)
|
||
pic.append(car_with_load_image)
|
||
|
||
for p in pic:
|
||
ran = ''.join(random.choices(string.ascii_uppercase + string.digits, k=15))
|
||
# upload_object_resize(image_data=p, bucket_name="profileimagedefault",
|
||
# object_name="{0}.jpg".format(str(ran)))
|
||
# if p == car_without_load_image:
|
||
# kill_house_assignment.car_weight_without_load_image = ARVAN_Kill_house_URL + "{0}.jpg".format(str(ran))
|
||
# # os.remove("{0}.jpg".format(str(ran)))
|
||
#
|
||
# else:
|
||
# kill_house_assignment.car_weight_with_load_image = ARVAN_Kill_house_URL + "{0}.jpg".format(str(ran))
|
||
kill_house_assignment.car_weight_with_load_image = send_image_to_server(p)
|
||
# os.remove("{0}.jpg".format(str(ran)))
|
||
kill_house_assignment.state = 'pending'
|
||
if role == 'Poultry':
|
||
kill_house_assignment.poultry_update = True
|
||
elif role == 'CityOperator':
|
||
kill_house_assignment.city_update = True
|
||
elif role == 'ProvinceFinancial':
|
||
kill_house_assignment.province_update = True
|
||
|
||
kill_house_assignment.state = 'pending'
|
||
kill_house_assignment.net_weight = request.data['car_weight_with_load'] - request.data[
|
||
'car_weight_without_load']
|
||
kill_house_assignment.save()
|
||
kill_house_request.accepted_real_quantity = request.data['real_quantity']
|
||
kill_house_request.accepted_real_weight = request.data['car_weight_with_load'] - request.data[
|
||
'car_weight_without_load']
|
||
kill_house_request.accepted_assignment_real_quantity = int(request.data['real_quantity'])
|
||
kill_house_request.accepted_assignment_real_weight = request.data['car_weight_with_load'] - request.data[
|
||
'car_weight_without_load']
|
||
kill_house_request.assignment_state_archive = 'True'
|
||
kill_house_request.save()
|
||
hatching = PoultryHatching.objects.get(key=poultry_request.hatching.key)
|
||
update_kill_house_requests(province_kill_request, poultry_request)
|
||
update_province_kill_requests(hatching)
|
||
poultry_prediction(hatching.poultry)
|
||
serializer = self.serializer_class(kill_house_assignment)
|
||
serializer.update(instance=kill_house_assignment, validated_data=request.data)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
# ویوست مربوط به ایجاد و ویرایش و جذف و نمایش فاکتور از سمت استان برای کشتارگاه
|
||
class ProvinceFactorToKillHouseViewSet(viewsets.ModelViewSet):
|
||
queryset = ProvinceFactorToKillHouse.objects.all()
|
||
serializer_class = ProvinceFactorToKillHouseSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
|
||
# ویوست مربوط به ایجاد و ویرایش و جذف و نمایش نماینده دامپزشکی برای کشتارگاه
|
||
class VetViewSet(viewsets.ModelViewSet):
|
||
queryset = Vet.objects.all()
|
||
serializer_class = VetSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = VetFilterSet
|
||
pagination_class = CustomPagination
|
||
filterset_fields = [
|
||
'user__national_id',
|
||
'user__base_order',
|
||
'user__mobile',
|
||
|
||
]
|
||
|
||
# تابع مربوط به ایجاد نماینده دامپزشکی برای کشتارگاه
|
||
def create(self, request, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
|
||
user = UserProfile.objects.get(key=request.data['user_key'], trash=False)
|
||
kill_house = KillHouse.objects.get(key=request.data['kill_house_key'], trash=False)
|
||
request.data.pop('user_key')
|
||
request.data.pop('kill_house_key')
|
||
serializer = self.serializer_class(data=request.data)
|
||
if serializer.is_valid():
|
||
vet = serializer.create(validated_data=request.data)
|
||
vet.kill_house = kill_house
|
||
vet.user = user
|
||
vet.save()
|
||
vet_serializer = self.serializer_class(vet)
|
||
return Response(vet_serializer.data, status=status.HTTP_201_CREATED)
|
||
|
||
return Response(serializer.errors, status=status.HTTP_403_FORBIDDEN)
|
||
|
||
def retrieve(self, request, pk=None, *args, **kwargs):
|
||
|
||
# refresh(request.user.id)
|
||
|
||
if 'kill_house_info' in request.GET:
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
vet = Vet.objects.get(user=user, trash=False)
|
||
kill_house_vet = KillHouseVet.objects.filter(vet=vet)
|
||
if kill_house_vet.count() > 0:
|
||
kill_house_vet = kill_house_vet.last()
|
||
profile_info = {
|
||
'kill_house_name': kill_house_vet.kill_house.name,
|
||
'kill_house_user': kill_house_vet.kill_house.kill_house_operator.user.fullname,
|
||
'kill_house_mobile': kill_house_vet.kill_house.kill_house_operator.user.mobile,
|
||
'kill_house_city': kill_house_vet.kill_house.kill_house_operator.user.city.name,
|
||
'kill_house_province': kill_house_vet.kill_house.kill_house_operator.user.province.name,
|
||
}
|
||
return Response(profile_info, status=status.HTTP_200_OK)
|
||
|
||
if 'profile' in request.GET:
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
user_serializer = SystemUserProfileSerializer(user)
|
||
vet = Vet.objects.get(user=user, trash=False)
|
||
vet_serializer = VetSerializer(vet)
|
||
vet_farm = VetFarm.objects.filter(vet=vet, trash=False)
|
||
serializer = VetFarmSerializer(vet_farm, many=True)
|
||
kill_house_vet = KillHouseVet.objects.filter(vet=vet)
|
||
if kill_house_vet.count() > 0:
|
||
kill_house_vet_serializer = KillHouseVetSerializer(kill_house_vet.last())
|
||
profile_info = {
|
||
# 'profile': user_serializer.data,
|
||
'vet': vet_serializer.data,
|
||
'kill_house_vet': kill_house_vet_serializer.data
|
||
}
|
||
else:
|
||
|
||
profile_info = {
|
||
# 'profile': user_serializer.data,
|
||
'vet': vet_serializer.data
|
||
# 'vet_farms':serializer.data
|
||
}
|
||
return Response(profile_info, status=status.HTTP_200_OK)
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
value = request.GET.get('value')
|
||
search = request.GET.get('search')
|
||
vet_farm_flag = request.GET.get('vet_farm')
|
||
|
||
excluded_ids = set()
|
||
if vet_farm_flag:
|
||
if vet_farm_flag == 'true':
|
||
excluded_ids = set(VetFarm.objects.filter(trash=False).values_list('vet__id', flat=True).distinct())
|
||
elif vet_farm_flag == 'false':
|
||
excluded_ids = set(
|
||
KillHouseVet.objects.filter(trash=False).values_list('vet__id', flat=True).distinct())
|
||
else:
|
||
vet_farm_ids = set(VetFarm.objects.filter(trash=False).values_list('vet__id', flat=True).distinct())
|
||
kill_house_ids = set(KillHouseVet.objects.filter(trash=False).values_list('vet__id', flat=True).distinct())
|
||
excluded_ids = vet_farm_ids.union(kill_house_ids)
|
||
|
||
vets = Vet.objects.filter(trash=False)
|
||
if vet_farm_flag:
|
||
vets = vets.filter(id__in=excluded_ids)
|
||
else:
|
||
vets = vets.exclude(id__in=excluded_ids)
|
||
|
||
if value and search == 'filter' and value.strip() and value != 'undefined':
|
||
vets = vets.filter(build_query(VetFarmAndKillHouseFilterSet, value))
|
||
|
||
page_size = request.query_params.get('page_size')
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(vets)
|
||
if page is not None:
|
||
serializer_class = (
|
||
VetFarmListSerializer if vet_farm_flag == 'true' else VetKillHouseSerializer
|
||
if vet_farm_flag == 'false' else VetSerializer
|
||
)
|
||
serializer = serializer_class(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = VetKillHouseSerializer(vets, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHouseVetViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseVet.objects.all()
|
||
serializer_class = KillHouseVetSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def create(self, request, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
if 'role' in request.data.keys():
|
||
if request.data['role'] == 'ProvinceInspector' or request.data['role'] == 'ProvinceOperator':
|
||
user = SystemUserProfile.objects.get(key=request.data['user_key'])
|
||
vet = Vet.objects.get(user=user, trash=False)
|
||
request.data.pop('user_key')
|
||
request.data.pop('role')
|
||
|
||
|
||
else:
|
||
request.data.pop('role')
|
||
user = SystemUserProfile.objects.get(user=request.user)
|
||
vet = Vet.objects.get(user=user, trash=False)
|
||
kill_house = KillHouse.objects.get(key=request.data['key'])
|
||
request.data.pop('key')
|
||
serializer = self.serializer_class(data=request.data)
|
||
if serializer.is_valid():
|
||
kill_house_vet = serializer.create(validated_data=request.data)
|
||
kill_house_vet.vet = vet
|
||
kill_house_vet.kill_house = kill_house
|
||
kill_house_vet.save()
|
||
kill_house_vet_serializer = self.serializer_class(kill_house_vet)
|
||
return Response(kill_house_vet_serializer.data, status=status.HTTP_201_CREATED)
|
||
return Response({"result": "مشکلی پیش آمذه است !"}, status=status.HTTP_403_FORBIDDEN)
|
||
|
||
def destroy(self, request, pk=None, *args, **kwargs):
|
||
try:
|
||
user = SystemUserProfile.objects.get(key=request.GET['user_key'])
|
||
vet = Vet.objects.get(user=user, trash=False)
|
||
kill_house = KillHouse.objects.get(key=request.GET['key'])
|
||
kill_house_vet = KillHouseVet.objects.get(kill_house=kill_house, vet=vet, trash=False)
|
||
kill_house_vet.trash = True
|
||
kill_house_vet.save()
|
||
|
||
return Response(status=status.HTTP_200_OK)
|
||
except:
|
||
return Response({"result": "مشکلی پیش آمده است !"}, status=status.HTTP_403_FORBIDDEN)
|
||
|
||
|
||
# ویوست مربوط به تایید یا رد بار رسیده به کشتارگاه توسط نماینده دامپزشکی
|
||
class VetCheckRequestViewSet(viewsets.ModelViewSet):
|
||
queryset = VetCheckRequest.objects.all()
|
||
serializer_class = VetCheckRequestSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
# تابع مربوط به تایید یا رد بار رسیده به کشتارگاه توسط نماینده دامپزشکی
|
||
def create(self, request, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
user = SystemUserProfile.objects.get(user=request.user)
|
||
vet = Vet.objects.get(user=user, trash=False)
|
||
kill_house_vet = KillHouseVet.objects.filter(vet=vet, trash=False).last()
|
||
kill_house_req = KillHouseRequest.objects.get(key=request.data['kill_house_request_key'], trash=False)
|
||
evacuation_permit = EvacuationPermit.objects.all().first()
|
||
if evacuation_permit:
|
||
if evacuation_permit.type == 'force':
|
||
if kill_house_req.clearance_code == None:
|
||
return Response(
|
||
{"result": "قبل از ورود کد قرنطینه توسط دامپزشک فارم امکان تایید تخلیه وجود ندارد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
if OperationLimitation.objects.all().first().kill_house_vet_limitation == True:
|
||
|
||
if kill_house_req.assignment_state_archive == 'True':
|
||
return Response({"result": "به علت ورود اطلاعات بار امکان تایید تخلیه وجود ندارد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
province_kill_request = ProvinceKillRequest.objects.get(key=kill_house_req.province_kill_request.key,
|
||
trash=False)
|
||
if int(request.data['accepted_real_quantity']) > 0 and request.data['accepted_real_weight'] > 0:
|
||
kill_house_req.accepted_real_quantity = int(request.data['accepted_real_quantity'])
|
||
kill_house_req.accepted_real_weight = request.data['accepted_real_weight']
|
||
kill_house_req.vet_accepted_real_quantity = int(request.data['accepted_real_quantity'])
|
||
kill_house_req.vet_accepted_real_weight = request.data['accepted_real_weight']
|
||
kill_house_req.save()
|
||
|
||
poultry_request = PoultryRequest.objects.get(key=province_kill_request.province_request.poultry_request.key)
|
||
hatching = PoultryHatching.objects.get(key=poultry_request.hatching.key)
|
||
request.data.pop('kill_house_request_key')
|
||
if 'accepted_real_quantity' in request.data.keys() and 'accepted_real_weight' in request.data.keys():
|
||
if request.data['accepted_real_quantity'] != None and request.data['accepted_real_weight'] != None:
|
||
if int(request.data['accepted_real_quantity']) > 0 and request.data['accepted_real_weight'] > 0:
|
||
if kill_house_req.assignment_state_archive == 'pending' and kill_house_req.accepted_assignment_real_quantity == 0:
|
||
update_kill_house_requests(province_kill_request, poultry_request)
|
||
update_province_kill_requests(hatching)
|
||
poultry_prediction(hatching.poultry)
|
||
|
||
# kill_house_req.accepted_real_quantity = int(request.data['accepted_real_quantity'])
|
||
kill_house_req.vet_accepted_real_quantity = int(request.data['accepted_real_quantity'])
|
||
|
||
request.data.pop('accepted_real_quantity')
|
||
if 'accepted_real_weight' in request.data.keys():
|
||
if request.data['accepted_real_weight'] != None:
|
||
# kill_house_req.accepted_real_weight = request.data['accepted_real_weight']
|
||
kill_house_req.vet_accepted_real_weight = request.data['accepted_real_weight']
|
||
request.data.pop('accepted_real_weight')
|
||
serializer = self.serializer_class(data=request.data)
|
||
if serializer.is_valid():
|
||
vet_check = serializer.create(validated_data=request.data)
|
||
vet_check.kill_house_request = kill_house_req
|
||
if vet_check.state == 'accepted':
|
||
kill_house_req.vet_state = 'accepted'
|
||
kill_house_req.active_state = 'inactive'
|
||
kill_house_req.save()
|
||
else:
|
||
kill_house_req.vet_state = 'rejected'
|
||
kill_house_req.active_state = 'inactive'
|
||
kill_house_req.save()
|
||
|
||
vet_check.kill_house_vet = kill_house_vet
|
||
vet_check.save()
|
||
vet_check_serializer = self.serializer_class(vet_check)
|
||
return Response(vet_check_serializer.data, status=status.HTTP_201_CREATED)
|
||
|
||
return Response(serializer.errors, status=status.HTTP_403_FORBIDDEN)
|
||
|
||
|
||
# ویوست مربوط به ایجاد نمایش و ویرایش و حذف درخواست بورسی کشتارگاه
|
||
class KillHouseRequestExchangeViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseRequestExchange.objects.all()
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
serializer_class = KillHouseRequestExchangeSerializer
|
||
|
||
# تابع مربوط به ایجاد درخواست بورسی کشتارگاه
|
||
def create(self, request, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
user = UserProfile.objects.get(user=request.user, trash=False)
|
||
kill_house = KillHouse.objects.get(user=user, trash=False)
|
||
serializer = self.serializer_class(data=request.data)
|
||
if serializer.is_valid():
|
||
kill_house_request_exchange = serializer.create(validated_data=request.data)
|
||
kill_house_request_exchange.user = user
|
||
kill_house_request_exchange.kill_house = kill_house
|
||
kill_house_request_exchange.save()
|
||
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
||
return Response(serializer.errors)
|
||
|
||
|
||
# ویوست مربوط به ایجاد نمایش و ویرایش و حذف درخواست بورسی رزرو شده کشتارگاه
|
||
class KillHouseRequestExchangeReserveViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseRequestExchangeReserve.objects.all()
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
serializer_class = KillHouseRequestExchangeReserveSerializer
|
||
|
||
# تابع مربوط به ایجاد درخواست بورسی رزرو شده کشتارگاه
|
||
def create(self, request, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
user = UserProfile.objects.get(user=request.user, trash=False)
|
||
kill_house = KillHouse.objects.get(user=user, trash=False)
|
||
poultry_exchange = PoultryRequestExchange.objects.get(key=request.data['key'], trash=False)
|
||
serializer = self.serializer_class(data=request.data)
|
||
if serializer.is_valid():
|
||
kill_house_request_exchange_reserve = serializer.create(validated_data=request.data)
|
||
kill_house_request_exchange_reserve.poultry_exchange = poultry_exchange
|
||
kill_house_request_exchange_reserve.kill_house = kill_house
|
||
kill_house_request_exchange_reserve.save()
|
||
poultry_exchange.state = 'reserved'
|
||
poultry_exchange.save()
|
||
|
||
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
||
return Response(serializer.errors)
|
||
|
||
|
||
# ویوست مربوط به ایجاد نمایش و ویرایش و حذف درخواست بورسی رزرو شده کشتارگاه
|
||
class KillHouseRequestActionViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseRequestAction.objects.all()
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
serializer_class = KillHouseRequestActionSerializer
|
||
|
||
def create(self, request, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
kill_house = KillHouse.objects.get(kill_house_operator__user=user, trash=False)
|
||
poultry_request = PoultryRequest.objects.get(key=request.data['key'], trash=False)
|
||
request.data.pop('key')
|
||
serializer = self.serializer_class(data=request.data)
|
||
if serializer.is_valid():
|
||
kill_house_auction = serializer.create(validated_data=request.data)
|
||
kill_house_auction.kill_house = kill_house
|
||
kill_house_auction.poultry_request = poultry_request
|
||
kill_house_auction.date = datetime.now() + timedelta(minutes=10)
|
||
kill_house_auction.save()
|
||
kill_house_auction_serializer = self.serializer_class(kill_house_auction)
|
||
return Response(kill_house_auction_serializer.data, status=status.HTTP_201_CREATED)
|
||
return Response(serializer.errors)
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
kill_house_operator = KillHouseOperator.objects.get(user=user, trash=False)
|
||
kill_house = KillHouse.objects.get(kill_house_operator=kill_house_operator, trash=False)
|
||
queryset = KillHouseRequestAction.objects.filter(kill_house=kill_house, trash=False)
|
||
# queryset = WareHouseFactor.objects.all().order_by('-create_date')
|
||
serializer = KillHouseRequestActionSerializer(queryset, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
def destroy(self, request, pk=None, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
queryset = KillHouseRequestAction.objects.get(key__exact=request.GET["key"], trash=False)
|
||
now = datetime.now()
|
||
if now.hour <= queryset.date.hour and now.minute <= queryset.date.minute:
|
||
queryset.delete()
|
||
return Response({"result": "object deleted"}, status=status.HTTP_200_OK)
|
||
else:
|
||
return Response({"result": "object can not deleted"}, status=status.HTTP_403_FORBIDDEN)
|
||
|
||
|
||
# ویوست مربوط به ایجاد نمایش و ویرایش و حذف درخواست بورسی رزرو شده کشتارگاه
|
||
class KillHouseRequestActionWinnerViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseRequestActionWinner.objects.all()
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
serializer_class = KillHouseRequestActionWinnerSerializer
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
kill_house_operator = KillHouseOperator.objects.get(user=user, trash=False)
|
||
kill_house = KillHouse.objects.get(kill_house_operator=kill_house_operator, trash=False)
|
||
queryset = KillHouseRequestActionWinner.objects.filter(kill_house_request_auction__kill_house=kill_house,
|
||
trash=False)
|
||
# queryset = WareHouseFactor.objects.all().order_by('-create_date')
|
||
serializer = KillHouseRequestActionWinnerSerializer(queryset, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
# ویوست مربوط به ایجاد نمایش و ویرایش و ... اضافه کردن ماشین به درخواست بورسی رزرو شده تایید شده کشتارگاه
|
||
class KillHouseRequestExchangeAddCarViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseRequestExchangeAddCar.objects.all()
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
serializer_class = KillHouseRequestExchangeAddCarSerializer
|
||
|
||
# تابع مربوط به اضافه کردن ماشین به درخواست بورسی رزرو شده تایید شده کشتارگاه
|
||
def create(self, request, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
kill_house_reserve = KillHouseRequestExchangeReserve.objects.get(key=request.data['key'], trash=False)
|
||
serializer = self.serializer_class(data=request.data)
|
||
if serializer.is_valid():
|
||
kill_house_request_exchange_add_car = serializer.create(validated_data=request.data)
|
||
kill_house_request_exchange_add_car.kill_house_reserve = kill_house_reserve
|
||
kill_house_request_exchange_add_car.save()
|
||
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
||
return Response(serializer.errors)
|
||
|
||
|
||
class DriverViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseDriver.objects.all()
|
||
serializer_class = KillHouseDriverSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
"""
|
||
Show Driver Cars Information
|
||
"""
|
||
if 'my_car' in request.GET:
|
||
# get user object
|
||
userprofile = SystemUserProfile.objects.get(
|
||
user=request.user, trash=False
|
||
)
|
||
# get driver object & cars information
|
||
# driver = self.queryset.get(user=userprofile, trash=False)
|
||
# cars_objects = driver.Kill_house_add_car
|
||
# serializer = KillHouseADDCARSerializer(cars_objects)
|
||
# return Response(serializer.data, status=status.HTTP_200_OK)
|
||
cars = KillHouseDriver.objects.filter(user=userprofile, trash=False)
|
||
# cars_objects = KillHouseADDCAR.objects.filter(driver=driver, trash=False)
|
||
# serializer = KillHouseADDCARSerializer(cars_objects, many=True)
|
||
serializer = KillHouseDriverSerializer(cars, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
# Show Driver Kill Requests Allocation
|
||
if 'my_allocations' in request.GET:
|
||
driver_allocations = []
|
||
# get user object
|
||
userprofile = SystemUserProfile.objects.get(
|
||
user=request.user, trash=False
|
||
)
|
||
# get driver object & cars information
|
||
# driver = self.queryset.get(user=userprofile, trash=False)
|
||
# cars_object = driver.Kill_house_add_car
|
||
kill_reqs = KillHouseRequest.objects.filter(add_car__driver__user=userprofile, trash=False)
|
||
# for item in kill_req:
|
||
# if str(cars_object.key) == item.car['key']:
|
||
# driver_allocations.append(item)
|
||
serializer = KillHouseRequestSerializer(kill_reqs, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
return Response("Enter The Parameter", status=status.HTTP_400_BAD_REQUEST)
|
||
|
||
def retrieve(self, request, pk=None, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
if 'profile' in request.GET:
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
kill_house_driver = KillHouseDriver.objects.get(user=user, trash=False)
|
||
kill_house_driver_serializer = KillHouseDriverSerializer(kill_house_driver)
|
||
profile_info = {
|
||
'profile': kill_house_driver_serializer.data,
|
||
}
|
||
return Response(profile_info, status=status.HTTP_200_OK)
|
||
|
||
|
||
class DriverRequestCancelViewSet(viewsets.ModelViewSet):
|
||
queryset = DriverRequestCancel.objects.all()
|
||
serializer_class = DriverRequestCancelSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def create(self, request, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
kill_house_request = KillHouseRequest.objects.get(key=request.data['kill_house_request_key'], trash=False)
|
||
request.data.pop('kill_house_request_key')
|
||
add_car = KillHouseADDCAR.objects.get(key=request.data['Kill_house_add_car_key'], trash=False)
|
||
request.data.pop('Kill_house_add_car_key')
|
||
if KillHouseAssignmentInformation.objects.filter(kill_house_request=kill_house_request).exists():
|
||
return Response({"result": "can not cancel"}, status=status.HTTP_403_FORBIDDEN)
|
||
serializer = self.serializer_class(data=request.data)
|
||
if serializer.is_valid():
|
||
driver_cancel = serializer.create(validated_data=request.data)
|
||
if kill_house_request.province_kill_request != None:
|
||
province_kill_request = ProvinceKillRequest.objects.get(
|
||
key=kill_house_request.province_kill_request.key, trash=False)
|
||
province_kill_request.quantity += kill_house_request.quantity
|
||
province_kill_request.save()
|
||
else:
|
||
kill_house_request_auction = KillHouseRequestActionWinner.objects.get(
|
||
key=kill_house_request.kill_house_request_auction_winner.key, trash=False)
|
||
kill_house_request_auction.quantity += kill_house_request.quantity
|
||
kill_house_request_auction.save()
|
||
driver_cancel.kill_house_request = kill_house_request
|
||
driver_cancel.Kill_house_add_car = add_car
|
||
driver_cancel.save()
|
||
kill_house_request.trash = True
|
||
kill_house_request.save()
|
||
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
||
return Response(serializer.errors)
|
||
|
||
|
||
class KillHouseComplaintViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseComplaint.objects.all()
|
||
serializer_class = KillHouseComplaintSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def create(self, request, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
user = SystemUserProfile.objects.get(user=request.user)
|
||
role = request.data['role']
|
||
request.data.pop('role')
|
||
image_list = []
|
||
bar = KillHouseAssignmentInformation.objects.get(key=request.data['bar_key'], trash=False)
|
||
request.data.pop('bar_key')
|
||
percent = request.data['percent']
|
||
request.data.pop('percent')
|
||
try:
|
||
images = request.data['image']
|
||
request.data.pop('image')
|
||
except:
|
||
images = None
|
||
serializer = self.serializer_class(data=request.data)
|
||
if serializer.is_valid():
|
||
complaint = serializer.create(validated_data=request.data)
|
||
complaint.bar = bar
|
||
if images != None:
|
||
for image in images:
|
||
image_list.append(send_image_to_server(image))
|
||
complaint.image = image_list
|
||
if percent != None:
|
||
complaint.percent = percent
|
||
complaint.save()
|
||
bar.unusual_casualties = True
|
||
bar.save()
|
||
if role == 'KillHouse':
|
||
kill_house = KillHouse.objects.get(kill_house_operator__user=user)
|
||
kill_house_name = kill_house.kill_house_operator.user.fullname
|
||
information = {
|
||
"role": role,
|
||
"kill_house_name": kill_house.name,
|
||
"kill_house_operator_name": kill_house_name,
|
||
"date": str(complaint.create_date)
|
||
}
|
||
|
||
elif role == "KillHouseVet":
|
||
vet = Vet.objects.get(user=user)
|
||
kill_house_vet = KillHouseVet.objects.get(vet=vet)
|
||
kill_house_vet_name = kill_house_vet.vet.user.fullname
|
||
|
||
information = {
|
||
"role": role,
|
||
"kill_house_vet": kill_house_vet_name,
|
||
"date": str(complaint.create_date)
|
||
}
|
||
|
||
complaint.registrar = information
|
||
complaint.save()
|
||
|
||
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
||
|
||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
user = SystemUserProfile.objects.get(user=request.user)
|
||
if 'role' in request.GET:
|
||
killhousecomplaints = []
|
||
if request.GET['role'] == 'KillHouse':
|
||
kill_house_operator = KillHouseOperator.objects.get(user=user)
|
||
kill_house = KillHouse.objects.get(kill_house_operator=kill_house_operator)
|
||
killhousecomplaints = KillHouseComplaint.objects.filter(
|
||
bar__kill_house_request__killhouse_user=kill_house)
|
||
if killhousecomplaints.count() > 0:
|
||
serializer = KillHouseComplaintSerializer(killhousecomplaints, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
elif request.GET['role'] == 'KillHouseVet':
|
||
vet = Vet.objects.get(user=user)
|
||
kill_house_vet = KillHouseVet.objects.get(vet=vet)
|
||
kill_house = KillHouse.objects.get(key=kill_house_vet.kill_house.key)
|
||
killhousecomplaints = KillHouseComplaint.objects.filter(
|
||
bar__kill_house_request__killhouse_user=kill_house)
|
||
if killhousecomplaints.count() > 0:
|
||
serializer = KillHouseComplaintSerializer(killhousecomplaints, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
else:
|
||
killhousecomplaints = KillHouseComplaint.objects.filter(
|
||
bar__kill_house_request__killhouse_user__system_address__province__id=user.province.id)
|
||
if killhousecomplaints.count() > 0:
|
||
serializer = KillHouseComplaintSerializer(killhousecomplaints, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
return Response(killhousecomplaints, status=status.HTTP_200_OK)
|
||
|
||
def update(self, request, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
Killhousecomplaint = KillHouseComplaint.objects.get(key=request.data['key'])
|
||
new_bar = KillHouseAssignmentInformation.objects.get(key=request.data['bar_key'], trash=False)
|
||
request.data.pop('key')
|
||
request.data.pop('bar_key')
|
||
percent = request.data['percent']
|
||
new_title = request.data['title']
|
||
new_image = request.data['image']
|
||
new_percent = request.data['percent']
|
||
new_message = request.data['message']
|
||
|
||
Killhousecomplaint.bar = new_bar
|
||
Killhousecomplaint.title = new_title
|
||
Killhousecomplaint.image = new_image
|
||
Killhousecomplaint.percent = new_percent
|
||
Killhousecomplaint.message = new_message
|
||
Killhousecomplaint.save()
|
||
|
||
return Response(status=status.HTTP_200_OK)
|
||
|
||
def destroy(self, request, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
Killhousecomplaint = KillHouseComplaint.objects.get(key=request.data['key'])
|
||
Killhousecomplaint.trash = True
|
||
Killhousecomplaint.save()
|
||
|
||
return Response(status=status.HTTP_200_OK)
|
||
|
||
|
||
class CheckKillHouseComplaintViewSet(viewsets.ModelViewSet):
|
||
queryset = CheckKillHouseComplaint.objects.all()
|
||
serializer_class = CheckKillHouseComplaintSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def create(self, request, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
complaint = KillHouseComplaint.objects.get(key=request.data['complaint_key'], trash=False)
|
||
request.data.pop('complaint_key')
|
||
serializer = self.serializer_class(data=request.data)
|
||
if serializer.is_valid():
|
||
percent = PercentageOfLosses.objects.all()
|
||
if percent.count() > 0:
|
||
percent = percent.last()
|
||
else:
|
||
return Response('dont have PercentageOfLosses ', status=status.HTTP_403_FORBIDDEN)
|
||
|
||
check = serializer.create(validated_data=request.data)
|
||
check.camplaint = complaint
|
||
if check.state == 'accepted':
|
||
bar = KillHouseAssignmentInformation.objects.get(key=complaint.bar.key)
|
||
complaint_percent = complaint.percent
|
||
if float(complaint_percent) > float(percent.percent):
|
||
main_percent = float(complaint_percent) - float(percent.percent)
|
||
bar.car_weight_with_load = float(bar.car_weight_with_load) - (
|
||
(main_percent / 100) * (float(bar.car_weight_with_load)))
|
||
bar.net_weight = float(bar.net_weight) - (
|
||
(main_percent / 100) * (float(bar.net_weight)))
|
||
bar.save()
|
||
province_factor = ProvinceFactorToKillHouse.objects.filter(
|
||
province_check_info__kill_house_assignment__key=complaint.bar.key)
|
||
poultry_factor = ProvinceFactorToKillHouseForPoultry.objects.filter(
|
||
province_check_info__kill_house_assignment__key=complaint.bar.key)
|
||
|
||
complaint.save()
|
||
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
||
|
||
return Response(serializer.errors)
|
||
|
||
|
||
class KillHouseBarReportingViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseAssignmentInformation.objects.all()
|
||
serializer_class = KillHouseAssignmentInformationSerializer
|
||
permission_classes = [AllowAny]
|
||
|
||
def create(self, request, *args, **kwargs):
|
||
return Response(status=status.HTTP_401_UNAUTHORIZED)
|
||
|
||
def update(self, request, *args, **kwargs):
|
||
return Response(status=status.HTTP_401_UNAUTHORIZED)
|
||
|
||
def destroy(self, request, *args, **kwargs):
|
||
return Response(status=status.HTTP_401_UNAUTHORIZED)
|
||
|
||
def partial_update(self, request, *args, **kwargs):
|
||
return Response(status=status.HTTP_401_UNAUTHORIZED)
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
total_list = []
|
||
net_weight = 0
|
||
api_key = request.GET['api_key']
|
||
if api_key == PROJECT_API_KEY:
|
||
for kill_house in KillHouse.objects.filter(system_address__province__id=1):
|
||
internal_list = []
|
||
|
||
date_time = datetime.strptime(request.GET['date'], '%Y-%m-%d')
|
||
|
||
assignments = KillHouseAssignmentInformation.objects.filter(
|
||
kill_house_request__killhouse_user=kill_house, create_date__year=date_time.year,
|
||
create_date__month=date_time.month, create_date__day=date_time.day)
|
||
if assignments.count() > 0:
|
||
|
||
for assignment in assignments:
|
||
net_weight += assignment.net_weight
|
||
|
||
internal_dict = {
|
||
|
||
"date": date_time,
|
||
"weight": net_weight,
|
||
}
|
||
internal_list.append(internal_dict)
|
||
|
||
kill_house_dict = {
|
||
"kill_house_name": kill_house.name,
|
||
"fullname": kill_house.kill_house_operator.user.fullname,
|
||
"mobile": kill_house.kill_house_operator.user.mobile,
|
||
"city": kill_house.system_address.city.name,
|
||
"province": kill_house.system_address.province.name,
|
||
"bar_info": internal_list,
|
||
}
|
||
total_list.append(kill_house_dict)
|
||
|
||
return Response(total_list, status=status.HTTP_200_OK)
|
||
|
||
|
||
class CheckUnusualCasualtiesViewSet(viewsets.ModelViewSet):
|
||
queryset = CheckUnusualCasualties.objects.all()
|
||
serializer_class = CheckUnusualCasualtiesSerializer
|
||
permission_classes = [AllowAny]
|
||
|
||
def create(self, request, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
user = SystemUserProfile.objects.get(user=request.user)
|
||
# return Response(user.fullname)
|
||
kill_house_complaint = KillHouseComplaint.objects.get(key=request.data['key'])
|
||
request.data.pop('key')
|
||
bar_info = KillHouseAssignmentInformation.objects.get(key=kill_house_complaint.bar.key)
|
||
state = request.data['state']
|
||
if state == "accepted":
|
||
percentage_losses = PercentageOfLosses.objects.all()
|
||
if percentage_losses.count() > 0:
|
||
percentage_losses = percentage_losses.last().percent
|
||
else:
|
||
return Response({"result": "enter percentage of losses"}, status=status.HTTP_403_FORBIDDEN)
|
||
weight = kill_house_complaint.bar.net_weight - (kill_house_complaint.bar.net_weight * (
|
||
(kill_house_complaint.percent / 100) - (percentage_losses / 100)))
|
||
bar_info.weight_withs_losses = weight
|
||
bar_info.save()
|
||
serializer = self.serializer_class(data=request.data)
|
||
if serializer.is_valid():
|
||
unusualcasualties = serializer.create(validated_data=request.data)
|
||
unusualcasualties.complaint = kill_house_complaint
|
||
if unusualcasualties.state == 'accepted':
|
||
kill_house_complaint.state = 'accepted'
|
||
kill_house_complaint.save()
|
||
if unusualcasualties.state == 'rejected':
|
||
unusualcasualties.message = request.data['message']
|
||
kill_house_complaint.state = 'rejected'
|
||
kill_house_complaint.message = request.data['message']
|
||
kill_house_complaint.save()
|
||
unusualcasualties.save()
|
||
inter_dict = {
|
||
"operatorname": user.fullname,
|
||
"create_date": str(unusualcasualties.create_date),
|
||
"role": request.data['role'],
|
||
"state": unusualcasualties.state,
|
||
}
|
||
unusualcasualties.role = inter_dict
|
||
unusualcasualties.save()
|
||
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
||
|
||
|
||
@api_view(["POST"])
|
||
@csrf_exempt
|
||
@permission_classes([AllowAny])
|
||
def make_kill_request(request):
|
||
user = SystemUserProfile.objects.get(user=request.user)
|
||
now = datetime.now().date()
|
||
for kill_house in KillHouse.objects.filter(system_address__province=user.province):
|
||
debt_amount = 0
|
||
percentage = KillHousePercentage.objects.get(kill_house=kill_house)
|
||
total_poultry_request = TotalPoultryRequestQuantity.objects.filter(create_date__year=now.year,
|
||
create_date__month=now.month,
|
||
create_date__day=now.day).order_by('id')
|
||
first_average_weight = 0
|
||
first_assignment_average_weight = 0
|
||
seconde_average_weight = 0
|
||
seconde_assignment_average_weight = 0
|
||
all_assigntments = KillHouseAssignmentInformation.objects.filter(
|
||
kill_house_request__killhouse_user=kill_house).order_by('id')
|
||
if all_assigntments.count() > 0:
|
||
for all_assigntment in all_assigntments:
|
||
first_assignment_average_weight += all_assigntment.net_weight / all_assigntment.real_quantity
|
||
first_average_weight += round(first_assignment_average_weight / all_assigntments.count(), 2)
|
||
four_all_assigntments = KillHouseAssignmentInformation.objects.filter(
|
||
kill_house_request__killhouse_user=kill_house).order_by('id')[:4]
|
||
|
||
for four_last_assingment in four_all_assigntments:
|
||
seconde_assignment_average_weight += four_last_assingment.net_weight / four_last_assingment.real_quantity
|
||
seconde_average_weight += round(seconde_assignment_average_weight / four_all_assigntments.count(), 2)
|
||
|
||
if total_poultry_request.count() > 0:
|
||
total_poultry_request = total_poultry_request.last()
|
||
if total_poultry_request.input_quantity != 0:
|
||
percentage.quantity = int(((percentage.percent / 100) / 100) * total_poultry_request.input_quantity)
|
||
else:
|
||
percentage.quantity = int(((percentage.percent / 10000) * total_poultry_request.quantity))
|
||
percentage.save()
|
||
poultry_factors = ProvinceFactorToKillHouseForPoultry.objects.filter(
|
||
province_check_info__kill_house_assignment__kill_house_request__killhouse_user=kill_house,
|
||
paid_state='pending')
|
||
province_factors = ProvinceFactorToKillHouse.objects.filter(
|
||
province_check_info__kill_house_assignment__kill_house_request__killhouse_user=kill_house,
|
||
paid_state='pending')
|
||
if poultry_factors.count() > 0:
|
||
for poultry_factor in poultry_factors:
|
||
debt_amount += poultry_factor.total_price
|
||
if province_factors.count() > 0:
|
||
|
||
for province_factor in province_factors:
|
||
debt_amount += province_factor.total_price
|
||
|
||
kill_req = KillRequest(
|
||
kill_capacity=percentage.quantity,
|
||
remain_quantity=percentage.quantity,
|
||
recive_time='06 - 14',
|
||
recive_date=datetime.now(),
|
||
first_average_weight=seconde_average_weight,
|
||
second_average_weight=first_average_weight,
|
||
kill_house=kill_house
|
||
|
||
)
|
||
kill_req.save()
|
||
if debt_amount > 0:
|
||
kill_req.debt_amount = debt_amount
|
||
kill_req.debt = True
|
||
kill_req.save()
|
||
|
||
return JsonResponse({"msg": "Done"})
|
||
|
||
|
||
class KillHouseNewViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouse.objects.select_related('kill_house_operator__user').filter(trash=False)
|
||
# queryset = KillHouse.objects.filter(trash=False)
|
||
serializer_class = KillHouseSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
kill_houses = self.queryset.all()
|
||
|
||
FullName = [kill_house.kill_house_operator.user.fullname for kill_house in kill_houses]
|
||
|
||
return Response(FullName, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHouseWareHouseViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseWareHouse.objects.all()
|
||
serializer_class = KillHouseWareHouseSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
now = datetime.now().date()
|
||
date = datetime.strptime(request.GET['date'],
|
||
'%Y-%m-%d').date() if 'date' in request.GET else now
|
||
if 'kill_house_key' in request.GET:
|
||
kill_house = KillHouse.objects.get(key=request.GET['kill_house_key'], trash=False)
|
||
else:
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).first()
|
||
|
||
kill_house_ware_house = KillHouseWareHouse.objects.filter(kill_house=kill_house,
|
||
date__date=date,
|
||
trash=False).last()
|
||
|
||
if kill_house_ware_house is None:
|
||
ware_house_date = datetime(year=date.year, month=date.month, day=date.day, hour=1, minute=12, second=20)
|
||
kill_house_ware_house = KillHouseWareHouse(
|
||
kill_house=kill_house,
|
||
date=ware_house_date
|
||
)
|
||
kill_house_ware_house.save()
|
||
|
||
bar_quantity = 0
|
||
allocated_quantity = 0
|
||
bar_live_weight = 0
|
||
number_of_carcasses = 0
|
||
update_number_of_carcasses = 0
|
||
weight_of_carcasses = 0
|
||
update_weight_of_carcasses = 0
|
||
ave_weight_of_carcasses = 0
|
||
free_number_of_carcasses = 0
|
||
free_weight_of_carcasses = 0
|
||
free_sale_number_of_carcasses = 0
|
||
free_sale_weight_of_carcasses = 0
|
||
free_bar_quantity = 0
|
||
free_sale_bar_quantity = 0
|
||
total_bar_quantity = 0
|
||
total_number_of_carcasses = 0
|
||
total_weight_of_carcasses = 0
|
||
|
||
# assingments = KillHouseAssignmentInformation.objects.filter(kill_house_request__killhouse_user=kill_house,
|
||
# state__in=('pending', 'accepted'),
|
||
# kill_house_request__kill_request__recive_date__year=date.year,
|
||
# kill_house_request__kill_request__recive_date__month=date.month,
|
||
# kill_house_request__kill_request__recive_date__day=date.day,
|
||
# trash=False).select_related('kill_house_request')
|
||
one_day_ago = date - timedelta(days=1)
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(killhouse_user=kill_house,
|
||
kill_request__recive_date__date=one_day_ago,
|
||
ware_house_confirmation=True, trash=False)
|
||
if kill_house_requests.count() > 0:
|
||
for kill_house_request in kill_house_requests:
|
||
bar_quantity += 1
|
||
allocated_quantity += kill_house_request.accepted_real_quantity
|
||
bar_live_weight += kill_house_request.accepted_real_weight
|
||
number_of_carcasses += kill_house_request.ware_house_accepted_real_quantity
|
||
weight_of_carcasses += kill_house_request.ware_house_accepted_real_weight
|
||
# kill_house_loss_percentage = KillHousePercentageOfLosses.objects.all().last()
|
||
# if kill_house_loss_percentage:
|
||
# weight_of_carcasses += kill_house_request.accepted_real_weight - (
|
||
# (kill_house_loss_percentage.percent / 100) * kill_house_request.accepted_real_weight)
|
||
# else:
|
||
# weight_of_carcasses += kill_house_request.accepted_real_weight - (
|
||
# (25 / 100) * kill_house_request.accepted_real_weight)
|
||
|
||
ave_weight_of_carcasses += weight_of_carcasses / number_of_carcasses
|
||
free_bars = KillHouseFreeBarInformation.objects.filter(kill_house=kill_house, date__date=date, ware_house=True,
|
||
trash=False)
|
||
freezing_quantity = 0
|
||
freezing_weight = 0
|
||
freezing_bars = ColdHouseAllocations.objects.filter(kill_house_ware_house=kill_house_ware_house,
|
||
state__in=('pending', 'accepted'), date__date=date,
|
||
trash=False)
|
||
if len(freezing_bars) > 0:
|
||
for freezing_bar in freezing_bars:
|
||
freezing_quantity += freezing_bar.accepted_quantity if freezing_bar.accepted_quantity > 0 else freezing_bar.quantity
|
||
freezing_weight += freezing_bar.accepted_weight if freezing_bar.accepted_weight > 0 else freezing_bar.weight
|
||
if free_bars.count() > 0:
|
||
for free_bar in free_bars:
|
||
free_bar_quantity += 1
|
||
free_number_of_carcasses += free_bar.number_of_carcasses
|
||
free_weight_of_carcasses += free_bar.weight_of_carcasses
|
||
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(kill_house=kill_house,
|
||
date__date=date,
|
||
trash=False)
|
||
if kill_house_free_sale_bar_info.count() > 0:
|
||
for kill_house_free_sale in kill_house_free_sale_bar_info:
|
||
free_sale_bar_quantity += 1
|
||
free_sale_number_of_carcasses += kill_house_free_sale.number_of_carcasses
|
||
free_sale_weight_of_carcasses += kill_house_free_sale.weight_of_carcasses
|
||
|
||
update_number_of_carcasses = kill_house_ware_house.updated_number_of_carcasses
|
||
update_weight_of_carcasses = kill_house_ware_house.updated_weight_of_carcasses
|
||
total_bar_quantity = bar_quantity + free_bar_quantity + free_sale_bar_quantity
|
||
total_number_of_carcasses = number_of_carcasses + free_number_of_carcasses + kill_house_ware_house.pre_cold_number_of_carcasses_to_ware_house
|
||
update_total_number_of_carcasses = update_number_of_carcasses + free_number_of_carcasses + kill_house_ware_house.pre_cold_number_of_carcasses_to_ware_house if update_number_of_carcasses > 0 else 0
|
||
total_weight_of_carcasses = weight_of_carcasses + free_weight_of_carcasses + kill_house_ware_house.pre_cold_weight_of_carcasses_to_ware_house
|
||
update_total_weight_of_carcasses = update_weight_of_carcasses + free_weight_of_carcasses + kill_house_ware_house.pre_cold_weight_of_carcasses_to_ware_house if update_weight_of_carcasses > 0 else 0
|
||
|
||
kill_house_ware_house.bar_quantity = bar_quantity
|
||
kill_house_ware_house.allocated_quantity = allocated_quantity
|
||
kill_house_ware_house.bar_live_weight = bar_live_weight
|
||
kill_house_ware_house.number_of_carcasses = number_of_carcasses
|
||
kill_house_ware_house.update_number_of_carcasses = update_number_of_carcasses
|
||
kill_house_ware_house.weight_of_carcasses = weight_of_carcasses
|
||
kill_house_ware_house.update_weight_of_carcasses = update_weight_of_carcasses
|
||
kill_house_ware_house.ave_weight_of_carcasses = weight_of_carcasses / number_of_carcasses if number_of_carcasses > 0 else 0
|
||
kill_house_ware_house.update_ave_weight_of_carcasses = update_weight_of_carcasses / update_number_of_carcasses if update_number_of_carcasses > 0 else 0
|
||
kill_house_ware_house.free_bar_quantity = free_bar_quantity
|
||
kill_house_ware_house.number_of_free_carcasses = free_number_of_carcasses
|
||
kill_house_ware_house.free_weight_of_carcasses = free_weight_of_carcasses
|
||
kill_house_ware_house.free_sale_quantity = free_sale_number_of_carcasses
|
||
kill_house_ware_house.free_sale_weight = free_sale_weight_of_carcasses
|
||
kill_house_ware_house.total_bar_quantity = total_bar_quantity
|
||
kill_house_ware_house.freezing_quantity = freezing_quantity
|
||
kill_house_ware_house.freezing_weight = freezing_weight
|
||
kill_house_ware_house.total_number_of_carcasses = total_number_of_carcasses
|
||
kill_house_ware_house.update_total_number_of_carcasses = update_total_number_of_carcasses
|
||
kill_house_ware_house.total_weight_of_carcasses = total_weight_of_carcasses
|
||
kill_house_ware_house.update_total_weight_of_carcasses = update_total_weight_of_carcasses
|
||
if update_total_weight_of_carcasses == 0:
|
||
kill_house_ware_house.remain_total_weight_of_carcasses = total_weight_of_carcasses - kill_house_ware_house.allocated_total_weight_of_carcasses if kill_house_ware_house.pre_cold_weight_of_carcasses_self_ware_house == 0 else 0
|
||
else:
|
||
kill_house_ware_house.remain_total_weight_of_carcasses = update_total_weight_of_carcasses - kill_house_ware_house.allocated_total_weight_of_carcasses if kill_house_ware_house.pre_cold_weight_of_carcasses_self_ware_house == 0 else 0
|
||
if update_total_number_of_carcasses == 0:
|
||
kill_house_ware_house.remain_total_number_of_carcasses = total_number_of_carcasses - kill_house_ware_house.allocated_total_number_of_carcasses if kill_house_ware_house.pre_cold_number_of_carcasses_self_ware_house == 0 else 0
|
||
else:
|
||
kill_house_ware_house.remain_total_number_of_carcasses = update_total_number_of_carcasses - kill_house_ware_house.allocated_total_number_of_carcasses if kill_house_ware_house.pre_cold_number_of_carcasses_self_ware_house == 0 else 0
|
||
kill_house_ware_house.final_total_number_of_carcasses = kill_house_ware_house.update_total_number_of_carcasses if kill_house_ware_house.update_total_number_of_carcasses > 0 else kill_house_ware_house.total_number_of_carcasses
|
||
kill_house_ware_house.final_total_weight_of_carcasses = kill_house_ware_house.update_total_weight_of_carcasses if kill_house_ware_house.update_total_weight_of_carcasses > 0 else kill_house_ware_house.total_weight_of_carcasses
|
||
kill_house_ware_house.save()
|
||
|
||
if 'state' in request.GET:
|
||
total_number_of_carcasses_temp = kill_house_ware_house.update_total_number_of_carcasses if kill_house_ware_house.update_total_number_of_carcasses > 0 else kill_house_ware_house.total_number_of_carcasses
|
||
total_weight_of_carcasses_temp = kill_house_ware_house.update_total_weight_of_carcasses if kill_house_ware_house.update_total_weight_of_carcasses > 0 else kill_house_ware_house.total_weight_of_carcasses
|
||
update_fields = {
|
||
"ware_house_key": kill_house_ware_house.key,
|
||
"total_number_of_carcasses": kill_house_ware_house.final_total_number_of_carcasses,
|
||
"pre_cold_number_of_carcasses_self_ware_house": kill_house_ware_house.pre_cold_number_of_carcasses_self_ware_house,
|
||
"pre_cold_weight_of_carcasses_self_ware_house": kill_house_ware_house.pre_cold_weight_of_carcasses_self_ware_house,
|
||
"total_weight_of_carcasses": kill_house_ware_house.final_total_weight_of_carcasses,
|
||
"allocated_total_number_of_carcasses": kill_house_ware_house.allocated_total_number_of_carcasses,
|
||
"allocated_total_weight_of_carcasses": kill_house_ware_house.allocated_total_weight_of_carcasses,
|
||
"remain_total_number_of_carcasses": kill_house_ware_house.remain_total_number_of_carcasses,
|
||
"remain_total_weight_of_carcasses": kill_house_ware_house.remain_total_weight_of_carcasses,
|
||
"freezing_quantity": kill_house_ware_house.freezing_quantity,
|
||
"freezing_weight": kill_house_ware_house.freezing_weight,
|
||
"free_sale_quantity": kill_house_ware_house.free_sale_quantity,
|
||
"free_sale_weight": kill_house_ware_house.free_sale_weight,
|
||
"total_average_weight_of_carcasses": round(
|
||
kill_house_ware_house.final_total_weight_of_carcasses / kill_house_ware_house.final_total_number_of_carcasses,
|
||
2) if kill_house_ware_house.final_total_number_of_carcasses > 0 else 0,
|
||
|
||
}
|
||
return Response(update_fields, status=status.HTTP_200_OK)
|
||
|
||
serializer = KillHouseWareHouseSerializer(kill_house_ware_house)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
def update(self, request, pk=None, *args, **kwargs):
|
||
ware_house = KillHouseWareHouse.objects.get(key=request.data['key'])
|
||
ware_house.updated_number_of_carcasses = int(request.data['updated_number_of_carcasses'])
|
||
ware_house.updated_weight_of_carcasses = request.data['updated_weight_of_carcasses']
|
||
ware_house.total_weight_of_carcasses = request.data[
|
||
'updated_weight_of_carcasses'] + ware_house.free_weight_of_carcasses
|
||
ware_house.total_number_of_carcasses = int(request.data[
|
||
'updated_number_of_carcasses']) + ware_house.number_of_free_carcasses
|
||
ware_house.save()
|
||
serializer = self.serializer_class(ware_house)
|
||
serializer.update(instance=ware_house, validated_data=request.data)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHouseWareHouseForDispensersViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseWareHouse.objects.all()
|
||
serializer_class = KillHouseWareHouseSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
date1 = datetime.strptime(request.GET['date1'], '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(request.GET['date2'], '%Y-%m-%d').date()
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
if request.GET['role'] in ('CityCommerce', 'CityJahad', 'CityPoultry', 'CityOperator'):
|
||
kill_house_ware_houses = KillHouseWareHouse.objects.filter(kill_house__system_address__city=user.city,
|
||
date__date__gte=date1, date__date__lte=date2,
|
||
trash=False)
|
||
else:
|
||
kill_house_ware_houses = KillHouseWareHouse.objects.filter(date__date__gte=date1, date__date__lte=date2,
|
||
trash=False)
|
||
result = {
|
||
"kill_houses": len(kill_house_ware_houses.values_list('kill_house', flat=True).distinct()),
|
||
|
||
"total_number_of_carcasses": kill_house_ware_houses.aggregate(total=Sum('final_total_number_of_carcasses'))[
|
||
'total'] or 0,
|
||
"total_weight_of_carcasses": kill_house_ware_houses.aggregate(total=Sum('final_total_weight_of_carcasses'))[
|
||
'total'] or 0,
|
||
"pre_cold_number_of_carcasses_self_ware_house":
|
||
kill_house_ware_houses.aggregate(total=Sum('pre_cold_number_of_carcasses_self_ware_house'))[
|
||
'total'] or 0,
|
||
"pre_cold_weight_of_carcasses_self_ware_house":
|
||
kill_house_ware_houses.aggregate(total=Sum('pre_cold_weight_of_carcasses_self_ware_house'))[
|
||
'total'] or 0,
|
||
"allocated_total_number_of_carcasses":
|
||
kill_house_ware_houses.aggregate(total=Sum('allocated_total_number_of_carcasses'))['total'] or 0,
|
||
"allocated_total_weight_of_carcasses":
|
||
kill_house_ware_houses.aggregate(total=Sum('allocated_total_weight_of_carcasses'))['total'] or 0,
|
||
"remain_total_number_of_carcasses":
|
||
kill_house_ware_houses.aggregate(total=Sum('remain_total_number_of_carcasses'))['total'] or 0,
|
||
"remain_total_weight_of_carcasses":
|
||
kill_house_ware_houses.aggregate(total=Sum('remain_total_weight_of_carcasses'))['total'] or 0,
|
||
"freezing_quantity": kill_house_ware_houses.aggregate(total=Sum('freezing_quantity'))['total'] or 0,
|
||
"freezing_weight": kill_house_ware_houses.aggregate(total=Sum('freezing_weight'))['total'] or 0,
|
||
"free_sale_quantity": kill_house_ware_houses.aggregate(total=Sum('free_sale_quantity'))['total'] or 0,
|
||
"free_sale_weight": kill_house_ware_houses.aggregate(total=Sum('free_sale_weight'))['total'] or 0
|
||
}
|
||
|
||
return Response(result, status=status.HTTP_200_OK)
|
||
|
||
|
||
class PreColdKillHouseWareHouseViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseWareHouse.objects.all()
|
||
serializer_class = KillHouseWareHouseSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def create(self, request, *args, **kwargs):
|
||
now = datetime.now().date()
|
||
kill_house_ware_house = KillHouseWareHouse.objects.get(key=request.data['ware_house_key'])
|
||
if kill_house_ware_house.date.date() != now:
|
||
return Response({"result": "به علت مغایرت تاریخ امکان پیش سرد وجود ندارد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
tomorrow = kill_house_ware_house.date + timedelta(days=1)
|
||
kill_house_ware_house.pre_cold_number_of_carcasses_self_ware_house = kill_house_ware_house.remain_total_number_of_carcasses
|
||
kill_house_ware_house.pre_cold_weight_of_carcasses_self_ware_house = kill_house_ware_house.remain_total_weight_of_carcasses
|
||
kill_house_ware_house.remain_total_number_of_carcasses = 0
|
||
kill_house_ware_house.remain_total_weight_of_carcasses = 0
|
||
kill_house_ware_house.save()
|
||
tomorrow_kill_house_ware_house = KillHouseWareHouse.objects.filter(kill_house=kill_house_ware_house.kill_house,
|
||
date__date=tomorrow.date()).first()
|
||
if not tomorrow_kill_house_ware_house:
|
||
tomorrow_kill_house_ware_house = KillHouseWareHouse(
|
||
kill_house=kill_house_ware_house.kill_house,
|
||
date=kill_house_ware_house.date + timedelta(days=1)
|
||
)
|
||
tomorrow_kill_house_ware_house.save()
|
||
tomorrow_kill_house_ware_house.final_total_number_of_carcasses += kill_house_ware_house.pre_cold_number_of_carcasses_self_ware_house
|
||
tomorrow_kill_house_ware_house.total_number_of_carcasses += kill_house_ware_house.pre_cold_number_of_carcasses_self_ware_house
|
||
tomorrow_kill_house_ware_house.final_total_weight_of_carcasses += kill_house_ware_house.pre_cold_weight_of_carcasses_self_ware_house
|
||
tomorrow_kill_house_ware_house.total_weight_of_carcasses += kill_house_ware_house.pre_cold_weight_of_carcasses_self_ware_house
|
||
tomorrow_kill_house_ware_house.remain_total_number_of_carcasses += kill_house_ware_house.pre_cold_number_of_carcasses_self_ware_house
|
||
tomorrow_kill_house_ware_house.remain_total_weight_of_carcasses += kill_house_ware_house.pre_cold_weight_of_carcasses_self_ware_house
|
||
tomorrow_kill_house_ware_house.pre_cold_number_of_carcasses_to_ware_house = kill_house_ware_house.pre_cold_number_of_carcasses_self_ware_house
|
||
tomorrow_kill_house_ware_house.pre_cold_weight_of_carcasses_to_ware_house = kill_house_ware_house.pre_cold_weight_of_carcasses_self_ware_house
|
||
tomorrow_kill_house_ware_house.save()
|
||
return Response({"result": "با موفقیت انجام شد!"}, status=status.HTTP_201_CREATED)
|
||
|
||
|
||
class KillHouseFreeSaleBarInformationViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseFreeSaleBarInformation.objects.all()
|
||
serializer_class = KillHouseFreeSaleBarInformationSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
pagination_class = CustomPagination
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = KillHouseFreeSaleBarInformationFilterSet
|
||
filterset_fields = [
|
||
'type_car',
|
||
'pelak',
|
||
'clearance_code',
|
||
'kill_house__name',
|
||
'kill_house__kill_house_operator__user__fullname',
|
||
'kill_house__kill_house_operator__user__first_name',
|
||
'kill_house__kill_house_operator__user__last_name',
|
||
'kill_house__kill_house_operator__user__mobile',
|
||
'buyer__fullname',
|
||
'buyer__first_name',
|
||
'buyer__last_name',
|
||
'buyer__mobile',
|
||
'buyer__unit_name',
|
||
'buyer_name',
|
||
'buyer_mobile',
|
||
'province',
|
||
'city',
|
||
|
||
]
|
||
|
||
def create(self, request, *args, **kwargs):
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
now = datetime.now().date()
|
||
now_time = datetime.now().time()
|
||
quota = request.data['quota']
|
||
buyer = None
|
||
dispenser = request.data.pop('dispenser',None)
|
||
representative = request.data.pop('representative',None)
|
||
if 'kill_house_key' in request.data.keys():
|
||
kill_house = KillHouse.objects.get(key=request.data['kill_house_key'])
|
||
request.data.pop('kill_house_key')
|
||
elif 'buyer_key' in request.data.keys():
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user).first()
|
||
buyer = OutProvinceCarcassesBuyer.objects.get(key=request.data['buyer_key'])
|
||
request.data.pop('buyer_key')
|
||
product = RolesProducts.objects.get(key=request.data['product_key'])
|
||
request.data.pop('product_key')
|
||
date = datetime.strptime(str(request.data['date']), '%Y-%m-%d').date()
|
||
production_date = datetime.strptime(str(request.data['production_date']), '%Y-%m-%d').date()
|
||
date = datetime(year=date.year, month=date.month, day=date.day, hour=now_time.hour,
|
||
minute=now_time.minute,
|
||
second=now_time.second)
|
||
production_date = datetime(year=production_date.year, month=production_date.month, day=production_date.day,
|
||
hour=now_time.hour,
|
||
minute=now_time.minute,
|
||
second=now_time.second)
|
||
request.data.pop('date')
|
||
request.data.pop('production_date')
|
||
if OperationLimitation.objects.all().first().kill_house_free_sale_limitation == True:
|
||
|
||
if now != date.date():
|
||
return Response({"result": "به علت مغایرت تاریخ امکان فروش بار وجود ندارد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
carcass_distribution = RestrictionCarcassDistribution.objects.filter(trash=False,
|
||
distribution_type='KillHouse',
|
||
allow=True,
|
||
out=True).first()
|
||
if carcass_distribution and datetime.now().time() > carcass_distribution.time:
|
||
return Response({"result": "لطفا در ساعات مجاز اقدام نمایید!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
# ware_house = KillHouseWareHouse.objects.get(kill_house=kill_house, date__date=date)
|
||
# if request.data['weight_of_carcasses'] > ware_house.remain_total_weight_of_carcasses:
|
||
# return Response({"result": "تعداد یا مقدار وارد شده از موجودی انبار بیشتر است !"},
|
||
# status=status.HTTP_403_FORBIDDEN)
|
||
kill_house_total_input_warehouse_governmental_weight = kill_house.total_input_warehouse_governmental_weight
|
||
kill_house_total_input_warehouse_free_weight = kill_house.total_input_warehouse_free_weight
|
||
|
||
if request.data['sale_type'] == 'free':
|
||
quota = request.data['quota']
|
||
if quota == 'governmental':
|
||
if not kill_house.free_sale_form_governmental_quota:
|
||
return Response({"result": "مجاز به فروش آزاد از انبار دولتی نمیباشید!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
if quota == 'governmental':
|
||
if kill_house.total_input_warehouse_governmental_weight < (
|
||
kill_house.total_selling_warehouse_governmental_weight + request.data['weight_of_carcasses']):
|
||
return Response({"result": "مجاز به فروش دولتی بیشتر از ورودی دولتی انبار نمیباشید!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
else:
|
||
if kill_house.total_input_warehouse_free_weight < (
|
||
kill_house.total_selling_warehouse_free_weight + request.data['weight_of_carcasses']):
|
||
return Response({"result": "مجاز به فروش آزاد بیشتر از ورودی آزاد انبار نمیباشید!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
if quota == 'governmental':
|
||
free_sale_type = request.data['sale_type']
|
||
if kill_house.governmental_selling_permission:
|
||
if free_sale_type == 'free':
|
||
if not kill_house.free_sale_form_governmental_quota:
|
||
if kill_house.total_commitment_selling_in_province_governmental_weight > kill_house.total_selling_in_province_governmental_weight:
|
||
return Response({"result": "ابتدا تعهد داخل استان رو تکمیل کنید!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
else:
|
||
if kill_house.total_commitment_selling_in_province_governmental_weight > kill_house.total_selling_in_province_governmental_weight:
|
||
return Response({"result": "ابتدا تعهد داخل استان رو تکمیل کنید!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
else:
|
||
return Response({"result": "مجاز به فروش دولتی نمیباشید!"}, status=status.HTTP_403_FORBIDDEN)
|
||
if kill_house.total_commitment_selling_out_province_governmental_weight > 0:
|
||
if kill_house.total_selling_out_province_governmental_weight + request.data[
|
||
'weight_of_carcasses'] > kill_house.total_commitment_selling_out_province_governmental_weight:
|
||
return Response({"result": "به دلیل بیشتر از وزن تعهد مجاز به فروش دولتی نمیباشید!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
else:
|
||
if kill_house.free_selling_permission:
|
||
if kill_house.total_commitment_selling_in_province_free_weight > kill_house.total_selling_in_province_free_weight:
|
||
return Response({"result": "ابتدا تعهد داخل استان رو تکمیل کنید!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
else:
|
||
return Response({"result": "مجاز به فروش آزاد نمیباشید!"}, status=status.HTTP_403_FORBIDDEN)
|
||
|
||
if kill_house.total_commitment_selling_out_province_free_weight > 0:
|
||
if kill_house.total_selling_out_province_free_weight + request.data[
|
||
'weight_of_carcasses'] > kill_house.total_commitment_selling_out_province_free_weight:
|
||
return Response({"result": "به دلیل بیشتر از وزن تعهد مجاز به فروش دولتی نمیباشید!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
ware_house_remain_weight = product.total_remain_weight
|
||
allocations_weight = StewardAllocation.objects.filter(trash=False, receiver_state__in=('pending', 'accepted'),
|
||
kill_house=kill_house, date__date=now).aggregate(
|
||
total=Sum('real_weight_of_carcasses'))['total'] or 0
|
||
free_sales_weight = \
|
||
KillHouseFreeSaleBarInformation.objects.filter(trash=False, kill_house=kill_house,
|
||
date__date=now).aggregate(
|
||
total=Sum('real_weight_of_carcasses'))['total'] or 0
|
||
total_weight = ware_house_remain_weight + allocations_weight + free_sales_weight
|
||
free_sales_weight += request.data['weight_of_carcasses']
|
||
|
||
# if kill_house.in_province_selling_limitation and kill_house.in_province_selling_limitation_percent > 0:
|
||
# in_province_limitation_weight = int(
|
||
# total_weight * (kill_house.in_province_selling_limitation_percent / 100))
|
||
# if allocations_weight < in_province_limitation_weight:
|
||
# return Response(
|
||
# {"result": "به دلیل عدم رعایت حداقل فروش/توزیع داخل استان امکان فروش به خارج استان وجود ندارد!"},
|
||
# status=status.HTTP_403_FORBIDDEN)
|
||
#
|
||
# if kill_house.out_province_selling_limitation and kill_house.out_province_selling_limitation_percent > 0:
|
||
# max_out_province_limitation_weight = int(
|
||
# total_weight * (kill_house.out_province_selling_limitation_percent / 100))
|
||
# if free_sales_weight > max_out_province_limitation_weight:
|
||
# return Response({"result": "سقف فروش به خارج استان امروز شما پر شده است!"},
|
||
# status=status.HTTP_403_FORBIDDEN)
|
||
if KillHouseFreeSaleBarInformation.objects.filter(trash=False, clearance_code=request.data['clearance_code'],
|
||
quarantine_weight_of_carcasses__gt=0).exists():
|
||
return Response({"result": "کد قرنطینه در سامانه ثبت شده است!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
serializer = self.serializer_class(data=request.data)
|
||
if serializer.is_valid():
|
||
kill_house_free_sale_bar_info = serializer.create(validated_data=request.data)
|
||
kill_house_free_sale_bar_info.kill_house = kill_house
|
||
if buyer is not None:
|
||
kill_house_free_sale_bar_info.buyer = buyer
|
||
kill_house_free_sale_bar_info.buyer_name = buyer.fullname
|
||
kill_house_free_sale_bar_info.buyer_mobile = buyer.mobile
|
||
kill_house_free_sale_bar_info.city = buyer.city
|
||
kill_house_free_sale_bar_info.province = buyer.province
|
||
|
||
kill_house_free_sale_bar_info.date = date
|
||
kill_house_free_sale_bar_info.production_date = production_date
|
||
kill_house_free_sale_bar_info.product = product
|
||
kill_house_free_sale_bar_info.dispenser = dispenser if dispenser else None
|
||
kill_house_free_sale_bar_info.representative = representative if representative else None
|
||
kill_house_free_sale_bar_info.real_number_of_carcasses = kill_house_free_sale_bar_info.number_of_carcasses
|
||
kill_house_free_sale_bar_info.real_weight_of_carcasses = kill_house_free_sale_bar_info.weight_of_carcasses
|
||
# ware_house.allocated_total_number_of_carcasses += kill_house_free_sale_bar_info.number_of_carcasses
|
||
# ware_house.allocated_total_weight_of_carcasses += kill_house_free_sale_bar_info.weight_of_carcasses
|
||
# ware_house.save()
|
||
|
||
wage = 0
|
||
wage_type = WageType.objects.filter(en_name='carcasse-sell', trash=False).first()
|
||
if wage_type.status == True:
|
||
wage = wage_type.amount
|
||
kill_house_free_sale_bar_info.wage = wage
|
||
kill_house_free_sale_bar_info.total_wage_amount = wage * kill_house_free_sale_bar_info.real_weight_of_carcasses
|
||
|
||
percentages_wage_type = PercentageOfWageType.objects.filter(wage_type=wage_type, percent__gt=0, trash=False)
|
||
|
||
if wage_type and wage_type.status == True and percentages_wage_type:
|
||
for percentage_wage_type in percentages_wage_type:
|
||
if percentage_wage_type.share_type.en_name == 'union':
|
||
kill_house_free_sale_bar_info.union_share = int(
|
||
(percentage_wage_type.percent / 100) * kill_house_free_sale_bar_info.total_wage_amount)
|
||
kill_house_free_sale_bar_info.union_share_percent = percentage_wage_type.percent
|
||
elif percentage_wage_type.share_type.en_name == 'company':
|
||
kill_house_free_sale_bar_info.company_share = int(
|
||
(percentage_wage_type.percent / 100) * kill_house_free_sale_bar_info.total_wage_amount)
|
||
kill_house_free_sale_bar_info.company_share_percent = percentage_wage_type.percent
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'guilds':
|
||
kill_house_free_sale_bar_info.guilds_share = int(
|
||
(percentage_wage_type.percent / 100) * kill_house_free_sale_bar_info.total_wage_amount)
|
||
kill_house_free_sale_bar_info.guilds_share_percent = percentage_wage_type.percent
|
||
elif percentage_wage_type.share_type.en_name == 'city':
|
||
kill_house_free_sale_bar_info.city_share = int(
|
||
(percentage_wage_type.percent / 100) * kill_house_free_sale_bar_info.total_wage_amount)
|
||
kill_house_free_sale_bar_info.city_share_percent = percentage_wage_type.percent
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'wallet':
|
||
kill_house_free_sale_bar_info.wallet_share = int(
|
||
(percentage_wage_type.percent / 100) * kill_house_free_sale_bar_info.total_wage_amount)
|
||
kill_house_free_sale_bar_info.wallet_share_percent = percentage_wage_type.percent
|
||
|
||
else:
|
||
kill_house_free_sale_bar_info.other_share = int(
|
||
(percentage_wage_type.percent / 100) * kill_house_free_sale_bar_info.total_wage_amount)
|
||
kill_house_free_sale_bar_info.other_share_percent = percentage_wage_type.percent
|
||
kill_house_free_sale_bar_info.save()
|
||
allow_register_code = AllowRegisterCodeForKillHouseFreeSaleBarInformation.objects.filter(trash=False,
|
||
active=True).first()
|
||
if allow_register_code:
|
||
number = random.randint(10000, 99000)
|
||
kill_house_free_sale_bar_info.registration_code = number
|
||
kill_house_free_sale_bar_info.system_registration_code = True
|
||
if int(allow_register_code.time) > 0:
|
||
kill_house_free_sale_bar_info.active_expire_date_time = True
|
||
kill_house_free_sale_bar_info.expire_date_time_registration_code = datetime.now() + timedelta(
|
||
minutes=int(allow_register_code.time))
|
||
kill_house_free_sale_bar_info.save()
|
||
send_sms_for_sale_bar(kill_house_free_sale_bar_info)
|
||
get_gid_out_province(kill_house_free_sale_bar_info.id)
|
||
kill_house_free_sale_product_warehousing(product)
|
||
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
||
# return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
date1 = request.GET.get('date1')
|
||
date2 = request.GET.get('date2')
|
||
kill_house_key = request.GET.get('kill_house_key')
|
||
if 'type' in request.GET:
|
||
role = request.GET['role']
|
||
if date1:
|
||
date1 = datetime.strptime(str(date1), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(date2), '%Y-%m-%d').date()
|
||
|
||
if role in ['ProvinceOperator', 'Commerce', 'ProvinceSupervisor''GuildRoom', 'SuperAdmin',
|
||
'ImprovingLivestock', 'AdminX', 'Supporter']:
|
||
if kill_house_key and kill_house_key != 'all':
|
||
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
kill_house__key=kill_house_key,
|
||
trash=False)
|
||
else:
|
||
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
trash=False)
|
||
|
||
|
||
elif role in ['CityJahad', 'CityPoultry', 'CityOperator']:
|
||
|
||
if kill_house_key and kill_house_key != 'all':
|
||
|
||
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(
|
||
kill_house__system_address__city=user.city,
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
kill_house__key=kill_house_key,
|
||
trash=False)
|
||
|
||
else:
|
||
|
||
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(
|
||
kill_house__system_address__city=user.city,
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
trash=False)
|
||
|
||
|
||
|
||
|
||
else:
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).first()
|
||
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(
|
||
kill_house=kill_house,
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
trash=False)
|
||
|
||
else:
|
||
if role in ['ProvinceOperator', 'Commerce', 'ProvinceSupervisor''GuildRoom', 'SuperAdmin',
|
||
'ImprovingLivestock', 'AdminX', 'Supporter']:
|
||
|
||
if kill_house_key and kill_house_key != 'all':
|
||
|
||
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(
|
||
trash=False, kill_house__key=kill_house_key)
|
||
else:
|
||
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(
|
||
trash=False)
|
||
|
||
|
||
elif role in ['CityJahad', 'CityPoultry', 'CityOperator']:
|
||
if kill_house_key and kill_house_key != 'all':
|
||
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(
|
||
kill_house__system_address__city=user.city,
|
||
trash=False, kill_house__key=kill_house_key)
|
||
else:
|
||
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(
|
||
kill_house__system_address__city=user.city,
|
||
trash=False)
|
||
|
||
|
||
|
||
else:
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).first()
|
||
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(
|
||
kill_house=kill_house,
|
||
trash=False)
|
||
|
||
if 'search' in request.GET:
|
||
kill_house_free_sale_bar_info_list = []
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=kill_house_free_sale_bar_info
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=kill_house_free_sale_bar_info)
|
||
kill_house_free_sale_bar_info_list = ps.filter()
|
||
kill_house_free_sale_bar_info = [] if len(
|
||
kill_house_free_sale_bar_info_list) == 0 else kill_house_free_sale_bar_info_list
|
||
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(kill_house_free_sale_bar_info)
|
||
if page is not None:
|
||
serializer = self.serializer_class(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
else:
|
||
now = datetime.now().date()
|
||
date = datetime.strptime(str(request.GET['date']),
|
||
'%Y-%m-%d').date() if 'date' in request.GET else now
|
||
kill_house = KillHouse.objects.get(key=request.GET['kill_house_key'])
|
||
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(kill_house=kill_house,
|
||
date__year=date.year,
|
||
date__month=date.month,
|
||
date__day=date.day,
|
||
trash=False)
|
||
|
||
serializer = self.serializer_class(kill_house_free_sale_bar_info, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
def update(self, request, pk=None, *args, **kwargs):
|
||
free_sale_bar = KillHouseFreeSaleBarInformation.objects.get(key=request.data['key'])
|
||
product = free_sale_bar.product
|
||
kill_house = free_sale_bar.kill_house
|
||
if KillHouseFreeSaleBarInformation.objects.filter(trash=False,
|
||
clearance_code=request.data.get('clearance_code'),
|
||
quarantine_weight_of_carcasses__gt=0).exists() and 'register_code' not in request.data.keys():
|
||
return Response({"result": "کد قرنطینه در سامانه ثبت شده است!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
now = datetime.now().date()
|
||
if free_sale_bar.quota == 'governmental':
|
||
if free_sale_bar.kill_house.total_input_warehouse_governmental_weight < (
|
||
(
|
||
free_sale_bar.kill_house.total_selling_warehouse_governmental_weight - free_sale_bar.weight_of_carcasses) +
|
||
request.data[
|
||
'weight_of_carcasses']):
|
||
return Response({"result": "وزن وارد شده بیشتر از باقی مانده دولتی می باشد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
else:
|
||
if free_sale_bar.kill_house.total_input_warehouse_free_weight < (
|
||
(free_sale_bar.kill_house.total_selling_warehouse_free_weight - free_sale_bar.weight_of_carcasses) +
|
||
request.data[
|
||
'weight_of_carcasses']):
|
||
return Response({"result": "وزن وارد شده بیشتر از باقی مانده آزاد می باشد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
allow_register_code = AllowRegisterCodeForKillHouseFreeSaleBarInformation.objects.filter(trash=False,
|
||
active=True).first()
|
||
if allow_register_code:
|
||
if 'register_code' in request.data.keys():
|
||
code = request.data['register_code']
|
||
if code != free_sale_bar.registration_code:
|
||
return Response({"result": "کد وارد شده صحیح نیست"}, status=status.HTTP_403_FORBIDDEN)
|
||
free_sale_bar.logged_registration_code = code
|
||
request.data.pop('register_code')
|
||
free_sale_bar.save()
|
||
serializer = self.serializer_class(free_sale_bar)
|
||
|
||
serializer.update(instance=free_sale_bar, validated_data=request.data)
|
||
kill_house_free_sale_product_warehousing(product)
|
||
free_sale_bar.real_number_of_carcasses = free_sale_bar.number_of_carcasses
|
||
free_sale_bar.real_weight_of_carcasses = free_sale_bar.weight_of_carcasses
|
||
free_sale_bar.total_wage_amount = free_sale_bar.wage * free_sale_bar.real_weight_of_carcasses
|
||
free_sale_bar.save()
|
||
kill_house_free_sale_product_warehousing(product)
|
||
|
||
union_percent = free_sale_bar.union_share_percent / 100 if free_sale_bar.union_share_percent > 0 else 0
|
||
company_percent = free_sale_bar.company_share_percent / 100 if free_sale_bar.company_share_percent > 0 else 0
|
||
guilds_percent = free_sale_bar.guilds_share_percent / 100 if free_sale_bar.guilds_share_percent > 0 else 0
|
||
city_share_percent = free_sale_bar.city_share_percent / 100 if free_sale_bar.city_share_percent > 0 else 0
|
||
wallet_share_percent = free_sale_bar.wallet_share_percent / 100 if free_sale_bar.wallet_share_percent > 0 else 0
|
||
other_share_percent = free_sale_bar.other_share_percent / 100 if free_sale_bar.other_share_percent > 0 else 0
|
||
free_sale_bar.union_share = int(union_percent * free_sale_bar.total_wage_amount)
|
||
free_sale_bar.company_share = int(company_percent * free_sale_bar.total_wage_amount)
|
||
free_sale_bar.guilds_share = int(guilds_percent * free_sale_bar.total_wage_amount)
|
||
free_sale_bar.city_share = int(city_share_percent * free_sale_bar.total_wage_amount)
|
||
free_sale_bar.wallet_share = int(wallet_share_percent * free_sale_bar.total_wage_amount)
|
||
free_sale_bar.other_share = int(other_share_percent * free_sale_bar.total_wage_amount)
|
||
|
||
get_gid_out_province(free_sale_bar.id)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
def destroy(self, request, pk=None, *args, **kwargs):
|
||
free_sale_bar = KillHouseFreeSaleBarInformation.objects.get(key=request.GET['key'])
|
||
product = free_sale_bar.product
|
||
|
||
# ware_house = KillHouseWareHouse.objects.get(kill_house=free_sale_bar.kill_house,
|
||
# date__date=free_sale_bar.date.date(), trash=False)
|
||
#
|
||
# if ware_house.allocated_total_number_of_carcasses != free_sale_bar.real_number_of_carcasses or ware_house.allocated_total_weight_of_carcasses != free_sale_bar.real_weight_of_carcasses:
|
||
# if ware_house.remain_total_number_of_carcasses < free_sale_bar.real_number_of_carcasses or ware_house.remain_total_weight_of_carcasses < free_sale_bar.real_weight_of_carcasses:
|
||
# return Response({"result": "به علت تخصیص بار به مباشرین و صنف ها امکان حذف بار وجود ندارد!"},
|
||
# status=status.HTTP_403_FORBIDDEN)
|
||
free_sale_bar.trash = True
|
||
free_sale_bar.save()
|
||
kill_house_free_sale_product_warehousing(product)
|
||
|
||
#
|
||
# ware_house.allocated_total_number_of_carcasses -= free_sale_bar.real_number_of_carcasses
|
||
# ware_house.allocated_total_weight_of_carcasses -= free_sale_bar.real_weight_of_carcasses
|
||
# ware_house.save()
|
||
|
||
return Response({"result": "بار با موفقیت حذف شد !"}, status=status.HTTP_200_OK)
|
||
|
||
|
||
class PosKillHouseFreeSaleBarInformationViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseFreeSaleBarInformation.objects.all()
|
||
serializer_class = KillHouseFreeSaleBarInformationSerializer
|
||
permission_classes = [AllowAny]
|
||
pagination_class = CustomPagination
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = KillHouseFreeSaleBarInformationFilterSet
|
||
filterset_fields = [
|
||
'type_car',
|
||
'pelak',
|
||
'clearance_code',
|
||
'kill_house__name',
|
||
'kill_house__kill_house_operator__user__fullname',
|
||
'kill_house__kill_house_operator__user__first_name',
|
||
'kill_house__kill_house_operator__user__last_name',
|
||
'kill_house__kill_house_operator__user__mobile',
|
||
'buyer__fullname',
|
||
'buyer__first_name',
|
||
'buyer__last_name',
|
||
'buyer__mobile',
|
||
'buyer__unit_name',
|
||
'buyer_name',
|
||
'buyer_mobile',
|
||
'province',
|
||
'city',
|
||
|
||
]
|
||
|
||
def create(self, request, *args, **kwargs):
|
||
# user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
now = datetime.now().date()
|
||
now_time = datetime.now().time()
|
||
quota = request.data['quota']
|
||
pos = POSMachine.objects.get(pos_id=request.data['pos-id'], trash=False)
|
||
kill_house = pos.kill_house
|
||
buyer = OutProvinceCarcassesBuyer.objects.get(key=request.data['buyer_key'])
|
||
request.data.pop('buyer_key')
|
||
product = RolesProducts.objects.get(key=request.data['product_key'])
|
||
request.data.pop('product_key')
|
||
request.data.pop('pos-id')
|
||
date = datetime.now()
|
||
# date = datetime.strptime(str(request.data['date']), '%Y-%m-%d').date()
|
||
production_date = datetime.strptime(str(request.data['production_date']), '%Y-%m-%d').date()
|
||
# date = datetime(year=date.year, month=date.month, day=date.day, hour=now_time.hour,
|
||
# minute=now_time.minute,
|
||
# second=now_time.second)
|
||
production_date = datetime(year=production_date.year, month=production_date.month, day=production_date.day,
|
||
hour=now_time.hour,
|
||
minute=now_time.minute,
|
||
second=now_time.second)
|
||
# request.data.pop('date')
|
||
request.data.pop('production_date')
|
||
if OperationLimitation.objects.all().first().kill_house_free_sale_limitation == True:
|
||
|
||
if now != date.date():
|
||
return Response({"result": "به علت مغایرت تاریخ امکان فروش بار وجود ندارد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
carcass_distribution = RestrictionCarcassDistribution.objects.filter(trash=False,
|
||
distribution_type='KillHouse',
|
||
allow=True,
|
||
out=True).first()
|
||
if carcass_distribution and datetime.now().time() > carcass_distribution.time:
|
||
return Response({"result": "لطفا در ساعات مجاز اقدام نمایید!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
if request.data['sale_type'] == 'free':
|
||
quota = request.data['quota']
|
||
if quota == 'governmental':
|
||
if not kill_house.free_sale_form_governmental_quota:
|
||
return Response({"result": "مجاز به فروش آزاد از انبار دولتی نمیباشید!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
if quota == 'governmental':
|
||
if kill_house.total_input_warehouse_governmental_weight < (
|
||
kill_house.total_selling_warehouse_governmental_weight + request.data['weight_of_carcasses']):
|
||
return Response({"result": "مجاز به فروش دولتی بیشتر از ورودی دولتی انبار نمیباشید!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
else:
|
||
if kill_house.total_input_warehouse_free_weight < (
|
||
kill_house.total_selling_warehouse_free_weight + request.data['weight_of_carcasses']):
|
||
return Response({"result": "مجاز به فروش آزاد بیشتر از ورودی آزاد انبار نمیباشید!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
if quota == 'governmental':
|
||
free_sale_type = request.data['sale_type']
|
||
if kill_house.governmental_selling_permission:
|
||
if free_sale_type == 'free':
|
||
if not kill_house.free_sale_form_governmental_quota:
|
||
if kill_house.total_commitment_selling_in_province_governmental_weight > kill_house.total_selling_in_province_governmental_weight:
|
||
return Response({"result": "ابتدا تعهد داخل استان رو تکمیل کنید!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
else:
|
||
if kill_house.total_commitment_selling_in_province_governmental_weight > kill_house.total_selling_in_province_governmental_weight:
|
||
return Response({"result": "ابتدا تعهد داخل استان رو تکمیل کنید!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
else:
|
||
return Response({"result": "مجاز به فروش دولتی نمیباشید!"}, status=status.HTTP_403_FORBIDDEN)
|
||
if kill_house.total_commitment_selling_out_province_governmental_weight > 0:
|
||
if kill_house.total_selling_out_province_governmental_weight + request.data[
|
||
'weight_of_carcasses'] > kill_house.total_commitment_selling_out_province_governmental_weight:
|
||
return Response({"result": "به دلیل بیشتر از وزن تعهد مجاز به فروش دولتی نمیباشید!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
else:
|
||
if kill_house.free_selling_permission:
|
||
if kill_house.total_commitment_selling_in_province_free_weight > kill_house.total_selling_in_province_free_weight:
|
||
return Response({"result": "ابتدا تعهد داخل استان رو تکمیل کنید!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
else:
|
||
return Response({"result": "مجاز به فروش آزاد نمیباشید!"}, status=status.HTTP_403_FORBIDDEN)
|
||
|
||
if kill_house.total_commitment_selling_out_province_free_weight > 0:
|
||
if kill_house.total_selling_out_province_free_weight + request.data[
|
||
'weight_of_carcasses'] > kill_house.total_commitment_selling_out_province_free_weight:
|
||
return Response({"result": "به دلیل بیشتر از وزن تعهد مجاز به فروش دولتی نمیباشید!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
ware_house_remain_weight = product.total_remain_weight
|
||
allocations_weight = StewardAllocation.objects.filter(trash=False, receiver_state__in=('pending', 'accepted'),
|
||
kill_house=kill_house, date__date=now).aggregate(
|
||
total=Sum('real_weight_of_carcasses'))['total'] or 0
|
||
free_sales_weight = \
|
||
KillHouseFreeSaleBarInformation.objects.filter(trash=False, kill_house=kill_house,
|
||
date__date=now).aggregate(
|
||
total=Sum('real_weight_of_carcasses'))['total'] or 0
|
||
total_weight = ware_house_remain_weight + allocations_weight + free_sales_weight
|
||
free_sales_weight += request.data['weight_of_carcasses']
|
||
|
||
if KillHouseFreeSaleBarInformation.objects.filter(trash=False, clearance_code=request.data['clearance_code'],
|
||
quarantine_weight_of_carcasses__gt=0).exists():
|
||
return Response({"result": "کد قرنطینه در سامانه ثبت شده است!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
serializer = self.serializer_class(data=request.data)
|
||
if serializer.is_valid():
|
||
kill_house_free_sale_bar_info = serializer.create(validated_data=request.data)
|
||
kill_house_free_sale_bar_info.kill_house = kill_house
|
||
if buyer is not None:
|
||
kill_house_free_sale_bar_info.buyer = buyer
|
||
kill_house_free_sale_bar_info.buyer_name = buyer.fullname
|
||
kill_house_free_sale_bar_info.buyer_mobile = buyer.mobile
|
||
kill_house_free_sale_bar_info.city = buyer.city
|
||
kill_house_free_sale_bar_info.province = buyer.province
|
||
|
||
kill_house_free_sale_bar_info.date = date
|
||
kill_house_free_sale_bar_info.production_date = production_date
|
||
kill_house_free_sale_bar_info.product = product
|
||
kill_house_free_sale_bar_info.real_number_of_carcasses = kill_house_free_sale_bar_info.number_of_carcasses
|
||
kill_house_free_sale_bar_info.real_weight_of_carcasses = kill_house_free_sale_bar_info.weight_of_carcasses
|
||
|
||
wage = 0
|
||
wage_type = WageType.objects.filter(en_name='carcasse-sell', trash=False).first()
|
||
if wage_type.status == True:
|
||
wage = wage_type.amount
|
||
kill_house_free_sale_bar_info.wage = wage
|
||
kill_house_free_sale_bar_info.total_wage_amount = wage * kill_house_free_sale_bar_info.real_weight_of_carcasses
|
||
|
||
percentages_wage_type = PercentageOfWageType.objects.filter(wage_type=wage_type, percent__gt=0, trash=False)
|
||
|
||
if wage_type and wage_type.status == True and percentages_wage_type:
|
||
for percentage_wage_type in percentages_wage_type:
|
||
if percentage_wage_type.share_type.en_name == 'union':
|
||
kill_house_free_sale_bar_info.union_share = int(
|
||
(percentage_wage_type.percent / 100) * kill_house_free_sale_bar_info.total_wage_amount)
|
||
kill_house_free_sale_bar_info.union_share_percent = percentage_wage_type.percent
|
||
elif percentage_wage_type.share_type.en_name == 'company':
|
||
kill_house_free_sale_bar_info.company_share = int(
|
||
(percentage_wage_type.percent / 100) * kill_house_free_sale_bar_info.total_wage_amount)
|
||
kill_house_free_sale_bar_info.company_share_percent = percentage_wage_type.percent
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'guilds':
|
||
kill_house_free_sale_bar_info.guilds_share = int(
|
||
(percentage_wage_type.percent / 100) * kill_house_free_sale_bar_info.total_wage_amount)
|
||
kill_house_free_sale_bar_info.guilds_share_percent = percentage_wage_type.percent
|
||
elif percentage_wage_type.share_type.en_name == 'city':
|
||
kill_house_free_sale_bar_info.city_share = int(
|
||
(percentage_wage_type.percent / 100) * kill_house_free_sale_bar_info.total_wage_amount)
|
||
kill_house_free_sale_bar_info.city_share_percent = percentage_wage_type.percent
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'wallet':
|
||
kill_house_free_sale_bar_info.wallet_share = int(
|
||
(percentage_wage_type.percent / 100) * kill_house_free_sale_bar_info.total_wage_amount)
|
||
kill_house_free_sale_bar_info.wallet_share_percent = percentage_wage_type.percent
|
||
|
||
else:
|
||
kill_house_free_sale_bar_info.other_share = int(
|
||
(percentage_wage_type.percent / 100) * kill_house_free_sale_bar_info.total_wage_amount)
|
||
kill_house_free_sale_bar_info.other_share_percent = percentage_wage_type.percent
|
||
kill_house_free_sale_bar_info.save()
|
||
allow_register_code = AllowRegisterCodeForKillHouseFreeSaleBarInformation.objects.filter(trash=False,
|
||
active=True).first()
|
||
if allow_register_code:
|
||
number = random.randint(10000, 99000)
|
||
kill_house_free_sale_bar_info.registration_code = number
|
||
kill_house_free_sale_bar_info.system_registration_code = True
|
||
if int(allow_register_code.time) > 0:
|
||
kill_house_free_sale_bar_info.active_expire_date_time = True
|
||
kill_house_free_sale_bar_info.expire_date_time_registration_code = datetime.now() + timedelta(
|
||
minutes=int(allow_register_code.time))
|
||
kill_house_free_sale_bar_info.save()
|
||
send_sms_for_sale_bar(kill_house_free_sale_bar_info)
|
||
get_gid_out_province(kill_house_free_sale_bar_info.id)
|
||
kill_house_free_sale_product_warehousing(product)
|
||
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
pos = POSMachine.objects.get(pos_id=request.GET['pos-id'], trash=False)
|
||
date1 = request.GET.get('date1')
|
||
date2 = request.GET.get('date2')
|
||
role = request.GET['role']
|
||
if date1:
|
||
date1 = datetime.strptime(str(date1), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(date2), '%Y-%m-%d').date()
|
||
|
||
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(
|
||
kill_house=pos.kill_house,
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
trash=False)
|
||
else:
|
||
|
||
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(
|
||
kill_house=pos.kill_house,
|
||
trash=False)
|
||
|
||
if 'search' in request.GET:
|
||
kill_house_free_sale_bar_info_list = []
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=kill_house_free_sale_bar_info
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=kill_house_free_sale_bar_info)
|
||
kill_house_free_sale_bar_info_list = ps.filter()
|
||
kill_house_free_sale_bar_info = [] if len(
|
||
kill_house_free_sale_bar_info_list) == 0 else kill_house_free_sale_bar_info_list
|
||
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(kill_house_free_sale_bar_info)
|
||
if page is not None:
|
||
serializer = self.serializer_class(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
serializer = self.serializer_class(kill_house_free_sale_bar_info, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
def update(self, request, pk=None, *args, **kwargs):
|
||
free_sale_bar = KillHouseFreeSaleBarInformation.objects.get(key=request.data['key'])
|
||
product = free_sale_bar.product
|
||
kill_house = free_sale_bar.kill_house
|
||
if KillHouseFreeSaleBarInformation.objects.filter(trash=False,
|
||
clearance_code=request.data.get('clearance_code'),
|
||
quarantine_weight_of_carcasses__gt=0).exists():
|
||
return Response({"result": "کد قرنطینه در سامانه ثبت شده است!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
now = datetime.now().date()
|
||
|
||
if free_sale_bar.quota == 'governmental':
|
||
if free_sale_bar.kill_house.total_input_warehouse_governmental_weight < (
|
||
(
|
||
free_sale_bar.kill_house.total_selling_warehouse_governmental_weight - free_sale_bar.weight_of_carcasses) +
|
||
request.data[
|
||
'weight_of_carcasses']):
|
||
return Response({"result": "وزن وارد شده بیشتر از باقی مانده دولتی می باشد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
else:
|
||
if free_sale_bar.kill_house.total_input_warehouse_free_weight < (
|
||
(free_sale_bar.kill_house.total_selling_warehouse_free_weight - free_sale_bar.weight_of_carcasses) +
|
||
request.data[
|
||
'weight_of_carcasses']):
|
||
return Response({"result": "وزن وارد شده بیشتر از باقی مانده آزاد می باشد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
allow_register_code = AllowRegisterCodeForKillHouseFreeSaleBarInformation.objects.filter(trash=False,
|
||
active=True).first()
|
||
if allow_register_code:
|
||
if 'register_code' in request.data.keys():
|
||
code = request.data['register_code']
|
||
if code != free_sale_bar.registration_code:
|
||
return Response({"result": "کد وارد شده صحیح نیست"}, status=status.HTTP_403_FORBIDDEN)
|
||
free_sale_bar.logged_registration_code = code
|
||
request.data.pop('register_code')
|
||
free_sale_bar.save()
|
||
serializer = self.serializer_class(free_sale_bar)
|
||
|
||
serializer.update(instance=free_sale_bar, validated_data=request.data)
|
||
kill_house_free_sale_product_warehousing(product)
|
||
free_sale_bar.real_number_of_carcasses = free_sale_bar.number_of_carcasses
|
||
free_sale_bar.real_weight_of_carcasses = free_sale_bar.weight_of_carcasses
|
||
free_sale_bar.total_wage_amount = free_sale_bar.wage * free_sale_bar.real_weight_of_carcasses
|
||
free_sale_bar.save()
|
||
kill_house_free_sale_product_warehousing(product)
|
||
|
||
union_percent = free_sale_bar.union_share_percent / 100 if free_sale_bar.union_share_percent > 0 else 0
|
||
company_percent = free_sale_bar.company_share_percent / 100 if free_sale_bar.company_share_percent > 0 else 0
|
||
guilds_percent = free_sale_bar.guilds_share_percent / 100 if free_sale_bar.guilds_share_percent > 0 else 0
|
||
city_share_percent = free_sale_bar.city_share_percent / 100 if free_sale_bar.city_share_percent > 0 else 0
|
||
wallet_share_percent = free_sale_bar.wallet_share_percent / 100 if free_sale_bar.wallet_share_percent > 0 else 0
|
||
other_share_percent = free_sale_bar.other_share_percent / 100 if free_sale_bar.other_share_percent > 0 else 0
|
||
free_sale_bar.union_share = int(union_percent * free_sale_bar.total_wage_amount)
|
||
free_sale_bar.company_share = int(company_percent * free_sale_bar.total_wage_amount)
|
||
free_sale_bar.guilds_share = int(guilds_percent * free_sale_bar.total_wage_amount)
|
||
free_sale_bar.city_share = int(city_share_percent * free_sale_bar.total_wage_amount)
|
||
free_sale_bar.wallet_share = int(wallet_share_percent * free_sale_bar.total_wage_amount)
|
||
free_sale_bar.other_share = int(other_share_percent * free_sale_bar.total_wage_amount)
|
||
|
||
get_gid_out_province(free_sale_bar.id)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
def destroy(self, request, pk=None, *args, **kwargs):
|
||
free_sale_bar = KillHouseFreeSaleBarInformation.objects.get(key=request.GET['key'])
|
||
product = free_sale_bar.product
|
||
free_sale_bar.trash = True
|
||
free_sale_bar.save()
|
||
kill_house_free_sale_product_warehousing(product)
|
||
return Response({"result": "بار با موفقیت حذف شد !"}, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHouseFreeSaleBarInformationDashboardViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseFreeSaleBarInformation.objects.all()
|
||
serializer_class = KillHouseFreeSaleBarInformationSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = KillHouseFreeSaleBarInformationFilterSet
|
||
filterset_fields = [
|
||
'type_car',
|
||
'pelak',
|
||
'clearance_code',
|
||
'kill_house__name',
|
||
'kill_house__kill_house_operator__user__fullname',
|
||
'kill_house__kill_house_operator__user__first_name',
|
||
'kill_house__kill_house_operator__user__last_name',
|
||
'kill_house__kill_house_operator__user__mobile',
|
||
'buyer__fullname',
|
||
'buyer__first_name',
|
||
'buyer__last_name',
|
||
'buyer__mobile',
|
||
'buyer__unit_name',
|
||
'buyer_name',
|
||
'buyer_mobile',
|
||
'province',
|
||
'city',
|
||
|
||
]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
role = request.GET['role']
|
||
kill_house_key = request.GET.get('kill_house_key')
|
||
date1 = request.GET['date1']
|
||
date2 = request.GET['date2']
|
||
if date1:
|
||
date1 = datetime.strptime(str(date1), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(date2), '%Y-%m-%d').date()
|
||
if role in ['ProvinceOperator', 'Commerce', 'ProvinceSupervisor''GuildRoom', 'SuperAdmin',
|
||
'ImprovingLivestock', 'AdminX', 'Supporter']:
|
||
if date1:
|
||
ware_houses = KillHouseWareHouse.objects.filter(date__date__gte=date1,
|
||
date__date__lte=date2)
|
||
if kill_house_key and kill_house_key != 'all':
|
||
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
calculate_status=True,
|
||
temporary_trash=False,
|
||
temporary_deleted=False,
|
||
kill_house__key=kill_house_key,
|
||
trash=False)
|
||
else:
|
||
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
calculate_status=True,
|
||
temporary_trash=False,
|
||
temporary_deleted=False,
|
||
trash=False)
|
||
else:
|
||
ware_houses = KillHouseWareHouse.objects.filter(trash=False)
|
||
|
||
if kill_house_key and kill_house_key != 'all':
|
||
|
||
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(
|
||
calculate_status=True,
|
||
temporary_trash=False,
|
||
temporary_deleted=False,
|
||
kill_house__key=kill_house_key,
|
||
trash=False)
|
||
else:
|
||
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(
|
||
calculate_status=True,
|
||
temporary_trash=False,
|
||
temporary_deleted=False,
|
||
trash=False)
|
||
kill_houses = KillHouse.objects.filter(trash=False,
|
||
pk__in=kill_house_free_sale_bar_info.values_list('kill_house',
|
||
flat=True))
|
||
buyers = len(kill_house_free_sale_bar_info.values_list('buyer', flat=True).distinct())
|
||
|
||
|
||
|
||
|
||
elif role in ['CityJahad', 'CityPoultry', 'CityOperator']:
|
||
if date1:
|
||
|
||
ware_houses = KillHouseWareHouse.objects.filter(kill_house__system_address__city=user.city,
|
||
date__date__gte=date1,
|
||
date__date__lte=date2)
|
||
|
||
if kill_house_key and kill_house_key != 'all':
|
||
|
||
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(
|
||
kill_house__system_address__city=user.city,
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
calculate_status=True,
|
||
temporary_trash=False,
|
||
temporary_deleted=False,
|
||
kill_house__key=kill_house_key,
|
||
trash=False)
|
||
else:
|
||
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(
|
||
kill_house__system_address__city=user.city,
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
calculate_status=True,
|
||
temporary_trash=False,
|
||
temporary_deleted=False,
|
||
trash=False)
|
||
else:
|
||
ware_houses = KillHouseWareHouse.objects.filter(kill_house__system_address__city=user.city, trash=False)
|
||
if kill_house_key and kill_house_key != 'all':
|
||
|
||
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(
|
||
kill_house__system_address__city=user.city,
|
||
calculate_status=True,
|
||
temporary_trash=False,
|
||
temporary_deleted=False,
|
||
kill_house__key=kill_house_key,
|
||
trash=False)
|
||
else:
|
||
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(
|
||
kill_house__system_address__city=user.city,
|
||
calculate_status=True,
|
||
temporary_trash=False,
|
||
temporary_deleted=False,
|
||
trash=False)
|
||
kill_houses = KillHouse.objects.filter(trash=False,
|
||
pk__in=kill_house_free_sale_bar_info.values_list('kill_house',
|
||
flat=True))
|
||
buyers = len(kill_house_free_sale_bar_info.values_list('buyer', flat=True).distinct())
|
||
|
||
|
||
|
||
|
||
else:
|
||
kill_houses = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).first()
|
||
if date1:
|
||
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(
|
||
kill_house=kill_houses,
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
calculate_status=True,
|
||
temporary_trash=False,
|
||
temporary_deleted=False,
|
||
trash=False)
|
||
else:
|
||
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(
|
||
kill_house=kill_houses,
|
||
calculate_status=True,
|
||
temporary_trash=False,
|
||
temporary_deleted=False,
|
||
trash=False)
|
||
|
||
buyers = len(kill_house_free_sale_bar_info.values_list('buyer', flat=True).distinct())
|
||
|
||
if 'search' in request.GET:
|
||
kill_house_free_sale_bar_info_list = []
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=kill_house_free_sale_bar_info
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=kill_house_free_sale_bar_info)
|
||
kill_house_free_sale_bar_info_list = ps.filter()
|
||
kill_house_free_sale_bar_info = [] if len(
|
||
kill_house_free_sale_bar_info_list) == 0 else kill_house_free_sale_bar_info_list
|
||
|
||
if role == 'KillHouse':
|
||
result = {
|
||
"number_of_allocations": len(kill_house_free_sale_bar_info),
|
||
"number_of_buyers": buyers,
|
||
"total_number_of_allocation_carcasses":
|
||
kill_house_free_sale_bar_info.aggregate(total=Sum('number_of_carcasses'))['total'] or 0,
|
||
"total_weight_of_allocation_carcasses":
|
||
kill_house_free_sale_bar_info.aggregate(total=Sum('weight_of_carcasses'))['total'] or 0,
|
||
|
||
}
|
||
|
||
else:
|
||
result = {
|
||
"number_of_kill_houses": len(kill_houses),
|
||
"number_of_allocations": len(kill_house_free_sale_bar_info),
|
||
"number_of_buyers": buyers,
|
||
"total_number_of_allocation_carcasses":
|
||
kill_house_free_sale_bar_info.aggregate(total=Sum('number_of_carcasses'))['total'] or 0,
|
||
"total_weight_of_allocation_carcasses": int(
|
||
kill_house_free_sale_bar_info.aggregate(total=Sum('weight_of_carcasses'))['total'] or 0),
|
||
"remain_total_number_of_carcasses":
|
||
ware_houses.aggregate(total=Sum('remain_total_number_of_carcasses'))[
|
||
'total'] or 0,
|
||
"remain_total_weight_of_carcasses":
|
||
ware_houses.aggregate(total=Sum('remain_total_weight_of_carcasses'))[
|
||
'total'] or 0,
|
||
|
||
}
|
||
|
||
return Response(result, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHousebuyersDashboarForFreeSaleBarInformationdViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouse.objects.all()
|
||
serializer_class = KillHouseForKillHouseVetKillHouseSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
role = request.GET['role']
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
if role == 'KillHouse':
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).first()
|
||
else:
|
||
kill_house = KillHouse.objects.filter(key=request.GET['kill_house_key'], kill_house_operator__user=user,
|
||
trash=False).first()
|
||
|
||
buyers = OutProvinceCarcassesBuyer.objects.filter(Kill_house=kill_house, trash=False)
|
||
free_sales = KillHouseFreeSaleBarInformation.objects.filter(trash=False, kill_house=kill_house)
|
||
|
||
total_quantity = free_sales.aggregate(total=Sum('number_of_carcasses'))[
|
||
'total'] or 0
|
||
total_weight = free_sales.aggregate(total=Sum('weight_of_carcasses'))[
|
||
'total'] or 0
|
||
result = {
|
||
"buyers": len(buyers),
|
||
"number_of_requests": len(free_sales),
|
||
"total_quantity": total_quantity,
|
||
"total_weight": total_weight,
|
||
}
|
||
return Response({"result": result}, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHouseFreeBarInformationforWageTotalViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseFreeBarInformation.objects.all()
|
||
serializer_class = KillHouseFreeBarInformationForWageTotalSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
pagination_class = CustomPagination
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = KillHouseFreeBarInformationFilterSet
|
||
filterset_fields = [
|
||
'kill_house__name',
|
||
'kill_house__kill_house_operator__user__mobile',
|
||
'kill_house__kill_house_operator__user__fullname',
|
||
'kill_house__kill_house_operator__user__mobile',
|
||
|
||
]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
type = request.GET['type']
|
||
if request.GET['role'] == 'KillHouse':
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).first()
|
||
else:
|
||
kill_house = KillHouse.objects.get(key=request.GET['kill_house_key'])
|
||
|
||
if 'date1' in request.GET:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
|
||
if request.GET['role'] == 'ProvinceOperator':
|
||
kill_house_free_bar_info = KillHouseFreeBarInformation.objects.filter(kill_house=kill_house,
|
||
buy_type=type,
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
union_share__gt=0,
|
||
archive_wage=False,
|
||
trash=False).order_by('id')
|
||
elif request.GET['role'] == 'Company':
|
||
kill_house_free_bar_info = KillHouseFreeBarInformation.objects.filter(kill_house=kill_house,
|
||
buy_type=type,
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
company_share__gt=0,
|
||
archive_wage=False,
|
||
trash=False).order_by('id')
|
||
elif request.GET['role'] == 'Guilds':
|
||
kill_house_free_bar_info = KillHouseFreeBarInformation.objects.filter(kill_house=kill_house,
|
||
buy_type=type,
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
guilds_share__gt=0,
|
||
archive_wage=False,
|
||
trash=False).order_by('id')
|
||
else:
|
||
|
||
kill_house_free_bar_info = KillHouseFreeBarInformation.objects.filter(kill_house=kill_house,
|
||
buy_type=type,
|
||
date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
archive_wage=False,
|
||
trash=False).order_by('id')
|
||
|
||
else:
|
||
if request.GET['role'] == 'ProvinceOperator':
|
||
kill_house_free_bar_info = KillHouseFreeBarInformation.objects.filter(kill_house=kill_house,
|
||
buy_type=type,
|
||
union_share__gt=0,
|
||
trash=False).order_by('id')
|
||
elif request.GET['role'] == 'Company':
|
||
kill_house_free_bar_info = KillHouseFreeBarInformation.objects.filter(kill_house=kill_house,
|
||
buy_type=type,
|
||
company_share__gt=0,
|
||
archive_wage=False,
|
||
trash=False).order_by('id')
|
||
elif request.GET['role'] == 'Guilds':
|
||
kill_house_free_bar_info = KillHouseFreeBarInformation.objects.filter(kill_house=kill_house,
|
||
buy_type=type,
|
||
guilds_share__gt=0,
|
||
archive_wage=False,
|
||
trash=False).order_by('id')
|
||
else:
|
||
|
||
kill_house_free_bar_info = KillHouseFreeBarInformation.objects.filter(kill_house=kill_house,
|
||
buy_type=type,
|
||
archive_wage=False,
|
||
trash=False).order_by('id')
|
||
|
||
if 'search' in request.GET:
|
||
kill_house_free_bar_info_list = []
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=kill_house_free_bar_info
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=kill_house_free_bar_info)
|
||
kill_house_free_bar_info_list = ps.filter()
|
||
kill_house_free_bar_info = [] if len(
|
||
kill_house_free_bar_info_list) == 0 else kill_house_free_bar_info_list
|
||
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(kill_house_free_bar_info)
|
||
if page is not None:
|
||
serializer = self.get_serializer(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = self.get_serializer(kill_house_free_bar_info, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHouseFreeBarInformationViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseFreeBarInformation.objects.all()
|
||
serializer_class = KillHouseFreeBarInformationSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
pagination_class = CustomPagination
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = KillHouseFreeBarInformationFilterSet
|
||
filterset_fields = [
|
||
'kill_house__name',
|
||
'poultry_name',
|
||
'poultry_mobile',
|
||
'province',
|
||
'bar_code',
|
||
'city',
|
||
'driver_name',
|
||
'driver_mobile',
|
||
'bar_clearance_code',
|
||
'kill_house__kill_house_operator__user__mobile',
|
||
'kill_house__kill_house_operator__user__fullname',
|
||
|
||
]
|
||
|
||
def create(self, request, *args, **kwargs):
|
||
killer = None
|
||
now_time = datetime.now().time()
|
||
dispenser = request.data.pop('dispenser',None)
|
||
representative = request.data.pop('representative',None)
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).first()
|
||
free_commitment_percent = kill_house.out_province_free_buying_commitment_percent
|
||
if 'bar_clearance_code' in request.data.keys():
|
||
if KillHouseFreeBarInformation.objects.filter(trash=False, bar_clearance_code=request.data[
|
||
'bar_clearance_code']).exists():
|
||
return Response({'result': 'کد قرنطینه قبلا در سامانه ثبت شده است!'}, status=status.HTTP_403_FORBIDDEN)
|
||
if 'product_key' not in request.data.keys():
|
||
return Response({'result': 'لطفا محصول را انتخاب کنید!'}, status=status.HTTP_403_FORBIDDEN)
|
||
product = RolesProducts.objects.get(key=request.data['product_key'])
|
||
request.data.pop('product_key')
|
||
if 'killer_key' in request.data.keys() and request.data['killer_key'] != None:
|
||
killer = KillHouse.objects.get(key=request.data['killer_key'])
|
||
request.data.pop('killer_key')
|
||
|
||
try:
|
||
image = request.data['bar_image']
|
||
request.data.pop('bar_image')
|
||
except:
|
||
image = None
|
||
date = datetime.strptime(str(request.data['date']), '%Y-%m-%d').date()
|
||
date = datetime(year=date.year, month=date.month, day=date.day, hour=now_time.hour,
|
||
minute=now_time.minute,
|
||
second=now_time.second)
|
||
request.data.pop('date')
|
||
serializer = self.serializer_class(data=request.data)
|
||
if serializer.is_valid():
|
||
kill_house_free_bar_info = serializer.create(validated_data=request.data)
|
||
if image != None:
|
||
kill_house_free_bar_info.bar_image = send_image_to_server(image)
|
||
kill_house_free_bar_info.kill_house = kill_house
|
||
kill_house_free_bar_info.date = date
|
||
if kill_house_free_bar_info.buy_type == 'carcass':
|
||
kill_house_free_bar_info.warehouse_commitment_weight = int(
|
||
(free_commitment_percent / 100) * int(kill_house_free_bar_info.weight_of_carcasses))
|
||
|
||
kill_house_free_bar_info.ware_house = True
|
||
if killer:
|
||
if killer.killer and killer.type == 'public':
|
||
kill_house_free_bar_info.kill_house = killer
|
||
kill_house_free_bar_info.public_killer = kill_house
|
||
kill_house_free_bar_info.input_warehouse = killer
|
||
product = RolesProducts.objects.get(kill_house=killer, trash=False)
|
||
else:
|
||
kill_house_free_bar_info.exclusive_killer = killer
|
||
kill_house_free_bar_info.input_warehouse = killer
|
||
product = RolesProducts.objects.get(kill_house=killer, trash=False)
|
||
|
||
else:
|
||
kill_house_free_bar_info.input_warehouse = kill_house
|
||
kill_house_free_bar_info.product = product
|
||
kill_house_free_bar_info.dispenser = dispenser if dispenser else None
|
||
kill_house_free_bar_info.representative = representative if representative else None
|
||
kill_house_free_bar_info.bar_code = generate_unique_bar_code()
|
||
kill_house_free_bar_info.save()
|
||
wage = 0
|
||
type = 'live-buy' if kill_house_free_bar_info.buy_type == 'live' else 'carcasse-buy'
|
||
wage_type = WageType.objects.filter(en_name=type, trash=False).first()
|
||
if wage_type.status == True:
|
||
wage = wage_type.amount
|
||
kill_house_free_bar_info.wage = wage
|
||
kill_house_free_bar_info.total_wage_amount = wage * int(
|
||
kill_house_free_bar_info.live_weight) if kill_house_free_bar_info.buy_type == 'live' else wage * int(
|
||
kill_house_free_bar_info.weight_of_carcasses)
|
||
kill_house_free_bar_info.register_date = datetime.now()
|
||
kill_house_free_bar_info.save()
|
||
kill_house_free_buying_product_warehousing(product)
|
||
|
||
percentages_wage_type = PercentageOfWageType.objects.filter(wage_type=wage_type, percent__gt=0, trash=False)
|
||
|
||
if wage_type and wage_type.status == True and percentages_wage_type:
|
||
for percentage_wage_type in percentages_wage_type:
|
||
if percentage_wage_type.share_type.en_name == 'union':
|
||
kill_house_free_bar_info.union_share = int(
|
||
(percentage_wage_type.percent / 100) * kill_house_free_bar_info.total_wage_amount)
|
||
kill_house_free_bar_info.union_share_percent = percentage_wage_type.percent
|
||
kill_house_free_bar_info.save()
|
||
elif percentage_wage_type.share_type.en_name == 'company':
|
||
kill_house_free_bar_info.company_share = int(
|
||
(percentage_wage_type.percent / 100) * kill_house_free_bar_info.total_wage_amount)
|
||
kill_house_free_bar_info.company_share_percent = percentage_wage_type.percent
|
||
kill_house_free_bar_info.save()
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'guilds':
|
||
kill_house_free_bar_info.guilds_share = int(
|
||
(percentage_wage_type.percent / 100) * kill_house_free_bar_info.total_wage_amount)
|
||
kill_house_free_bar_info.guilds_share_percent = percentage_wage_type.percent
|
||
kill_house_free_bar_info.save()
|
||
elif percentage_wage_type.share_type.en_name == 'city':
|
||
kill_house_free_bar_info.city_share = int(
|
||
(percentage_wage_type.percent / 100) * kill_house_free_bar_info.total_wage_amount)
|
||
kill_house_free_bar_info.city_share_percent = percentage_wage_type.percent
|
||
kill_house_free_bar_info.save()
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'wallet':
|
||
kill_house_free_bar_info.wallet_share = int(
|
||
(percentage_wage_type.percent / 100) * kill_house_free_bar_info.total_wage_amount)
|
||
kill_house_free_bar_info.wallet_share_percent = percentage_wage_type.percent
|
||
kill_house_free_bar_info.save()
|
||
|
||
else:
|
||
kill_house_free_bar_info.other_share = int(
|
||
(percentage_wage_type.percent / 100) * kill_house_free_bar_info.total_wage_amount)
|
||
kill_house_free_bar_info.other_share_percent = percentage_wage_type.percent
|
||
kill_house_free_bar_info.save()
|
||
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
type = request.GET.get('type')
|
||
date_type = request.GET.get('date_type')
|
||
bar_state = request.GET.get('bar_state')
|
||
kill_house_free_bar_info_list = []
|
||
role = request.GET.get('role')
|
||
kill_houses = None
|
||
order_by_type = '-date'
|
||
|
||
if role in ['KillHouse', 'KillHouseVet']:
|
||
if role == 'KillHouse':
|
||
kill_houses = KillHouse.objects.filter(kill_house_operator__user=user, trash=False)
|
||
else:
|
||
kill_house_ids = KillHouseVet.objects.filter(vet__user=user, trash=False).values_list('kill_house',
|
||
flat=True)
|
||
kill_houses = KillHouse.objects.filter(id__in=kill_house_ids, trash=False)
|
||
if 'date1' in request.GET:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
if date_type:
|
||
if date_type == 'buy':
|
||
|
||
filters = {
|
||
'register_date__date__gte': date1,
|
||
'register_date__date__lte': date2,
|
||
'trash': False,
|
||
'temporary_trash': False,
|
||
'temporary_deleted': False,
|
||
'calculate_status': True
|
||
}
|
||
else:
|
||
order_by_type = '-date'
|
||
filters = {
|
||
'date__date__gte': date1,
|
||
'date__date__lte': date2,
|
||
'trash': False,
|
||
'temporary_trash': False,
|
||
'temporary_deleted': False,
|
||
'calculate_status': True
|
||
}
|
||
else:
|
||
filters = {
|
||
'register_date__date__gte': date1,
|
||
'register_date__date__lte': date2,
|
||
'trash': False,
|
||
'temporary_trash': False,
|
||
'temporary_deleted': False,
|
||
'calculate_status': True
|
||
}
|
||
else:
|
||
filters = {
|
||
'trash': False,
|
||
'temporary_trash': False,
|
||
'temporary_deleted': False,
|
||
'calculate_status': True
|
||
}
|
||
|
||
if type:
|
||
filters['buy_type'] = type
|
||
if type == 'live':
|
||
if bar_state:
|
||
if bar_state == 'entered':
|
||
filters['weight_of_carcasses__gt'] = 0
|
||
else:
|
||
filters['weight_of_carcasses'] = 0
|
||
if kill_houses is not None:
|
||
kill_house_free_bar_info = KillHouseFreeBarInformation.objects.filter(
|
||
Q(kill_house__in=kill_houses) | Q(exclusive_killer__in=kill_houses) | Q(public_killer__in=kill_houses),
|
||
**filters).order_by(order_by_type)
|
||
else:
|
||
|
||
kill_house_free_bar_info = KillHouseFreeBarInformation.objects.filter(**filters).order_by(order_by_type)
|
||
|
||
if 'search' in request.GET:
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=kill_house_free_bar_info
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=kill_house_free_bar_info)
|
||
kill_house_free_bar_info_list = ps.filter()
|
||
kill_house_free_bar_info = [] if len(
|
||
kill_house_free_bar_info_list) == 0 else kill_house_free_bar_info_list
|
||
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(kill_house_free_bar_info)
|
||
if page is not None:
|
||
serializer = self.serializer_class(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = self.serializer_class(kill_house_free_bar_info, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
def update(self, request, pk=None, *args, **kwargs):
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
free_bar = KillHouseFreeBarInformation.objects.get(key=request.data['key'])
|
||
# product = free_bar.product
|
||
|
||
if 'live_weight' in request.data.keys():
|
||
if int(request.data['live_weight']) < free_bar.weight_of_carcasses:
|
||
return Response(
|
||
{"result": "مقدار وارد شده کمتر از وزن لاشه است! "},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
if 'bar_clearance_code' in request.data.keys():
|
||
existing_bar = KillHouseFreeBarInformation.objects.filter(trash=False, bar_clearance_code=request.data[
|
||
'bar_clearance_code']).exclude(id=free_bar.id).first()
|
||
if existing_bar:
|
||
if existing_bar.register_type == 'automatic':
|
||
existing_bar.trash = True
|
||
existing_bar.save()
|
||
else:
|
||
return Response({'result': 'کد قرنطینه قبلا در سامانه ثبت شده است!'},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
if 'number_of_carcasses' in request.data.keys():
|
||
now = datetime.now().date()
|
||
if OperationLimitation.objects.all().first().kill_house_input_bar_limitation == True and \
|
||
free_bar.register_type != 'automatic':
|
||
if now != free_bar.date.date():
|
||
return Response({"result": "به علت وجود مفایرت در تاریخ ثبت امکان ویرایش وجود ندارد! "},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
# ware_house = KillHouseWareHouse.objects.filter(kill_house=free_bar.kill_house,
|
||
# date__date=free_bar.date.date(), trash=False).first()
|
||
# allocation = StewardAllocation.objects.filter(ware_house=ware_house, trash=False)
|
||
#
|
||
# if len(allocation) > 0:
|
||
# if OperationLimitation.objects.all().first().kill_house_input_bar_limitation == True:
|
||
# return Response(
|
||
# {"result": "به علت وجود تخصیص به مباشر یا صنف برای امروز امکان ویرایش وجود ندارد! "},
|
||
# status=status.HTTP_403_FORBIDDEN)
|
||
if 'return_entered_bar' in request.data.keys():
|
||
free_bar.weight_of_carcasses = 0
|
||
free_bar.number_of_carcasses = 0
|
||
free_bar.entered_message = None
|
||
free_bar.ware_house = False
|
||
if 'bar_image' in request.data.keys():
|
||
if request.data['bar_image'] != " ":
|
||
free_bar.bar_image = send_image_to_server(request.data['bar_image'])
|
||
free_bar.save()
|
||
request.data.pop('bar_image')
|
||
if 'kill_house_vet_state' in request.data.keys():
|
||
free_bar.date_of_accept_reject = datetime.now()
|
||
free_bar.acceptor_rejector = user.fullname
|
||
if 'killer_key' in request.data.keys() and request.data['killer_key'] != None and request.data[
|
||
'killer_key'] != '':
|
||
exclusive_killer = KillHouse.objects.filter(trash=False, key=request.data['killer_key']).first()
|
||
if exclusive_killer.killer and exclusive_killer.type == 'public':
|
||
if not free_bar.public_killer:
|
||
free_bar.public_killer = free_bar.kill_house
|
||
free_bar.kill_house = exclusive_killer
|
||
free_bar.input_warehouse = exclusive_killer
|
||
product = RolesProducts.objects.filter(kill_house=exclusive_killer, trash=False, name='مرغ گرم').first()
|
||
free_bar.product = product
|
||
if free_bar.exclusive_killer:
|
||
free_bar.exclusive_killer = None
|
||
else:
|
||
free_bar.exclusive_killer = exclusive_killer
|
||
free_bar.input_warehouse = exclusive_killer
|
||
product = RolesProducts.objects.filter(kill_house=exclusive_killer, trash=False, name='مرغ گرم').first()
|
||
free_bar.product = product
|
||
if free_bar.public_killer:
|
||
free_bar.kill_house = free_bar.public_killer
|
||
free_bar.public_killer = None
|
||
request.data.pop('killer_key')
|
||
serializer = self.serializer_class(free_bar)
|
||
serializer.update(instance=free_bar, validated_data=request.data)
|
||
free_commitment_percent = free_bar.kill_house.out_province_free_buying_commitment_percent
|
||
free_bar.total_wage_amount = free_bar.wage * int(
|
||
free_bar.live_weight) if free_bar.buy_type == 'live' else free_bar.wage * int(free_bar.weight_of_carcasses)
|
||
free_bar.warehouse_commitment_weight = int((free_commitment_percent / 100) * int(free_bar.weight_of_carcasses))
|
||
if free_bar.exclusive_killer:
|
||
product = RolesProducts.objects.get(kill_house=free_bar.exclusive_killer, trash=False)
|
||
free_bar.product = product
|
||
free_bar.save()
|
||
union_percent = free_bar.union_share_percent / 100 if free_bar.union_share_percent > 0 else 0
|
||
company_percent = free_bar.company_share_percent / 100 if free_bar.company_share_percent > 0 else 0
|
||
guilds_percent = free_bar.guilds_share_percent / 100 if free_bar.guilds_share_percent > 0 else 0
|
||
city_share_percent = free_bar.city_share_percent / 100 if free_bar.city_share_percent > 0 else 0
|
||
wallet_share_percent = free_bar.wallet_share_percent / 100 if free_bar.wallet_share_percent > 0 else 0
|
||
other_share_percent = free_bar.other_share_percent / 100 if free_bar.other_share_percent > 0 else 0
|
||
free_bar.union_share = int(union_percent * free_bar.total_wage_amount)
|
||
free_bar.company_share = int(company_percent * free_bar.total_wage_amount)
|
||
free_bar.guilds_share = int(guilds_percent * free_bar.total_wage_amount)
|
||
free_bar.city_share = int(city_share_percent * free_bar.total_wage_amount)
|
||
free_bar.wallet_share = int(wallet_share_percent * free_bar.total_wage_amount)
|
||
free_bar.other_share = int(other_share_percent * free_bar.total_wage_amount)
|
||
free_bar.save()
|
||
kill_house_free_buying_product_warehousing(free_bar.product)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
def destroy(self, request, pk=None, *args, **kwargs):
|
||
free_bar = KillHouseFreeBarInformation.objects.get(trash=False, key=request.GET['key'])
|
||
free_bar.trash = True
|
||
free_bar.save()
|
||
product = free_bar.product
|
||
kill_house_free_buying_product_warehousing(product)
|
||
|
||
return Response({"result": "بار با موفقیت حذف شد !"}, status=status.HTTP_200_OK)
|
||
|
||
|
||
class ParentCompanyKillHouseFreeBarInformationViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseFreeBarInformation.objects.all()
|
||
serializer_class = KillHouseFreeBarInformationSerializer
|
||
permission_classes = [AllowAny]
|
||
pagination_class = CustomPagination
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = KillHouseFreeBarInformationFilterSet
|
||
filterset_fields = [
|
||
'kill_house__name',
|
||
'poultry_name',
|
||
'poultry_mobile',
|
||
'province',
|
||
'city',
|
||
'driver_name',
|
||
'driver_mobile',
|
||
'bar_clearance_code',
|
||
'kill_house__kill_house_operator__user__mobile',
|
||
'kill_house__kill_house_operator__user__fullname',
|
||
|
||
]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
type = request.GET.get('type')
|
||
date_type = request.GET.get('date_type')
|
||
bar_state = request.GET.get('bar_state')
|
||
kill_house_free_bar_info_list = []
|
||
role = request.GET.get('role')
|
||
kill_houses = None
|
||
order_by_type = '-create_date'
|
||
|
||
if 'date1' in request.GET:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
if date_type:
|
||
if date_type == 'buy':
|
||
|
||
filters = {
|
||
'create_date__date__gte': date1,
|
||
'create_date__date__lte': date2,
|
||
'trash': False,
|
||
}
|
||
else:
|
||
order_by_type = '-date'
|
||
filters = {
|
||
'date__date__gte': date1,
|
||
'date__date__lte': date2,
|
||
'trash': False,
|
||
}
|
||
else:
|
||
filters = {
|
||
'create_date__date__gte': date1,
|
||
'create_date__date__lte': date2,
|
||
'trash': False,
|
||
}
|
||
else:
|
||
filters = {
|
||
'trash': False
|
||
}
|
||
|
||
if kill_houses is not None:
|
||
filters['kill_house__in'] = kill_houses
|
||
|
||
if type:
|
||
filters['buy_type'] = type
|
||
if type == 'live':
|
||
if bar_state:
|
||
if bar_state == 'entered':
|
||
filters['weight_of_carcasses__gt'] = 0
|
||
else:
|
||
filters['weight_of_carcasses'] = 0
|
||
|
||
kill_house_free_bar_info = KillHouseFreeBarInformation.objects.filter(**filters).order_by(order_by_type)
|
||
|
||
if 'search' in request.GET:
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=kill_house_free_bar_info
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=kill_house_free_bar_info)
|
||
kill_house_free_bar_info_list = ps.filter()
|
||
kill_house_free_bar_info = [] if len(
|
||
kill_house_free_bar_info_list) == 0 else kill_house_free_bar_info_list
|
||
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(kill_house_free_bar_info)
|
||
if page is not None:
|
||
serializer = self.serializer_class(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = self.serializer_class(kill_house_free_bar_info, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHouseRequestForBarManagementViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseRequest.objects.all()
|
||
serializer_class = KillHouseRequestForBarManagementSerializer
|
||
pagination_class = CustomPagination
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = KillHouseRequestFilterSet
|
||
filterset_fields = [
|
||
'killhouse_user__kill_house_operator__user__fullname',
|
||
'killhouse_user__kill_house_operator__user__mobile',
|
||
'province_request__poultry_request__poultry__user__fullname',
|
||
'province_request__poultry_request__poultry__user__mobile',
|
||
'province_request__poultry_request__order_code',
|
||
'bar_code',
|
||
'traffic_code',
|
||
'clearance_code'
|
||
]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
breed_list = []
|
||
city_list = []
|
||
quantity_list = []
|
||
total_list = []
|
||
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
if 'role' in request.GET:
|
||
if request.GET['role'] == 'Poultry':
|
||
if 'waiting' in request.GET:
|
||
queryset = PoultryRequest.objects.filter(poultry__user=user, awaiting_payment=True,
|
||
trash=False, out=False).order_by('-send_date')
|
||
elif 'inspector' in request.GET:
|
||
queryset = PoultryRequest.objects.filter(poultry__user=user, inspector='pending',
|
||
trash=False, out=False).order_by('-send_date')
|
||
else:
|
||
now = datetime.now().date()
|
||
|
||
date1 = datetime.strptime(str(request.GET['date1']),
|
||
'%Y-%m-%d').date() if 'date1' in request.GET else now
|
||
date2 = datetime.strptime(str(request.GET['date2']),
|
||
'%Y-%m-%d').date() if 'date2' in request.GET else now
|
||
|
||
queryset_lists = PoultryRequest.objects.filter(poultry__user=user,
|
||
final_state__in=('pending', 'archive'),
|
||
trash=False, out=False).order_by('-send_date')
|
||
queryset = [
|
||
queryset_list for queryset_list in queryset_lists
|
||
if date1 <= queryset_list.send_date.date() <= date2
|
||
]
|
||
elif request.GET['role'] == 'VetSupervisor':
|
||
|
||
if 'check' in request.GET:
|
||
if 'date1' in request.GET and 'date2' in request.GET:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
|
||
if 'search' in request.GET:
|
||
if 'deleted_requests' in request.GET:
|
||
|
||
kill_house_requests_list = KillHouseRequest.objects.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
province_request__poultry_request__poultry__address__province=user.province,
|
||
trash=True, temporary_trash=False, temporary_deleted=False,
|
||
message__isnull=False
|
||
).select_related('kill_request')
|
||
else:
|
||
kill_house_requests_list = KillHouseRequest.objects.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
province_request__poultry_request__poultry__address__province=user.province,
|
||
non_receipt=False,
|
||
trash=False
|
||
).select_related('kill_request')
|
||
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "":
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=kill_house_requests_list
|
||
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=kill_house_requests_list)
|
||
kill_house_requests = ps.filter()
|
||
else:
|
||
kill_house_requests = kill_house_requests_list
|
||
else:
|
||
|
||
if 'deleted_requests' in request.GET:
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
province_request__poultry_request__poultry__address__province=user.province,
|
||
trash=True,
|
||
message__isnull=False, temporary_trash=False, temporary_deleted=False
|
||
).select_related('kill_request')
|
||
else:
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
province_request__poultry_request__poultry__address__province=user.province,
|
||
non_receipt=False,
|
||
trash=False
|
||
).select_related('kill_request')
|
||
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(kill_house_requests)
|
||
if page is not None:
|
||
serializer = KillHouseRequestForBarManagementSerializer(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = KillHouseRequestForBarManagementSerializer(kill_house_requests, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
elif request.GET['role'] == 'VetFarm':
|
||
vet = Vet.objects.filter(user=user, trash=False)
|
||
poultries = []
|
||
if vet.count() > 0:
|
||
vet = vet.last()
|
||
vet_farms = VetFarm.objects.filter(vet=vet, trash=False)
|
||
if vet_farms.count() > 0:
|
||
for vet_farm in vet_farms:
|
||
if vet_farm.poultry in poultries:
|
||
pass
|
||
else:
|
||
poultries.append(vet_farm.poultry)
|
||
if 'check' in request.GET:
|
||
kill_house_requests = []
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
if 'search' in request.GET:
|
||
if 'deleted_requests' in request.GET:
|
||
aggregate_permission = VetFarmAggregatePermission.objects.filter(
|
||
trash=False).first()
|
||
if aggregate_permission and aggregate_permission.allow == True:
|
||
kill_house_requests_list = KillHouseRequest.objects.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
province_request__poultry_request__poultry__in=poultries,
|
||
trash=True,
|
||
message__isnull=False, temporary_trash=False, temporary_deleted=False
|
||
).select_related('kill_request')
|
||
else:
|
||
|
||
kill_house_requests_list = KillHouseRequest.objects.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
province_request__poultry_request__poultry__in=poultries,
|
||
trash=True,
|
||
message__isnull=False, temporary_trash=False, temporary_deleted=False
|
||
).select_related('kill_request')
|
||
else:
|
||
aggregate_permission = VetFarmAggregatePermission.objects.filter(
|
||
trash=False).first()
|
||
if aggregate_permission and aggregate_permission.allow == True:
|
||
kill_house_requests_list = KillHouseRequest.objects.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
province_request__poultry_request__poultry__in=poultries,
|
||
non_receipt=False,
|
||
trash=False
|
||
).select_related('kill_request').order_by(
|
||
'province_request__poultry_request__poultry', 'killhouse_user')
|
||
else:
|
||
kill_house_requests_list = KillHouseRequest.objects.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
province_request__poultry_request__poultry__in=poultries,
|
||
non_receipt=False,
|
||
trash=False
|
||
).select_related('kill_request')
|
||
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "":
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=kill_house_requests_list
|
||
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=kill_house_requests_list)
|
||
kill_house_requests = ps.filter()
|
||
else:
|
||
kill_house_requests = kill_house_requests_list
|
||
else:
|
||
|
||
if 'deleted_requests' in request.GET:
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
province_request__poultry_request__poultry__in=poultries,
|
||
trash=True,
|
||
message__isnull=False, temporary_trash=False, temporary_deleted=False
|
||
).select_related('kill_request')
|
||
else:
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
province_request__poultry_request__poultry__in=poultries,
|
||
non_receipt=False,
|
||
trash=False
|
||
).select_related('kill_request')
|
||
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(kill_house_requests)
|
||
if page is not None:
|
||
serializer = KillHouseRequestForBarManagementSerializer(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = KillHouseRequestForBarManagementSerializer(kill_house_requests, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
|
||
elif 'waiting' in request.GET:
|
||
queryset = PoultryRequest.objects.filter(poultry__in=poultries,
|
||
poultry__address__province=user.province,
|
||
awaiting_payment=True,
|
||
trash=False, out=False).order_by('send_date')
|
||
elif 'inspector' in request.GET:
|
||
queryset = PoultryRequest.objects.filter(poultry__in=poultries,
|
||
poultry__address__province=user.province,
|
||
inspector='pending',
|
||
trash=False, out=False).order_by('send_date')
|
||
else:
|
||
queryset = PoultryRequest.objects.filter(poultry__in=poultries,
|
||
poultry__address__province=user.province,
|
||
final_state__in=('pending', 'archive'),
|
||
trash=False, out=False).order_by('send_date')
|
||
else:
|
||
queryset = []
|
||
|
||
elif request.GET['role'] == 'ProvinceInspector':
|
||
if 'waiting' in request.GET:
|
||
queryset = PoultryRequest.objects.filter(poultry__address__province=user.province,
|
||
awaiting_payment=True,
|
||
trash=False, out=False).order_by('send_date')
|
||
elif 'inspector' in request.GET:
|
||
queryset = PoultryRequest.objects.filter(poultry__address__province=user.province,
|
||
inspector='pending',
|
||
trash=False, out=False).order_by('send_date')
|
||
# elif 'out' in request.GET:
|
||
|
||
else:
|
||
|
||
if 'date' in request.GET:
|
||
date = datetime.strptime(request.GET['date'], '%Y-%m-%d')
|
||
else:
|
||
date = datetime.now()
|
||
|
||
queryset = PoultryRequest.objects.filter(poultry__address__province=user.province,
|
||
state_process__in=('pending', 'accepted'),
|
||
province_state__in=('pending', 'accepted'),
|
||
trash=False, out=False,
|
||
send_date__year=date.year, send_date__month=date.month,
|
||
send_date__day=date.day
|
||
).order_by('-send_date')
|
||
elif request.GET['role'] == 'CityOperator':
|
||
city_operator = CityOperator.objects.get(user=user)
|
||
|
||
if 'check' in request.GET:
|
||
kill_house_requests = []
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
|
||
if 'search' in request.GET:
|
||
if 'deleted_requests' in request.GET:
|
||
|
||
kill_house_requests_list = KillHouseRequest.objects.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
province_request__poultry_request__poultry__city_operator=city_operator.unit_name,
|
||
trash=True,
|
||
message__isnull=False, temporary_trash=False, temporary_deleted=False
|
||
).select_related('kill_request')
|
||
else:
|
||
kill_house_requests_list = KillHouseRequest.objects.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
province_request__poultry_request__poultry__city_operator=city_operator.unit_name,
|
||
non_receipt=False,
|
||
trash=False
|
||
).select_related('kill_request')
|
||
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "":
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=kill_house_requests_list
|
||
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=kill_house_requests_list)
|
||
kill_house_requests = ps.filter()
|
||
else:
|
||
kill_house_requests = kill_house_requests_list
|
||
else:
|
||
|
||
if 'deleted_requests' in request.GET:
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
province_request__poultry_request__poultry__city_operator=city_operator.unit_name,
|
||
trash=True,
|
||
message__isnull=False, temporary_trash=False, temporary_deleted=False
|
||
).select_related('kill_request')
|
||
else:
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
province_request__poultry_request__poultry__city_operator=city_operator.unit_name,
|
||
non_receipt=False,
|
||
trash=False
|
||
).select_related('kill_request')
|
||
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(kill_house_requests)
|
||
if page is not None:
|
||
serializer = KillHouseRequestForBarManagementSerializer(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = KillHouseRequestForBarManagementSerializer(kill_house_requests, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
|
||
# list1 = []
|
||
# for c in CityUnit.objects.filter(city__name=user.city.name, trash=False):
|
||
# list1.append(c.name)
|
||
elif 'waiting' in request.GET:
|
||
# queryset = PoultryRequest.objects.filter(poultry__address__city__name__in=list1,
|
||
# awaiting_payment=True,
|
||
# trash=False).order_by('send_date')
|
||
|
||
queryset = PoultryRequest.objects.filter(city_operator=city_operator,
|
||
awaiting_payment=True,
|
||
trash=False, out=False).order_by('send_date')
|
||
elif 'inspector' in request.GET:
|
||
# queryset = PoultryRequest.objects.filter(poultry__address__city__name__in=list1,
|
||
# inspector='pending',
|
||
# trash=False).order_by('send_date')
|
||
queryset = PoultryRequest.objects.filter(city_operator=city_operator,
|
||
inspector='pending',
|
||
trash=False, out=False).order_by('send_date')
|
||
else:
|
||
# queryset = PoultryRequest.objects.filter(poultry__address__city__name__in=list1,
|
||
# trash=False).order_by(
|
||
# 'send_date')
|
||
if 'date1' in request.GET and 'date2' in request.GET:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
queryset_list = PoultryRequest.objects.filter(poultry__city_operator=city_operator.unit_name,
|
||
trash=False, out=False, final_state='pending',
|
||
).order_by('send_date')
|
||
queryset = [
|
||
poultry_req for poultry_req in queryset_list
|
||
if date1 <= poultry_req.send_date.date() <= date2
|
||
]
|
||
|
||
elif request.GET['role'] in ['CityCommerce', 'CityVet', 'CityJahad', 'CityPoultry']:
|
||
if 'check' in request.GET:
|
||
kill_house_requests = []
|
||
if 'date1' in request.GET and 'date2' in request.GET:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
if 'search' in request.GET:
|
||
|
||
if 'deleted_requests' in request.GET:
|
||
|
||
kill_house_requests_list = KillHouseRequest.objects.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
province_request__poultry_request__poultry__address__city=user.city,
|
||
trash=True,
|
||
message__isnull=False, temporary_trash=False, temporary_deleted=False
|
||
).select_related('kill_request')
|
||
else:
|
||
kill_house_requests_list = KillHouseRequest.objects.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
province_request__poultry_request__poultry__address__city=user.city,
|
||
non_receipt=False,
|
||
trash=False
|
||
).select_related('kill_request')
|
||
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "":
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=kill_house_requests_list
|
||
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=kill_house_requests_list)
|
||
kill_house_requests = ps.filter()
|
||
else:
|
||
kill_house_requests = kill_house_requests_list
|
||
else:
|
||
|
||
if 'deleted_requests' in request.GET:
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
province_request__poultry_request__poultry__address__city=user.city,
|
||
trash=True,
|
||
message__isnull=False, temporary_trash=False, temporary_deleted=False
|
||
).select_related('kill_request')
|
||
else:
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
province_request__poultry_request__poultry__address__city=user.city,
|
||
non_receipt=False,
|
||
trash=False
|
||
).select_related('kill_request')
|
||
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(kill_house_requests)
|
||
if page is not None:
|
||
serializer = KillHouseRequestForBarManagementSerializer(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = KillHouseRequestForBarManagementSerializer(kill_house_requests, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
elif request.GET['role'] == 'LiveStockSupport':
|
||
if 'check' in request.GET:
|
||
kill_house_requests = []
|
||
if 'date1' in request.GET and 'date2' in request.GET:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
if 'search' in request.GET:
|
||
|
||
if 'deleted_requests' in request.GET:
|
||
|
||
kill_house_requests_list = KillHouseRequest.objects.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
province_request__poultry_request__freezing=True,
|
||
trash=True,
|
||
message__isnull=False, temporary_trash=False, temporary_deleted=False
|
||
).select_related('kill_request')
|
||
else:
|
||
kill_house_requests_list = KillHouseRequest.objects.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
province_request__poultry_request__freezing=True,
|
||
non_receipt=False,
|
||
trash=False
|
||
).select_related('kill_request')
|
||
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "":
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=kill_house_requests_list
|
||
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=kill_house_requests_list)
|
||
kill_house_requests = ps.filter()
|
||
else:
|
||
kill_house_requests = kill_house_requests_list
|
||
else:
|
||
|
||
if 'deleted_requests' in request.GET:
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
province_request__poultry_request__freezing=True,
|
||
trash=True,
|
||
message__isnull=False, temporary_trash=False, temporary_deleted=False
|
||
).select_related('kill_request')
|
||
else:
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
province_request__poultry_request__freezing=True,
|
||
non_receipt=False,
|
||
trash=False
|
||
).select_related('kill_request')
|
||
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(kill_house_requests)
|
||
if page is not None:
|
||
serializer = KillHouseRequestForBarManagementSerializer(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = KillHouseRequestForBarManagementSerializer(kill_house_requests, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
elif request.GET['role'] == 'ProvinceFinancial':
|
||
if 'waiting' in request.GET:
|
||
queryset = PoultryRequest.objects.filter(poultry__address__province=user.province,
|
||
awaiting_payment=True,
|
||
trash=False, out=False).order_by('send_date')
|
||
elif 'inspector' in request.GET:
|
||
queryset = PoultryRequest.objects.filter(poultry__address__province=user.province,
|
||
inspector='pending',
|
||
trash=False, out=False).order_by('send_date')
|
||
elif 'all' in request.GET:
|
||
queryset = PoultryRequest.objects.filter(poultry__address__province=user.province,
|
||
assignment=True,
|
||
final_state='pending',
|
||
trash=False, out=False).order_by('send_date')
|
||
else:
|
||
if 'date' in request.GET:
|
||
date = datetime.strptime(request.GET['date'], '%Y-%m-%d')
|
||
else:
|
||
date = datetime.now()
|
||
|
||
queryset = PoultryRequest.objects.filter(poultry__address__province=user.province,
|
||
state_process__in=('pending', 'accepted'),
|
||
province_state__in=('pending', 'accepted'),
|
||
trash=False, out=False,
|
||
send_date__year=date.year, send_date__month=date.month,
|
||
send_date__day=date.day
|
||
).order_by('-send_date')
|
||
elif request.GET['role'] in ['ProvinceOperator', 'Commerce', 'ProvinceSupervisor', 'SuperAdmin', 'AdminX',
|
||
'ImprovingLivestock', 'Supporter']:
|
||
if 'waiting' in request.GET:
|
||
queryset = PoultryRequest.objects.filter(poultry__address__province=user.province,
|
||
awaiting_payment=True,
|
||
trash=False, out=False).order_by('send_date')
|
||
elif 'inspector' in request.GET:
|
||
queryset = PoultryRequest.objects.filter(poultry__address__province=user.province,
|
||
inspector='pending',
|
||
trash=False, out=False).order_by('send_date')
|
||
elif 'out' in request.GET:
|
||
if 'date' in request.GET:
|
||
date = datetime.strptime(request.GET['date'], '%Y-%m-%d')
|
||
else:
|
||
date = datetime.now()
|
||
queryset = PoultryRequest.objects.filter(poultry__address__province=user.province,
|
||
send_date__year=date.year, send_date__month=date.month,
|
||
send_date__day=date.day,
|
||
trash=False, out=True).order_by('-send_date')
|
||
elif 'check' in request.GET:
|
||
kill_house_requests = []
|
||
if 'date1' in request.GET and 'date2' in request.GET:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
if 'search' in request.GET:
|
||
|
||
if 'deleted_requests' in request.GET:
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
province_request__poultry_request__poultry__address__province=user.province,
|
||
trash=True, temporary_trash=False, temporary_deleted=False
|
||
# message__isnull=False
|
||
).select_related('kill_request')
|
||
else:
|
||
if 'without_quarantine_code_state' in request.GET and request.GET[
|
||
'without_quarantine_code_state'] == 'true':
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
clearance_code__isnull=False,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
quarantine_quantity__isnull=True,
|
||
quarantine_code_state__isnull=True,
|
||
non_receipt=False,
|
||
province_request__poultry_request__poultry__address__province=user.province,
|
||
trash=False
|
||
).select_related('kill_request')
|
||
else:
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
# (Q(trash=False) | Q(trash=True, clearance_code__isnull=False,
|
||
# temporary_trash=False, temporary_deleted=False)),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
non_receipt=False,
|
||
province_request__poultry_request__poultry__address__province=user.province,
|
||
|
||
trash=False
|
||
).select_related('kill_request')
|
||
value = request.GET.get('value')
|
||
search = request.GET.get('search')
|
||
if value and search == 'filter':
|
||
if value != 'undefined' and value.strip():
|
||
kill_house_requests = kill_house_requests.filter(
|
||
build_query(DashboardEnterLoadInformationFilterSet, value)
|
||
)
|
||
else:
|
||
|
||
if 'deleted_requests' in request.GET:
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
province_request__poultry_request__poultry__address__province=user.province,
|
||
trash=True,
|
||
# message__isnull=False
|
||
).select_related('kill_request')
|
||
else:
|
||
if 'without_quarantine_code_state' in request.GET and request.GET[
|
||
'without_quarantine_code_state'] == 'true':
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
clearance_code__isnull=False,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
quarantine_quantity__isnull=True,
|
||
quarantine_code_state__isnull=True,
|
||
non_receipt=False,
|
||
province_request__poultry_request__poultry__address__province=user.province,
|
||
trash=False
|
||
).select_related('kill_request')
|
||
else:
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
# (Q(trash=False) | Q(trash=True, clearance_code__isnull=False)),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
non_receipt=False,
|
||
province_request__poultry_request__poultry__address__province=user.province,
|
||
trash=False
|
||
).select_related('kill_request')
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(kill_house_requests)
|
||
if page is not None:
|
||
serializer = KillHouseRequestForBarManagementSerializer(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = KillHouseRequestForBarManagementSerializer(kill_house_requests, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
elif 'date1' in request.GET and 'date2' in request.GET:
|
||
|
||
now = datetime.now().date()
|
||
date1 = datetime.strptime(str(request.GET['date1']),
|
||
'%Y-%m-%d').date() if 'date1' in request.GET else now
|
||
date2 = datetime.strptime(str(request.GET['date2']),
|
||
'%Y-%m-%d').date() if 'date2' in request.GET else now
|
||
queryset_lists = PoultryRequest.objects.filter(poultry__address__province=user.province,
|
||
trash=False, out=False,
|
||
).order_by('-send_date')
|
||
|
||
queryset = [
|
||
queryset_list for queryset_list in queryset_lists
|
||
if date1 <= queryset_list.send_date.date() <= date2
|
||
]
|
||
|
||
# date1 = datetime.datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
# date2 = datetime.datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
# queryset_list = PoultryRequest.objects.filter(poultry__address__province=user.province,
|
||
# trash=False, out=False,
|
||
# ).order_by('-send_date')
|
||
#
|
||
# queryset = []
|
||
# queryset = [
|
||
# poultry_req for poultry_req in queryset_list
|
||
# if date1 <= poultry_req.send_date.date() <= date2
|
||
# ]
|
||
else:
|
||
if 'date' in request.GET:
|
||
date = datetime.strptime(request.GET['date'], '%Y-%m-%d')
|
||
else:
|
||
date = datetime.now() - timedelta(days=2)
|
||
|
||
queryset = PoultryRequest.objects.filter(poultry__address__province=user.province,
|
||
state_process__in=('pending', 'accepted'),
|
||
province_state__in=('pending', 'accepted'),
|
||
trash=False, out=False,
|
||
send_date__year__gte=date.year,
|
||
send_date__month__gte=date.month,
|
||
send_date__day__gte=date.day
|
||
).order_by('-send_date')
|
||
|
||
elif request.GET['role'] == 'KillHouse':
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False)
|
||
|
||
if 'check' in request.GET:
|
||
kill_house_requests = []
|
||
if 'date1' in request.GET and 'date2' in request.GET:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
if 'search' in request.GET:
|
||
|
||
if 'deleted_requests' in request.GET:
|
||
|
||
kill_house_requests_list = KillHouseRequest.objects.filter(
|
||
(Q(killhouse_user__in=kill_house) | Q(
|
||
kill_request__slaughter_house__in=kill_house) | Q(killer__in=kill_house)),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
province_request__poultry_request__poultry__address__province=user.province,
|
||
trash=True, temporary_trash=False, temporary_deleted=False
|
||
# message__isnull=False
|
||
).select_related('kill_request')
|
||
else:
|
||
kill_house_requests_list = KillHouseRequest.objects.filter(
|
||
(Q(killhouse_user__in=kill_house) | Q(
|
||
kill_request__slaughter_house__in=kill_house) | Q(killer__in=kill_house)),
|
||
# (Q(trash=False) | Q(trash=True, clearance_code__isnull=False, temporary_trash=False,
|
||
# temporary_deleted=False)),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
non_receipt=False,
|
||
province_request__poultry_request__poultry__address__province=user.province,
|
||
trash=False
|
||
).select_related('kill_request')
|
||
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "":
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=kill_house_requests_list
|
||
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=kill_house_requests_list)
|
||
kill_house_requests = ps.filter()
|
||
else:
|
||
kill_house_requests = kill_house_requests_list
|
||
else:
|
||
|
||
if 'deleted_requests' in request.GET:
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
(Q(killhouse_user__in=kill_house) | Q(
|
||
kill_request__slaughter_house__in=kill_house) | Q(killer__in=kill_house)),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
province_request__poultry_request__poultry__address__province=user.province,
|
||
trash=True, temporary_trash=False, temporary_deleted=False
|
||
# message__isnull=False
|
||
).select_related('kill_request')
|
||
else:
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
(Q(killhouse_user__in=kill_house) | Q(
|
||
kill_request__slaughter_house__in=kill_house) | Q(killer__in=kill_house)),
|
||
# (Q(trash=False) | Q(trash=True, clearance_code__isnull=False, temporary_trash=False,
|
||
# temporary_deleted=False)),
|
||
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
non_receipt=False,
|
||
province_request__poultry_request__poultry__address__province=user.province,
|
||
trash=False
|
||
).select_related('kill_request')
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(kill_house_requests)
|
||
if page is not None:
|
||
serializer = KillHouseRequestForBarManagementSerializer(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = KillHouseRequestForBarManagementSerializer(kill_house_requests, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
else:
|
||
if 'date' in request.GET:
|
||
date = datetime.strptime(request.GET['date'], '%Y-%m-%d')
|
||
else:
|
||
date = datetime.now()
|
||
|
||
queryset = PoultryRequest.objects.filter(poultry__address__province=user.province,
|
||
state_process__in=('pending', 'accepted'),
|
||
province_state__in=('pending', 'accepted'),
|
||
trash=False, out=False,
|
||
send_date__year=date.year, send_date__month=date.month,
|
||
send_date__day=date.day
|
||
).order_by('-send_date')
|
||
|
||
else:
|
||
|
||
if 'type' in request.GET:
|
||
if request.GET['type'] == 'auction':
|
||
queryset = []
|
||
poultry_req_auctions = PoultryRequestAuction.objects.filter(state='active',
|
||
trash=False).order_by(
|
||
'fee').order_by(
|
||
'create_date')
|
||
for poultry_req_auction in poultry_req_auctions:
|
||
queryset.append(
|
||
PoultryRequest.objects.get(id=poultry_req_auction.poultry_request.id, auction=True))
|
||
|
||
serializer = PoultryRequestSerializer(queryset, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class ParentCompanyKillHouseRequestForBarManagementViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseRequest.objects.all()
|
||
serializer_class = KillHouseRequestForBarManagementSerializer
|
||
pagination_class = CustomPagination
|
||
permission_classes = [AllowAny]
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = KillHouseRequestFilterSet
|
||
filterset_fields = [
|
||
'killhouse_user__kill_house_operator__user__fullname',
|
||
'killhouse_user__kill_house_operator__user__mobile',
|
||
'province_request__poultry_request__poultry__user__fullname',
|
||
'province_request__poultry_request__poultry__user__mobile',
|
||
'province_request__poultry_request__order_code',
|
||
'bar_code',
|
||
'traffic_code',
|
||
'clearance_code'
|
||
]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
|
||
kill_house_requests = []
|
||
if 'date1' in request.GET and 'date2' in request.GET:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
if 'search' in request.GET:
|
||
|
||
if 'deleted_requests' in request.GET:
|
||
|
||
kill_house_requests_list = KillHouseRequest.objects.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
trash=True, temporary_trash=False, temporary_deleted=False
|
||
).select_related('kill_request')
|
||
else:
|
||
if 'without_quarantine_code_state' in request.GET and request.GET[
|
||
'without_quarantine_code_state'] == 'true':
|
||
kill_house_requests_list = KillHouseRequest.objects.filter(
|
||
clearance_code__isnull=False,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
quarantine_quantity__isnull=True,
|
||
quarantine_code_state__isnull=True,
|
||
|
||
).select_related('kill_request')
|
||
else:
|
||
kill_house_requests_list = KillHouseRequest.objects.filter(
|
||
(Q(trash=False) | Q(trash=True, clearance_code__isnull=False, temporary_trash=False,
|
||
temporary_deleted=False)),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
).select_related('kill_request')
|
||
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "":
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=kill_house_requests_list
|
||
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=kill_house_requests_list)
|
||
kill_house_requests = ps.filter()
|
||
else:
|
||
kill_house_requests = kill_house_requests_list
|
||
else:
|
||
|
||
if 'deleted_requests' in request.GET:
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
trash=True,
|
||
).select_related('kill_request')
|
||
else:
|
||
if 'without_quarantine_code_state' in request.GET and request.GET[
|
||
'without_quarantine_code_state'] == 'true':
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
clearance_code__isnull=False,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
quarantine_quantity__isnull=True,
|
||
quarantine_code_state__isnull=True,
|
||
).select_related('kill_request')
|
||
else:
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
(Q(trash=False) | Q(trash=True, clearance_code__isnull=False)),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
).select_related('kill_request')
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(kill_house_requests)
|
||
if page is not None:
|
||
serializer = KillHouseRequestForBarManagementSerializer(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = KillHouseRequestForBarManagementSerializer(kill_house_requests, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHouseRequestForBarManagementWageViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseRequest.objects.all()
|
||
serializer_class = KillHouseRequestForBarManagementSerializer
|
||
pagination_class = CustomPagination
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = KillHouseRequestFilterSet
|
||
filterset_fields = [
|
||
'killhouse_user__kill_house_operator__user__fullname',
|
||
'killhouse_user__kill_house_operator__user__mobile',
|
||
'province_request__poultry_request__poultry__user__fullname',
|
||
'province_request__poultry_request__poultry__user__mobile',
|
||
'province_request__poultry_request__order_code',
|
||
'province_request__poultry_request__order_code',
|
||
'bar_code',
|
||
]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
if request.GET['role'] == 'KillHouse':
|
||
user = SystemUserProfile.objects.get(user=request.user)
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).first()
|
||
if 'date1' in request.GET and 'date2' in request.GET:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(killhouse_user=kill_house) | Q(killer=kill_house),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
trash=False)
|
||
|
||
else:
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(killhouse_user=kill_house) | Q(killer=kill_house),
|
||
trash=False)
|
||
|
||
else:
|
||
|
||
kill_house = KillHouse.objects.get(key=request.GET['kill_house_key'], trash=False)
|
||
if 'date1' in request.GET and 'date2' in request.GET:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
if request.GET['role'] == 'ProvinceOperator':
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(killhouse_user=kill_house) | Q(killer=kill_house),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
province_kill_request__union_share__gt=0,
|
||
trash=False)
|
||
elif request.GET['role'] == 'Company':
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(killhouse_user=kill_house) | Q(killer=kill_house),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
province_kill_request__company_share__gt=0,
|
||
trash=False)
|
||
|
||
elif request.GET['role'] == 'Guilds':
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(killhouse_user=kill_house) | Q(killer=kill_house),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
province_kill_request__guilds_share__gt=0,
|
||
trash=False)
|
||
else:
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(killhouse_user=kill_house) | Q(killer=kill_house),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
trash=False)
|
||
|
||
else:
|
||
if request.GET['role'] == 'ProvinceOperator':
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(killhouse_user=kill_house) | Q(killer=kill_house),
|
||
province_kill_request__union_share__gt=0,
|
||
trash=False)
|
||
elif request.GET['role'] == 'Company':
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(killhouse_user=kill_house) | Q(killer=kill_house),
|
||
province_kill_request__company_share__gt=0,
|
||
trash=False)
|
||
|
||
elif request.GET['role'] == 'Guilds':
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(killhouse_user=kill_house) | Q(killer=kill_house),
|
||
province_kill_request__guilds_share__gt=0,
|
||
trash=False)
|
||
else:
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(killhouse_user=kill_house) | Q(killer=kill_house),
|
||
trash=False)
|
||
|
||
if 'search' in request.GET:
|
||
kill_house_request_list = []
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=kill_house_requests
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=kill_house_requests)
|
||
kill_house_request_list = ps.filter()
|
||
kill_house_requests = [] if len(kill_house_request_list) == 0 else kill_house_request_list
|
||
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(kill_house_requests)
|
||
if page is not None:
|
||
serializer = KillHouseRequestForBarManagementSerializer(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = KillHouseRequestForBarManagementSerializer(kill_house_requests, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHouseRequestForAggregateLoadsViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseRequest.objects.all()
|
||
serializer_class = KillHouseRequestForBarManagementSerializer
|
||
pagination_class = CustomPagination
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = KillHouseRequestFilterSet
|
||
filterset_fields = [
|
||
'killhouse_user__kill_house_operator__user__fullname',
|
||
'killhouse_user__kill_house_operator__user__mobile',
|
||
'province_request__poultry_request__poultry__user__fullname',
|
||
'province_request__poultry_request__poultry__user__mobile',
|
||
'province_request__poultry_request__order_code',
|
||
'province_request__poultry_request__order_code',
|
||
'bar_code',
|
||
]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
user = SystemUserProfile.objects.get(user=request.user)
|
||
# user = SystemUserProfile.objects.get(user=request.user)
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
kill_house = []
|
||
kill_house_requests_list = []
|
||
if request.GET['role'] == 'KillHouse':
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False)
|
||
|
||
elif request.GET['role'] == 'KillHouseVet':
|
||
kill_house_vets = KillHouseVet.objects.filter(vet__user=user, trash=False).select_related('kill_house')
|
||
for kill_house_vet in kill_house_vets:
|
||
kill_house.append(kill_house_vet.kill_house)
|
||
|
||
else:
|
||
kill_house = KillHouse.objects.filter(system_address__province=user.province, trash=False)
|
||
|
||
if request.GET['role'] in ['CityOperator', 'CityJahad', 'CityPoultry']:
|
||
if request.GET['role'] == 'CityOperator':
|
||
city_operator = CityOperator.objects.get(user=user, trash=False)
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
(Q(killhouse_user__in=kill_house) | Q(kill_request__slaughter_house__in=kill_house)),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
assignment_state_archive='pending',
|
||
non_receipt=False,
|
||
trash=False, province_request__poultry_request__poultry__city_operator=city_operator.unit_name,
|
||
|
||
).order_by('-kill_request__recive_date')
|
||
else:
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
(Q(killhouse_user__in=kill_house) | Q(kill_request__slaughter_house__in=kill_house)),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
assignment_state_archive='pending',
|
||
non_receipt=False,
|
||
trash=False, province_request__poultry_request__poultry__address__city=user.city
|
||
|
||
).order_by('-kill_request__recive_date')
|
||
|
||
else:
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
(Q(killhouse_user__in=kill_house) | Q(kill_request__slaughter_house__in=kill_house) | Q(
|
||
killer__in=kill_house)),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
assignment_state_archive='pending',
|
||
non_receipt=False,
|
||
trash=False,
|
||
|
||
).order_by('-kill_request__recive_date')
|
||
|
||
if 'search' in request.GET:
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=kill_house_requests
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=kill_house_requests)
|
||
kill_house_requests_list = ps.filter()
|
||
kill_house_requests = [] if len(kill_house_requests_list) == 0 else kill_house_requests_list
|
||
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(kill_house_requests)
|
||
if page is not None:
|
||
serializer = self.serializer_class(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = self.serializer_class(kill_house_requests, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillingInformationDiscrepancyReportViewSet(viewsets.ModelViewSet):
|
||
queryset = PoultryRequest.objects.all()
|
||
serializer_class = PoultryRequestLetterForProvinceVetSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
province_operator = ProvinceOperator.objects.filter(
|
||
user=SystemUserProfile.objects.get(role__name='ProvinceOperator', province=user.province),
|
||
trash=False).select_related(
|
||
'user').first()
|
||
if request.GET['role'] == 'CityOperator':
|
||
city_operator = CityOperator.objects.get(user=user, trash=False)
|
||
poultry_requests = PoultryRequest.objects.filter(poultry__address__province=user.province,
|
||
poultry__city_operator=city_operator.unit_name,
|
||
state_process__in=('pending', 'accepted'),
|
||
province_state__in=('pending', 'accepted'),
|
||
final_state='pending',
|
||
trash=False,
|
||
out=False,
|
||
send_date__date__gte=date1,
|
||
send_date__date__lte=date2,
|
||
).order_by('-send_date').annotate(
|
||
total_quantity=Sum('quantity'),
|
||
total_weight=Sum(F('quantity') * F('Index_weight')),
|
||
total_remain_quantity=Sum('remain_quantity'),
|
||
total_remain_weight=Sum(F('remain_quantity') * F('Index_weight')),
|
||
|
||
)
|
||
elif request.GET['role'] in ['CityJahad', 'CityPoultry']:
|
||
poultry_requests = PoultryRequest.objects.filter(poultry__address__province=user.province,
|
||
poultry__address__city=user.city,
|
||
state_process__in=('pending', 'accepted'),
|
||
province_state__in=('pending', 'accepted'),
|
||
final_state='pending',
|
||
trash=False,
|
||
out=False,
|
||
send_date__date__gte=date1,
|
||
send_date__date__lte=date2,
|
||
).order_by('-send_date').annotate(
|
||
total_quantity=Sum('quantity'),
|
||
total_weight=Sum(F('quantity') * F('Index_weight')),
|
||
total_remain_quantity=Sum('remain_quantity'),
|
||
total_remain_weight=Sum(F('remain_quantity') * F('Index_weight')),
|
||
|
||
)
|
||
else:
|
||
poultry_requests = PoultryRequest.objects.filter(poultry__address__province=user.province,
|
||
state_process__in=('pending', 'accepted'),
|
||
province_state__in=('pending', 'accepted'),
|
||
final_state='pending',
|
||
trash=False,
|
||
out=False,
|
||
send_date__date__gte=date1,
|
||
send_date__date__lte=date2,
|
||
).order_by('-send_date').annotate(
|
||
total_quantity=Sum('quantity'),
|
||
total_weight=Sum(F('quantity') * F('Index_weight')),
|
||
total_remain_quantity=Sum('remain_quantity'),
|
||
total_remain_weight=Sum(F('remain_quantity') * F('Index_weight')),
|
||
|
||
)
|
||
poultry_request_total_quantity = poultry_requests.aggregate(total=Sum('total_quantity'))['total']
|
||
poultry_request_total_weight = poultry_requests.aggregate(total=Sum('total_weight'))['total']
|
||
poultry_request_total_remain_quantity = poultry_requests.aggregate(total=Sum('total_remain_quantity'))['total']
|
||
poultry_request_remain_weight = poultry_requests.aggregate(total=Sum('total_remain_weight'))['total']
|
||
|
||
province_kill_requests = ProvinceKillRequest.objects.filter(
|
||
province_request__poultry_request__in=poultry_requests, trash=False,
|
||
state__in=('pending', 'accepted')).annotate(
|
||
total_quantity=Sum('main_quantity'),
|
||
total_weight=Sum(F('main_quantity') * F('province_request__poultry_request__Index_weight')),
|
||
)
|
||
|
||
province_kill_requests_total_quantity = province_kill_requests.aggregate(total=Sum('total_quantity'))['total']
|
||
province_kill_requests_total_weight = province_kill_requests.aggregate(total=Sum('total_weight'))['total']
|
||
|
||
province_kill_requests_with_left_over = ProvinceKillRequest.objects.filter(
|
||
province_request__poultry_request__in=poultry_requests, trash=False,
|
||
state__in=('pending', 'accepted'), quantity__gt=0)
|
||
province_kill_requests_serializer = ProvinceKillRequestForKillingInformationDiscrepancyReportSerializer(
|
||
province_kill_requests_with_left_over, many=True)
|
||
# if 'role' in request.GET:
|
||
# if request.GET['role'] == 'ProvinceSupervisor':
|
||
# last_date = datetime(2024, 4, 14, 7, 33).date()
|
||
# if date2 > last_date and date1 <= last_date:
|
||
# kill_house_request_without_clearance_code = KillHouseRequest.objects.filter(
|
||
# province_kill_request__in=province_kill_requests, kill_request__recive_date__date__gte=date1,
|
||
# kill_request__recive_date__date__lte=last_date, clearance_code__isnull=True, trash=False)
|
||
#
|
||
# kill_house_request_diffrent_quarantine_quantity = KillHouseRequest.objects.filter(
|
||
# Q(quantity__gt=F('quarantine_quantity')) | Q(quantity__lt=F('quarantine_quantity')),
|
||
# province_kill_request__in=province_kill_requests, clearance_code__isnull=False,
|
||
# quarantine_quantity__isnull=False, trash=False)
|
||
# kill_house_request_without_vet_check = KillHouseRequest.objects.filter(
|
||
# province_kill_request__in=province_kill_requests, kill_request__recive_date__date__gte=date1,
|
||
# kill_request__recive_date__date__lte=last_date, vet_state='pending', trash=False)
|
||
# kill_house_request_without_bar_info = KillHouseRequest.objects.filter(
|
||
# province_kill_request__in=province_kill_requests, kill_request__recive_date__date__gte=date1,
|
||
# kill_request__recive_date__date__lte=last_date, vet_state='accepted',
|
||
# assignment_state_archive='pending',
|
||
# trash=False)
|
||
# kill_house_request_diffrent_bar_info = KillHouseRequest.objects.filter(
|
||
# Q(quantity__gt=F('vet_accepted_real_quantity')) | Q(
|
||
# quantity__lt=F('vet_accepted_real_quantity')) | Q(
|
||
# quantity__gt=F('accepted_real_quantity')) | Q(quantity__lt=F('accepted_real_quantity')) | Q(
|
||
# vet_accepted_real_quantity__gt=F('accepted_real_quantity')) | Q(
|
||
# vet_accepted_real_quantity__lt=F('accepted_real_quantity')),
|
||
# # kill_request__recive_date__date__gte=date1,
|
||
# # kill_request__recive_date__date__lte=last_date,
|
||
# province_kill_request__in=province_kill_requests, vet_state='accepted',
|
||
# assignment_state_archive='True',
|
||
# trash=False)
|
||
# elif date2 > last_date and date1 > last_date:
|
||
# kill_house_request_without_clearance_code = []
|
||
# kill_house_request_without_vet_check = []
|
||
# kill_house_request_without_bar_info = []
|
||
# kill_house_request_diffrent_quarantine_quantity = KillHouseRequest.objects.filter(
|
||
# Q(quantity__gt=F('quarantine_quantity')) | Q(quantity__lt=F('quarantine_quantity')),
|
||
# province_kill_request__in=province_kill_requests, clearance_code__isnull=False,
|
||
# quarantine_quantity__isnull=False, trash=False)
|
||
# kill_house_request_diffrent_bar_info = KillHouseRequest.objects.filter(
|
||
# Q(quantity__gt=F('vet_accepted_real_quantity')) | Q(
|
||
# quantity__lt=F('vet_accepted_real_quantity')) | Q(
|
||
# quantity__gt=F('accepted_real_quantity')) | Q(quantity__lt=F('accepted_real_quantity')) | Q(
|
||
# vet_accepted_real_quantity__gt=F('accepted_real_quantity')) | Q(
|
||
# vet_accepted_real_quantity__lt=F('accepted_real_quantity')),
|
||
# province_kill_request__in=province_kill_requests, vet_state='accepted',
|
||
# assignment_state_archive='True',
|
||
# trash=False)
|
||
# else:
|
||
#
|
||
# kill_house_request_without_clearance_code = KillHouseRequest.objects.filter(
|
||
# province_kill_request__in=province_kill_requests, clearance_code__isnull=True, trash=False)
|
||
#
|
||
# kill_house_request_diffrent_quarantine_quantity = KillHouseRequest.objects.filter(
|
||
# Q(quantity__gt=F('quarantine_quantity')) | Q(quantity__lt=F('quarantine_quantity')),
|
||
# province_kill_request__in=province_kill_requests, clearance_code__isnull=False,
|
||
# quarantine_quantity__isnull=False, trash=False)
|
||
# kill_house_request_without_vet_check = KillHouseRequest.objects.filter(
|
||
# province_kill_request__in=province_kill_requests, vet_state='pending', trash=False)
|
||
# kill_house_request_without_bar_info = KillHouseRequest.objects.filter(
|
||
# province_kill_request__in=province_kill_requests, vet_state='accepted',
|
||
# assignment_state_archive='pending',
|
||
# trash=False)
|
||
# kill_house_request_diffrent_bar_info = KillHouseRequest.objects.filter(
|
||
# Q(quantity__gt=F('vet_accepted_real_quantity')) | Q(
|
||
# quantity__lt=F('vet_accepted_real_quantity')) | Q(
|
||
# quantity__gt=F('accepted_real_quantity')) | Q(quantity__lt=F('accepted_real_quantity')) | Q(
|
||
# vet_accepted_real_quantity__gt=F('accepted_real_quantity')) | Q(
|
||
# vet_accepted_real_quantity__lt=F('accepted_real_quantity')),
|
||
# province_kill_request__in=province_kill_requests, vet_state='accepted',
|
||
# assignment_state_archive='True',
|
||
# trash=False)
|
||
# else:
|
||
kill_house_request_without_clearance_code = KillHouseRequest.objects.filter(
|
||
province_kill_request__in=province_kill_requests, clearance_code__isnull=True, trash=False)
|
||
|
||
kill_house_request_diffrent_quarantine_quantity = KillHouseRequest.objects.filter(
|
||
Q(quantity__gt=F('quarantine_quantity')) | Q(quantity__lt=F('quarantine_quantity')),
|
||
province_kill_request__in=province_kill_requests, clearance_code__isnull=False,
|
||
quarantine_quantity__isnull=False, trash=False)
|
||
kill_house_request_without_vet_check = KillHouseRequest.objects.filter(
|
||
province_kill_request__in=province_kill_requests, vet_state='pending', trash=False)
|
||
kill_house_request_without_bar_info = KillHouseRequest.objects.filter(
|
||
province_kill_request__in=province_kill_requests,
|
||
assignment_state_archive='pending',
|
||
trash=False)
|
||
|
||
kill_house_request_diffrent_bar_info = KillHouseRequest.objects.filter(
|
||
Q(quantity__gt=F('accepted_real_quantity')) | Q(quantity__lt=F('accepted_real_quantity')),
|
||
province_kill_request__in=province_kill_requests,
|
||
assignment_state_archive='True',
|
||
trash=False)
|
||
|
||
# kill_house_request_diffrent_bar_info = KillHouseRequest.objects.filter(
|
||
# Q(quantity__gt=F('vet_accepted_real_quantity')) | Q(quantity__lt=F('vet_accepted_real_quantity')) | Q(
|
||
# quantity__gt=F('accepted_real_quantity')) | Q(quantity__lt=F('accepted_real_quantity')) | Q(
|
||
# vet_accepted_real_quantity__gt=F('accepted_real_quantity') | Q(vet_accepted_real_quantity__lt=F('accepted_real_quantity'))),
|
||
# province_kill_request__in=province_kill_requests, vet_state='accepted', assignment_state_archive='True',
|
||
# trash=False)
|
||
|
||
# kill_house_request_diffrent_bar_info = KillHouseRequest.objects.filter(
|
||
# Q(quantity__gt=F('vet_accepted_real_quantity')) | Q(quantity__lt=F('vet_accepted_real_quantity')) | Q(
|
||
# quantity__gt=F('accepted_real_quantity')) | Q(quantity__lt=F('accepted_real_quantity')) | Q(
|
||
# vet_accepted_real_quantity__gt=F('accepted_real_quantity')) | Q(
|
||
# vet_accepted_real_quantity__lt=F('accepted_real_quantity')),
|
||
# province_kill_request__in=province_kill_requests, vet_state='accepted', assignment_state_archive='True',
|
||
# trash=False)
|
||
|
||
kill_house_request_without_clearance_code_serializer = KillHouseRequestForBarManagementSerializer(
|
||
kill_house_request_without_clearance_code, many=True)
|
||
kill_house_request_diffrent_quarantine_quantitye_serializer = KillHouseRequestForBarManagementSerializer(
|
||
kill_house_request_diffrent_quarantine_quantity, many=True)
|
||
kill_house_request_without_vet_check_serializer = KillHouseRequestForBarManagementSerializer(
|
||
kill_house_request_without_vet_check, many=True)
|
||
kill_house_request_without_bar_info_serializer = KillHouseRequestForBarManagementSerializer(
|
||
kill_house_request_without_bar_info, many=True)
|
||
kill_house_request_diffrent_bar_info_serializer = KillHouseRequestForDiffrentBarInfoSerializer(
|
||
kill_house_request_diffrent_bar_info, many=True)
|
||
|
||
return Response({
|
||
"part_one": {
|
||
"total_requests": poultry_requests.count(),
|
||
"poultry_request_total_quantity": poultry_request_total_quantity if poultry_request_total_quantity != None else 0,
|
||
"poultry_request_total_weight": poultry_request_total_weight if poultry_request_total_weight != None else 0,
|
||
"province_kill_requests_total_quantity": province_kill_requests_total_quantity if province_kill_requests_total_quantity != None else 0,
|
||
"province_kill_requests_total_weight": province_kill_requests_total_weight if province_kill_requests_total_weight != None else 0,
|
||
"poultry_request_total_remain_quantity": poultry_request_total_remain_quantity if poultry_request_total_remain_quantity != None else 0,
|
||
"poultry_request_remain_weight": poultry_request_remain_weight if poultry_request_remain_weight != None else 0,
|
||
"operator_fullname": province_operator.user.fullname,
|
||
"operator_mobile": province_operator.user.mobile,
|
||
"role": "ProvinceOperator",
|
||
},
|
||
"part_two": province_kill_requests_serializer.data,
|
||
"part_three": kill_house_request_without_clearance_code_serializer.data,
|
||
"part_seven": kill_house_request_diffrent_quarantine_quantitye_serializer.data,
|
||
"part_four": kill_house_request_without_vet_check_serializer.data,
|
||
"part_five": kill_house_request_without_bar_info_serializer.data,
|
||
"part_six": kill_house_request_diffrent_bar_info_serializer.data,
|
||
})
|
||
|
||
|
||
class PoultryRequestForTotalInformationInTableViewSet(viewsets.ModelViewSet):
|
||
queryset = PoultryRequest.objects.all()
|
||
kill_house_requests_queryset = KillHouseRequest.objects.all()
|
||
serializer_class = PoultryRequestForTotalInformationInTableSerializer
|
||
pagination_class = CustomPagination
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = PoultryRequestFilterSet
|
||
filterset_fields = poultry_request_new_fields
|
||
kill_house_requests_filter_class = KillHouseRequestFilterSet
|
||
kill_house_requests_filterset_fields = kill_house_request_filterset_fields
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
poultry_requests_for_search = []
|
||
kill_house_request_for_search = []
|
||
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
|
||
if 'clearance_code' in request.GET:
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
clearance_code__isnull=request.GET[
|
||
'clearance_code']).select_related(
|
||
'province_request__poultry_request')
|
||
|
||
poultry_requests = PoultryRequest.objects.filter(
|
||
pk__in=kill_house_requests.values('province_request__poultry_request'),
|
||
poultry__address__province=user.province,
|
||
state_process__in=('pending', 'accepted'),
|
||
province_state__in=('pending', 'accepted'),
|
||
final_state='pending',
|
||
trash=False, out=False,
|
||
send_date__date__gte=date1,
|
||
send_date__date__lte=date2,
|
||
).order_by('-send_date')
|
||
elif 'assignment' in request.GET:
|
||
kill_house_requests = KillHouseRequest.objects.filter(kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
assignment_state_archive=request.GET[
|
||
'assignment']).select_related(
|
||
'province_request__poultry_request')
|
||
|
||
poultry_requests = PoultryRequest.objects.filter(
|
||
pk__in=kill_house_requests.values('province_request__poultry_request'),
|
||
poultry__address__province=user.province,
|
||
state_process__in=('pending', 'accepted'),
|
||
province_state__in=('pending', 'accepted'),
|
||
final_state='pending',
|
||
trash=False, out=False,
|
||
send_date__date__gte=date1,
|
||
send_date__date__lte=date2,
|
||
).order_by('-send_date')
|
||
|
||
|
||
elif 'discharge' in request.GET:
|
||
if request.GET['discharge'] == 'pending':
|
||
kill_house_requests = KillHouseRequest.objects.filter(kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
vet_state='pending',
|
||
assignment_state_archive='pending').select_related(
|
||
'province_request__poultry_request')
|
||
else:
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
(Q(vet_state='pending') | Q(vet_state='pending', assignment_state_archive='True')),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2, ).select_related(
|
||
'province_request__poultry_request')
|
||
|
||
poultry_requests = PoultryRequest.objects.filter(
|
||
pk__in=kill_house_requests.values('province_request__poultry_request'),
|
||
poultry__address__province=user.province,
|
||
state_process__in=('pending', 'accepted'),
|
||
province_state__in=('pending', 'accepted'),
|
||
final_state='pending',
|
||
trash=False, out=False,
|
||
send_date__date__gte=date1,
|
||
send_date__date__lte=date2,
|
||
).order_by('-send_date')
|
||
|
||
else:
|
||
poultry_requests = PoultryRequest.objects.filter(
|
||
poultry__address__province=user.province,
|
||
# state_process__in=('pending', 'accepted'),
|
||
# province_state__in=('pending', 'accepted'),
|
||
final_state='pending',
|
||
trash=False, out=False,
|
||
send_date__date__gte=date1,
|
||
send_date__date__lte=date2,
|
||
).order_by('-send_date')
|
||
kill_house_requests = KillHouseRequest.objects.filter(kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
province_request__poultry_request__in=poultry_requests)
|
||
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "":
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=poultry_requests
|
||
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=poultry_requests)
|
||
poultry_requests_for_search = ps.filter()
|
||
|
||
poultry_requests = [] if len(poultry_requests_for_search) == 0 else poultry_requests_for_search
|
||
|
||
for item in self.kill_house_requests_filterset_fields:
|
||
kill_house_request_query = QueryDict('{0}={1}'.format(item, request.GET['value']))
|
||
if (self.kill_house_requests_filter_class(
|
||
data=kill_house_request_query,
|
||
queryset=kill_house_requests
|
||
|
||
)
|
||
).filter():
|
||
ks = self.kill_house_requests_filter_class(data=kill_house_request_query,
|
||
queryset=kill_house_requests)
|
||
kill_house_request_for_search = ks.filter()
|
||
kill_house_requests = [] if len(kill_house_request_for_search) == 0 else kill_house_request_for_search
|
||
if len(kill_house_requests) > 0:
|
||
for kill_house_request in kill_house_requests:
|
||
if kill_house_request.province_request.poultry_request not in poultry_requests:
|
||
poultry_requests.append(kill_house_request.province_request.poultry_request)
|
||
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(poultry_requests)
|
||
if page is not None:
|
||
serializer = PoultryRequestForTotalInformationInTableSerializer(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = PoultryRequestForTotalInformationInTableSerializer(poultry_requests, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class PoultryRequestForTotalInformationViewSet(viewsets.ModelViewSet):
|
||
queryset = PoultryRequest.objects.all()
|
||
kill_house_requests_queryset = KillHouseRequest.objects.all()
|
||
serializer_class = PoultryRequestForTotalInformationSerializer
|
||
pagination_class = CustomPagination
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = PoultryRequestFilterSet
|
||
filterset_fields = poultry_request_new_fields
|
||
kill_house_requests_filter_class = KillHouseRequestFilterSet
|
||
kill_house_requests_filterset_fields = kill_house_request_filterset_fields
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
poultry_requests_for_search = []
|
||
kill_house_request_for_search = []
|
||
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
|
||
if 'clearance_code' in request.GET:
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
clearance_code__isnull=request.GET[
|
||
'clearance_code']).select_related(
|
||
'province_request__poultry_request')
|
||
|
||
poultry_requests = PoultryRequest.objects.filter(
|
||
pk__in=kill_house_requests.values('province_request__poultry_request'),
|
||
poultry__address__province=user.province,
|
||
state_process__in=('pending', 'accepted'),
|
||
province_state__in=('pending', 'accepted'),
|
||
final_state='pending',
|
||
trash=False, out=False,
|
||
send_date__date__gte=date1,
|
||
send_date__date__lte=date2,
|
||
).order_by('-send_date')
|
||
elif 'assignment' in request.GET:
|
||
kill_house_requests = KillHouseRequest.objects.filter(kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
assignment_state_archive=request.GET[
|
||
'assignment']).select_related(
|
||
'province_request__poultry_request')
|
||
|
||
poultry_requests = PoultryRequest.objects.filter(
|
||
pk__in=kill_house_requests.values('province_request__poultry_request'),
|
||
poultry__address__province=user.province,
|
||
state_process__in=('pending', 'accepted'),
|
||
province_state__in=('pending', 'accepted'),
|
||
final_state='pending',
|
||
trash=False, out=False,
|
||
send_date__date__gte=date1,
|
||
send_date__date__lte=date2,
|
||
).order_by('-send_date')
|
||
|
||
|
||
elif 'discharge' in request.GET:
|
||
if request.GET['discharge'] == 'pending':
|
||
kill_house_requests = KillHouseRequest.objects.filter(kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
vet_state='pending',
|
||
assignment_state_archive='pending').select_related(
|
||
'province_request__poultry_request')
|
||
else:
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
(Q(vet_state='pending') | Q(vet_state='pending', assignment_state_archive='True')),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2, ).select_related(
|
||
'province_request__poultry_request')
|
||
|
||
poultry_requests = PoultryRequest.objects.filter(
|
||
pk__in=kill_house_requests.values('province_request__poultry_request'),
|
||
poultry__address__province=user.province,
|
||
state_process__in=('pending', 'accepted'),
|
||
province_state__in=('pending', 'accepted'),
|
||
final_state='pending',
|
||
trash=False, out=False,
|
||
send_date__date__gte=date1,
|
||
send_date__date__lte=date2,
|
||
).order_by('-send_date')
|
||
|
||
else:
|
||
if request.GET['role'] == 'CityOperator':
|
||
city_operator = CityOperator.objects.get(user=user, trash=False)
|
||
poultry_requests = PoultryRequest.objects.filter(
|
||
poultry__address__province=user.province,
|
||
poultry__city_operator=city_operator.unit_name,
|
||
# final_state='pending',
|
||
trash=False,
|
||
# out=False,
|
||
send_date__date__gte=date1,
|
||
send_date__date__lte=date2,
|
||
).order_by('-send_date')
|
||
elif request.GET['role'] in ['CityJahad', 'CityPoultry']:
|
||
poultry_requests = PoultryRequest.objects.filter(
|
||
poultry__address__city=user.city,
|
||
# final_state='pending',
|
||
trash=False,
|
||
# out=False,
|
||
send_date__date__gte=date1,
|
||
send_date__date__lte=date2,
|
||
).order_by('-send_date')
|
||
elif request.GET['role'] == 'LiveStockSupport':
|
||
poultry_requests = PoultryRequest.objects.filter(
|
||
poultry__address__province=user.province,
|
||
freezing=True,
|
||
final_state='pending',
|
||
trash=False, out=False,
|
||
send_date__date__gte=date1,
|
||
send_date__date__lte=date2,
|
||
).order_by('-send_date')
|
||
else:
|
||
poultry_requests = PoultryRequest.objects.filter(
|
||
poultry__address__province=user.province,
|
||
# final_state='pending',
|
||
trash=False,
|
||
# out=False,
|
||
send_date__date__gte=date1,
|
||
send_date__date__lte=date2,
|
||
).order_by('-send_date')
|
||
kill_house_requests = KillHouseRequest.objects.filter(kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
province_request__poultry_request__in=poultry_requests)
|
||
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "":
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=poultry_requests
|
||
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=poultry_requests)
|
||
poultry_requests_for_search = ps.filter()
|
||
|
||
poultry_requests = [] if len(poultry_requests_for_search) == 0 else poultry_requests_for_search
|
||
|
||
for item in self.kill_house_requests_filterset_fields:
|
||
kill_house_request_query = QueryDict('{0}={1}'.format(item, request.GET['value']))
|
||
if (self.kill_house_requests_filter_class(
|
||
data=kill_house_request_query,
|
||
queryset=kill_house_requests
|
||
|
||
)
|
||
).filter():
|
||
ks = self.kill_house_requests_filter_class(data=kill_house_request_query,
|
||
queryset=kill_house_requests)
|
||
kill_house_request_for_search = ks.filter()
|
||
kill_house_requests = [] if len(kill_house_request_for_search) == 0 else kill_house_request_for_search
|
||
if len(kill_house_requests) > 0:
|
||
for kill_house_request in kill_house_requests:
|
||
if kill_house_request.province_request.poultry_request not in poultry_requests:
|
||
poultry_requests.append(kill_house_request.province_request.poultry_request)
|
||
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(poultry_requests)
|
||
if page is not None:
|
||
serializer = PoultryRequestForTotalInformationSerializer(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = PoultryRequestForTotalInformationSerializer(poultry_requests, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class GeneralPoultryRequestLetterReportViewSet(viewsets.ModelViewSet):
|
||
queryset = PoultryRequest.objects.all()
|
||
serializer_class = PoultryRequestLetterForProvinceVetSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
date = datetime.strptime(str(request.GET['date']), '%Y-%m-%d').date()
|
||
if request.GET['type'] == 'broadcast':
|
||
date_one_day_ago = date - timedelta(days=1)
|
||
else:
|
||
date_one_day_ago = date
|
||
|
||
poultry_requests_first_letter = PoultryRequest.objects.filter(poultry__address__province=user.province,
|
||
state_process__in=('pending', 'accepted'),
|
||
province_state__in=('pending', 'accepted'),
|
||
final_state='pending',
|
||
trash=False, out=False,
|
||
send_date__date=date_one_day_ago
|
||
).order_by('-send_date')
|
||
serializer_poultry_requests_first_letter = PoultryRequestForKillingInformationSerializer(
|
||
poultry_requests_first_letter, many=True)
|
||
poultry_requests_seconde_letter = PoultryRequest.objects.filter(send_date__date=date_one_day_ago,
|
||
quantity__gt=F('remain_quantity'),
|
||
trash=False)
|
||
serializer_poultry_requests_seconde_letter = PoultryRequestLetterForProvinceVetSerializer(
|
||
poultry_requests_seconde_letter, many=True)
|
||
|
||
kill_house_requests_third_letter_part_two = KillHouseRequest.objects.filter(
|
||
Q(vet_state='accepted') | Q(assignment_state_archive='True'),
|
||
kill_request__recive_date__date=date_one_day_ago,
|
||
province_request__poultry_request__poultry__address__province=user.province,
|
||
trash=False
|
||
).only('accepted_real_quantity', 'accepted_real_weight')
|
||
kill_house_requests_third_letter_part_two_quantity = \
|
||
kill_house_requests_third_letter_part_two.aggregate(total=Sum('accepted_real_quantity'))[
|
||
'total']
|
||
kill_house_requests_third_letter_part_two_weight = \
|
||
kill_house_requests_third_letter_part_two.aggregate(total=Sum('accepted_real_weight'))[
|
||
'total']
|
||
kill_house_requests_third_letter_part_three = KillHouseRequest.objects.filter(
|
||
clearance_code__isnull=False,
|
||
kill_request__recive_date__date=date_one_day_ago,
|
||
province_request__poultry_request__poultry__address__province=user.province,
|
||
trash=False
|
||
).only('accepted_real_quantity', 'accepted_real_weight')
|
||
|
||
# total_weight = kill_house_requests_third_letter.aggregate(total=Sum('accepted_real_weight'))[
|
||
# 'total']
|
||
# total_quantity = kill_house_requests_third_letter.aggregate(total=Sum('accepted_real_quantity'))[
|
||
# 'total']
|
||
|
||
kill_house_requests_third_letter = KillHouseRequest.objects.filter(
|
||
kill_request__recive_date__date=date_one_day_ago,
|
||
province_request__poultry_request__poultry__address__province=user.province,
|
||
trash=False
|
||
).select_related('kill_request')
|
||
kill_house_requests_third_letter_quantity = kill_house_requests_third_letter.aggregate(total=Sum('quantity'))[
|
||
'total']
|
||
kill_house_requests_third_letter_weight = kill_house_requests_third_letter.aggregate(
|
||
total=Sum(F('accepted_real_weight') * F('province_request__poultry_request__Index_weight')))[
|
||
'total']
|
||
serializer_kill_house_requests_third_letter = KillHouseRequestForBarManagementSerializer(
|
||
kill_house_requests_third_letter, many=True)
|
||
|
||
province_kill_requests = ProvinceKillRequest.objects.filter(state__in=('pending', 'accepted'),
|
||
kill_request__recive_date__date=date_one_day_ago).select_related(
|
||
'killhouse_user')
|
||
kill_houses = KillHouse.objects.filter(
|
||
pk__in=province_kill_requests.values('killhouse_user')
|
||
)
|
||
kill_house_ware_houses = KillHouseWareHouse.objects.filter(kill_house__in=kill_houses, date__date=date)
|
||
steward_allocations = StewardAllocation.objects.filter(
|
||
system_registration_code=True,
|
||
ware_house__in=kill_house_ware_houses, trash=False,
|
||
date__date=date).order_by('id')
|
||
|
||
total_number_of_carcasses = kill_house_ware_houses.aggregate(total=Sum('final_total_number_of_carcasses'))[
|
||
'total']
|
||
total_weight_of_carcasses = kill_house_ware_houses.aggregate(total=Sum('final_total_weight_of_carcasses'))[
|
||
'total']
|
||
allocated_total_number_of_carcasses = \
|
||
kill_house_ware_houses.aggregate(total=Sum('allocated_total_number_of_carcasses'))['total']
|
||
allocated_total_weight_of_carcasses = \
|
||
kill_house_ware_houses.aggregate(total=Sum('allocated_total_weight_of_carcasses'))['total']
|
||
remain_total_number_of_carcasses = \
|
||
kill_house_ware_houses.aggregate(total=Sum('remain_total_number_of_carcasses'))['total']
|
||
remain_total_weight_of_carcasses = \
|
||
kill_house_ware_houses.aggregate(total=Sum('remain_total_weight_of_carcasses'))['total']
|
||
|
||
province_kill_requests = ProvinceKillRequest.objects.filter(state__in=('pending', 'accepted'),
|
||
kill_request__recive_date__date=date_one_day_ago).select_related(
|
||
'killhouse_user')
|
||
kill_houses = KillHouse.objects.filter(
|
||
pk__in=province_kill_requests.values('killhouse_user')
|
||
)
|
||
|
||
serializer_kill_house_requests_fourth_part_two = KillHouseForAutomaticStewardAllocationSerializer(kill_houses,
|
||
context={
|
||
'request': request},
|
||
many=True)
|
||
|
||
allocations = StewardAllocation.objects.filter(trash=False, system_registration_code=True,
|
||
date__date=date).order_by('id')
|
||
real_number_of_carcasses = \
|
||
allocations.aggregate(total=Sum('real_number_of_carcasses'))['total']
|
||
real_weight_of_carcasses = \
|
||
allocations.aggregate(total=Sum('real_weight_of_carcasses'))['total']
|
||
serializer_kill_house_requests_fourth_part_three = StewardAllocationSerializer(allocations, many=True)
|
||
|
||
return Response({
|
||
"serializer_poultry_requests_first_letter": serializer_poultry_requests_first_letter.data,
|
||
"serializer_poultry_requests_seconde_letter": serializer_poultry_requests_seconde_letter.data,
|
||
"serializer_kill_house_requests_third_letter": serializer_kill_house_requests_third_letter.data,
|
||
"kill_house_requests_third_letter_quantity": kill_house_requests_third_letter_quantity if kill_house_requests_third_letter_quantity != None else 0,
|
||
"kill_house_requests_third_letter_weight": int(
|
||
kill_house_requests_third_letter_weight) if kill_house_requests_third_letter_weight != None else 0,
|
||
"serializer_kill_house_requests_third_letter_part_two": len(kill_house_requests_third_letter_part_two),
|
||
"kill_house_requests_third_letter_part_two_quantity": kill_house_requests_third_letter_part_two_quantity if kill_house_requests_third_letter_part_two_quantity != None else 0,
|
||
"kill_house_requests_third_letter_part_two_weight": kill_house_requests_third_letter_part_two_weight if kill_house_requests_third_letter_part_two_weight != None else 0,
|
||
"serializer_kill_house_requests_third_letter_part_three": len(kill_house_requests_third_letter_part_three),
|
||
"serializer_kill_house_requests_fourth_part_one": {
|
||
"buyers": len(kill_house_ware_houses),
|
||
"allocations": len(steward_allocations),
|
||
"total_number_of_carcasses": total_number_of_carcasses if total_number_of_carcasses != None else 0,
|
||
"total_weight_of_carcasses": total_weight_of_carcasses if total_weight_of_carcasses != None else 0,
|
||
"allocated_total_number_of_carcasses": allocated_total_number_of_carcasses if allocated_total_number_of_carcasses != None else 0,
|
||
"allocated_total_weight_of_carcasses": allocated_total_weight_of_carcasses if allocated_total_weight_of_carcasses != None else 0,
|
||
"remain_total_number_of_carcasses": remain_total_number_of_carcasses if remain_total_number_of_carcasses != None else 0,
|
||
"remain_total_weight_of_carcasses": remain_total_weight_of_carcasses if remain_total_weight_of_carcasses != None else 0,
|
||
},
|
||
"serializer_kill_house_requests_fourth_part_two": serializer_kill_house_requests_fourth_part_two.data,
|
||
"serializer_kill_house_requests_fourth_part_three": serializer_kill_house_requests_fourth_part_three.data,
|
||
"serializer_kill_house_requests_fourth_part_fourth": real_number_of_carcasses if real_number_of_carcasses != None else 0,
|
||
"serializer_kill_house_requests_fourth_part_fifth": real_weight_of_carcasses if real_weight_of_carcasses != None else 0,
|
||
"serializer_kill_house_requests_fourth_part_sixth": len(allocations),
|
||
})
|
||
|
||
|
||
class StewardGuildsAllocationsForStatisticalProfileViewSet(viewsets.ModelViewSet):
|
||
queryset = StewardAllocation.objects.all()
|
||
serializer_class = StewardAllocationSerializer
|
||
permission_classes = [AllowAny]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
date = datetime.strptime(str(request.GET['date']), '%Y-%m-%d').date()
|
||
allocations = StewardAllocation.objects.filter(trash=False, system_registration_code=True,
|
||
date__date=date).order_by('id')
|
||
real_number_of_carcasses = \
|
||
allocations.aggregate(total=Sum('real_number_of_carcasses'))['total']
|
||
real_weight_of_carcasses = \
|
||
allocations.aggregate(total=Sum('real_weight_of_carcasses'))['total']
|
||
serializer_kill_house_requests_fourth_part_three = StewardAllocationSerializer(allocations, many=True)
|
||
|
||
return Response({
|
||
"real_number_of_carcasses": real_number_of_carcasses if real_number_of_carcasses != None else 0,
|
||
"real_weight_of_carcasses": real_weight_of_carcasses if real_weight_of_carcasses != None else 0,
|
||
"allocations": len(allocations),
|
||
})
|
||
|
||
|
||
# kill_house_requests=KillHouseRequest.objects.filter(killhouse_user__id=5,trash=True,clearance_code__isnull=False,message__isnull=True)
|
||
# for kill_house_request in kill_house_requests:
|
||
# kill_house_request.message='عدم ارسال راننده توسط کشتارگاه'
|
||
# kill_house_request.bar_remover={
|
||
# "date": str(kill_house_request.create_date.date()),
|
||
# "role":"KillHouse",
|
||
# "mobile": "09143488339",
|
||
# "full_name": "حامد صمدی"
|
||
# }
|
||
# kill_house_request.save()
|
||
|
||
|
||
class DetailOfKillingViewSet(viewsets.ViewSet):
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def hatching_55_90_data(self, request):
|
||
if 'role' in request.GET:
|
||
if request.GET['role'] == 'CityOperator':
|
||
city_operator = CityOperator.objects.get(trash=False, user__user=request.user)
|
||
hatching_between_50_70 = PoultryHatching.objects.filter(trash=False, left_over__gt=F('quantity') * 0.1,
|
||
chicken_age__range=(55, 90),
|
||
poultry__city_operator=city_operator.unit_name, ).order_by(
|
||
'id')
|
||
elif request.GET['role'] in ['CityJahad', 'CityPoultry']:
|
||
user = SystemUserProfile.objects.get(user=request.user)
|
||
hatching_between_50_70 = PoultryHatching.objects.filter(trash=False, left_over__gt=F('quantity') * 0.1,
|
||
chicken_age__range=(55, 90),
|
||
poultry__user__city=user.city).order_by('id')
|
||
else:
|
||
hatching_between_50_70 = PoultryHatching.objects.filter(trash=False, left_over__gt=F('quantity') * 0.1,
|
||
chicken_age__range=(55, 90)).order_by('id')
|
||
else:
|
||
hatching_between_50_70 = PoultryHatching.objects.filter(trash=False, left_over__gt=F('quantity') * 0.1,
|
||
chicken_age__range=(55, 90)).order_by('id')
|
||
min_list = []
|
||
|
||
all_poultry_hatching_quantity = hatching_between_50_70.aggregate(total=Sum('quantity'))['total']
|
||
all_poultry_hatching_killed_quantity = hatching_between_50_70.aggregate(total=Sum('killed_quantity'))['total']
|
||
all_poultry_hatching_left_over = hatching_between_50_70.aggregate(total=Sum('left_over'))['total']
|
||
all_left_over_ninty_percent = \
|
||
hatching_between_50_70.aggregate(total=Sum(F('quantity') * 90 / 100) - Sum(F('killed_quantity')))['total']
|
||
archive_hatch = hatching_between_50_70.filter(archive=True, allow_hatching='True')
|
||
active_hatch = hatching_between_50_70.filter(archive=False, allow_hatching='pending')
|
||
archive_hatching_quantity = \
|
||
archive_hatch.aggregate(total=Sum('quantity'))['total']
|
||
left_over_active_hatch = \
|
||
active_hatch.aggregate(total=Sum('quantity'))['total'] or 0
|
||
for poultry_hatching in hatching_between_50_70:
|
||
if poultry_hatching.chicken_age not in min_list:
|
||
min_list.append(poultry_hatching.chicken_age)
|
||
|
||
min_list = sorted(min_list)
|
||
all_total_commitment = hatching_between_50_70.aggregate(total_quantity=Sum('total_commitment')).get(
|
||
'total_quantity', 0)
|
||
all_governmental_killed_quantity = hatching_between_50_70.aggregate(
|
||
total_quantity=Sum('governmental_killed_quantity')).get(
|
||
'total_quantity', 0)
|
||
all_free_killed_quantity = hatching_between_50_70.aggregate(
|
||
total_quantity=Sum('free_killed_quantity')).get(
|
||
'total_quantity', 0)
|
||
all_total_killed_weight = hatching_between_50_70.aggregate(
|
||
total_quantity=Sum('total_killed_weight')).get(
|
||
'total_quantity', 0)
|
||
all_governmental_quantity = hatching_between_50_70.aggregate(
|
||
total_quantity=Sum('governmental_quantity')).get(
|
||
'total_quantity', 0)
|
||
all_free_quantity = hatching_between_50_70.aggregate(
|
||
total_quantity=Sum('free_quantity')).get(
|
||
'total_quantity', 0)
|
||
all_out_province_killed_quantity = hatching_between_50_70.aggregate(
|
||
total_quantity=Sum('out_province_killed_quantity')).get(
|
||
'total_quantity', 0)
|
||
all_out_province_killed_weight = hatching_between_50_70.aggregate(
|
||
total_quantity=Sum('out_province_killed_weight')).get(
|
||
'total_quantity', 0)
|
||
|
||
return {
|
||
'poultry': len(hatching_between_50_70),
|
||
'hatching_quantity': all_poultry_hatching_quantity,
|
||
'len_archive_hatching': len(archive_hatch),
|
||
'archive_hatching_quantity': archive_hatching_quantity,
|
||
'len_active_hatching': len(active_hatch),
|
||
'active_hatching_quantity': left_over_active_hatch,
|
||
'hatching_killed_quantity': all_poultry_hatching_killed_quantity,
|
||
'hatching_killed_weight': int(all_total_killed_weight),
|
||
'hatching_left_over': all_poultry_hatching_left_over,
|
||
'hatching_left_over_ninty_percent': all_left_over_ninty_percent,
|
||
'min_age': min_list[0] if len(min_list) > 0 else None,
|
||
'max_age': min_list[len(min_list) - 1] if len(min_list) > 0 else None,
|
||
'total_commitment': all_total_commitment,
|
||
'governmental_quantity': all_governmental_quantity,
|
||
'governmental_weight': int(all_governmental_killed_quantity),
|
||
'free_quantity': all_free_quantity,
|
||
'free_weight': all_free_killed_quantity,
|
||
'out_province_killed_quantity': all_out_province_killed_quantity,
|
||
'out_province_killed_weight': all_out_province_killed_weight
|
||
}
|
||
|
||
def get_kill_house_for_detail(self, kill_req):
|
||
poultry_request = (PoultryRequest.objects.filter(trash=False, pk__in=kill_req.values(
|
||
'province_request__poultry_request'))
|
||
.only('quantity', 'Index_weight')).annotate(
|
||
total_quantity=Sum('quantity'),
|
||
total_weight=Sum(F('quantity') * F('Index_weight'))
|
||
)
|
||
total_requests_quantity = poultry_request.aggregate(total=Sum('total_quantity'))['total']
|
||
total_requests_weight = poultry_request.aggregate(total=Sum('total_weight'))['total']
|
||
all_quantity = kill_req.aggregate(total=Sum('accepted_real_quantity'))[
|
||
'total'] or 0
|
||
all_weighte = kill_req.aggregate(total=Sum('accepted_real_weight'))[
|
||
'total'] or 0
|
||
all_governmental_quantity = \
|
||
kill_req.filter(province_request__poultry_request__free_sale_in_province=False).aggregate(
|
||
total=Sum('accepted_real_quantity'))[
|
||
'total'] or 0
|
||
all_governmental_weight = \
|
||
kill_req.filter(province_request__poultry_request__free_sale_in_province=False).aggregate(
|
||
total=Sum('accepted_real_weight'))[
|
||
'total'] or 0
|
||
all_free_quantity = kill_req.filter(province_request__poultry_request__free_sale_in_province=True).aggregate(
|
||
total=Sum('accepted_real_quantity'))[
|
||
'total'] or 0
|
||
all_free_weight = kill_req.filter(province_request__poultry_request__free_sale_in_province=True).aggregate(
|
||
total=Sum('accepted_real_weight'))[
|
||
'total'] or 0
|
||
|
||
all_age = []
|
||
|
||
if kill_req:
|
||
for kill in kill_req:
|
||
# weight = kill.get('quantity') * kill.get(
|
||
# 'province_kill_request__province_request__poultry_request__Index_weight')
|
||
# all_weighte += weight
|
||
age = (kill.get('province_request__poultry_request__send_date').date() -
|
||
kill.get('province_request__poultry_request__hatching__date').date()).days + 1
|
||
if age not in all_age:
|
||
all_age.append(age)
|
||
# difference_bars = kill_req.filter(
|
||
# Q(quantity__gt=F('quarantine_quantity')) | Q(quantity__lt=F('quarantine_quantity')),quarantine_quantity__gt=0)
|
||
#
|
||
#
|
||
# final_real_quantity=-0
|
||
# difference_bar = len(difference_bars)
|
||
# greater_bars_quantity = difference_bars.filter(quantity__gt=F('quarantine_quantity'))
|
||
# real_greater_bars_quantity = (greater_bars_quantity.aggregate(total=Sum('quarantine_quantity'))['total'] or 0 ) - (greater_bars_quantity.aggregate(total=Sum('quantity'))['total'] or 0 )
|
||
# less_bars_quantity = difference_bars.filter(quantity__lt=F('quarantine_quantity'))
|
||
# real_less_bars_quantity = (less_bars_quantity.aggregate(total=Sum('quarantine_quantity'))['total'] or 0 ) - (less_bars_quantity.aggregate(total=Sum('quantity'))['total'] or 0 )
|
||
#
|
||
# final_real_quantity = real_greater_bars_quantity + real_less_bars_quantity if real_greater_bars_quantity > 0 else (-1 * real_greater_bars_quantity) + real_less_bars_quantity
|
||
|
||
difference_bars = kill_req.filter(
|
||
Q(accepted_real_quantity__gt=F('quarantine_quantity')) | Q(
|
||
accepted_real_quantity__lt=F('quarantine_quantity')), quarantine_quantity__gt=0)
|
||
|
||
final_real_quantity = -0
|
||
difference_bar = len(difference_bars)
|
||
greater_bars_quantity = difference_bars.filter(accepted_real_quantity__gt=F('quarantine_quantity'))
|
||
real_greater_bars_quantity = (greater_bars_quantity.aggregate(total=Sum('quarantine_quantity'))[
|
||
'total'] or 0) - (
|
||
greater_bars_quantity.aggregate(total=Sum('accepted_real_quantity'))[
|
||
'total'] or 0)
|
||
less_bars_quantity = difference_bars.filter(accepted_real_quantity__lt=F('quarantine_quantity'))
|
||
real_less_bars_quantity = (less_bars_quantity.aggregate(total=Sum('quarantine_quantity'))['total'] or 0) - (
|
||
less_bars_quantity.aggregate(total=Sum('accepted_real_quantity'))['total'] or 0)
|
||
|
||
final_real_quantity = real_greater_bars_quantity + real_less_bars_quantity if real_greater_bars_quantity > 0 else (
|
||
-1 * real_greater_bars_quantity) + real_less_bars_quantity
|
||
|
||
hasnt_code = kill_req.filter(clearance_code__isnull=True)
|
||
all_quarantine_quantity_hasnt_code = hasnt_code.aggregate(total_quantity=Sum('quantity')).get(
|
||
'total_quantity', 0)
|
||
has_code = kill_req.filter(clearance_code__isnull=False)
|
||
all_quarantine_quantity_has_code = has_code.aggregate(total_quantity=Sum('quantity')).get(
|
||
'total_quantity', 0)
|
||
has_qarantine = kill_req.filter(quarantine_quantity__isnull=False)
|
||
all_has_qarantine = has_qarantine.aggregate(total_quantity=Sum('quarantine_quantity')).get(
|
||
'total_quantity', 0)
|
||
all_age1 = sorted(all_age)
|
||
|
||
return {
|
||
'poultry_request': len(poultry_request),
|
||
'poultry_request_quantity': total_requests_quantity if total_requests_quantity != None else 0,
|
||
'poultry_request_weight': int(total_requests_weight) if total_requests_weight != None else 0,
|
||
'min_age': all_age1[0] if len(all_age1) > 0 else '-',
|
||
'max_age': all_age1[len(all_age1) - 1] if len(all_age1) > 0 else '-',
|
||
'avg_age': int((sum(all_age1)) / len(all_age1)) if len(all_age1) > 0 else '-',
|
||
'len_kill_request': len(kill_req),
|
||
'kill_request_quantity': all_quantity if all_quantity != None else 0,
|
||
'kill_request_weight': int(all_weighte),
|
||
'avg_weight': round(all_weighte / all_quantity, 1) if all_weighte > 0 and all_quantity > 0 else 0,
|
||
'len_kill_request_has_code': len(has_code),
|
||
'quantity_of_kill_request_has_code': all_quarantine_quantity_has_code if all_quarantine_quantity_has_code != None else 0,
|
||
'len_kill_request_has_quarantine': len(has_qarantine),
|
||
'quantity_of_kill_request_has_quarantine': all_has_qarantine if all_has_qarantine != None else 0,
|
||
'len_kill_request_has_not_code': len(hasnt_code),
|
||
'quantity_of_kill_request_has_not_code': all_quarantine_quantity_hasnt_code if all_quarantine_quantity_hasnt_code != None else 0,
|
||
'difference_bar': difference_bar,
|
||
'final_real_quantity': final_real_quantity,
|
||
'all_governmental_quantity': all_governmental_quantity,
|
||
'all_governmental_weight': all_governmental_weight,
|
||
'all_free_quantity': all_free_quantity,
|
||
'all_free_weight': all_free_weight,
|
||
|
||
}
|
||
|
||
def steward_ware_house_total_report_daily_broad_cast(self, steward):
|
||
number_of_steward1 = Steward.objects.filter(
|
||
pk__in=steward.values('steward')
|
||
)
|
||
|
||
steward_allocations = StewardAllocation.objects.filter(
|
||
Q(type='manual') | Q(type='auto', system_registration_code=True),
|
||
steward_ware_house__in=steward, receiver_state__in=('pending', 'accepted'),
|
||
trash=False).order_by(
|
||
'id')
|
||
|
||
guild_allocations1 = steward_allocations.filter(guilds__isnull=False, trash=False)
|
||
number_of_guild1 = guild_allocations1.values('guilds').distinct().count() if guild_allocations1 else 0
|
||
|
||
total_number_of_free_carcasses1 = steward.aggregate(total=Sum('number_of_free_carcasses'))[
|
||
'total'] or 0
|
||
total_free_weight_of_carcasses1 = steward.aggregate(total=Sum('weight_of_free_carcasses'))[
|
||
'total'] or 0
|
||
total_number_of_carcasses1 = steward.aggregate(total=Sum('number_of_carcasses'))[
|
||
'total'] or 0
|
||
total_weight_of_carcasses1 = steward.aggregate(total=Sum('weight_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
final_total_number_of_carcasses1 = \
|
||
steward.aggregate(total=Sum('real_number_of_carcasses'))[
|
||
'total'] or 0
|
||
final_total_weight_of_carcasses1 = \
|
||
steward.aggregate(total=Sum('real_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
total_remain_quantity1 = \
|
||
steward.aggregate(total=Sum('remain_total_number_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
total_remain_weight1 = \
|
||
steward.aggregate(total=Sum('remain_total_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
total_allocated_quantity1 = \
|
||
steward_allocations.aggregate(total=Sum('real_number_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
total_allocated_weight1 = \
|
||
steward_allocations.aggregate(total=Sum('real_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
total_accepted_allocated_quantity1 = \
|
||
steward_allocations.aggregate(total=Sum('receiver_real_number_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
total_accepted_allocated_weight1 = \
|
||
steward_allocations.aggregate(total=Sum('receiver_real_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
return {
|
||
"buyers": len(number_of_steward1),
|
||
"incoming_quantity_of_cold_house": 0,
|
||
"incoming_weight_of_cold_house": 0,
|
||
"total_pre_cold_quantity": 0,
|
||
"total_pre_cold_weight": 0,
|
||
"total_number_of_free_carcasses": total_number_of_free_carcasses1,
|
||
"total_free_weight_of_carcasses": total_free_weight_of_carcasses1,
|
||
"total_number_of_carcasses": total_number_of_carcasses1,
|
||
"total_weight_of_carcasses": int(total_weight_of_carcasses1),
|
||
"final_total_number_of_carcasses": final_total_number_of_carcasses1,
|
||
"final_total_weight_of_carcasses": int(final_total_weight_of_carcasses1),
|
||
"total_allocated_quantity": total_allocated_quantity1,
|
||
"total_allocated_weight": int(total_allocated_weight1),
|
||
"total_accepted_allocated_quantity": total_accepted_allocated_quantity1,
|
||
"total_accepted_allocated_weight": int(total_accepted_allocated_weight1),
|
||
"total_remain_quantity": total_remain_quantity1,
|
||
"total_remain_weight": int(total_remain_weight1),
|
||
"number_of_guild": number_of_guild1,
|
||
}
|
||
|
||
def kill_house_ware_house_total_report_daily_broad_cast(self, kill):
|
||
number_of_kill_houses = KillHouse.objects.filter(
|
||
pk__in=kill.values('kill_house')
|
||
)
|
||
|
||
steward_allocations = StewardAllocation.objects.filter(
|
||
Q(type='manual') | Q(type='auto', system_registration_code=True),
|
||
ware_house__in=kill, receiver_state__in=('pending', 'accepted'), trash=False).order_by(
|
||
'id')
|
||
|
||
guild_allocations = steward_allocations.filter(guilds__isnull=False, trash=False)
|
||
number_of_guild = guild_allocations.values('guilds').distinct().count() if guild_allocations else 0
|
||
|
||
steward_allocations_for_number_of_steward = steward_allocations.filter(steward__isnull=False, trash=False)
|
||
number_of_steward = steward_allocations_for_number_of_steward.values(
|
||
'steward').distinct().count() if steward_allocations_for_number_of_steward else 0
|
||
|
||
total_pre_cold_quantity = \
|
||
kill.aggregate(total=Sum('pre_cold_number_of_carcasses_to_ware_house'))[
|
||
'total'] or 0
|
||
total_pre_cold_weight = \
|
||
kill.aggregate(total=Sum('pre_cold_weight_of_carcasses_to_ware_house'))[
|
||
'total'] or 0
|
||
total_number_of_free_carcasses = kill.aggregate(total=Sum('number_of_free_carcasses'))[
|
||
'total'] or 0
|
||
total_free_weight_of_carcasses = kill.aggregate(total=Sum('free_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
total_number_of_carcasses = kill.aggregate(total=Sum('number_of_carcasses'))[
|
||
'total'] or 0
|
||
total_weight_of_carcasses = kill.aggregate(total=Sum('weight_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
final_total_number_of_carcasses = \
|
||
kill.aggregate(total=Sum('final_total_number_of_carcasses'))[
|
||
'total'] or 0
|
||
final_total_weight_of_carcasses = \
|
||
kill.aggregate(total=Sum('final_total_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
total_remain_quantity = \
|
||
kill.aggregate(total=Sum('remain_total_number_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
total_remain_weight = \
|
||
kill.aggregate(total=Sum('remain_total_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
total_allocated_quantity = \
|
||
steward_allocations.aggregate(total=Sum('real_number_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
total_allocated_weight = \
|
||
steward_allocations.aggregate(total=Sum('real_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
total_accepted_allocated_quantity = \
|
||
steward_allocations.aggregate(total=Sum('receiver_real_number_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
total_accepted_allocated_weight = \
|
||
steward_allocations.aggregate(total=Sum('receiver_real_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
return {
|
||
"buyers": len(number_of_kill_houses),
|
||
"incoming_quantity_of_cold_house": 0,
|
||
"incoming_weight_of_cold_house": 0,
|
||
"total_pre_cold_quantity": total_pre_cold_quantity,
|
||
"total_pre_cold_weight": int(total_pre_cold_weight),
|
||
"total_number_of_free_carcasses": total_number_of_free_carcasses,
|
||
"total_free_weight_of_carcasses": int(total_free_weight_of_carcasses),
|
||
"total_number_of_carcasses": total_number_of_carcasses,
|
||
"total_weight_of_carcasses": int(total_weight_of_carcasses),
|
||
"final_total_number_of_carcasses": final_total_number_of_carcasses,
|
||
"final_total_weight_of_carcasses": int(final_total_weight_of_carcasses),
|
||
"total_allocated_quantity": total_allocated_quantity,
|
||
"total_allocated_weight": int(total_allocated_weight),
|
||
"total_accepted_allocated_quantity": total_accepted_allocated_quantity,
|
||
"total_accepted_allocated_weight": int(total_accepted_allocated_weight),
|
||
"total_remain_quantity": total_remain_quantity,
|
||
"total_remain_weight": int(total_remain_weight),
|
||
"number_of_guild": number_of_guild,
|
||
"number_of_steward": number_of_steward,
|
||
}
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
now = datetime.now().date()
|
||
|
||
date1 = datetime.strptime(request.GET['date1'],
|
||
'%Y-%m-%d').date() if 'date1' in request.GET else now
|
||
date2 = datetime.strptime(request.GET['date2'],
|
||
'%Y-%m-%d').date() if 'date2' in request.GET else now
|
||
if 'role' in request.GET:
|
||
|
||
if request.GET['role'] == 'CityOperator':
|
||
city_operator = CityOperator.objects.get(trash=False, user__user=request.user)
|
||
filtered_kill_reqs = KillHouseRequest.objects.filter(
|
||
Q(trash=False) | Q(trash=True, clearance_code__isnull=False),
|
||
province_request__poultry_request__poultry__city_operator=city_operator.unit_name,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2).order_by(
|
||
'-create_date').select_related(
|
||
|
||
'province_request__poultry_request',
|
||
'add_car__driver',
|
||
).only('province_request', 'province_request__poultry_request',
|
||
|
||
'province_request__poultry_request__send_date',
|
||
'province_kill_request__province_request__poultry_request__Index_weight',
|
||
'clearance_code',
|
||
'quantity',
|
||
'accepted_real_weight',
|
||
'accepted_real_quantity',
|
||
'vet_state', 'vet_accepted_real_quantity',
|
||
'vet_accepted_real_weight', 'quarantine_quantity',
|
||
'province_request__poultry_request__hatching__date',
|
||
'province_request__poultry_request__send_date').values(
|
||
'province_request',
|
||
'province_request__poultry_request',
|
||
|
||
'province_request__poultry_request__send_date',
|
||
'province_kill_request__province_request__poultry_request__Index_weight',
|
||
'clearance_code',
|
||
'quantity',
|
||
'accepted_real_weight',
|
||
'accepted_real_quantity',
|
||
'vet_state',
|
||
'vet_accepted_real_quantity',
|
||
'vet_accepted_real_weight',
|
||
'quarantine_quantity',
|
||
'province_request__poultry_request__hatching__date',
|
||
'province_request__poultry_request__send_date'
|
||
)
|
||
|
||
out_true_poultry_request = PoultryRequest.objects.filter(trash=False, out=True,
|
||
out_province_request_cancel=False,
|
||
province_state='accepted',
|
||
poultry__city_operator=city_operator.unit_name,
|
||
send_date__date__gte=date1,
|
||
send_date__date__lte=date2)
|
||
|
||
elif request.GET['role'] in ['CityJahad', 'CityPoultry']:
|
||
user = SystemUserProfile.objects.get(user=request.user)
|
||
filtered_kill_reqs = KillHouseRequest.objects.filter(
|
||
Q(trash=False) | Q(trash=True, clearance_code__isnull=False),
|
||
province_request__poultry_request__poultry__user__city=user.city,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2).order_by(
|
||
'-create_date').select_related(
|
||
|
||
'province_request__poultry_request',
|
||
'add_car__driver',
|
||
).only('province_request', 'province_request__poultry_request',
|
||
|
||
'province_request__poultry_request__send_date',
|
||
'province_kill_request__province_request__poultry_request__Index_weight',
|
||
'clearance_code',
|
||
'quantity',
|
||
'accepted_real_weight',
|
||
'accepted_real_quantity',
|
||
'vet_state', 'vet_accepted_real_quantity',
|
||
'vet_accepted_real_weight', 'quarantine_quantity',
|
||
'province_request__poultry_request__hatching__date',
|
||
'province_request__poultry_request__send_date').values(
|
||
'province_request',
|
||
'province_request__poultry_request',
|
||
|
||
'province_request__poultry_request__send_date',
|
||
'province_kill_request__province_request__poultry_request__Index_weight',
|
||
'clearance_code',
|
||
'quantity',
|
||
'accepted_real_weight',
|
||
'accepted_real_quantity',
|
||
'vet_state',
|
||
'vet_accepted_real_quantity',
|
||
'vet_accepted_real_weight',
|
||
'quarantine_quantity',
|
||
'province_request__poultry_request__hatching__date',
|
||
'province_request__poultry_request__send_date'
|
||
)
|
||
|
||
out_true_poultry_request = PoultryRequest.objects.filter(trash=False, out=True,
|
||
out_province_request_cancel=False,
|
||
poultry__user__city=user.city,
|
||
province_state='accepted',
|
||
send_date__date__gte=date1,
|
||
send_date__date__lte=date2)
|
||
else:
|
||
filtered_kill_reqs = KillHouseRequest.objects.filter(
|
||
Q(trash=False) | Q(trash=True, clearance_code__isnull=False),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2).order_by(
|
||
'-create_date').select_related(
|
||
|
||
'province_request__poultry_request',
|
||
'add_car__driver',
|
||
).only('province_request', 'province_request__poultry_request',
|
||
|
||
'province_request__poultry_request__send_date',
|
||
'province_kill_request__province_request__poultry_request__Index_weight',
|
||
'clearance_code',
|
||
'quantity',
|
||
'accepted_real_weight',
|
||
'accepted_real_quantity',
|
||
'vet_state', 'vet_accepted_real_quantity',
|
||
'vet_accepted_real_weight', 'quarantine_quantity',
|
||
'province_request__poultry_request__hatching__date',
|
||
'province_request__poultry_request__send_date').values(
|
||
'province_request',
|
||
'province_request__poultry_request',
|
||
|
||
'province_request__poultry_request__send_date',
|
||
'province_kill_request__province_request__poultry_request__Index_weight',
|
||
'clearance_code',
|
||
'quantity',
|
||
'accepted_real_weight',
|
||
'accepted_real_quantity',
|
||
'vet_state',
|
||
'vet_accepted_real_quantity',
|
||
'vet_accepted_real_weight',
|
||
'quarantine_quantity',
|
||
'province_request__poultry_request__hatching__date',
|
||
'province_request__poultry_request__send_date'
|
||
)
|
||
|
||
out_true_poultry_request = PoultryRequest.objects.filter(trash=False, out=True,
|
||
out_province_request_cancel=False,
|
||
province_state='accepted',
|
||
send_date__date__gte=date1,
|
||
send_date__date__lte=date2)
|
||
else:
|
||
filtered_kill_reqs = KillHouseRequest.objects.filter(
|
||
Q(trash=False) | Q(trash=True, clearance_code__isnull=False),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2).order_by(
|
||
'-create_date').select_related(
|
||
|
||
'province_request__poultry_request',
|
||
'add_car__driver',
|
||
).only('province_request', 'province_request__poultry_request',
|
||
|
||
'province_request__poultry_request__send_date',
|
||
'province_kill_request__province_request__poultry_request__Index_weight',
|
||
'clearance_code',
|
||
'quantity',
|
||
'accepted_real_weight',
|
||
'accepted_real_quantity',
|
||
'vet_state', 'vet_accepted_real_quantity',
|
||
'vet_accepted_real_weight', 'quarantine_quantity',
|
||
'province_request__poultry_request__hatching__date',
|
||
'province_request__poultry_request__send_date').values(
|
||
'province_request',
|
||
'province_request__poultry_request',
|
||
|
||
'province_request__poultry_request__send_date',
|
||
'province_kill_request__province_request__poultry_request__Index_weight',
|
||
'clearance_code',
|
||
'quantity',
|
||
'accepted_real_weight',
|
||
'accepted_real_quantity',
|
||
'vet_state',
|
||
'vet_accepted_real_quantity',
|
||
'vet_accepted_real_weight',
|
||
'quarantine_quantity',
|
||
'province_request__poultry_request__hatching__date',
|
||
'province_request__poultry_request__send_date'
|
||
)
|
||
|
||
out_true_poultry_request = PoultryRequest.objects.filter(trash=False, out=True,
|
||
out_province_request_cancel=False,
|
||
province_state='accepted',
|
||
send_date__date__gte=date1,
|
||
send_date__date__lte=date2)
|
||
|
||
kill_req = self.get_kill_house_for_detail(filtered_kill_reqs)
|
||
|
||
filtered_kill_reqs_not_code_but_have_assigment = filtered_kill_reqs.filter(
|
||
Q(assignment_state_archive='True', vet_state='pending')
|
||
| Q(vet_state='accepted'), clearance_code__isnull=True)
|
||
|
||
bar_government = filtered_kill_reqs.filter(
|
||
province_request__poultry_request__free_sale_in_province=False)
|
||
|
||
accepted_real_quantity_bar_government = bar_government.aggregate(
|
||
total_quantity=Sum('accepted_real_quantity')).get(
|
||
'total_quantity', 0) or 0
|
||
accepted_real_wight_bar_government = bar_government.aggregate(
|
||
total_quantity=Sum('accepted_real_weight')).get(
|
||
'total_quantity', 0) or 0
|
||
|
||
bar_government_quarantine_quantity = bar_government.filter(quarantine_quantity__isnull=False)
|
||
|
||
accepted_real_quantity_bar_government_quarantine_quantity = bar_government_quarantine_quantity.aggregate(
|
||
total_quantity=Sum('accepted_real_quantity')).get(
|
||
'total_quantity') or 0
|
||
|
||
bar_free = filtered_kill_reqs.filter(province_request__poultry_request__free_sale_in_province=True)
|
||
accepted_real_quantity_bar_free = bar_free.aggregate(
|
||
total_quantity=Sum('accepted_real_quantity')).get(
|
||
'total_quantity') or 0
|
||
accepted_real_wight_bar_free = bar_free.aggregate(
|
||
total_quantity=Sum('accepted_real_weight')).get(
|
||
'total_quantity') or 0
|
||
|
||
bar_free_quarantine_quantity = bar_free.filter(quarantine_quantity__isnull=False)
|
||
|
||
accepted_real_quantity_bar_free_quarantine_quantity = bar_free_quarantine_quantity.aggregate(
|
||
total_quantity=Sum('accepted_real_quantity')).get(
|
||
'total_quantity') or 0
|
||
|
||
bar_free_has_code = len(bar_free.filter(clearance_code__isnull=False))
|
||
|
||
quantity_out_true_poultry_request = out_true_poultry_request.aggregate(
|
||
total_quantity=Sum('quantity')).get(
|
||
'total_quantity') or 0
|
||
|
||
bar_complete_with_kill_house_and_vet = filtered_kill_reqs.filter(
|
||
trash=False)
|
||
bar_complete_with_vet = filtered_kill_reqs.filter(
|
||
vet_state='accepted')
|
||
accepted_real_quantity_with_kill_house_and_vet = bar_complete_with_kill_house_and_vet.aggregate(
|
||
total_quantity=Sum('accepted_real_quantity')).get(
|
||
'total_quantity') or 0
|
||
accepted_real_wight_with_kill_house_and_vet = bar_complete_with_kill_house_and_vet.aggregate(
|
||
total_quantity=Sum('accepted_real_weight')).get(
|
||
'total_quantity') or 0
|
||
all_vet_accepted_real_quantity_with_kill_house_and_vet = bar_complete_with_vet.aggregate(
|
||
total_quantity=Sum('vet_accepted_real_quantity')).get(
|
||
'total_quantity') or 0
|
||
all_vet_accepted_real_weight_with_kill_house_and_vet = bar_complete_with_vet.aggregate(
|
||
total_quantity=Sum('vet_accepted_real_weight')).get(
|
||
'total_quantity') or 0
|
||
bar_complete_with_kill_house = filtered_kill_reqs.filter(
|
||
assignment_state_archive='True')
|
||
|
||
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
|
||
total_quantity=Sum('accepted_real_weight')).get(
|
||
'total_quantity') or 0
|
||
|
||
accepted_real_quantity_no_code = filtered_kill_reqs_not_code_but_have_assigment.aggregate(
|
||
total_quantity=Sum('accepted_real_quantity')).get(
|
||
'total_quantity') or 0
|
||
accepted_real_wight_no_code = filtered_kill_reqs_not_code_but_have_assigment.aggregate(
|
||
total_quantity=Sum('accepted_real_weight')).get(
|
||
'total_quantity') or 0
|
||
|
||
if accepted_real_wight_with_kill_house_and_vet != None:
|
||
less_25 = (accepted_real_wight_with_kill_house_and_vet * 75) / 100
|
||
else:
|
||
less_25 = 0
|
||
|
||
filtered_kill_reqs_not_assigment_all = filtered_kill_reqs.filter(
|
||
assignment_state_archive='pending', vet_state='pending')
|
||
|
||
accepted_real_quantity_not_assigment_all = filtered_kill_reqs_not_assigment_all.aggregate(
|
||
total_quantity=Sum('accepted_real_quantity')).get(
|
||
'total_quantity', 0) or 0
|
||
accepted_real_wight_not_assigment_all = filtered_kill_reqs_not_assigment_all.aggregate(
|
||
total_quantity=Sum('accepted_real_weight')).get(
|
||
'total_quantity', 0) or 0
|
||
|
||
filtered_kill_reqs_havent_kill_house = filtered_kill_reqs.filter(
|
||
assignment_state_archive='pending'
|
||
, vet_state='accepted')
|
||
|
||
accepted_real_quantity_havent_kill_house = filtered_kill_reqs_havent_kill_house.aggregate(
|
||
total_quantity=Sum('accepted_real_quantity')).get(
|
||
'total_quantity') or 0
|
||
accepted_real_wight_havent_kill_house = filtered_kill_reqs_havent_kill_house.aggregate(
|
||
total_quantity=Sum('accepted_real_weight')).get(
|
||
'total_quantity') or 0
|
||
|
||
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
|
||
total_quantity=Sum('accepted_real_quantity')).get(
|
||
'total_quantity', 0) or 0
|
||
accepted_real_weight_final = bar_complete_with_kill_house.aggregate(
|
||
total_quantity=Sum('accepted_real_weight')).get(
|
||
'total_quantity', 0) or 0
|
||
accepted_real_quantity_final1 = filtered_kill_reqs.aggregate(
|
||
total_quantity=Sum('accepted_real_quantity')).get(
|
||
'total_quantity', 0) or 0
|
||
accepted_real_weight_final1 = filtered_kill_reqs.aggregate(
|
||
total_quantity=Sum('accepted_real_weight')).get(
|
||
'total_quantity', 0) or 0
|
||
kill_house_ware_houses = KillHouseWareHouse.objects.filter(
|
||
Q(weight_of_carcasses__gt=0) | Q(free_weight_of_carcasses__gt=0) | Q(
|
||
pre_cold_weight_of_carcasses_to_ware_house__gt=0), date__date__gte=date1,
|
||
date__date__lte=date2, trash=False)
|
||
|
||
kill_house_data = self.kill_house_ware_house_total_report_daily_broad_cast(kill_house_ware_houses)
|
||
|
||
steward_ware_houses = StewardWareHouse.objects.filter(
|
||
Q(weight_of_carcasses__gt=0) | Q(weight_of_free_carcasses__gt=0), date__date__gte=date1,
|
||
date__date__lte=date2, trash=False)
|
||
|
||
steward = self.steward_ware_house_total_report_daily_broad_cast(steward_ware_houses)
|
||
return Response({
|
||
'age55_age90': self.hatching_55_90_data(request),
|
||
'kill_request': kill_req,
|
||
'free_and_government_kill_request': {
|
||
'len_government': len(bar_government),
|
||
'quantity_government': accepted_real_quantity_bar_government,
|
||
'weight_government': int(accepted_real_wight_bar_government),
|
||
'len_government_quarantine_quantity': len(bar_government_quarantine_quantity),
|
||
'real_quantity_bar_government_quarantine_quantity': accepted_real_quantity_bar_government_quarantine_quantity,
|
||
'len_free': len(bar_free),
|
||
'quantity_free': accepted_real_quantity_bar_free,
|
||
'weight_free': accepted_real_wight_bar_free,
|
||
'len_free_quarantine_quantity': len(bar_free_quarantine_quantity),
|
||
'real_quantity_bar_free_quarantine_quantity': accepted_real_quantity_bar_free_quarantine_quantity,
|
||
'len_free_has_code': bar_free_has_code,
|
||
'len_out_kill_request': len(out_true_poultry_request),
|
||
'quantity_out_kill_request': quantity_out_true_poultry_request,
|
||
},
|
||
'complete_kill_request': {
|
||
'len_complete_with_kill_house_and_vet': len(bar_complete_with_kill_house_and_vet),
|
||
'quantity_with_kill_house_and_vet': accepted_real_quantity_with_kill_house_and_vet,
|
||
'weight_with_kill_house_and_vet': int(accepted_real_wight_with_kill_house_and_vet),
|
||
"avg_weight": round(
|
||
accepted_real_wight_with_kill_house_and_vet / accepted_real_quantity_with_kill_house_and_vet,
|
||
1) if accepted_real_wight_with_kill_house_and_vet > 0 else 0,
|
||
'less_25': int(less_25),
|
||
'len_complete_with_vet': len(bar_complete_with_vet),
|
||
'quantity_complete_with_vet': all_vet_accepted_real_quantity_with_kill_house_and_vet,
|
||
'weight_complete_with_vet': int(all_vet_accepted_real_weight_with_kill_house_and_vet),
|
||
'len_complete_with_kill_house': len(bar_complete_with_kill_house),
|
||
'quantity_final_kill_house': accepted_real_quantity_final,
|
||
'weight_final_kill_house': int(accepted_real_wight_final),
|
||
'len_kill_reqs_has_not_code': len(filtered_kill_reqs_not_code_but_have_assigment),
|
||
'quantity_kill_reqs_has_not_code': accepted_real_quantity_no_code,
|
||
'weight_kill_reqs_has_not_code': int(accepted_real_wight_no_code),
|
||
},
|
||
'kill_request_has_not_assigment': {
|
||
'len_kill_reqs_not_assigment': len(filtered_kill_reqs_not_assigment_all),
|
||
'quantity_kill_reqs_not_assigment': accepted_real_quantity_not_assigment_all,
|
||
'weight_kill_reqs_not_assigment': int(accepted_real_wight_not_assigment_all),
|
||
'len_kill_request_has_not_complete': len(filtered_kill_reqs_havent_kill_house),
|
||
'quantity_kill_request_has_not_complete': accepted_real_quantity_havent_kill_house,
|
||
'weight_kill_request_has_not_complete': int(accepted_real_wight_havent_kill_house),
|
||
},
|
||
'final_quantity_and_weight': {
|
||
'final_quantity': accepted_real_quantity_final1,
|
||
'final_weight': int(accepted_real_weight_final1),
|
||
},
|
||
'kill_house_ware_house_total_report_daily_broad_cast': kill_house_data,
|
||
'steward_ware_house_total_report_daily_broad_cast': steward
|
||
|
||
})
|
||
|
||
|
||
class ComprehensiveReportOfTheSlaughterhouseViewSet(viewsets.ViewSet):
|
||
permission_classes = [AllowAny]
|
||
|
||
def all_kill_request(self, date1, date2):
|
||
filtered_kill_reqs = KillHouseRequest.objects.filter(trash=False,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
).order_by(
|
||
'-create_date').select_related(
|
||
'province_request__poultry_request__hatching', 'province_request__poultry_request').only(
|
||
'province_kill_request__province_request__poultry_request__Index_weight',
|
||
'quantity',
|
||
'accepted_real_weight',
|
||
'accepted_real_quantity',
|
||
'ware_house_accepted_real_weight',
|
||
'ware_house_accepted_real_quantity')
|
||
|
||
all_kill_req_quantity = filtered_kill_reqs.aggregate(
|
||
total_quantity=Sum('quantity')).get(
|
||
'total_quantity') or 0
|
||
|
||
weight = filtered_kill_reqs.aggregate(
|
||
total_quantity=Sum(
|
||
F('quantity') * F('province_kill_request__province_request__poultry_request__Index_weight')))[
|
||
'total_quantity'] or 0
|
||
|
||
all_kill_req_quantity_reciver = filtered_kill_reqs.aggregate(
|
||
total_quantity=Sum('accepted_real_quantity')).get(
|
||
'total_quantity') or 0
|
||
all_kill_req_weight_reciver = filtered_kill_reqs.aggregate(
|
||
total_quantity=Sum('accepted_real_weight')).get(
|
||
'total_quantity') or 0
|
||
all_ware_house_accepted_real_quantity = filtered_kill_reqs.aggregate(
|
||
total_quantity=Sum('ware_house_accepted_real_quantity')).get(
|
||
'total_quantity') or 0
|
||
all_ware_house_accepted_real_weight = filtered_kill_reqs.aggregate(
|
||
total_quantity=Sum('ware_house_accepted_real_weight')).get(
|
||
'total_quantity') or 0
|
||
|
||
return {
|
||
"quantity_of_create_bar": all_kill_req_quantity,
|
||
"weight_of_create_bar": int(weight),
|
||
"quantity_of_receive_bar": all_kill_req_quantity_reciver,
|
||
"weight_of_receive_bar": int(all_kill_req_weight_reciver),
|
||
"weight_with_twenty_five_percent_receive": int(
|
||
(all_kill_req_weight_reciver * 75) / 100) if all_kill_req_weight_reciver > 0 else 0,
|
||
"quantity_warehouse": all_ware_house_accepted_real_quantity,
|
||
"weight_warehouse": int(all_ware_house_accepted_real_weight),
|
||
"quantity_percent_warehouse": int(
|
||
all_ware_house_accepted_real_quantity * 100 / all_kill_req_quantity_reciver) if all_ware_house_accepted_real_quantity > 0 else 0,
|
||
"weight_percent_warehouse": int(
|
||
all_ware_house_accepted_real_weight * 100 / all_kill_req_weight_reciver) if all_ware_house_accepted_real_weight > 0 else 0,
|
||
"quantity_percent_receive": int(
|
||
all_kill_req_quantity_reciver * 100 / all_kill_req_quantity) if all_kill_req_quantity_reciver > 0 else 0,
|
||
"weight_percent_receive": int(
|
||
(all_kill_req_weight_reciver * 100) / weight) if all_kill_req_weight_reciver > 0 else 0
|
||
}
|
||
|
||
def general_broadcast_information(self, tomorrow_date1, tomorrow_date2, filtered_kill_reqs, kill_free_info):
|
||
|
||
number_of_kill_house = filtered_kill_reqs.values(
|
||
'killhouse_user').distinct().count() if filtered_kill_reqs else 0
|
||
|
||
all_quantity_out_false = filtered_kill_reqs.aggregate(
|
||
total_quantity=Sum('quantity')).get(
|
||
'total_quantity') or 0
|
||
|
||
weight = filtered_kill_reqs.aggregate(
|
||
total_quantity=Sum(
|
||
F('quantity') * F('province_kill_request__province_request__poultry_request__Index_weight')))[
|
||
'total_quantity'] or 0
|
||
all_quantity_out_true = kill_free_info.aggregate(
|
||
total_quantity=Sum('number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
all_weight_out_true = kill_free_info.aggregate(
|
||
total_quantity=Sum('weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
|
||
kill_house_ware_houses = KillHouseWareHouse.objects.filter(
|
||
Q(weight_of_carcasses__gt=0) | Q(free_weight_of_carcasses__gt=0) | Q(
|
||
pre_cold_weight_of_carcasses_to_ware_house__gt=0), date__date__gte=tomorrow_date1,
|
||
date__date__lte=tomorrow_date2, trash=False)
|
||
final_total_number_of_carcasses = \
|
||
kill_house_ware_houses.aggregate(total=Sum('final_total_number_of_carcasses'))[
|
||
'total'] or 0
|
||
final_total_weight_of_carcasses = \
|
||
kill_house_ware_houses.aggregate(total=Sum('final_total_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
steward_allocations = StewardAllocation.objects.filter(
|
||
Q(type='manual') | Q(type='auto', system_registration_code=True),
|
||
ware_house__in=kill_house_ware_houses, receiver_state__in=('pending', 'accepted'),
|
||
trash=False).order_by(
|
||
'id')
|
||
total_allocated_quantity = \
|
||
steward_allocations.aggregate(total=Sum('real_number_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
total_allocated_weight = \
|
||
steward_allocations.aggregate(total=Sum('real_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
total_accepted_allocated_quantity = \
|
||
steward_allocations.aggregate(total=Sum('receiver_real_number_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
total_accepted_allocated_weight = \
|
||
steward_allocations.aggregate(total=Sum('receiver_real_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
total_remain_quantity = \
|
||
kill_house_ware_houses.aggregate(total=Sum('remain_total_number_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
total_remain_weight = \
|
||
kill_house_ware_houses.aggregate(total=Sum('remain_total_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
steward_allocations_for_number_of_steward = steward_allocations.filter(steward__isnull=False,
|
||
trash=False)
|
||
number_of_steward = steward_allocations_for_number_of_steward.values(
|
||
'steward').distinct().count() if steward_allocations_for_number_of_steward else 0
|
||
|
||
guild_allocations = steward_allocations.filter(guilds__isnull=False, trash=False)
|
||
number_of_guild = guild_allocations.values('guilds').distinct().count() if guild_allocations else 0
|
||
|
||
return {
|
||
"number_of_buyer": number_of_kill_house,
|
||
"quantity_of_kill_request_in_province": all_quantity_out_false,
|
||
"weight_of_kill_request_in_province": int(weight),
|
||
"quantity_of_kill_request_out_province": all_quantity_out_true,
|
||
"weight_of_kill_request_out_province": int(all_weight_out_true),
|
||
"quantity_carcasses": final_total_number_of_carcasses,
|
||
"weight_carcasses": int(final_total_weight_of_carcasses),
|
||
"allocated_quantity": total_allocated_quantity,
|
||
"allocated_weight": int(total_allocated_weight),
|
||
"accepted_allocated_quantity": total_accepted_allocated_quantity,
|
||
"accepted_allocated_weight": int(total_accepted_allocated_weight),
|
||
"remain_quantity": total_remain_quantity,
|
||
"remain_weight": int(total_remain_weight),
|
||
"percent_warehouse": int((
|
||
total_allocated_quantity * 100) / final_total_number_of_carcasses) if total_allocated_quantity and final_total_number_of_carcasses > 0 else 0,
|
||
"number_of_stewards": number_of_steward,
|
||
"number_of_giulds": number_of_guild,
|
||
"date1": tomorrow_date1,
|
||
"date2": tomorrow_date2,
|
||
|
||
}
|
||
|
||
def kill_request_and_broadcast(self, tomorrow_date1, tomorrow_date2, filtered_kill_reqs, kill_free_info):
|
||
list1 = []
|
||
kill_houses = KillHouse.objects.filter(trash=False).select_related('kill_house_operator__user__city').exclude(
|
||
out_province=True)
|
||
for kill_house in kill_houses:
|
||
kill_free_information = kill_free_info.filter(kill_house=kill_house)
|
||
tomorrow_kill_request = filtered_kill_reqs.filter(killhouse_user=kill_house)
|
||
if tomorrow_kill_request:
|
||
tomorrow_kill_request_not_assigment = tomorrow_kill_request.filter(assignment_state_archive='pending',
|
||
vet_state='accepted')
|
||
all_kill_req_quantity = tomorrow_kill_request.aggregate(
|
||
total_quantity=Sum('quantity')).get(
|
||
'total_quantity') or 0
|
||
|
||
all_kill_req_quantity_reciver = tomorrow_kill_request.aggregate(
|
||
total_quantity=Sum('accepted_real_quantity')).get(
|
||
'total_quantity') or 0
|
||
all_kill_req_weight_reciver = tomorrow_kill_request.aggregate(
|
||
total_quantity=Sum('accepted_real_weight')).get(
|
||
'total_quantity') or 0
|
||
all_ware_house_accepted_real_quantity = tomorrow_kill_request.aggregate(
|
||
total_quantity=Sum('ware_house_accepted_real_quantity')).get(
|
||
'total_quantity') or 0
|
||
|
||
weight = tomorrow_kill_request.aggregate(
|
||
total_quantity=Sum(
|
||
F('quantity') * F('province_kill_request__province_request__poultry_request__Index_weight')))[
|
||
'total_quantity'] or 0
|
||
kill_house_ware_houses = KillHouseWareHouse.objects.filter(
|
||
Q(weight_of_carcasses__gt=0) | Q(free_weight_of_carcasses__gt=0) | Q(
|
||
pre_cold_weight_of_carcasses_to_ware_house__gt=0), date__date__gte=tomorrow_date1,
|
||
date__date__lte=tomorrow_date2, kill_house=kill_house, trash=False)
|
||
|
||
steward_allocations = StewardAllocation.objects.filter(
|
||
Q(type='manual') | Q(type='auto', system_registration_code=True),
|
||
ware_house__in=kill_house_ware_houses, receiver_state__in=('pending', 'accepted'),
|
||
trash=False).order_by(
|
||
'id')
|
||
total_allocated_quantity = \
|
||
steward_allocations.aggregate(total=Sum('real_number_of_carcasses'))[
|
||
'total'] or 0
|
||
total_allocated_weight = \
|
||
steward_allocations.aggregate(total=Sum('real_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
total_accepted_allocated_quantity = \
|
||
steward_allocations.aggregate(total=Sum('receiver_real_number_of_carcasses'))[
|
||
'total'] or 0
|
||
total_accepted_allocated_weight = \
|
||
steward_allocations.aggregate(total=Sum('receiver_real_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
total_remain_quantity = \
|
||
kill_house_ware_houses.aggregate(total=Sum('remain_total_number_of_carcasses'))[
|
||
'total'] or 0
|
||
total_remain_weight = \
|
||
kill_house_ware_houses.aggregate(total=Sum('remain_total_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
final_total_number_of_carcasses = \
|
||
kill_house_ware_houses.aggregate(total=Sum('final_total_number_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
final_total_weight_of_carcasses = \
|
||
kill_house_ware_houses.aggregate(total=Sum('final_total_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
steward_allocations_for_number_of_steward = steward_allocations.filter(steward__isnull=False,
|
||
trash=False)
|
||
number_of_steward = steward_allocations_for_number_of_steward.values(
|
||
'steward').distinct().count() if steward_allocations_for_number_of_steward else 0
|
||
|
||
guild_allocations = steward_allocations.filter(guilds__isnull=False, trash=False)
|
||
number_of_guild = guild_allocations.values('guilds').distinct().count() if guild_allocations else 0
|
||
|
||
all_kill_req_quantity_not_assigment = tomorrow_kill_request_not_assigment.aggregate(
|
||
total_quantity=Sum('accepted_real_quantity')).get(
|
||
'total_quantity') or 0
|
||
all_kill_req_weight_not_assigment = tomorrow_kill_request_not_assigment.aggregate(
|
||
total_quantity=Sum('accepted_real_weight')).get(
|
||
'total_quantity') or 0
|
||
all_quantity_out_true = kill_free_information.aggregate(
|
||
total_quantity=Sum('number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
all_weight_out_true = kill_free_information.aggregate(
|
||
total_quantity=Sum('weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
twenty_five_percent = (int(all_kill_req_weight_reciver) * 75) / 100
|
||
reciver_percent = int(
|
||
int(all_kill_req_quantity_reciver) * 100) / all_kill_req_quantity if all_kill_req_quantity_reciver > 0 else 0
|
||
lashe_25_percent = int(
|
||
final_total_number_of_carcasses * 100 / all_kill_req_quantity_reciver) if final_total_number_of_carcasses > 0 else 0
|
||
weight_lashe_25_percent = int(
|
||
final_total_weight_of_carcasses * 100 / all_kill_req_weight_reciver) if final_total_weight_of_carcasses > 0 else 0
|
||
remain_percent = int((
|
||
total_remain_quantity * 100) / all_ware_house_accepted_real_quantity) if total_remain_quantity and all_ware_house_accepted_real_quantity > 0 else 0
|
||
all_num = number_of_steward + number_of_guild
|
||
hasnt_code = len(
|
||
tomorrow_kill_request.filter(assignment_state_archive='True', clearance_code__isnull=True))
|
||
percent_hasnt_code = round(hasnt_code * 100 / len(tomorrow_kill_request)) if len(
|
||
tomorrow_kill_request) > 0 else 0
|
||
has_code = len(
|
||
tomorrow_kill_request.filter(assignment_state_archive='pending', clearance_code__isnull=False))
|
||
percent_has_code = round(has_code * 100 / len(tomorrow_kill_request)) if len(
|
||
tomorrow_kill_request) > 0 else 0
|
||
|
||
has_assignment = len(
|
||
tomorrow_kill_request.filter(assignment_state_archive='True'))
|
||
percent_has_assignment = round(has_assignment * 100 / len(tomorrow_kill_request)) if len(
|
||
tomorrow_kill_request) > 0 else 0
|
||
hasnt_assignment = len(
|
||
tomorrow_kill_request.filter(assignment_state_archive='pending'))
|
||
percent_hasnt_assignment = round(hasnt_assignment * 100 / len(tomorrow_kill_request)) if len(
|
||
tomorrow_kill_request) > 0 else 0
|
||
accepeted_bar = len(
|
||
tomorrow_kill_request.filter(bar_document_status__title='بدون مشکل'))
|
||
percent_accepeted_bar = round(accepeted_bar * 100 / has_assignment) if has_assignment > 0 else 0
|
||
diffrent_bar = len(
|
||
tomorrow_kill_request.filter(bar_document_status__title='مغایرت دارد'))
|
||
percent_diffrent_bar = round(diffrent_bar * 100 / has_assignment) if has_assignment > 0 else 0
|
||
no_quality = len(
|
||
tomorrow_kill_request.filter(bar_document_status__title='فاقد کیفیت'))
|
||
percent_no_quality = round(no_quality * 100 / has_assignment) if has_assignment > 0 else 0
|
||
low_quality = len(
|
||
tomorrow_kill_request.filter(bar_document_status__title='کیفیت پایین'))
|
||
percent_low_quality = round(low_quality * 100 / has_assignment) if has_assignment > 0 else 0
|
||
dict_1 = {
|
||
"name": kill_house.name,
|
||
"city": kill_house.kill_house_operator.user.city.name,
|
||
"kill_req_quantity": all_kill_req_quantity,
|
||
"kill_req_weight": int(weight),
|
||
"quantity_receiver": all_kill_req_quantity_reciver,
|
||
"weight_receiver": int(all_kill_req_weight_reciver),
|
||
"twenty_five_percent_weight": int(twenty_five_percent),
|
||
"receiver_percent": reciver_percent,
|
||
"quantity_of_carcasses": final_total_number_of_carcasses,
|
||
"weight_of_carcasses": int(final_total_weight_of_carcasses),
|
||
"quantity_of_lashe_percent": lashe_25_percent,
|
||
"weight_of_lashe_percent": int(weight_lashe_25_percent),
|
||
"quantity_out_province": all_quantity_out_true,
|
||
"weight_out_province": int(all_weight_out_true),
|
||
"total_number_of_carcasses": final_total_number_of_carcasses,
|
||
"total_weight_of_carcasses": int(final_total_weight_of_carcasses),
|
||
"allocated_quantity": total_allocated_quantity,
|
||
"allocated_weight": int(total_allocated_weight),
|
||
"accepted_allocated_quantity": total_accepted_allocated_quantity,
|
||
"accepted_allocated_weight": int(total_accepted_allocated_weight),
|
||
"remain_quantity": total_remain_quantity,
|
||
"remain_weight": int(total_remain_weight),
|
||
"remain_percent": remain_percent,
|
||
"steward_and_guild": all_num,
|
||
"len_kill_req_not_complete": len(tomorrow_kill_request_not_assigment),
|
||
"quantity_kill_req_not_complete": all_kill_req_quantity_not_assigment,
|
||
"weight_kill_req_not_complete": int(all_kill_req_weight_not_assigment),
|
||
"len_hasnt_code": hasnt_code,
|
||
"percent_hasnt_code": percent_hasnt_code,
|
||
"len_has_code": has_code,
|
||
"percent_has_code": percent_has_code,
|
||
"has_assignment": has_assignment,
|
||
"percent_has_assignment": percent_has_assignment,
|
||
"accepeted_bar": accepeted_bar,
|
||
"percent_accepeted_bar": percent_accepeted_bar,
|
||
"diffrent_bar": diffrent_bar,
|
||
"percent_diffrent_bar": percent_diffrent_bar,
|
||
"no_quality": no_quality,
|
||
"percent_no_quality": percent_no_quality,
|
||
"low_quality": low_quality,
|
||
"percent_low_quality": percent_low_quality,
|
||
"hasnt_assignment": hasnt_assignment,
|
||
"percent_hasnt_assignment": percent_hasnt_assignment,
|
||
|
||
}
|
||
list1.append(dict_1)
|
||
return list1
|
||
|
||
def list(self, request):
|
||
now = datetime.now().date()
|
||
date1 = datetime.strptime(str(request.GET['date1']),
|
||
'%Y-%m-%d').date() if 'date1' in request.GET else now
|
||
date2 = datetime.strptime(str(request.GET['date2']),
|
||
'%Y-%m-%d').date() if 'date2' in request.GET else now
|
||
|
||
tomorrow_date1 = date1 + timedelta(days=1)
|
||
tomorrow_date2 = date2 + timedelta(days=1)
|
||
|
||
filtered_kill_reqs = KillHouseRequest.objects.filter(trash=False,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
).order_by(
|
||
'-create_date').select_related(
|
||
'killhouse_user', 'province_request__poultry_request',
|
||
'province_request__poultry_request__poultry').only(
|
||
'killhouse_user',
|
||
'kill_request__slaughter_house',
|
||
'kill_request__slaughter_house__name',
|
||
'province_request__poultry_request__poultry',
|
||
'province_request__poultry_request__send_date',
|
||
'province_kill_request__province_request__poultry_request__Index_weight',
|
||
'quantity',
|
||
'accepted_real_weight',
|
||
'accepted_real_quantity',
|
||
'province_request__poultry_request__send_date',
|
||
'province_request__poultry_request__hatching__date',
|
||
'ware_house_accepted_real_weight',
|
||
'ware_house_accepted_real_quantity',
|
||
'killhouse_user__kill_house_operator__user__city__name')
|
||
|
||
kill_free_info = KillHouseFreeBarInformation.objects.filter(trash=False, date__date__gte=tomorrow_date1,
|
||
date__date__lte=tomorrow_date2).only(
|
||
'weight_of_carcasses', 'number_of_carcasses')
|
||
kill_request = self.all_kill_request(date1, date2)
|
||
general_broadcast_informations = self.general_broadcast_information(tomorrow_date1, tomorrow_date2,
|
||
filtered_kill_reqs, kill_free_info)
|
||
kill_request_and_broadcasts = self.kill_request_and_broadcast(tomorrow_date1, tomorrow_date2,
|
||
filtered_kill_reqs, kill_free_info)
|
||
|
||
return Response({
|
||
"all_kill_request": kill_request,
|
||
"general_broadcast_informations": general_broadcast_informations,
|
||
"kill_request_and_broadcast": kill_request_and_broadcasts
|
||
}
|
||
)
|
||
|
||
|
||
class DetailOfKillingDashboardView(viewsets.ViewSet):
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = DashboardEnterLoadInformationFilterSet
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
now = datetime.now().date()
|
||
|
||
date1 = datetime.strptime(request.GET['date1'],
|
||
'%Y-%m-%d').date() if 'date1' in request.GET else now
|
||
date2 = datetime.strptime(request.GET['date2'],
|
||
'%Y-%m-%d').date() if 'date2' in request.GET else now
|
||
value = request.GET.get('value')
|
||
search = request.GET.get('search')
|
||
if request.GET.get('type') == 'assignment':
|
||
filtered_kill_request = KillHouseRequest.objects.filter(
|
||
trash=False,
|
||
calculate_status=True,
|
||
non_receipt=False,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2, assignment_state_archive='True').order_by(
|
||
'-create_date').select_related(
|
||
'killhouse_user',
|
||
'province_request__poultry_request',
|
||
'add_car__driver',
|
||
).only('province_request', 'province_request__poultry_request',
|
||
|
||
'province_request__poultry_request__send_date',
|
||
'province_kill_request__province_request__poultry_request__Index_weight',
|
||
'clearance_code',
|
||
'quantity',
|
||
'accepted_real_weight',
|
||
'accepted_real_quantity',
|
||
'vet_state', 'vet_accepted_real_quantity',
|
||
'vet_accepted_real_weight', 'quarantine_quantity',
|
||
'province_request__poultry_request__hatching__date',
|
||
'province_request__poultry_request__send_date').values(
|
||
'province_request',
|
||
'province_request__poultry_request',
|
||
|
||
'province_request__poultry_request__send_date',
|
||
'province_kill_request__province_request__poultry_request__Index_weight',
|
||
'clearance_code',
|
||
'quantity',
|
||
'accepted_real_weight',
|
||
'accepted_real_quantity',
|
||
'vet_state',
|
||
'vet_accepted_real_quantity',
|
||
'vet_accepted_real_weight',
|
||
'quarantine_quantity',
|
||
'province_request__poultry_request__hatching__date',
|
||
'province_request__poultry_request__send_date'
|
||
)
|
||
else:
|
||
|
||
filtered_kill_request = KillHouseRequest.objects.filter(
|
||
trash=False,
|
||
calculate_status=True,
|
||
non_receipt=False,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2).order_by(
|
||
'-create_date').select_related(
|
||
'killhouse_user',
|
||
'province_request__poultry_request',
|
||
'add_car__driver',
|
||
).only('province_request', 'province_request__poultry_request',
|
||
|
||
'province_request__poultry_request__send_date',
|
||
'province_kill_request__province_request__poultry_request__Index_weight',
|
||
'clearance_code',
|
||
'quantity',
|
||
'accepted_real_weight',
|
||
'accepted_real_quantity',
|
||
'vet_state', 'vet_accepted_real_quantity',
|
||
'vet_accepted_real_weight', 'quarantine_quantity',
|
||
'province_request__poultry_request__hatching__date',
|
||
'province_request__poultry_request__send_date').values(
|
||
'province_request',
|
||
'province_request__poultry_request',
|
||
|
||
'province_request__poultry_request__send_date',
|
||
'province_kill_request__province_request__poultry_request__Index_weight',
|
||
'clearance_code',
|
||
'quantity',
|
||
'accepted_real_weight',
|
||
'accepted_real_quantity',
|
||
'vet_state',
|
||
'vet_accepted_real_quantity',
|
||
'vet_accepted_real_weight',
|
||
'quarantine_quantity',
|
||
'province_request__poultry_request__hatching__date',
|
||
'province_request__poultry_request__send_date'
|
||
)
|
||
|
||
user = SystemUserProfile.objects.get(user=request.user)
|
||
if request.GET['role'] == 'CityOperator':
|
||
city_operator = CityOperator.objects.get(trash=False, user=user)
|
||
filtered_kill_request = filtered_kill_request.filter(
|
||
province_request__poultry_request__poultry__city_operator=city_operator.unit_name)
|
||
elif request.GET['role'] == 'VetFarm':
|
||
vet = Vet.objects.filter(user=user, trash=False).last()
|
||
if vet:
|
||
poultry_set = set()
|
||
vet_farms = VetFarm.objects.filter(vet=vet, trash=False)
|
||
for vet_farm in vet_farms:
|
||
poultry_set.add(vet_farm.poultry)
|
||
poultries = list(poultry_set)
|
||
filtered_kill_request = filtered_kill_request.filter(
|
||
province_request__poultry_request__poultry__in=poultries
|
||
)
|
||
|
||
|
||
elif request.GET['role'] in ['CityJahad', 'CityPoultry']:
|
||
filtered_kill_request = filtered_kill_request.filter(
|
||
province_request__poultry_request__poultry__address__city=user.city)
|
||
elif request.GET['role'] == 'KillHouse':
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).first()
|
||
|
||
filtered_kill_request = filtered_kill_request.filter(
|
||
killhouse_user=kill_house)
|
||
elif request.GET['role'] == 'KillHouseVet':
|
||
kill_house = KillHouseVet.objects.filter(vet__user=user, trash=False).values_list('kill_house')
|
||
filtered_kill_request = filtered_kill_request.filter(
|
||
(Q(killhouse_user__id__in=kill_house) | Q(kill_request__slaughter_house__id__in=kill_house)))
|
||
else:
|
||
if request.GET.get('without_quarantine_code_state') == 'true':
|
||
filtered_kill_request = filtered_kill_request.filter(
|
||
clearance_code__isnull=False,
|
||
quarantine_quantity__isnull=True,
|
||
quarantine_code_state__isnull=True,
|
||
)
|
||
elif request.GET.get('without_bar_document') == "true":
|
||
filtered_kill_request = filtered_kill_request.filter(
|
||
assignment_state_archive='True',
|
||
bar_document_status__isnull=True,
|
||
)
|
||
else:
|
||
filtered_kill_request = filtered_kill_request
|
||
|
||
if value and search == 'filter':
|
||
if value != 'undefined' and value.strip():
|
||
filtered_kill_request = filtered_kill_request.filter(
|
||
build_query(self.filterset_class, value)
|
||
)
|
||
|
||
ware_house_bars = filtered_kill_request.filter(ware_house_confirmation=True)
|
||
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
|
||
'total'] or 0
|
||
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
|
||
'total'] or 0
|
||
|
||
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
|
||
'total'] or 0
|
||
bar_complete_with_kill_house = filtered_kill_request.filter(
|
||
assignment_state_archive='True')
|
||
|
||
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
|
||
total_quantity=Sum('accepted_real_weight')).get(
|
||
'total_quantity') or 0
|
||
|
||
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
|
||
total_quantity=Sum('accepted_real_quantity')).get(
|
||
'total_quantity', 0) or 0
|
||
detail_of_killing = DetailOfKillingViewSet()
|
||
bars = dict(list(detail_of_killing.get_kill_house_for_detail(filtered_kill_request).items())[3:])
|
||
dict1 = {**bars,
|
||
'len_complete_with_vet': 0,
|
||
'quantity_complete_with_vet': 0,
|
||
'weight_complete_with_vet': 0,
|
||
'ware_house_bars': len(ware_house_bars),
|
||
'ware_house_bars_quantity': ware_house_bars_quantity,
|
||
'ware_house_bars_weight': ware_house_bars_weight,
|
||
'ware_house_bars_weight_lose': ware_house_bars_weight_lose / len(
|
||
ware_house_bars) if ware_house_bars else 0,
|
||
'len_complete_with_kill_house': len(bar_complete_with_kill_house),
|
||
'quantity_final_kill_house': accepted_real_quantity_final,
|
||
'weight_final_kill_house': int(accepted_real_wight_final),
|
||
|
||
}
|
||
return Response(dict1)
|
||
|
||
|
||
class ParentCompanyDetailOfKillingDashboardView(viewsets.ViewSet):
|
||
permission_classes = [AllowAny]
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = DashboardEnterLoadInformationFilterSet
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
now = datetime.now().date()
|
||
|
||
date1 = datetime.strptime(request.GET['date1'],
|
||
'%Y-%m-%d').date() if 'date1' in request.GET else now
|
||
date2 = datetime.strptime(request.GET['date2'],
|
||
'%Y-%m-%d').date() if 'date2' in request.GET else now
|
||
value = request.GET.get('value')
|
||
search = request.GET.get('search')
|
||
if request.GET.get('type') == 'assignment':
|
||
filtered_kill_request = KillHouseRequest.objects.filter(
|
||
trash=False,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2, assignment_state_archive='True').order_by(
|
||
'-create_date').select_related(
|
||
'killhouse_user',
|
||
'province_request__poultry_request',
|
||
'add_car__driver',
|
||
).only('province_request', 'province_request__poultry_request',
|
||
|
||
'province_request__poultry_request__send_date',
|
||
'province_kill_request__province_request__poultry_request__Index_weight',
|
||
'clearance_code',
|
||
'quantity',
|
||
'accepted_real_weight',
|
||
'accepted_real_quantity',
|
||
'vet_state', 'vet_accepted_real_quantity',
|
||
'vet_accepted_real_weight', 'quarantine_quantity',
|
||
'province_request__poultry_request__hatching__date',
|
||
'province_request__poultry_request__send_date').values(
|
||
'province_request',
|
||
'province_request__poultry_request',
|
||
|
||
'province_request__poultry_request__send_date',
|
||
'province_kill_request__province_request__poultry_request__Index_weight',
|
||
'clearance_code',
|
||
'quantity',
|
||
'accepted_real_weight',
|
||
'accepted_real_quantity',
|
||
'vet_state',
|
||
'vet_accepted_real_quantity',
|
||
'vet_accepted_real_weight',
|
||
'quarantine_quantity',
|
||
'province_request__poultry_request__hatching__date',
|
||
'province_request__poultry_request__send_date'
|
||
)
|
||
else:
|
||
|
||
filtered_kill_request = KillHouseRequest.objects.filter(
|
||
trash=False,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2).order_by(
|
||
'-create_date').select_related(
|
||
'killhouse_user',
|
||
'province_request__poultry_request',
|
||
'add_car__driver',
|
||
).only('province_request', 'province_request__poultry_request',
|
||
|
||
'province_request__poultry_request__send_date',
|
||
'province_kill_request__province_request__poultry_request__Index_weight',
|
||
'clearance_code',
|
||
'quantity',
|
||
'accepted_real_weight',
|
||
'accepted_real_quantity',
|
||
'vet_state', 'vet_accepted_real_quantity',
|
||
'vet_accepted_real_weight', 'quarantine_quantity',
|
||
'province_request__poultry_request__hatching__date',
|
||
'province_request__poultry_request__send_date').values(
|
||
'province_request',
|
||
'province_request__poultry_request',
|
||
|
||
'province_request__poultry_request__send_date',
|
||
'province_kill_request__province_request__poultry_request__Index_weight',
|
||
'clearance_code',
|
||
'quantity',
|
||
'accepted_real_weight',
|
||
'accepted_real_quantity',
|
||
'vet_state',
|
||
'vet_accepted_real_quantity',
|
||
'vet_accepted_real_weight',
|
||
'quarantine_quantity',
|
||
'province_request__poultry_request__hatching__date',
|
||
'province_request__poultry_request__send_date'
|
||
)
|
||
|
||
if request.GET.get('without_quarantine_code_state') == 'true':
|
||
filtered_kill_request = filtered_kill_request.filter(
|
||
clearance_code__isnull=False,
|
||
quarantine_quantity__isnull=True,
|
||
quarantine_code_state__isnull=True,
|
||
)
|
||
elif request.GET.get('without_bar_document') == "true":
|
||
filtered_kill_request = filtered_kill_request.filter(
|
||
assignment_state_archive='True',
|
||
bar_document_status__isnull=True,
|
||
)
|
||
else:
|
||
filtered_kill_request = filtered_kill_request
|
||
|
||
if value and search == 'filter':
|
||
if value != 'undefined' and value.strip():
|
||
filtered_kill_request = filtered_kill_request.filter(
|
||
build_query(self.filterset_class, value)
|
||
)
|
||
|
||
ware_house_bars = filtered_kill_request.filter(ware_house_confirmation=True)
|
||
ware_house_bars_quantity = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_quantity'))[
|
||
'total'] or 0
|
||
ware_house_bars_weight = ware_house_bars.aggregate(total=Sum('ware_house_accepted_real_weight'))[
|
||
'total'] or 0
|
||
|
||
ware_house_bars_weight_lose = ware_house_bars.aggregate(total=Sum('weight_loss'))[
|
||
'total'] or 0
|
||
bar_complete_with_kill_house = filtered_kill_request.filter(
|
||
assignment_state_archive='True')
|
||
|
||
accepted_real_wight_final = bar_complete_with_kill_house.aggregate(
|
||
total_quantity=Sum('accepted_real_weight')).get(
|
||
'total_quantity') or 0
|
||
|
||
accepted_real_quantity_final = bar_complete_with_kill_house.aggregate(
|
||
total_quantity=Sum('accepted_real_quantity')).get(
|
||
'total_quantity', 0) or 0
|
||
|
||
detail_of_killing = DetailOfKillingViewSet()
|
||
bars = dict(list(detail_of_killing.get_kill_house_for_detail(filtered_kill_request).items())[3:])
|
||
dict1 = {**bars,
|
||
'len_complete_with_vet': 0,
|
||
'quantity_complete_with_vet': 0,
|
||
'weight_complete_with_vet': 0,
|
||
'ware_house_bars': len(ware_house_bars),
|
||
'ware_house_bars_quantity': ware_house_bars_quantity,
|
||
'ware_house_bars_weight': ware_house_bars_weight,
|
||
'ware_house_bars_weight_lose': ware_house_bars_weight_lose / len(
|
||
ware_house_bars) if ware_house_bars else 0,
|
||
'len_complete_with_kill_house': len(bar_complete_with_kill_house),
|
||
'quantity_final_kill_house': accepted_real_quantity_final,
|
||
'weight_final_kill_house': int(accepted_real_wight_final),
|
||
|
||
}
|
||
return Response(dict1)
|
||
|
||
|
||
class SlaughterHouseTransactionViewSet(viewsets.ModelViewSet):
|
||
queryset = SlaughterHouseTransaction.objects.all()
|
||
serializer_class = SlaughterHouseTransactionSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
|
||
class KillHouseWageDashbordInWeightViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouse.objects.all()
|
||
serializer_class = KillHouseWageSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
if request.GET['role'] == 'KillHouse':
|
||
kill_house_operator = KillHouseOperator.objects.get(user=user)
|
||
kill_houses = KillHouse.objects.filter(kill_house_operator=kill_house_operator, out_province=False,
|
||
trash=False)
|
||
# kill_house = KillHouse.objects.filter(kill_house_operator=kill_house_operator,out_province=False,trash=False).first()
|
||
# serializer = self.serializer_class(kill_house)
|
||
|
||
else:
|
||
kill_houses = KillHouse.objects.filter(out_province=False, trash=False)
|
||
serializer = self.serializer_class(kill_houses, many=True)
|
||
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class TotalWageInformationExclusiveKillerViewset(viewsets.ModelViewSet):
|
||
queryset = KillRequest.objects.all()
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
serializer_class = TotalWageInformationKillHouseExclusiveKillerSerializer
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
user = SystemUserProfile.objects.get(user=request.user)
|
||
kill_house_key = request.GET.get('kill_house_key')
|
||
if kill_house_key:
|
||
kill_house = KillHouse.objects.filter(key=kill_house_key, trash=False).first()
|
||
else:
|
||
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).first()
|
||
serializer = self.serializer_class(kill_house).data
|
||
return Response(serializer, status=status.HTTP_200_OK)
|
||
|
||
|
||
class PoultryRequestLetterForProvinceVetViewSet(viewsets.ModelViewSet):
|
||
queryset = PoultryRequest.objects.all()
|
||
serializer_class = PoultryRequestLetterForProvinceVetSerializer
|
||
permission_classes = [AllowAny]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
|
||
if 'order_code' in request.GET:
|
||
poultry_request = PoultryRequest.objects.get(order_code=int(request.GET['order_code']), trash=False)
|
||
serializer = PoultryRequestLetterForProvinceVetSerializer(poultry_request)
|
||
else:
|
||
date = datetime.strptime(str(request.GET['date']), '%Y-%m-%d').date()
|
||
poultry_requests = PoultryRequest.objects.filter(send_date__date=date,
|
||
quantity__gt=F('remain_quantity'),
|
||
trash=False)
|
||
serializer = PoultryRequestLetterForProvinceVetSerializer(poultry_requests, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class ProvinceRequestLetterForProvinceViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouse.objects.all()
|
||
serializer_class = KillHouseLetterForProvinceSerializer
|
||
permission_classes = [AllowAny]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
# user=SystemUserProfile.objects.get(user=request.user,trash=False)
|
||
date = datetime.strptime(str(request.GET['date']), '%Y-%m-%d').date()
|
||
|
||
province_kill_requests = ProvinceKillRequest.objects.filter(kill_request__recive_date__date=date, trash=False,
|
||
state__in=('pending', 'accepted'),
|
||
return_to_province=False)
|
||
kill_houses = KillHouse.objects.filter(pk__in=province_kill_requests.values_list('killhouse_user', flat=True))
|
||
serializer = self.serializer_class(kill_houses, many=True, context={'date': date})
|
||
if WageType.objects.filter(en_name='poultry-sell-out-province', status=True).exists():
|
||
poultry_requests = PoultryRequest.objects.filter(send_date__date=date, out=True,
|
||
out_province_request_cancel=False,
|
||
trash=False, state_process='accepted',
|
||
province_state='accepted', wage_pay=True) \
|
||
.select_related('hatching', 'poultry', 'poultry__address__city', 'poultry__address__province',
|
||
'poultry__user') \
|
||
.order_by('-send_date')
|
||
else:
|
||
poultry_requests = PoultryRequest.objects.filter(send_date__date=date, out=True,
|
||
out_province_request_cancel=False,
|
||
trash=False, state_process='accepted',
|
||
province_state='accepted') \
|
||
.select_related('hatching', 'poultry', 'poultry__address__city', 'poultry__address__province',
|
||
'poultry__user') \
|
||
.order_by('-send_date')
|
||
|
||
poultry_out = PoultryRequestoutProvinceSerializer(poultry_requests, many=True)
|
||
dict1 = {
|
||
'allocation': serializer.data,
|
||
'out_province': poultry_out.data,
|
||
}
|
||
return Response(dict1, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHousetestSerializer:
|
||
pass
|
||
|
||
|
||
class KillHouseFortestViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouse.objects.all()
|
||
serializer_class = KillHousetestSerializer
|
||
permission_classes = [AllowAny]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
kill_houses = KillHouse.objects.filter(trash=False, out_province=False)
|
||
serializer = self.get_serializer(kill_houses, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class DeleteKillHouseRequest(viewsets.ModelViewSet):
|
||
queryset = KillHouseRequest.objects.filter(trash=False)
|
||
serializer_class = KillHouseRequestSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def destroy(self, request, *args, **kwargs):
|
||
kill_house_request = KillHouseRequest.objects.get(trash=False, bar_code=request.GET['bar_code'])
|
||
if kill_house_request.assignment_state_archive == 'True':
|
||
kill_house_assignment = KillHouseAssignmentInformation.objects.get(kill_house_request=kill_house_request)
|
||
kill_house_assignment.trash = True
|
||
kill_house_assignment.save()
|
||
|
||
kill_house_request.trash = True
|
||
kill_house_request.save()
|
||
update_kill_house_requests(kill_house_request.province_kill_request,
|
||
kill_house_request.province_request.poultry_request)
|
||
update_province_kill_requests(kill_house_request.province_request.poultry_request.hatching)
|
||
poultry_prediction(kill_house_request.province_request.poultry_request.hatching)
|
||
|
||
if kill_house_request.ware_house_confirmation == True:
|
||
product = RolesProducts.objects.filter(trash=False, kill_house=kill_house_request.killhouse_user).first()
|
||
kill_house_requests_product_warehousing(product)
|
||
|
||
return Response({'result': 'Success'}, status=status.HTTP_200_OK)
|
||
|
||
|
||
class DashboardEnterLoadInformationView(viewsets.ViewSet):
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = DashboardEnterLoadInformationFilterSet
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
now = datetime.now().date()
|
||
date1 = datetime.strptime(request.GET['date1'],
|
||
'%Y-%m-%d').date() if 'date1' in request.GET else now
|
||
date2 = datetime.strptime(request.GET['date2'],
|
||
'%Y-%m-%d').date() if 'date2' in request.GET else now
|
||
value = request.GET.get('value')
|
||
search = request.GET.get('search')
|
||
user = SystemUserProfile.objects.get(user=request.user)
|
||
kill_house = []
|
||
if request.GET['role'] == 'KillHouse':
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False)
|
||
|
||
elif request.GET['role'] == 'KillHouseVet':
|
||
kill_house_vets = KillHouseVet.objects.filter(vet__user=user, trash=False).select_related('kill_house')
|
||
for kill_house_vet in kill_house_vets:
|
||
kill_house.append(kill_house_vet.kill_house)
|
||
|
||
else:
|
||
kill_house = KillHouse.objects.filter(system_address__province=user.province, trash=False)
|
||
|
||
if request.GET['role'] in ['CityOperator', 'CityJahad', 'CityPoultry']:
|
||
if request.GET['role'] == 'CityOperator':
|
||
city_operator = CityOperator.objects.get(user=user, trash=False)
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
(Q(killhouse_user__in=kill_house) | Q(kill_request__slaughter_house__in=kill_house)),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
assignment_state_archive='pending',
|
||
non_receipt=False,
|
||
trash=False, province_request__poultry_request__poultry__city_operator=city_operator.unit_name,
|
||
|
||
).order_by('-kill_request__recive_date')
|
||
else:
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
(Q(killhouse_user__in=kill_house) | Q(kill_request__slaughter_house__in=kill_house)),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
assignment_state_archive='pending',
|
||
non_receipt=False,
|
||
trash=False, province_request__poultry_request__poultry__address__city=user.city
|
||
|
||
).order_by('-kill_request__recive_date')
|
||
|
||
else:
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
(Q(killhouse_user__in=kill_house) | Q(kill_request__slaughter_house__in=kill_house) | Q(
|
||
killer__in=kill_house)),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
assignment_state_archive='pending',
|
||
non_receipt=False,
|
||
trash=False,
|
||
|
||
).order_by('-kill_request__recive_date')
|
||
|
||
if value and search == 'filter':
|
||
if value != 'undefined' and value.strip():
|
||
kill_house_requests = kill_house_requests.filter(
|
||
build_query(self.filterset_class, value)
|
||
)
|
||
|
||
first_quantity = kill_house_requests.aggregate(
|
||
total_quantity=Sum('quantity')).get(
|
||
'total_quantity') or 0
|
||
|
||
first_weight = kill_house_requests.aggregate(
|
||
total_quantity=Sum(F('province_request__poultry_request__Index_weight') * F('quantity'))).get(
|
||
'total_quantity') or 0
|
||
vet_accepted_real_quantity = kill_house_requests.aggregate(
|
||
total_quantity=Sum('vet_accepted_real_quantity')).get(
|
||
'total_quantity') or 0
|
||
vet_accepted_real_weight = kill_house_requests.aggregate(
|
||
total_quantity=Sum('vet_accepted_real_weight')).get(
|
||
'total_quantity') or 0
|
||
|
||
dict1 = {
|
||
"lenKillHouseRequest": len(kill_house_requests),
|
||
'firstQuantity': first_quantity,
|
||
'firstWeight': int(first_weight),
|
||
'vetAcceptedRealQuantity': vet_accepted_real_quantity,
|
||
'vetAcceptedRealWeight': vet_accepted_real_weight,
|
||
}
|
||
return Response(dict1)
|
||
|
||
|
||
class DashboardDeleteBarView(viewsets.ViewSet):
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = DashboardEnterLoadInformationFilterSet
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
now = datetime.now().date()
|
||
date1 = datetime.strptime(request.GET['date1'],
|
||
'%Y-%m-%d').date() if 'date1' in request.GET else now
|
||
date2 = datetime.strptime(request.GET['date2'],
|
||
'%Y-%m-%d').date() if 'date2' in request.GET else now
|
||
value = request.GET.get('value')
|
||
search = request.GET.get('search')
|
||
user = SystemUserProfile.objects.get(user=request.user)
|
||
kill_house_requests_list = KillHouseRequest.objects.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2, trash=True, temporary_trash=False,
|
||
temporary_deleted=False).select_related('kill_request')
|
||
if request.GET['role'] == 'VetSupervisor':
|
||
kill_house_requests_list = kill_house_requests_list.filter(
|
||
province_request__poultry_request__poultry__address__province=user.province,
|
||
|
||
)
|
||
|
||
elif request.GET['role'] == 'VetFarm':
|
||
vet = Vet.objects.filter(user=user, trash=False)
|
||
poultries = []
|
||
if vet.count() > 0:
|
||
vet = vet.last()
|
||
vet_farms = VetFarm.objects.filter(vet=vet, trash=False)
|
||
if vet_farms.count() > 0:
|
||
for vet_farm in vet_farms:
|
||
if vet_farm.poultry in poultries:
|
||
pass
|
||
else:
|
||
poultries.append(vet_farm.poultry)
|
||
|
||
kill_house_requests_list = kill_house_requests_list.filter(
|
||
province_request__poultry_request__poultry__in=poultries,
|
||
).select_related('kill_request')
|
||
|
||
elif request.GET['role'] == 'CityOperator':
|
||
city_operator = CityOperator.objects.get(user=user)
|
||
kill_house_requests_list = kill_house_requests_list.filter(
|
||
province_request__poultry_request__poultry__city_operator=city_operator.unit_name,
|
||
|
||
).select_related('kill_request')
|
||
|
||
elif request.GET['role'] in ['CityCommerce', 'CityVet', 'CityJahad', 'CityPoultry']:
|
||
kill_house_requests_list = kill_house_requests_list.filter(
|
||
|
||
province_request__poultry_request__poultry__address__city=user.city,
|
||
|
||
).select_related('kill_request')
|
||
|
||
elif request.GET['role'] == 'LiveStockSupport':
|
||
kill_house_requests_list = kill_house_requests_list.filter(
|
||
|
||
province_request__poultry_request__freezing=True,
|
||
|
||
).select_related('kill_request')
|
||
|
||
elif request.GET['role'] == 'KillHouse':
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False)
|
||
|
||
kill_house_requests_list = kill_house_requests_list.filter(
|
||
(Q(killhouse_user__in=kill_house) | Q(
|
||
kill_request__slaughter_house__in=kill_house) | Q(killer__in=kill_house)),
|
||
|
||
province_request__poultry_request__poultry__address__province=user.province,
|
||
).select_related('kill_request')
|
||
|
||
else:
|
||
kill_house_requests_list = kill_house_requests_list.filter(
|
||
|
||
province_request__poultry_request__poultry__address__province=user.province,
|
||
).select_related('kill_request')
|
||
|
||
if value and search == 'filter':
|
||
if value != 'undefined' and value.strip():
|
||
kill_house_requests_list = kill_house_requests_list.filter(
|
||
build_query(self.filterset_class, value)
|
||
)
|
||
|
||
first_quantity = kill_house_requests_list.aggregate(
|
||
total_quantity=Sum('quantity')).get(
|
||
'total_quantity') or 0
|
||
|
||
first_weight = kill_house_requests_list.aggregate(
|
||
total_quantity=Sum(F('province_request__poultry_request__Index_weight') * F('quantity'))).get(
|
||
'total_quantity') or 0
|
||
len_has_code = len(kill_house_requests_list.filter(clearance_code__isnull=False))
|
||
len_hasnt_code = len(kill_house_requests_list.filter(clearance_code__isnull=True))
|
||
kill_house = kill_house_requests_list.values_list('kill_request__kill_house', flat=True).distinct()
|
||
|
||
dict1 = {
|
||
"lenKillHouseRequest": len(kill_house_requests_list),
|
||
'firstQuantity': first_quantity,
|
||
'firstWeight': int(first_weight),
|
||
'lenHasCode': len_has_code,
|
||
'lenHasntCode': len_hasnt_code,
|
||
'lenKillHouse': len(kill_house),
|
||
}
|
||
return Response(dict1)
|
||
|
||
|
||
class DahsnoardProvinceKillRequestViewSet(viewsets.ModelViewSet):
|
||
queryset = ProvinceKillRequest.objects.all()
|
||
serializer_class = ProvinceKillRequestSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
filterset_class = ProvinceKillRequestNewFilterSet
|
||
|
||
# تابع مربوط به نمایش تخصیصات به کشتارگاها توسط استان
|
||
def list(self, request, *args, **kwargs):
|
||
now = datetime.now().date()
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
|
||
date1 = datetime.strptime(str(request.GET['date1']),
|
||
'%Y-%m-%d').date() if 'date1' in request.GET else now
|
||
date2 = datetime.strptime(str(request.GET['date2']),
|
||
'%Y-%m-%d').date() if 'date2' in request.GET else now
|
||
if request.GET['role'] == 'KillHouse':
|
||
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user,
|
||
trash=False)
|
||
|
||
trash = True if 'deleted_object' in request.GET else False
|
||
province_kill_requests = ProvinceKillRequest.objects.filter(Q(killhouse_user__in=kill_house) | Q(
|
||
kill_request__slaughter_house__in=kill_house),
|
||
trash=trash,
|
||
delete_message__isnull=False if trash else True,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
temporary_trash=False, temporary_deleted=False,
|
||
).select_related(
|
||
'province_request__poultry_request').order_by(
|
||
'province_request__city_request_Poultry__poultry_request__send_date')
|
||
else:
|
||
trash = True if 'deleted_object' in request.GET else False
|
||
province_kill_requests = ProvinceKillRequest.objects.filter(
|
||
province_request__city_request_Poultry__poultry_request__poultry__user__province=user.province,
|
||
trash=trash,
|
||
delete_message__isnull=False if trash else True,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2, temporary_trash=False, temporary_deleted=False,
|
||
).select_related(
|
||
'province_request__poultry_request__poultry',
|
||
'province_request__city_request_Poultry__poultry_request__poultry__user',
|
||
'province_request__city_request_Poultry__poultry_request__poultry__user__city',
|
||
'kill_request__kill_house',
|
||
'kill_request__kill_house__kill_house_operator__user',
|
||
'kill_request__kill_house__system_address__city'
|
||
).order_by('province_request__poultry_request__send_date')
|
||
if 'allocated_car_state' in request.GET:
|
||
province_kill_requests = province_kill_requests.filter(first_car_allocated_quantity=0)
|
||
value = request.GET.get('value')
|
||
search = request.GET.get('filter')
|
||
if value and search == 'search':
|
||
if value != 'undefined' and value.strip():
|
||
province_kill_requests = province_kill_requests.filter(
|
||
build_query(self.filterset_class, value)
|
||
)
|
||
kill_requests = KillHouseRequest.objects.filter(province_kill_request__in=province_kill_requests, trash=False)
|
||
accepted_province_kill_requests = province_kill_requests.filter(state='accepted')
|
||
pending_province_kill_requests = province_kill_requests.filter(state='pending')
|
||
rejected_province_kill_requests = province_kill_requests.filter(state='rejected')
|
||
|
||
quantity = province_kill_requests.aggregate(
|
||
total_quantity=Sum('total_killed_quantity')).get(
|
||
'total_quantity') or 0
|
||
weight = province_kill_requests.aggregate(
|
||
total_quantity=Sum('total_killed_weight')).get(
|
||
'total_quantity') or 0
|
||
|
||
accepted_quantity = accepted_province_kill_requests.aggregate(
|
||
total_quantity=Sum('total_killed_quantity')).get(
|
||
'total_quantity') or 0
|
||
pending_quantity = pending_province_kill_requests.aggregate(
|
||
total_quantity=Sum('total_killed_quantity')).get(
|
||
'total_quantity') or 0
|
||
rejected_quantity = rejected_province_kill_requests.aggregate(
|
||
total_quantity=Sum('total_killed_quantity')).get(
|
||
'total_quantity') or 0
|
||
has_car = province_kill_requests.filter(first_car_allocated_quantity__gt=0)
|
||
has_car_quantity = has_car.aggregate(
|
||
total_quantity=Sum('total_killed_quantity')).get(
|
||
'total_quantity') or 0
|
||
has_car_weight = has_car.aggregate(
|
||
total_quantity=Sum('total_killed_weight')).get(
|
||
'total_quantity') or 0
|
||
hasnt_car = province_kill_requests.filter(first_car_allocated_quantity=0)
|
||
hasnt_car_quantity = hasnt_car.aggregate(
|
||
total_quantity=Sum('total_killed_quantity')).get(
|
||
'total_quantity') or 0
|
||
hasnt_car_weight = hasnt_car.aggregate(
|
||
total_quantity=Sum('total_killed_weight')).get(
|
||
'total_quantity') or 0
|
||
real_quantity = kill_requests.aggregate(
|
||
total_quantity=Sum('accepted_real_quantity')).get(
|
||
'total_quantity') or 0
|
||
real_weight = kill_requests.aggregate(
|
||
total_quantity=Sum('accepted_real_weight')).get(
|
||
'total_quantity') or 0
|
||
|
||
internal_dict_infos = {
|
||
"lenProvinceRequest": len(province_kill_requests),
|
||
"quantity": quantity,
|
||
"weight": int(weight),
|
||
"acceptedProvinceKillRequests": len(accepted_province_kill_requests),
|
||
"acceptedProvinceKillRequestsQuantity": accepted_quantity,
|
||
"pendingProvinceKillRequests": len(pending_province_kill_requests),
|
||
"pendingProvinceKillRequestsQuantity": pending_quantity,
|
||
"rejectedProvinceKillRequests": len(rejected_province_kill_requests),
|
||
"rejectedProvinceKillRequestsQuantity": rejected_quantity,
|
||
"lenHasCar": len(has_car),
|
||
"hasCarQuantity": has_car_quantity,
|
||
"hasCarWeight": has_car_weight,
|
||
"lenKillRequests": len(kill_requests),
|
||
"realQuantity": real_quantity,
|
||
"realWeight": real_weight,
|
||
"lenHasntCar": len(hasnt_car),
|
||
"hasntCarQuantity": hasnt_car_quantity,
|
||
"hasntCarWeight": hasnt_car_weight,
|
||
}
|
||
|
||
return Response(internal_dict_infos, status=status.HTTP_200_OK)
|
||
|
||
def update(self, request, pk=None, *args, **kwargs):
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
role = request.data['role']
|
||
request.data.pop('role')
|
||
if 'type' in request.data.keys():
|
||
if request.data['type'] == 'archive':
|
||
user_fullname = user.fullname
|
||
date = str(datetime.now())
|
||
archive_province_kill_request_wage_threading = threading.Thread(
|
||
target=provincearchiveprovincekillrequestforwage,
|
||
args=(
|
||
request.data['province_kill_request_list'], request.data['message'], role, user_fullname, date
|
||
))
|
||
archive_province_kill_request_wage_threading.start()
|
||
return Response({"result": "با موفقیت انجام شد"}, status=status.HTTP_200_OK)
|
||
|
||
|
||
elif request.data['type'] == 'return_archive':
|
||
user_fullname = user.fullname
|
||
date = str(datetime.now().date())
|
||
province_kill_request = ProvinceKillRequest.objects.get(key=request.data['province_kill_request_key'])
|
||
province_kill_request.archive_by_province = False
|
||
if 'return_archive_message' in request.data.keys():
|
||
province_kill_request.return_archive_message = request.data['return_archive_message']
|
||
province_kill_request.returner = {
|
||
"fullname": user_fullname,
|
||
"date": date,
|
||
"role": role
|
||
}
|
||
province_kill_request.save()
|
||
return Response({"result": "با موفقیت انجام شد"}, status=status.HTTP_200_OK)
|
||
|
||
|
||
else:
|
||
|
||
province_kill_request = ProvinceKillRequest.objects.get(key=request.data['province_kill_request_key'])
|
||
if province_kill_request.prev_total_amount == None:
|
||
province_kill_request.prev_total_amount = province_kill_request.total_amount
|
||
province_kill_request.total_amount_editor = {
|
||
"role": role,
|
||
"fullname": user.fullname,
|
||
"mobile": user.mobile,
|
||
"date": str(datetime.now())
|
||
}
|
||
province_kill_request.save()
|
||
serializer = self.serializer_class(province_kill_request)
|
||
serializer.update(instance=province_kill_request, validated_data=request.data)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
def destroy(self, request, pk=None, *args, **kwargs):
|
||
# refresh(request.user.id)
|
||
|
||
if 'delete_allocation' in request.GET:
|
||
province_kill_request = ProvinceKillRequest.objects.get(key=request.GET['province_kill_request_key'],
|
||
trash=False)
|
||
if province_kill_request.quantity != province_kill_request.main_quantity:
|
||
return Response({"result": "برای تخصیص ماشین ثبت شده امکان حذف وجود ندارد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
poultry_request = PoultryRequest.objects.get(key=province_kill_request.province_request.poultry_request.key,
|
||
trash=False)
|
||
province_check = ProvinceCheckOperatorRequest.objects.get(poultry_request=poultry_request)
|
||
|
||
hatching = PoultryHatching.objects.get(key=poultry_request.hatching.key, trash=False)
|
||
if poultry_request.export == True:
|
||
hatching.export_killed_weight -= int(int(request.data['quantity']) * poultry_request.Index_weight)
|
||
hatching.export_killed_quantity -= int(request.data['quantity'])
|
||
elif poultry_request.free_sale_in_province == True:
|
||
hatching.free_killed_quantity -= province_kill_request.total_killed_weight
|
||
# hatching.free_killed_quantity -= int(province_kill_request.main_quantity * poultry_request.Index_weight)
|
||
hatching.free_quantity -= province_kill_request.total_killed_quantity
|
||
# hatching.free_quantity -= province_kill_request.main_quantity
|
||
else:
|
||
hatching.governmental_killed_quantity -= province_kill_request.total_killed_weight
|
||
# hatching.governmental_killed_quantity -= int(
|
||
# province_kill_request.main_quantity * poultry_request.Index_weight)
|
||
|
||
hatching.governmental_quantity -= province_kill_request.total_killed_quantity
|
||
# hatching.governmental_quantity -= province_kill_request.main_quantity
|
||
# hatching.killed_quantity -= province_kill_request.main_quantity
|
||
hatching.save()
|
||
|
||
if poultry_request.remain_quantity > 0:
|
||
# province_check = ProvinceCheckOperatorRequest.objects.get(poultry_request=poultry_request)
|
||
province_check.quantity += province_kill_request.main_quantity
|
||
province_check.save()
|
||
poultry_request.remain_quantity += province_kill_request.main_quantity
|
||
poultry_request.save()
|
||
else:
|
||
|
||
# province_check = ProvinceCheckOperatorRequest.objects.get(poultry_request=poultry_request)
|
||
province_check.quantity += province_kill_request.main_quantity
|
||
province_check.save()
|
||
poultry_request.remain_quantity += province_kill_request.main_quantity
|
||
poultry_request.save()
|
||
# poultry_request.quantity -= province_kill_request.quantity
|
||
# poultry_request.first_quantity -= province_kill_request.quantity
|
||
# poultry_request.previous_quantity -= province_kill_request.quantity
|
||
# poultry_request.save()
|
||
# if poultry_request.quantity == 0:
|
||
# poultry_request.trash = True
|
||
# poultry_request.save()
|
||
# hatching.left_over += province_kill_request.quantity
|
||
# hatching.state = 'pending'
|
||
# hatching.allow_hatching = 'pending'
|
||
# hatching.save()
|
||
kill_request = KillRequest.objects.get(key=province_kill_request.kill_request.key)
|
||
kill_request.remain_quantity += province_kill_request.main_quantity
|
||
kill_request.save()
|
||
province_kill_request.delete_message = request.GET['message']
|
||
province_kill_request.trash = True
|
||
province_kill_request.save()
|
||
return Response({"result": "با موفقیت حذف شد"}, status=status.HTTP_200_OK)
|
||
elif 'return_allocation_quantity' in request.GET:
|
||
|
||
province_kill_request = ProvinceKillRequest.objects.get(key=request.GET['province_kill_request_key'],
|
||
trash=False)
|
||
if province_kill_request.quantity == 0:
|
||
return Response({"result": "باقی مانده تخصیص صفر است امکان بازگشت تعداد وجود ندارد"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
amount = province_kill_request.quantity
|
||
|
||
poultry_request = PoultryRequest.objects.get(key=province_kill_request.province_request.poultry_request.key,
|
||
trash=False)
|
||
hatching = PoultryHatching.objects.get(key=poultry_request.hatching.key, trash=False)
|
||
|
||
if province_kill_request.main_quantity - province_kill_request.quantity == 0:
|
||
province_check = ProvinceCheckOperatorRequest.objects.get(poultry_request=poultry_request)
|
||
province_check.quantity += province_kill_request.main_quantity
|
||
province_check.save()
|
||
poultry_request.remain_quantity += province_kill_request.main_quantity
|
||
poultry_request.save()
|
||
# kill_request = KillRequest.objects.get(key=province_kill_request.kill_request.key)
|
||
# kill_request.remain_quantity += province_kill_request.main_quantity
|
||
# kill_request.save()
|
||
if poultry_request.export == True:
|
||
hatching.export_killed_weight -= int(int(request.data['quantity']) * poultry_request.Index_weight)
|
||
hatching.export_killed_quantity -= int(request.data['quantity'])
|
||
elif poultry_request.free_sale_in_province == True:
|
||
hatching.free_killed_quantity -= province_kill_request.total_killed_weight
|
||
# hatching.free_killed_quantity -= int(amount * poultry_request.Index_weight)
|
||
hatching.free_quantity -= province_kill_request.total_killed_quantity
|
||
# hatching.free_quantity -= amount
|
||
else:
|
||
hatching.governmental_killed_quantity -= province_kill_request.total_killed_weight
|
||
# hatching.governmental_killed_quantity -= int(amount * poultry_request.Index_weight)
|
||
hatching.governmental_quantity -= province_kill_request.total_killed_quantity
|
||
# hatching.governmental_quantity -= amount
|
||
# hatching.killed_quantity -= amount
|
||
hatching.save()
|
||
# province_kill_request.trash = True
|
||
province_kill_request.quantity = 0
|
||
province_kill_request.total_killed_quantity = 0
|
||
province_kill_request.total_killed_weight = 0
|
||
province_kill_request.return_to_province = True
|
||
province_kill_request.save()
|
||
else:
|
||
|
||
province_check = ProvinceCheckOperatorRequest.objects.get(poultry_request=poultry_request)
|
||
province_check.quantity += province_kill_request.main_quantity - province_kill_request.quantity
|
||
province_check.save()
|
||
poultry_request.remain_quantity += province_kill_request.main_quantity - province_kill_request.quantity
|
||
poultry_request.save()
|
||
# kill_request = KillRequest.objects.get(key=province_kill_request.kill_request.key)
|
||
# kill_request.remain_quantity += province_kill_request.main_quantity - province_kill_request.quantity
|
||
# kill_request.save()
|
||
if poultry_request.export == True:
|
||
hatching.export_killed_weight -= int(int(request.data['quantity']) * poultry_request.Index_weight)
|
||
hatching.export_killed_quantity -= int(request.data['quantity'])
|
||
elif poultry_request.free_sale_in_province == True:
|
||
hatching.free_killed_quantity -= int((
|
||
province_kill_request.main_quantity - province_kill_request.quantity) * poultry_request.Index_weight)
|
||
# hatching.free_killed_quantity -= int(amount * poultry_request.Index_weight)
|
||
hatching.free_quantity -= province_kill_request.total_killed_quantity
|
||
# hatching.free_quantity -= amount
|
||
else:
|
||
hatching.governmental_killed_quantity -= int((
|
||
province_kill_request.main_quantity - province_kill_request.quantity) * poultry_request.Index_weight)
|
||
# hatching.governmental_killed_quantity -= int(amount * poultry_request.Index_weight)
|
||
hatching.governmental_quantity -= province_kill_request.main_quantity - province_kill_request.quantity
|
||
# hatching.governmental_quantity -= amount
|
||
# hatching.killed_quantity -= amount
|
||
hatching.save()
|
||
province_kill_request.main_quantity = province_kill_request.main_quantity - province_kill_request.quantity
|
||
province_kill_request.quantity = 0
|
||
province_kill_request.save()
|
||
return Response({"result": "با موفقیت انجام شد"}, status=status.HTTP_200_OK)
|
||
queryset = ProvinceKillRequest.objects.get(key=request.GET['key'])
|
||
poultry_request = PoultryRequest.objects.get(key=queryset.province_request.poultry_request.key)
|
||
hatching = PoultryHatching.objects.get(key=poultry_request.hatching.key, trash=False)
|
||
check = KillHouseCheckRequest.objects.filter(province_kill_request=queryset, state='accepted')
|
||
if check.count() > 0:
|
||
return Response({"result": "can not delete"}, status=status.HTTP_403_FORBIDDEN)
|
||
province = ProvinceCheckOperatorRequest.objects.get(key=queryset.province_request.key)
|
||
province.quantity += queryset.quantity
|
||
province.save()
|
||
kill_request = KillRequest.objects.get(key=queryset.kill_request.key)
|
||
kill_request.remain_quantity += queryset.quantity
|
||
kill_request.save()
|
||
# queryset.delete()
|
||
poultry_request.remain_quantity += queryset.quantity
|
||
poultry_request.save()
|
||
if poultry_request.export == True:
|
||
hatching.export_killed_weight -= int(int(request.data['quantity']) * poultry_request.Index_weight)
|
||
hatching.export_killed_quantity -= int(request.data['quantity'])
|
||
elif poultry_request.free_sale_in_province == True:
|
||
hatching.free_killed_quantity -= queryset.total_killed_weight
|
||
# hatching.free_killed_quantity -= int(queryset.quantity * poultry_request.Index_weight)
|
||
hatching.free_quantity -= queryset.total_killed_quantity
|
||
else:
|
||
hatching.governmental_killed_quantity -= queryset.total_killed_weight
|
||
# hatching.governmental_killed_quantity -= int(
|
||
# queryset.quantity * poultry_request.Index_weight)
|
||
hatching.governmental_quantity -= queryset.total_killed_quantity
|
||
# hatching.killed_quantity -= queryset.total_killed_quantity
|
||
hatching.save()
|
||
queryset.delete()
|
||
|
||
return Response(status=status.HTTP_200_OK)
|
||
|
||
|
||
class DashboardKillHouseFreeBarInformationViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseFreeBarInformation.objects.all()
|
||
serializer_class = KillHouseFreeBarInformationSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
pagination_class = CustomPagination
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = DashboardKillHouseFreeBarInformationFilterSet
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
value = request.GET.get('value')
|
||
search = request.GET.get('search')
|
||
date1 = request.GET.get('date1')
|
||
date2 = request.GET.get('date2')
|
||
if date1:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
type = request.GET['type']
|
||
if request.GET['role'] in ['KillHouse', 'KillHouseVet']:
|
||
if request.GET['role'] == 'KillHouse':
|
||
kill_houses = KillHouse.objects.filter(kill_house_operator__user=user, trash=False)
|
||
else:
|
||
kill_house_ids = KillHouseVet.objects.filter(vet__user=user, trash=False).values_list('kill_house',
|
||
flat=True)
|
||
kill_houses = KillHouse.objects.filter(id__in=kill_house_ids, trash=False)
|
||
|
||
kill_house_free_bar_info = KillHouseFreeBarInformation.objects.filter(
|
||
Q(kill_house__in=kill_houses) | Q(exclusive_killer__in=kill_houses) | Q(public_killer__in=kill_houses),
|
||
buy_type=type,
|
||
calculate_status=True,
|
||
temporary_trash=False,
|
||
temporary_deleted=False,
|
||
trash=False).order_by('-date')
|
||
else:
|
||
kill_house_free_bar_info = KillHouseFreeBarInformation.objects.filter(
|
||
buy_type=type,
|
||
calculate_status=True,
|
||
temporary_trash=False,
|
||
temporary_deleted=False,
|
||
trash=False).order_by('-date')
|
||
|
||
if date1:
|
||
kill_house_free_bar_info = kill_house_free_bar_info.filter(register_date__date__gte=date1,
|
||
register_date__date__lte=date2)
|
||
|
||
if value and search == 'filter':
|
||
if value != 'undefined' and value.strip():
|
||
kill_house_free_bar_info = kill_house_free_bar_info.filter(
|
||
build_query(self.filterset_class, value)
|
||
)
|
||
quantity = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('quantity')).get(
|
||
'total_quantity') or 0
|
||
live_weight = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('live_weight')).get(
|
||
'total_quantity') or 0
|
||
number_of_carcasses = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
weight_of_carcasses = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
if type == 'live':
|
||
quantity = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('quantity')).get(
|
||
'total_quantity') or 0
|
||
live_weight = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('live_weight')).get(
|
||
'total_quantity') or 0
|
||
number_of_carcasses = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
weight_of_carcasses = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
|
||
entered_bars = kill_house_free_bar_info.filter(weight_of_carcasses__gt=0)
|
||
|
||
entered_quantity = entered_bars.aggregate(
|
||
total_quantity=Sum('quantity')).get(
|
||
'total_quantity') or 0
|
||
entered_live_weight = entered_bars.aggregate(
|
||
total_quantity=Sum('live_weight')).get(
|
||
'total_quantity') or 0
|
||
entered_number_of_carcasses = entered_bars.aggregate(
|
||
total_quantity=Sum('number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
entered_weight_of_carcasses = entered_bars.aggregate(
|
||
total_quantity=Sum('weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
|
||
not_entered_bars = kill_house_free_bar_info.filter(weight_of_carcasses=0)
|
||
|
||
not_entered_quantity = not_entered_bars.aggregate(
|
||
total_quantity=Sum('quantity')).get(
|
||
'total_quantity') or 0
|
||
not_entered_live_weight = not_entered_bars.aggregate(
|
||
total_quantity=Sum('live_weight')).get(
|
||
'total_quantity') or 0
|
||
not_entered_number_of_carcasses = not_entered_bars.aggregate(
|
||
total_quantity=Sum('number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
not_entered_weight_of_carcasses = not_entered_bars.aggregate(
|
||
total_quantity=Sum('weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
|
||
result = {
|
||
'total_bars': len(kill_house_free_bar_info),
|
||
'total_bars_quantity': quantity,
|
||
'total_bars_live_Weight': live_weight,
|
||
'total_bars_numberOfCarcasses': number_of_carcasses,
|
||
'total_bars_weightOfCarcasses': weight_of_carcasses,
|
||
|
||
'entered_total_bars': len(entered_bars),
|
||
'entered_total_bars_quantity': entered_quantity,
|
||
'entered_total_bars_live_Weight': entered_live_weight,
|
||
'entered_total_bars_numberOfCarcasses': entered_number_of_carcasses,
|
||
'entered_total_bars_weightOfCarcasses': entered_weight_of_carcasses,
|
||
|
||
'not_entered_total_bars': len(not_entered_bars),
|
||
'not_entered_total_bars_quantity': not_entered_quantity,
|
||
'not_entered_total_bars_live_Weight': not_entered_live_weight,
|
||
'not_entered_total_bars_numberOfCarcasses': not_entered_number_of_carcasses,
|
||
'not_entered_total_bars_weightOfCarcasses': not_entered_weight_of_carcasses,
|
||
|
||
}
|
||
else:
|
||
result = {
|
||
'total_bars': len(kill_house_free_bar_info),
|
||
'total_bars_quantity': quantity,
|
||
'total_bars_live_Weight': live_weight,
|
||
'total_bars_numberOfCarcasses': number_of_carcasses,
|
||
'total_bars_weightOfCarcasses': weight_of_carcasses,
|
||
}
|
||
return Response(result, status=status.HTTP_200_OK)
|
||
|
||
|
||
class ParentCopmanyDashboardKillHouseFreeBarInformationViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseFreeBarInformation.objects.all()
|
||
serializer_class = KillHouseFreeBarInformationSerializer
|
||
permission_classes = [AllowAny]
|
||
pagination_class = CustomPagination
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = DashboardKillHouseFreeBarInformationFilterSet
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
|
||
type = request.GET['type']
|
||
|
||
kill_house_free_bar_info = KillHouseFreeBarInformation.objects.filter(
|
||
buy_type=type,
|
||
trash=False).order_by('-date')
|
||
quantity = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('quantity')).get(
|
||
'total_quantity') or 0
|
||
live_weight = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('live_weight')).get(
|
||
'total_quantity') or 0
|
||
number_of_carcasses = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
weight_of_carcasses = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
if type == 'live':
|
||
quantity = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('quantity')).get(
|
||
'total_quantity') or 0
|
||
live_weight = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('live_weight')).get(
|
||
'total_quantity') or 0
|
||
number_of_carcasses = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
weight_of_carcasses = kill_house_free_bar_info.aggregate(
|
||
total_quantity=Sum('weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
|
||
entered_bars = kill_house_free_bar_info.filter(weight_of_carcasses__gt=0)
|
||
|
||
entered_quantity = entered_bars.aggregate(
|
||
total_quantity=Sum('quantity')).get(
|
||
'total_quantity') or 0
|
||
entered_live_weight = entered_bars.aggregate(
|
||
total_quantity=Sum('live_weight')).get(
|
||
'total_quantity') or 0
|
||
entered_number_of_carcasses = entered_bars.aggregate(
|
||
total_quantity=Sum('number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
entered_weight_of_carcasses = entered_bars.aggregate(
|
||
total_quantity=Sum('weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
|
||
not_entered_bars = kill_house_free_bar_info.filter(weight_of_carcasses=0)
|
||
|
||
not_entered_quantity = not_entered_bars.aggregate(
|
||
total_quantity=Sum('quantity')).get(
|
||
'total_quantity') or 0
|
||
not_entered_live_weight = not_entered_bars.aggregate(
|
||
total_quantity=Sum('live_weight')).get(
|
||
'total_quantity') or 0
|
||
not_entered_number_of_carcasses = not_entered_bars.aggregate(
|
||
total_quantity=Sum('number_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
not_entered_weight_of_carcasses = not_entered_bars.aggregate(
|
||
total_quantity=Sum('weight_of_carcasses')).get(
|
||
'total_quantity') or 0
|
||
|
||
result = {
|
||
'total_bars': len(kill_house_free_bar_info),
|
||
'total_bars_quantity': quantity,
|
||
'total_bars_live_Weight': live_weight,
|
||
'total_bars_numberOfCarcasses': number_of_carcasses,
|
||
'total_bars_weightOfCarcasses': weight_of_carcasses,
|
||
|
||
'entered_total_bars': len(entered_bars),
|
||
'entered_total_bars_quantity': entered_quantity,
|
||
'entered_total_bars_live_Weight': entered_live_weight,
|
||
'entered_total_bars_numberOfCarcasses': entered_number_of_carcasses,
|
||
'entered_total_bars_weightOfCarcasses': entered_weight_of_carcasses,
|
||
|
||
'not_entered_total_bars': len(not_entered_bars),
|
||
'not_entered_total_bars_quantity': not_entered_quantity,
|
||
'not_entered_total_bars_live_Weight': not_entered_live_weight,
|
||
'not_entered_total_bars_numberOfCarcasses': not_entered_number_of_carcasses,
|
||
'not_entered_total_bars_weightOfCarcasses': not_entered_weight_of_carcasses,
|
||
|
||
}
|
||
else:
|
||
result = {
|
||
'total_bars': len(kill_house_free_bar_info),
|
||
'total_bars_quantity': quantity,
|
||
'total_bars_live_Weight': live_weight,
|
||
'total_bars_numberOfCarcasses': number_of_carcasses,
|
||
'total_bars_weightOfCarcasses': weight_of_carcasses,
|
||
}
|
||
return Response(result, status=status.HTTP_200_OK)
|
||
|
||
|
||
class DashboardKillRequestViewSet(viewsets.ModelViewSet):
|
||
queryset = KillRequest.objects.all()
|
||
serializer_class = KillHouseFreeBarInformationSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = DashboardKillRequestFilterSet
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
value = request.GET.get('value')
|
||
search = request.GET.get('search')
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
querysets = KillRequest.objects.filter(
|
||
recive_date__date__gte=date1,
|
||
recive_date__date__lte=date2, poultry__isnull=False,
|
||
trash=False).order_by(
|
||
'recive_date')
|
||
if request.GET['role'] == 'KillHouse':
|
||
kill_house_operator = KillHouseOperator.objects.get(user=user, trash=False)
|
||
kill_house = KillHouse.objects.filter(kill_house_operator=kill_house_operator, trash=False)
|
||
querysets = querysets.filter(kill_house__in=kill_house).order_by('recive_date')
|
||
elif request.GET['role'] in ['ProvinceOperator', 'SuperAdmin', 'AdminX']:
|
||
if 'direct_buying' in request.GET:
|
||
querysets = querysets.filter(market=False,
|
||
final_accept=True,
|
||
direct_buying_state__in=(
|
||
'accepted', 'rejected', 'deleted', 'pending'),
|
||
export_status=False, trash=False
|
||
)
|
||
if 'export' in request.GET:
|
||
if request.GET['type'] == 'pending':
|
||
querysets = querysets.filter(export_status=True,
|
||
export_state='pending'
|
||
)
|
||
else:
|
||
querysets = querysets.filter(export_status=True,
|
||
export_state__in=(
|
||
'accepted', 'rejected', 'deleted'),
|
||
)
|
||
|
||
if value and search == 'filter':
|
||
if value != 'undefined' and value.strip():
|
||
querysets = querysets.filter(
|
||
build_query(self.filterset_class, value)
|
||
)
|
||
quantity = querysets.aggregate(
|
||
total_quantity=Sum('kill_capacity')).get(
|
||
'total_quantity') or 0
|
||
free_direct_buying_true_quantity = querysets.aggregate(
|
||
total_quantity=Sum('kill_capacity', filter=Q(free_direct_buying=True))).get(
|
||
'total_quantity') or 0
|
||
free_direct_buying_false_quantity = querysets.aggregate(
|
||
total_quantity=Sum('kill_capacity', filter=Q(free_direct_buying=False))).get(
|
||
'total_quantity') or 0
|
||
left_over = querysets.aggregate(
|
||
total_quantity=Sum('remain_quantity')).get(
|
||
'total_quantity') or 0
|
||
amount = querysets.aggregate(
|
||
total_quantity=Avg('amount')).get(
|
||
'total_quantity') or 0
|
||
index_wight = querysets.aggregate(
|
||
total_quantity=Avg('Index_weight')).get(
|
||
'total_quantity') or 0
|
||
dict1 = {
|
||
'lenKillRequest': querysets.count(),
|
||
'lenKillRequestHasFreeDirectBuying': querysets.filter(free_direct_buying=True).count(),
|
||
'lenKillRequestHasntFreeDirectBuying': querysets.filter(free_direct_buying=False).count(),
|
||
'quantity': quantity,
|
||
'leftOver': left_over,
|
||
'remainQuantity': quantity - left_over,
|
||
'amount': amount,
|
||
'indexWight': index_wight,
|
||
'freeDirectBuyingTrueQuantity': free_direct_buying_true_quantity,
|
||
'freeDirectBuyingFalseQuantity': free_direct_buying_false_quantity,
|
||
|
||
}
|
||
return Response(dict1, status=status.HTTP_200_OK)
|
||
|
||
|
||
class InputBarsForKillHouseViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseRequest.objects.all()
|
||
serializer_class = KillHouseRequestForInputBarsSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
pagination_class = CustomPagination
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = KillHouseRequestFilterSet
|
||
filterset_fields = [
|
||
'killhouse_user__kill_house_operator__user__fullname',
|
||
'killhouse_user__kill_house_operator__user__mobile',
|
||
'province_request__poultry_request__poultry__user__fullname',
|
||
'province_request__poultry_request__poultry__user__mobile',
|
||
'province_request__poultry_request__order_code',
|
||
'province_request__poultry_request__order_code',
|
||
'bar_code',
|
||
]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
quota = request.GET.get('quota')
|
||
if quota == 'governmental':
|
||
quota_filter = {'province_request__poultry_request__free_sale_in_province': False}
|
||
elif quota == 'free':
|
||
quota_filter = {'province_request__poultry_request__free_sale_in_province': True}
|
||
else:
|
||
quota_filter = None
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).select_related(
|
||
'system_address__province').first()
|
||
|
||
if 'date1' in request.GET and request.GET['date1']:
|
||
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
|
||
if request.GET['type'] == 'entered':
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(killhouse_user=kill_house) | Q(killer=kill_house),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
ware_house_confirmation=True, trash=False, calculate_status=True).order_by(
|
||
'-kill_request__recive_date')
|
||
else:
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(killhouse_user=kill_house) | Q(killer=kill_house),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
ware_house_confirmation=False, non_receipt=False, trash=False, calculate_status=True).order_by(
|
||
'-kill_request__recive_date')
|
||
else:
|
||
|
||
if request.GET['type'] == 'entered':
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(killhouse_user=kill_house) | Q(killer=kill_house),
|
||
ware_house_confirmation=True, trash=False, calculate_status=True).order_by(
|
||
'-kill_request__recive_date')
|
||
else:
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(killhouse_user=kill_house) | Q(killer=kill_house),
|
||
ware_house_confirmation=False, non_receipt=False, trash=False, calculate_status=True).order_by(
|
||
'-kill_request__recive_date')
|
||
|
||
if quota_filter:
|
||
kill_house_requests = kill_house_requests.filter(**quota_filter)
|
||
|
||
if 'search' in request.GET:
|
||
kill_house_requests_list = []
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=kill_house_requests
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=kill_house_requests)
|
||
kill_house_requests_list = ps.filter()
|
||
kill_house_requests = [] if len(kill_house_requests_list) == 0 else kill_house_requests_list
|
||
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(kill_house_requests)
|
||
if page is not None:
|
||
serializer = self.serializer_class(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = self.serializer_class(kill_house_requests, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class InputBarsForKillHouseDashboardViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseRequest.objects.all()
|
||
serializer_class = KillHouseRequestForInputBarsSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
role = request.GET.get('role')
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
if role in ('Steward', 'Guild'):
|
||
guild = Guilds.objects.get(user=user, active=True, trash=False)
|
||
if 'date1' in request.GET:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
allocations = StewardAllocation.objects.filter(
|
||
Q(to_steward=guild) | Q(to_guilds=guild), date__date__gte=date1, date__date__lte=date2,
|
||
trash=False, calculate_status=True, system_registration_code=True)
|
||
else:
|
||
allocations = StewardAllocation.objects.filter(
|
||
Q(to_steward=guild) | Q(to_guilds=guild),
|
||
trash=False, calculate_status=True, system_registration_code=True)
|
||
entered_allocations = allocations.filter(receiver_state='accepted')
|
||
not_entered_allocations = allocations.filter(receiver_state='pending')
|
||
rejected_allocations = allocations.filter(receiver_state='rejected')
|
||
total_allocations_quantity = allocations.filter(receiver_state__in=('pending', 'accepted')).aggregate(
|
||
total=Sum('real_number_of_carcasses'))[
|
||
'total'] or 0
|
||
total_allocations_weight = allocations.filter(receiver_state__in=('pending', 'accepted')).aggregate(
|
||
total=Sum('real_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
total_entered_allocations_quantity = \
|
||
entered_allocations.aggregate(total=Sum('real_number_of_carcasses'))['total'] or 0
|
||
total_entered_allocations_weight = \
|
||
entered_allocations.aggregate(total=Sum('real_weight_of_carcasses'))['total'] or 0
|
||
total_not_entered_allocations_quantity = \
|
||
not_entered_allocations.aggregate(total=Sum('real_number_of_carcasses'))['total'] or 0
|
||
total_not_entered_allocations_weight = \
|
||
not_entered_allocations.aggregate(total=Sum('real_weight_of_carcasses'))['total'] or 0
|
||
|
||
total_rejected_allocations_quantity = \
|
||
rejected_allocations.aggregate(total=Sum('real_number_of_carcasses'))['total'] or 0
|
||
total_rejected_allocations_weight = \
|
||
rejected_allocations.aggregate(total=Sum('real_weight_of_carcasses'))['total'] or 0
|
||
|
||
result = {
|
||
"total_bars": len(allocations),
|
||
"total_bars_quantity": total_allocations_quantity,
|
||
"total_bars_weight": total_allocations_weight,
|
||
"total_entered_bars": len(entered_allocations),
|
||
"total_entered_bars_quantity": total_entered_allocations_quantity,
|
||
"total_entered_bars_weight": total_entered_allocations_weight,
|
||
"total_not_entered_bars": len(not_entered_allocations),
|
||
"total_not_entered_bars_quantity": total_not_entered_allocations_quantity,
|
||
"total_not_entered_kill_house_requests_weight": total_not_entered_allocations_weight,
|
||
"total_rejected_bars": len(rejected_allocations),
|
||
"total_rejected_bars_quantity": total_rejected_allocations_quantity,
|
||
"total_rejected_bars_weight": total_rejected_allocations_weight,
|
||
}
|
||
|
||
else:
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).select_related(
|
||
'system_address__province').first()
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(killhouse_user=kill_house) | Q(killer=kill_house),
|
||
trash=False, calculate_status=True).order_by('-kill_request__recive_date')
|
||
entered_kill_house_requests = kill_house_requests.filter(ware_house_confirmation=True)
|
||
not_entered_kill_house_requests = kill_house_requests.filter(ware_house_confirmation=False)
|
||
total_kill_house_requests_quantity = kill_house_requests.aggregate(total=Sum('accepted_real_quantity'))[
|
||
'total'] or 0
|
||
total_kill_house_requests_weight = kill_house_requests.aggregate(total=Sum('accepted_real_weight'))[
|
||
'total'] or 0
|
||
total_entered_kill_house_requests_quantity = \
|
||
entered_kill_house_requests.aggregate(total=Sum('accepted_real_quantity'))['total'] or 0
|
||
total_entered_kill_house_requests_weight = \
|
||
entered_kill_house_requests.aggregate(total=Sum('accepted_real_weight'))['total'] or 0
|
||
total_entered_kill_house_requests_carcasses = \
|
||
entered_kill_house_requests.aggregate(total=Sum('ware_house_accepted_real_quantity'))['total'] or 0
|
||
total_entered_kill_house_requests_carcasses_weight = \
|
||
entered_kill_house_requests.aggregate(total=Sum('ware_house_accepted_real_weight'))['total'] or 0
|
||
total_not_entered_kill_house_requests_quantity = \
|
||
not_entered_kill_house_requests.aggregate(total=Sum('accepted_real_quantity'))['total'] or 0
|
||
total_not_entered_kill_house_requests_weight = \
|
||
not_entered_kill_house_requests.aggregate(total=Sum('accepted_real_weight'))['total'] or 0
|
||
|
||
result = {
|
||
"total_bars": len(kill_house_requests),
|
||
"total_bars_quantity": total_kill_house_requests_quantity,
|
||
"total_bars_weight": total_kill_house_requests_weight,
|
||
"total_entered_bars": len(entered_kill_house_requests),
|
||
"total_entered_bars_quantity": total_entered_kill_house_requests_quantity,
|
||
"total_entered_bars_weight": total_entered_kill_house_requests_weight,
|
||
"total_entered_bars_carcasses": total_entered_kill_house_requests_carcasses,
|
||
"total_entered_bars_carcasses_weight": total_entered_kill_house_requests_carcasses_weight,
|
||
"total_not_entered_bars": len(not_entered_kill_house_requests),
|
||
"total_not_entered_bars_quantity": total_not_entered_kill_house_requests_quantity,
|
||
"total_not_entered_kill_house_requests_weight": total_not_entered_kill_house_requests_weight,
|
||
}
|
||
|
||
return Response(result, status=status.HTTP_200_OK)
|
||
|
||
|
||
class BarDifferenceRequestViewSet(viewsets.ModelViewSet):
|
||
queryset = BarDifferenceRequest.objects.all()
|
||
serializer_class = BarDifferenceRequestSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
pagination_class = CustomPagination
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = BarDifferenceRequestFilterSet
|
||
filterset_fields = [
|
||
'kill_house__kill_house_operator__user__fullname',
|
||
'kill_house__kill_house_operator__user__mobile',
|
||
'hatching__poultry__user__fullname',
|
||
'hatching__poultry__user__mobile'
|
||
]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
role = request.GET.get('role')
|
||
state = request.GET.get('state')
|
||
date1 = request.GET.get('date1')
|
||
date2 = request.GET.get('date2')
|
||
filters = {
|
||
'trash': False,
|
||
}
|
||
if role == 'KillHouse':
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).select_related(
|
||
'system_address__province').first()
|
||
filters['kill_house'] = kill_house
|
||
if state == 'pending':
|
||
filters['state'] = 'pending'
|
||
else:
|
||
filters['state__in'] = ('accepted', 'rejected')
|
||
|
||
if date1:
|
||
filters['create_date__date__gte'] = date1
|
||
filters['create_date__date__lte'] = date2
|
||
|
||
bar_requests = BarDifferenceRequest.objects.filter(**filters).order_by('-id')
|
||
|
||
if 'search' in request.GET:
|
||
bar_requests_list = []
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=bar_requests
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=bar_requests)
|
||
bar_requests_list = ps.filter()
|
||
bar_requests = [] if len(bar_requests_list) == 0 else bar_requests_list
|
||
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(bar_requests)
|
||
if page is not None:
|
||
serializer = self.serializer_class(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = self.serializer_class(bar_requests, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
def create(self, request, *args, **kwargs):
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
hatching = PoultryHatching.objects.get(key=request.data['hatching_key'], trash=False)
|
||
kill_house = KillHouse.objects.get(key=request.data['kill_house_key'], trash=False)
|
||
images = None
|
||
acceptor_images = None
|
||
request.data.pop('hatching_key')
|
||
request.data.pop('kill_house_key')
|
||
if 'images' in request.data.keys():
|
||
images = request.data['images']
|
||
request.data.pop('images')
|
||
|
||
if 'acceptor_images' in request.data.keys():
|
||
acceptor_images = request.data['acceptor_images']
|
||
request.data.pop('acceptor_images')
|
||
image_list = []
|
||
acceptor_image_list = []
|
||
serializer = self.serializer_class(data=request.data)
|
||
if serializer.is_valid():
|
||
bar_request = serializer.create(validated_data=request.data)
|
||
bar_request.hatching = hatching
|
||
bar_request.kill_house = kill_house
|
||
bar_request.register_fullname = user.fullname
|
||
bar_request.register_mobile = user.mobile
|
||
bar_request.weight = int(bar_request.quantity) * bar_request.hatching.poultry.real_killing_ave_weight
|
||
|
||
if images != None:
|
||
for image in images:
|
||
image_list.append(send_image_to_server(image))
|
||
|
||
bar_request.violation_image = image_list
|
||
|
||
if acceptor_images != None:
|
||
for acceptor_image in acceptor_images:
|
||
acceptor_image_list.append(send_image_to_server(acceptor_image))
|
||
|
||
bar_request.acceptor_image = acceptor_image_list
|
||
|
||
bar_request.save()
|
||
send_sms_for_bar_difference_request(kill_house.kill_house_operator.user.mobile, request.data['quantity'],
|
||
hatching.poultry.unit_name)
|
||
send_ticket_for_bar_difference_request(user, kill_house.kill_house_operator.user, request.data['quantity'],
|
||
hatching.poultry.unit_name)
|
||
serializer_request = self.serializer_class(bar_request)
|
||
return Response(serializer_request.data, status=status.HTTP_201_CREATED)
|
||
return Response(serializer.errors)
|
||
|
||
def update(self, request, pk=None, *args, **kwargs):
|
||
bar_request = BarDifferenceRequest.objects.get(key=request.data['bar_key'])
|
||
request.data.pop('bar_key')
|
||
if 'kill_house_check' in request.data.keys():
|
||
request.data.pop('kill_house_check')
|
||
if request.data['state'] == 'accepted':
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
bar_request.acceptor_fullname = user.fullname
|
||
bar_request.acceptor_mobile = user.mobile
|
||
bar_request.acceptor_date = datetime.now()
|
||
# bar_request.weight = bar_request.quantity * bar_request.hatching.poultry.real_killing_ave_weight
|
||
bar_request.hatching.bar_difference_request_quantity += bar_request.quantity
|
||
bar_request.hatching.bar_difference_request_weight += bar_request.weight
|
||
bar_request.hatching.save()
|
||
bar_request.save()
|
||
|
||
if 'images' in request.data.keys():
|
||
images = request.data['images']
|
||
request.data.pop('images')
|
||
image_list = []
|
||
if images != None:
|
||
for image in images:
|
||
image_list.append(send_image_to_server(image))
|
||
|
||
bar_request.violation_image = image_list
|
||
if 'acceptor_images' in request.data.keys():
|
||
acceptor_images = request.data['acceptor_images']
|
||
request.data.pop('acceptor_images')
|
||
acceptor_images_list = []
|
||
if acceptor_images != None:
|
||
for acceptor_image in acceptor_images:
|
||
acceptor_images_list.append(send_image_to_server(acceptor_image))
|
||
|
||
bar_request.acceptor_image = acceptor_images_list
|
||
serializer = self.serializer_class(bar_request)
|
||
serializer.update(instance=bar_request, validated_data=request.data)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
def destroy(self, request, pk=None, *args, **kwargs):
|
||
bar_request = BarDifferenceRequest.objects.get(key=request.GET['bar_key'], trash=False)
|
||
if bar_request.state == 'accepted':
|
||
bar_request.hatching.bar_difference_request_quantity -= bar_request.quantity
|
||
bar_request.hatching.bar_difference_request_weight -= bar_request.weight
|
||
bar_request.hatching.save()
|
||
bar_request.trash = True
|
||
bar_request.save()
|
||
return Response({"result": "با موفقیت حذف شد."},
|
||
status=status.HTTP_200_OK)
|
||
|
||
|
||
@api_view(["GET"])
|
||
@csrf_exempt
|
||
@permission_classes([AllowAny])
|
||
def get_hatching_kill_ingo(request):
|
||
hatching = PoultryHatching.objects.get(key=request.GET['hatching_key'])
|
||
kill_house = KillHouse.objects.get(key=request.GET['kill_house_key'])
|
||
|
||
total_quantity = 0
|
||
total_weight = 0
|
||
Province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user=kill_house, trash=False,
|
||
state__in=('pending', 'accepted'),
|
||
return_to_province=False,
|
||
province_request__poultry_request__hatching=hatching)
|
||
first_total_quantity = \
|
||
Province_kill_requests.aggregate(total=Sum('main_quantity'))[
|
||
'total'] or 0
|
||
|
||
total_quantity = \
|
||
Province_kill_requests.aggregate(total=Sum('total_killed_quantity'))[
|
||
'total'] or 0
|
||
total_weight = \
|
||
Province_kill_requests.aggregate(total=Sum('total_killed_weight'))[
|
||
'total'] or 0
|
||
|
||
difference_quantity = first_total_quantity - total_quantity
|
||
# kill_house_requests = KillHouseRequest.objects.filter(Q(killhouse_user=obj.kill_house) | Q(killer=obj.kill_house),trash=False,
|
||
# province_request__poultry_request__hatching=obj.hatching)
|
||
#
|
||
#
|
||
# total_quantity +=\
|
||
# kill_house_requests.aggregate(total=Sum('accepted_real_quantity'))[
|
||
# 'total'] or 0
|
||
# total_weight +=\
|
||
# kill_house_requests.aggregate(total=Sum('accepted_real_weight'))[
|
||
# 'total'] or 0
|
||
|
||
result = {
|
||
"first_total_quantity": first_total_quantity,
|
||
"total_quantity": total_quantity,
|
||
"difference_quantity": difference_quantity,
|
||
"total_weight": total_weight,
|
||
}
|
||
|
||
return Response(result,
|
||
status=status.HTTP_200_OK)
|
||
|
||
|
||
@api_view(["GET"])
|
||
@csrf_exempt
|
||
@permission_classes([TokenHasReadWriteScope])
|
||
def dashboard_monitoring_bar_and_killing(request):
|
||
now = datetime.now().date()
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date() if 'date1' in request.GET else now
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date() if 'date1' in request.GET else now
|
||
kill_house_free_bar = KillHouseFreeBarInformation.objects.filter(Q(date__date__gte=date1,
|
||
date__date__lte=date2,
|
||
buy_type='carcass') | Q(
|
||
create_date__date__gte=date1, create_date__date__lte=date2, buy_type='live'),
|
||
trash=False,
|
||
archive_wage=False,
|
||
).only(
|
||
'quantity',
|
||
'live_weight',
|
||
'number_of_carcasses',
|
||
'weight_of_carcasses',
|
||
'send_date',
|
||
'type',
|
||
'out'
|
||
)
|
||
|
||
kill_house_free_bar_aggregates = kill_house_free_bar.aggregate(
|
||
total_quantity_live=Sum('quantity', filter=Q(buy_type='live')),
|
||
total_weight_live=Sum('live_weight', filter=Q(buy_type='live')),
|
||
total_count=Count('id', filter=Q(buy_type='live')),
|
||
total_weight=Sum('weight_of_carcasses', filter=Q(buy_type='live')),
|
||
total_count_carcass=Count('id', filter=Q(buy_type='carcass')),
|
||
total_weight_carcass=Sum('weight_of_carcasses', filter=Q(buy_type='carcass')),
|
||
total_quantity_carcass=Sum('number_of_carcasses', filter=Q(buy_type='carcass')),
|
||
|
||
)
|
||
|
||
if kill_house_free_bar_aggregates['total_quantity_live'] != 0:
|
||
ratio = round(
|
||
((kill_house_free_bar_aggregates['total_weight_live'] or 0) / (
|
||
kill_house_free_bar_aggregates['total_quantity_live']
|
||
or 0))
|
||
, 1) if (kill_house_free_bar_aggregates['total_quantity_live'] or 0) > 0 else 0
|
||
else:
|
||
ratio = 0
|
||
|
||
province_kill_request = ProvinceKillRequest.objects.filter(state__in=('pending', 'accepted'),
|
||
wage_pay=False,
|
||
archive_wage=False,
|
||
return_to_province=False,
|
||
trash=False,
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2). \
|
||
select_related('province_request__poultry_request').only(
|
||
'total_killed_quantity',
|
||
'province_request__poultry_request__Index_weight',
|
||
)
|
||
|
||
province_kill_request_aggregates = province_kill_request.aggregate(
|
||
total_count=Count('id', filter=Q(first_car_allocated_quantity=0)),
|
||
total_quantity=Sum('total_killed_quantity', filter=Q(first_car_allocated_quantity=0)),
|
||
total_index_weight=Avg('province_request__poultry_request__Index_weight',
|
||
filter=Q(first_car_allocated_quantity=0)),
|
||
total_count_new=Count('id'),
|
||
total_quantity_new=Sum('total_killed_quantity'),
|
||
total_weight_new=Sum('total_killed_weight'),
|
||
total_index_weight_new=Avg('province_request__poultry_request__Index_weight'),
|
||
|
||
)
|
||
|
||
poultry_request = PoultryRequest.objects.filter(
|
||
trash=False,
|
||
state_process__in=('pending', 'accepted'),
|
||
province_state__in=('pending', 'accepted'),
|
||
out_province_request_cancel=False,
|
||
temporary_trash=False,
|
||
temporary_deleted=False, send_date__date__gte=date1,
|
||
send_date__date__lte=date2
|
||
).only(
|
||
'quantity',
|
||
'Index_weight',
|
||
).annotate(
|
||
item_weight=F('Index_weight') * F('quantity')
|
||
)
|
||
|
||
poultry_request_aggregates = poultry_request.aggregate(
|
||
total_count=Count('id', filter=Q(out=True)),
|
||
total_quantity=Sum('quantity', filter=Q(out=True)),
|
||
total_ave_weight=Avg('Index_weight', filter=Q(out=True)),
|
||
total_weight=Sum('item_weight', filter=Q(out=True)),
|
||
total_count_killing=Count('id'),
|
||
total_quantity_killing=Sum('quantity'),
|
||
total_ave_weight_killing=Avg('Index_weight'),
|
||
total_weight_killing=Sum('item_weight')
|
||
)
|
||
|
||
kill_house_request = KillHouseRequest.objects.filter(
|
||
trash=False,
|
||
temporary_trash=False,
|
||
temporary_deleted=False, kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2
|
||
).select_related('province_kill_request__province_request__poultry_request__Index_weight').only(
|
||
'quantity',
|
||
'province_kill_request__province_request__poultry_request__Index_weight',
|
||
'accepted_real_weight',
|
||
'accepted_real_quantity',
|
||
)
|
||
|
||
kill_house_request_aggregates = kill_house_request.aggregate(
|
||
total_count=Count('id'),
|
||
total_quantity=Sum('accepted_real_quantity'),
|
||
total_quantity_has_quarantine=Sum('accepted_real_quantity', filter=Q(quarantine_quantity__gt=0)),
|
||
total_count_has_quarantine=Count('id', filter=Q(quarantine_quantity__gt=0)),
|
||
total_weight=Sum('accepted_real_weight'),
|
||
total_ave_weight=Avg('province_kill_request__province_request__poultry_request__Index_weight'),
|
||
total_ave_age=Avg('province_kill_request__province_request__poultry_request__hatching__chicken_age'),
|
||
total_quarantine=Count('id', filter=Q(quarantine_quantity__gt=0)),
|
||
total_quarantine_quantity=Sum('quarantine_quantity', filter=Q(quarantine_quantity__gt=0)),
|
||
total_quarantine_discharge_confirmation=Count('id', filter=Q(quarantine_quantity__gt=0,
|
||
assignment_state_archive='True')),
|
||
total_quarantine_discharge_confirmation_quantity=Sum('accepted_real_quantity',
|
||
filter=Q(quarantine_quantity__gt=0,
|
||
assignment_state_archive='True')),
|
||
|
||
)
|
||
|
||
province_request_count = province_kill_request_aggregates['total_count_new'] or 0
|
||
province_request_quantity = province_kill_request_aggregates['total_quantity_new'] or 0
|
||
province_request_weight = province_kill_request_aggregates['total_weight_new'] or 0
|
||
total_free_sell_count = kill_house_free_bar_aggregates['total_count'] or 0
|
||
total_free_sell_quantity = kill_house_free_bar_aggregates['total_quantity_live'] or 0
|
||
total_free_sell_weight = kill_house_free_bar_aggregates['total_weight_live'] or 0
|
||
avgWeight = round(
|
||
(province_request_weight + total_free_sell_weight) / (province_request_quantity + total_free_sell_quantity),
|
||
1) if (province_request_quantity + total_free_sell_quantity) > 0 else 0
|
||
|
||
result_dict = {
|
||
'freeLiveBar': {
|
||
'count': kill_house_free_bar_aggregates['total_count'] or 0,
|
||
'quantity': kill_house_free_bar_aggregates['total_quantity_live'] or 0,
|
||
'weight': kill_house_free_bar_aggregates['total_weight_live'] or 0,
|
||
'weightCarcass': kill_house_free_bar_aggregates['total_weight_carcass'] or 0,
|
||
'avgWeight': ratio,
|
||
},
|
||
'provinceKillRequestWithoutBar': {
|
||
'count': province_kill_request_aggregates['total_count'] or 0,
|
||
'quantity': province_kill_request_aggregates['total_quantity'] or 0,
|
||
'indexWeight': round((province_kill_request_aggregates['total_index_weight'] or 0), 1),
|
||
},
|
||
'outLiveBar': {
|
||
'count': poultry_request_aggregates['total_count'] or 0,
|
||
'quantity': poultry_request_aggregates['total_quantity'] or 0,
|
||
'weight': poultry_request_aggregates['total_weight'] or 0,
|
||
'avgWeight': round((poultry_request_aggregates['total_ave_weight'] or 0), 1),
|
||
|
||
},
|
||
'bar': {
|
||
'count': kill_house_request_aggregates['total_count'] or 0,
|
||
'count_has_quarantine': kill_house_request_aggregates['total_count_has_quarantine'] or 0,
|
||
'quantity': kill_house_request_aggregates['total_quantity'] or 0,
|
||
'quantity_has_quarantine': kill_house_request_aggregates['total_quantity_has_quarantine'] or 0,
|
||
'weight': kill_house_request_aggregates['total_weight'] or 0,
|
||
'avgWeight': round((kill_house_request_aggregates['total_ave_weight'] or 0), 1),
|
||
'avgAge': int(kill_house_request_aggregates['total_ave_age'] or 0),
|
||
|
||
'total_quarantine': kill_house_request_aggregates['total_quarantine'] or 0,
|
||
'total_quarantine_quantity': kill_house_request_aggregates['total_quarantine_quantity'] or 0,
|
||
'total_quarantine_discharge_confirmation': kill_house_request_aggregates[
|
||
'total_quarantine_discharge_confirmation'] or 0,
|
||
'total_quarantine_discharge_confirmation_quantity': kill_house_request_aggregates[
|
||
'total_quarantine_discharge_confirmation_quantity'] or 0,
|
||
|
||
},
|
||
'killingInfo': {
|
||
'count': province_request_count + total_free_sell_count,
|
||
'quantity': province_request_quantity + total_free_sell_quantity,
|
||
'weight': province_request_weight + total_free_sell_weight,
|
||
'avgWeight': avgWeight,
|
||
},
|
||
'buyFreeCarcasses': {
|
||
'count': kill_house_free_bar_aggregates['total_count_carcass'] or 0,
|
||
'quantity': kill_house_free_bar_aggregates['total_quantity_carcass'] or 0,
|
||
'weight': kill_house_free_bar_aggregates['total_weight_carcass'] or 0,
|
||
}
|
||
|
||
}
|
||
return Response(result_dict, status=status.HTTP_200_OK)
|
||
|
||
|
||
@api_view(["GET"])
|
||
@csrf_exempt
|
||
@permission_classes([TokenHasReadWriteScope])
|
||
def dashboarad_bar_for_kill_house(request):
|
||
filterset_class = KillHouseRequestFilterSet
|
||
filterset_fields = [
|
||
'killhouse_user__kill_house_operator__user__fullname',
|
||
'killhouse_user__kill_house_operator__user__mobile',
|
||
'province_request__poultry_request__poultry__user__fullname',
|
||
'province_request__poultry_request__poultry__user__mobile',
|
||
'province_request__poultry_request__order_code',
|
||
'province_request__poultry_request__order_code',
|
||
'bar_code',
|
||
]
|
||
user = SystemUserProfile.objects.get(user=request.user)
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).first()
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
(Q(killhouse_user=kill_house) | Q(
|
||
kill_request__slaughter_house=kill_house) | Q(killer=kill_house)),
|
||
(Q(trash=False) | Q(trash=True, clearance_code__isnull=False, temporary_trash=False,
|
||
temporary_deleted=False)),
|
||
|
||
province_request__poultry_request__poultry__address__province=user.province,
|
||
).select_related('kill_request')
|
||
if 'date1' in request.GET and 'date2' in request.GET:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
kill_house_requests = kill_house_requests.filter(
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2)
|
||
|
||
if 'search' in request.GET:
|
||
kill_house_request_list = []
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
|
||
for item in filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (filterset_class(
|
||
data=query,
|
||
queryset=kill_house_requests
|
||
)
|
||
).filter():
|
||
ps = filterset_class(data=query, queryset=kill_house_requests)
|
||
kill_house_request_list = ps.filter()
|
||
kill_house_requests = [] if len(kill_house_request_list) == 0 else kill_house_request_list
|
||
kill_house_requests_aggregate = kill_house_requests.aggregate(
|
||
first_quantity=Sum('quantity'),
|
||
first_weight=Sum('quantity') * Avg('province_request__poultry_request__Index_weight'),
|
||
first_index_weight=Avg('province_request__poultry_request__Index_weight'),
|
||
accepted_real_quantity=Sum('accepted_real_quantity'),
|
||
accepted_real_weight=Sum('accepted_real_weight'),
|
||
assignment_state_archive_pending=Count('id', filter=Q(assignment_state_archive='pending')),
|
||
assignment_state_archive_accepted=Count('id', filter=Q(assignment_state_archive='accepted')),
|
||
clearance_code_count=Count('id', filter=Q(clearance_code__isnull=False)),
|
||
|
||
)
|
||
|
||
result_dict = {
|
||
'count': kill_house_requests.count(),
|
||
'firstQuantity': kill_house_requests_aggregate['first_quantity'] or 0,
|
||
'firstWeight': int(kill_house_requests_aggregate['first_weight'] or 0),
|
||
'firstIndexWeight': round((kill_house_requests_aggregate['first_index_weight'] or 0), 1),
|
||
'acceptedRealQuantity': kill_house_requests_aggregate['accepted_real_quantity'] or 0,
|
||
'acceptedRealWeight': int(kill_house_requests_aggregate['accepted_real_weight'] or 0),
|
||
'finalIndexWeight': round((kill_house_requests_aggregate['accepted_real_weight'] or 0) /
|
||
(kill_house_requests_aggregate['accepted_real_quantity'] or 0), 1)
|
||
if (kill_house_requests_aggregate['accepted_real_quantity'] or 0) > 0 else 0,
|
||
'assignmentStateArchivePending': kill_house_requests_aggregate['assignment_state_archive_pending'] or 0,
|
||
'assignmentStateArchiveAccepted': kill_house_requests_aggregate['assignment_state_archive_accepted'] or 0,
|
||
'clearanceCodeCount': kill_house_requests_aggregate['clearance_code_count'] or 0,
|
||
|
||
}
|
||
return Response(result_dict, status=status.HTTP_200_OK)
|
||
|
||
|
||
@api_view(["GET"])
|
||
@csrf_exempt
|
||
@permission_classes([TokenHasReadWriteScope])
|
||
def dashboard_bar_difference_request(request):
|
||
filterset_class = BarDifferenceRequestFilterSet
|
||
filterset_fields = [
|
||
'kill_house__kill_house_operator__user__fullname',
|
||
'kill_house__kill_house_operator__user__mobile',
|
||
'hatching__poultry__user__fullname',
|
||
'hatching__poultry__user__mobile'
|
||
]
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
# if request.GET['role'] == 'KillHouse':
|
||
# kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).select_related(
|
||
# 'system_address__province').first()
|
||
# if request.GET['state'] == 'pending':
|
||
# bar_requests = BarDifferenceRequest.objects.filter(kill_house=kill_house, trash=False,
|
||
# state='pending').order_by('id')
|
||
# else:
|
||
# bar_requests = BarDifferenceRequest.objects.filter(kill_house=kill_house, trash=False,
|
||
# state__in=('accepted', 'rejected')).order_by('id')
|
||
# else:
|
||
# if request.GET['state'] == 'pending':
|
||
# bar_requests = BarDifferenceRequest.objects.filter(trash=False, state='pending').order_by('id')
|
||
# else:
|
||
# bar_requests = BarDifferenceRequest.objects.filter(trash=False,
|
||
# state__in=('accepted', 'rejected')).order_by('id')
|
||
|
||
role = request.GET.get('role')
|
||
state = request.GET.get('state')
|
||
date1 = request.GET.get('date1')
|
||
date2 = request.GET.get('date2')
|
||
filters = {
|
||
'trash': False,
|
||
}
|
||
if role == 'KillHouse':
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).select_related(
|
||
'system_address__province').first()
|
||
filters['kill_house'] = kill_house
|
||
if state == 'pending':
|
||
filters['state'] = 'pending'
|
||
else:
|
||
filters['state__in'] = ('accepted', 'rejected')
|
||
|
||
if date1:
|
||
filters['create_date__date__gte'] = date1
|
||
filters['create_date__date__lte'] = date2
|
||
|
||
bar_requests = BarDifferenceRequest.objects.filter(**filters).order_by('-id')
|
||
|
||
if 'search' in request.GET:
|
||
bar_requests_list = []
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
|
||
for item in filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (filterset_class(
|
||
data=query,
|
||
queryset=bar_requests
|
||
)
|
||
).filter():
|
||
ps = filterset_class(data=query, queryset=bar_requests)
|
||
bar_requests_list = ps.filter()
|
||
bar_requests = [] if len(bar_requests_list) == 0 else bar_requests_list
|
||
|
||
serializer = BarDifferenceRequestSerializer(bar_requests, many=True)
|
||
|
||
bar_info_list = [item['bar_info'] for item in serializer.data]
|
||
|
||
difference_quantity = sum(item["first_total_quantity"] for item in bar_info_list) - \
|
||
sum(item["total_quantity"] for item in bar_info_list)
|
||
|
||
bar_requests_aggregate = bar_requests.aggregate(
|
||
count=Count('id'),
|
||
weight=Sum('weight'),
|
||
quantity=Sum('quantity'),
|
||
)
|
||
|
||
result_dict = {
|
||
'count': bar_requests_aggregate['count'] or 0,
|
||
'weight': bar_requests_aggregate['weight'] or 0,
|
||
'quantity': bar_requests_aggregate['quantity'] or 0,
|
||
"firstTotalQuantity": sum(item["first_total_quantity"] for item in bar_info_list),
|
||
"totalQuantity": sum(item["total_quantity"] for item in bar_info_list),
|
||
"differenceQuantity": difference_quantity,
|
||
"totalWeight": sum(item["total_weight"] for item in bar_info_list),
|
||
}
|
||
|
||
return Response(result_dict, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHousePerformanceDashboardViewSet(APIView):
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def get(self, request):
|
||
date1 = request.GET.get('date1')
|
||
date2 = request.GET.get('date2')
|
||
kill_house_ids = KillHousePercentage.objects.filter(kill_house__type='exclusive', trash=False).values_list(
|
||
'kill_house', flat=True)
|
||
kill_houses = KillHouse.objects.filter(out_province=False, trash=False).exclude(id__in=kill_house_ids).order_by(
|
||
'id')
|
||
|
||
serializer = KillHouseForPerformanceDashboardSerializer(kill_houses, many=True,
|
||
context={'date1': date1, 'date2': date2, })
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class NonReceiptKillHouseRequestViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseRequest.objects.all()
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
serializer_class = KillHouseRequestForBarManagementSerializer
|
||
pagination_class = CustomPagination
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = KillHouseRequestFilterSet
|
||
filterset_fields = [
|
||
'killhouse_user__kill_house_operator__user__fullname',
|
||
'killhouse_user__kill_house_operator__user__mobile',
|
||
'province_request__poultry_request__poultry__user__fullname',
|
||
'province_request__poultry_request__poultry__user__mobile',
|
||
'province_request__poultry_request__order_code',
|
||
'province_request__poultry_request__order_code',
|
||
'bar_code',
|
||
]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
user = SystemUserProfile.objects.get(user=request.user)
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
kill_house = []
|
||
kill_house_requests_list = []
|
||
if request.GET['role'] == 'KillHouse':
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False)
|
||
|
||
elif request.GET['role'] == 'KillHouseVet':
|
||
kill_house_vets = KillHouseVet.objects.filter(vet__user=user, trash=False).select_related('kill_house')
|
||
for kill_house_vet in kill_house_vets:
|
||
kill_house.append(kill_house_vet.kill_house)
|
||
|
||
else:
|
||
kill_house = KillHouse.objects.filter(system_address__province=user.province, trash=False)
|
||
|
||
if request.GET['role'] in ['CityOperator', 'CityJahad', 'CityPoultry']:
|
||
if request.GET['role'] == 'CityOperator':
|
||
city_operator = CityOperator.objects.get(user=user, trash=False)
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
(Q(killhouse_user__in=kill_house) | Q(kill_request__slaughter_house__in=kill_house)),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
main_non_receipt=True,
|
||
non_receipt=True,
|
||
province_request__poultry_request__poultry__city_operator=city_operator.unit_name,
|
||
|
||
).order_by('-kill_request__recive_date')
|
||
else:
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
(Q(killhouse_user__in=kill_house) | Q(kill_request__slaughter_house__in=kill_house)),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
main_non_receipt=True,
|
||
non_receipt=True,
|
||
province_request__poultry_request__poultry__address__city=user.city
|
||
|
||
).order_by('-kill_request__recive_date')
|
||
|
||
else:
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
(Q(killhouse_user__in=kill_house) | Q(kill_request__slaughter_house__in=kill_house) | Q(
|
||
killer__in=kill_house)),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2,
|
||
main_non_receipt=True,
|
||
non_receipt=True
|
||
|
||
).order_by('-kill_request__recive_date')
|
||
|
||
if 'search' in request.GET:
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=kill_house_requests
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=kill_house_requests)
|
||
kill_house_requests_list = ps.filter()
|
||
kill_house_requests = [] if len(kill_house_requests_list) == 0 else kill_house_requests_list
|
||
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(kill_house_requests)
|
||
if page is not None:
|
||
serializer = self.serializer_class(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = self.serializer_class(kill_house_requests, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
def update(self, request, *args, **kwargs):
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
now = datetime.now()
|
||
role = request.data.get('role')
|
||
message = request.data.get('message')
|
||
state = request.data.get('state')
|
||
key = request.data.get('key')
|
||
kill_house_request = KillHouseRequest.objects.get(key=key)
|
||
if kill_house_request.assignment_state_archive == 'True':
|
||
return Response({"result": "به دلیل وارد کردن اطلاعات بار امکان ثبت عدم وصول وجود ندارد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
kill_house_request.non_receipt_state = state
|
||
kill_house_request.message = message
|
||
kill_house_request.bar_remover = {
|
||
"full_name": user.fullname,
|
||
"role": role,
|
||
"mobile": user.mobile,
|
||
"date": str(now)
|
||
}
|
||
kill_house_request.trash = True if state == 'accepted' else False
|
||
kill_house_request.save()
|
||
if state == 'accepted':
|
||
update_kill_house_requests(kill_house_request.province_kill_request,
|
||
kill_house_request.province_request.poultry_request)
|
||
update_province_kill_requests(kill_house_request.province_request.poultry_request.hatching)
|
||
|
||
return Response({"result": "با موفقیت انجام شد."}, status=status.HTTP_200_OK)
|
||
|
||
|
||
class ReturnNonReceiptKillHouseRequestViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseRequest.objects.all()
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
serializer_class = KillHouseRequestForBarManagementSerializer
|
||
|
||
def update(self, request, *args, **kwargs):
|
||
key = request.data.get('key')
|
||
kill_house_request = KillHouseRequest.objects.get(key=key)
|
||
trash = kill_house_request.trash
|
||
if kill_house_request.non_receipt_return:
|
||
return Response({"result": "عدم وصول برای این بار قبلا ثبت و لغو گردیده!"})
|
||
kill_house_request.trash = False
|
||
kill_house_request.non_receipt = request.data['non_receipt']
|
||
kill_house_request.non_receipt_return = request.data['non_receipt_return']
|
||
kill_house_request.non_receipt_return_message = request.data['non_receipt_return_message']
|
||
kill_house_request.save()
|
||
if trash:
|
||
update_kill_house_requests(kill_house_request.province_kill_request,
|
||
kill_house_request.province_request.poultry_request)
|
||
update_province_kill_requests(kill_house_request.province_request.poultry_request.hatching)
|
||
|
||
return Response({"result": "با موفقیت ثبت شد"}, status=status.HTTP_200_OK)
|
||
|
||
|
||
class DirectBuyingPaymentViewSet(viewsets.ModelViewSet):
|
||
queryset = DirectBuyingPayment.objects.all()
|
||
serializer_class = DirectBuyingPaymentSerializer
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
pagination_class = CustomPagination
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = DirectBuyingPaymentFilterSet
|
||
filterset_fields = [
|
||
|
||
'province_kill_request__kill_request__kill_house__name',
|
||
'province_kill_request__kill_request__kill_house__kill_house_operator__user__fullname',
|
||
'province_kill_request__kill_request__kill_house__kill_house_operator__user__first_name',
|
||
'province_kill_request__kill_request__kill_house__kill_house_operator__user__last_name',
|
||
'province_kill_request__kill_request__kill_house__kill_house_operator__user__mobile',
|
||
|
||
]
|
||
|
||
def create(self, request, *args, **kwargs):
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
province_kill_request = ProvinceKillRequest.objects.get(key=request.data['province_kill_request_key'])
|
||
now = datetime.now()
|
||
image = request.data.pop('image', None)
|
||
request.data.pop('province_kill_request_key')
|
||
serializer = self.serializer_class(data=request.data)
|
||
if serializer.is_valid():
|
||
payment = serializer.create(validated_data=request.data)
|
||
payment.province_kill_request = province_kill_request
|
||
payment.date = now
|
||
payment.payment_registrar = user.fullname
|
||
payment.payment_registrar_mobile = user.mobile
|
||
payment.image = send_image_to_server(image)
|
||
payment.save()
|
||
|
||
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
province_kill_request = ProvinceKillRequest.objects.get(key=request.GET['province_kill_request_key'])
|
||
filter = {'trash': False, 'province_kill_request': province_kill_request}
|
||
date1 = request.GET.get('date1')
|
||
date2 = request.GET.get('date2')
|
||
if date1:
|
||
filter['date1'] = datetime.strptime(str(date1), '%Y-%m-%d').date()
|
||
filter['date2'] = datetime.strptime(str(date2), '%Y-%m-%d').date()
|
||
payments = DirectBuyingPayment.objects.filter(**filter)
|
||
|
||
if 'search' in request.GET:
|
||
payments_list = []
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=payments
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=payments)
|
||
payments_list = ps.filter()
|
||
payments = [] if len(
|
||
payments_list) == 0 else payments_list
|
||
|
||
if request.GET.get('page'):
|
||
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(payments)
|
||
if page is not None:
|
||
serializer = self.serializer_class(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = self.serializer_class(payments, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
def update(self, request, pk=None, *args, **kwargs):
|
||
payment = DirectBuyingPayment.objects.get(key=request.data['key'])
|
||
image = request.data.pop('image', None)
|
||
if image:
|
||
payment.image = send_image_to_server(image)
|
||
payment.save()
|
||
serializer = self.serializer_class(payment)
|
||
serializer.update(instance=payment, validated_data=request.data)
|
||
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
def destroy(self, request, pk=None, *args, **kwargs):
|
||
payment = DirectBuyingPayment.objects.get(key=request.GET['key'])
|
||
payment.trash = True
|
||
payment.save()
|
||
return Response({"result": "بار با موفقیت حذف شد !"}, status=status.HTTP_200_OK)
|
||
|
||
|
||
class ProvinceKillRequestDirectBuyingViewSet(viewsets.ModelViewSet):
|
||
queryset = ProvinceKillRequest.objects.all()
|
||
serializer_class = ProvinceKillRequestForDirectBuyingSerializer
|
||
pagination_class = CustomPagination
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = ProvinceKillRequestFilterSet
|
||
filterset_fields = [
|
||
'province_request__poultry_request__chicken_breed',
|
||
'province_request__poultry_request__order_code',
|
||
'province_request__poultry_request__poultry__address__city__name',
|
||
'province_request__poultry_request__poultry__user__mobile',
|
||
'province_request__poultry_request__poultry__user__fullname',
|
||
|
||
]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
date1 = request.GET.get('date1')
|
||
date2 = request.GET.get('date2')
|
||
role = request.GET.get('role')
|
||
state = request.GET.get('status')
|
||
filter = {
|
||
'trash': False,
|
||
'payment_deadline': True,
|
||
'return_to_province': False,
|
||
'payment_deadline_archive': False if state == 'active' else True,
|
||
}
|
||
if date1:
|
||
filter['kill_request__recive_date__date__gte'] = datetime.strptime(date1, '%Y-%m-%d').date()
|
||
filter['kill_request__recive_date__date__lte'] = datetime.strptime(date2, '%Y-%m-%d').date()
|
||
if role == 'KillHouse':
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user).first()
|
||
filter['killhouse_user'] = kill_house
|
||
|
||
elif role in ('CityJahad', 'CityOperator', 'CityCommerce', 'CityVet', 'CitySupervisor', 'CityPoultry'):
|
||
filter['kill_request__poultry__address__city'] = user.city
|
||
|
||
province_kill_requests = ProvinceKillRequest.objects.filter(**filter).select_related('kill_request',
|
||
'kill_request__poultry_hatching',
|
||
'kill_request__poultry').only(
|
||
'kill_request', 'kill_request__poultry_hatching', 'kill_request__poultry').order_by('payment_deadline_date')
|
||
|
||
if 'search' in request.GET:
|
||
province_kill_requests_list = []
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=province_kill_requests
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=province_kill_requests)
|
||
province_kill_requests_list = ps.filter()
|
||
province_kill_requests = [] if len(
|
||
province_kill_requests_list) == 0 else province_kill_requests_list
|
||
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(province_kill_requests)
|
||
if page is not None:
|
||
serializer = self.get_serializer(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = self.get_serializer(province_kill_requests, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
def update(self, request, pk=None, *args, **kwargs):
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
province_kill_request = ProvinceKillRequest.objects.get(key=request.data['key'])
|
||
check = request.data.pop('check', None)
|
||
archive = request.data.pop('archive', None)
|
||
if 'final_accept' in request.data.keys():
|
||
role = request.data.pop('role', None)
|
||
if request.data['final_accept'] == True:
|
||
province_kill_request.payment_deadline_state = 'checking' if role == 'KillHouse' else 'accepted'
|
||
province_kill_request.final_accept_registrar = user.fullname
|
||
province_kill_request.final_accept_registrar_mobile = user.mobile
|
||
province_kill_request.final_accept_date = datetime.now()
|
||
if role != 'KillHouse':
|
||
province_kill_request.payment_deadline_checker_fullname = user.fullname
|
||
province_kill_request.payment_deadline_checker_mobile = user.mobile
|
||
province_kill_request.payment_deadline_check_date = datetime.now()
|
||
province_kill_request.payment_deadline_archive_message = 'تایید و تسویه کامل'
|
||
province_kill_request.payment_deadline_archive = True
|
||
province_kill_request.save()
|
||
if check:
|
||
state = request.data.pop('state', None)
|
||
province_kill_request.payment_deadline_checker_fullname = user.fullname
|
||
province_kill_request.payment_deadline_checker_mobile = user.mobile
|
||
province_kill_request.payment_deadline_check_date = datetime.now()
|
||
province_kill_request.payment_deadline_archive = True if state == 'accepted' else False
|
||
province_kill_request.payment_deadline_state = state
|
||
|
||
if province_kill_request.payment_deadline_state == 'rejected':
|
||
province_kill_request.final_accept = False
|
||
if archive:
|
||
province_kill_request.payment_deadline_checker_fullname = user.fullname
|
||
province_kill_request.payment_deadline_checker_mobile = user.mobile
|
||
province_kill_request.payment_deadline_check_date = datetime.now()
|
||
province_kill_request.payment_deadline_archive = True
|
||
province_kill_request.payment_deadline_state = 'archive'
|
||
|
||
if 'extension_payment_deadline_days' in request.data.keys():
|
||
province_kill_request.extension_payment_deadline_date = province_kill_request.payment_deadline_date + timedelta(
|
||
days=request.data['extension_payment_deadline_days'])
|
||
province_kill_request.kill_request.extension_payment_deadline_days = request.data[
|
||
'extension_payment_deadline_days']
|
||
province_kill_request.kill_request.extension_payment_deadline_date = province_kill_request.extension_payment_deadline_date
|
||
province_kill_request.kill_request.save()
|
||
|
||
province_kill_request.save()
|
||
serializer = self.serializer_class(province_kill_request)
|
||
serializer.update(instance=province_kill_request, validated_data=request.data)
|
||
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class MarketKillRequestViewSet(viewsets.ModelViewSet):
|
||
queryset = KillRequest.objects.all()
|
||
serializer_class = KillRequestForDirectBuyingSerializer
|
||
pagination_class = CustomPagination
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = KillRequestFilterSet
|
||
filterset_fields = [
|
||
'kill_house__kill_house_operator__user__mobile',
|
||
'kill_house__kill_house_operator__user__fullname',
|
||
'kill_house__kill_house_operator__user__first_name',
|
||
'kill_house__kill_house_operator__user__last_name',
|
||
'poultry_request__chicken_breed',
|
||
'poultry_request__order_code',
|
||
'poultry_request__poultry__address__city__name',
|
||
'poultry_request__poultry__user__mobile',
|
||
'poultry_request__poultry__user__fullname',
|
||
|
||
]
|
||
|
||
def calculate_province_kill_request_wage(self, kill_request):
|
||
province_check = ProvinceCheckOperatorRequest.objects.get(poultry_request=kill_request.poultry_request)
|
||
|
||
wage_type = WageType.objects.filter(en_name='province-kill-request', trash=False).first()
|
||
wage = wage_type.amount if wage_type.status == True else 0
|
||
percentages_wage_type = PercentageOfWageType.objects.filter(wage_type=wage_type, percent__gt=0,
|
||
trash=False)
|
||
province_killrequest = ProvinceKillRequest(
|
||
killhouse_user=kill_request.kill_house,
|
||
kill_request=kill_request,
|
||
province_request=province_check,
|
||
quantity=kill_request.kill_capacity,
|
||
total_killed_quantity=kill_request.kill_capacity,
|
||
total_killed_weight=int(kill_request.kill_capacity * kill_request.poultry_request.Index_weight),
|
||
main_quantity=kill_request.kill_capacity,
|
||
wage=wage,
|
||
market=True,
|
||
payment_deadline=True,
|
||
payment_deadline_days=kill_request.payment_deadline_days,
|
||
payment_deadline_date=kill_request.payment_deadline_date,
|
||
state='accepted',
|
||
kill_house_price=kill_request.amount,
|
||
total_wage_amount=wage * int(kill_request.kill_capacity * kill_request.poultry_request.Index_weight),
|
||
)
|
||
province_killrequest.save()
|
||
kill_house_check = KillHouseCheckRequest(
|
||
province_kill_request=province_killrequest,
|
||
state='accepted'
|
||
)
|
||
|
||
kill_house_check.save()
|
||
vet_farm = VetFarm.objects.filter(trash=False,
|
||
poultry=province_killrequest.province_request.poultry_request.poultry).first()
|
||
bot_eitaa_for_each_province_kill_request(province_killrequest, vet_farm)
|
||
if wage_type and wage_type.status == True and percentages_wage_type:
|
||
for percentage_wage_type in percentages_wage_type:
|
||
if percentage_wage_type.share_type.en_name == 'union':
|
||
province_killrequest.union_share = int(
|
||
(percentage_wage_type.percent / 100) * province_killrequest.total_wage_amount)
|
||
province_killrequest.union_share_percent = percentage_wage_type.percent
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'company':
|
||
province_killrequest.company_share = int(
|
||
(percentage_wage_type.percent / 100) * province_killrequest.total_wage_amount)
|
||
province_killrequest.company_share_percent = percentage_wage_type.percent
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'guilds':
|
||
province_killrequest.guilds_share = int(
|
||
(percentage_wage_type.percent / 100) * province_killrequest.total_wage_amount)
|
||
province_killrequest.guilds_share_percent = percentage_wage_type.percent
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'city':
|
||
province_killrequest.city_share = int(
|
||
(percentage_wage_type.percent / 100) * province_killrequest.total_wage_amount)
|
||
province_killrequest.city_share_percent = percentage_wage_type.percent
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'other':
|
||
province_killrequest.other_share = int(
|
||
(percentage_wage_type.percent / 100) * province_killrequest.total_wage_amount)
|
||
province_killrequest.other_share_percent = percentage_wage_type.percent
|
||
|
||
elif percentage_wage_type.share_type.en_name == 'wallet':
|
||
province_killrequest.wallet_share = int(
|
||
(percentage_wage_type.percent / 100) * province_killrequest.total_wage_amount)
|
||
province_killrequest.wallet_share_percent = percentage_wage_type.percent
|
||
|
||
else:
|
||
province_killrequest.other_share = int(
|
||
(percentage_wage_type.percent / 100) * province_killrequest.total_wage_amount)
|
||
province_killrequest.other_share_percent = percentage_wage_type.percent
|
||
province_killrequest.save()
|
||
|
||
def create(self, request, *args, **kwargs):
|
||
total_unpaid_wage = 0
|
||
total_paid_wage = 0
|
||
user = SystemUserProfile.objects.get(trash=False, user=request.user)
|
||
now = datetime.now()
|
||
kill_house_ids = KillHousePercentage.objects.filter(kill_house__type='exclusive', trash=False).values_list(
|
||
'kill_house', flat=True)
|
||
kill_houses = KillHouse.objects.filter(out_province=False, market_buying=True, trash=False).exclude(
|
||
id__in=kill_house_ids).order_by('id', 'killer')
|
||
kill_house_for_killer = None
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).first()
|
||
|
||
if kill_house.ware_house_remaining_weight_limitation_status:
|
||
if kill_house.total_remain_warehouse_governmental_weight > kill_house.ware_house_remaining_weight_limitation:
|
||
return Response({
|
||
"result": "باقی مانده انبار شما از حداکثر محدودیت وزن باقی مانده انبار بیشتر است !"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
if kill_house.ware_house_remaining_percent_limitation_status:
|
||
if not check_kill_house_remain_limitation_weight(kill_house):
|
||
return Response({
|
||
"result": "باقی مانده انبار شما از حداکثر محدودیت وزن باقی مانده روزانه انبار بیشتر است !"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
with transaction.atomic():
|
||
poultry_request = PoultryRequest.objects.select_for_update().get(key=request.data['poultry_request_key'])
|
||
if poultry_request.free_sale_in_province == True:
|
||
|
||
if kill_house.quota:
|
||
kill_house_info = calculate_governmental_quota(kill_house)
|
||
if kill_house_info == 'not_allowed':
|
||
return Response({"result": " امکان خرید آزاد تا تکمیل تعهد دولتی وجود ندارد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
index_weight_category = IndexWeightCategory.objects.filter(trash=False, name='سبک').first()
|
||
light_max_value = index_weight_category.max_value if index_weight_category else 0
|
||
if kill_house.market_buying_limitation:
|
||
kill_house_info = market_kill_request_share_quantity(kill_house, total_kill_houses=kill_houses)
|
||
kill_house_share = kill_house_info['kill_house_today_share']
|
||
kill_house_buying = kill_house_info['kill_house_market_kill_requests_quantity'] + request.data[
|
||
'kill_capacity']
|
||
if kill_house.market_light_capacity:
|
||
total_remain_light_weight = kill_house_info['total_remain_poultry_requests_quantity_light_weight']
|
||
kill_house_market_kill_requests_quantity_light_weight = kill_house_info[
|
||
'kill_house_market_kill_requests_quantity_light_weight']
|
||
real_kill_house_market_kill_requests_quantity_light_weight = kill_house_info['light_real_quantity']
|
||
if poultry_request.Index_weight >= light_max_value:
|
||
if real_kill_house_market_kill_requests_quantity_light_weight > 0:
|
||
if total_remain_light_weight > real_kill_house_market_kill_requests_quantity_light_weight:
|
||
if real_kill_house_market_kill_requests_quantity_light_weight > kill_house_market_kill_requests_quantity_light_weight:
|
||
return Response({"result": "الویت با خرید و تکمیل نهایی سهمیه سبک می باشد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
else:
|
||
if total_remain_light_weight > kill_house_market_kill_requests_quantity_light_weight:
|
||
return Response({"result": "الویت با خرید و تکمیل نهایی سهمیه سبک می باشد!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
if kill_house_share - kill_house_buying < 0:
|
||
return Response({"result": "حجم خریداری شده از سهمیه شما بیشتر است !"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
kill_request = KillRequest.objects.filter(trash=False, poultry_request=poultry_request,
|
||
kill_house=kill_house,
|
||
market_final_accept=False).first()
|
||
# if poultry_request.remain_quantity < request.data['kill_capacity']:
|
||
# return Response({"result": "حجم وارد شده از باقی مانده قابل فروش بیشتر است !"},
|
||
# status=status.HTTP_403_FORBIDDEN)
|
||
market_requests_quantity = KillRequest.objects.filter(poultry_request=poultry_request, trash=False,
|
||
market_state__in=('pending', 'accepted'),
|
||
market=True).aggregate(
|
||
total=Sum('kill_capacity'))['total'] or 0
|
||
if market_requests_quantity + request.data['kill_capacity'] > poultry_request.quantity:
|
||
return Response({"result": "باقی مانده اعلام نیاز مرغدار کمتر از درخواست شماست!"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
kill_house_purchase = KillHousePurchaseRequest.objects.filter(kill_house=kill_house).first()
|
||
total_unpaid_wage = get_finance_info(kill_house)['total_price']
|
||
if kill_house.killer and kill_house.type == 'public':
|
||
|
||
slaughter_transactions = InternalTransaction.objects.filter(
|
||
kill_house=kill_house,parent_kill_house=kill_house, status='completed',
|
||
trash=False)
|
||
else:
|
||
slaughter_transactions = InternalTransaction.objects.filter(
|
||
kill_house=kill_house, status='completed',
|
||
trash=False)
|
||
|
||
total_paid_wage += slaughter_transactions.aggregate(total=Sum('amount'))[
|
||
'total'] or 0
|
||
if kill_house_purchase.limitation == True:
|
||
|
||
if kill_house_purchase.limitation_number <= total_unpaid_wage - total_paid_wage:
|
||
if not ProvinceKillRequest.objects.filter(killhouse_user=kill_house,
|
||
kill_request__recive_date__date=now.date(),
|
||
trash=False,
|
||
state__in=('pending', 'accepted')).exists():
|
||
return Response({
|
||
"result": "به علت بدهی امکان ثبت درخواست وحود ندارد لطفا بدهی خود را در پنل کارمزد ها تسویه کنید"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
|
||
if kill_request:
|
||
kill_request.kill_capacity += request.data['kill_capacity']
|
||
kill_request.remain_quantity += request.data['kill_capacity']
|
||
kill_request.save()
|
||
market_poultry_request_remain_quantity(kill_request.poultry_request)
|
||
return Response({"result": "با موفقیت ثبت شد."}, status=status.HTTP_200_OK)
|
||
request.data.pop('poultry_request_key')
|
||
if kill_house.killer and kill_house.type == 'public':
|
||
percentage = KillHousePercentage.objects.filter(trash=False, kill_house=kill_house,
|
||
kill_house_for_killer__isnull=False).first()
|
||
kill_house_for_killer = percentage.kill_house_for_killer
|
||
serializer = self.serializer_class(data=request.data)
|
||
if serializer.is_valid():
|
||
market_kill_request = serializer.create(validated_data=request.data)
|
||
market_kill_request.kill_house = kill_house
|
||
market_kill_request.poultry_request = poultry_request
|
||
market_kill_request.poultry_hatching = poultry_request.hatching
|
||
market_kill_request.poultry = poultry_request.poultry
|
||
market_kill_request.recive_date = now
|
||
market_kill_request.chicken_breed = poultry_request.chicken_breed
|
||
market_kill_request.remain_quantity = market_kill_request.kill_capacity
|
||
market_kill_request.amount = poultry_request.amount
|
||
market_kill_request.Index_weight = poultry_request.Index_weight
|
||
market_kill_request.market = True
|
||
market_kill_request.payment_deadline = True
|
||
if kill_house_for_killer:
|
||
market_kill_request.slaughter_house = kill_house_for_killer
|
||
market_kill_request.market_expire_date_time = now + timedelta(
|
||
minutes=30) if market_code_state else now + timedelta(minutes=5)
|
||
if market_code_state:
|
||
market_kill_request.market_code_status = True
|
||
market_kill_request.payment_deadline_date = datetime.now() + timedelta(
|
||
days=request.data['payment_deadline_days'])
|
||
market_kill_request.save()
|
||
market_poultry_request_remain_quantity(market_kill_request.poultry_request)
|
||
return Response(serializer.data, status=status.HTTP_201_CREATED)
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
from django.db.models import Value
|
||
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
now = datetime.now().date()
|
||
role = request.GET.get('role')
|
||
poultry_request_key = request.GET.get('poultry_request_key')
|
||
date1 = request.GET.get('date1')
|
||
date2 = request.GET.get('date2')
|
||
# filter = {
|
||
# 'trash': False,
|
||
# 'market': True,
|
||
# }
|
||
filter = {
|
||
'market': True
|
||
}
|
||
if date1:
|
||
filter['recive_date__date__gte'] = date1
|
||
filter['recive_date__date__lte'] = date2
|
||
|
||
else:
|
||
filter['recive_date__date'] = now
|
||
|
||
if role == 'KillHouse':
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user).first()
|
||
filter['kill_house'] = kill_house
|
||
|
||
elif role in ('CityJahad', 'CityOperator', 'CityCommerce', 'CityVet', 'CitySupervisor', 'CityPoultry'):
|
||
filter['poultry__address__city'] = user.city
|
||
state_type = request.GET.get('type')
|
||
|
||
if state_type and state_type != 'all':
|
||
filter['market_state'] = state_type
|
||
|
||
if state_type in ('pending', 'accepted', 'rejected'):
|
||
filter['trash'] = False
|
||
elif state_type == 'deleted':
|
||
filter['trash'] = True
|
||
|
||
if poultry_request_key:
|
||
filter['poultry_request__key'] = poultry_request_key
|
||
|
||
kill_requests = KillRequest.objects.filter(**filter).select_related('poultry_hatching', 'poultry').only(
|
||
'poultry_hatching', 'poultry').order_by(
|
||
Case(
|
||
When(market_state='pending', then=Value(0)),
|
||
default=Value(1)
|
||
),
|
||
'-create_date'
|
||
)
|
||
|
||
if 'search' in request.GET:
|
||
kill_requests_list = []
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=kill_requests
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=kill_requests)
|
||
kill_requests_list = ps.filter()
|
||
kill_requests = [] if len(
|
||
kill_requests_list) == 0 else kill_requests_list
|
||
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(kill_requests)
|
||
if page is not None:
|
||
serializer = self.get_serializer(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = self.get_serializer(kill_requests, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
def update(self, request, pk=None, *args, **kwargs):
|
||
kill_request = KillRequest.objects.get(key=request.data['key'])
|
||
if kill_request.trash:
|
||
return Response({"result": "درخواست شما توسط کاربر حذف گردید!"}, status=status.HTTP_403_FORBIDDEN)
|
||
|
||
if 'check' in request.data.keys():
|
||
state = request.data['market_state']
|
||
if state == 'accepted':
|
||
self.calculate_province_kill_request_wage(kill_request)
|
||
request.data.pop('check')
|
||
|
||
if 'market_final_accept' in request.data.keys():
|
||
# market_poultry_request_remain_quantity(kill_request.poultry_request)
|
||
poultry_request = kill_request.poultry_request
|
||
# market_requests_quantity = KillRequest.objects.filter(poultry_request=poultry_request, trash=False,
|
||
# market_state__in=('pending', 'accepted'), market=True,
|
||
# market_final_accept=True).aggregate(
|
||
# total=Sum('kill_capacity'))['total'] or 0
|
||
# if market_requests_quantity + kill_request.kill_capacity > poultry_request.quantity:
|
||
# return Response({"result": "باقی مانده اعلام نیاز مرغدار کمتر از درخواست شماست!"},
|
||
# status=status.HTTP_403_FORBIDDEN)
|
||
if market_code_state:
|
||
code = str(random.randint(10000, 99000))
|
||
kill_request.market_code = code
|
||
kill_request.save()
|
||
market_sms = threading.Thread(
|
||
target=send_sms_fro_kill_request_market,
|
||
args=(
|
||
kill_request,))
|
||
|
||
market_sms.start()
|
||
kill_request.remain_quantity -= kill_request.kill_capacity
|
||
kill_request.save()
|
||
if 'kill_capacity' in request.data.keys():
|
||
kill_house_ids = KillHousePercentage.objects.filter(kill_house__type='exclusive', trash=False).values_list(
|
||
'kill_house', flat=True)
|
||
kill_houses = KillHouse.objects.filter(out_province=False, market_buying=True, trash=False).exclude(
|
||
id__in=kill_house_ids).order_by('id', 'killer')
|
||
if kill_request.kill_house.market_buying_limitation:
|
||
kill_house_info = market_kill_request_share_quantity(kill_request.kill_house,
|
||
total_kill_houses=kill_houses)
|
||
kill_house_share = kill_house_info['kill_house_today_share']
|
||
kill_house_today_left_share = kill_house_info['kill_house_today_left_share']
|
||
kill_house_buying = kill_house_info['kill_house_market_kill_requests_quantity'] + request.data[
|
||
'kill_capacity']
|
||
if (kill_house_today_left_share + kill_request.kill_capacity) < request.data['kill_capacity']:
|
||
return Response({"result": "حجم خریداری شده از سهمیه شما بیشتر است !"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
if kill_request.poultry_request.remain_quantity + kill_request.kill_capacity < request.data[
|
||
'kill_capacity']:
|
||
return Response({"result": "حجم وارد شده از باقی مانده قابل فروش بیشتر است !"},
|
||
status=status.HTTP_403_FORBIDDEN)
|
||
kill_request.remain_quantity = request.data['kill_capacity']
|
||
if 'payment_deadline_days' in request.data.keys():
|
||
kill_request.payment_deadline_date = datetime.now() + timedelta(
|
||
days=request.data['payment_deadline_days'])
|
||
if 'input_market_code' in request.data.keys():
|
||
if request.data['input_market_code'] != kill_request.market_code:
|
||
return Response({"result": "کد وارد شده صحیح نمی باشد!"}, status=status.HTTP_403_FORBIDDEN)
|
||
kill_request.input_market_code = request.data['input_market_code']
|
||
self.calculate_province_kill_request_wage(kill_request)
|
||
kill_request.market_state = 'accepted'
|
||
kill_request.save()
|
||
serializer = self.serializer_class(kill_request)
|
||
serializer.update(instance=kill_request, validated_data=request.data)
|
||
market_poultry_request_remain_quantity(kill_request.poultry_request)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
def destroy(self, request, pk=None, *args, **kwargs):
|
||
user = SystemUserProfile.objects.get(trash=False, user=request.user)
|
||
kill_request = KillRequest.objects.get(key=request.GET["key"])
|
||
kill_request.trash = True
|
||
kill_request.market_state_message = {
|
||
"fullname": user.fullname,
|
||
"mobile": user.mobile,
|
||
"date": str(datetime.now())
|
||
}
|
||
kill_request.market_state = 'deleted'
|
||
kill_request.save()
|
||
market_poultry_request_remain_quantity(kill_request.poultry_request)
|
||
return Response(' با موفقیت حذف شد', status=status.HTTP_200_OK)
|
||
|
||
|
||
class MarketKillHouseViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouse.objects.all()
|
||
serializer_class = KillHouseForCommonlyUsedSerializer
|
||
pagination_class = CustomPagination
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = KillHouseFilterSet
|
||
filterset_fields = [
|
||
'name',
|
||
'kill_house_operator__user__mobile',
|
||
'kill_house_operator__user__fullname',
|
||
'kill_house_operator__user__first_name',
|
||
'kill_house_operator__user__last_name'
|
||
|
||
]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
|
||
kill_houses = KillHouse.objects.filter(out_province=False, trash=False).order_by(
|
||
'id', 'killer')
|
||
|
||
if 'search' in request.GET:
|
||
kill_house_list = []
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=kill_houses
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=kill_houses)
|
||
kill_house_list = ps.filter()
|
||
kill_houses = [] if len(
|
||
kill_house_list) == 0 else kill_house_list
|
||
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(kill_houses)
|
||
if page is not None:
|
||
serializer = self.get_serializer(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = self.get_serializer(kill_houses, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
def update(self, request, pk=None, *args, **kwargs):
|
||
kill_house = KillHouse.objects.get(key=request.data['key'])
|
||
serializer = self.serializer_class(kill_house)
|
||
serializer.update(instance=kill_house, validated_data=request.data)
|
||
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHouseMarketInfoViewSet(APIView):
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
serializer_class = KillHouseMarketInfoSerializer
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = KillHouseFilterSet
|
||
filterset_fields = [
|
||
'name',
|
||
'kill_house_operator__user__mobile',
|
||
'kill_house_operator__user__fullname',
|
||
'kill_house_operator__user__first_name',
|
||
'kill_house_operator__user__last_name'
|
||
|
||
]
|
||
|
||
def get(self, request):
|
||
role = request.GET.get('role')
|
||
date1 = request.GET.get('date1')
|
||
date2 = request.GET.get('date2')
|
||
kill_house_ids = KillHousePercentage.objects.filter(kill_house__type='exclusive', trash=False).values_list(
|
||
'kill_house', flat=True)
|
||
kill_houses = KillHouse.objects.filter(out_province=False, market_buying=True, trash=False).exclude(
|
||
id__in=kill_house_ids).order_by('id', 'killer')
|
||
if role == 'KillHouse':
|
||
user = SystemUserProfile.objects.get(trash=False, user=request.user)
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).first()
|
||
serializer = self.serializer_class(kill_house,
|
||
context={'date1': date1, 'date2': date2, 'kill_houses': kill_houses})
|
||
|
||
else:
|
||
if 'search' in request.GET:
|
||
kill_house_list = []
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=kill_houses
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=kill_houses)
|
||
kill_house_list = ps.filter()
|
||
kill_houses = [] if len(
|
||
kill_house_list) == 0 else kill_house_list
|
||
|
||
serializer = self.serializer_class(kill_houses, many=True,
|
||
context={'date1': date1, 'date2': date2, 'kill_houses': kill_houses})
|
||
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHouseMarketInfoDashboardViewSet(APIView):
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = KillHouseFilterSet
|
||
filterset_fields = [
|
||
'name',
|
||
'kill_house_operator__user__mobile',
|
||
'kill_house_operator__user__fullname',
|
||
'kill_house_operator__user__first_name',
|
||
'kill_house_operator__user__last_name'
|
||
|
||
]
|
||
|
||
def get(self, request):
|
||
today = datetime.now().date()
|
||
date1 = request.GET.get('date1')
|
||
date2 = request.GET.get('date2')
|
||
if date1:
|
||
total_poultry_requests_quantity = (
|
||
PoultryRequest.objects.filter(
|
||
send_date__date__gte=date1,
|
||
send_date__date__lte=date2,
|
||
state_process='accepted',
|
||
province_state='accepted',
|
||
final_state__in=('pending', 'accepted'),
|
||
temporary_trash=False,
|
||
trash=False,
|
||
out=False,
|
||
market=True,
|
||
).aggregate(total=Sum('quantity'))['total'] or 0
|
||
)
|
||
|
||
else:
|
||
total_poultry_requests_quantity = (
|
||
PoultryRequest.objects.filter(
|
||
send_date__date=today,
|
||
state_process='accepted',
|
||
province_state='accepted',
|
||
final_state__in=('pending', 'accepted'),
|
||
temporary_trash=False,
|
||
trash=False,
|
||
out=False,
|
||
market=True,
|
||
).aggregate(total=Sum('quantity'))['total'] or 0
|
||
)
|
||
|
||
exclusive_kill_house_ids = KillHousePercentage.objects.filter(
|
||
kill_house__type='exclusive',
|
||
trash=False
|
||
).values_list('kill_house', flat=True)
|
||
|
||
kill_houses = KillHouse.objects.filter(
|
||
out_province=False,
|
||
market_buying=True,
|
||
trash=False
|
||
).exclude(id__in=exclusive_kill_house_ids).order_by('id', 'killer')
|
||
|
||
if 'search' in request.GET:
|
||
kill_house_list = []
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=kill_houses
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=kill_houses)
|
||
kill_house_list = ps.filter()
|
||
kill_houses = [] if len(
|
||
kill_house_list) == 0 else kill_house_list
|
||
|
||
dashboard_data = {
|
||
"kill_house_today_share": 0,
|
||
"market_light_share": 0,
|
||
"kill_house_market_kill_requests_quantity": 0,
|
||
"kill_house_market_kill_requests_quantity_first": 0,
|
||
"kill_house_market_kill_requests_quantity_final": 0,
|
||
"kill_house_today_left_share": 0,
|
||
"kill_house_market_kill_requests_quantity_weight": 0,
|
||
"kill_house_market_kill_requests_quantity_first_weight": 0,
|
||
"kill_house_market_kill_requests_quantity_final_weight": 0,
|
||
"total_kill_house_market_kill_requests_quantity_agreement_light_weight": 0,
|
||
"total_kill_house_market_kill_requests_quantity_light_weight": 0,
|
||
"total_kill_house_market_kill_requests_quantity_heavy_weight": 0,
|
||
}
|
||
|
||
for kill_house in kill_houses:
|
||
if date1:
|
||
info = market_kill_request_share_quantity(kill_house, date1, date2, total_kill_houses=kill_houses)
|
||
else:
|
||
info = market_kill_request_share_quantity(kill_house, total_kill_houses=kill_houses)
|
||
for key in dashboard_data:
|
||
dashboard_data[key] += info.get(key, 0) or 0
|
||
|
||
result = {"total_poultry_requests_quantity": total_poultry_requests_quantity, **dashboard_data}
|
||
|
||
return Response(result, status=200)
|
||
|
||
|
||
def make_fine_for_requests_cron():
|
||
now = datetime.now().date()
|
||
fine = FinePermission.objects.filter(trash=False).first()
|
||
|
||
province_kill_requests = ProvinceKillRequest.objects.filter(trash=False, temporary_trash=False,
|
||
return_to_province=False,
|
||
kill_request__recive_date__date__lt=now,
|
||
first_car_allocated_quantity=0,
|
||
state__in=('pending', 'accepted')).select_related(
|
||
'province_request__poultry_request__hatching')
|
||
if province_kill_requests:
|
||
for province_kill_request in province_kill_requests:
|
||
hatching = province_kill_request.province_request.poultry_request.hatching
|
||
province_kill_request.fine = True
|
||
province_kill_request.fine_amount = fine.in_province_allocations_fine_coefficient * province_kill_request.total_wage_amount
|
||
province_kill_request.fine_coefficient = fine.in_province_allocations_fine_coefficient
|
||
if province_kill_request.market:
|
||
province_kill_request.kill_request.market_state = 'deleted'
|
||
province_kill_request.kill_request.save()
|
||
province_kill_request.delete_message = "حذف تخصیص و اعمال جریمه به دلیل عدم ثبت خودرو در بازه مشخص"
|
||
province_kill_request.trash = True
|
||
province_kill_request.save()
|
||
update_province_kill_requests(hatching)
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(assignment_state_archive='pending') | Q(ware_house_confirmation=False), fine=False, trash=False,
|
||
kill_request__recive_date__date__lt=now,
|
||
temporary_trash=False).select_related('province_kill_request', 'province_request__poultry_request',
|
||
'province_request__poultry_request__hatching')
|
||
empty_info_bars = kill_house_requests.filter(assignment_state_archive='pending', ware_house_confirmation=False)
|
||
not_completed_bars = kill_house_requests.filter(assignment_state_archive='pending', ware_house_confirmation=True)
|
||
not_entered_bars = kill_house_requests.filter(assignment_state_archive='True', ware_house_confirmation=False)
|
||
|
||
if empty_info_bars:
|
||
for empty_info_bar in empty_info_bars:
|
||
poultry_request = empty_info_bar.province_request.poultry_request
|
||
hatching = empty_info_bar.province_request.poultry_request.hatching
|
||
province_kill_request = empty_info_bar.province_kill_request
|
||
empty_info_bar.fine = True
|
||
empty_info_bar.fine_amount = (
|
||
fine.in_province_bars_fine_coefficient * empty_info_bar.accepted_real_weight) * province_kill_request.wage
|
||
empty_info_bar.fine_coefficient = fine.in_province_bars_fine_coefficient
|
||
empty_info_bar.message = 'لغو بار و اعمال جریمه به علت عدم تکمبل اطلاعات و ورود به انبار'
|
||
empty_info_bar.bar_remover = {
|
||
"date": str(datetime.now()),
|
||
"role": "system",
|
||
"mobile": "-",
|
||
"full_name": "system"
|
||
}
|
||
empty_info_bar.trash = True
|
||
empty_info_bar.save()
|
||
update_kill_house_requests(province_kill_request, poultry_request)
|
||
update_province_kill_requests(hatching)
|
||
|
||
if not_completed_bars:
|
||
for not_completed_bar in not_completed_bars:
|
||
province_kill_request = not_completed_bar.province_kill_request
|
||
|
||
not_completed_bar.fine = True
|
||
not_completed_bar.fine_amount = (
|
||
fine.in_province_bars_fine_coefficient * not_completed_bar.accepted_real_weight) * province_kill_request.wage
|
||
not_completed_bar.fine_coefficient = fine.in_province_bars_fine_coefficient
|
||
not_completed_bar.message = 'اعمال جریمه به علت عدم تکمبل اطلاعات'
|
||
not_completed_bar.save()
|
||
|
||
if not_entered_bars:
|
||
for not_entered_bar in not_entered_bars:
|
||
province_kill_request = not_entered_bar.province_kill_request
|
||
|
||
not_entered_bar.ware_house_accepted_real_quantity = not_entered_bar.accepted_real_quantity
|
||
not_entered_bar.ware_house_accepted_real_weight = int(not_entered_bar.accepted_real_weight - (
|
||
(not_entered_bar.accepted_real_weight * 25) / 100))
|
||
not_entered_bar.weight_loss = 25
|
||
poultry_prediction(not_entered_bar.province_request.poultry_request.poultry)
|
||
|
||
not_entered_bar.ware_house_input_type = "loss_weight"
|
||
not_entered_bar.ware_house_confirmation = True
|
||
not_entered_bar.date_of_ware_house = str(datetime.now())
|
||
not_entered_bar.fine = True
|
||
not_entered_bar.fine_amount = (
|
||
fine.in_province_bars_fine_coefficient * not_entered_bar.accepted_real_weight) * province_kill_request.wage
|
||
not_entered_bar.fine_coefficient = fine.in_province_bars_fine_coefficient
|
||
not_entered_bar.message = 'اعمال جریمه به علت عدم ورود به انبار'
|
||
not_entered_bar.save()
|
||
product = RolesProducts.objects.filter(parent_product__product_id=2,
|
||
kill_house=not_entered_bar.killhouse_user).first()
|
||
kill_house_requests_product_warehousing(product)
|
||
|
||
|
||
# class KillHouseSalesInformationViewSet(APIView):
|
||
# permission_classes = [TokenHasReadWriteScope]
|
||
#
|
||
# def get(self, request):
|
||
# date1 = request.GET.get('date1')
|
||
# date2 = request.GET.get('date2')
|
||
# key = request.GET.get('key')
|
||
# kill_house = KillHouse.objects.get(key=key, trash=False)
|
||
# kill_house_request_filter = {
|
||
# 'killhouse_user': kill_house,
|
||
# 'ware_house_confirmation': True,
|
||
# 'trash': False,
|
||
# 'calculate_status': True,
|
||
# }
|
||
# kill_house_free_buying_bar_filter = {
|
||
# 'kill_house': kill_house,
|
||
# 'trash': False,
|
||
# 'calculate_status': True,
|
||
# }
|
||
# kill_house_allocation_filter = {
|
||
# 'trash': False,
|
||
# 'calculate_status': True,
|
||
# }
|
||
#
|
||
# kill_house_free_sale_bars_filter = {
|
||
# 'trash': False,
|
||
# 'calculate_status': True,
|
||
# }
|
||
# if date1:
|
||
# kill_house_request_filter['kill_request__recive_date__date__gte'] = datetime.strptime(date1,
|
||
# '%Y-%m-%d').date() - timedelta(
|
||
# days=1)
|
||
# kill_house_request_filter['kill_request__recive_date__date__lte'] = datetime.strptime(date2,
|
||
# '%Y-%m-%d').date() - timedelta(
|
||
# days=1)
|
||
# kill_house_free_buying_bar_filter['date__date__gte'] = date1
|
||
# kill_house_free_buying_bar_filter['date__date__lte'] = date2
|
||
# kill_house_allocation_filter['date__date__gte'] = date1
|
||
# kill_house_allocation_filter['date__date__lte'] = date2
|
||
# kill_house_free_sale_bars_filter['date__date__gte'] = date1
|
||
# kill_house_free_sale_bars_filter['date__date__lte'] = date2
|
||
#
|
||
# kill_house_requests = KillHouseRequest.objects.filter(**kill_house_request_filter)
|
||
# kill_house_free_buying_bars = KillHouseFreeBarInformation.objects.filter(
|
||
# **kill_house_free_buying_bar_filter).exclude(entered_message='ورود به انبار مجازی')
|
||
# kill_house_allocations = StewardAllocation.objects.filter(
|
||
# Q(kill_house=kill_house) | Q(to_kill_house=kill_house), **kill_house_allocation_filter)
|
||
# kill_house_free_sale_bars = KillHouseFreeSaleBarInformation.objects.filter(**kill_house_free_sale_bars_filter)
|
||
#
|
||
# kill_house_requests_aggregates = kill_house_requests.aggregate(
|
||
# total_count=Count('id'),
|
||
# total_governmental_weight=Sum('ware_house_accepted_real_weight',
|
||
# filter=Q(province_request__poultry_request__free_sale_in_province=False)),
|
||
# total_free_weight=Sum('ware_house_accepted_real_weight',
|
||
# filter=Q(province_request__poultry_request__free_sale_in_province=True)),
|
||
# )
|
||
#
|
||
# kill_house_free_buying_bars_aggregates = kill_house_free_buying_bars.aggregate(
|
||
# total_count=Count('id'),
|
||
# total_weight=Sum('weight_of_carcasses'),
|
||
# )
|
||
#
|
||
# kill_house_allocations_aggregates = kill_house_allocations.aggregate(
|
||
# total_count=Count('id'),
|
||
# total_receive_governmental_weight=Sum('receiver_real_weight_of_carcasses',
|
||
# filter=Q(approved_price_status=True, receiver_state='accepted',
|
||
# kill_house__isnull=True, to_cold_house__isnull=True)),
|
||
# total_receive_free_weight=Sum('receiver_real_weight_of_carcasses',
|
||
# filter=Q(approved_price_status=False, receiver_state='accepted',
|
||
# kill_house__isnull=True, to_cold_house__isnull=True)),
|
||
# total_allocated_governmental_weight=Sum('receiver_real_weight_of_carcasses',
|
||
# filter=Q(approved_price_status=False, receiver_state='accepted',
|
||
# kill_house__isnull=False, to_cold_house__isnull=True)),
|
||
# total_allocated_free_weight=Sum('receiver_real_weight_of_carcasses',
|
||
# filter=Q(approved_price_status=False, receiver_state='accepted',
|
||
# kill_house__isnull=False, to_cold_house__isnull=True)),
|
||
#
|
||
# )
|
||
# kill_house_free_sale_bars_aggregates = kill_house_free_sale_bars.aggregate(
|
||
# total_count=Count('id'),
|
||
# total_governmental_weight=Sum('real_weight_of_carcasses',
|
||
# filter=Q(sale_type='governmental')),
|
||
# total_free_weight=Sum('real_weight_of_carcasses',
|
||
# filter=Q(sale_type='free')),
|
||
# )
|
||
#
|
||
# result = {
|
||
# "kill_house_request_governmental_weight": kill_house_requests_aggregates['total_governmental_weight'] or 0,
|
||
# "kill_house_request_free_weight": kill_house_requests_aggregates['total_free_weight'] or 0,
|
||
# "kill_house_free_buying_bars_weight": kill_house_free_buying_bars_aggregates['total_weight'] or 0,
|
||
# "total_receive_governmental_weight": kill_house_allocations_aggregates[
|
||
# 'total_receive_governmental_weight'] or 0,
|
||
# "total_receive_free_weight": kill_house_allocations_aggregates['total_receive_free_weight'] or 0,
|
||
# "total_in_allocated_governmental_weight": kill_house_allocations_aggregates[
|
||
# 'total_allocated_governmental_weight'] or 0,
|
||
# "total_in_allocated_free_weight": kill_house_allocations_aggregates['total_allocated_free_weight'] or 0,
|
||
# "total_out_allocated_free_weight": kill_house_free_sale_bars_aggregates['total_governmental_weight'] or 0,
|
||
# "total_out_free_weight": kill_house_free_sale_bars_aggregates['total_free_weight'] or 0,
|
||
# }
|
||
#
|
||
# return Response(result, status=200)
|
||
class KillHouseSalesInformationViewSet(APIView):
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def get(self, request):
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).first()
|
||
product = RolesProducts.objects.filter(kill_house=kill_house, trash=False, name='مرغ گرم').first()
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
input_warehouse=kill_house,
|
||
temporary_trash=False,
|
||
temporary_deleted=False,
|
||
trash=False, calculate_status=True, warehouse=True)
|
||
|
||
kill_house_free_bar_informations = KillHouseFreeBarInformation.objects.filter(input_warehouse=kill_house,
|
||
trash=False,
|
||
temporary_trash=False,
|
||
temporary_deleted=False,
|
||
calculate_status=True,
|
||
warehouse=True).exclude(
|
||
entered_message='ورود به انبار مجازی')
|
||
kill_house_free_Sale_bar_informations = KillHouseFreeSaleBarInformation.objects.filter(
|
||
kill_house=kill_house,
|
||
trash=False,
|
||
temporary_trash=False,
|
||
temporary_deleted=False,
|
||
calculate_status=True, warehouse=True)
|
||
kill_house_allocations = StewardAllocation.objects.filter(kill_house=kill_house, trash=False,
|
||
receiver_state__in=('pending', 'accepted'),
|
||
temporary_trash=False,
|
||
temporary_deleted=False,
|
||
to_cold_house__isnull=True,
|
||
calculate_status=True, warehouse=True)
|
||
|
||
segmentations = PosSegmentation.objects.filter(kill_house=kill_house, trash=False, warehouse=True)
|
||
cold_house_allocations = StewardAllocation.objects.filter(
|
||
kill_house=kill_house,
|
||
to_cold_house__isnull=False,
|
||
receiver_state__in=('accepted', 'pending'),
|
||
trash=False, warehouse=True)
|
||
transactions = ProductsTransactions.objects.filter(product=product, transaction__paid=True, trash=False,
|
||
warehouse=True)
|
||
total_entered_kill_house_requests_carcasses_governmental_weight = \
|
||
kill_house_requests.filter(ware_house_confirmation=True,
|
||
province_request__poultry_request__free_sale_in_province=False).aggregate(
|
||
total=Sum('ware_house_accepted_real_weight'))[
|
||
'total'] or 0
|
||
total_entered_kill_house_requests_carcasses_free_weight = \
|
||
kill_house_requests.filter(ware_house_confirmation=True,
|
||
province_request__poultry_request__free_sale_in_province=True).aggregate(
|
||
total=Sum('ware_house_accepted_real_weight'))[
|
||
'total'] or 0
|
||
|
||
total_entered_kill_house_free_bar_carcasses_weight = \
|
||
kill_house_free_bar_informations.aggregate(total=Sum('weight_of_carcasses'))[
|
||
'total'] or 0
|
||
total_kill_house_free_sale__bar_carcasses_weight = \
|
||
kill_house_free_Sale_bar_informations.aggregate(total=Sum('real_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
total_kill_house_free_sale__bar_carcasses_governmental_weight = \
|
||
kill_house_free_Sale_bar_informations.filter(quota='governmental').aggregate(
|
||
total=Sum('real_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
total_kill_house_free_sale__bar_carcasses_free_weight = \
|
||
kill_house_free_Sale_bar_informations.filter(quota='free').aggregate(total=Sum('real_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
total_kill_house_allocations_weight = \
|
||
kill_house_allocations.aggregate(total=Sum('real_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
total_kill_house_allocations_governmental_weight = \
|
||
kill_house_allocations.filter(quota='governmental').aggregate(total=Sum('real_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
total_kill_house_allocations_free_weight = \
|
||
kill_house_allocations.filter(quota='free').aggregate(total=Sum('real_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
segmentations_weight = \
|
||
segmentations.aggregate(total=Sum('weight'))[
|
||
'total'] or 0
|
||
segmentations_governmental_weight = \
|
||
segmentations.filter(quota='governmental').aggregate(total=Sum('weight'))[
|
||
'total'] or 0
|
||
segmentations_free_weight = \
|
||
segmentations.filter(quota='free').aggregate(total=Sum('weight'))[
|
||
'total'] or 0
|
||
|
||
cold_house_allocations_weight = \
|
||
cold_house_allocations.aggregate(total=Sum('real_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
cold_house_allocations_governmental_weight = \
|
||
cold_house_allocations.filter(quota='governmental').aggregate(total=Sum('real_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
|
||
cold_house_allocations_free_weight = \
|
||
cold_house_allocations.filter(quota='free').aggregate(total=Sum('real_weight_of_carcasses'))[
|
||
'total'] or 0
|
||
pos_allocated_weight_info = transactions.aggregate(
|
||
pos_allocated_weight=Sum('cur_weight'),
|
||
pos_governmental_allocated_weight=Sum('cur_weight',
|
||
filter=Q(price_approved=True)),
|
||
pos_free_allocated_weight=Sum('cur_weight', filter=Q(price_approved=False)),
|
||
|
||
)
|
||
pos_allocated_weight = pos_allocated_weight_info['pos_allocated_weight'] or 0
|
||
pos_governmental_allocated_weight = pos_allocated_weight_info['pos_governmental_allocated_weight'] or 0
|
||
pos_free_allocated_weight = pos_allocated_weight_info['pos_free_allocated_weight'] or 0
|
||
|
||
total_governmental_input_weight = total_entered_kill_house_requests_carcasses_governmental_weight
|
||
total_free_input_weight = total_entered_kill_house_requests_carcasses_free_weight + total_entered_kill_house_free_bar_carcasses_weight
|
||
total_governmental_output_weight = total_kill_house_free_sale__bar_carcasses_governmental_weight + segmentations_governmental_weight + total_kill_house_allocations_governmental_weight + cold_house_allocations_governmental_weight + int(pos_governmental_allocated_weight / 1000)
|
||
total_free_output_weight = total_kill_house_free_sale__bar_carcasses_free_weight + total_kill_house_allocations_free_weight + segmentations_free_weight + cold_house_allocations_free_weight + int(pos_free_allocated_weight / 1000)
|
||
total_governmental_remain_weight = (
|
||
total_governmental_input_weight - total_governmental_output_weight) - kill_house.ware_house_archive_governmental_weight
|
||
total_free_remain_weight = (
|
||
total_free_input_weight - total_free_output_weight) - kill_house.ware_house_archive_free_weight
|
||
|
||
result = {
|
||
|
||
"total_governmental_input_weight": int(total_governmental_input_weight),
|
||
"total_free_input_weight": int(total_free_input_weight),
|
||
"total_governmental_output_weight": int(total_governmental_output_weight),
|
||
"total_free_output_weight": int(total_free_output_weight),
|
||
"total_governmental_remain_weight": int(total_governmental_remain_weight),
|
||
"total_free_remain_weight": int(total_free_remain_weight),
|
||
"total_kill_house_free_sale__bar_carcasses_weight": int(total_kill_house_free_sale__bar_carcasses_weight),
|
||
"total_kill_house_allocations_weight": int(total_kill_house_allocations_weight),
|
||
"segmentations_weight": int(segmentations_weight),
|
||
"cold_house_allocations_weight": int(cold_house_allocations_weight),
|
||
"total_selling_in_province_governmental_weight": kill_house.total_selling_in_province_governmental_weight,
|
||
"total_selling_in_province_free_weight": kill_house.total_selling_in_province_free_weight,
|
||
"total_commitment_selling_in_province_governmental_weight": kill_house.total_commitment_selling_in_province_governmental_weight,
|
||
"total_commitment_selling_in_province_governmental_remain_weight": kill_house.total_commitment_selling_in_province_governmental_remain_weight,
|
||
"total_commitment_selling_in_province_free_weight": kill_house.total_commitment_selling_in_province_free_weight,
|
||
"total_commitment_selling_in_province_free_remain_weight": kill_house.total_commitment_selling_in_province_free_remain_weight,
|
||
"pos_allocated_weight": int(pos_allocated_weight / 1000),
|
||
"pos_governmental_allocated_weight": int(pos_governmental_allocated_weight / 1000),
|
||
"pos_free_allocated_weight": int(pos_free_allocated_weight / 1000),
|
||
"ware_house_archive_governmental_weight": kill_house.ware_house_archive_governmental_weight,
|
||
"ware_house_archive_free_weight": kill_house.ware_house_archive_free_weight,
|
||
|
||
}
|
||
|
||
return Response(result, status=200)
|
||
|
||
|
||
class KillHouseForColdHouseAllocationViewSet(GenericAPIView):
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
serializer_class = KillHouseForColdHouseAllocationSerializer
|
||
pagination_class = CustomPagination
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = KillHouseFilterSet
|
||
filterset_fields = [
|
||
'name',
|
||
'kill_house_operator__user__mobile',
|
||
'kill_house_operator__user__fullname',
|
||
'kill_house_operator__user__first_name',
|
||
'kill_house_operator__user__last_name'
|
||
|
||
]
|
||
|
||
def get(self, request):
|
||
date1 = request.GET.get('date1')
|
||
date2 = request.GET.get('date2')
|
||
role = request.GET.get('role')
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
kill_house_filters = {'out_province': False, 'trash': False}
|
||
if role in ['CityJahad']:
|
||
kill_house_filters['kill_house_operator__user__city'] = user.city
|
||
kill_houses = KillHouse.objects.filter(**kill_house_filters).order_by('id', 'killer')
|
||
if 'search' in request.GET:
|
||
kill_house_list = []
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=kill_houses
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=kill_houses)
|
||
kill_house_list = ps.filter()
|
||
kill_houses = [] if len(
|
||
kill_house_list) == 0 else kill_house_list
|
||
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(kill_houses)
|
||
if page is not None:
|
||
serializer = self.get_serializer(page, many=True, context={'date1': date1, 'date2': date2})
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = self.serializer_class(kill_houses, many=True, context={'date1': date1, 'date2': date2})
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHouseForSegmentationViewSet(GenericAPIView):
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
serializer_class = KillHouseForSegmentationSerializer
|
||
pagination_class = CustomPagination
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = KillHouseFilterSet
|
||
filterset_fields = [
|
||
'name',
|
||
'kill_house_operator__user__mobile',
|
||
'kill_house_operator__user__fullname',
|
||
'kill_house_operator__user__first_name',
|
||
'kill_house_operator__user__last_name'
|
||
|
||
]
|
||
|
||
def get(self, request):
|
||
date1 = request.GET.get('date1')
|
||
date2 = request.GET.get('date2')
|
||
role = request.GET.get('role')
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
kill_house_filters = {'out_province': False, 'trash': False}
|
||
if role in ['CityJahad']:
|
||
kill_house_filters['kill_house_operator__user__city'] = user.city
|
||
|
||
kill_houses = KillHouse.objects.filter(**kill_house_filters).order_by('id', 'killer')
|
||
|
||
if 'search' in request.GET:
|
||
kill_house_list = []
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=kill_houses
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=kill_houses)
|
||
kill_house_list = ps.filter()
|
||
kill_houses = [] if len(
|
||
kill_house_list) == 0 else kill_house_list
|
||
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(kill_houses)
|
||
if page is not None:
|
||
serializer = self.get_serializer(page, many=True, context={'date1': date1, 'date2': date2})
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = self.serializer_class(kill_houses, many=True, context={'date1': date1, 'date2': date2})
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class KillHouseComparativeInformationViewSet(GenericAPIView):
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
serializer_class = KillHouseComparativeInformationSerializer
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = KillHouseFilterSet
|
||
filterset_fields = [
|
||
'name',
|
||
'kill_house_operator__user__mobile',
|
||
'kill_house_operator__user__fullname',
|
||
'kill_house_operator__user__first_name',
|
||
'kill_house_operator__user__last_name'
|
||
|
||
]
|
||
|
||
def get(self, request):
|
||
date1 = request.GET.get('date1')
|
||
date2 = request.GET.get('date2')
|
||
# kill_house_ids = KillHousePercentage.objects.filter(kill_house__type='exclusive', trash=False).values_list(
|
||
# 'kill_house', flat=True)
|
||
# kill_houses = KillHouse.objects.filter(out_province=False,killer=False,trash=False).exclude(
|
||
# id__in=kill_house_ids).order_by('id')
|
||
kill_houses = KillHouse.objects.filter(out_province=False, killer=False, trash=False).order_by('id')
|
||
codes = kill_houses.values_list('unique_identifier', flat=True)
|
||
code = ",".join(codes)
|
||
if date1:
|
||
url = f"https://rsibackend.rasadyar.com/app/send_transport_carcass_detail_for_rasadyaar/?code={code}&date1={date1}&date2={date2}"
|
||
else:
|
||
url = f"https://rsibackend.rasadyar.com/app/send_transport_carcass_detail_for_rasadyaar/?code={code}"
|
||
|
||
response = requests.get(url)
|
||
rsi_data = response.json()
|
||
if 'search' in request.GET:
|
||
kill_house_list = []
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=kill_houses
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=kill_houses)
|
||
kill_house_list = ps.filter()
|
||
kill_houses = [] if len(
|
||
kill_house_list) == 0 else kill_house_list
|
||
serializer = self.serializer_class(kill_houses, many=True,
|
||
context={'date1': date1, 'date2': date2, 'rsi_data': rsi_data})
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
def cancel_bar_and_province_request(request):
|
||
date_str = '2025-10-11'
|
||
date = datetime.now().date() - timedelta(days=1)
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(trash=False, ware_house_confirmation=False,
|
||
kill_request__recive_date__date__lte=date,
|
||
kill_request__recive_date__date__gte=date_str)
|
||
all_province_requests = kill_house_requests.values_list('province_kill_request', flat=True).distinct()
|
||
for kill_house_request in kill_house_requests:
|
||
kill_house_request.trash = True
|
||
kill_house_request.return_trash = True
|
||
kill_house_request.save()
|
||
update_kill_house_requests(kill_house_request.province_kill_request,
|
||
kill_house_request.province_request.poultry_request)
|
||
update_province_kill_requests(
|
||
kill_house_request.province_kill_request.province_request.poultry_request.hatching)
|
||
|
||
for all_province_request in all_province_requests:
|
||
if not KillHouseRequest.objects.filter(trash=False, province_kill_request=all_province_request).exists():
|
||
all_province_request.return_to_province = True
|
||
all_province_request.returner = {"date": str(datetime.today()),
|
||
"mobile": "09000000000", "fullname": "برگشت به دلیل حذف سیستمی بار"}
|
||
all_province_request.save()
|
||
|
||
province_requests = ProvinceKillRequest.objects.filter(trash=False, first_car_allocated_quantity=0,
|
||
return_to_province=False,
|
||
kill_request__recive_date__date=datetime.now().date(),
|
||
)
|
||
for province_request in province_requests:
|
||
province_request.trash = True
|
||
province_request.return_trash = True
|
||
province_request.save()
|
||
update_province_kill_requests(province_request.province_request.poultry_request.hatching)
|
||
|
||
return HttpResponse('ok')
|
||
|
||
|
||
def cancel_bar_and_province_request_cron():
|
||
date_str = '2025-10-11'
|
||
date = datetime.now().date() - timedelta(days=1)
|
||
|
||
kill_house_requests = KillHouseRequest.objects.filter(trash=False, ware_house_confirmation=False,
|
||
kill_request__recive_date__date__lte=date,
|
||
kill_request__recive_date__date__gte=date_str)
|
||
all_province_requests = kill_house_requests.values_list('province_kill_request', flat=True).distinct()
|
||
for kill_house_request in kill_house_requests:
|
||
kill_house_request.trash = True
|
||
kill_house_request.return_trash = True
|
||
kill_house_request.save()
|
||
update_kill_house_requests(kill_house_request.province_kill_request,
|
||
kill_house_request.province_request.poultry_request)
|
||
update_province_kill_requests(
|
||
kill_house_request.province_kill_request.province_request.poultry_request.hatching)
|
||
|
||
for all_province_request in all_province_requests:
|
||
if not KillHouseRequest.objects.filter(trash=False, province_kill_request=all_province_request).exists():
|
||
all_province_request.return_to_province = True
|
||
all_province_request.returner = {"date": str(datetime.today()),
|
||
"mobile": "09000000000", "fullname": "برگشت به دلیل حذف سیستمی بار"}
|
||
all_province_request.save()
|
||
|
||
province_requests = ProvinceKillRequest.objects.filter(trash=False, first_car_allocated_quantity=0,
|
||
return_to_province=False,
|
||
kill_request__recive_date__date=datetime.now().date(),
|
||
)
|
||
for province_request in province_requests:
|
||
province_request.trash = True
|
||
province_request.return_trash = True
|
||
province_request.save()
|
||
update_province_kill_requests(province_request.province_request.poultry_request.hatching)
|
||
|
||
|
||
class ReturnProvinceKillRequestViewSet(GenericAPIView):
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
serializer_class = ReturnProvinceKillRequestSerializer
|
||
pagination_class = CustomPagination
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = ReturnProvinceKillRequestFilterSet
|
||
filterset_fields = [
|
||
'province_request__poultry_request__order_code',
|
||
'killhouse_user__name',
|
||
'killhouse_user__kill_house_operator__user__fullname',
|
||
'killhouse_user__kill_house_operator__user__mobile',
|
||
'killhouse_user__kill_house_operator__address__city__name',
|
||
'province_request__poultry_request__poultry__unit_name',
|
||
'province_request__poultry_request__poultry__user__fullname',
|
||
'province_request__poultry_request__poultry__user__mobile',
|
||
'province_request__poultry_request__poultry__address__city__name',
|
||
]
|
||
|
||
def get(self, request):
|
||
date1 = request.GET.get('date1')
|
||
date2 = request.GET.get('date2')
|
||
role = request.GET.get('role')
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
filters = {
|
||
'archive_wage': False,
|
||
'state__in': ('pending', 'accepted'),
|
||
'first_car_allocated_quantity': 0
|
||
}
|
||
if role == 'KillHouse':
|
||
filters['killhouse_user__kill_house_operator__user'] = user
|
||
if date1:
|
||
filters['kill_request__recive_date__date__gte'] = date1
|
||
filters['kill_request__recive_date__date__lte'] = date2
|
||
|
||
return_province_kill_requests = ProvinceKillRequest.objects.filter(
|
||
Q(trash=False, return_to_province=True) | Q(trash=True, return_trash=True), **filters).order_by('id')
|
||
|
||
if 'search' in request.GET:
|
||
return_province_kill_requests_list = []
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=return_province_kill_requests
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=return_province_kill_requests)
|
||
return_province_kill_requests_list = ps.filter()
|
||
return_province_kill_requests = [] if len(
|
||
return_province_kill_requests_list) == 0 else return_province_kill_requests_list
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(return_province_kill_requests)
|
||
if page is not None:
|
||
serializer = self.get_serializer(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = self.serializer_class(return_province_kill_requests, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
def put(self, request):
|
||
return_province_kill_requests = ProvinceKillRequest.objects.get(
|
||
key=request.data['key'])
|
||
request.data.pop('key')
|
||
serializer = self.serializer_class(return_province_kill_requests)
|
||
serializer.update(instance=return_province_kill_requests, validated_data=request.data)
|
||
update_province_kill_requests(return_province_kill_requests.province_request.poultry_request.hatching)
|
||
poultry_prediction(return_province_kill_requests.province_request.poultry_request.hatching.poultry)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class ReturnKillHouseRequestViewSet(viewsets.ModelViewSet):
|
||
queryset = KillHouseRequest.objects.all()
|
||
serializer_class = KillHouseRequestForBarManagementSerializer
|
||
pagination_class = CustomPagination
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = KillHouseRequestFilterSet
|
||
filterset_fields = [
|
||
'killhouse_user__kill_house_operator__user__fullname',
|
||
'killhouse_user__kill_house_operator__user__mobile',
|
||
'province_request__poultry_request__poultry__user__fullname',
|
||
'province_request__poultry_request__poultry__user__mobile',
|
||
'province_request__poultry_request__order_code',
|
||
'province_request__poultry_request__order_code',
|
||
'bar_code',
|
||
]
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
if request.GET['role'] == 'KillHouse':
|
||
user = SystemUserProfile.objects.get(user=request.user)
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).first()
|
||
if 'date1' in request.GET and 'date2' in request.GET:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(killhouse_user=kill_house) | Q(killer=kill_house),
|
||
Q(non_receipt=True, main_non_receipt=True) | Q(trash=True, return_trash=True),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2)
|
||
|
||
else:
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(killhouse_user=kill_house) | Q(killer=kill_house),
|
||
Q(non_receipt=True, main_non_receipt=True) | Q(trash=True, return_trash=True))
|
||
|
||
else:
|
||
if 'date1' in request.GET and 'date2' in request.GET:
|
||
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(non_receipt=True, main_non_receipt=True) | Q(trash=True, return_trash=True),
|
||
kill_request__recive_date__date__gte=date1,
|
||
kill_request__recive_date__date__lte=date2)
|
||
|
||
else:
|
||
kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(non_receipt=True, main_non_receipt=True) | Q(trash=True, return_trash=True))
|
||
|
||
if 'search' in request.GET:
|
||
kill_house_request_list = []
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=kill_house_requests
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=kill_house_requests)
|
||
kill_house_request_list = ps.filter()
|
||
kill_house_requests = [] if len(kill_house_request_list) == 0 else kill_house_request_list
|
||
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(kill_house_requests)
|
||
if page is not None:
|
||
serializer = KillHouseRequestForBarManagementSerializer(page, many=True)
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = KillHouseRequestForBarManagementSerializer(kill_house_requests, many=True)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
def update(self, request, *args, **kwargs):
|
||
kill_house_requests = KillHouseRequest.objects.get(key=request.data['key'])
|
||
kill_house_requests.province_kill_request.trash = False
|
||
kill_house_requests.province_kill_request.return_trash = False
|
||
kill_house_requests.province_kill_request.return_to_province = False
|
||
kill_house_requests.province_kill_request.returner = None
|
||
kill_house_requests.province_kill_request.save()
|
||
request.data.pop('key')
|
||
serializer = self.serializer_class(kill_house_requests)
|
||
serializer.update(instance=kill_house_requests, validated_data=request.data)
|
||
update_kill_house_requests(kill_house_requests.province_kill_request,
|
||
kill_house_requests.province_request.poultry_request)
|
||
update_province_kill_requests(kill_house_requests.province_request.poultry_request.hatching)
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class ReturnRequestDashboardViewSet(GenericAPIView):
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def get(self, request):
|
||
date1 = request.GET.get('date1')
|
||
date2 = request.GET.get('date2')
|
||
role = request.GET.get('role')
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
total_wage_type = WageType.objects.filter(trash=False)
|
||
province_live_wage_type = total_wage_type.filter(en_name='province-kill-request', trash=False).first()
|
||
province_live_wage_type_amount = province_live_wage_type.amount if province_live_wage_type.status == True else 0
|
||
|
||
province_kill_request_filters = {
|
||
'archive_wage': False,
|
||
'state__in': ('pending', 'accepted'),
|
||
'first_car_allocated_quantity': 0
|
||
}
|
||
|
||
kill_house_request_filters = {}
|
||
if date1:
|
||
province_kill_request_filters['kill_request__recive_date__date__gte'] = date1
|
||
province_kill_request_filters['kill_request__recive_date__date__lte'] = date2
|
||
kill_house_request_filters['kill_request__recive_date__date__gte'] = date1
|
||
kill_house_request_filters['kill_request__recive_date__date__lte'] = date2
|
||
if role == 'KillHouse':
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).first()
|
||
province_kill_request_filters['killhouse_user'] = kill_house
|
||
return_kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(killhouse_user=kill_house) | Q(killer=kill_house),
|
||
Q(non_receipt=True, main_non_receipt=True, non_receipt_state__in=('pending', 'accepted')) | Q(
|
||
trash=True, return_trash=True),
|
||
**kill_house_request_filters)
|
||
else:
|
||
return_kill_house_requests = KillHouseRequest.objects.filter(
|
||
Q(non_receipt=True, main_non_receipt=True, non_receipt_state__in=('pending', 'accepted')) | Q(
|
||
trash=True, return_trash=True),
|
||
**kill_house_request_filters)
|
||
|
||
return_province_kill_requests = ProvinceKillRequest.objects.filter(
|
||
Q(trash=False, return_to_province=True) | Q(trash=True, return_trash=True),
|
||
**province_kill_request_filters).order_by('id')
|
||
|
||
return_province_kill_requests_aggregates = return_province_kill_requests.aggregate(
|
||
total_count=Count('id'),
|
||
total_operator_return_count=Count('id', filter=Q(trash=False, return_to_province=True)),
|
||
total_system_return_count=Count('id', filter=Q(trash=True, return_trash=True)),
|
||
total_quantity=Sum('total_killed_quantity'),
|
||
total_operator_return_quantity=Sum('main_quantity', filter=Q(trash=False, return_to_province=True)),
|
||
total_system_return_quantity=Sum('total_killed_quantity', filter=Q(trash=True, return_trash=True)),
|
||
total_weight=Sum('total_killed_weight'),
|
||
total_operator_return_weight=Sum(F('main_quantity') * F('province_request__poultry_request__Index_weight'),
|
||
filter=Q(trash=False, return_to_province=True)),
|
||
total_system_return_weight=Sum('total_killed_weight', filter=Q(trash=True, return_trash=True)),
|
||
|
||
)
|
||
return_kill_house_requests_aggregates = return_kill_house_requests.aggregate(
|
||
total_count=Count('id'),
|
||
total_non_receipt_count=Count('id', filter=Q(non_receipt=True, main_non_receipt=True)),
|
||
total_system_return_count=Count('id', filter=Q(trash=True, return_trash=True)),
|
||
total_quantity=Sum('accepted_real_quantity'),
|
||
total_non_receipt_quantity=Sum('accepted_real_quantity', filter=Q(non_receipt=True, main_non_receipt=True)),
|
||
total_system_return_quantity=Sum('accepted_real_quantity', filter=Q(trash=True, return_trash=True)),
|
||
total_weight=Sum('accepted_real_weight'),
|
||
total_non_receipt_weight=Sum('accepted_real_weight', filter=Q(non_receipt=True, main_non_receipt=True)),
|
||
total_system_return_weight=Sum('accepted_real_weight', filter=Q(trash=True, return_trash=True)),
|
||
)
|
||
province_kill_request_total_operator_return_quantity = return_province_kill_requests_aggregates[
|
||
'total_operator_return_quantity'] or 0
|
||
province_kill_request_total_system_return_quantity = return_province_kill_requests_aggregates[
|
||
'total_system_return_quantity'] or 0
|
||
province_kill_request_total_quantity = province_kill_request_total_operator_return_quantity + province_kill_request_total_system_return_quantity
|
||
province_kill_request_total_operator_return_weight = return_province_kill_requests_aggregates[
|
||
'total_operator_return_weight'] or 0
|
||
province_kill_request_total_system_return_weight = return_province_kill_requests_aggregates[
|
||
'total_system_return_weight'] or 0
|
||
province_kill_request_total_weight = province_kill_request_total_operator_return_weight + province_kill_request_total_system_return_weight
|
||
kill_house_request_total_system_return_weight = return_kill_house_requests_aggregates[
|
||
'total_system_return_weight'] or 0
|
||
total_return_weight_with_wage = province_kill_request_total_system_return_weight + kill_house_request_total_system_return_weight
|
||
result = {
|
||
"province_kill_request_total_count": return_province_kill_requests_aggregates['total_count'] or 0,
|
||
"province_kill_request_total_operator_return_count": return_province_kill_requests_aggregates[
|
||
'total_operator_return_count'] or 0,
|
||
"province_kill_request_total_system_return_count": return_province_kill_requests_aggregates[
|
||
'total_system_return_count'] or 0,
|
||
"province_kill_request_total_quantity": province_kill_request_total_quantity,
|
||
"province_kill_request_total_operator_return_quantity": province_kill_request_total_operator_return_quantity,
|
||
"province_kill_request_total_system_return_quantity": province_kill_request_total_system_return_quantity,
|
||
"province_kill_request_total_weight": province_kill_request_total_weight,
|
||
"province_kill_request_total_operator_return_weight": province_kill_request_total_operator_return_weight,
|
||
"province_kill_request_total_system_return_weight": province_kill_request_total_system_return_weight,
|
||
"kill_house_request_total_count": return_kill_house_requests_aggregates['total_count'] or 0,
|
||
"kill_house_request_total_non_receipt_count": return_kill_house_requests_aggregates[
|
||
'total_non_receipt_count'] or 0,
|
||
"kill_house_request_total_system_return_count": return_kill_house_requests_aggregates[
|
||
'total_system_return_count'] or 0,
|
||
"kill_house_request_total_quantity": return_kill_house_requests_aggregates['total_quantity'] or 0,
|
||
"kill_house_request_total_non_receipt_quantity": return_kill_house_requests_aggregates[
|
||
'total_non_receipt_quantity'] or 0,
|
||
"kill_house_request_total_system_return_quantity": return_kill_house_requests_aggregates[
|
||
'total_system_return_quantity'] or 0,
|
||
"kill_house_request_total_weight": return_kill_house_requests_aggregates['total_weight'] or 0,
|
||
"kill_house_request_total_non_receipt_weight": return_kill_house_requests_aggregates[
|
||
'total_non_receipt_weight'] or 0,
|
||
"kill_house_request_total_system_return_weight": kill_house_request_total_system_return_weight,
|
||
"total_return_weight_with_wage": total_return_weight_with_wage,
|
||
"total_return_wage": total_return_weight_with_wage * province_live_wage_type_amount,
|
||
}
|
||
|
||
return Response(result, status=status.HTTP_200_OK)
|
||
|
||
|
||
# class KillHouseRemainWeightViewSet(GenericAPIView):
|
||
# permission_classes = [TokenHasReadWriteScope]
|
||
#
|
||
# def get(self, request):
|
||
# # چک کردن آیا کاربر بازه تاریخی دلخواه فرستاده یا نه
|
||
# start_date_param = request.query_params.get('date1', None)
|
||
# end_date_param = request.query_params.get('date2', None)
|
||
#
|
||
# if start_date_param and end_date_param:
|
||
# # بازه تاریخی دلخواه از ورودی کاربر
|
||
# user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
# kill_house = KillHouse.objects.filter(kill_house_operator__user=user).first()
|
||
# product = RolesProducts.objects.filter(kill_house=kill_house, trash=False, name='مرغ گرم').first()
|
||
#
|
||
# # تبدیل string به date
|
||
# from datetime import datetime as dt
|
||
# start_date = dt.strptime(start_date_param, '%Y-%m-%d').date()
|
||
# end_date = dt.strptime(end_date_param, '%Y-%m-%d').date()
|
||
#
|
||
# # ساخت لیست تمام روزهای بین start_date و end_date
|
||
# days = []
|
||
# current_day = start_date
|
||
# while current_day <= end_date:
|
||
# days.append(current_day)
|
||
# current_day += timedelta(days=1)
|
||
#
|
||
# kill_house_requests = KillHouseRequest.objects.filter(
|
||
# input_warehouse=kill_house,
|
||
# kill_request__recive_date__date__gte=start_date,
|
||
# kill_request__recive_date__date__lte=end_date,
|
||
# ware_house_confirmation=True,
|
||
# trash=False,
|
||
# calculate_status=True,
|
||
# warehouse=True
|
||
# )
|
||
#
|
||
# kill_house_free_buying_bars = KillHouseFreeBarInformation.objects.filter(
|
||
# trash=False,
|
||
# calculate_status=True,
|
||
# warehouse=True,
|
||
# date__date__gte=start_date,
|
||
# date__date__lte=end_date,
|
||
# input_warehouse=kill_house
|
||
# ).exclude(entered_message='ورود به انبار مجازی')
|
||
#
|
||
# kill_house_allocations = StewardAllocation.objects.filter(
|
||
# kill_house=kill_house,
|
||
# trash=False,
|
||
# calculate_status=True,
|
||
# warehouse=True,
|
||
# receiver_state__in=('pending', 'accepted'),
|
||
# production_date__date__gte=start_date,
|
||
# production_date__date__lte=end_date
|
||
# )
|
||
#
|
||
# kill_house_free_sale_bars = KillHouseFreeSaleBarInformation.objects.filter(
|
||
# kill_house=kill_house,
|
||
# production_date__date__gte=start_date,
|
||
# production_date__date__lte=end_date,
|
||
# trash=False,
|
||
# calculate_status=True,
|
||
# warehouse=True
|
||
# )
|
||
#
|
||
# segmentations = PosSegmentation.objects.filter(
|
||
# kill_house=kill_house,
|
||
# production_date__date__gte=start_date,
|
||
# production_date__date__lte=end_date,
|
||
# trash=False,
|
||
# warehouse=True
|
||
# )
|
||
#
|
||
# transactions = ProductsTransactions.objects.filter(
|
||
# product=product,
|
||
# transaction__paid=True,
|
||
# transaction__date__date__gte=start_date,
|
||
# transaction__date__date__lte=end_date,
|
||
# trash=False,
|
||
# warehouse=True
|
||
# )
|
||
#
|
||
# governmental_list = []
|
||
# free_list = []
|
||
# final_dict = {}
|
||
#
|
||
# for day in days:
|
||
# kill_house_requests_info = kill_house_requests.aggregate(
|
||
# total_kill_house_request_governmental_weight=Sum(
|
||
# 'ware_house_accepted_real_weight',
|
||
# filter=Q(province_request__poultry_request__free_sale_in_province=False,
|
||
# kill_request__recive_date__date=day)
|
||
# ),
|
||
# total_kill_house_request_free_weight=Sum(
|
||
# 'ware_house_accepted_real_weight',
|
||
# filter=Q(province_request__poultry_request__free_sale_in_province=True,
|
||
# kill_request__recive_date__date=day)
|
||
# ),
|
||
# )
|
||
#
|
||
# kill_house_free_buying_bars_info = kill_house_free_buying_bars.aggregate(
|
||
# total_kill_house_free_buying_bars_weight=Sum(
|
||
# 'weight_of_carcasses', filter=Q(date__date=day)
|
||
# )
|
||
# )
|
||
#
|
||
# kill_house_allocations_info = kill_house_allocations.aggregate(
|
||
# total_kill_house_allocations_governmental_weight=Sum(
|
||
# 'real_weight_of_carcasses',
|
||
# filter=Q(quota='governmental', production_date__date=day)
|
||
# ),
|
||
# total_kill_house_allocations_free_weight=Sum(
|
||
# 'real_weight_of_carcasses',
|
||
# filter=Q(quota='free', production_date__date=day)
|
||
# ),
|
||
# )
|
||
#
|
||
# kill_house_free_sale_bars_info = kill_house_free_sale_bars.aggregate(
|
||
# total_kill_house_free_sale_bars_governmental_weight=Sum(
|
||
# 'real_weight_of_carcasses',
|
||
# filter=Q(quota='governmental', production_date__date=day)
|
||
# ),
|
||
# total_kill_house_free_sale_bars_free_weight=Sum(
|
||
# 'real_weight_of_carcasses',
|
||
# filter=Q(quota='free', production_date__date=day)
|
||
# ),
|
||
# )
|
||
#
|
||
# segmentations_info = segmentations.aggregate(
|
||
# segmentations_governmental_weight=Sum(
|
||
# 'weight', filter=Q(quota='governmental', production_date__date=day)
|
||
# ),
|
||
# segmentations_free_weight=Sum(
|
||
# 'weight', filter=Q(quota='free', production_date__date=day)
|
||
# ),
|
||
# )
|
||
#
|
||
# pos_allocated_weight_info = transactions.aggregate(
|
||
# pos_governmental_allocated_weight=Sum(
|
||
# 'cur_weight', filter=Q(price_approved=True, transaction__date__date=day)
|
||
# ),
|
||
# pos_free_allocated_weight=Sum(
|
||
# 'cur_weight', filter=Q(price_approved=False, transaction__date__date=day)
|
||
# ),
|
||
# )
|
||
#
|
||
# total_kill_house_request_governmental_weight = kill_house_requests_info[
|
||
# 'total_kill_house_request_governmental_weight'] or 0
|
||
# total_kill_house_request_free_weight = kill_house_requests_info[
|
||
# 'total_kill_house_request_free_weight'] or 0
|
||
# total_kill_house_free_buying_bars_weight = kill_house_free_buying_bars_info[
|
||
# 'total_kill_house_free_buying_bars_weight'] or 0
|
||
# total_kill_house_allocations_governmental_weight = kill_house_allocations_info[
|
||
# 'total_kill_house_allocations_governmental_weight'] or 0
|
||
# total_kill_house_allocations_free_weight = kill_house_allocations_info[
|
||
# 'total_kill_house_allocations_free_weight'] or 0
|
||
# total_kill_house_free_sale_bars_governmental_weight = kill_house_free_sale_bars_info[
|
||
# 'total_kill_house_free_sale_bars_governmental_weight'] or 0
|
||
# total_kill_house_free_sale_bars_free_weight = kill_house_free_sale_bars_info[
|
||
# 'total_kill_house_free_sale_bars_free_weight'] or 0
|
||
# segmentations_governmental_weight = segmentations_info['segmentations_governmental_weight'] or 0
|
||
# segmentations_free_weight = segmentations_info['segmentations_free_weight'] or 0
|
||
# pos_governmental_allocated_weight = pos_allocated_weight_info['pos_governmental_allocated_weight'] or 0
|
||
# pos_free_allocated_weight = pos_allocated_weight_info['pos_free_allocated_weight'] or 0
|
||
#
|
||
# total_governmental_input = total_kill_house_request_governmental_weight
|
||
# total_free_input = total_kill_house_request_free_weight + total_kill_house_free_buying_bars_weight
|
||
#
|
||
# total_governmental_output = (
|
||
# total_kill_house_allocations_governmental_weight +
|
||
# total_kill_house_free_sale_bars_governmental_weight +
|
||
# segmentations_governmental_weight +
|
||
# int(pos_governmental_allocated_weight / 1000)
|
||
# )
|
||
#
|
||
# total_free_output = (
|
||
# total_kill_house_allocations_free_weight +
|
||
# total_kill_house_free_sale_bars_free_weight +
|
||
# segmentations_free_weight +
|
||
# int(pos_free_allocated_weight / 1000)
|
||
# )
|
||
#
|
||
# governmental_data = {
|
||
# 'day': day,
|
||
# 'amount': total_governmental_input - total_governmental_output,
|
||
# }
|
||
# free_data = {
|
||
# 'day': day,
|
||
# 'amount': total_free_input - total_free_output,
|
||
# }
|
||
#
|
||
# governmental_list.append(governmental_data)
|
||
# free_list.append(free_data)
|
||
#
|
||
# final_dict['governmental'] = governmental_list
|
||
# final_dict['free'] = free_list
|
||
# return Response(final_dict, status=status.HTTP_200_OK)
|
||
#
|
||
# # حالت پیشفرض: 3 روز اخیر (کد قبلی دست نخورده)
|
||
# user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
# kill_house = KillHouse.objects.filter(kill_house_operator__user=user).first()
|
||
# product = RolesProducts.objects.filter(kill_house=kill_house, trash=False, name='مرغ گرم').first()
|
||
# today = datetime.now().date()
|
||
# yesterday = today - timedelta(days=1)
|
||
# two_days_ago = yesterday - timedelta(days=1)
|
||
# days = (two_days_ago, yesterday, today)
|
||
#
|
||
# archives = WarehouseArchive.objects.filter(kill_house=kill_house, trash=False,date__date__gte=two_days_ago,date__date__lte=today)
|
||
#
|
||
#
|
||
# kill_house_requests = KillHouseRequest.objects.filter(input_warehouse=kill_house,
|
||
# kill_request__recive_date__date__gte=two_days_ago,
|
||
# kill_request__recive_date__date__lte=today,
|
||
# ware_house_confirmation=True, trash=False,
|
||
# calculate_status=True, warehouse=True)
|
||
# kill_house_free_buying_bars = KillHouseFreeBarInformation.objects.filter(trash=False,
|
||
# calculate_status=True, warehouse=True,
|
||
# date__date__gte=two_days_ago,
|
||
# date__date__lte=today,
|
||
# input_warehouse=kill_house) \
|
||
# .exclude(entered_message='ورود به انبار مجازی')
|
||
# kill_house_allocations = StewardAllocation.objects.filter(
|
||
# kill_house=kill_house, trash=False, calculate_status=True, warehouse=True,
|
||
# receiver_state__in=('pending', 'accepted'), production_date__date__gte=two_days_ago,
|
||
# production_date__date__lte=today)
|
||
#
|
||
# kill_house_free_sale_bars = KillHouseFreeSaleBarInformation.objects.filter(kill_house=kill_house,
|
||
# production_date__date__gte=two_days_ago,
|
||
# production_date__date__lte=today,
|
||
# trash=False,
|
||
# calculate_status=True,
|
||
# warehouse=True)
|
||
# segmentations = PosSegmentation.objects.filter(kill_house=kill_house, production_date__date__gte=two_days_ago,
|
||
# production_date__date__lte=today, trash=False,
|
||
# warehouse=True)
|
||
# transactions = ProductsTransactions.objects.filter(product=product, transaction__paid=True,
|
||
# transaction__date__date__gte=two_days_ago,
|
||
# transaction__date__date__lte=today, trash=False,
|
||
# warehouse=True)
|
||
#
|
||
# governmental_list = []
|
||
# free_list = []
|
||
# final_dict = {}
|
||
#
|
||
# for day in days:
|
||
# kill_house_requests_info = kill_house_requests.aggregate(
|
||
# total_kill_house_request_governmental_weight=Sum('ware_house_accepted_real_weight', filter=Q(
|
||
# province_request__poultry_request__free_sale_in_province=False,
|
||
# kill_request__recive_date__date=day)),
|
||
# total_kill_house_request_free_weight=Sum('ware_house_accepted_real_weight', filter=Q(
|
||
# province_request__poultry_request__free_sale_in_province=True,
|
||
# kill_request__recive_date__date=day)),
|
||
#
|
||
# )
|
||
#
|
||
# kill_house_free_buying_bars_info = kill_house_free_buying_bars.aggregate(
|
||
# total_kill_house_free_buying_bars_weight=Sum('weight_of_carcasses', filter=Q(date__date=day)))
|
||
#
|
||
# kill_house_allocations_info = kill_house_allocations.aggregate(
|
||
# total_kill_house_allocations_governmental_weight=Sum('real_weight_of_carcasses',
|
||
# filter=Q(quota='governmental',
|
||
# production_date__date=day)),
|
||
# total_kill_house_allocations_free_weight=Sum('real_weight_of_carcasses',
|
||
# filter=Q(quota='free', production_date__date=day)),
|
||
#
|
||
# )
|
||
#
|
||
# kill_house_free_sale_bars_info = kill_house_free_sale_bars.aggregate(
|
||
# total_kill_house_free_sale_bars_governmental_weight=Sum('real_weight_of_carcasses',
|
||
# filter=Q(quota='governmental',
|
||
# production_date__date=day)),
|
||
# total_kill_house_free_sale_bars_free_weight=Sum('real_weight_of_carcasses',
|
||
# filter=Q(quota='free', production_date__date=day)),
|
||
#
|
||
# )
|
||
#
|
||
# segmentations_info = segmentations.aggregate(
|
||
# segmentations_governmental_weight=Sum('weight',
|
||
# filter=Q(quota='governmental', production_date__date=day)),
|
||
# segmentations_free_weight=Sum('weight', filter=Q(quota='free', production_date__date=day)),
|
||
#
|
||
# )
|
||
# pos_allocated_weight_info = transactions.aggregate(
|
||
# pos_governmental_allocated_weight=Sum('cur_weight',
|
||
# filter=Q(price_approved=True, transaction__date__date=day)),
|
||
# pos_free_allocated_weight=Sum('cur_weight',
|
||
# filter=Q(price_approved=False, transaction__date__date=day)),
|
||
#
|
||
# )
|
||
#
|
||
# archives_info = archives.aggregate(
|
||
# archives_governmental_weight=Sum('weight',
|
||
# filter=Q(quota='governmental', date__date=day)),
|
||
# archives_free_weight=Sum('weight',
|
||
# filter=Q(quota='free', date__date=day)),
|
||
#
|
||
# )
|
||
#
|
||
# total_kill_house_request_governmental_weight = kill_house_requests_info[
|
||
# 'total_kill_house_request_governmental_weight'] or 0
|
||
# total_kill_house_request_free_weight = kill_house_requests_info['total_kill_house_request_free_weight'] or 0
|
||
# total_kill_house_free_buying_bars_weight = kill_house_free_buying_bars_info[
|
||
# 'total_kill_house_free_buying_bars_weight'] or 0
|
||
# total_kill_house_allocations_governmental_weight = kill_house_allocations_info[
|
||
# 'total_kill_house_allocations_governmental_weight'] or 0
|
||
# total_kill_house_allocations_free_weight = kill_house_allocations_info[
|
||
# 'total_kill_house_allocations_free_weight'] or 0
|
||
# total_kill_house_free_sale_bars_governmental_weight = kill_house_free_sale_bars_info[
|
||
# 'total_kill_house_free_sale_bars_governmental_weight'] or 0
|
||
# total_kill_house_free_sale_bars_free_weight = kill_house_free_sale_bars_info[
|
||
# 'total_kill_house_free_sale_bars_free_weight'] or 0
|
||
# segmentations_governmental_weight = segmentations_info['segmentations_governmental_weight'] or 0
|
||
# segmentations_free_weight = segmentations_info['segmentations_free_weight'] or 0
|
||
# pos_governmental_allocated_weight = pos_allocated_weight_info['pos_governmental_allocated_weight'] or 0
|
||
# pos_free_allocated_weight = pos_allocated_weight_info['pos_free_allocated_weight'] or 0
|
||
#
|
||
# archives_governmental_weight = archives_info['archives_governmental_weight'] or 0
|
||
# archives_free_weight = archives_info['archives_free_weight'] or 0
|
||
#
|
||
# total_governmental_input = total_kill_house_request_governmental_weight
|
||
# total_free_input = total_kill_house_request_free_weight + total_kill_house_free_buying_bars_weight
|
||
# total_governmental_output = total_kill_house_allocations_governmental_weight + total_kill_house_free_sale_bars_governmental_weight + segmentations_governmental_weight + int(
|
||
# pos_governmental_allocated_weight / 1000)
|
||
# total_free_output = total_kill_house_allocations_free_weight + total_kill_house_free_sale_bars_free_weight + segmentations_free_weight + int(
|
||
# pos_free_allocated_weight / 1000)
|
||
# governmental_data = {
|
||
# 'day': day,
|
||
# 'amount': (total_governmental_input - total_governmental_output) - archives_governmental_weight,
|
||
# }
|
||
# free_data = {
|
||
# 'day': day,
|
||
# 'amount': (total_free_input - total_free_output) - archives_free_weight,
|
||
# }
|
||
#
|
||
# governmental_list.append(governmental_data)
|
||
# free_list.append(free_data)
|
||
# final_dict['governmental'] = governmental_list
|
||
# final_dict['free'] = free_list
|
||
# return Response(final_dict, status=status.HTTP_200_OK)
|
||
#
|
||
# # def get(self, request):
|
||
# # target_date = request.GET.get('date')
|
||
# # user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
# #
|
||
# # kill_house = KillHouse.objects.filter(kill_house_operator__user=user).first()
|
||
# #
|
||
# # product = RolesProducts.objects.filter(kill_house=kill_house, trash=False, name='مرغ گرم').first()
|
||
# #
|
||
# # today = datetime.now().date() if not target_date else datetime.strptime(target_date, "%Y-%m-%d").date()
|
||
# # month_ago = today - timedelta(days=30)
|
||
# # yesterday = today - timedelta(days=1)
|
||
# # two_days_ago = yesterday - timedelta(days=1)
|
||
# #
|
||
# # days = [month_ago + timedelta(days=i) for i in range(31)]
|
||
# # target_days = [two_days_ago ,yesterday , today]
|
||
# #
|
||
# # kill_house_requests = KillHouseRequest.objects.filter(
|
||
# # input_warehouse=kill_house,
|
||
# # kill_request__recive_date__date__gte=month_ago,
|
||
# # kill_request__recive_date__date__lte=today,
|
||
# # ware_house_confirmation=True,
|
||
# # trash=False,
|
||
# # calculate_status=True,
|
||
# # warehouse=True
|
||
# # )
|
||
# #
|
||
# # kill_house_free_buying_bars = KillHouseFreeBarInformation.objects.filter(
|
||
# # trash=False,
|
||
# # calculate_status=True,
|
||
# # warehouse=True,
|
||
# # date__date__gte=month_ago,
|
||
# # date__date__lte=today,
|
||
# # input_warehouse=kill_house
|
||
# # ).exclude(entered_message='ورود به انبار مجازی')
|
||
# #
|
||
# # kill_house_allocations = StewardAllocation.objects.filter(
|
||
# # kill_house=kill_house,
|
||
# # trash=False,
|
||
# # calculate_status=True,
|
||
# # warehouse=True,
|
||
# # receiver_state__in=('pending', 'accepted'),
|
||
# # production_date__date__gte=month_ago,
|
||
# # production_date__date__lte=today
|
||
# # )
|
||
# #
|
||
# # kill_house_free_sale_bars = KillHouseFreeSaleBarInformation.objects.filter(
|
||
# # kill_house=kill_house,
|
||
# # production_date__date__gte=month_ago,
|
||
# # production_date__date__lte=today,
|
||
# # trash=False,
|
||
# # calculate_status=True,
|
||
# # warehouse=True
|
||
# # )
|
||
# #
|
||
# # segmentations = PosSegmentation.objects.filter(
|
||
# # kill_house=kill_house,
|
||
# # production_date__date__gte=month_ago,
|
||
# # production_date__date__lte=today,
|
||
# # trash=False,
|
||
# # warehouse=True
|
||
# # )
|
||
# #
|
||
# # transactions = ProductsTransactions.objects.filter(
|
||
# # product=product,
|
||
# # transaction__paid=True,
|
||
# # transaction__date__date__gte=month_ago,
|
||
# # transaction__date__date__lte=today,
|
||
# # trash=False,
|
||
# # warehouse=True
|
||
# # )
|
||
# # archives = WarehouseArchive.objects.filter(kill_house=kill_house, trash=False)
|
||
# #
|
||
# #
|
||
# # governmental_list = []
|
||
# # free_list = []
|
||
# # final_dict = {}
|
||
# #
|
||
# # for day in days:
|
||
# # kill_house_requests_info = kill_house_requests.aggregate(
|
||
# # total_kill_house_request_governmental_weight=Sum(
|
||
# # 'ware_house_accepted_real_weight',
|
||
# # filter=Q(province_request__poultry_request__free_sale_in_province=False,
|
||
# # kill_request__recive_date__date=day)
|
||
# # ),
|
||
# # total_kill_house_request_free_weight=Sum(
|
||
# # 'ware_house_accepted_real_weight',
|
||
# # filter=Q(province_request__poultry_request__free_sale_in_province=True,
|
||
# # kill_request__recive_date__date=day)
|
||
# # ),
|
||
# # )
|
||
# #
|
||
# # kill_house_free_buying_bars_info = kill_house_free_buying_bars.aggregate(
|
||
# # total_kill_house_free_buying_bars_weight=Sum(
|
||
# # 'weight_of_carcasses', filter=Q(date__date=day)
|
||
# # )
|
||
# # )
|
||
# #
|
||
# # kill_house_allocations_info = kill_house_allocations.aggregate(
|
||
# # total_kill_house_allocations_governmental_weight=Sum(
|
||
# # 'real_weight_of_carcasses',
|
||
# # filter=Q(quota='governmental', production_date__date=day)
|
||
# # ),
|
||
# # total_kill_house_allocations_free_weight=Sum(
|
||
# # 'real_weight_of_carcasses',
|
||
# # filter=Q(quota='free', production_date__date=day)
|
||
# # ),
|
||
# # )
|
||
# #
|
||
# # kill_house_free_sale_bars_info = kill_house_free_sale_bars.aggregate(
|
||
# # total_kill_house_free_sale_bars_governmental_weight=Sum(
|
||
# # 'real_weight_of_carcasses',
|
||
# # filter=Q(quota='governmental', production_date__date=day)
|
||
# # ),
|
||
# # total_kill_house_free_sale_bars_free_weight=Sum(
|
||
# # 'real_weight_of_carcasses',
|
||
# # filter=Q(quota='free', production_date__date=day)
|
||
# # ),
|
||
# # )
|
||
# #
|
||
# # segmentations_info = segmentations.aggregate(
|
||
# # segmentations_governmental_weight=Sum(
|
||
# # 'weight', filter=Q(quota='governmental', production_date__date=day)
|
||
# # ),
|
||
# # segmentations_free_weight=Sum(
|
||
# # 'weight', filter=Q(quota='free', production_date__date=day)
|
||
# # ),
|
||
# # )
|
||
# #
|
||
# # pos_allocated_weight_info = transactions.aggregate(
|
||
# # pos_governmental_allocated_weight=Sum(
|
||
# # 'cur_weight', filter=Q(price_approved=True, transaction__date__date=day)
|
||
# # ),
|
||
# # pos_free_allocated_weight=Sum(
|
||
# # 'cur_weight', filter=Q(price_approved=False, transaction__date__date=day)
|
||
# # ),
|
||
# # )
|
||
# #
|
||
# # archives_info = archives.aggregate(
|
||
# # total_archive_governmental_weight=Sum('weight', filter=Q(date__date=day, quota='governmental')),
|
||
# # total_archive_free_weight=Sum('weight', filter=Q(date__date=day, quota='free')),
|
||
# # )
|
||
# #
|
||
# # total_kill_house_request_governmental_weight = kill_house_requests_info['total_kill_house_request_governmental_weight'] or 0
|
||
# # total_kill_house_request_free_weight = kill_house_requests_info['total_kill_house_request_free_weight'] or 0
|
||
# # total_kill_house_free_buying_bars_weight = kill_house_free_buying_bars_info['total_kill_house_free_buying_bars_weight'] or 0
|
||
# # total_kill_house_allocations_governmental_weight = kill_house_allocations_info['total_kill_house_allocations_governmental_weight'] or 0
|
||
# # total_kill_house_allocations_free_weight = kill_house_allocations_info['total_kill_house_allocations_free_weight'] or 0
|
||
# # total_kill_house_free_sale_bars_governmental_weight = kill_house_free_sale_bars_info['total_kill_house_free_sale_bars_governmental_weight'] or 0
|
||
# # total_kill_house_free_sale_bars_free_weight = kill_house_free_sale_bars_info['total_kill_house_free_sale_bars_free_weight'] or 0
|
||
# # segmentations_governmental_weight = segmentations_info['segmentations_governmental_weight'] or 0
|
||
# # segmentations_free_weight = segmentations_info['segmentations_free_weight'] or 0
|
||
# # pos_governmental_allocated_weight = pos_allocated_weight_info['pos_governmental_allocated_weight'] or 0
|
||
# # pos_free_allocated_weight = pos_allocated_weight_info['pos_free_allocated_weight'] or 0
|
||
# # total_archive_governmental_weight = archives_info['total_archive_governmental_weight'] or 0
|
||
# # total_archive_free_weight = archives_info['total_archive_free_weight'] or 0
|
||
# #
|
||
# # total_governmental_input = total_kill_house_request_governmental_weight
|
||
# # total_free_input = total_kill_house_request_free_weight + total_kill_house_free_buying_bars_weight
|
||
# #
|
||
# # total_governmental_output = (
|
||
# # total_kill_house_allocations_governmental_weight +
|
||
# # total_kill_house_free_sale_bars_governmental_weight +
|
||
# # segmentations_governmental_weight +
|
||
# # int(pos_governmental_allocated_weight / 1000)
|
||
# # )
|
||
# #
|
||
# # total_free_output = (
|
||
# # total_kill_house_allocations_free_weight +
|
||
# # total_kill_house_free_sale_bars_free_weight +
|
||
# # segmentations_free_weight +
|
||
# # int(pos_free_allocated_weight / 1000)
|
||
# # )
|
||
# #
|
||
# # governmental_amount = (
|
||
# # total_governmental_input - total_governmental_output) - total_archive_governmental_weight
|
||
# # free_amount = (total_free_input - total_free_output) - total_archive_free_weight
|
||
# #
|
||
# # governmental_data = {
|
||
# # 'day': day,
|
||
# # 'amount': governmental_amount,
|
||
# # 'active': True if day in target_days else False,
|
||
# # }
|
||
# # free_data = {
|
||
# # 'day': day,
|
||
# # 'amount': free_amount,
|
||
# # 'active': True if day in target_days else False,
|
||
# # }
|
||
# #
|
||
# # governmental_list.append(governmental_data)
|
||
# # free_list.append(free_data)
|
||
# #
|
||
# # final_dict['governmental'] = governmental_list
|
||
# # final_dict['free'] = free_list
|
||
# #
|
||
# # return Response(final_dict, status=status.HTTP_200_OK)
|
||
|
||
class KillHouseRemainWeightViewSet(GenericAPIView):
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
|
||
def get(self, request):
|
||
target_date = request.GET.get('date')
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user).first()
|
||
product = RolesProducts.objects.filter(kill_house=kill_house, trash=False, name='مرغ گرم').first()
|
||
|
||
today = datetime.now().date() if not target_date else datetime.strptime(target_date, "%Y-%m-%d").date()
|
||
month_ago = today - timedelta(days=30)
|
||
yesterday = today - timedelta(days=1)
|
||
two_days_ago = yesterday - timedelta(days=1)
|
||
|
||
days = [month_ago + timedelta(days=i) for i in range(31)]
|
||
target_days = {two_days_ago, yesterday, today}
|
||
req_vals = list(
|
||
KillHouseRequest.objects.filter(
|
||
input_warehouse=kill_house,
|
||
kill_request__recive_date__date__gte=month_ago,
|
||
kill_request__recive_date__date__lte=today,
|
||
ware_house_confirmation=True,
|
||
trash=False,
|
||
calculate_status=True,
|
||
warehouse=True
|
||
).values(
|
||
"kill_request__recive_date__date",
|
||
"ware_house_accepted_real_weight",
|
||
"province_request__poultry_request__free_sale_in_province"
|
||
)
|
||
)
|
||
|
||
free_buy_vals = list(
|
||
KillHouseFreeBarInformation.objects.filter(
|
||
trash=False,
|
||
calculate_status=True,
|
||
warehouse=True,
|
||
date__date__gte=month_ago,
|
||
date__date__lte=today,
|
||
input_warehouse=kill_house
|
||
).exclude(entered_message='ورود به انبار مجازی')
|
||
.values("date__date", "weight_of_carcasses")
|
||
)
|
||
|
||
alloc_vals = list(
|
||
StewardAllocation.objects.filter(
|
||
kill_house=kill_house,
|
||
trash=False,
|
||
calculate_status=True,
|
||
warehouse=True,
|
||
receiver_state__in=('pending', 'accepted'),
|
||
production_date__date__gte=month_ago,
|
||
production_date__date__lte=today
|
||
).values(
|
||
"production_date__date",
|
||
"quota",
|
||
"real_weight_of_carcasses"
|
||
)
|
||
)
|
||
|
||
free_sale_vals = list(
|
||
KillHouseFreeSaleBarInformation.objects.filter(
|
||
kill_house=kill_house,
|
||
production_date__date__gte=month_ago,
|
||
production_date__date__lte=today,
|
||
trash=False,
|
||
calculate_status=True,
|
||
warehouse=True
|
||
).values("production_date__date", "quota", "real_weight_of_carcasses")
|
||
)
|
||
|
||
seg_vals = list(
|
||
PosSegmentation.objects.filter(
|
||
kill_house=kill_house,
|
||
production_date__date__gte=month_ago,
|
||
production_date__date__lte=today,
|
||
trash=False,
|
||
warehouse=True
|
||
).values("production_date__date", "quota", "weight")
|
||
)
|
||
|
||
pos_vals = list(
|
||
ProductsTransactions.objects.filter(
|
||
product=product,
|
||
transaction__paid=True,
|
||
transaction__date__date__gte=month_ago,
|
||
transaction__date__date__lte=today,
|
||
trash=False,
|
||
warehouse=True
|
||
).values(
|
||
"transaction__date__date",
|
||
"price_approved",
|
||
"cur_weight"
|
||
)
|
||
)
|
||
|
||
arch_vals = list(
|
||
WarehouseArchive.objects.filter(
|
||
kill_house=kill_house,
|
||
warehouse=True,
|
||
trash=False
|
||
).values("date__date", "quota", "weight")
|
||
)
|
||
|
||
req_daily = {}
|
||
for r in req_vals:
|
||
d = r["kill_request__recive_date__date"]
|
||
w = r["ware_house_accepted_real_weight"] or 0
|
||
if d not in req_daily:
|
||
req_daily[d] = {"governmental": 0, "free": 0}
|
||
if r["province_request__poultry_request__free_sale_in_province"]:
|
||
req_daily[d]["free"] += w
|
||
else:
|
||
req_daily[d]["governmental"] += w
|
||
|
||
free_buy_daily = {}
|
||
for r in free_buy_vals:
|
||
d = r["date__date"]
|
||
w = r["weight_of_carcasses"] or 0
|
||
free_buy_daily[d] = free_buy_daily.get(d, 0) + w
|
||
|
||
alloc_daily = {}
|
||
for r in alloc_vals:
|
||
d = r["production_date__date"]
|
||
w = r["real_weight_of_carcasses"] or 0
|
||
q = r["quota"]
|
||
if d not in alloc_daily:
|
||
alloc_daily[d] = {"governmental": 0, "free": 0}
|
||
alloc_daily[d][q] += w
|
||
|
||
free_sale_daily = {}
|
||
for r in free_sale_vals:
|
||
d = r["production_date__date"]
|
||
w = r["real_weight_of_carcasses"] or 0
|
||
q = r["quota"]
|
||
if d not in free_sale_daily:
|
||
free_sale_daily[d] = {"governmental": 0, "free": 0}
|
||
free_sale_daily[d][q] += w
|
||
|
||
seg_daily = {}
|
||
for r in seg_vals:
|
||
d = r["production_date__date"]
|
||
w = r["weight"] or 0
|
||
q = r["quota"]
|
||
if d not in seg_daily:
|
||
seg_daily[d] = {"governmental": 0, "free": 0}
|
||
seg_daily[d][q] += w
|
||
|
||
pos_daily = {}
|
||
for r in pos_vals:
|
||
d = r["transaction__date__date"]
|
||
w = r["cur_weight"] or 0
|
||
if d not in pos_daily:
|
||
pos_daily[d] = {"governmental": 0, "free": 0}
|
||
if r["price_approved"]:
|
||
pos_daily[d]["governmental"] += w
|
||
else:
|
||
pos_daily[d]["free"] += w
|
||
|
||
arch_daily = {}
|
||
for r in arch_vals:
|
||
d = r["date__date"]
|
||
w = r["weight"] or 0
|
||
q = r["quota"]
|
||
if d not in arch_daily:
|
||
arch_daily[d] = {"governmental": 0, "free": 0}
|
||
arch_daily[d][q] += w
|
||
|
||
governmental_list = []
|
||
free_list = []
|
||
|
||
for day in days:
|
||
gov_in = req_daily.get(day, {}).get("governmental", 0)
|
||
free_in = req_daily.get(day, {}).get("free", 0) + free_buy_daily.get(day, 0)
|
||
|
||
gov_out = (
|
||
alloc_daily.get(day, {}).get("governmental", 0) +
|
||
free_sale_daily.get(day, {}).get("governmental", 0) +
|
||
seg_daily.get(day, {}).get("governmental", 0) +
|
||
(pos_daily.get(day, {}).get("governmental", 0) // 1000)
|
||
)
|
||
|
||
free_out = (
|
||
alloc_daily.get(day, {}).get("free", 0) +
|
||
free_sale_daily.get(day, {}).get("free", 0) +
|
||
seg_daily.get(day, {}).get("free", 0) +
|
||
(pos_daily.get(day, {}).get("free", 0) // 1000)
|
||
)
|
||
|
||
gov_remain = gov_in - gov_out - arch_daily.get(day, {}).get("governmental", 0)
|
||
free_remain = free_in - free_out - arch_daily.get(day, {}).get("free", 0)
|
||
|
||
governmental_list.append({
|
||
"day": day,
|
||
"amount": gov_remain if gov_remain > 0 else 0,
|
||
"active": day in target_days,
|
||
})
|
||
|
||
free_list.append({
|
||
"day": day,
|
||
"amount": free_remain if free_remain > 0 else 0,
|
||
"active": day in target_days,
|
||
})
|
||
|
||
return Response({
|
||
"governmental": governmental_list,
|
||
"free": free_list
|
||
}, status=status.HTTP_200_OK)
|
||
|
||
|
||
# class TotalKillHouseRemainWeightViewSet(GenericAPIView):
|
||
# permission_classes = [TokenHasReadWriteScope]
|
||
# serializer_class = TotalKillHouseRemainWeightViewSetSerializer
|
||
# pagination_class = CustomPagination
|
||
# filter_backends = [DjangoFilterBackend]
|
||
# filterset_class = KillHouseFilterSet
|
||
# filterset_fields = [
|
||
# 'name',
|
||
# 'kill_house_operator__user__mobile',
|
||
# 'kill_house_operator__user__fullname',
|
||
# 'kill_house_operator__user__first_name',
|
||
# 'kill_house_operator__user__last_name'
|
||
#
|
||
# ]
|
||
#
|
||
# def get(self, request):
|
||
#
|
||
# kill_house_filters = {'out_province': False, 'trash': False, 'total_remain_warehouse_weight__gt': 0}
|
||
# kill_houses = KillHouse.objects.filter(**kill_house_filters).order_by('id', 'killer')
|
||
#
|
||
# if 'search' in request.GET:
|
||
# kill_house_list = []
|
||
# if request.GET['search'] == 'filter':
|
||
# if request.GET['value'] != "" and request.GET['value'] != 'undefined':
|
||
# for item in self.filterset_fields:
|
||
# query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
# if (self.filterset_class(
|
||
# data=query,
|
||
# queryset=kill_houses
|
||
# )
|
||
# ).filter():
|
||
# ps = self.filterset_class(data=query, queryset=kill_houses)
|
||
# kill_house_list = ps.filter()
|
||
# kill_houses = [] if len(
|
||
# kill_house_list) == 0 else kill_house_list
|
||
#
|
||
# page_size = request.query_params.get('page_size', None)
|
||
# if page_size:
|
||
# self.pagination_class.page_size = int(page_size)
|
||
#
|
||
# page = self.paginate_queryset(kill_houses)
|
||
# if page is not None:
|
||
# serializer = self.get_serializer(page, many=True)
|
||
# return self.get_paginated_response(serializer.data)
|
||
#
|
||
# serializer = self.serializer_class(kill_houses, many=True)
|
||
# return Response(serializer.data, status=status.HTTP_200_OK)
|
||
class TotalKillHouseRemainWeightViewSet(GenericAPIView):
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
serializer_class = TotalKillHouseRemainWeightViewSetSerializer
|
||
pagination_class = CustomPagination
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = KillHouseFilterSet
|
||
filterset_fields = [
|
||
'name',
|
||
'kill_house_operator__user__mobile',
|
||
'kill_house_operator__user__fullname',
|
||
'kill_house_operator__user__first_name',
|
||
'kill_house_operator__user__last_name'
|
||
|
||
]
|
||
|
||
def get(self, request):
|
||
quota = request.GET.get("quota")
|
||
kill_house_filters = {'out_province': False, 'trash': False, 'total_remain_warehouse_weight__gt': 0}
|
||
kill_houses = KillHouse.objects.filter(**kill_house_filters).order_by('id', 'killer')
|
||
|
||
if 'search' in request.GET:
|
||
kill_house_list = []
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=kill_houses
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=kill_houses)
|
||
kill_house_list = ps.filter()
|
||
kill_houses = [] if len(
|
||
kill_house_list) == 0 else kill_house_list
|
||
|
||
all_data = TotalKillHouseRemainWeightViewSetSerializer(kill_houses, many=True).data
|
||
if quota in ("governmental", "free"):
|
||
filtered = []
|
||
today = datetime.today().date()
|
||
two_days_ago = today - timedelta(days=2)
|
||
|
||
for item in all_data:
|
||
info = item.get("info")
|
||
if not info:
|
||
continue
|
||
|
||
for row in info.get(quota, []):
|
||
day = row["day"]
|
||
amount = row["amount"]
|
||
if amount > 0 and day < two_days_ago:
|
||
filtered.append(item)
|
||
break
|
||
|
||
all_data = filtered
|
||
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(all_data)
|
||
if page is not None:
|
||
# serializer = self.get_serializer(page, many=True)
|
||
return self.get_paginated_response(page)
|
||
|
||
# serializer = self.serializer_class(kill_houses, many=True)
|
||
return Response(all_data, status=status.HTTP_200_OK)
|
||
|
||
|
||
class TotalKillHouseWarehouseArchiveDashboardViewSet(GenericAPIView):
|
||
permission_classes = [TokenHasReadWriteScope]
|
||
serializer_class = TotalKillHouseWarehouseArchiveDashboardSerializer
|
||
pagination_class = CustomPagination
|
||
filter_backends = [DjangoFilterBackend]
|
||
filterset_class = KillHouseFilterSet
|
||
filterset_fields = [
|
||
'name',
|
||
'kill_house_operator__user__mobile',
|
||
'kill_house_operator__user__fullname',
|
||
'kill_house_operator__user__first_name',
|
||
'kill_house_operator__user__last_name'
|
||
|
||
]
|
||
|
||
def get(self, request):
|
||
date1 = request.GET.get('date1')
|
||
date2 = request.GET.get('date2')
|
||
archives_filters = {"trash": False, "kill_house__isnull": False}
|
||
if date1:
|
||
archives_filters['create_date__date__gte'] = date1
|
||
archives_filters['create_date__date__lte'] = date2
|
||
|
||
archives = WarehouseArchive.objects.filter(**archives_filters)
|
||
kill_houses = KillHouse.objects.filter(id__in=archives.values_list('kill_house__id', flat=True), trash=False)
|
||
if 'search' in request.GET:
|
||
kill_house_list = []
|
||
if request.GET['search'] == 'filter':
|
||
if request.GET['value'] != "" and request.GET['value'] != 'undefined':
|
||
for item in self.filterset_fields:
|
||
query = QueryDict('{0}__contains={1}'.format(item, request.GET['value']))
|
||
if (self.filterset_class(
|
||
data=query,
|
||
queryset=kill_houses
|
||
)
|
||
).filter():
|
||
ps = self.filterset_class(data=query, queryset=kill_houses)
|
||
kill_house_list = ps.filter()
|
||
kill_houses = [] if len(
|
||
kill_house_list) == 0 else kill_house_list
|
||
|
||
page_size = request.query_params.get('page_size', None)
|
||
if page_size:
|
||
self.pagination_class.page_size = int(page_size)
|
||
|
||
page = self.paginate_queryset(kill_houses)
|
||
if page is not None:
|
||
serializer = self.get_serializer(page, many=True, context={'date1': date1, 'date2': date2})
|
||
return self.get_paginated_response(serializer.data)
|
||
|
||
serializer = self.serializer_class(kill_houses, many=True, context={'date1': date1, 'date2': date2})
|
||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
||
|
||
def fix_wage(request):
|
||
kill_house_requests = KillHouseRequest.objects.filter(trash=True, return_trash=True)
|
||
kill_house_requests_values = kill_house_requests.values_list('province_kill_request__id', flat=True).distinct()
|
||
province_requests = ProvinceKillRequest.objects.filter(trash=True, id__in=kill_house_requests_values,
|
||
return_trash=True)
|
||
return HttpResponse(province_requests.count())
|
||
|
||
|
||
class KillHouseLock(APIView):
|
||
|
||
def get(self, request):
|
||
|
||
wage_lock = False
|
||
ware_house_lock = False
|
||
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).first()
|
||
kill_house_purchase = KillHousePurchaseRequest.objects.filter(kill_house=kill_house).first()
|
||
total_unpaid_wage = get_finance_info(kill_house)['total_price']
|
||
if kill_house.killer and kill_house.type=='public':
|
||
slaughter_transactions = InternalTransaction.objects.filter(kill_house=kill_house,parent_kill_house=kill_house,
|
||
status='completed',
|
||
trash=False)
|
||
else:
|
||
slaughter_transactions = InternalTransaction.objects.filter(
|
||
Q(kill_house=kill_house) | Q(parent_kill_house=kill_house),
|
||
status='completed',
|
||
trash=False)
|
||
|
||
total_paid_wage = slaughter_transactions.aggregate(total=Sum('amount'))[
|
||
'total'] or 0
|
||
total_unpaid_wage -= total_paid_wage
|
||
|
||
if kill_house_purchase:
|
||
if kill_house_purchase.limitation == True:
|
||
|
||
if kill_house_purchase.limitation_number <= total_unpaid_wage:
|
||
wage_lock = True
|
||
|
||
if kill_house.ware_house_remaining_weight_limitation_status:
|
||
if kill_house.total_remain_warehouse_governmental_weight > kill_house.ware_house_remaining_weight_limitation:
|
||
ware_house_lock = True
|
||
|
||
if kill_house.ware_house_remaining_percent_limitation_status:
|
||
if not check_kill_house_remain_limitation_weight(kill_house):
|
||
ware_house_lock = True
|
||
|
||
result = {
|
||
'wage': total_unpaid_wage,
|
||
'wage_lock': wage_lock,
|
||
'ware_house_lock': ware_house_lock
|
||
}
|
||
|
||
return Response (result,status=status.HTTP_200_OK)
|