459 lines
22 KiB
Python
459 lines
22 KiB
Python
|
|
from datetime import datetime, timedelta
|
||
|
|
|
||
|
|
import jdatetime
|
||
|
|
from dateutil.relativedelta import relativedelta
|
||
|
|
from django.db.models import Count, Q
|
||
|
|
from django.http import HttpResponse
|
||
|
|
from django.views.decorators.csrf import csrf_exempt
|
||
|
|
from oauth2_provider.contrib.rest_framework import TokenHasReadWriteScope
|
||
|
|
from rest_framework import viewsets
|
||
|
|
from rest_framework import status
|
||
|
|
from rest_framework.decorators import api_view, permission_classes
|
||
|
|
from rest_framework.permissions import AllowAny
|
||
|
|
from rest_framework.response import Response
|
||
|
|
|
||
|
|
from LiveStock.LiveStoksAndPoultry.filterset import LiveStockFilterSet
|
||
|
|
from LiveStock.LiveStoksAndPoultry.serializers import LiveStockSerializer, PosLiveStockSerializer
|
||
|
|
from LiveStock.Rancher.helpers import update_one_rancher
|
||
|
|
from LiveStock.helpers import build_query, CustomPagination, convert_to_miladi
|
||
|
|
from LiveStock.models import LiveStock, Rancher, LiveStockProduct, LiveStockRolseProduct, Cooperative, Union, \
|
||
|
|
CooperativeProductsShare
|
||
|
|
from authentication.models import SystemUserProfile
|
||
|
|
from panel.models import POSMachine, PosMachineTransactions
|
||
|
|
from panel.validate_headers import PosDeviceValidator
|
||
|
|
|
||
|
|
|
||
|
|
class LiveStockViewSet(viewsets.ModelViewSet):
|
||
|
|
queryset = LiveStock.objects.filter(trash=False).order_by('-birth_day_gh')
|
||
|
|
permission_classes = [TokenHasReadWriteScope]
|
||
|
|
serializer_class = LiveStockSerializer
|
||
|
|
filterset_class = LiveStockFilterSet
|
||
|
|
pagination_class = CustomPagination
|
||
|
|
|
||
|
|
def list(self, request, *args, **kwargs):
|
||
|
|
role = request.GET['role']
|
||
|
|
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
|
|
type=request.GET.get('type')
|
||
|
|
if type == 'archive':
|
||
|
|
live_stocks=LiveStock.objects.filter(trash=True,archive=True).order_by('-birth_day_gh')
|
||
|
|
else:
|
||
|
|
live_stocks=LiveStock.objects.filter(trash=False).order_by('-birth_day_gh')
|
||
|
|
|
||
|
|
if role == 'Cooperative':
|
||
|
|
# todo:فعلا چون دامدار تکراری داریم نمیشه از طریق دامدار پیداکرد باید از طریف آدرس بریم
|
||
|
|
cooperative = Cooperative.objects.get(user=user, trash=False)
|
||
|
|
ranchers = Rancher.objects.filter(city=cooperative.address.city.name).values_list('herd_code',
|
||
|
|
flat=True).distinct()
|
||
|
|
live_stocks = live_stocks.filter(herd_code__in=ranchers)
|
||
|
|
|
||
|
|
date1 = request.GET.get('date1')
|
||
|
|
date2 = request.GET.get('date2')
|
||
|
|
if date1 and date2:
|
||
|
|
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
|
|
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
|
|
live_stocks = live_stocks.filter(birth_day__gte=date1, birth_day__lte=date2)
|
||
|
|
|
||
|
|
value = request.GET.get('value')
|
||
|
|
search = request.GET.get('search')
|
||
|
|
if value and search == 'filter':
|
||
|
|
if search != 'undefined' and search.strip():
|
||
|
|
live_stocks = live_stocks.filter(
|
||
|
|
build_query(self.filterset_class.Meta.fields, value)
|
||
|
|
)
|
||
|
|
page = self.paginate_queryset(live_stocks)
|
||
|
|
if page is not None:
|
||
|
|
serializer = self.serializer_class(page, many=True)
|
||
|
|
return self.get_paginated_response(serializer.data)
|
||
|
|
serializer = self.serializer_class(live_stocks, many=True)
|
||
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
|
|
||
|
|
def create(self, request, *args, **kwargs):
|
||
|
|
rancher = Rancher.objects.get(key=request.data['rancher_key'])
|
||
|
|
request.data.pop('rancher_key')
|
||
|
|
|
||
|
|
serializer = self.serializer_class(data=request.data)
|
||
|
|
if serializer.is_valid():
|
||
|
|
live_stock = serializer.create(validated_data=request.data)
|
||
|
|
live_stock.rancher = rancher
|
||
|
|
live_stock.herd_code = rancher.herd_code
|
||
|
|
live_stock.contractor_code = rancher.contractor_code
|
||
|
|
live_stock.save()
|
||
|
|
return Response({"result": "با موفقیت ثبت شد"}, status=status.HTTP_201_CREATED)
|
||
|
|
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||
|
|
|
||
|
|
def update(self, request, pk=None, *args, **kwargs):
|
||
|
|
user=SystemUserProfile.objects.filter(trash=False,user=request.user).first()
|
||
|
|
|
||
|
|
filter_kwargs = {'key': request.data['live_stock_key']}
|
||
|
|
if 'return_from_archive' in request.data.keys():
|
||
|
|
filter_kwargs['trash']=True
|
||
|
|
filter_kwargs['archive']=True
|
||
|
|
else:
|
||
|
|
filter_kwargs['trash'] = False
|
||
|
|
|
||
|
|
live_stock = LiveStock.objects.get(**filter_kwargs)
|
||
|
|
live_stocks = LiveStock.objects.filter(herd_code=live_stock.herd_code, trash=False)
|
||
|
|
rancher = Rancher.objects.get(herd_code=live_stock.herd_code)
|
||
|
|
|
||
|
|
request.data.pop('live_stock_key')
|
||
|
|
serializer = self.serializer_class(live_stock)
|
||
|
|
if 'herd_code' in request.data.keys() and request.data['herd_code']:
|
||
|
|
rancher.herd_code = request.data['herd_code']
|
||
|
|
rancher.save()
|
||
|
|
live_stocks.update(herd_code=request.data['herd_code'])
|
||
|
|
if 'return_from_archive' in request.data.keys():
|
||
|
|
live_stock.archive = False
|
||
|
|
live_stock.trash = False
|
||
|
|
live_stock.returner_from_archive=user.fullname
|
||
|
|
live_stock.return_from_archive_date=datetime.now()
|
||
|
|
live_stock.save()
|
||
|
|
request.data.pop('return_from_archive')
|
||
|
|
|
||
|
|
serializer.update(instance=live_stock, validated_data=request.data)
|
||
|
|
return Response(serializer.data, status=status.HTTP_200_OK)
|
||
|
|
|
||
|
|
def destroy(self, request, *args, **kwargs):
|
||
|
|
user=SystemUserProfile.objects.filter(trash=False,user=request.user).first()
|
||
|
|
live_stock = LiveStock.objects.get(key=request.GET['live_stock_key'], trash=False)
|
||
|
|
if not live_stock.birth_day_gh:
|
||
|
|
year, month, day = map(int, live_stock.birth_day.split('/'))
|
||
|
|
live_stock.birth_day_gh = convert_to_miladi(year, month, day)
|
||
|
|
live_stock.save()
|
||
|
|
live_stock.trash=True
|
||
|
|
live_stock.archive=True
|
||
|
|
live_stock.archiver=user.fullname
|
||
|
|
live_stock.archive_date=datetime.now()
|
||
|
|
live_stock.age_of_archive=(datetime.now().date() - live_stock.birth_day_gh.date()).days
|
||
|
|
live_stock.save()
|
||
|
|
|
||
|
|
return Response({"result":"با موفقیت بایگانی شد."}, status=status.HTTP_200_OK)
|
||
|
|
|
||
|
|
class PosLiveStockViewSet(viewsets.ModelViewSet):
|
||
|
|
queryset = Rancher.objects.all()
|
||
|
|
permission_classes = [AllowAny]
|
||
|
|
serializer_class = PosLiveStockSerializer
|
||
|
|
|
||
|
|
def get_transactions_month(self,natcode):
|
||
|
|
import json
|
||
|
|
transactions = PosMachineTransactions.objects.filter(natcode=natcode,paid=True,live_stock=True, trash=False)
|
||
|
|
|
||
|
|
has_month_data = False
|
||
|
|
last_month = None
|
||
|
|
earliest_transaction_date = None
|
||
|
|
|
||
|
|
for transaction in transactions:
|
||
|
|
try:
|
||
|
|
additional_data = json.loads(transaction.additional)
|
||
|
|
if 'month' in additional_data and isinstance(additional_data['month'], list):
|
||
|
|
has_month_data = True
|
||
|
|
for month in additional_data['month']:
|
||
|
|
if last_month is None or month > last_month:
|
||
|
|
last_month = month
|
||
|
|
except (json.JSONDecodeError, AttributeError):
|
||
|
|
pass
|
||
|
|
|
||
|
|
if hasattr(transaction, 'create_date'):
|
||
|
|
created_date = transaction.create_date
|
||
|
|
if earliest_transaction_date is None or created_date < earliest_transaction_date:
|
||
|
|
earliest_transaction_date = created_date
|
||
|
|
|
||
|
|
future_months = []
|
||
|
|
|
||
|
|
if not transactions:
|
||
|
|
base_date = jdatetime.date.today().togregorian() - relativedelta(months=1)
|
||
|
|
include_current = True
|
||
|
|
elif has_month_data and last_month:
|
||
|
|
year = int(str(last_month)[:4])
|
||
|
|
month = int(str(last_month)[4:6])
|
||
|
|
base_date = jdatetime.date(year, month, 1).togregorian()
|
||
|
|
include_current = False
|
||
|
|
else:
|
||
|
|
if earliest_transaction_date:
|
||
|
|
base_date = earliest_transaction_date
|
||
|
|
else:
|
||
|
|
base_date = jdatetime.date.today().togregorian()
|
||
|
|
include_current = False
|
||
|
|
|
||
|
|
start_offset = 0 if include_current else 1
|
||
|
|
|
||
|
|
for i in range(start_offset, start_offset + 6):
|
||
|
|
future_date = base_date + relativedelta(months=i)
|
||
|
|
jd_future = jdatetime.date.fromgregorian(date=future_date)
|
||
|
|
future_months.append(int(f"{jd_future.year}{jd_future.month:02d}"))
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
return future_months
|
||
|
|
|
||
|
|
|
||
|
|
def list(self, request, *args, **kwargs):
|
||
|
|
validator = PosDeviceValidator(request)
|
||
|
|
validation_error = validator.validation_version()
|
||
|
|
if validation_error:
|
||
|
|
return validation_error
|
||
|
|
|
||
|
|
validation_device = validator.validation_device()
|
||
|
|
if not validation_device:
|
||
|
|
return Response({"result": "نشست شما منقضی شده لطفا محدد وارد شوید!"}, status=status.HTTP_401_UNAUTHORIZED)
|
||
|
|
pos = POSMachine.objects.get(pos_id=validation_device)
|
||
|
|
if pos.cooperative is None:
|
||
|
|
return Response({"result": "دستگاه شما برای مدیریت امور دام تعریف نشده است!"},
|
||
|
|
status=403)
|
||
|
|
|
||
|
|
if int(validator.device_version) < 218:
|
||
|
|
return Response(
|
||
|
|
{"result": "لطفا جهت بروزرسانی نسخه دستگاه کارت خوان با پشتیبانی دستگاه ارتباط بگیرید!"},
|
||
|
|
status=status.HTTP_403_FORBIDDEN)
|
||
|
|
|
||
|
|
if 'nath_id' in request.GET:
|
||
|
|
ranchers = Rancher.objects.filter(national_id=request.GET['nath_id'], trash=False).first()
|
||
|
|
if not ranchers:
|
||
|
|
return Response({"result": "دامدار یافت نشد!"},
|
||
|
|
status=403)
|
||
|
|
|
||
|
|
union = Union.objects.filter(trash=False).first()
|
||
|
|
if 'product_key' in request.GET:
|
||
|
|
product = LiveStockRolseProduct.objects.filter(key=request.GET['product_key'], trash=False).select_related(
|
||
|
|
'parent_product').only('parent_product__price', 'parent_product__name', 'parent_product__image',
|
||
|
|
'parent_product__light_wight', 'parent_product__heavy_wight',
|
||
|
|
'parent_product__shipping_price', 'parent_product__union_price',
|
||
|
|
'parent_product__cooperative_price').first()
|
||
|
|
else:
|
||
|
|
product = LiveStockRolseProduct.objects.filter(cooperative=pos.cooperative, trash=False).select_related(
|
||
|
|
'parent_product').only('parent_product__price', 'parent_product__name', 'parent_product__image',
|
||
|
|
'parent_product__light_wight', 'parent_product__heavy_wight',
|
||
|
|
'parent_product__shipping_price', 'parent_product__union_price',
|
||
|
|
'parent_product__cooperative_price').first()
|
||
|
|
main_product = product.parent_product
|
||
|
|
share = CooperativeProductsShare.objects.get(product=main_product, cooperative=pos.cooperative, trash=False)
|
||
|
|
|
||
|
|
if ranchers.type == 'rural':
|
||
|
|
heavy_rate= product.parent_product.heavy_wight
|
||
|
|
light_rate= product.parent_product.light_wight
|
||
|
|
else:
|
||
|
|
heavy_rate= product.parent_product.heavy_wight_industrial
|
||
|
|
light_rate= product.parent_product.light_wight_industrial
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
month_list = self.get_transactions_month(request.GET['nath_id'])
|
||
|
|
shares_list = []
|
||
|
|
if share.union_price > 0:
|
||
|
|
|
||
|
|
shares_list.append({
|
||
|
|
"name":'union',
|
||
|
|
"shaba":union.account,
|
||
|
|
"price":share.union_price,
|
||
|
|
})
|
||
|
|
if share.company_price > 0:
|
||
|
|
|
||
|
|
shares_list.append({
|
||
|
|
"name":'company',
|
||
|
|
"shaba":"IR170150000003100050545702",
|
||
|
|
"price":share.company_price,
|
||
|
|
})
|
||
|
|
|
||
|
|
if pos.cooperative.first_sub_cooperative_price > 0:
|
||
|
|
|
||
|
|
shares_list.append({
|
||
|
|
"name":'first_sub_cooperative',
|
||
|
|
"shaba":pos.cooperative.first_sub_cooperative_account,
|
||
|
|
"price":pos.cooperative.first_sub_cooperative_price,
|
||
|
|
})
|
||
|
|
|
||
|
|
if pos.cooperative.second_sub_cooperative_price > 0:
|
||
|
|
|
||
|
|
shares_list.append({
|
||
|
|
"name":'second_sub_cooperative',
|
||
|
|
"shaba":pos.cooperative.second_sub_cooperative_price,
|
||
|
|
"price":pos.cooperative.second_sub_cooperative_price,
|
||
|
|
})
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
dict1 = {
|
||
|
|
"title": [
|
||
|
|
{"key": "نام و نام خانوادگی", "value": ranchers.fullname if ranchers.fullname else ranchers.user.fullname},
|
||
|
|
{"key": "موبایل", "value": ranchers.mobile},
|
||
|
|
{"key": "وزن کل خریداری شده", "value": str(ranchers.total_weight)}
|
||
|
|
],
|
||
|
|
"key": ranchers.key,
|
||
|
|
"herd_code": ranchers.herd_code,
|
||
|
|
"national_id": ranchers.national_id,
|
||
|
|
"fullname": ranchers.fullname if ranchers.fullname else ranchers.user.fullname,
|
||
|
|
"type": ranchers.type,
|
||
|
|
"mobile": ranchers.mobile,
|
||
|
|
"allow_buy": ranchers.allow_buy,
|
||
|
|
"more_than_inventory": True,
|
||
|
|
"pos_owners": [],
|
||
|
|
"allow_buy_message": " ",
|
||
|
|
"real_light_livestock": ranchers.light_livestock, # تعداد تعیین شده دام توسط سامانه
|
||
|
|
"real_heavy_livestock": ranchers.heavy_livestock, # تعداد تعیین شده دام توسط سامانه
|
||
|
|
"real_dhi_livestock": 0, # تعداد تعیین شده دام توسط سامانه
|
||
|
|
"weight_quota_heavy": ranchers.weight_quota_heavy, # سهمیه قابل دریافت
|
||
|
|
"weight_quota_light": ranchers.weight_quota_light, # سهمیه قابل دریافت
|
||
|
|
"weight_quota_dhi": ranchers.dhi_amount, # سهمیه قابل دریافت
|
||
|
|
"heavy_rate": heavy_rate, # نرخ تبدیل جهت دریافت سهمیه
|
||
|
|
"light_rate": light_rate, # نرخ تبدیل جهت دریافت سهمیه
|
||
|
|
"dhi_rate": product.parent_product.heavy_wight_dha, # نرخ تبدیل جهت دریافت سهمیه
|
||
|
|
"round_rate": 1, # مضرب رند کردن فروش
|
||
|
|
"total_weight": ranchers.total_weight, # کل خرید دامدار ریم د دمش
|
||
|
|
|
||
|
|
"product_total_weight": product.total_weight,
|
||
|
|
"product_total_allocated_weight": product.total_allocated_weight,
|
||
|
|
"product_total_remain_weight": product.total_remain_weight,
|
||
|
|
"product_name": product.parent_product.name,
|
||
|
|
"product_image": product.parent_product.image,
|
||
|
|
"product_price": share.price,
|
||
|
|
"cooperative_price_with_shipping": share.price + share.shipping_price + share.cooperative_price,
|
||
|
|
"cooperative_price_without_shipping": share.price + share.cooperative_price,
|
||
|
|
"union_price": share.union_price,
|
||
|
|
"union_shaba": union.account,
|
||
|
|
"shares": shares_list,
|
||
|
|
"cooperative_shaba": pos.cooperative.account,
|
||
|
|
"month_list": month_list,
|
||
|
|
|
||
|
|
}
|
||
|
|
return Response(dict1, status=status.HTTP_200_OK)
|
||
|
|
|
||
|
|
return Response({"resut": "کد ملی وارد نشده است!"}, status=status.HTTP_403_FORBIDDEN)
|
||
|
|
|
||
|
|
|
||
|
|
# class DashboardLiveStockViewSet(viewsets.ModelViewSet):
|
||
|
|
# queryset = LiveStock.objects.filter(trash=False)
|
||
|
|
# permission_classes = [TokenHasReadWriteScope]
|
||
|
|
# serializer_class = LiveStockSerializer
|
||
|
|
# filterset_class = LiveStockFilterSet
|
||
|
|
#
|
||
|
|
# def list(self, request, *args, **kwargs):
|
||
|
|
# role = request.GET['role']
|
||
|
|
# user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
|
|
# if role == 'Cooperative':
|
||
|
|
# # todo:فعلا چون دامدار تکراری داریم نمیشه از طریق دامدار پیداکرد باید از طریف آدرس بریم
|
||
|
|
# cooperative = Cooperative.objects.get(user=user, trash=False)
|
||
|
|
# ranchers = Rancher.objects.filter(city=cooperative.address.city.name).values_list('herd_code',
|
||
|
|
# flat=True).distinct()
|
||
|
|
# live_stocks = self.queryset.filter(herd_code__in=ranchers)
|
||
|
|
# else:
|
||
|
|
# live_stocks = self.queryset
|
||
|
|
# date1 = request.GET.get('date1')
|
||
|
|
# date2 = request.GET.get('date2')
|
||
|
|
# if date1 and date2:
|
||
|
|
# date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
|
|
# date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
|
|
# live_stocks = live_stocks.filter(birth_day__gte=date1, birth_day__lte=date2)
|
||
|
|
#
|
||
|
|
# value = request.GET.get('value')
|
||
|
|
# search = request.GET.get('search')
|
||
|
|
# if value and search == 'filter':
|
||
|
|
# if search != 'undefined' and search.strip():
|
||
|
|
# live_stocks = live_stocks.filter(
|
||
|
|
# build_query(self.filterset_class.Meta.fields, value)
|
||
|
|
# )
|
||
|
|
# sheep = live_stocks.filter(type='گوسفند').count()
|
||
|
|
# goat = live_stocks.filter(type='بز').count()
|
||
|
|
# cow = live_stocks.filter(type='گاو').count()
|
||
|
|
# horse = live_stocks.filter(type='اسب').count()
|
||
|
|
# camel = live_stocks.filter(type='شتر').count()
|
||
|
|
# light_livestock = live_stocks.filter(type__in=('بز', 'گوسفند')).count()
|
||
|
|
# heavy_livestock = live_stocks.filter(type__in=('گاو', 'اسب', 'شتر')).count()
|
||
|
|
#
|
||
|
|
# dict1={
|
||
|
|
# 'live_stocks_count':live_stocks.count(),
|
||
|
|
# "sheep":sheep,
|
||
|
|
# "goat":goat,
|
||
|
|
# "cow":cow,
|
||
|
|
# "horse":horse,
|
||
|
|
# "camel":camel,
|
||
|
|
# "light_livestock":light_livestock,
|
||
|
|
# "heavy_livestock":heavy_livestock,
|
||
|
|
#
|
||
|
|
# }
|
||
|
|
# return Response(dict1, status=status.HTTP_200_OK)
|
||
|
|
|
||
|
|
|
||
|
|
@api_view(["GET"])
|
||
|
|
@csrf_exempt
|
||
|
|
@permission_classes([TokenHasReadWriteScope])
|
||
|
|
def dashboard_live_stock(request):
|
||
|
|
role = request.GET['role']
|
||
|
|
user = SystemUserProfile.objects.get(user=request.user, trash=False)
|
||
|
|
type = request.GET.get('type')
|
||
|
|
if type == 'archive':
|
||
|
|
live_stocks = LiveStock.objects.filter(trash=True, archive=True).only('type')
|
||
|
|
else:
|
||
|
|
live_stocks = LiveStock.objects.filter(trash=False).only('type')
|
||
|
|
|
||
|
|
if role == 'Cooperative':
|
||
|
|
cooperative = Cooperative.objects.get(user=user, trash=False)
|
||
|
|
ranchers = Rancher.objects.filter(city=cooperative.address.city.name).values_list('herd_code',
|
||
|
|
flat=True).distinct()
|
||
|
|
live_stocks = live_stocks.filter(herd_code__in=ranchers)
|
||
|
|
|
||
|
|
date1 = request.GET.get('date1')
|
||
|
|
date2 = request.GET.get('date2')
|
||
|
|
if date1 and date2:
|
||
|
|
date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date()
|
||
|
|
date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date()
|
||
|
|
live_stocks = live_stocks.filter(birth_day__gte=date1, birth_day__lte=date2)
|
||
|
|
|
||
|
|
value = request.GET.get('value')
|
||
|
|
search = request.GET.get('search')
|
||
|
|
if value and search == 'filter':
|
||
|
|
if search != 'undefined' and search.strip():
|
||
|
|
live_stocks = live_stocks.filter(
|
||
|
|
build_query(LiveStockFilterSet.Meta.fields, value)
|
||
|
|
)
|
||
|
|
counts = live_stocks.values('type').annotate(total=Count('id'))
|
||
|
|
count_dict = {item['type']: item['total'] for item in counts}
|
||
|
|
|
||
|
|
light_livestock = count_dict.get('بز', 0) + count_dict.get('گوسفند', 0)
|
||
|
|
heavy_livestock = count_dict.get('گاو', 0) + count_dict.get('اسب', 0) + count_dict.get('شتر', 0)
|
||
|
|
|
||
|
|
result = {
|
||
|
|
'live_stocks_count': sum(count_dict.values()),
|
||
|
|
"sheep": count_dict.get('گوسفند', 0),
|
||
|
|
"goat": count_dict.get('بز', 0),
|
||
|
|
"cow": count_dict.get('گاو', 0),
|
||
|
|
"horse": count_dict.get('اسب', 0),
|
||
|
|
"camel": count_dict.get('شتر', 0),
|
||
|
|
"light_livestock": light_livestock,
|
||
|
|
"heavy_livestock": heavy_livestock,
|
||
|
|
}
|
||
|
|
|
||
|
|
return Response(result, status=status.HTTP_200_OK)
|
||
|
|
|
||
|
|
from datetime import date, timedelta
|
||
|
|
|
||
|
|
def archive_live_stock(request):
|
||
|
|
today = date.today()
|
||
|
|
archive_msg = 'بایگانی خودکار به علت سن بالا'
|
||
|
|
|
||
|
|
stocks_to_convert = LiveStock.objects.filter(trash=False, birth_day_gh__isnull=True)
|
||
|
|
for stock in stocks_to_convert:
|
||
|
|
try:
|
||
|
|
year, month, day = map(int, stock.birth_day.split('/'))
|
||
|
|
stock.birth_day_gh = convert_to_miladi(year, month, day)
|
||
|
|
stock.save()
|
||
|
|
except:
|
||
|
|
continue
|
||
|
|
|
||
|
|
archive_conditions = Q(
|
||
|
|
Q(type__in=['بز', 'گوسفند'], gender='نر') & Q(birth_day_gh__lte=today - timedelta(days=425)) |
|
||
|
|
Q(type__in=['بز', 'گوسفند'], gender='ماده') & Q(birth_day_gh__lte=today - timedelta(days=1825)) |
|
||
|
|
Q(type='گاو') & Q(birth_day_gh__lte=today - timedelta(days=3285)) |
|
||
|
|
Q(type='اسب') & Q(birth_day_gh__lte=today - timedelta(days=4380))
|
||
|
|
)
|
||
|
|
|
||
|
|
archived_count = LiveStock.objects.filter(
|
||
|
|
trash=False,
|
||
|
|
birth_day_gh__isnull=False
|
||
|
|
).filter(archive_conditions).update(
|
||
|
|
trash=True,
|
||
|
|
archive=True,
|
||
|
|
archiver=archive_msg
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
return HttpResponse('ok')
|