6406 lines
311 KiB
Python
6406 lines
311 KiB
Python
from datetime import datetime
|
|
import json
|
|
|
|
from django.db.models import Q, Sum, F, Case, When, FloatField, Count
|
|
from jdatetime import timedelta
|
|
from rest_framework import serializers
|
|
import django_filters
|
|
from rest_framework_recursive.fields import RecursiveField
|
|
|
|
from LiveStock.Cooperative.serializers import CooperativeForSharesSerializer
|
|
from LiveStock.models import LiveStockRolseProduct, Cooperative, CooperativeProductsShare
|
|
from authentication.models import SystemUserProfile, ExternalTransaction
|
|
from authentication.serializer.serializer import SystemUserProfileSerializer, BankCardSerializer, \
|
|
SystemUserProfileForAutoAllocationSerializer, SystemUserProfileForGuildSerializer, \
|
|
SystemUserProfileForInspectionSerializer, SystemUserProfileForFactorSerializer, \
|
|
SystemUserProfileForPoultryLocSerializer, SystemUserProfileForPoultryScienceSerializer, \
|
|
SystemUserProfileForPoultryScienceWithoutRoleSerializer
|
|
from authentication.serializers import UserProfileSerializer, SystemAddressSerializer
|
|
from deposit_id import wage_counting_type, out_selling_ignore, new_out_selling_count_wage, \
|
|
new_out_selling_count_wage_date, before_out_buying_count_wage_amount
|
|
from deposit_percent import wage_percent, carcases_sell
|
|
from general_urls import base_url_for_sms_report
|
|
from panel.CityOperator.serializers import CityOperatorForSubSectorTransactionsSerializer
|
|
from panel.KillHouse.helpers import get_finance_info, get_difference_carcasses_weight, get_new_wage_for_free_buying
|
|
from panel.KillHouse.serializers import VetSerializer, ProvinceKillRequestSerializer, \
|
|
KillHouseAssignmentInformationSerializer, KillHouseSerializer, KillHouseDailyQuotaSerializer, \
|
|
ProvinceKillRequestForAutoAllocationSerializer, KillHouseWareHouseSerializer, KillHouseForProvinceSerializer, \
|
|
KillHouseRequestForColdHouseAllocationsSerializer, KillHouseFreeBarInformationSerializer, \
|
|
KillHouseForKillHouseVetKillHouseSerializer, KillHouseForKillingInformationDiscrepancyReportSerializer, \
|
|
KillHouseForAutoAllocationSerializer, KillHouseForKillHouseGuildRelationSerializer, \
|
|
KillHouseForKillHouseStewardRelationSerializer, KillHouseOperatorForAutoAllocationsSerializer, \
|
|
PosKillHouseForKillingInformationDiscrepancyReportSerializer, KillHouseForCommonlyUsedSerializer, \
|
|
KillHouseForReturnBuyingSerializer
|
|
from panel.ProvinceOperator.services.pos_transfer_service import POSTransferService
|
|
from panel.models import (
|
|
Pricing,
|
|
ProvinceCheckOperatorRequest,
|
|
ProvinceCheckInformation,
|
|
ProvinceFactorToKillHouse,
|
|
KillHouseFactorToProvince,
|
|
ProvinceCheckKillHouseFactor,
|
|
DepositAllocation,
|
|
PovinceInspector,
|
|
PriceAnalysis,
|
|
WareHouseFactor,
|
|
ProvinceOperator, ProvinceRequestAction, ProvincePercentLeftOver, InspectorOperator, ShareOfAllocation,
|
|
PaymentDeadLine, MonthlyProfitPercentage, ProvinceFactorToKillHouseForPoultry, KillHouseFactorToPoultry,
|
|
Wallet, Itransaction, Debt, Deposit, Penalty, FinancialDocument, FinancialTransaction, Admin,
|
|
ProvinceImportKillHouseOutFactors, VetSupervisor, Jahad, ProvincialGovernment, VetCheckAllocations, HourLimit,
|
|
SmsLicense, PoultryRequest, PoultryAllowCityProvince, ProvinceAllowKillHouseRegisterCar,
|
|
ProvinceAllowPoultryChooseKillHouse, ProvinceAllowPoultryChooseKillHouseTotal, ProvinceAllowPoultrySellFree,
|
|
ProvinceAllowPoultrySellFreeTotal, ProvinceCheckOperatorOutRequest,
|
|
ProvinceAutoAllocation, KillHouseAssignmentInformation, AutoAcceptProvinceKillRequest,
|
|
AutoMakeKillHouseRequest, CityJahad, Guilds, Steward, KillHousePercentageOfLosses, StewardAllocation,
|
|
ProvinceAllowKillHouseChooseStewardGuilds, StewardWareHouse, GuildsWareHouse, Commerce, CityCommerce,
|
|
HatchingLossesPermission, KillHouse, WagePayment, ProvinceAllowKillHouseDirectBuyingTotal,
|
|
ProvinceAllowKillHouseDirectBuying, ProvinceAllowKillHouseRegisterGuilds, ProvinceAllowKillHouseRegisterGuildsTotal,
|
|
CityVet, KillHouseHourLimit, AutomaticStewardAllocation, FreeSaleWithinprovince, Observatory, ProvinceSupervisor,
|
|
Car, Product, PosVersion, PosItem, GuildRoom, PosCompany, POSId, POSMachine, AdditionalProducts, POSTransactions,
|
|
StewardFreeBarInformation, TypeActivity, AreaActivity, EvacuationPermit, SellForFreezing, LiveStockSupport,
|
|
ColdHouse, ColdHouseAllocations, OperationLimitation, ApprovedPrice, Announcements, ChickenAgeRange, TimeRange,
|
|
CitySupervisor, JahadInspector, SystemWallet, SuperAdmin, PaymentGatewayPercentage, WageType, PercentageOfWageType,
|
|
ShareType, TotalWageInformation, ProvinceKillRequest, SlaughterHouseTransaction, ChainCompanyTransaction,
|
|
ChainAllocation, KillHouseFreeBarInformation, KillHouseRequest, ChainCompany, InternalTransaction,
|
|
TotalPaymentGatewayPercentage, StewardFreeSaleBarInformation, CityLivestock, ImprovingLivestock, Reports,
|
|
ReportsUsers, UserReports, ReportSubmissionTime, MovingText, MovingTextDashboardStatus, MovingTextRole,
|
|
MovingTextWithRole, NewProduct, AdminX, Supporter, ZarinPalAccounts, PoultryExport, PoultryOutProvinceRequest,
|
|
Dispenser, VetFarmAggregatePermission, KillHouseBarLimitation, CityPoultry, KillHouseStewardGuildRelation,
|
|
OutOfProvinceSellingCarcassesPermission, OutProvinceCarcassesBuyer, KillHouseFreeSaleBarInformation,
|
|
ProductPricingType, KillHousePricePermission, BaseOutProvinceCarcassesBuyer, RolesProducts,
|
|
AutomaticDirectBuyingPermission, PosMachineTransactions, BroadcastPrice, OutProvinceSaleLimitation,
|
|
PosAllocationTransactions, ParentCompany, POSDeviceSession, PosDeviceVersion, SubSectorTransactions,
|
|
SubSectorPercentageOfWageType, PosSegmentation, Vet, CityGuild, DistributionUserLevel, BarDifferenceRequest,
|
|
OtherProducts, ProductsTransactions, PriceConfirmation, CompanyBeneficiaryAccount, ProteinGuild, CommonlyUsed,
|
|
PercentageDropLimitation, UploadImageLimitation, ApkInfo, DirectBuyingVerification, FinePermission,
|
|
ShowMarketRequest, IndexWeightCategory, PoultryScience, PoultryScienceReport, AllowRegisterCodeForGuilds,
|
|
GuildsGeneralConfigs, StewardAppLogin, StewardRequest, RestrictionCarcassDistribution,
|
|
AllowRegisterCodeForKillHouseFreeSaleBarInformation, AllowRegisterCodeForStewardFreeSaleBarInformation,
|
|
LimitationForDirectPurchaseAndBarInformation, WarehouseArchive, SmsRecipient, MarketDailyLimitation,
|
|
HatchingArchivePercent, Representative, POSAccessLevel, DispenserInformation
|
|
)
|
|
from panel.poultry.helpers import market_daily_limitation_info
|
|
from panel.poultry.serializers import PoultryRequestSerializer, PoultrySerializer, \
|
|
PoultryRequestForAutoAllocationSerializer, ChainAllocationSerializer, ChainCompanySerializer, \
|
|
PoultryForPoultryRequestLetterSerializer, OutProvincePoultryRequestBuyerSerializer, \
|
|
PoultryRequestForOutRequestTransactionsSerializer, PoultryDetailForPoultryScienceSerializer, \
|
|
PoultryHatchingForPredictionSerializer, PoultryHatchingForPoultryAndHatchingForPoultryScienceSerializer
|
|
|
|
|
|
# سریالایزر مربوط به اپراتور شهرستان
|
|
class ProvinceOperatorSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileSerializer(read_only=True)
|
|
address = SystemAddressSerializer(read_only=True)
|
|
user_bank_info = BankCardSerializer(required=False)
|
|
|
|
class Meta:
|
|
model = ProvinceOperator
|
|
exclude = (
|
|
'id',
|
|
'create_date',
|
|
'modify_date',
|
|
# 'trash',
|
|
'created_by',
|
|
'modified_by',
|
|
)
|
|
|
|
|
|
class ProvinceOperatorForAllUserSerializer(serializers.ModelSerializer):
|
|
address = SystemAddressSerializer(read_only=True)
|
|
user_bank_info = BankCardSerializer(required=False)
|
|
|
|
class Meta:
|
|
model = ProvinceOperator
|
|
fields = ['address', 'user_bank_info', 'identity_documents', 'phone']
|
|
|
|
|
|
class AdminForAllUserSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Admin
|
|
fields = ['address', 'identity_documents', 'active']
|
|
|
|
|
|
# سریالایزر مربوط به اپراتور شهرستان
|
|
class AdminSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = Admin
|
|
exclude = (
|
|
'id',
|
|
'create_date',
|
|
'modify_date',
|
|
# 'trash',
|
|
'created_by',
|
|
'modified_by',
|
|
)
|
|
|
|
|
|
class ProvinceCheckOperatorOutRequestSerializer(serializers.ModelSerializer):
|
|
poultry_request = PoultryRequestSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = ProvinceCheckOperatorOutRequest
|
|
fields = '__all__'
|
|
|
|
|
|
# سریالایزر مربوط به تایید یا رد درخواست تایید شده شهرستان
|
|
class ProvinceCheckOperatorRequestSerializer(serializers.ModelSerializer):
|
|
poultry_request = PoultryRequestSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = ProvinceCheckOperatorRequest
|
|
fields = '__all__'
|
|
|
|
|
|
class AdditionalProductsSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = AdditionalProducts
|
|
exclude = (
|
|
'create_date',
|
|
'modify_date',
|
|
'created_by',
|
|
'modified_by',
|
|
)
|
|
|
|
|
|
class ProductSerializer(serializers.ModelSerializer):
|
|
product_price = serializers.SerializerMethodField('get_product_price')
|
|
product_weight = serializers.SerializerMethodField('get_product_weight')
|
|
product_sale_weight = serializers.SerializerMethodField('get_product_sale_weight')
|
|
product_remain_weight = serializers.SerializerMethodField('get_product_remain_weight')
|
|
product_extra_sale_weight = serializers.SerializerMethodField('get_product_extra_sale_weight')
|
|
parent_key = serializers.SerializerMethodField('get_parent_product')
|
|
|
|
class Meta:
|
|
model = Product
|
|
exclude = (
|
|
'id',
|
|
'create_date',
|
|
'modify_date',
|
|
'trash',
|
|
'guild',
|
|
'steward',
|
|
'kill_house',
|
|
'created_by',
|
|
'modified_by',
|
|
)
|
|
# fields = '__all__'
|
|
|
|
def get_product_price(self, obj):
|
|
try:
|
|
price_type = ProductPricingType.objects.filter(trash=False).first()
|
|
if price_type and price_type.province == False and obj.name == 'مرغ گرم':
|
|
if obj.kill_house is not None:
|
|
price = obj.kill_house.kill_house_operator.user.city.product_price / 1000 if obj.kill_house.kill_house_operator.user.city.product_price > 0 else 0
|
|
elif obj.guild is not None:
|
|
price = obj.guild.user.city.product_price / 1000 if obj.guild.user.city.product_price > 0 else 0
|
|
|
|
else:
|
|
price = obj.steward.guild.user.city.product_price / 1000 if obj.steward.guild.user.city.product_price > 0 else 0
|
|
|
|
|
|
else:
|
|
price = obj.price / 1000 if obj.price > 0 else 0
|
|
except:
|
|
|
|
price = obj.price / 1000 if obj.price > 0 else 0
|
|
return price
|
|
|
|
def get_product_weight(self, obj):
|
|
weight = obj.weight * 1000 if obj.weight > 0 else 0
|
|
return weight
|
|
|
|
def get_product_sale_weight(self, obj):
|
|
sale_weight = obj.sale_weight * 1000 if obj.sale_weight > 0 else 0
|
|
return sale_weight
|
|
|
|
def get_product_remain_weight(self, obj):
|
|
remain_weight = obj.remain_weight * 1000 if obj.remain_weight > 0 else 0
|
|
return remain_weight
|
|
|
|
def get_product_extra_sale_weight(self, obj):
|
|
extra_sale_weight = obj.extra_sale_weight * 1000 if obj.extra_sale_weight > 0 else 0
|
|
return extra_sale_weight
|
|
|
|
def get_parent_product(self, obj):
|
|
parent = AdditionalProducts.objects.filter(name=obj.name, trash=False)
|
|
parent_key = parent.first().key if parent else None
|
|
return parent_key
|
|
|
|
|
|
class ProvinceRequestActionSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = ProvinceRequestAction
|
|
fields = '__all__'
|
|
|
|
|
|
class SmsLicenseSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = SmsLicense
|
|
fields = '__all__'
|
|
|
|
|
|
# سریالایزر مربوط به تایید یا رد اطلاعات بار وارد شده کشتارگاه
|
|
class ProvinceCheckInformationSerializer(serializers.ModelSerializer):
|
|
kill_house_assignment = KillHouseAssignmentInformationSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = ProvinceCheckInformation
|
|
fields = '__all__'
|
|
|
|
|
|
# سریالایزر مربوط به قیمت گذاری
|
|
class ProvincePercentLeftOverSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = ProvincePercentLeftOver
|
|
fields = '__all__'
|
|
|
|
|
|
# سریالایزر مربوط به قیمت گذاری
|
|
class PricingSerializer(serializers.ModelSerializer):
|
|
operator = SystemUserProfileSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = Pricing
|
|
fields = '__all__'
|
|
|
|
|
|
class ProvinceFactorToKillHouseForPoultrySerializer(serializers.ModelSerializer):
|
|
province_check_info = ProvinceCheckInformationSerializer(read_only=True)
|
|
bank = BankCardSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = ProvinceFactorToKillHouseForPoultry
|
|
fields = '__all__'
|
|
|
|
|
|
class ProvinceFactorToKillHousePdfSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = ProvinceFactorToKillHouse
|
|
fields = '__all__'
|
|
|
|
|
|
# سریالایزر مربوط به فاکتور استان برای کشتارگاه
|
|
class ProvinceFactorToKillHouseSerializer(serializers.ModelSerializer):
|
|
province_check_info = ProvinceCheckInformationSerializer(read_only=True)
|
|
# province_check_req = ProvinceCheckOperatorRequestSerializer(read_only=True)
|
|
bank = BankCardSerializer(read_only=True)
|
|
kill_house_factor_to_province = serializers.SerializerMethodField('get_kill_house_factor')
|
|
province_factor_to_kill_house = serializers.SerializerMethodField('get_province_factor')
|
|
poultry_request = serializers.SerializerMethodField('get_poultry_request')
|
|
|
|
class Meta:
|
|
model = ProvinceFactorToKillHouse
|
|
fields = '__all__'
|
|
|
|
def get_poultry_request(self, instance):
|
|
poultry_request_dict = None
|
|
poultry_request = PoultryRequest.objects.filter(
|
|
key=instance.province_check_info.kill_house_assignment.kill_house_request.province_kill_request.province_request.poultry_request.key)
|
|
if poultry_request.count() > 0:
|
|
poultry_request = poultry_request.last()
|
|
|
|
poultry_request_dict = {
|
|
"poultry_request_id": poultry_request.id,
|
|
"poultry_name": poultry_request.poultry.unit_name,
|
|
"send_date": poultry_request.send_date,
|
|
"chicken_breed": poultry_request.chicken_breed,
|
|
"poultry_user_name": poultry_request.poultry.user.fullname,
|
|
"poultry_user_mobile": poultry_request.poultry.user.mobile,
|
|
|
|
}
|
|
return poultry_request_dict
|
|
|
|
def get_kill_house_factor(self, instance):
|
|
|
|
factors = KillHouseFactorToProvince.objects.filter(province_factor=instance)
|
|
|
|
factor_dict = None
|
|
if factors.count() > 0:
|
|
factors = factors.last()
|
|
factor_dict = {
|
|
"factor_key": factors.key,
|
|
"payment_code": factors.payment_code,
|
|
"factor_state": factors.state,
|
|
|
|
}
|
|
return factor_dict
|
|
|
|
def get_province_factor(self, instance):
|
|
factor_dict = None
|
|
|
|
user = SystemUserProfile.objects.filter(role__name='ProvinceFinancial',
|
|
province=instance.province_check_info.kill_house_assignment.kill_house_request.killhouse_user.system_address.province)
|
|
if user.count() > 0:
|
|
user = user.last()
|
|
province_operator = ProvinceOperator.objects.filter(user=user)
|
|
if province_operator.count() > 0:
|
|
province_operator = province_operator.last()
|
|
if province_operator.user_bank_info != None:
|
|
factor_dict = {
|
|
"card": province_operator.user_bank_info.card,
|
|
"shaba": province_operator.user_bank_info.shaba,
|
|
"name_of_bank_user": province_operator.user_bank_info.name_of_bank_user,
|
|
"bank_name": province_operator.user_bank_info.bank_name,
|
|
|
|
}
|
|
assingment = KillHouseAssignmentInformation.objects.get(
|
|
key=instance.province_check_info.kill_house_assignment.key)
|
|
if assingment.kill_house_request.kill_request.slaughter_house != None:
|
|
|
|
kill_place = assingment.kill_house_request.kill_request.slaughter_house.name
|
|
else:
|
|
kill_place = assingment.kill_house_request.kill_request.kill_house.name
|
|
factor_dict.update(({
|
|
"factor_create_date": instance.create_date,
|
|
"total_factor_amount": instance.total_price,
|
|
"real_amount_factor": instance.total_weight * instance.factor_fee,
|
|
"poultry_share": instance.shares['poultry_share'],
|
|
"province_share": instance.shares['province_share'],
|
|
"kill_place": kill_place,
|
|
"real_quantity": assingment.real_quantity,
|
|
"bar_quantity": assingment.kill_house_request.quantity,
|
|
"net_weight": assingment.net_weight,
|
|
}))
|
|
|
|
return factor_dict
|
|
|
|
|
|
class ProvinceImportKillHouseOutFactorsSerializer(serializers.ModelSerializer):
|
|
kill_house_factor = ProvinceFactorToKillHouseSerializer(read_only=True)
|
|
kill_house_factor_poultry = ProvinceFactorToKillHouseForPoultrySerializer(read_only=True)
|
|
province_check = ProvinceCheckOperatorRequestSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = ProvinceImportKillHouseOutFactors
|
|
fields = '__all__'
|
|
|
|
|
|
class KillHouseFactorToPoultrySerializer(serializers.ModelSerializer):
|
|
province_factor = ProvinceFactorToKillHouseForPoultrySerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouseFactorToPoultry
|
|
fields = '__all__'
|
|
|
|
|
|
# سریالایزر مربوط به فاکتور کشتارگاه برای استان
|
|
class KillHouseFactorToProvinceSerializer(serializers.ModelSerializer):
|
|
province_factor = ProvinceFactorToKillHouseSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = KillHouseFactorToProvince
|
|
fields = '__all__'
|
|
|
|
|
|
# سریالایزر مربوط به بررسی فاکتور کشتارگاه توسط استان
|
|
class ProvinceCheckKillHouseFactorSerializer(serializers.ModelSerializer):
|
|
kill_house_factor = KillHouseFactorToProvinceSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = ProvinceCheckKillHouseFactor
|
|
fields = '__all__'
|
|
|
|
|
|
# سریالایزر مربوط به تخصیصات مالی
|
|
class DepositAllocationSerializer(serializers.ModelSerializer):
|
|
poultry = PoultryRequestSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = DepositAllocation
|
|
fields = '__all__'
|
|
|
|
|
|
# سریالایزر مربوط به بازرس استان
|
|
class InspectorOperatorSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileSerializer(read_only=True)
|
|
address = SystemAddressSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = InspectorOperator
|
|
fields = '__all__'
|
|
|
|
|
|
class InspectorOperatorForAllUserSerializer(serializers.ModelSerializer):
|
|
address = SystemAddressSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = InspectorOperator
|
|
fields = ['address', 'identity_documents', 'active']
|
|
|
|
|
|
# سریالایزر مربوط به بازرس استان
|
|
class PovinceInspectorSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = PovinceInspector
|
|
fields = '__all__'
|
|
|
|
|
|
class VetSupervisorSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileSerializer(read_only=True)
|
|
address = SystemAddressSerializer(read_only=True)
|
|
vet = VetSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = VetSupervisor
|
|
fields = '__all__'
|
|
|
|
|
|
class CityVetSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileSerializer(read_only=True)
|
|
address = SystemAddressSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = CityVet
|
|
fields = '__all__'
|
|
|
|
|
|
class CommerceSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileSerializer(read_only=True)
|
|
address = SystemAddressSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = Commerce
|
|
fields = '__all__'
|
|
|
|
|
|
class CityCommerceSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileSerializer(read_only=True)
|
|
address = SystemAddressSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = CityCommerce
|
|
fields = '__all__'
|
|
|
|
|
|
class ProvinceSupervisorSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileSerializer(read_only=True)
|
|
address = SystemAddressSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = ProvinceSupervisor
|
|
fields = '__all__'
|
|
|
|
|
|
class CitySupervisorSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileSerializer(read_only=True)
|
|
address = SystemAddressSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = CitySupervisor
|
|
fields = '__all__'
|
|
|
|
|
|
class SuperAdminSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileSerializer(read_only=True)
|
|
address = SystemAddressSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = SuperAdmin
|
|
fields = '__all__'
|
|
|
|
|
|
class JahadInspectorSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileSerializer(read_only=True)
|
|
address = SystemAddressSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = JahadInspector
|
|
fields = '__all__'
|
|
|
|
|
|
class VetSupervisorForAllUserSerializer(serializers.ModelSerializer):
|
|
address = SystemAddressSerializer(read_only=True)
|
|
vet = VetSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = VetSupervisor
|
|
fields = ['address', 'vet']
|
|
|
|
|
|
class VetCheckAllocationsSerializer(serializers.ModelSerializer):
|
|
vet = VetSerializer(read_only=True)
|
|
province_kill_request = ProvinceKillRequestSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = VetCheckAllocations
|
|
fields = '__all__'
|
|
|
|
|
|
# سریالایزر مربوط به آنالیز قیمت
|
|
class PriceAnalysisorSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = PriceAnalysis
|
|
fields = '__all__'
|
|
|
|
|
|
class ShareOfAllocationSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = ShareOfAllocation
|
|
fields = '__all__'
|
|
|
|
|
|
class PaymentDeadLineSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = PaymentDeadLine
|
|
fields = '__all__'
|
|
|
|
|
|
class MonthlyProfitPercentageSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = MonthlyProfitPercentage
|
|
fields = '__all__'
|
|
|
|
|
|
# سریالایزر مربوط به ثبت در خواست مرغ منجمد
|
|
class WareHouseFactorSerializer(serializers.ModelSerializer):
|
|
first_operator = UserProfileSerializer(read_only=True)
|
|
second_operator = UserProfileSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = WareHouseFactor
|
|
fields = '__all__'
|
|
# extra_kwargs = ['customer', 'national_code', 'date', 'mobile', 'product_type', 'weight', 'fee', 'wage','considerations','' ]
|
|
extra_kwargs = {"considerations": {"required": False, "allow_null": True},
|
|
"Complications": {"required": False, "allow_null": True},
|
|
"tax": {"required": False, "allow_null": True},
|
|
"discount": {"required": False, "allow_null": True},
|
|
"name_of_bank_user": {"required": False, "allow_null": True},
|
|
"card": {"required": False, "allow_null": True},
|
|
"shaba": {"required": False, "allow_null": True},
|
|
"account": {"required": False, "allow_null": True}
|
|
}
|
|
|
|
|
|
class walletSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Wallet
|
|
fields = '__all__'
|
|
|
|
|
|
class ItransactionSerializer(serializers.ModelSerializer):
|
|
wallet = walletSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = Itransaction
|
|
fields = '__all__'
|
|
|
|
|
|
class DebtSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Debt
|
|
fields = '__all__'
|
|
|
|
|
|
class PenaltySerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Penalty
|
|
fields = '__all__'
|
|
|
|
|
|
class DepositSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Deposit
|
|
fields = '__all__'
|
|
|
|
|
|
# class IwalletSerializer(serializers.ModelSerializer):
|
|
# class Meta:
|
|
# model = Iwallet
|
|
# fields = '__all__'
|
|
|
|
|
|
class FinancialDocumentSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = FinancialDocument
|
|
fields = '__all__'
|
|
|
|
|
|
# class ItransactionFilter(django_filters.FilterSet):
|
|
# class Meta:
|
|
# model = Itransaction
|
|
# fields = ['wallet',]
|
|
|
|
class FinancialTransactionSerializer(serializers.ModelSerializer):
|
|
itransaction = ItransactionSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = FinancialTransaction
|
|
fields = '__all__'
|
|
|
|
|
|
class CarSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileSerializer(read_only=True)
|
|
address = SystemAddressSerializer(read_only=True)
|
|
user_bank_info = BankCardSerializer(required=False)
|
|
|
|
class Meta:
|
|
model = Car
|
|
fields = '__all__'
|
|
|
|
|
|
class JahadForAllUserSerializer(serializers.ModelSerializer):
|
|
address = SystemAddressSerializer(read_only=True)
|
|
user_bank_info = BankCardSerializer(required=False)
|
|
|
|
class Meta:
|
|
model = Jahad
|
|
fields = ['address', 'user_bank_info', 'identity_documents', 'active']
|
|
|
|
|
|
class CityJahadForAllUserSerializer(serializers.ModelSerializer):
|
|
address = SystemAddressSerializer(read_only=True)
|
|
user_bank_info = BankCardSerializer(required=False)
|
|
|
|
class Meta:
|
|
model = CityJahad
|
|
fields = ['address', 'user_bank_info', 'identity_documents', 'active']
|
|
|
|
|
|
class CityPoultrySerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileSerializer(read_only=True)
|
|
address = SystemAddressSerializer(read_only=True)
|
|
user_bank_info = BankCardSerializer(required=False)
|
|
|
|
class Meta:
|
|
model = CityPoultry
|
|
fields = '__all__'
|
|
|
|
|
|
# سریالازر مربوط به جهاد
|
|
class JahadSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileSerializer(read_only=True)
|
|
address = SystemAddressSerializer(read_only=True)
|
|
user_bank_info = BankCardSerializer(required=False)
|
|
|
|
class Meta:
|
|
model = Jahad
|
|
fields = '__all__'
|
|
|
|
|
|
class PosCompanySerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = PosCompany
|
|
fields = '__all__'
|
|
|
|
|
|
# سریالازر مربوط به استانداری
|
|
class ProvincialGovernmentSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileSerializer(read_only=True)
|
|
address = SystemAddressSerializer(read_only=True)
|
|
user_bank_info = BankCardSerializer(required=False)
|
|
|
|
class Meta:
|
|
model = ProvincialGovernment
|
|
fields = '__all__'
|
|
|
|
|
|
class ProvincialGovernmentForAllUserSerializer(serializers.ModelSerializer):
|
|
address = SystemAddressSerializer(read_only=True)
|
|
user_bank_info = BankCardSerializer(required=False)
|
|
|
|
class Meta:
|
|
model = ProvincialGovernment
|
|
fields = ['address', 'user_bank_info', 'identity_documents', 'active']
|
|
|
|
|
|
class HourLimitSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = HourLimit
|
|
fields = '__all__'
|
|
|
|
|
|
class KillHouseHourLimitSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = KillHouseHourLimit
|
|
fields = '__all__'
|
|
|
|
|
|
class PoultryAllowCityProvinceSerializer(serializers.ModelSerializer):
|
|
poultry = PoultrySerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = PoultryAllowCityProvince
|
|
fields = '__all__'
|
|
|
|
|
|
class ProvinceAllowKillHouseRegisterCarSerializer(serializers.ModelSerializer):
|
|
kill_house = KillHouseSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = ProvinceAllowKillHouseRegisterCar
|
|
fields = '__all__'
|
|
|
|
|
|
class ProvinceAllowPoultryChooseKillHouseSerializer(serializers.ModelSerializer):
|
|
Poultry = PoultrySerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = ProvinceAllowPoultryChooseKillHouse
|
|
fields = '__all__'
|
|
|
|
|
|
class ProvinceAllowPoultryChooseKillHouseTotalSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = ProvinceAllowPoultryChooseKillHouseTotal
|
|
fields = '__all__'
|
|
|
|
|
|
class ProvinceAllowPoultrySellFreeSerializer(serializers.ModelSerializer):
|
|
Poultry = PoultrySerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = ProvinceAllowPoultrySellFree
|
|
fields = '__all__'
|
|
|
|
|
|
class ProvinceAllowPoultrySellFreeTotalSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = ProvinceAllowPoultrySellFreeTotal
|
|
fields = '__all__'
|
|
|
|
|
|
class FreeSaleWithinprovinceSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = FreeSaleWithinprovince
|
|
fields = ['key', 'allow', 'weight', 'percent', 'type']
|
|
|
|
|
|
class ProvinceAutoAllocationSerializer(serializers.ModelSerializer):
|
|
poultry_request = PoultryRequestSerializer(read_only=True)
|
|
daily_quota = KillHouseDailyQuotaSerializer(read_only=True)
|
|
province_kill_request = ProvinceKillRequestSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = ProvinceAutoAllocation
|
|
fields = '__all__'
|
|
|
|
|
|
class StewardForGuildsSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Steward
|
|
fields = ['key']
|
|
|
|
|
|
class GeneralGuildsSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForAutoAllocationSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = Guilds
|
|
fields = ['key', 'guilds_name', 'user']
|
|
|
|
|
|
class GeneralGuildsForInspectionsSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForInspectionSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = Guilds
|
|
fields = ['key', 'guilds_name', 'user', 'type_activity', 'area_activity']
|
|
|
|
|
|
class GuildsForKillHousePercentageSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForAutoAllocationSerializer(read_only=True)
|
|
address = SystemAddressSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = Guilds
|
|
fields = ['user', 'guilds_name', 'allocation_limit', 'address']
|
|
|
|
|
|
class GuildsForStewardAutoAllocationSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForAutoAllocationSerializer(read_only=True)
|
|
address = SystemAddressSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = Guilds
|
|
fields = ['user', 'guilds_name', 'steward', 'allocation_limit', 'address', 'license_number',
|
|
'type_activity', 'area_activity', 'guilds_id', 'create_date']
|
|
|
|
|
|
class TotalGuildsForPosSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Guilds
|
|
fields = ['key']
|
|
|
|
|
|
class GuildInfoForPosSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForAutoAllocationSerializer(read_only=True)
|
|
address = SystemAddressSerializer(read_only=True)
|
|
products = serializers.SerializerMethodField('get_products')
|
|
|
|
class Meta:
|
|
model = Guilds
|
|
fields = ['user', 'phone', 'key', 'guilds_id', 'license_number', 'guilds_name', 'type_activity',
|
|
'area_activity',
|
|
'products', 'address', 'condition', 'description_condition']
|
|
|
|
def get_products(self, obj):
|
|
# pos = Product.objects.filter(guild=obj,trash=False)
|
|
products = Product.objects.filter(
|
|
Q(general=False, guild=obj) | Q(general=True, guild__isnull=True),
|
|
trash=False)
|
|
serializer = ProductSerializer(products, many=True)
|
|
return serializer.data
|
|
|
|
|
|
class POSDeviceSessionForCompaniesSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = POSDeviceSession
|
|
fields = ['key', 'name', 'serial', 'password', 'session_create_date', 'session_last_seen_date']
|
|
|
|
|
|
class POSMachineForGuildsSerializer(serializers.ModelSerializer):
|
|
pos_company = serializers.SerializerMethodField('get_pos_company')
|
|
pos_sessions = serializers.SerializerMethodField('get_pos_sessions')
|
|
pos_status = serializers.SerializerMethodField('get_pos_status_method')
|
|
|
|
class Meta:
|
|
model = POSMachine
|
|
fields = ['pos_id', 'key', 'receiver_number', 'receiver_number', 'terminal_number', 'pos_company', 'Lat',
|
|
'active', 'Long', 'pos_sessions', 'pos_status', 'serial', 'password']
|
|
|
|
def get_pos_company(self, obj):
|
|
pos_company = PosCompany.objects.get(key=obj.pos_company.key, trash=False)
|
|
return pos_company.name
|
|
|
|
def get_pos_sessions(self, obj):
|
|
pos_sessions = POSDeviceSession.objects.filter(pos=obj, trash=False)
|
|
serializer = POSDeviceSessionForCompaniesSerializer(pos_sessions, many=True)
|
|
return serializer.data
|
|
|
|
def get_pos_status_method(self, obj):
|
|
if not self.get_pos_sessions(obj):
|
|
return False
|
|
now = datetime.now().date() - timedelta(days=4)
|
|
pos_sessions = POSDeviceSession.objects.filter(pos=obj, trash=False)
|
|
active_sessions = pos_sessions.filter(session_last_seen_date__gt=now)
|
|
active_count = active_sessions.count()
|
|
return active_count > 0
|
|
|
|
|
|
class GuildsForInspectionSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileSerializer(read_only=True)
|
|
guild_pos = serializers.SerializerMethodField('get_guild_pos')
|
|
number_of_pos = serializers.SerializerMethodField('get_number_of_pos')
|
|
ware_house_info = serializers.SerializerMethodField('get_ware_house_quantity')
|
|
|
|
class Meta:
|
|
model = Guilds
|
|
fields = ['user', 'key', 'guilds_id', 'license_number', 'guilds_name', 'type_activity', 'area_activity',
|
|
'guild_pos', 'number_of_pos', 'ware_house_info']
|
|
|
|
def get_guild_pos(self, obj):
|
|
pos = POSMachine.objects.filter(guild=obj, trash=False)
|
|
serializer = POSMachineForGuildsSerializer(pos, many=True)
|
|
return serializer.data
|
|
|
|
def get_number_of_pos(self, obj):
|
|
pos = POSMachine.objects.filter(guild=obj, trash=False)
|
|
return len(pos)
|
|
|
|
def get_ware_house_quantity(self, obj):
|
|
try:
|
|
ware_house = GuildsWareHouse.objects.get(guilds=obj, trash=False)
|
|
return {
|
|
"quantity": ware_house.remain_total_number_of_carcasses,
|
|
"weight": ware_house.remain_total_weight_of_carcasses
|
|
}
|
|
except:
|
|
return {
|
|
"quantity": 0,
|
|
"weight": 0
|
|
}
|
|
|
|
|
|
class GuildsForCompaniesSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileSerializer(read_only=True)
|
|
guild_pos = serializers.SerializerMethodField('get_guild_pos')
|
|
number_of_pos = serializers.SerializerMethodField('get_number_of_pos')
|
|
|
|
class Meta:
|
|
model = Guilds
|
|
fields = ['user', 'key', 'guilds_id', 'license_number', 'guilds_name', 'type_activity', 'area_activity',
|
|
'guild_pos', 'number_of_pos', 'condition', 'description_condition', 'province_accept_state']
|
|
|
|
def get_guild_pos(self, obj):
|
|
pos = POSMachine.objects.filter(guild=obj, pos_company__name=self.context.get('company'), trash=False)
|
|
serializer = POSMachineForGuildsSerializer(pos, many=True)
|
|
return serializer.data
|
|
|
|
def get_number_of_pos(self, obj):
|
|
pos = POSMachine.objects.filter(guild=obj, trash=False)
|
|
return len(pos)
|
|
|
|
|
|
class TypeActivitySerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = TypeActivity
|
|
fields = ['key', 'title']
|
|
|
|
|
|
class AreaActivitySerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = AreaActivity
|
|
fields = ['key', 'title']
|
|
|
|
|
|
class GuildsForDispenserAllocationsSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForGuildSerializer(read_only=True)
|
|
allocation_limit = serializers.SerializerMethodField('get_allocation_limit')
|
|
|
|
class Meta:
|
|
model = Guilds
|
|
fields = ['key', 'guilds_name', 'user', 'license_number', 'type_activity', 'area_activity', 'guilds_id',
|
|
'allocation_limit']
|
|
|
|
def get_allocation_limit(self, obj):
|
|
guild = self.context.get('guild')
|
|
if guild:
|
|
relation = KillHouseStewardGuildRelation.objects.filter(guild=guild, steward=guild).first()
|
|
if relation:
|
|
return {
|
|
"allocation_limit": relation.allocation_limit,
|
|
"allocation_type": relation.allocation_type
|
|
}
|
|
return None
|
|
|
|
|
|
class GuildsForBroadcastManagementSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForGuildSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = Guilds
|
|
fields = ['key', 'guilds_name', 'user', 'type_activity', 'area_activity', 'guilds_id', 'steward']
|
|
|
|
|
|
class PosGuildsForBroadcastManagementSerializer(serializers.ModelSerializer):
|
|
# user = SystemUserProfileForGuildSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = Guilds
|
|
fields = ['key', 'guilds_name', 'type_activity', 'area_activity', 'guilds_id', 'steward']
|
|
|
|
|
|
class GuildsForStewardMenueSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForGuildSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = Guilds
|
|
fields = ['key', 'guilds_name', 'user']
|
|
|
|
|
|
class GuildsSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForGuildSerializer(read_only=True)
|
|
address = SystemAddressSerializer(read_only=True)
|
|
guild_area_activity = AreaActivitySerializer(read_only=True)
|
|
guild_type_activity = TypeActivitySerializer(read_only=True)
|
|
kill_house = serializers.SerializerMethodField('get_kill_house')
|
|
# kill_house = KillHouseForAutoAllocationSerializer(many=True,read_only=True)
|
|
steward_kill_house = serializers.SerializerMethodField('get_steward_kill_house')
|
|
# steward_kill_house = KillHouseForAutoAllocationSerializer(many=True,read_only=True)
|
|
stewards = GuildsForDispenserAllocationsSerializer(many=True, read_only=True)
|
|
|
|
get_pos_status = serializers.SerializerMethodField('get_pos_status_method')
|
|
product_info = serializers.SerializerMethodField('get_info')
|
|
|
|
class Meta:
|
|
model = Guilds
|
|
fields = '__all__'
|
|
|
|
def get_kill_house(self, obj):
|
|
kill_houses = KillHouse.objects.filter(
|
|
pk__in=KillHouseStewardGuildRelation.objects.filter(guild=obj).values_list('kill_house', flat=True))
|
|
serializer = KillHouseForKillHouseGuildRelationSerializer(kill_houses, many=True, context={'guild': obj})
|
|
return serializer.data
|
|
|
|
def get_steward_kill_house(self, obj):
|
|
kill_houses = KillHouse.objects.filter(
|
|
pk__in=KillHouseStewardGuildRelation.objects.filter(guild=obj).values_list('kill_house', flat=True))
|
|
serializer = KillHouseForKillHouseStewardRelationSerializer(kill_houses, many=True, context={'guild': obj})
|
|
return serializer.data
|
|
|
|
def get_pos_status_method(self, obj):
|
|
has_pos = POSMachine.objects.filter(guild=obj).exists()
|
|
if not has_pos:
|
|
return {
|
|
"len_active_sessions": 0,
|
|
"has_pons": False,
|
|
"has_active_pons": False,
|
|
}
|
|
pos_device_ids = POSMachine.objects.filter(guild=obj).values_list('id', flat=True)
|
|
now = datetime.now().date() - timedelta(days=4)
|
|
sessions = POSDeviceSession.objects.filter(trash=False, pos__id__in=pos_device_ids)
|
|
active_sessions = sessions.filter(session_last_seen_date__gt=now)
|
|
active_count = active_sessions.count()
|
|
return {
|
|
"len_active_sessions": active_count,
|
|
"has_pons": has_pos,
|
|
"has_active_pons": active_count > 0,
|
|
}
|
|
|
|
def get_info(self, obj):
|
|
products = RolesProducts.objects.filter(guild=obj, trash=False).first()
|
|
return RolesProductsSerializer(products).data
|
|
|
|
|
|
class DistributionUserLevelSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = DistributionUserLevel
|
|
fields = ['key', 'fa_title', 'en_title']
|
|
|
|
|
|
class RealGuildsSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForInspectionSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = Guilds
|
|
fields = ['key', 'user', 'guilds_name', 'type_activity', 'area_activity',
|
|
]
|
|
|
|
|
|
class RealGuildsForDashboardSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForInspectionSerializer(read_only=True)
|
|
ware_house_info = serializers.SerializerMethodField('get_ware_house_info')
|
|
address = SystemAddressSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = Guilds
|
|
fields = ['key', 'user', 'guilds_name', 'steward', 'ware_house_info', 'address']
|
|
|
|
def get_ware_house_info(self, obj):
|
|
|
|
date1 = self.context.get('request').GET.get('date1')
|
|
date2 = self.context.get('request').GET.get('date2')
|
|
product = RolesProducts.objects.filter(guild=obj, trash=False, name='مرغ گرم').first()
|
|
|
|
if date1:
|
|
date1 = datetime.strptime(str(date1), '%Y-%m-%d').date()
|
|
date2 = datetime.strptime(str(date2), '%Y-%m-%d').date()
|
|
|
|
allocations = StewardAllocation.objects.filter(
|
|
Q(steward=obj) | Q(to_steward=obj),
|
|
trash=False, calculate_status=True, to_cold_house__isnull=True,
|
|
date__date__gte=date1, date__date__lte=date2, warehouse=True, steward_warehouse=True)
|
|
|
|
free_bars = StewardFreeBarInformation.objects.filter(trash=False, date__date__gte=date1,
|
|
date__date__lte=date2, steward=obj, warehouse=True)
|
|
free_sale_bars = StewardFreeSaleBarInformation.objects.filter(trash=False, date__date__gte=date1,
|
|
date__date__lte=date2, steward=obj,
|
|
warehouse=True)
|
|
segmentations = PosSegmentation.objects.filter(guild=obj, trash=False, warehouse=True,
|
|
date__date__gte=date1, date__date__lte=date2)
|
|
transactions = ProductsTransactions.objects.filter(product=product, transaction__paid=True,
|
|
transaction__date__date__gte=date1,
|
|
transaction__date__date__lte=date2, trash=False,
|
|
warehouse=True)
|
|
archives = WarehouseArchive.objects.filter(Q(steward=obj) | Q(guild=obj), trash=False,
|
|
date__date__gte=date1, date__lte=date2,
|
|
warehouse=True)
|
|
|
|
|
|
else:
|
|
allocations = StewardAllocation.objects.filter(
|
|
Q(steward=obj) | Q(to_steward=obj),
|
|
trash=False, calculate_status=True, to_cold_house__isnull=True, warehouse=True, steward_warehouse=True)
|
|
|
|
free_bars = StewardFreeBarInformation.objects.filter(trash=False, steward=obj, warehouse=True)
|
|
free_sale_bars = StewardFreeSaleBarInformation.objects.filter(trash=False, steward=obj, warehouse=True)
|
|
segmentations = PosSegmentation.objects.filter(guild=obj, trash=False, warehouse=True)
|
|
transactions = ProductsTransactions.objects.filter(product=product, transaction__paid=True, trash=False,
|
|
warehouse=True)
|
|
archives = WarehouseArchive.objects.filter(Q(steward=obj) | Q(guild=obj), trash=False, warehouse=True)
|
|
|
|
allocations_aggregates = allocations.aggregate(
|
|
total_input_bars_count=Count('id', filter=Q(to_steward=obj)),
|
|
total_output_bars_count=Count('id', filter=Q(steward=obj)),
|
|
total_input_bars_weight=Sum('real_weight_of_carcasses', filter=Q(to_steward=obj)),
|
|
total_input_governmental_bars_weight=Sum('real_weight_of_carcasses',
|
|
filter=Q(to_steward=obj, quota='governmental')),
|
|
total_input_free_bars_weight=Sum('real_weight_of_carcasses', filter=Q(to_steward=obj, quota='free')),
|
|
total_output_bars_weight=Sum('real_weight_of_carcasses',
|
|
filter=Q(steward=obj, receiver_state__in=('pending', 'accepted'))),
|
|
total_output_governmental_bars_weight=Sum('real_weight_of_carcasses',
|
|
filter=Q(steward=obj, receiver_state__in=('pending', 'accepted'),
|
|
quota='governmental')),
|
|
total_output_free_bars_weight=Sum('real_weight_of_carcasses',
|
|
filter=Q(steward=obj, receiver_state__in=('pending', 'accepted'),
|
|
quota='free')),
|
|
total_input_entered_bars_weight=Sum('real_weight_of_carcasses',
|
|
filter=Q(to_steward=obj, receiver_state='accepted')),
|
|
|
|
total_input_entered_governmental_bars_weight=Sum('real_weight_of_carcasses',
|
|
filter=Q(to_steward=obj, receiver_state='accepted',
|
|
quota='governmental')),
|
|
total_input_entered_free_bars_weight=Sum('real_weight_of_carcasses',
|
|
filter=Q(to_steward=obj, receiver_state='accepted', quota='free')),
|
|
total_input_entered_bars_count=Count('id', filter=Q(to_steward=obj, receiver_state='accepted'))
|
|
|
|
)
|
|
|
|
free_bars_aggregates = free_bars.aggregate(
|
|
total_count=Count('id'),
|
|
total_weight=Sum('weight_of_carcasses')
|
|
)
|
|
|
|
free_sale_bars_aggregates = free_sale_bars.aggregate(
|
|
total_count=Count('id'),
|
|
total_weight=Sum('weight_of_carcasses'),
|
|
total_governmental_weight=Sum('weight_of_carcasses', filter=Q(quota='governmental')),
|
|
total_free_weight=Sum('weight_of_carcasses', filter=Q(quota='free')),
|
|
|
|
)
|
|
|
|
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
|
|
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(
|
|
archives_weight=Sum('weight'),
|
|
archives_governmental_weight=Sum('weight',
|
|
filter=Q(quota='governmental')),
|
|
archives_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
|
|
|
|
input_allocations_count = allocations_aggregates['total_input_bars_count'] or 0
|
|
input_allocations_weight = allocations_aggregates['total_input_bars_weight'] or 0
|
|
input_governmental_allocations_weight = allocations_aggregates['total_input_governmental_bars_weight'] or 0
|
|
input_free_allocations_weight = allocations_aggregates['total_input_free_bars_weight'] or 0
|
|
input_entered_allocations_weight = allocations_aggregates['total_input_entered_bars_weight'] or 0
|
|
input_entered_governmental_allocations_weight = allocations_aggregates[
|
|
'total_input_entered_governmental_bars_weight'] or 0
|
|
input_entered_free_allocations_weight = allocations_aggregates['total_input_entered_free_bars_weight'] or 0
|
|
input_entered_allocations_count = allocations_aggregates['total_input_entered_bars_count'] or 0
|
|
output_allocations_weight = allocations_aggregates['total_output_bars_weight'] or 0
|
|
output_governmental_allocations_weight = allocations_aggregates['total_output_governmental_bars_weight'] or 0
|
|
output_free_allocations_weight = allocations_aggregates['total_output_free_bars_weight'] or 0
|
|
output_allocations_count = allocations_aggregates['total_output_bars_count'] or 0
|
|
free_bars_weight = free_bars_aggregates['total_weight'] or 0
|
|
free_bars_count = free_bars_aggregates['total_count'] or 0
|
|
free_sale_bars_weight = free_sale_bars_aggregates['total_weight'] or 0
|
|
free_sale_governmental_bars_weight = free_sale_bars_aggregates['total_governmental_weight'] or 0
|
|
free_sale_free_bars_weight = free_sale_bars_aggregates['total_free_weight'] or 0
|
|
free_sale_bars_count = free_sale_bars_aggregates['total_count'] or 0
|
|
archives_weight = archives_info['archives_weight'] or 0
|
|
archives_governmental_weight = archives_info['archives_governmental_weight'] or 0
|
|
archives_free_weight = archives_info['archives_free_weight'] or 0
|
|
remain_weight = int(
|
|
(input_entered_allocations_weight + free_bars_weight) - (free_sale_bars_weight + output_allocations_weight))
|
|
|
|
total_input_governmental_weight = input_entered_governmental_allocations_weight
|
|
total_input_free_weight = input_entered_free_allocations_weight + free_bars_weight
|
|
total_input_weight = total_input_governmental_weight + total_input_free_weight
|
|
total_output_governmental_weight = output_governmental_allocations_weight + free_sale_governmental_bars_weight + segmentations_governmental_weight + int(
|
|
pos_governmental_allocated_weight / 1000)
|
|
total_output_free_weight = output_free_allocations_weight + free_sale_free_bars_weight + segmentations_free_weight + int(
|
|
pos_free_allocated_weight / 1000)
|
|
total_output_weight = total_output_governmental_weight + total_output_free_weight
|
|
total_remain_weight = total_input_weight - total_output_weight
|
|
total_remain_governmental_weight = (
|
|
total_input_governmental_weight - total_output_governmental_weight) - archives_governmental_weight if (
|
|
(
|
|
total_input_governmental_weight - total_output_governmental_weight) - archives_governmental_weight) > 0 else 0
|
|
total_remain_free_weight = (total_input_free_weight - total_output_free_weight) - archives_free_weight if (
|
|
(
|
|
total_input_free_weight - total_output_free_weight) - archives_free_weight) > 0 else 0
|
|
last_total_remain_free_weight = ((
|
|
total_input_free_weight - total_output_free_weight) - archives_free_weight) * -1 if (
|
|
(
|
|
total_input_free_weight - total_output_free_weight) - archives_free_weight) < 0 else 0
|
|
last_total_remain_governmental_weight = (
|
|
(
|
|
total_input_governmental_weight - total_output_governmental_weight) - archives_governmental_weight) * -1 if (
|
|
(
|
|
total_input_governmental_weight - total_output_governmental_weight) - archives_governmental_weight) < 0 else 0
|
|
last_total_remain_weight = last_total_remain_governmental_weight + last_total_remain_free_weight
|
|
|
|
result = {
|
|
"total_bars_weight": int(input_allocations_weight + free_bars_weight),
|
|
"total_bars_count": free_bars_count + input_allocations_count,
|
|
"input_bars_weight": int(input_allocations_weight),
|
|
"input_governmental_allocations_weight": int(input_governmental_allocations_weight),
|
|
"input_free_allocations_weight": int(input_free_allocations_weight),
|
|
"input_bars_count": input_allocations_count,
|
|
"total_entered_bars_weight": int(input_entered_allocations_weight + free_bars_weight),
|
|
"input_entered_governmental_allocations_weight": int(input_entered_governmental_allocations_weight),
|
|
"input_entered_free_allocations_weight": int(input_entered_free_allocations_weight),
|
|
"total_entered_bars_count": input_entered_allocations_count + free_bars_count,
|
|
"in_province_bars_count": output_allocations_count,
|
|
"in_province_bars_weight": int(output_allocations_weight),
|
|
"in_province_governmental_bars_weight": int(output_governmental_allocations_weight),
|
|
"in_province_free_bars_weight": int(output_free_allocations_weight),
|
|
"out_province_bars_count": free_sale_bars_count,
|
|
"out_province_bars_weight": int(free_sale_bars_weight),
|
|
"out_province_governmental_bars_weight": int(free_sale_governmental_bars_weight),
|
|
"out_province_free_bars_weight": int(free_sale_free_bars_weight),
|
|
"total_in_out_province_bars_weight": int(free_sale_bars_weight) + int(output_allocations_weight),
|
|
"total_in_out_province_bars_count": output_allocations_count + free_sale_bars_count,
|
|
"free_bars_weight": free_bars_weight,
|
|
"free_bars_count": free_bars_count,
|
|
"remain_weight": remain_weight,
|
|
"segmentations_weight": segmentations_weight,
|
|
"segmentations_governmental_weight": segmentations_governmental_weight,
|
|
"segmentations_free_weight": segmentations_free_weight,
|
|
"total_input_weight": total_input_weight,
|
|
"total_input_governmental_weight": total_input_governmental_weight,
|
|
"total_input_free_weight": total_input_free_weight,
|
|
"total_output_weight": total_output_weight,
|
|
"total_output_governmental_weight": total_output_governmental_weight,
|
|
"total_output_free_weight": total_output_free_weight,
|
|
"total_remain_weight": total_remain_weight,
|
|
"total_remain_governmental_weight": total_remain_governmental_weight,
|
|
"total_remain_free_weight": total_remain_free_weight,
|
|
"last_total_remain_free_weight": last_total_remain_free_weight,
|
|
"last_total_remain_governmental_weight": last_total_remain_governmental_weight,
|
|
"last_total_remain_weight": 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),
|
|
"archives_weight": archives_weight,
|
|
"archives_governmental_weight": archives_governmental_weight,
|
|
"archives_free_weight": archives_free_weight,
|
|
}
|
|
|
|
return result
|
|
|
|
|
|
class PosGuildsSerializer(serializers.ModelSerializer):
|
|
shop_name = serializers.CharField(source='guilds_name', read_only=True)
|
|
fullname = serializers.CharField(source='user.fullname', read_only=True)
|
|
mobile = serializers.CharField(source='user.mobile', read_only=True)
|
|
|
|
class Meta:
|
|
model = Guilds
|
|
fields = ['key', 'shop_name', 'fullname', 'mobile', 'steward']
|
|
|
|
|
|
class ColdHouseForStewardSerializer(serializers.ModelSerializer):
|
|
steward = GuildsForStewardMenueSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = ColdHouse
|
|
fields = ['key', 'kill_house', 'steward', 'total_input_weight', 'total_allocated_weight',
|
|
'total_remain_weight', 'name', 'province', 'city', 'address', 'capacity', 'active', 'broadcast',
|
|
'relocate']
|
|
|
|
|
|
class GuildsForTotalColdHouseSerializer(serializers.ModelSerializer):
|
|
cold_houses_info = serializers.SerializerMethodField('get_cold_houses_info')
|
|
fullname = serializers.CharField(source='user.fullname', read_only=True)
|
|
mobile = serializers.CharField(source='user.mobile', read_only=True)
|
|
province = serializers.CharField(source='user.province.name', read_only=True)
|
|
city = serializers.CharField(source='user.city.name', read_only=True)
|
|
|
|
class Meta:
|
|
model = Guilds
|
|
fields = ['key', 'fullname', 'mobile', 'province', 'city', 'cold_houses_info']
|
|
|
|
def get_cold_houses_info(self, obj):
|
|
cold_houses = ColdHouse.objects.filter(steward=obj, trash=False)
|
|
|
|
total_input_weight = cold_houses.aggregate(total=Sum('total_input_weight'))[
|
|
'total'] or 0
|
|
total_allocated_weight = cold_houses.aggregate(total=Sum('total_allocated_weight'))[
|
|
'total'] or 0
|
|
total_remain_weight = cold_houses.aggregate(total=Sum('total_remain_weight'))[
|
|
'total'] or 0
|
|
|
|
return {
|
|
"total_cold_houses": len(cold_houses),
|
|
"total_input_weight": total_input_weight,
|
|
"total_allocated_weight": total_allocated_weight,
|
|
"total_remain_weight": total_remain_weight,
|
|
}
|
|
|
|
|
|
class StewardColdHousesSerializer(serializers.ModelSerializer):
|
|
cold_houses = serializers.SerializerMethodField('get_cold_houses')
|
|
|
|
class Meta:
|
|
model = Guilds
|
|
fields = ['key', 'cold_houses']
|
|
|
|
def get_cold_houses(self, obj):
|
|
cold_houses = ColdHouse.objects.filter(steward=obj, trash=False)
|
|
serializer = ColdHouseForStewardSerializer(cold_houses, many=True)
|
|
return serializer.data
|
|
|
|
|
|
class GuildsForColdHouseSerializer(serializers.ModelSerializer):
|
|
fullname = serializers.CharField(source='user.fullname', read_only=True)
|
|
mobile = serializers.CharField(source='user.mobile', read_only=True)
|
|
province = serializers.CharField(source='user.province.name', read_only=True)
|
|
city = serializers.CharField(source='user.city.name', read_only=True)
|
|
|
|
class Meta:
|
|
model = Guilds
|
|
fields = ['key', 'fullname', 'mobile', 'province', 'city']
|
|
|
|
|
|
class GuildsForDistributionManagementSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForGuildSerializer(read_only=True)
|
|
city = serializers.CharField(source='address.city.name', read_only=True)
|
|
general_infos = serializers.SerializerMethodField('get_general_infos')
|
|
kill_house = serializers.SerializerMethodField('get_kill_house')
|
|
steward_kill_house = serializers.SerializerMethodField('get_steward_kill_house')
|
|
stewards = serializers.SerializerMethodField('get_stewards')
|
|
user_level = DistributionUserLevelSerializer(read_only=True, many=True)
|
|
transactions = serializers.SerializerMethodField('get_transactions')
|
|
|
|
class Meta:
|
|
model = Guilds
|
|
fields = ['key', 'user', 'city', 'guilds_name', 'type_activity', 'area_activity', 'steward', 'general_infos',
|
|
'kill_house', 'steward_kill_house', 'stewards', 'user_level', 'transactions']
|
|
|
|
def get_kill_house(self, obj):
|
|
kill_houses = KillHouse.objects.filter(
|
|
pk__in=KillHouseStewardGuildRelation.objects.filter(guild=obj).values_list('kill_house', flat=True))
|
|
serializer = KillHouseForKillHouseGuildRelationSerializer(kill_houses, many=True, context={'guild': obj})
|
|
return serializer.data
|
|
|
|
def get_steward_kill_house(self, obj):
|
|
kill_houses = KillHouse.objects.filter(
|
|
pk__in=KillHouseStewardGuildRelation.objects.filter(guild=obj).values_list('kill_house', flat=True))
|
|
serializer = KillHouseForKillHouseStewardRelationSerializer(kill_houses, many=True, context={'guild': obj})
|
|
return serializer.data
|
|
|
|
def get_stewards(self, obj):
|
|
stewards = Guilds.objects.filter(
|
|
pk__in=KillHouseStewardGuildRelation.objects.filter(guild=obj).values_list('steward', flat=True))
|
|
serializer = GuildsForDispenserAllocationsSerializer(stewards, many=True, context={'guild': obj})
|
|
return serializer.data
|
|
|
|
def get_general_infos(self, obj):
|
|
|
|
steward_guild_relations = KillHouseStewardGuildRelation.objects.filter(Q(guild=obj) | Q(steward=obj),
|
|
trash=False)
|
|
|
|
if obj.steward == False:
|
|
input_total_allocation_limit = \
|
|
steward_guild_relations.filter(Q(kill_house__isnull=False) | Q(steward__isnull=False),
|
|
guild=obj).aggregate(total=Sum('allocation_limit'))['total'] or 0
|
|
output_total_allocation_limit = 0
|
|
else:
|
|
input_total_allocation_limit = \
|
|
steward_guild_relations.filter(kill_house__isnull=False, steward=obj).aggregate(
|
|
total=Sum('allocation_limit'))['total'] or 0
|
|
output_total_allocation_limit = \
|
|
steward_guild_relations.filter(steward=obj, guild__isnull=False).aggregate(
|
|
total=Sum('allocation_limit'))['total'] or 0
|
|
|
|
type_object = self.context.get('type_object')
|
|
role_object = self.context.get('role_object')
|
|
type = self.context.get('type')
|
|
if type_object == 'KillHouse':
|
|
if type == 'guild':
|
|
relation = steward_guild_relations.filter(guild=obj, kill_house=role_object).first()
|
|
else:
|
|
relation = steward_guild_relations.filter(steward=obj, kill_house=role_object).first()
|
|
else:
|
|
relation = steward_guild_relations.filter(guild=obj, steward=role_object).first()
|
|
|
|
return {
|
|
"self_input_total_allocation_limit": relation.allocation_limit if relation else None,
|
|
"self_total_allocation_type": relation.allocation_type if relation else None,
|
|
"input_total_allocation_limit": input_total_allocation_limit,
|
|
"output_total_allocation_limit": output_total_allocation_limit
|
|
}
|
|
|
|
def get_transactions(self, obj):
|
|
transactions = PosAllocationTransactions.objects.filter(pos__guild=obj, trash=False)
|
|
return len(transactions)
|
|
|
|
|
|
class TestGuildsSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileSerializer(read_only=True)
|
|
address = SystemAddressSerializer(read_only=True)
|
|
user_bank_info = BankCardSerializer(required=False)
|
|
kill_house = KillHouseForKillingInformationDiscrepancyReportSerializer(many=True, required=False)
|
|
|
|
guilds_steward = serializers.SerializerMethodField('get_steward')
|
|
stewarrd_info = serializers.SerializerMethodField('get_stewarrd_info')
|
|
kill_house_info = serializers.SerializerMethodField('get_kill_house_info')
|
|
|
|
class Meta:
|
|
model = Guilds
|
|
fields = '__all__'
|
|
|
|
def get_steward(self, obj):
|
|
steward = Steward.objects.filter(guilds=obj, guilds__steward=True).last()
|
|
if steward:
|
|
serializer = StewardForGuildsSerializer(steward)
|
|
return serializer.data
|
|
return None
|
|
|
|
def get_stewarrd_info(self, obj):
|
|
if obj.centers_allocation != None and len(obj.centers_allocation) != 0:
|
|
import uuid
|
|
key = obj.centers_allocation[0]['value']
|
|
steward = Steward.objects.filter(key=uuid.UUID(key), guilds__steward=True).last()
|
|
if steward:
|
|
return steward.guilds.guilds_name
|
|
return None
|
|
|
|
def get_kill_house_info(self, obj):
|
|
kill_house_list = []
|
|
if obj.kill_house_centers_allocation != None:
|
|
for kill_house in obj.kill_house_centers_allocation:
|
|
kill_house = KillHouse.objects.get(key=kill_house['value'], trash=False)
|
|
kill_house_list.append({
|
|
"name": kill_house.name,
|
|
"killer": kill_house.killer,
|
|
"mobile": kill_house.kill_house_operator.user.mobile
|
|
})
|
|
|
|
return kill_house_list
|
|
|
|
|
|
class GuildsWareHouseSerializer(serializers.ModelSerializer):
|
|
guilds = GuildsSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = GuildsWareHouse
|
|
fields = '__all__'
|
|
|
|
|
|
class StewardForDispenserAllocationsSerializer(serializers.ModelSerializer):
|
|
guilds = GuildsForDispenserAllocationsSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = Steward
|
|
fields = ['key', 'guilds']
|
|
|
|
|
|
class StewardSerializer(serializers.ModelSerializer):
|
|
guilds = GuildsSerializer(read_only=True)
|
|
product_info = serializers.SerializerMethodField('get_info')
|
|
|
|
class Meta:
|
|
model = Steward
|
|
fields = '__all__'
|
|
|
|
def get_info(self, obj):
|
|
products = RolesProducts.objects.filter(guild=obj.guilds, trash=False).first()
|
|
return RolesProductsSerializer(products).data
|
|
|
|
|
|
class ProductForStewardFreeBarInformationSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Product
|
|
fields = ['key', 'name']
|
|
|
|
|
|
class StewardFreeBarInformationSerializer(serializers.ModelSerializer):
|
|
steward = GuildsForStewardAutoAllocationSerializer(read_only=True)
|
|
guild = GuildsForStewardAutoAllocationSerializer(read_only=True)
|
|
product = ProductForStewardFreeBarInformationSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = StewardFreeBarInformation
|
|
fields = '__all__'
|
|
|
|
|
|
class PosStewardFreeBarInformationSerializer(serializers.ModelSerializer):
|
|
buyer = serializers.SerializerMethodField('get_buyer')
|
|
|
|
class Meta:
|
|
model = StewardFreeBarInformation
|
|
fields = ['key', 'buyer', 'kill_house_name', 'kill_house_mobile', 'province', 'city', 'date',
|
|
'number_of_carcasses', 'weight_of_carcasses', 'bar_image']
|
|
|
|
def get_buyer(self, obj):
|
|
buyer = obj.guild if obj.guild else obj.steward
|
|
type = 'guild' if obj.guild else 'steward'
|
|
return {
|
|
"fullname": buyer.user.fullname,
|
|
"mobile": buyer.user.mobile,
|
|
"shop": buyer.guilds_name,
|
|
"type": type,
|
|
|
|
}
|
|
|
|
|
|
class OutProvinceCarcassesBuyerForStewardSerializer(serializers.ModelSerializer):
|
|
steward = GeneralGuildsForInspectionsSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = OutProvinceCarcassesBuyer
|
|
fields = ['key', 'fullname', 'first_name', 'last_name', 'mobile', 'unit_name', 'city', 'province', 'active',
|
|
'steward']
|
|
|
|
|
|
class StewardFreeSaleBarInformationSerializer(serializers.ModelSerializer):
|
|
buyer = OutProvinceCarcassesBuyerForStewardSerializer(read_only=True)
|
|
guild = RealGuildsSerializer(read_only=True)
|
|
steward = RealGuildsSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = StewardFreeSaleBarInformation
|
|
fields = '__all__'
|
|
|
|
|
|
class StewardForStewardAutoAllocationSerializer(serializers.ModelSerializer):
|
|
guilds = GuildsForStewardAutoAllocationSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = Steward
|
|
fields = ['guilds']
|
|
|
|
|
|
class StewardWareHouseSerializer(serializers.ModelSerializer):
|
|
steward = StewardSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = StewardWareHouse
|
|
fields = '__all__'
|
|
|
|
|
|
class StewardWareHouseForDailyBroadCastOInDetailsSerializer(serializers.ModelSerializer):
|
|
informations = serializers.SerializerMethodField('get_informations')
|
|
|
|
class Meta:
|
|
model = Steward
|
|
fields = ['informations', 'key']
|
|
|
|
def get_informations(self, obj):
|
|
date1 = datetime.strptime(str(self.context.get('request').GET['date1']), '%Y-%m-%d').date()
|
|
date2 = datetime.strptime(str(self.context.get('request').GET['date2']), '%Y-%m-%d').date()
|
|
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, steward=obj, trash=False)
|
|
|
|
steward_allocations = StewardAllocation.objects.filter(
|
|
Q(type='manual') | Q(type='auto', system_registration_code=True),
|
|
steward_ware_house__in=steward_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
|
|
|
|
total_number_of_free_carcasses = steward_ware_houses.aggregate(total=Sum('number_of_free_carcasses'))[
|
|
'total']
|
|
total_free_weight_of_carcasses = steward_ware_houses.aggregate(total=Sum('weight_of_free_carcasses'))[
|
|
'total']
|
|
total_number_of_carcasses = steward_ware_houses.aggregate(total=Sum('number_of_carcasses'))[
|
|
'total']
|
|
total_weight_of_carcasses = steward_ware_houses.aggregate(total=Sum('weight_of_carcasses'))[
|
|
'total']
|
|
|
|
final_total_number_of_carcasses = \
|
|
steward_ware_houses.aggregate(total=Sum('real_number_of_carcasses'))[
|
|
'total']
|
|
final_total_weight_of_carcasses = \
|
|
steward_ware_houses.aggregate(total=Sum('real_weight_of_carcasses'))[
|
|
'total']
|
|
|
|
total_remain_quantity = \
|
|
steward_ware_houses.aggregate(total=Sum('remain_total_number_of_carcasses'))[
|
|
'total']
|
|
|
|
total_remain_weight = \
|
|
steward_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 {
|
|
"buyers": obj.guilds.guilds_name,
|
|
"city": obj.guilds.address.city.name,
|
|
"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_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,
|
|
}
|
|
|
|
|
|
class AutomaticStewardAllocationSerializer(serializers.ModelSerializer):
|
|
steward = StewardForStewardAutoAllocationSerializer(read_only=True)
|
|
|
|
# guilds = GuildsSerializer(read_only=True)
|
|
class Meta:
|
|
model = StewardAllocation
|
|
fields = ['key', 'steward', 'number_of_carcasses', 'real_number_of_carcasses', 'weight_of_carcasses',
|
|
'real_weight_of_carcasses', 'final_registration', 'registration_code', 'system_registration_code',
|
|
'logged_registration_code',
|
|
'state', 'date']
|
|
|
|
|
|
class DispenserForAllocationsSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForAutoAllocationSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = Dispenser
|
|
exclude = ('created_by', 'modified_by', 'user_bank_info', 'wallet', 'address', 'create_date',
|
|
'modify_date')
|
|
|
|
|
|
class DispenserSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForAutoAllocationSerializer(read_only=True)
|
|
guild = GuildsForStewardAutoAllocationSerializer(read_only=True)
|
|
kill_house = KillHouseForKillingInformationDiscrepancyReportSerializer(required=False)
|
|
allocations_info = serializers.SerializerMethodField('get_allocations_info')
|
|
|
|
class Meta:
|
|
model = Dispenser
|
|
exclude = ('created_by', 'modified_by', 'user_bank_info', 'wallet', 'address', 'create_date',
|
|
'modify_date')
|
|
|
|
def get_allocations_info(self, obj):
|
|
today = datetime.now().date()
|
|
allocations = StewardAllocation.objects.filter(dispenser=obj, trash=False)
|
|
today_allocations = allocations.filter(date__date=today)
|
|
total_quantity = allocations.aggregate(total=Sum('number_of_carcasses'))['total'] or 0
|
|
total_weight = allocations.aggregate(total=Sum('weight_of_carcasses'))['total'] or 0
|
|
today_quantity = today_allocations.aggregate(total=Sum('number_of_carcasses'))['total'] or 0
|
|
today_weight = today_allocations.aggregate(total=Sum('weight_of_carcasses'))['total'] or 0
|
|
|
|
return {
|
|
"number_of_allocations": len(allocations),
|
|
"total_quantity": total_quantity,
|
|
"total_weight": total_weight,
|
|
"number_of_today_allocations": len(today_allocations),
|
|
"total_today_quantity": today_quantity,
|
|
"total_today_weight": today_weight,
|
|
}
|
|
|
|
|
|
class NewDispenserSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForInspectionSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = Dispenser
|
|
fields = ['key', 'user', 'in_use']
|
|
|
|
|
|
class NewDispenserSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForInspectionSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = Dispenser
|
|
fields = ['key', 'user', 'in_use']
|
|
|
|
|
|
class DispenserAllocationSerializer(serializers.ModelSerializer):
|
|
steward = StewardForDispenserAllocationsSerializer(read_only=True)
|
|
guilds = GuildsForDispenserAllocationsSerializer(read_only=True)
|
|
dispenser = DispenserForAllocationsSerializer(read_only=True)
|
|
seller = serializers.SerializerMethodField('get_seller_info')
|
|
index_weight = serializers.SerializerMethodField('get_index_weight')
|
|
|
|
class Meta:
|
|
model = StewardAllocation
|
|
fields = '__all__'
|
|
|
|
def get_seller_info(self, obj):
|
|
seller_name = None
|
|
seller_mobile = None
|
|
seller_role = None
|
|
if obj.steward != None:
|
|
seller_name = obj.steward.guilds.user.fullname
|
|
seller_mobile = obj.steward.guilds.user.mobile
|
|
seller_role = 'Steward'
|
|
else:
|
|
seller_name = obj.guilds.user.fullname
|
|
seller_mobile = obj.guilds.user.mobile
|
|
seller_role = 'Guilds'
|
|
|
|
return {
|
|
"seller_name": seller_name,
|
|
"seller_mobile": seller_mobile,
|
|
"seller_role": seller_role
|
|
}
|
|
|
|
def get_index_weight(self, obj):
|
|
|
|
index_weight = round((obj.real_weight_of_carcasses / obj.real_number_of_carcasses),
|
|
2) if obj.real_number_of_carcasses > 0 else 0
|
|
|
|
return index_weight
|
|
|
|
|
|
class DispenserInformationSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = DispenserInformation
|
|
fields = '__all__'
|
|
|
|
|
|
class ChildNewProductSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = NewProduct
|
|
fields = ['key', 'name']
|
|
|
|
|
|
class NewProductSerializer(serializers.ModelSerializer):
|
|
child = ChildNewProductSerializer(many=True, read_only=True)
|
|
parent = ChildNewProductSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = NewProduct
|
|
fields = ['key', 'name', 'parent', 'child']
|
|
|
|
|
|
class PosNewProductSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = NewProduct
|
|
fields = ['key', 'name', 'sale_type', 'sale_type_package_weight', 'approved_price_status', 'approved_price',
|
|
'sale_limitation_status', 'selling_more_than_inventory', 'image']
|
|
|
|
|
|
class RolesProductsSerializer(serializers.ModelSerializer):
|
|
# parent_product = NewProductSerializer(read_only=True)
|
|
# kill_house = KillHouseForAutoAllocationSerializer (read_only=True)
|
|
# guild = GuildsForStewardMenueSerializer (read_only=True)
|
|
|
|
class Meta:
|
|
model = RolesProducts
|
|
fields = '__all__'
|
|
|
|
|
|
class RolesProductsForInspectionSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = RolesProducts
|
|
fields = ['name', 'total_carcasses_weight', 'real_allocated_weight',
|
|
'total_remain_weight']
|
|
|
|
|
|
class PosRolesProductsSerializer(serializers.ModelSerializer):
|
|
parent_product = PosNewProductSerializer(read_only=True)
|
|
price = serializers.SerializerMethodField('get_price')
|
|
|
|
class Meta:
|
|
model = RolesProducts
|
|
fields = ['key', 'parent_product', 'name', 'total_carcasses_weight', 'real_allocated_weight',
|
|
'total_remain_weight', 'approved_price_status', 'price', 'segmentation_weight',
|
|
'pos_allocated_weight']
|
|
|
|
def get_price(self, obj):
|
|
broad_price = BroadcastPrice.objects.get(trash=False)
|
|
price = obj.approved_price if broad_price.active == True else obj.free_price
|
|
return price
|
|
|
|
|
|
class PosOtherProductsSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = OtherProducts
|
|
fields = ['key', 'name', 'unit', 'image', 'price', 'active']
|
|
|
|
|
|
class CombinedPosProductSerializer(serializers.ModelSerializer):
|
|
price = serializers.SerializerMethodField('get_price')
|
|
product_type = serializers.CharField()
|
|
|
|
def get_price(self, obj):
|
|
if isinstance(obj, RolesProducts):
|
|
broad_price = BroadcastPrice.objects.filter(trash=False).first()
|
|
# if broad_price and broad_price.active:
|
|
# if obj.kill_house:
|
|
# if obj.approved_price > 0:
|
|
# if obj.approved_price > obj.free_price and obj.free_price > 0:
|
|
# return obj.free_price
|
|
# else:
|
|
# return obj.approved_price
|
|
#
|
|
# else:
|
|
# return obj.free_price
|
|
#
|
|
# else:
|
|
#
|
|
# if obj.guild.steward:
|
|
# if broad_price.steward_price > 0:
|
|
# if broad_price.steward_price > obj.free_price and obj.free_price > 0:
|
|
# return obj.free_price
|
|
# else:
|
|
# return broad_price.steward_price
|
|
# else:
|
|
# return obj.free_price
|
|
# else:
|
|
# if broad_price.guild_price > 0:
|
|
# if broad_price.guild_price > obj.free_price and obj.free_price > 0:
|
|
# return obj.free_price
|
|
# else:
|
|
# return broad_price.guild_price
|
|
# else:
|
|
# return obj.free_price
|
|
if broad_price and broad_price.active:
|
|
if obj.kill_house:
|
|
if broad_price.guild_price > 0:
|
|
if broad_price.guild_price > obj.free_price and obj.free_price > 0:
|
|
return obj.free_price
|
|
else:
|
|
return broad_price.guild_price
|
|
|
|
else:
|
|
return obj.free_price
|
|
|
|
else:
|
|
|
|
if obj.guild.steward:
|
|
if broad_price.guild_price > 0:
|
|
if broad_price.guild_price > obj.free_price and obj.free_price > 0:
|
|
return obj.free_price
|
|
else:
|
|
return broad_price.guild_price
|
|
else:
|
|
return obj.free_price
|
|
else:
|
|
if broad_price.guild_price > 0:
|
|
if broad_price.guild_price > obj.free_price and obj.free_price > 0:
|
|
return obj.free_price
|
|
else:
|
|
return broad_price.guild_price
|
|
else:
|
|
return obj.free_price
|
|
|
|
return obj.free_price
|
|
elif isinstance(obj, OtherProducts):
|
|
return obj.price
|
|
elif isinstance(obj, LiveStockRolseProduct):
|
|
pos_id = self.context.get('validation_device')
|
|
|
|
main_product = obj.parent_product
|
|
pos = POSMachine.objects.get(pos_id=pos_id)
|
|
share = CooperativeProductsShare.objects.get(product=main_product, cooperative=pos.cooperative, trash=False)
|
|
|
|
return share.price + share.shipping_price + share.cooperative_price + share.company_price + share.cooperative.first_sub_cooperative_price + share.cooperative.second_sub_cooperative_price
|
|
return None
|
|
|
|
def to_representation(self, instance):
|
|
if isinstance(instance, RolesProducts):
|
|
|
|
data = {
|
|
"key": instance.key,
|
|
"parent_product": instance.parent_product.key,
|
|
"product_type": "roles_product",
|
|
"name": instance.name,
|
|
"image": instance.parent_product.image,
|
|
"price": self.get_price(instance),
|
|
"price_approved": instance.approved_price_status,
|
|
"selling_more": instance.parent_product.selling_more_than_inventory,
|
|
"unit": 'kg',
|
|
"total_carcasses_weight": instance.total_carcasses_weight,
|
|
"real_allocated_weight": instance.real_allocated_weight,
|
|
"total_remain_weight": instance.total_remain_weight,
|
|
"segmentation_weight": instance.segmentation_weight,
|
|
"pos_allocated_weight": instance.pos_allocated_weight,
|
|
"active": True,
|
|
"targetunit": "g",
|
|
|
|
}
|
|
return data
|
|
|
|
elif isinstance(instance, OtherProducts):
|
|
data = {
|
|
"key": instance.key,
|
|
"parent_product": None,
|
|
"product_type": "other_product",
|
|
"name": instance.name,
|
|
"image": instance.image,
|
|
"price": instance.price,
|
|
"price_approved": False,
|
|
"selling_more": True,
|
|
"unit": instance.unit,
|
|
"total_carcasses_weight": 0,
|
|
"real_allocated_weight": 0,
|
|
"total_remain_weight": 0,
|
|
"segmentation_weight": 0,
|
|
"pos_allocated_weight": 0,
|
|
"active": instance.active,
|
|
"targetunit": "g",
|
|
|
|
}
|
|
return data
|
|
elif isinstance(instance, LiveStockRolseProduct):
|
|
data = {
|
|
"key": instance.key,
|
|
"parent_product": instance.parent_product.key,
|
|
"product_type": "stock_product",
|
|
"name": instance.parent_product.name,
|
|
"image": instance.parent_product.image,
|
|
"price": self.get_price(instance),
|
|
"price_approved": True,
|
|
"selling_more": False,
|
|
"unit": 'kg',
|
|
"total_carcasses_weight": instance.total_weight,
|
|
"real_allocated_weight": instance.total_allocated_weight,
|
|
"total_remain_weight": instance.total_remain_weight,
|
|
"segmentation_weight": 0,
|
|
"pos_allocated_weight": 0,
|
|
"active": True,
|
|
"targetunit": "kg",
|
|
|
|
}
|
|
return data
|
|
return super().to_representation(instance)
|
|
class NewCombinedPosProductSerializer(serializers.ModelSerializer):
|
|
price = serializers.SerializerMethodField('get_price')
|
|
product_type = serializers.CharField()
|
|
|
|
def get_price(self, obj):
|
|
if isinstance(obj, RolesProducts):
|
|
broad_price = BroadcastPrice.objects.filter(trash=False).first()
|
|
if broad_price and broad_price.active:
|
|
if obj.kill_house:
|
|
if broad_price.guild_price > 0:
|
|
if broad_price.guild_price > obj.free_price and obj.free_price > 0:
|
|
return obj.free_price
|
|
else:
|
|
return broad_price.guild_price
|
|
|
|
else:
|
|
return obj.free_price
|
|
|
|
else:
|
|
|
|
if obj.guild.steward:
|
|
if broad_price.guild_price > 0:
|
|
if broad_price.guild_price > obj.free_price and obj.free_price > 0:
|
|
return obj.free_price
|
|
else:
|
|
return broad_price.guild_price
|
|
else:
|
|
return obj.free_price
|
|
else:
|
|
if broad_price.guild_price > 0:
|
|
if broad_price.guild_price > obj.free_price and obj.free_price > 0:
|
|
return obj.free_price
|
|
else:
|
|
return broad_price.guild_price
|
|
else:
|
|
return obj.free_price
|
|
|
|
return obj.free_price
|
|
elif isinstance(obj, OtherProducts):
|
|
return obj.price
|
|
elif isinstance(obj, LiveStockRolseProduct):
|
|
pos_id = self.context.get('validation_device')
|
|
|
|
main_product = obj.parent_product
|
|
pos = POSMachine.objects.get(pos_id=pos_id)
|
|
share = CooperativeProductsShare.objects.get(product=main_product, cooperative=pos.cooperative, trash=False)
|
|
|
|
return share.price + share.shipping_price + share.cooperative_price + share.company_price + share.cooperative.first_sub_cooperative_price + share.cooperative.second_sub_cooperative_price
|
|
return None
|
|
|
|
def to_representation(self, instance):
|
|
if isinstance(instance, RolesProducts):
|
|
|
|
data = {
|
|
"key": instance.key,
|
|
"parent_product": instance.parent_product.key,
|
|
"product_type": "roles_product",
|
|
"name": instance.name,
|
|
"image": instance.parent_product.image,
|
|
"price": self.get_price(instance),
|
|
"price_approved": instance.approved_price_status,
|
|
"selling_more": instance.parent_product.selling_more_than_inventory,
|
|
"unit": 'kg',
|
|
"total_carcasses_weight": instance.total_carcasses_weight,
|
|
"real_allocated_weight": instance.real_allocated_weight,
|
|
"total_remain_weight": instance.total_remain_weight,
|
|
"segmentation_weight": instance.segmentation_weight,
|
|
"pos_allocated_weight": instance.pos_allocated_weight,
|
|
"active": True,
|
|
"targetunit": "g",
|
|
|
|
}
|
|
return data
|
|
|
|
elif isinstance(instance, OtherProducts):
|
|
data = {
|
|
"key": instance.key,
|
|
"parent_product": None,
|
|
"product_type": "other_product",
|
|
"name": instance.name,
|
|
"image": instance.image,
|
|
"price": instance.price,
|
|
"price_approved": False,
|
|
"selling_more": True,
|
|
"unit": instance.unit,
|
|
"total_carcasses_weight": 0,
|
|
"real_allocated_weight": 0,
|
|
"total_remain_weight": 0,
|
|
"segmentation_weight": 0,
|
|
"pos_allocated_weight": 0,
|
|
"active": instance.active,
|
|
"targetunit": "g",
|
|
|
|
}
|
|
return data
|
|
elif isinstance(instance, LiveStockRolseProduct):
|
|
data = {
|
|
"key": instance.key,
|
|
"parent_product": instance.parent_product.key,
|
|
"product_type": "stock_product",
|
|
"name": instance.parent_product.name,
|
|
"image": instance.parent_product.image,
|
|
"price": self.get_price(instance),
|
|
"price_approved": True,
|
|
"selling_more": False,
|
|
"unit": 'kg',
|
|
"total_carcasses_weight": instance.total_weight,
|
|
"real_allocated_weight": instance.total_allocated_weight,
|
|
"total_remain_weight": instance.total_remain_weight,
|
|
"segmentation_weight": 0,
|
|
"pos_allocated_weight": 0,
|
|
"active": True,
|
|
"targetunit": "kg",
|
|
|
|
}
|
|
return data
|
|
return super().to_representation(instance)
|
|
|
|
|
|
class RolesProductsForStewardAllocationsSerializer(serializers.ModelSerializer):
|
|
# parent_product = NewProductSerializer(read_only=True)
|
|
# kill_house = KillHouseForAutoAllocationSerializer (read_only=True)
|
|
# guild = GuildsForStewardMenueSerializer (read_only=True)
|
|
|
|
class Meta:
|
|
model = RolesProducts
|
|
fields = ['name', 'weight_average']
|
|
|
|
|
|
class LiveStockSupportForColdHouseSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForGuildSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = LiveStockSupport
|
|
fields = ['key', 'user']
|
|
|
|
|
|
class ColdHouseSerializer(serializers.ModelSerializer):
|
|
kill_house = KillHouseForProvinceSerializer(read_only=True)
|
|
steward = GuildsForStewardMenueSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = ColdHouse
|
|
fields = ['key', 'kill_house', 'steward', 'total_input_weight', 'total_allocated_weight',
|
|
'total_remain_weight', 'name', 'province', 'city', 'address', 'active', 'broadcast', 'relocate',
|
|
'capacity']
|
|
|
|
|
|
class StewardAllocationSerializer(serializers.ModelSerializer):
|
|
# steward = StewardSerializer(read_only=True)
|
|
product = RolesProductsForStewardAllocationsSerializer(read_only=True)
|
|
kill_house = KillHouseForKillingInformationDiscrepancyReportSerializer(required=False)
|
|
to_kill_house = KillHouseForKillingInformationDiscrepancyReportSerializer(required=False)
|
|
steward = GuildsSerializer(read_only=True)
|
|
to_steward = GuildsSerializer(read_only=True)
|
|
# ware_house = KillHouseWareHouseSerializer(read_only=True)
|
|
guilds = GuildsSerializer(read_only=True)
|
|
to_guilds = GuildsSerializer(read_only=True)
|
|
to_cold_house = ColdHouseSerializer(read_only=True)
|
|
other_cold_house = ColdHouseSerializer(read_only=True)
|
|
# seller = serializers.SerializerMethodField('get_seller_info')
|
|
index_weight = serializers.SerializerMethodField('get_index_weight')
|
|
date_timestamp = serializers.SerializerMethodField('get_date_timestamp')
|
|
new_state = serializers.SerializerMethodField('get_new_state')
|
|
new_receiver_state = serializers.SerializerMethodField('get_new_receiver_state')
|
|
new_allocation_state = serializers.SerializerMethodField('get_new_allocation_state')
|
|
|
|
class Meta:
|
|
model = StewardAllocation
|
|
fields = '__all__'
|
|
|
|
# def get_seller_info(self, obj):
|
|
# seller_name = None
|
|
# seller_mobile = None
|
|
# seller_role = None
|
|
# if obj.ware_house != None:
|
|
# seller_name = obj.ware_house.kill_house.kill_house_operator.user.fullname
|
|
# seller_mobile = obj.ware_house.kill_house.kill_house_operator.user.mobile
|
|
# seller_role = 'KillHouse'
|
|
# else:
|
|
# seller_name = obj.steward_ware_house.steward.guilds.user.fullname
|
|
# seller_mobile = obj.steward_ware_house.steward.guilds.user.mobile
|
|
# seller_role = 'Steward'
|
|
#
|
|
# return {
|
|
# "seller_name": seller_name,
|
|
# "seller_mobile": seller_mobile,
|
|
# "seller_role": seller_role
|
|
# }
|
|
|
|
def get_index_weight(self, obj):
|
|
|
|
index_weight = round((obj.real_weight_of_carcasses / obj.real_number_of_carcasses),
|
|
2) if obj.real_number_of_carcasses > 0 else 0
|
|
|
|
return index_weight
|
|
|
|
def get_date_timestamp(self, obj):
|
|
ts = datetime.timestamp(obj.date)
|
|
return int(ts)
|
|
|
|
def get_new_state(self, obj):
|
|
state = None
|
|
if obj.state == 'pending':
|
|
state = 0
|
|
elif obj.state == 'accepted':
|
|
state = 1
|
|
else:
|
|
state = -1
|
|
return state
|
|
|
|
def get_new_receiver_state(self, obj):
|
|
state = None
|
|
if obj.receiver_state == 'pending':
|
|
state = 0
|
|
elif obj.receiver_state == 'accepted':
|
|
state = 1
|
|
else:
|
|
state = -1
|
|
return state
|
|
|
|
def get_new_allocation_state(self, obj):
|
|
state = None
|
|
if obj.allocation_state == 'pending':
|
|
state = 0
|
|
elif obj.allocation_state == 'accepted':
|
|
state = 1
|
|
else:
|
|
state = -1
|
|
return state
|
|
|
|
|
|
class InProvinceAllocationSerializer(serializers.ModelSerializer):
|
|
product = RolesProductsForStewardAllocationsSerializer(read_only=True)
|
|
kill_house = KillHouseForKillingInformationDiscrepancyReportSerializer(required=False)
|
|
to_kill_house = KillHouseForKillingInformationDiscrepancyReportSerializer(required=False)
|
|
steward = RealGuildsSerializer(read_only=True)
|
|
to_steward = RealGuildsSerializer(read_only=True)
|
|
guilds = RealGuildsSerializer(read_only=True)
|
|
to_guilds = RealGuildsSerializer(read_only=True)
|
|
steward_pos_status = serializers.SerializerMethodField()
|
|
guild_pos_status = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = StewardAllocation
|
|
exclude = ('created_by', 'modified_by', 'dispenser', 'car', 'to_cold_house', 'steward_ware_house', 'ware_house',
|
|
'create_date',
|
|
'modify_date', 'temporary_deleted', 'temporary_trash', 'calculate_status',
|
|
'steward_temp_key', 'role')
|
|
|
|
def get_steward_pos_status(self, obj):
|
|
steward = getattr(obj, 'steward', None)
|
|
if not steward:
|
|
return 'ندارد'
|
|
has_paid_pos = POSTransactions.objects.filter(
|
|
paid=True,
|
|
pos_machine__guild=steward
|
|
).exists()
|
|
return 'دارد' if has_paid_pos else 'ندارد'
|
|
|
|
def get_guild_pos_status(self, obj):
|
|
steward = getattr(obj, 'steward', None)
|
|
to_guilds = getattr(obj, 'to_guilds', None)
|
|
if not steward or not to_guilds:
|
|
return 'ندارد'
|
|
has_paid_pos = POSTransactions.objects.filter(
|
|
paid=True,
|
|
pos_machine__guild=to_guilds
|
|
).exists()
|
|
return 'دارد' if has_paid_pos else 'ندارد'
|
|
|
|
|
|
class PosStewardAllocationSerializer(serializers.ModelSerializer):
|
|
# kill_house = PosKillHouseForKillingInformationDiscrepancyReportSerializer(required=False)
|
|
# to_kill_house = PosKillHouseForKillingInformationDiscrepancyReportSerializer(required=False)
|
|
# steward = PosGuildsForBroadcastManagementSerializer(read_only=True)
|
|
# to_steward = PosGuildsForBroadcastManagementSerializer(read_only=True)
|
|
# guilds = PosGuildsForBroadcastManagementSerializer(read_only=True)
|
|
# to_guilds = PosGuildsForBroadcastManagementSerializer(read_only=
|
|
allocation_from = serializers.SerializerMethodField('get_allocation_from')
|
|
allocation_to = serializers.SerializerMethodField('get_allocation_to')
|
|
|
|
class Meta:
|
|
model = StewardAllocation
|
|
fields = ['key', 'allocation_from', 'allocation_to', 'real_number_of_carcasses', 'real_weight_of_carcasses',
|
|
'receiver_real_number_of_carcasses', 'receiver_real_weight_of_carcasses', 'sell_type',
|
|
'allocation_type', 'system_registration_code', 'logged_registration_code', 'receiver_state', 'date',
|
|
'amount', 'total_amount', 'total_amount_paid', 'total_amount_remain', 'active_expire_date_time',
|
|
'production_date', 'quota', 'approved_price_status']
|
|
|
|
def get_allocation_from(self, obj):
|
|
if obj.kill_house:
|
|
|
|
return {
|
|
"key": obj.kill_house.key,
|
|
"name": obj.kill_house.name,
|
|
"type_activity": "KillHouse",
|
|
}
|
|
elif obj.steward:
|
|
return {
|
|
"key": obj.steward.key,
|
|
"name": obj.steward.guilds_name,
|
|
"type_activity": "Steward",
|
|
}
|
|
|
|
else:
|
|
return {
|
|
"key": obj.guilds.key,
|
|
"name": obj.guilds.guilds_name,
|
|
"type_activity": "Guild",
|
|
}
|
|
|
|
def get_allocation_to(self, obj):
|
|
if obj.to_kill_house:
|
|
|
|
return {
|
|
"key": obj.to_kill_house.key,
|
|
"name": obj.to_kill_house.name,
|
|
"type_activity": "KillHouse",
|
|
}
|
|
elif obj.to_steward:
|
|
return {
|
|
"key": obj.to_steward.key,
|
|
"name": obj.to_steward.guilds_name,
|
|
"type_activity": "Steward",
|
|
}
|
|
|
|
else:
|
|
return {
|
|
"key": obj.to_guilds.key,
|
|
"name": obj.to_guilds.guilds_name,
|
|
"type_activity": "Guild",
|
|
}
|
|
|
|
|
|
class AutoAcceptProvinceKillRequestSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = AutoAcceptProvinceKillRequest
|
|
fields = ['allow']
|
|
|
|
|
|
class AutoMakeKillHouseRequestSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = AutoMakeKillHouseRequest
|
|
fields = ['allow']
|
|
|
|
|
|
class NewProvinceAutoAllocationSerializer(serializers.ModelSerializer):
|
|
poultry_request = PoultryRequestForAutoAllocationSerializer(read_only=True)
|
|
province_kill_request = ProvinceKillRequestForAutoAllocationSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = ProvinceAutoAllocation
|
|
fields = ['key', 'create_date', 'poultry_request', 'province_kill_request']
|
|
|
|
|
|
class KillHousePercentageOfLossesSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = KillHousePercentageOfLosses
|
|
fields = '__all__'
|
|
|
|
|
|
class ProvinceAllowKillHouseChooseStewardGuildsSerializer(serializers.ModelSerializer):
|
|
kill_house = KillHouseForProvinceSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = ProvinceAllowKillHouseChooseStewardGuilds
|
|
fields = ['key', 'kill_house', 'steward', 'guilds']
|
|
|
|
|
|
class HatchingLossesPermissionSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = HatchingLossesPermission
|
|
fields = ['key', 'percent', 'allow']
|
|
|
|
|
|
class WagePaymentSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = WagePayment
|
|
fields = '__all__'
|
|
|
|
|
|
class ProvinceAllowKillHouseDirectBuyingTotalSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = ProvinceAllowKillHouseDirectBuyingTotal
|
|
fields = ['key', 'allow']
|
|
|
|
|
|
class ProvinceAllowKillHouseDirectBuyingSerializer(serializers.ModelSerializer):
|
|
kill_house = KillHouseForProvinceSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = ProvinceAllowKillHouseDirectBuying
|
|
fields = ['key', 'allow', 'kill_house', 'export_status']
|
|
|
|
|
|
class ProvinceAllowKillHouseRegisterGuildsTotalSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = ProvinceAllowKillHouseRegisterGuildsTotal
|
|
fields = ['key', 'allow']
|
|
|
|
|
|
class ProvinceAllowKillHouseRegisterGuildsSerializer(serializers.ModelSerializer):
|
|
kill_house = KillHouseForProvinceSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = ProvinceAllowKillHouseRegisterGuilds
|
|
fields = ['key', 'allow', 'kill_house']
|
|
|
|
|
|
class ObservatorySerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileSerializer(read_only=True)
|
|
address = SystemAddressSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = Observatory
|
|
fields = '__all__'
|
|
|
|
|
|
class PosVersiontSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = PosVersion
|
|
fields = '__all__'
|
|
|
|
|
|
class PosItemSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = PosItem
|
|
fields = '__all__'
|
|
|
|
|
|
class POSIdSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = POSId
|
|
fields = '__all__'
|
|
|
|
|
|
class GuildRoomSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = GuildRoom
|
|
fields = '__all__'
|
|
|
|
|
|
class POSMachineForInspectionSerializer(serializers.ModelSerializer):
|
|
guild_info = serializers.SerializerMethodField('get_guild_info')
|
|
ware_house_info = serializers.SerializerMethodField('get_ware_house_info')
|
|
|
|
class Meta:
|
|
model = POSMachine
|
|
exclude = ('created_by', 'modified_by', 'user', 'pos_company', 'kill_house', 'guild', 'steward', 'create_date',
|
|
'modify_date', 'trash')
|
|
|
|
def get_guild_info(self, obj):
|
|
|
|
return {
|
|
"fullname": obj.user.fullname,
|
|
"mobile": obj.user.mobile,
|
|
"city": obj.user.city.name,
|
|
"province": obj.user.province.name,
|
|
"guild_name": obj.guild.guilds_name,
|
|
}
|
|
|
|
def get_ware_house_info(self, obj):
|
|
try:
|
|
ware_house = GuildsWareHouse.objects.get(guilds=obj.guild, trash=False)
|
|
return {
|
|
"quantity": ware_house.remain_total_number_of_carcasses,
|
|
"weight": ware_house.remain_total_weight_of_carcasses
|
|
}
|
|
except:
|
|
return {
|
|
"quantity": 0,
|
|
"weight": 0
|
|
}
|
|
|
|
|
|
class PosDeviceVersionSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = PosDeviceVersion
|
|
fields = '__all__'
|
|
|
|
|
|
class POSMachineSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = POSMachine
|
|
fields = '__all__'
|
|
|
|
|
|
class NewPOSMachineSerializer(serializers.ModelSerializer):
|
|
owner = serializers.SerializerMethodField('get_owner')
|
|
company_name = serializers.CharField(source='pos_company.name', read_only=True)
|
|
|
|
class Meta:
|
|
model = POSMachine
|
|
fields = '__all__'
|
|
|
|
def get_owner(self, obj):
|
|
result = None
|
|
if obj.kill_house:
|
|
result = {
|
|
"type": "KillHouse",
|
|
"unit_name": obj.kill_house.name,
|
|
"fullname": obj.kill_house.kill_house_operator.user.fullname,
|
|
"mobile": obj.kill_house.kill_house_operator.user.mobile,
|
|
"license_number": '-',
|
|
"steward": '-',
|
|
}
|
|
|
|
|
|
elif obj.steward:
|
|
result = {
|
|
"type": "Steward",
|
|
"unit_name": obj.guild.guilds_name,
|
|
"fullname": obj.guild.user.fullname,
|
|
"mobile": obj.guild.user.mobile,
|
|
"license_number": obj.guild.license_number,
|
|
"steward": obj.guild.steward,
|
|
}
|
|
|
|
|
|
|
|
|
|
elif obj.guild:
|
|
result = {
|
|
"type": "Guilds",
|
|
"unit_name": obj.guild.guilds_name,
|
|
"fullname": obj.guild.user.fullname,
|
|
"mobile": obj.guild.user.mobile,
|
|
"license_number": obj.guild.license_number,
|
|
"steward": obj.guild.steward,
|
|
}
|
|
|
|
else:
|
|
pass
|
|
return result
|
|
|
|
|
|
class POSMachineForLiveStockSerializer(serializers.ModelSerializer):
|
|
company_name = serializers.SerializerMethodField('get_company_name')
|
|
|
|
class Meta:
|
|
model = POSMachine
|
|
fields = ['company_name', 'pos_id']
|
|
|
|
def get_company_name(self, obj):
|
|
return obj.pos_company.name
|
|
|
|
|
|
class POSDeviceSessionSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = POSDeviceSession
|
|
fields = '__all__'
|
|
|
|
|
|
class POSMachineForInspectionsSerializer(serializers.ModelSerializer):
|
|
guild = GeneralGuildsForInspectionsSerializer(read_only=True)
|
|
products = serializers.SerializerMethodField('get_products')
|
|
transactions = serializers.SerializerMethodField('get_transactions')
|
|
|
|
class Meta:
|
|
model = POSMachine
|
|
fields = ['key', 'pos_id', 'guild', 'products', 'transactions', 'create_date']
|
|
|
|
def get_products(self, obj):
|
|
products = RolesProducts.objects.filter(guild=obj.guild, trash=False).order_by('id')
|
|
serializer = RolesProductsForInspectionSerializer(products, many=True)
|
|
return serializer.data
|
|
|
|
def get_transactions(self, obj):
|
|
transactions = PosMachineTransactions.objects.filter(pos=obj, paid=True, trash=False)
|
|
return len(transactions)
|
|
|
|
|
|
class POSMachineForTransactionInspectionsSerializer(serializers.ModelSerializer):
|
|
guild = GeneralGuildsForInspectionsSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = POSMachine
|
|
fields = ['key', 'pos_id', 'guild']
|
|
|
|
|
|
class POSMachineForLiveStockTransactionsSerializer(serializers.ModelSerializer):
|
|
cooperative = CooperativeForSharesSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = POSMachine
|
|
fields = ['key', 'pos_id', 'cooperative']
|
|
|
|
|
|
class POSDeviceSessionForInspectionSerializer(serializers.ModelSerializer):
|
|
lat = serializers.FloatField(source='lot', read_only=True)
|
|
lng = serializers.FloatField(read_only=True)
|
|
guilds_name = serializers.CharField(source='pos.guild.guilds_name', read_only=True)
|
|
|
|
class Meta:
|
|
model = POSDeviceSession
|
|
fields = ['lat', 'lng', 'guilds_name']
|
|
|
|
class POSMachineForServerSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = POSMachine
|
|
fields = ['pos_id']
|
|
|
|
|
|
class POSTransactionsSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = POSTransactions
|
|
fields = '__all__'
|
|
|
|
|
|
class EvacuationPermitSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = EvacuationPermit
|
|
fields = '__all__'
|
|
|
|
|
|
class SellForFreezingSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = SellForFreezing
|
|
fields = ['permission']
|
|
|
|
|
|
class LiveStockSupportSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileSerializer(read_only=True)
|
|
address = SystemAddressSerializer(read_only=True)
|
|
user_bank_info = BankCardSerializer(required=False)
|
|
|
|
class Meta:
|
|
model = LiveStockSupport
|
|
fields = '__all__'
|
|
|
|
|
|
class ColdHouseForRplesSerializer(serializers.ModelSerializer):
|
|
sumation_status = serializers.SerializerMethodField('get_sumation_status')
|
|
|
|
class Meta:
|
|
model = ColdHouse
|
|
fields = ['sumation_status', 'total_quantity', 'total_weight', 'name', 'key']
|
|
|
|
def get_sumation_status(self, obj):
|
|
allocations = ColdHouseAllocations.objects.filter(state='accepted', cold_house=obj, trash=False).order_by('id')
|
|
accepted_quantitys = allocations.aggregate(total=Sum('accepted_quantity'))['total'] or 0
|
|
accepted_weights = allocations.aggregate(total=Sum('accepted_weight'))['total'] or 0
|
|
obj.total_quantity = accepted_quantitys
|
|
obj.total_weight = accepted_weights
|
|
obj.save()
|
|
return "1"
|
|
|
|
|
|
class ColdHouseAllocationsSerializer(serializers.ModelSerializer):
|
|
cold_house = ColdHouseSerializer(read_only=True)
|
|
kill_house_request = KillHouseRequestForColdHouseAllocationsSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = ColdHouseAllocations
|
|
fields = '__all__'
|
|
|
|
|
|
class OperationLimitationSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = OperationLimitation
|
|
exclude = ('id', 'key', 'create_date', 'modify_date', 'trash', 'created_by', 'modified_by')
|
|
|
|
|
|
class ApprovedPriceSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = ApprovedPrice
|
|
exclude = ('id', 'key', 'create_date', 'modify_date', 'trash', 'created_by', 'modified_by')
|
|
|
|
|
|
class AnnouncementsSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Announcements
|
|
exclude = ('id', 'create_date', 'modify_date', 'trash', 'created_by', 'modified_by')
|
|
|
|
|
|
class PaymentGatewayPercentageSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = PaymentGatewayPercentage
|
|
exclude = ('id', 'create_date', 'key', 'modify_date', 'trash', 'created_by', 'modified_by')
|
|
|
|
|
|
class TotalPaymentGatewayPercentageSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = TotalPaymentGatewayPercentage
|
|
exclude = ('id', 'create_date', 'key', 'modify_date', 'trash', 'created_by', 'modified_by')
|
|
|
|
|
|
class ChickenAgeRangeSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = ChickenAgeRange
|
|
fields = ['active', 'maximum', 'minimum']
|
|
|
|
|
|
class TimeRangeSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = TimeRange
|
|
exclude = (
|
|
'id',
|
|
'key',
|
|
'trash',
|
|
'created_by',
|
|
'modified_by',
|
|
'create_date',
|
|
'modify_date',
|
|
)
|
|
|
|
|
|
class SystemWalletSerializer(serializers.ModelSerializer):
|
|
sumation_status = serializers.SerializerMethodField('get_sumation_status')
|
|
|
|
class Meta:
|
|
model = SystemWallet
|
|
exclude = (
|
|
'id',
|
|
'key',
|
|
'trash',
|
|
'created_by',
|
|
'modified_by',
|
|
'create_date',
|
|
'modify_date'
|
|
)
|
|
|
|
def get_sumation_status(self, obj):
|
|
status = 0
|
|
if obj.kill_house != None:
|
|
transactions = ExternalTransaction.objects.filter(transaction_type='wallet',
|
|
kill_house_user=obj.kill_house.kill_house_operator.user,
|
|
status='completed',
|
|
trash=False).order_by(
|
|
'id')
|
|
deposit_transactions = transactions.filter(type='deposit')
|
|
withdraw_transactions = transactions.filter(type='withdraw')
|
|
deposit = deposit_transactions.aggregate(total=Sum('amount'))['total'] or 0
|
|
withdraw = withdraw_transactions.aggregate(total=Sum('amount'))['total'] or 0
|
|
total = deposit - withdraw if (deposit - withdraw) > 0 else 0
|
|
|
|
obj.balance = total
|
|
obj.save()
|
|
status = 1
|
|
return status
|
|
|
|
|
|
class ShareTypeSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = ShareType
|
|
exclude = (
|
|
'trash',
|
|
'created_by',
|
|
'modified_by',
|
|
'create_date',
|
|
'modify_date',
|
|
)
|
|
|
|
|
|
class PercentageForWageTypeSerializer(serializers.ModelSerializer):
|
|
name = serializers.SerializerMethodField('get_share_name')
|
|
|
|
class Meta:
|
|
model = PercentageOfWageType
|
|
exclude = (
|
|
'id',
|
|
'trash',
|
|
'created_by',
|
|
'modified_by',
|
|
'create_date',
|
|
'modify_date',
|
|
'wage_type'
|
|
)
|
|
|
|
def get_share_name(self, obj):
|
|
return obj.share_type.name
|
|
|
|
|
|
class WageTypeForPoultryOutProvinceRequestSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = WageType
|
|
exclude = (
|
|
'id',
|
|
'name',
|
|
'en_name',
|
|
'amount',
|
|
'key',
|
|
'trash',
|
|
'created_by',
|
|
'modified_by',
|
|
'create_date',
|
|
'modify_date'
|
|
)
|
|
|
|
|
|
class WageTypeSerializer(serializers.ModelSerializer):
|
|
percentages = serializers.SerializerMethodField('get_percentages')
|
|
|
|
class Meta:
|
|
model = WageType
|
|
exclude = (
|
|
'id',
|
|
'trash',
|
|
'created_by',
|
|
'modified_by',
|
|
'create_date',
|
|
'modify_date'
|
|
)
|
|
|
|
def get_percentages(self, obj):
|
|
percentages = PercentageOfWageType.objects.filter(wage_type=obj, trash=False).order_by('id')
|
|
serializer = PercentageForWageTypeSerializer(percentages, many=True)
|
|
return serializer.data
|
|
|
|
|
|
class PercentageOfWageTypeSerializer(serializers.ModelSerializer):
|
|
wage_type = WageTypeSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = PercentageOfWageType
|
|
fields = '__all__'
|
|
|
|
|
|
class SubSectorPercentageOfWageTypeSerializer(serializers.ModelSerializer):
|
|
percentage_of_wage_type = PercentageOfWageTypeSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = SubSectorPercentageOfWageType
|
|
fields = '__all__'
|
|
|
|
|
|
class InternalTransactionSerializer(serializers.ModelSerializer):
|
|
kill_house = KillHouseForKillHouseVetKillHouseSerializer(read_only=True)
|
|
parent_kill_house = KillHouseForKillHouseVetKillHouseSerializer(read_only=True)
|
|
chain_company = ChainCompanySerializer(read_only=True)
|
|
poultry_request = PoultryRequestForAutoAllocationSerializer(read_only=True, many=True)
|
|
poultry = PoultryForPoultryRequestLetterSerializer(read_only=True)
|
|
out_province_poultry_request_buyer = OutProvincePoultryRequestBuyerSerializer(read_only=True)
|
|
payer_info = serializers.SerializerMethodField('get_payer_info')
|
|
transaction_amount = serializers.SerializerMethodField('get_total_wage_pay')
|
|
union_info = serializers.SerializerMethodField('get_union_info')
|
|
|
|
class Meta:
|
|
model = InternalTransaction
|
|
fields = '__all__'
|
|
|
|
def get_payer_info(self, obj):
|
|
fullname = None
|
|
mobile = None
|
|
if obj.kill_house != None:
|
|
fullname = obj.kill_house.kill_house_operator.user.fullname
|
|
mobile = obj.kill_house.kill_house_operator.user.mobile
|
|
elif obj.out_province_poultry_request_buyer != None:
|
|
fullname = obj.out_province_poultry_request_buyer.user.fullname
|
|
mobile = obj.out_province_poultry_request_buyer.user.mobile
|
|
elif obj.chain_company != None:
|
|
fullname = obj.chain_company.user.fullname
|
|
mobile = obj.chain_company.user.mobile
|
|
|
|
else:
|
|
fullname = obj.user.fullname
|
|
mobile = obj.user.mobile
|
|
|
|
return {
|
|
"fullname": fullname,
|
|
"mobile": mobile
|
|
}
|
|
|
|
def get_total_wage_pay(self, obj):
|
|
role = self.context.get('request').GET['role']
|
|
|
|
# if role == 'ProvinceOperator':
|
|
# amout = obj.union_share
|
|
# elif role == 'Company':
|
|
# amout = obj.company_share
|
|
# elif role == 'Guilds':
|
|
# amout = obj.guilds_share
|
|
# elif role == 'SuperAdmin':
|
|
# amout = obj.amount - obj.other_share
|
|
# else:
|
|
# amout = obj.amount
|
|
|
|
return obj.amount
|
|
|
|
def get_union_info(self, obj):
|
|
user = SystemUserProfile.objects.filter(role__name='ProvinceOperator', trash=False).first()
|
|
serializer = SystemUserProfileForFactorSerializer(user)
|
|
return serializer.data
|
|
|
|
|
|
class PoultryOutRequestInternalTransactionSerializer(serializers.ModelSerializer):
|
|
poultry_request = PoultryRequestForOutRequestTransactionsSerializer(read_only=True, many=True)
|
|
poultry = PoultryForPoultryRequestLetterSerializer(read_only=True)
|
|
out_province_poultry_request_buyer = OutProvincePoultryRequestBuyerSerializer(read_only=True)
|
|
payer_info = serializers.SerializerMethodField('get_payer_info')
|
|
|
|
class Meta:
|
|
model = InternalTransaction
|
|
fields = '__all__'
|
|
|
|
def get_payer_info(self, obj):
|
|
fullname = None
|
|
mobile = None
|
|
if obj.kill_house != None:
|
|
fullname = obj.kill_house.kill_house_operator.user.fullname
|
|
mobile = obj.kill_house.kill_house_operator.user.mobile
|
|
elif obj.out_province_poultry_request_buyer != None:
|
|
fullname = obj.out_province_poultry_request_buyer.user.fullname
|
|
mobile = obj.out_province_poultry_request_buyer.user.mobile
|
|
elif obj.chain_company != None:
|
|
fullname = obj.chain_company.user.fullname
|
|
mobile = obj.chain_company.user.mobile
|
|
|
|
else:
|
|
fullname = obj.user.fullname
|
|
mobile = obj.user.mobile
|
|
|
|
return {
|
|
"fullname": fullname,
|
|
"mobile": mobile
|
|
}
|
|
|
|
|
|
# class TotalWageInformationSerializer(serializers.ModelSerializer):
|
|
# wage_info = serializers.SerializerMethodField('get_wage_info')
|
|
#
|
|
# class Meta:
|
|
# model = TotalWageInformation
|
|
# fields = ['key', 'wage_info']
|
|
#
|
|
# def get_wage_info(self, obj):
|
|
#
|
|
# total_weight = 0
|
|
# total_wage = 0
|
|
# total_paid_wage = 0
|
|
# total_unpaid_wage = 0
|
|
# union_total_weight = 0
|
|
# union_total_wage = 0
|
|
# union_total_paid_wage = 0
|
|
# union_total_unpaid_wage = 0
|
|
# union_province_kill_request_total_wage = 0
|
|
# union_poultry_request_out_total_wage = 0
|
|
# freezing_union_province_kill_request_total_wage = 0
|
|
# union_kill_house_free_live_bar_total_wage = 0
|
|
# union_kill_house_free_carcases_bar_total_wage = 0
|
|
# union_chain_allocation_total_wage = 0
|
|
# union_province_kill_request_total_weight = 0
|
|
# union_poultry_request_out_total_weight = 0
|
|
# freezing_union_province_kill_request_total_weight = 0
|
|
# union_kill_house_free_live_bar_total_weight = 0
|
|
# union_kill_house_free_carcases_bar_total_weight = 0
|
|
# union_chain_allocation_total_weight = 0
|
|
#
|
|
# company_total_weight = 0
|
|
# company_total_wage = 0
|
|
# company_total_paid_wage = 0
|
|
# company_total_unpaid_wage = 0
|
|
# company_province_kill_request_total_wage = 0
|
|
# freezing_company_province_kill_request_total_wage = 0
|
|
# company_kill_house_free_live_bar_total_wage = 0
|
|
# company_kill_house_free_carcases_bar_total_wage = 0
|
|
# company_chain_allocation_total_wage = 0
|
|
# company_province_kill_request_total_weight = 0
|
|
# freezing_company_province_kill_request_total_weight = 0
|
|
# company_kill_house_free_live_bar_total_weight = 0
|
|
# company_kill_house_free_carcases_bar_total_weight = 0
|
|
# company_chain_allocation_total_weight = 0
|
|
# company_poultry_request_out_total_wage = 0
|
|
# company_poultry_request_out_total_weight = 0
|
|
#
|
|
# guilds_total_weight = 0
|
|
# guilds_total_wage = 0
|
|
# guilds_total_paid_wage = 0
|
|
# guilds_total_unpaid_wage = 0
|
|
# guilds_province_kill_request_total_wage = 0
|
|
# freezing_guilds_province_kill_request_total_wage = 0
|
|
# guilds_kill_house_free_live_bar_total_wage = 0
|
|
# guilds_kill_house_free_carcases_bar_total_wage = 0
|
|
# guilds_chain_allocation_total_wage = 0
|
|
# guilds_province_kill_request_total_weight = 0
|
|
# freezing_guilds_province_kill_request_total_weight = 0
|
|
# guilds_kill_house_free_live_bar_total_weight = 0
|
|
# guilds_kill_house_free_carcases_bar_total_weight = 0
|
|
# guilds_chain_allocation_total_weight = 0
|
|
# guilds_poultry_request_out_total_wage = 0
|
|
# guilds_poultry_request_out_total_weight = 0
|
|
# province_kill_request_total_wage = 0
|
|
# province_kill_request_total_weight = 0
|
|
# poultry_request_out_total_wage = 0
|
|
# poultry_request_out_total_weight = 0
|
|
# freezing_province_kill_requests_total_wage = 0
|
|
# freezing_province_kill_requests_total_weight = 0
|
|
# chain_total_wage = 0
|
|
# chain_total_weight = 0
|
|
# free_bars_live_total_wage = 0
|
|
# free_bars_live_total_weight = 0
|
|
# free_bars_carcases_total_wage = 0
|
|
# free_bars_carcases_total_weight = 0
|
|
# role = self.context.get('request').GET['role']
|
|
# user = SystemUserProfile.objects.get(user=self.context.get('request').user)
|
|
# if role == 'KillHouse':
|
|
# kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).first()
|
|
# 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,
|
|
# )
|
|
# freezing_province_kill_requests = province_kill_requests.filter(
|
|
# province_request__poultry_request__freezing=True)
|
|
#
|
|
# kill_house_requests = KillHouseRequest.objects.filter(
|
|
# Q(Q(killhouse_user=kill_house) & Q(killer=kill_house)) | Q(
|
|
# Q(killhouse_user=kill_house) & Q(killer__isnull=True)) | Q(
|
|
# Q(killhouse_user=kill_house) | Q(killer=kill_house)), archive_wage=False,
|
|
# trash=False
|
|
# )
|
|
# freezing_kill_house_requests = kill_house_requests.filter(
|
|
# province_kill_request__province_request__poultry_request__freezing=True)
|
|
#
|
|
# # kill_house_requests = KillHouseRequest.objects.filter(
|
|
# # killer=kill_house, archive_wage=False,killer__isnull=False,
|
|
# # trash=False
|
|
# # ).exclude(
|
|
# # province_kill_request__in=province_kill_requests
|
|
# # )
|
|
#
|
|
# free_bars = KillHouseFreeBarInformation.objects.filter(kill_house=kill_house, archive_wage=False,
|
|
# trash=False)
|
|
# free_bars_live = free_bars.filter(buy_type='live', trash=False)
|
|
# free_bars_carcases = free_bars.filter(buy_type='carcass', trash=False)
|
|
# province_kill_requests_total_wage = \
|
|
# province_kill_requests.filter(province_request__poultry_request__freezing=False).aggregate(
|
|
# total=Sum('total_wage_amount'))[
|
|
# 'total'] or 0
|
|
# freezing_province_kill_request_total_wage = \
|
|
# freezing_province_kill_requests.aggregate(total=Sum('total_wage_amount'))['total'] or 0
|
|
#
|
|
# total_wage += province_kill_requests_total_wage + freezing_province_kill_request_total_wage
|
|
# province_kill_requests_total_weight = \
|
|
# province_kill_requests.filter(province_request__poultry_request__freezing=False).aggregate(
|
|
# total=Sum('total_killed_weight'))[
|
|
# 'total'] or 0
|
|
# freezing_province_kill_request_total_weight = \
|
|
# freezing_province_kill_requests.aggregate(total=Sum('total_killed_weight'))['total'] or 0
|
|
# total_weight += province_kill_requests_total_weight + freezing_province_kill_request_total_weight
|
|
# kill_house_reqest_total_wage = \
|
|
# kill_house_requests.filter(
|
|
# province_kill_request__province_request__poultry_request__freezing=False).aggregate(
|
|
# total=Sum(F('accepted_real_weight') * F('province_kill_request__wage')))[
|
|
# 'total'] or 0
|
|
# freezing_kill_house_reqest_total_wage = \
|
|
# freezing_kill_house_requests.aggregate(
|
|
# total=Sum(F('accepted_real_weight') * F('province_kill_request__wage')))[
|
|
# 'total'] or 0
|
|
# total_wage += kill_house_reqest_total_wage + freezing_kill_house_reqest_total_wage
|
|
#
|
|
# kill_house_reqest_total_weight = kill_house_requests.filter(
|
|
# province_kill_request__province_request__poultry_request__freezing=False).aggregate(
|
|
# total=Sum('accepted_real_weight'))[
|
|
# 'total'] or 0
|
|
# freezing_kill_house_reqest_total_weight = \
|
|
# freezing_kill_house_requests.aggregate(total=Sum('accepted_real_weight'))[
|
|
# 'total'] or 0
|
|
#
|
|
# total_weight += kill_house_reqest_total_weight + freezing_kill_house_reqest_total_weight
|
|
#
|
|
# free_bars_live_total_wage = free_bars_live.aggregate(total=Sum('total_wage_amount'))[
|
|
# 'total'] or 0
|
|
# total_wage += free_bars_live_total_wage
|
|
# free_bars_live_total_weight = free_bars_live.aggregate(total=Sum('live_weight'))[
|
|
# 'total'] or 0
|
|
# total_weight += free_bars_live_total_weight
|
|
# free_bars_carcases_total_wage = free_bars_carcases.aggregate(total=Sum('total_wage_amount'))[
|
|
# 'total'] or 0
|
|
# total_wage += free_bars_carcases_total_wage
|
|
# free_bars_carcases_total_weight = free_bars_carcases.aggregate(total=Sum('weight_of_carcasses'))[
|
|
# 'total'] or 0
|
|
# total_weight += free_bars_carcases_total_weight
|
|
#
|
|
# 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
|
|
#
|
|
# return {
|
|
# "total_weight": total_weight,
|
|
# "total_wage": total_wage,
|
|
# "total_paid_wage": total_paid_wage,
|
|
# "total_unpaid_wage": total_wage - total_paid_wage,
|
|
# "province_kill_requests_total_wage": province_kill_requests_total_wage + kill_house_reqest_total_wage,
|
|
# "province_kill_requests_total_weight": province_kill_requests_total_weight + kill_house_reqest_total_weight,
|
|
# "freezing_province_kill_requests_total_wage": freezing_province_kill_request_total_wage + freezing_kill_house_reqest_total_wage,
|
|
# "freezing_province_kill_requests_total_weight": freezing_province_kill_request_total_weight + freezing_kill_house_reqest_total_weight,
|
|
# "free_bars_live_total_wage": free_bars_live_total_wage,
|
|
# "free_bars_live_total_weight": free_bars_live_total_weight,
|
|
# "free_bars_carcases_total_wage": free_bars_carcases_total_wage,
|
|
# "free_bars_carcases_total_weight": free_bars_carcases_total_weight,
|
|
# }
|
|
# elif role == 'ChainCompany':
|
|
# chain_company = ChainCompany.objects.get(user=user, trash=False)
|
|
# chain_allocations = ChainAllocation.objects.filter(chain_company=chain_company, state='accepted',
|
|
# trash=False)
|
|
# chain_allocations_total_wage = chain_allocations.aggregate(total=Sum('total_wage_amount'))[
|
|
# 'total'] or 0
|
|
# total_wage += chain_allocations_total_wage
|
|
# chain_allocations_total_weight = chain_allocations.aggregate(total=Sum('weight'))[
|
|
# 'total'] or 0
|
|
# total_weight += chain_allocations_total_weight
|
|
#
|
|
# chain_company_transactions = InternalTransaction.objects.filter(chain_company=chain_company,
|
|
# status='completed', trash=False)
|
|
# total_paid_wage += chain_company_transactions.aggregate(total=Sum('amount'))[
|
|
# 'total'] or 0
|
|
#
|
|
# return {
|
|
# "total_weight": total_weight,
|
|
# "total_wage": total_wage,
|
|
# "chain_allocations_total_wage": chain_allocations_total_wage,
|
|
# "chain_allocations_total_weight": chain_allocations_total_weight,
|
|
# "total_paid_wage": total_paid_wage,
|
|
# "total_unpaid_wage": total_wage - total_paid_wage
|
|
# }
|
|
#
|
|
# else:
|
|
#
|
|
# if role == 'ProvinceOperator':
|
|
# type = 'union_share'
|
|
# share_type = 'union_share'
|
|
# out_poultry_requests = PoultryRequest.objects.filter(out=True, trash=False, wage_pay=True,
|
|
# union_share__gt=0)
|
|
# poultry_request_out_total_weight = \
|
|
# out_poultry_requests.aggregate(total=Sum(F('quantity') * F('Index_weight')))[
|
|
# 'total'] or 0
|
|
# poultry_request_out_total_wage = out_poultry_requests.aggregate(
|
|
# total=Sum(
|
|
# ((F('quantity') * F('Index_weight')) * F('wage')) * (
|
|
# F('union_share_percent') / 100)))[
|
|
# 'total'] or 0
|
|
# province_kill_requests = ProvinceKillRequest.objects.filter(
|
|
# state__in=('pending', 'accepted'), trash=False,
|
|
# first_car_allocated_quantity=0,
|
|
# return_to_province=False, archive_wage=False, union_share__gt=0)
|
|
# freezing_province_kill_requests = province_kill_requests.filter(
|
|
# province_request__poultry_request__freezing=True)
|
|
# kill_house_requests = KillHouseRequest.objects.filter(trash=False, archive_wage=False,
|
|
# province_kill_request__union_share__gt=0)
|
|
# freezing_kill_house_requests = kill_house_requests.filter(
|
|
# province_kill_request__province_request__poultry_request__freezing=True)
|
|
#
|
|
# chain_allocations = ChainAllocation.objects.filter(union_share__gt=0, state='accepted', trash=False)
|
|
# free_bars = KillHouseFreeBarInformation.objects.filter(union_share__gt=0, archive_wage=False,
|
|
# trash=False)
|
|
#
|
|
# province_kill_requests_total_weight = \
|
|
# province_kill_requests.aggregate(
|
|
# total=Sum('total_killed_weight'))[
|
|
# 'total'] or 0
|
|
# freezing_province_kill_requests_total_weight = \
|
|
# freezing_province_kill_requests.aggregate(
|
|
# total=Sum('total_killed_weight'))[
|
|
# 'total'] or 0
|
|
# province_kill_requests_total_weight += \
|
|
# kill_house_requests.filter(
|
|
# province_kill_request__province_request__poultry_request__freezing=False).aggregate(
|
|
# total=Sum('accepted_real_weight'))[
|
|
# 'total'] or 0
|
|
#
|
|
# freezing_province_kill_requests_total_weight += \
|
|
# freezing_kill_house_requests.aggregate(
|
|
# total=Sum('accepted_real_weight'))[
|
|
# 'total'] or 0
|
|
#
|
|
# total_weight += province_kill_requests_total_weight + freezing_province_kill_requests_total_weight + poultry_request_out_total_weight
|
|
#
|
|
# province_kill_requests_total_wage = \
|
|
# province_kill_requests.filter(
|
|
# province_request__poultry_request__freezing=False).aggregate(
|
|
# total=Sum('union_share'))[
|
|
# 'total'] or 0
|
|
# province_kill_requests_total_wage += \
|
|
# kill_house_requests.filter(
|
|
# province_kill_request__province_request__poultry_request__freezing=False).aggregate(
|
|
# total=Sum(
|
|
# F('accepted_real_weight') * F('province_kill_request__wage') * (
|
|
# F('province_kill_request__union_share_percent') / 100)))[
|
|
# 'total'] or 0
|
|
#
|
|
# freezing_province_kill_requests_total_wage = \
|
|
# freezing_province_kill_requests.aggregate(total=Sum('union_share'))[
|
|
# 'total'] or 0
|
|
# freezing_province_kill_requests_total_wage += \
|
|
# freezing_kill_house_requests.aggregate(total=Sum(
|
|
# F('accepted_real_weight') * F('province_kill_request__wage') * (
|
|
# F('province_kill_request__union_share_percent') / 100)))[
|
|
# 'total'] or 0
|
|
# total_wage += province_kill_requests_total_wage + freezing_province_kill_requests_total_wage + poultry_request_out_total_wage
|
|
#
|
|
# free_bars_live = free_bars.filter(buy_type='live', trash=False)
|
|
# free_bars_carcases = free_bars.filter(buy_type='carcass', trash=False)
|
|
#
|
|
# chain_allocations_total_wage = chain_allocations.aggregate(total=Sum(type))[
|
|
# 'total'] or 0
|
|
# total_wage += chain_allocations_total_wage
|
|
# chain_allocations_total_weight = chain_allocations.aggregate(total=Sum('weight'))[
|
|
# 'total'] or 0
|
|
# total_weight += chain_allocations_total_weight
|
|
# free_bars_live_total_wage = free_bars_live.aggregate(total=Sum(type))[
|
|
# 'total'] or 0
|
|
# total_wage += free_bars_live_total_wage
|
|
# free_bars_live_total_weight = free_bars_live.aggregate(total=Sum('live_weight'))[
|
|
# 'total'] or 0
|
|
# total_weight += free_bars_live_total_weight
|
|
# free_bars_carcases_total_wage = free_bars_carcases.aggregate(total=Sum(type))[
|
|
# 'total'] or 0
|
|
# total_wage += free_bars_carcases_total_wage
|
|
# free_bars_carcases_total_weight = free_bars_carcases.aggregate(total=Sum('weight_of_carcasses'))[
|
|
# 'total'] or 0
|
|
# total_weight += free_bars_carcases_total_weight
|
|
# slaughter_transactions = InternalTransaction.objects.filter(payer_type='kill_house', status='completed',
|
|
# union_share__gt=0,
|
|
# trash=False)
|
|
#
|
|
# total_paid_wage += slaughter_transactions.aggregate(total=Sum(share_type))[
|
|
# 'total'] or 0
|
|
# chain_company_transactions = InternalTransaction.objects.filter(payer_type='chain_company',
|
|
# status='completed', union_share__gt=0,
|
|
# trash=False)
|
|
# total_paid_wage += chain_company_transactions.aggregate(total=Sum(share_type))[
|
|
# 'total'] or 0
|
|
#
|
|
#
|
|
#
|
|
# elif role == 'Guilds':
|
|
# type = 'guilds_share'
|
|
# share_type = 'guilds_share'
|
|
# out_poultry_requests = PoultryRequest.objects.filter(out=True, trash=False, wage_pay=True,
|
|
# guilds_share__gt=0)
|
|
# poultry_request_out_total_weight = \
|
|
# out_poultry_requests.aggregate(total=Sum(F('quantity') * F('Index_weight')))[
|
|
# 'total'] or 0
|
|
# poultry_request_out_total_wage = out_poultry_requests.aggregate(
|
|
# total=Sum(
|
|
# ((F('quantity') * F('Index_weight')) * F('wage')) * (
|
|
# F('guilds_share_percent') / 100)))[
|
|
# 'total'] or 0
|
|
# province_kill_requests = ProvinceKillRequest.objects.filter(
|
|
# state__in=('pending', 'accepted'), trash=False,
|
|
# first_car_allocated_quantity=0,
|
|
#
|
|
# return_to_province=False, archive_wage=False, guilds_share__gt=0)
|
|
# freezing_province_kill_requests = province_kill_requests.filter(
|
|
# province_request__poultry_request__freezing=True)
|
|
#
|
|
# kill_house_requests = KillHouseRequest.objects.filter(trash=False, archive_wage=False,
|
|
# province_kill_request__guilds_share__gt=0)
|
|
# freezing_kill_house_requests = kill_house_requests.filter(
|
|
# province_kill_request__province_request__poultry_request__freezing=True)
|
|
#
|
|
# chain_allocations = ChainAllocation.objects.filter(guilds_share__gt=0, state='accepted', trash=False)
|
|
# free_bars = KillHouseFreeBarInformation.objects.filter(guilds_share__gt=0, archive_wage=False,
|
|
# trash=False)
|
|
#
|
|
# province_kill_requests_total_weight = \
|
|
# province_kill_requests.filter(
|
|
# province_request__poultry_request__freezing=False).aggregate(
|
|
# total=Sum('total_killed_weight'))[
|
|
# 'total'] or 0
|
|
# freezing_province_kill_requests_total_weight = \
|
|
# freezing_province_kill_requests.aggregate(
|
|
# total=Sum('total_killed_weight'))[
|
|
# 'total'] or 0
|
|
# province_kill_requests_total_weight += \
|
|
# kill_house_requests.filter(
|
|
# province_kill_request__province_request__poultry_request__freezing=False).aggregate(
|
|
# total=Sum('accepted_real_weight'))[
|
|
# 'total'] or 0
|
|
#
|
|
# freezing_province_kill_requests_total_weight += \
|
|
# freezing_kill_house_requests.aggregate(
|
|
# total=Sum('accepted_real_weight'))[
|
|
# 'total'] or 0
|
|
#
|
|
# total_weight += province_kill_requests_total_weight + freezing_province_kill_requests_total_weight + poultry_request_out_total_weight
|
|
#
|
|
# province_kill_requests_total_wage = \
|
|
# province_kill_requests.filter(
|
|
# province_request__poultry_request__freezing=False).aggregate(
|
|
# total=Sum('union_share'))[
|
|
# 'total'] or 0
|
|
# province_kill_requests_total_wage += \
|
|
# kill_house_requests.filter(
|
|
# province_kill_request__province_request__poultry_request__freezing=False).aggregate(
|
|
# total=Sum(
|
|
# F('accepted_real_weight') * F('province_kill_request__wage') * (
|
|
# F('province_kill_request__guilds_share_percent') / 100)))[
|
|
# 'total'] or 0
|
|
#
|
|
# freezing_province_kill_requests_total_wage = \
|
|
# freezing_province_kill_requests.aggregate(total=Sum('guilds_share'))[
|
|
# 'total'] or 0
|
|
# freezing_province_kill_requests_total_wage += \
|
|
# freezing_kill_house_requests.aggregate(total=Sum(
|
|
# F('accepted_real_weight') * F('province_kill_request__wage') * (
|
|
# F('province_kill_request__guilds_share_percent') / 100)))[
|
|
# 'total'] or 0
|
|
# total_wage += province_kill_requests_total_wage + freezing_province_kill_requests_total_wage + poultry_request_out_total_wage
|
|
#
|
|
# free_bars_live = free_bars.filter(buy_type='live', trash=False)
|
|
# free_bars_carcases = free_bars.filter(buy_type='carcass', trash=False)
|
|
#
|
|
# chain_allocations_total_wage = chain_allocations.aggregate(total=Sum(type))[
|
|
# 'total'] or 0
|
|
# total_wage += chain_allocations_total_wage
|
|
# chain_allocations_total_weight = chain_allocations.aggregate(total=Sum('weight'))[
|
|
# 'total'] or 0
|
|
# total_weight += chain_allocations_total_weight
|
|
# free_bars_live_total_wage = free_bars_live.aggregate(total=Sum(type))[
|
|
# 'total'] or 0
|
|
# total_wage += free_bars_live_total_wage
|
|
# free_bars_live_total_weight = free_bars_live.aggregate(total=Sum('live_weight'))[
|
|
# 'total'] or 0
|
|
# total_weight += free_bars_live_total_weight
|
|
# free_bars_carcases_total_wage = free_bars_carcases.aggregate(total=Sum(type))[
|
|
# 'total'] or 0
|
|
# total_wage += free_bars_carcases_total_wage
|
|
# free_bars_carcases_total_weight = free_bars_carcases.aggregate(total=Sum('weight_of_carcasses'))[
|
|
# 'total'] or 0
|
|
# total_weight += free_bars_carcases_total_weight
|
|
# slaughter_transactions = InternalTransaction.objects.filter(payer_type='kill_house', status='completed',
|
|
# guilds_share__gt=0,
|
|
# trash=False)
|
|
#
|
|
# total_paid_wage += slaughter_transactions.aggregate(total=Sum(share_type))[
|
|
# 'total'] or 0
|
|
# chain_company_transactions = InternalTransaction.objects.filter(payer_type='chain_company',
|
|
# status='completed', guilds_share__gt=0,
|
|
# trash=False)
|
|
# total_paid_wage += chain_company_transactions.aggregate(total=Sum(share_type))[
|
|
# 'total'] or 0
|
|
#
|
|
#
|
|
# elif role == 'Company':
|
|
# type = 'company_share'
|
|
# share_type = 'company_share'
|
|
# out_poultry_requests = PoultryRequest.objects.filter(out=True, trash=False, wage_pay=True,
|
|
# company_share__gt=0)
|
|
# poultry_request_out_total_weight = \
|
|
# out_poultry_requests.aggregate(total=Sum(F('quantity') * F('Index_weight')))[
|
|
# 'total'] or 0
|
|
# poultry_request_out_total_wage = out_poultry_requests.aggregate(
|
|
# total=Sum(
|
|
# ((F('quantity') * F('Index_weight')) * F('wage')) * (
|
|
# F('company_share_percent') / 100)))[
|
|
# 'total'] or 0
|
|
# province_kill_requests = ProvinceKillRequest.objects.filter(
|
|
# state__in=('pending', 'accepted'), trash=False,
|
|
# first_car_allocated_quantity=0,
|
|
# return_to_province=False, archive_wage=False, company_share__gt=0)
|
|
# freezing_province_kill_requests = province_kill_requests.filter(
|
|
# province_request__poultry_request__freezing=True)
|
|
#
|
|
# kill_house_requests = KillHouseRequest.objects.filter(trash=False, archive_wage=False,
|
|
# province_kill_request__company_share__gt=0)
|
|
# freezing_kill_house_requests = kill_house_requests.filter(
|
|
# province_kill_request__province_request__poultry_request__freezing=True)
|
|
#
|
|
# chain_allocations = ChainAllocation.objects.filter(company_share__gt=0, state='accepted', trash=False)
|
|
# free_bars = KillHouseFreeBarInformation.objects.filter(company_share__gt=0, archive_wage=False,
|
|
# trash=False)
|
|
#
|
|
# province_kill_requests_total_weight = \
|
|
# province_kill_requests.filter(
|
|
# province_request__poultry_request__freezing=False).aggregate(
|
|
# total=Sum('total_killed_weight'))[
|
|
# 'total'] or 0
|
|
# freezing_province_kill_requests_total_weight = \
|
|
# freezing_province_kill_requests.aggregate(
|
|
# total=Sum('total_killed_weight'))[
|
|
# 'total'] or 0
|
|
# province_kill_requests_total_weight += \
|
|
# kill_house_requests.filter(
|
|
# province_kill_request__province_request__poultry_request__freezing=False).aggregate(
|
|
# total=Sum('accepted_real_weight'))[
|
|
# 'total'] or 0
|
|
#
|
|
# freezing_province_kill_requests_total_weight += \
|
|
# freezing_kill_house_requests.aggregate(
|
|
# total=Sum('accepted_real_weight'))[
|
|
# 'total'] or 0
|
|
#
|
|
# total_weight += province_kill_requests_total_weight + freezing_province_kill_requests_total_weight + poultry_request_out_total_weight
|
|
#
|
|
# province_kill_requests_total_wage = \
|
|
# province_kill_requests.filter(
|
|
# province_request__poultry_request__freezing=False).aggregate(
|
|
# total=Sum('union_share'))[
|
|
# 'total'] or 0
|
|
# province_kill_requests_total_wage += \
|
|
# kill_house_requests.filter(
|
|
# province_kill_request__province_request__poultry_request__freezing=False).aggregate(
|
|
# total=Sum(
|
|
# F('accepted_real_weight') * F('province_kill_request__wage') * (
|
|
# F('province_kill_request__company_share_percent') / 100)))[
|
|
# 'total'] or 0
|
|
#
|
|
# freezing_province_kill_requests_total_wage = \
|
|
# freezing_province_kill_requests.aggregate(total=Sum('company_share'))[
|
|
# 'total'] or 0
|
|
# freezing_province_kill_requests_total_wage += \
|
|
# freezing_kill_house_requests.aggregate(total=Sum(
|
|
# F('accepted_real_weight') * F('province_kill_request__wage') * (
|
|
# F('province_kill_request__company_share_percent') / 100)))[
|
|
# 'total'] or 0
|
|
# total_wage += province_kill_requests_total_wage + freezing_province_kill_requests_total_wage + poultry_request_out_total_wage
|
|
#
|
|
# free_bars_live = free_bars.filter(buy_type='live', trash=False)
|
|
# free_bars_carcases = free_bars.filter(buy_type='carcass', trash=False)
|
|
#
|
|
# chain_allocations_total_wage = chain_allocations.aggregate(total=Sum(type))[
|
|
# 'total'] or 0
|
|
# total_wage += chain_allocations_total_wage
|
|
# chain_allocations_total_weight = chain_allocations.aggregate(total=Sum('weight'))[
|
|
# 'total'] or 0
|
|
# total_weight += chain_allocations_total_weight
|
|
# free_bars_live_total_wage = free_bars_live.aggregate(total=Sum(type))[
|
|
# 'total'] or 0
|
|
# total_wage += free_bars_live_total_wage
|
|
# free_bars_live_total_weight = free_bars_live.aggregate(total=Sum('live_weight'))[
|
|
# 'total'] or 0
|
|
# total_weight += free_bars_live_total_weight
|
|
# free_bars_carcases_total_wage = free_bars_carcases.aggregate(total=Sum(type))[
|
|
# 'total'] or 0
|
|
# total_wage += free_bars_carcases_total_wage
|
|
# free_bars_carcases_total_weight = free_bars_carcases.aggregate(total=Sum('weight_of_carcasses'))[
|
|
# 'total'] or 0
|
|
# total_weight += free_bars_carcases_total_weight
|
|
# slaughter_transactions = InternalTransaction.objects.filter(payer_type='kill_house', status='completed',
|
|
# company_share__gt=0,
|
|
# trash=False)
|
|
#
|
|
# total_paid_wage += slaughter_transactions.aggregate(total=Sum(share_type))[
|
|
# 'total'] or 0
|
|
# chain_company_transactions = InternalTransaction.objects.filter(payer_type='chain_company',
|
|
# status='completed', company_share__gt=0,
|
|
# trash=False)
|
|
# total_paid_wage += chain_company_transactions.aggregate(total=Sum(share_type))[
|
|
# 'total'] or 0
|
|
#
|
|
#
|
|
# else:
|
|
# type = 'total_wage_amount'
|
|
# share_type = 'amount'
|
|
# out_poultry_requests = PoultryRequest.objects.filter(out=True, trash=False, wage_pay=True)
|
|
# poultry_request_out_total_weight = \
|
|
# out_poultry_requests.aggregate(total=Sum(F('quantity') * F('Index_weight')))[
|
|
# 'total'] or 0
|
|
# poultry_request_out_total_wage = out_poultry_requests.aggregate(
|
|
# total=Sum(
|
|
# (F('quantity') * F('Index_weight')) * F('wage')))[
|
|
# 'total'] or 0
|
|
# province_kill_requests = ProvinceKillRequest.objects.filter(
|
|
# state__in=('pending', 'accepted'), trash=False, archive_wage=False,
|
|
# first_car_allocated_quantity=0,
|
|
# return_to_province=False)
|
|
# freezing_province_kill_requests = province_kill_requests.filter(
|
|
# province_request__poultry_request__freezing=True)
|
|
#
|
|
# kill_house_requests = KillHouseRequest.objects.filter(trash=False, archive_wage=False)
|
|
# freezing_kill_house_requests = kill_house_requests.filter(
|
|
# province_kill_request__province_request__poultry_request__freezing=True)
|
|
#
|
|
# chain_allocations = ChainAllocation.objects.filter(trash=False, state='accepted')
|
|
# free_bars = KillHouseFreeBarInformation.objects.filter(archive_wage=False, trash=False)
|
|
# total_slaughter_transactions = InternalTransaction.objects.filter(payer_type='kill_house',
|
|
# status='completed',
|
|
# trash=False)
|
|
# total_chain_company_transactions = InternalTransaction.objects.filter(payer_type='chain_company',
|
|
# status='completed', trash=False)
|
|
#
|
|
# province_kill_requests_total_weight = \
|
|
# province_kill_requests.filter(
|
|
# province_request__poultry_request__freezing=False).aggregate(
|
|
# total=Sum('total_killed_weight'))[
|
|
# 'total'] or 0
|
|
# freezing_province_kill_requests_total_weight = \
|
|
# freezing_province_kill_requests.aggregate(
|
|
# total=Sum('total_killed_weight'))[
|
|
# 'total'] or 0
|
|
# province_kill_requests_total_weight += \
|
|
# kill_house_requests.filter(
|
|
# province_kill_request__province_request__poultry_request__freezing=False).aggregate(
|
|
# total=Sum('accepted_real_weight'))[
|
|
# 'total'] or 0
|
|
#
|
|
# freezing_province_kill_requests_total_weight += \
|
|
# freezing_kill_house_requests.aggregate(
|
|
# total=Sum('accepted_real_weight'))[
|
|
# 'total'] or 0
|
|
#
|
|
# total_weight += province_kill_requests_total_weight + freezing_province_kill_requests_total_weight + poultry_request_out_total_weight
|
|
#
|
|
# province_kill_requests_total_wage = \
|
|
# province_kill_requests.filter(
|
|
# province_request__poultry_request__freezing=False).aggregate(
|
|
# total=Sum('union_share'))[
|
|
# 'total'] or 0
|
|
# province_kill_requests_total_wage += \
|
|
# kill_house_requests.filter(
|
|
# province_kill_request__province_request__poultry_request__freezing=False).aggregate(
|
|
# total=Sum(F('accepted_real_weight') * F('province_kill_request__wage')))[
|
|
# 'total'] or 0
|
|
#
|
|
# freezing_province_kill_requests_total_wage = \
|
|
# freezing_province_kill_requests.aggregate(total=Sum(type))[
|
|
# 'total'] or 0
|
|
# freezing_province_kill_requests_total_wage += \
|
|
# freezing_kill_house_requests.aggregate(
|
|
# total=Sum(F('accepted_real_weight') * F('province_kill_request__wage')))[
|
|
# 'total'] or 0
|
|
# total_wage += province_kill_requests_total_wage + freezing_province_kill_requests_total_wage + poultry_request_out_total_wage
|
|
#
|
|
# free_bars_live = free_bars.filter(buy_type='live', trash=False)
|
|
# free_bars_carcases = free_bars.filter(buy_type='carcass', trash=False)
|
|
#
|
|
# chain_allocations_total_wage = chain_allocations.aggregate(total=Sum(type))[
|
|
# 'total'] or 0
|
|
# total_wage += chain_allocations_total_wage
|
|
# chain_allocations_total_weight = chain_allocations.aggregate(total=Sum('weight'))[
|
|
# 'total'] or 0
|
|
# total_weight += chain_allocations_total_weight
|
|
# free_bars_live_total_wage = free_bars_live.aggregate(total=Sum(type))[
|
|
# 'total'] or 0
|
|
# total_wage += free_bars_live_total_wage
|
|
# free_bars_live_total_weight = free_bars_live.aggregate(total=Sum('live_weight'))[
|
|
# 'total'] or 0
|
|
# total_weight += free_bars_live_total_weight
|
|
# free_bars_carcases_total_wage = free_bars_carcases.aggregate(total=Sum(type))[
|
|
# 'total'] or 0
|
|
# total_wage += free_bars_carcases_total_wage
|
|
# free_bars_carcases_total_weight = free_bars_carcases.aggregate(total=Sum('weight_of_carcasses'))[
|
|
# 'total'] or 0
|
|
# total_weight += free_bars_carcases_total_weight
|
|
# slaughter_transactions = InternalTransaction.objects.filter(payer_type='kill_house', status='completed',
|
|
# trash=False)
|
|
#
|
|
# total_paid_wage += slaughter_transactions.aggregate(total=Sum(share_type))[
|
|
# 'total'] or 0
|
|
# chain_company_transactions = InternalTransaction.objects.filter(payer_type='chain_company',
|
|
# status='completed',
|
|
# trash=False)
|
|
# total_paid_wage += chain_company_transactions.aggregate(total=Sum(share_type))[
|
|
# 'total'] or 0
|
|
#
|
|
# union_poultry_request_out_total_weight = \
|
|
# out_poultry_requests.filter(union_share__gt=0).aggregate(total=Sum(F('quantity') * F('Index_weight')))[
|
|
# 'total'] or 0
|
|
# union_poultry_request_out_total_wage = out_poultry_requests.aggregate(
|
|
# total=Sum(
|
|
# ((F('quantity') * F('Index_weight')) * F('wage')) * (
|
|
# F('union_share_percent') / 100)))[
|
|
# 'total'] or 0
|
|
#
|
|
# union_province_kill_request_total_weight = \
|
|
# province_kill_requests.filter(union_share__gt=0,
|
|
# province_request__poultry_request__freezing=False).aggregate(
|
|
# total=Sum('total_killed_weight'))[
|
|
# 'total'] or 0
|
|
# freezing_union_province_kill_request_total_weight = \
|
|
# freezing_province_kill_requests.filter(union_share__gt=0).aggregate(
|
|
# total=Sum('total_killed_weight'))[
|
|
# 'total'] or 0
|
|
# union_province_kill_request_total_weight += \
|
|
# kill_house_requests.filter(province_kill_request__union_share__gt=0,
|
|
# province_kill_request__province_request__poultry_request__freezing=False).aggregate(
|
|
# total=Sum('accepted_real_weight'))[
|
|
# 'total'] or 0
|
|
#
|
|
# freezing_union_province_kill_request_total_weight += \
|
|
# freezing_kill_house_requests.filter(province_kill_request__union_share__gt=0).aggregate(
|
|
# total=Sum('accepted_real_weight'))[
|
|
# 'total'] or 0
|
|
#
|
|
# union_province_kill_request_total_wage = \
|
|
# province_kill_requests.filter(union_share__gt=0,
|
|
# province_request__poultry_request__freezing=False).aggregate(
|
|
# total=Sum('union_share'))[
|
|
# 'total'] or 0
|
|
# union_province_kill_request_total_wage += \
|
|
# kill_house_requests.filter(province_kill_request__union_share__gt=0,
|
|
# province_kill_request__province_request__poultry_request__freezing=False).aggregate(
|
|
# total=Sum(
|
|
# F('accepted_real_weight') * F('province_kill_request__wage') * (
|
|
# F('province_kill_request__union_share_percent') / 100)))[
|
|
# 'total'] or 0
|
|
#
|
|
# freezing_union_province_kill_request_total_wage = \
|
|
# freezing_province_kill_requests.filter(union_share__gt=0).aggregate(total=Sum('union_share'))[
|
|
# 'total'] or 0
|
|
# freezing_union_province_kill_request_total_wage += \
|
|
# freezing_kill_house_requests.filter(province_kill_request__union_share__gt=0).aggregate(total=Sum(
|
|
# F('accepted_real_weight') * F('province_kill_request__wage') * (
|
|
# F('province_kill_request__union_share_percent') / 100)))[
|
|
# 'total'] or 0
|
|
# union_chain_allocation_total_weight = \
|
|
# chain_allocations.filter(union_share__gt=0).aggregate(total=Sum('weight'))[
|
|
# 'total'] or 0
|
|
# union_chain_allocation_total_wage = \
|
|
# chain_allocations.filter(union_share__gt=0).aggregate(total=Sum('union_share'))[
|
|
# 'total'] or 0
|
|
# union_kill_house_free_live_bar_total_weight = \
|
|
# free_bars.filter(buy_type='live', union_share__gt=0).aggregate(total=Sum('live_weight'))[
|
|
# 'total'] or 0
|
|
# union_kill_house_free_live_bar_total_wage = \
|
|
# free_bars.filter(buy_type='live', union_share__gt=0).aggregate(total=Sum('union_share'))[
|
|
# 'total'] or 0
|
|
#
|
|
# union_kill_house_free_carcases_bar_total_weight = \
|
|
# free_bars.filter(buy_type='carcass', union_share__gt=0).aggregate(total=Sum('weight_of_carcasses'))[
|
|
# 'total'] or 0
|
|
# union_kill_house_free_carcases_bar_total_wage = \
|
|
# free_bars.filter(buy_type='carcass', union_share__gt=0).aggregate(total=Sum('union_share'))[
|
|
# 'total'] or 0
|
|
# union_total_paid_wage += \
|
|
# total_slaughter_transactions.filter(union_share__gt=0).aggregate(total=Sum('union_share'))[
|
|
# 'total'] or 0
|
|
# union_total_paid_wage += \
|
|
# total_chain_company_transactions.filter(union_share__gt=0).aggregate(total=Sum('union_share'))[
|
|
# 'total'] or 0
|
|
# union_total_weight = union_province_kill_request_total_weight + freezing_union_province_kill_request_total_weight + union_chain_allocation_total_weight + union_kill_house_free_live_bar_total_weight + union_kill_house_free_carcases_bar_total_weight + union_poultry_request_out_total_weight
|
|
# union_total_wage = union_province_kill_request_total_wage + freezing_union_province_kill_request_total_wage + union_chain_allocation_total_wage + union_kill_house_free_live_bar_total_wage + union_kill_house_free_carcases_bar_total_wage
|
|
# union_total_unpaid_wage = union_total_wage - (
|
|
# union_total_paid_wage + union_poultry_request_out_total_wage)
|
|
#
|
|
# company_poultry_request_out_total_weight = \
|
|
# out_poultry_requests.filter(company_share__gt=0).aggregate(
|
|
# total=Sum(F('quantity') * F('Index_weight')))[
|
|
# 'total'] or 0
|
|
# company_poultry_request_out_total_wage = out_poultry_requests.filter(company_share__gt=0).aggregate(
|
|
# total=Sum(
|
|
# ((F('quantity') * F('Index_weight')) * F('wage')) * (
|
|
# F('company_share_percent') / 100)))[
|
|
# 'total'] or 0
|
|
#
|
|
# company_province_kill_request_total_weight = \
|
|
# province_kill_requests.filter(company_share__gt=0,
|
|
# province_request__poultry_request__freezing=False).aggregate(
|
|
# total=Sum('total_killed_weight'))[
|
|
# 'total'] or 0
|
|
# company_province_kill_request_total_weight += \
|
|
# kill_house_requests.filter(province_kill_request__company_share__gt=0,
|
|
# province_kill_request__province_request__poultry_request__freezing=False).aggregate(
|
|
# total=Sum('accepted_real_weight'))[
|
|
# 'total'] or 0
|
|
# freezing_company_province_kill_request_total_weight = \
|
|
# freezing_province_kill_requests.filter(company_share__gt=0).aggregate(
|
|
# total=Sum('total_killed_weight'))[
|
|
# 'total'] or 0
|
|
# freezing_company_province_kill_request_total_weight += \
|
|
# freezing_kill_house_requests.filter(province_kill_request__company_share__gt=0).aggregate(
|
|
# total=Sum('accepted_real_weight'))[
|
|
# 'total'] or 0
|
|
# company_province_kill_request_total_wage = \
|
|
# province_kill_requests.filter(company_share__gt=0,
|
|
# province_request__poultry_request__freezing=False).aggregate(
|
|
# total=Sum('company_share'))[
|
|
# 'total'] or 0
|
|
# company_province_kill_request_total_wage += \
|
|
# kill_house_requests.filter(province_kill_request__company_share__gt=0,
|
|
# province_kill_request__province_request__poultry_request__freezing=False).aggregate(
|
|
# total=Sum(
|
|
# F('accepted_real_weight') * F('province_kill_request__wage') * (
|
|
# F('province_kill_request__company_share_percent') / 100)))[
|
|
# 'total'] or 0
|
|
# freezing_company_province_kill_request_total_wage = \
|
|
# freezing_province_kill_requests.filter(company_share__gt=0).aggregate(total=Sum('company_share'))[
|
|
# 'total'] or 0
|
|
# freezing_company_province_kill_request_total_wage += \
|
|
# freezing_kill_house_requests.filter(province_kill_request__company_share__gt=0).aggregate(total=Sum(
|
|
# F('accepted_real_weight') * F('province_kill_request__wage') * (
|
|
# F('province_kill_request__company_share_percent') / 100)))[
|
|
# 'total'] or 0
|
|
# company_chain_allocation_total_weight = \
|
|
# chain_allocations.filter(company_share__gt=0).aggregate(total=Sum('weight'))[
|
|
# 'total'] or 0
|
|
# company_chain_allocation_total_wage = \
|
|
# chain_allocations.filter(company_share__gt=0).aggregate(total=Sum('company_share'))[
|
|
# 'total'] or 0
|
|
# company_kill_house_free_live_bar_total_weight = \
|
|
# free_bars.filter(buy_type='live', company_share__gt=0).aggregate(total=Sum('live_weight'))[
|
|
# 'total'] or 0
|
|
# company_kill_house_free_live_bar_total_wage = \
|
|
# free_bars.filter(buy_type='live', company_share__gt=0).aggregate(total=Sum('company_share'))[
|
|
# 'total'] or 0
|
|
#
|
|
# company_kill_house_free_carcases_bar_total_weight = \
|
|
# free_bars.filter(buy_type='carcass', company_share__gt=0).aggregate(
|
|
# total=Sum('weight_of_carcasses'))[
|
|
# 'total'] or 0
|
|
# company_kill_house_free_carcases_bar_total_wage = \
|
|
# free_bars.filter(buy_type='carcass', company_share__gt=0).aggregate(total=Sum('company_share'))[
|
|
# 'total'] or 0
|
|
# company_total_paid_wage += \
|
|
# total_slaughter_transactions.filter(company_share__gt=0).aggregate(total=Sum('company_share'))[
|
|
# 'total'] or 0
|
|
# company_total_paid_wage += \
|
|
# total_chain_company_transactions.filter(company_share__gt=0).aggregate(total=Sum('company_share'))[
|
|
# 'total'] or 0
|
|
# company_total_weight = company_province_kill_request_total_weight + freezing_company_province_kill_request_total_weight + company_chain_allocation_total_weight + company_kill_house_free_live_bar_total_weight + company_kill_house_free_carcases_bar_total_weight + company_poultry_request_out_total_weight
|
|
# company_total_wage = company_province_kill_request_total_wage + freezing_company_province_kill_request_total_wage + company_chain_allocation_total_wage + company_kill_house_free_live_bar_total_wage + company_kill_house_free_carcases_bar_total_wage
|
|
# company_total_unpaid_wage = company_total_wage - (company_total_paid_wage + company_poultry_request_out_total_wage)
|
|
#
|
|
#
|
|
# guilds_poultry_request_out_total_weight = \
|
|
# out_poultry_requests.filter(guilds_share__gt=0).aggregate(
|
|
# total=Sum(F('quantity') * F('Index_weight')))[
|
|
# 'total'] or 0
|
|
# guilds_poultry_request_out_total_wage = out_poultry_requests.filter(guilds_share__gt=0).aggregate(
|
|
# total=Sum(
|
|
# ((F('quantity') * F('Index_weight')) * F('wage')) * (
|
|
# F('guilds_share_percent') / 100)))[
|
|
# 'total'] or 0
|
|
#
|
|
#
|
|
# guilds_province_kill_request_total_weight = \
|
|
# province_kill_requests.filter(guilds_share__gt=0,
|
|
# province_request__poultry_request__freezing=False).aggregate(
|
|
# total=Sum('total_killed_weight'))[
|
|
# 'total'] or 0
|
|
# guilds_province_kill_request_total_weight += \
|
|
# kill_house_requests.filter(province_kill_request__guilds_share__gt=0,
|
|
# province_kill_request__province_request__poultry_request__freezing=False).aggregate(
|
|
# total=Sum('accepted_real_weight'))[
|
|
# 'total'] or 0
|
|
#
|
|
# freezing_guilds_province_kill_request_total_weight = \
|
|
# freezing_province_kill_requests.filter(guilds_share__gt=0).aggregate(
|
|
# total=Sum('total_killed_weight'))[
|
|
# 'total'] or 0
|
|
# freezing_guilds_province_kill_request_total_weight += \
|
|
# freezing_kill_house_requests.filter(province_kill_request__guilds_share__gt=0).aggregate(
|
|
# total=Sum('accepted_real_weight'))[
|
|
# 'total'] or 0
|
|
# guilds_province_kill_request_total_wage = \
|
|
# province_kill_requests.filter(guilds_share__gt=0,
|
|
# province_request__poultry_request__freezing=False).aggregate(
|
|
# total=Sum('guilds_share'))[
|
|
# 'total'] or 0
|
|
# guilds_province_kill_request_total_wage += \
|
|
# kill_house_requests.filter(province_kill_request__guilds_share__gt=0,
|
|
# province_kill_request__province_request__poultry_request__freezing=False).aggregate(
|
|
# total=Sum(
|
|
# F('accepted_real_weight') * F('province_kill_request__wage') * (
|
|
# F('province_kill_request__guilds_share_percent') / 100)))[
|
|
# 'total'] or 0
|
|
# freezing_guilds_province_kill_request_total_wage = \
|
|
# freezing_province_kill_requests.filter(guilds_share__gt=0).aggregate(total=Sum('guilds_share'))[
|
|
# 'total'] or 0
|
|
# freezing_guilds_province_kill_request_total_wage += \
|
|
# freezing_kill_house_requests.filter(province_kill_request__guilds_share__gt=0).aggregate(total=Sum(
|
|
# F('accepted_real_weight') * F('province_kill_request__wage') * (
|
|
# F('province_kill_request__guilds_share_percent') / 100)))[
|
|
# 'total'] or 0
|
|
# guilds_chain_allocation_total_weight = \
|
|
# chain_allocations.filter(guilds_share__gt=0).aggregate(total=Sum('weight'))[
|
|
# 'total'] or 0
|
|
# guilds_chain_allocation_total_wage = \
|
|
# chain_allocations.filter(guilds_share__gt=0).aggregate(total=Sum('guilds_share'))[
|
|
# 'total'] or 0
|
|
# guilds_kill_house_free_live_bar_total_weight = \
|
|
# free_bars.filter(buy_type='live', guilds_share__gt=0).aggregate(total=Sum('live_weight'))[
|
|
# 'total'] or 0
|
|
# guilds_kill_house_free_live_bar_total_wage = \
|
|
# free_bars.filter(buy_type='live', guilds_share__gt=0).aggregate(total=Sum('guilds_share'))[
|
|
# 'total'] or 0
|
|
#
|
|
# guilds_kill_house_free_carcases_bar_total_weight = \
|
|
# free_bars.filter(buy_type='carcass', guilds_share__gt=0).aggregate(
|
|
# total=Sum('weight_of_carcasses'))[
|
|
# 'total'] or 0
|
|
# guilds_kill_house_free_carcases_bar_total_wage = \
|
|
# free_bars.filter(buy_type='carcass', guilds_share__gt=0).aggregate(total=Sum('guilds_share'))[
|
|
# 'total'] or 0
|
|
# guilds_total_paid_wage += \
|
|
# total_slaughter_transactions.filter(guilds_share__gt=0).aggregate(total=Sum('guilds_share'))[
|
|
# 'total'] or 0
|
|
# guilds_total_paid_wage += \
|
|
# total_chain_company_transactions.filter(guilds_share__gt=0).aggregate(total=Sum('guilds_share'))[
|
|
# 'total'] or 0
|
|
# guilds_total_weight = guilds_province_kill_request_total_weight + freezing_guilds_province_kill_request_total_weight + guilds_chain_allocation_total_weight + guilds_kill_house_free_live_bar_total_weight + guilds_kill_house_free_carcases_bar_total_weight + guilds_poultry_request_out_total_weight
|
|
# guilds_total_wage = guilds_province_kill_request_total_wage + freezing_guilds_province_kill_request_total_wage + guilds_chain_allocation_total_wage + guilds_kill_house_free_live_bar_total_wage + guilds_kill_house_free_carcases_bar_total_wage
|
|
# guilds_total_unpaid_wage = guilds_total_wage - (guilds_total_paid_wage + guilds_poultry_request_out_total_wage)
|
|
#
|
|
# if role == 'SuperAdmin':
|
|
# return {
|
|
# "total_weight": total_weight,
|
|
# "total_wage": total_wage,
|
|
# "total_paid_wage": total_paid_wage,
|
|
# "total_unpaid_wage": total_wage - total_paid_wage,
|
|
# "province_kill_requests_total_wage": province_kill_requests_total_wage,
|
|
# "province_kill_requests_total_weight": province_kill_requests_total_weight,
|
|
# "freezing_province_kill_requests_total_wage": freezing_province_kill_requests_total_wage,
|
|
# "freezing_province_kill_requests_total_weight": freezing_province_kill_requests_total_weight,
|
|
# "chain_allocations_total_wage": chain_allocations_total_wage,
|
|
# "chain_allocations_total_weight": chain_allocations_total_weight,
|
|
# "free_bars_live_total_wage": free_bars_live_total_wage,
|
|
# "free_bars_live_total_weight": free_bars_live_total_weight,
|
|
# "free_bars_carcases_total_wage": free_bars_carcases_total_wage,
|
|
# "free_bars_carcases_total_weight": free_bars_carcases_total_weight,
|
|
# "poultry_request_out_total_wage" :poultry_request_out_total_wage,
|
|
# "poultry_request_out_total_weight" :poultry_request_out_total_weight,
|
|
# "shares": {
|
|
# "union_total_weight": union_total_weight,
|
|
# "union_total_wage": union_total_wage,
|
|
# "union_total_paid_wage": union_total_paid_wage,
|
|
# "union_total_unpaid_wage": union_total_unpaid_wage,
|
|
# "union_province_kill_request_total_wage": union_province_kill_request_total_wage,
|
|
# "union_kill_house_free_live_bar_total_wage": union_kill_house_free_live_bar_total_wage,
|
|
# "union_kill_house_free_carcases_bar_total_wage": union_kill_house_free_carcases_bar_total_wage,
|
|
# "union_chain_allocation_total_wage": union_chain_allocation_total_wage,
|
|
# "union_province_kill_request_total_weight": union_province_kill_request_total_weight,
|
|
# "union_kill_house_free_live_bar_total_weight": union_kill_house_free_live_bar_total_weight,
|
|
# "union_kill_house_free_carcases_bar_total_weight": union_kill_house_free_carcases_bar_total_weight,
|
|
# "union_chain_allocation_total_weight": union_chain_allocation_total_weight,
|
|
# "freezing_union_province_kill_request_total_wage": freezing_union_province_kill_request_total_wage,
|
|
# "freezing_union_province_kill_request_total_weight": freezing_union_province_kill_request_total_weight,
|
|
# "union_poultry_request_out_total_wage":union_poultry_request_out_total_wage,
|
|
# "union_poultry_request_out_total_weight":union_poultry_request_out_total_weight,
|
|
#
|
|
# "company_total_weight": company_total_weight,
|
|
# "company_total_wage": company_total_wage,
|
|
# "company_total_paid_wage": company_total_paid_wage,
|
|
# "company_total_unpaid_wage": company_total_unpaid_wage,
|
|
# "company_province_kill_request_total_wage": company_province_kill_request_total_wage,
|
|
# "company_kill_house_free_live_bar_total_wage": company_kill_house_free_live_bar_total_wage,
|
|
# "company_kill_house_free_carcases_bar_total_wage": company_kill_house_free_carcases_bar_total_wage,
|
|
# "company_chain_allocation_total_wage": company_chain_allocation_total_wage,
|
|
# "company_province_kill_request_total_weight": company_province_kill_request_total_weight,
|
|
# "company_kill_house_free_live_bar_total_weight": company_kill_house_free_live_bar_total_weight,
|
|
# "company_kill_house_free_carcases_bar_total_weight": company_kill_house_free_carcases_bar_total_weight,
|
|
# "company_chain_allocation_total_weight": company_chain_allocation_total_weight,
|
|
# "freezing_company_province_kill_request_total_wage": freezing_company_province_kill_request_total_wage,
|
|
# "freezing_company_province_kill_request_total_weight": freezing_company_province_kill_request_total_weight,
|
|
# "company_poultry_request_out_total_wage":company_poultry_request_out_total_wage,
|
|
# "company_poultry_request_out_total_weight":company_poultry_request_out_total_weight,
|
|
#
|
|
# "guilds_total_weight": guilds_total_weight,
|
|
# "guilds_total_wage": guilds_total_wage,
|
|
# "guilds_total_paid_wage": guilds_total_paid_wage,
|
|
# "guilds_total_unpaid_wage": guilds_total_unpaid_wage,
|
|
# "guilds_province_kill_request_total_wage": guilds_province_kill_request_total_wage,
|
|
# "guilds_kill_house_free_live_bar_total_wage": guilds_kill_house_free_live_bar_total_wage,
|
|
# "guilds_kill_house_free_carcases_bar_total_wage": guilds_kill_house_free_carcases_bar_total_wage,
|
|
# "guilds_chain_allocation_total_wage": guilds_chain_allocation_total_wage,
|
|
# "guilds_province_kill_request_total_weight": guilds_province_kill_request_total_weight,
|
|
# "guilds_kill_house_free_live_bar_total_weight": guilds_kill_house_free_live_bar_total_weight,
|
|
# "guilds_kill_house_free_carcases_bar_total_weight": guilds_kill_house_free_carcases_bar_total_weight,
|
|
# "guilds_chain_allocation_total_weight": guilds_chain_allocation_total_weight,
|
|
# "freezing_guilds_province_kill_request_total_wage": freezing_guilds_province_kill_request_total_wage,
|
|
# "freezing_guilds_province_kill_request_total_weight": freezing_guilds_province_kill_request_total_weight,
|
|
# "guilds_poultry_request_out_total_wage" :guilds_poultry_request_out_total_wage,
|
|
# "guilds_poultry_request_out_total_weight" :guilds_poultry_request_out_total_weight,
|
|
# }
|
|
# }
|
|
#
|
|
# return {
|
|
# "total_weight": total_weight,
|
|
# "total_wage": total_wage,
|
|
# "total_paid_wage": total_paid_wage,
|
|
# "total_unpaid_wage": total_wage - total_paid_wage,
|
|
# "province_kill_requests_total_wage": province_kill_requests_total_wage,
|
|
# "province_kill_requests_total_weight": province_kill_requests_total_weight,
|
|
# "freezing_province_kill_requests_total_wage": freezing_province_kill_requests_total_wage,
|
|
# "freezing_province_kill_requests_total_weight": freezing_province_kill_requests_total_weight,
|
|
# "chain_allocations_total_wage": chain_allocations_total_wage,
|
|
# "chain_allocations_total_weight": chain_allocations_total_weight,
|
|
# "free_bars_live_total_wage": free_bars_live_total_wage,
|
|
# "free_bars_live_total_weight": free_bars_live_total_weight,
|
|
# "free_bars_carcases_total_wage": free_bars_carcases_total_wage,
|
|
# "free_bars_carcases_total_weight": free_bars_carcases_total_weight,
|
|
# "poultry_request_out_total_wage": poultry_request_out_total_wage,
|
|
# "poultry_request_out_total_weight": poultry_request_out_total_weight,
|
|
# }
|
|
|
|
|
|
class TotalWageInformationSerializer(serializers.ModelSerializer):
|
|
wage_info = serializers.SerializerMethodField('get_wage_info')
|
|
|
|
class Meta:
|
|
model = TotalWageInformation
|
|
fields = ['key', 'wage_info']
|
|
|
|
def get_wage_info(self, obj):
|
|
before_total_out_live_buying_province_carcasses_weight = 0
|
|
after_total_out_live_buying_province_carcasses_weight = 0
|
|
before_new_out_selling = 0
|
|
after_new_out_selling = 0
|
|
company_before_total_out_live_buying_province_carcasses_price = 0
|
|
before_total_out_live_buying_province_carcasses_price = 0
|
|
company_before_total_out_live_buying_province_carcasses_weight = 0
|
|
extra_company_amount = 0
|
|
total_weight = 0
|
|
total_wage = 0
|
|
total_paid_wage = 0
|
|
shares_list = []
|
|
total_unpaid_wage = 0
|
|
union_total_weight = 0
|
|
union_total_wage = 0
|
|
union_total_paid_wage = 0
|
|
union_total_unpaid_wage = 0
|
|
union_province_kill_request_total_wage = 0
|
|
freezing_union_province_kill_request_total_wage = 0
|
|
union_kill_house_free_live_bar_total_wage = 0
|
|
union_kill_house_free_carcases_bar_total_wage = 0
|
|
union_chain_allocation_total_wage = 0
|
|
union_province_kill_request_total_weight = 0
|
|
freezing_union_province_kill_request_total_weight = 0
|
|
union_kill_house_free_live_bar_total_weight = 0
|
|
union_kill_house_free_carcases_bar_total_weight = 0
|
|
union_chain_allocation_total_weight = 0
|
|
|
|
company_total_weight = 0
|
|
company_total_wage = 0
|
|
company_total_paid_wage = 0
|
|
company_total_unpaid_wage = 0
|
|
company_province_kill_request_total_wage = 0
|
|
freezing_company_province_kill_request_total_wage = 0
|
|
company_kill_house_free_live_bar_total_wage = 0
|
|
company_kill_house_free_carcases_bar_total_wage = 0
|
|
company_chain_allocation_total_wage = 0
|
|
company_province_kill_request_total_weight = 0
|
|
freezing_company_province_kill_request_total_weight = 0
|
|
company_kill_house_free_live_bar_total_weight = 0
|
|
company_kill_house_free_carcases_bar_total_weight = 0
|
|
company_chain_allocation_total_weight = 0
|
|
|
|
guilds_total_weight = 0
|
|
guilds_total_wage = 0
|
|
guilds_total_paid_wage = 0
|
|
guilds_total_unpaid_wage = 0
|
|
guilds_province_kill_request_total_wage = 0
|
|
freezing_guilds_province_kill_request_total_wage = 0
|
|
guilds_kill_house_free_live_bar_total_wage = 0
|
|
guilds_kill_house_free_carcases_bar_total_wage = 0
|
|
guilds_chain_allocation_total_wage = 0
|
|
guilds_province_kill_request_total_weight = 0
|
|
freezing_guilds_province_kill_request_total_weight = 0
|
|
guilds_kill_house_free_live_bar_total_weight = 0
|
|
guilds_kill_house_free_carcases_bar_total_weight = 0
|
|
guilds_chain_allocation_total_weight = 0
|
|
|
|
other_total_weight = 0
|
|
other_total_wage = 0
|
|
other_total_paid_wage = 0
|
|
other_total_unpaid_wage = 0
|
|
other_province_kill_request_total_wage = 0
|
|
freezing_other_province_kill_request_total_wage = 0
|
|
other_kill_house_free_live_bar_total_wage = 0
|
|
other_kill_house_free_carcases_bar_total_wage = 0
|
|
other_chain_allocation_total_wage = 0
|
|
other_province_kill_request_total_weight = 0
|
|
freezing_other_province_kill_request_total_weight = 0
|
|
other_kill_house_free_live_bar_total_weight = 0
|
|
other_kill_house_free_carcases_bar_total_weight = 0
|
|
other_chain_allocation_total_weight = 0
|
|
|
|
province_kill_request_total_wage = 0
|
|
province_kill_request_total_weight = 0
|
|
freezing_province_kill_requests_total_wage = 0
|
|
freezing_province_kill_requests_total_weight = 0
|
|
chain_total_wage = 0
|
|
chain_total_weight = 0
|
|
free_bars_live_total_wage = 0
|
|
free_bars_live_total_weight = 0
|
|
free_bars_carcases_total_wage = 0
|
|
free_bars_carcases_total_weight = 0
|
|
real_free_sale_wage = 0
|
|
union_real_free_sale_wage = 0
|
|
company_real_free_sale_wage = 0
|
|
guilds_real_free_sale_wage = 0
|
|
other_real_free_sale_wage = 0
|
|
total_check_wage = 0
|
|
union_wage_percent = 0
|
|
company_wage_percent = 0
|
|
guilds_wage_percent = 0
|
|
other_wage_percent = 0
|
|
date1 = None
|
|
date2 = None
|
|
role = None
|
|
if self.context:
|
|
role = self.context.get('request').GET.get('role')
|
|
if self.context.get('request').GET.get('date1'):
|
|
date1 = datetime.strptime(str(self.context.get('request').GET['date1']),
|
|
'%Y-%m-%d').date()
|
|
date2 = datetime.strptime(str(self.context.get('request').GET['date2']),
|
|
'%Y-%m-%d').date()
|
|
|
|
wage_type = WageType.objects.filter(en_name='province-kill-request').first()
|
|
total_check_wage = wage_type.amount
|
|
percentages_wage_type = PercentageOfWageType.objects.filter(wage_type=wage_type, percent__gt=0, trash=False)
|
|
for percentage_wage_type in percentages_wage_type:
|
|
if percentage_wage_type.share_type.en_name == 'union':
|
|
union_wage_percent = percentage_wage_type.percent / 100
|
|
elif percentage_wage_type.share_type.en_name == 'company':
|
|
company_wage_percent = percentage_wage_type.percent / 100
|
|
|
|
elif percentage_wage_type.share_type.en_name == 'guilds':
|
|
guilds_wage_percent = percentage_wage_type.percent / 100
|
|
elif percentage_wage_type.share_type.en_name in ['city', 'wallet']:
|
|
pass
|
|
else:
|
|
other_wage_percent = percentage_wage_type.percent / 100
|
|
total_wage_type = WageType.objects.filter(trash=False)
|
|
province_live_wage_amount = total_wage_type.filter(en_name='province-kill-request', trash=False).first().amount
|
|
free_buying_live_weight_amount = total_wage_type.filter(en_name='live-buy', trash=False).first().amount
|
|
free_buying_carcesses_weight_amount = total_wage_type.filter(en_name='carcasse-buy', trash=False).first().amount
|
|
free_sell_carcesses_weight_amount = total_wage_type.filter(en_name='carcasse-sell', trash=False).first().amount
|
|
out_province_poultry_request_wage_amount = total_wage_type.filter(en_name='poultry-sell-out-province',
|
|
trash=False).first().amount
|
|
|
|
if role == 'KillHouse':
|
|
try:
|
|
user = SystemUserProfile.objects.get(user=self.context.get('request').user)
|
|
except:
|
|
user = SystemUserProfile.objects.get(key=self.context.get('request').GET['key'])
|
|
kill_house = KillHouse.objects.filter(kill_house_operator__user=user, trash=False).first()
|
|
# if date1:
|
|
# finance_info = get_finance_info(kill_house, date1, date2)
|
|
# slaughter_transactions = InternalTransaction.objects.filter(
|
|
# Q(kill_house=kill_house) | Q(parent_kill_house=kill_house), date__date__gte=date1,
|
|
# date__date__lte=date2, status='completed',
|
|
# trash=False)
|
|
#
|
|
# else:
|
|
# finance_info = get_finance_info(kill_house)
|
|
# slaughter_transactions = InternalTransaction.objects.filter(
|
|
# Q(kill_house=kill_house) | Q(parent_kill_house=kill_house), status='completed',
|
|
# trash=False)
|
|
if date1:
|
|
finance_info = get_finance_info(kill_house, date1, date2)
|
|
if kill_house.killer and kill_house.type == 'public':
|
|
slaughter_transactions = InternalTransaction.objects.filter(
|
|
kill_house=kill_house,parent_kill_house=kill_house, date__date__gte=date1,
|
|
date__date__lte=date2, status='completed',
|
|
trash=False)
|
|
else:
|
|
slaughter_transactions = InternalTransaction.objects.filter(
|
|
Q(kill_house=kill_house) | Q(parent_kill_house=kill_house), date__date__gte=date1,
|
|
date__date__lte=date2, status='completed',
|
|
trash=False)
|
|
|
|
else:
|
|
finance_info = get_finance_info(kill_house)
|
|
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
|
|
|
|
return {
|
|
"wage_counting_type": wage_counting_type,
|
|
"total_wage": finance_info['total_price'],
|
|
"total_paid_wage": total_paid_wage,
|
|
"off": kill_house.off,
|
|
"total_unpaid_wage": finance_info['total_price'] - (total_paid_wage + kill_house.off),
|
|
"province_kill_requests_total_wage": finance_info['total_pure_province_carcasses_price'],
|
|
"province_kill_requests_total_weight": finance_info['total_pure_province_carcasses_weight'],
|
|
"free_bars_live_total_wage": finance_info['total_out_live_buying_province_carcasses_price'],
|
|
"free_bars_live_total_weight": finance_info['total_out_live_buying_province_carcasses_weight'],
|
|
"free_bars_carcases_total_wage": finance_info['total_out_carcasses_buying_province_carcasses_price'],
|
|
"free_bars_carcases_total_weight": finance_info['total_out_carcasses_buying_province_carcasses_weight'],
|
|
"free_bars_out_province_carcases_total_wage": finance_info[
|
|
'total_out_selling_province_carcasses_price'],
|
|
"free_bars_out_province_carcases_total_weight": finance_info[
|
|
'total_out_selling_province_carcasses_weight'],
|
|
"total_province_live_weight": finance_info['total_province_live_weight'],
|
|
"total_province_carcasses_weight": finance_info['total_province_carcasses_weight'],
|
|
"province_live_wage_amount": province_live_wage_amount,
|
|
"free_buying_live_weight_amount": free_buying_live_weight_amount,
|
|
"free_buying_carcesses_weight_amount": free_buying_carcesses_weight_amount,
|
|
"free_sell_carcesses_weight_amount": free_sell_carcesses_weight_amount,
|
|
"finance_info": finance_info,
|
|
"return_total_province_live_weight": finance_info['return_total_province_live_weight'],
|
|
"total_return_pure_province_carcasses_price": finance_info[
|
|
'total_return_pure_province_carcasses_price'],
|
|
}
|
|
|
|
elif role == 'ChainCompany':
|
|
try:
|
|
user = SystemUserProfile.objects.get(user=self.context.get('request').user)
|
|
except:
|
|
user = SystemUserProfile.objects.get(key=self.context.get('request').GET['key'])
|
|
chain_company = ChainCompany.objects.get(user=user, trash=False)
|
|
chain_allocations = ChainAllocation.objects.filter(chain_company=chain_company, state='accepted',
|
|
trash=False)
|
|
chain_allocations_total_wage = chain_allocations.aggregate(total=Sum('total_wage_amount'))[
|
|
'total'] or 0
|
|
total_wage += chain_allocations_total_wage
|
|
chain_allocations_total_weight = chain_allocations.aggregate(total=Sum('weight'))[
|
|
'total'] or 0
|
|
total_weight += chain_allocations_total_weight
|
|
|
|
chain_company_transactions = InternalTransaction.objects.filter(chain_company=chain_company,
|
|
status='completed', trash=False)
|
|
total_paid_wage += chain_company_transactions.aggregate(total=Sum('amount'))[
|
|
'total'] or 0
|
|
|
|
return {
|
|
"total_weight": total_weight,
|
|
"total_wage": total_wage,
|
|
"chain_allocations_total_wage": chain_allocations_total_wage,
|
|
"chain_allocations_total_weight": chain_allocations_total_weight,
|
|
"total_paid_wage": total_paid_wage,
|
|
"total_unpaid_wage": total_wage - total_paid_wage
|
|
}
|
|
|
|
|
|
|
|
|
|
else:
|
|
kill_houses = KillHouse.objects.filter(out_province=False, trash=False).order_by('id')
|
|
if date1:
|
|
|
|
province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user__in=kill_houses, trash=False,
|
|
archive_wage=False,
|
|
return_to_province=False,
|
|
state__in=('pending', 'accepted'),
|
|
kill_request__recive_date__date__gte=date1,
|
|
kill_request__recive_date__date__lte=date2,
|
|
first_car_allocated_quantity=0).order_by(
|
|
'id')
|
|
return_province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user__in=kill_houses,
|
|
trash=True, return_trash=True,
|
|
archive_wage=False,
|
|
return_to_province=False,
|
|
state__in=('pending', 'accepted'),
|
|
kill_request__recive_date__date__gte=date1,
|
|
kill_request__recive_date__date__lte=date2,
|
|
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,
|
|
kill_request__recive_date__date__gte=date1, kill_request__recive_date__date__lte=date2,
|
|
trash=False, calculate_status=True
|
|
)
|
|
return_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,
|
|
kill_request__recive_date__date__gte=date1, kill_request__recive_date__date__lte=date2,
|
|
trash=True, return_trash=True, calculate_status=True
|
|
)
|
|
kill_house_free_bar_info = KillHouseFreeBarInformation.objects.filter(kill_house__in=kill_houses,
|
|
archive_wage=False,
|
|
calculate_status=True,
|
|
create_date__date__gte=date1,
|
|
create_date__date__lte=date2,
|
|
trash=False)
|
|
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(
|
|
kill_house__in=kill_houses,
|
|
archive_wage=False, calculate_status=True, date__date__gte=date1, date__date__lte=date2,
|
|
trash=False)
|
|
|
|
slaughter_transactions = InternalTransaction.objects.filter(
|
|
kill_house__in=kill_houses, status='completed', date__date__gte=date1, date__date__lte=date2,
|
|
trash=False)
|
|
poultry_transactions = InternalTransaction.objects.filter(
|
|
poultry__isnull=False, status='completed', date__date__gte=date1, date__date__lte=date2,
|
|
trash=False)
|
|
|
|
poultry_requests = PoultryRequest.objects.filter(trash=False, state_process__in=('pending', 'accepted'),
|
|
province_state__in=('pending', 'accepted'), out=True,
|
|
out_province_request_cancel=False,
|
|
temporary_trash=False, send_date__date__gte=date1,
|
|
send_date__date__lte=date2,
|
|
wage_pay=True, has_wage=True,
|
|
temporary_deleted=False)
|
|
difference_requests = BarDifferenceRequest.objects.filter(kill_house__in=kill_houses, trash=False,
|
|
create_date__date__gte=date1,
|
|
create_date__date__lte=date2,
|
|
state='accepted')
|
|
else:
|
|
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')
|
|
return_province_kill_requests = ProvinceKillRequest.objects.filter(killhouse_user__in=kill_houses,
|
|
trash=True, return_trash=True,
|
|
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, calculate_status=True
|
|
)
|
|
return_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=True, return_trash=True, calculate_status=True
|
|
)
|
|
kill_house_free_bar_info = KillHouseFreeBarInformation.objects.filter(kill_house__in=kill_houses,
|
|
archive_wage=False,
|
|
calculate_status=True,
|
|
trash=False)
|
|
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(
|
|
kill_house__in=kill_houses,
|
|
archive_wage=False, calculate_status=True,
|
|
trash=False)
|
|
|
|
slaughter_transactions = InternalTransaction.objects.filter(
|
|
kill_house__in=kill_houses, status='completed',
|
|
trash=False)
|
|
poultry_transactions = InternalTransaction.objects.filter(
|
|
poultry__isnull=False, status='completed',
|
|
trash=False)
|
|
|
|
poultry_requests = PoultryRequest.objects.filter(trash=False, state_process__in=('pending', 'accepted'),
|
|
province_state__in=('pending', 'accepted'), out=True,
|
|
out_province_request_cancel=False,
|
|
temporary_trash=False,
|
|
wage_pay=True, has_wage=True,
|
|
temporary_deleted=False)
|
|
difference_requests = BarDifferenceRequest.objects.filter(kill_house__in=kill_houses, trash=False,
|
|
state='accepted')
|
|
|
|
out_province_poultry_request_weight = \
|
|
poultry_requests.aggregate(total=Sum(F('quantity') * F('Index_weight')))[
|
|
'total'] or 0
|
|
out_province_poultry_request_wage = poultry_requests.aggregate(total=Sum('total_wage_amount'))[
|
|
'total'] or 0
|
|
union_out_province_poultry_request_wage = poultry_requests.aggregate(total=Sum('union_share'))[
|
|
'total'] or 0
|
|
company_out_province_poultry_request_wage = poultry_requests.aggregate(total=Sum('company_share'))[
|
|
'total'] or 0
|
|
guilds_out_province_poultry_request_wage = poultry_requests.aggregate(total=Sum('guilds_share'))[
|
|
'total'] or 0
|
|
other_out_province_poultry_request_wage = poultry_requests.aggregate(total=Sum('other_share'))[
|
|
'total'] or 0
|
|
|
|
off = kill_houses.aggregate(total=Sum('off'))[
|
|
'total'] or 0
|
|
|
|
total_paid_wage = slaughter_transactions.aggregate(total=Sum('amount'))[
|
|
'total'] or 0
|
|
total_paid_wage += poultry_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_out_selling_province_quarantine_carcasses_weight = \
|
|
# kill_house_free_sale_bar_info.aggregate(total=Sum('quarantine_weight_of_carcasses'))['total'] or 0
|
|
|
|
# sum_quarantine_carcasses_weight = \
|
|
# kill_house_free_sale_bar_info.filter(quarantine_weight_of_carcasses__gt=0).aggregate(
|
|
# total_weight=Sum(
|
|
# Case(
|
|
# When(real_weight_of_carcasses__lt=F('quarantine_weight_of_carcasses'),
|
|
# then=F('real_weight_of_carcasses')),
|
|
# default=F('quarantine_weight_of_carcasses'),
|
|
# output_field=FloatField()
|
|
# )
|
|
# )
|
|
# )
|
|
# total_out_selling_province_quarantine_carcasses_weight = sum_quarantine_carcasses_weight[
|
|
# 'total_weight'] or 0
|
|
|
|
total_province_live_weight += \
|
|
difference_requests.aggregate(total=Sum('weight'))['total'] or 0
|
|
difference_requests_weight = \
|
|
difference_requests.aggregate(total=Sum('weight'))['total'] or 0
|
|
return_total_province_live_weight = \
|
|
return_province_kill_requests.aggregate(total=Sum('total_killed_weight'))[
|
|
'total'] or 0
|
|
return_total_province_live_weight += \
|
|
return_kill_house_requests.aggregate(total=Sum('accepted_real_weight'))['total'] or 0
|
|
final_date = '2025-05-28'
|
|
total_out_selling_province_carcasses_weight = \
|
|
kill_house_free_sale_bar_info.filter(date__date__lte=final_date).aggregate(
|
|
total=Sum('real_weight_of_carcasses'))['total'] or 0
|
|
new_total_out_selling_province_carcasses_weight = \
|
|
kill_house_free_sale_bar_info.filter(date__date__gt=final_date,
|
|
quarantine_weight_of_carcasses__gt=0).aggregate(
|
|
total_weight=Sum(
|
|
Case(
|
|
When(real_weight_of_carcasses__lt=F('quarantine_weight_of_carcasses'),
|
|
then=F('real_weight_of_carcasses')),
|
|
default=F('quarantine_weight_of_carcasses'),
|
|
output_field=FloatField()
|
|
)
|
|
)
|
|
)
|
|
new_out_selling = new_total_out_selling_province_carcasses_weight['total_weight'] or 0
|
|
|
|
total_out_selling_province_carcasses_weight += new_out_selling
|
|
|
|
if wage_counting_type == 'live':
|
|
total_province_carcasses_weight = total_province_live_weight
|
|
|
|
total_pure_province_carcasses_weight = total_province_carcasses_weight
|
|
else:
|
|
return_total_province_live_weight = int(return_total_province_live_weight * 0.75)
|
|
total_province_carcasses_weight = total_province_live_weight * 0.75
|
|
difference_requests_weight = difference_requests_weight * 0.75
|
|
|
|
total_out_carcasses_buying_for_pure_province_carcasses_weight = \
|
|
kill_house_free_bar_info.aggregate(total=Sum('weight_of_carcasses'))['total'] or 0
|
|
if date1:
|
|
total_pure_province_carcasses_weight = total_province_carcasses_weight - get_difference_carcasses_weight(
|
|
kill_houses, date1, date2)
|
|
else:
|
|
total_pure_province_carcasses_weight = total_province_carcasses_weight - get_difference_carcasses_weight(
|
|
kill_houses)
|
|
total_out_live_buying_province_carcasses_weight = \
|
|
kill_house_free_bar_info.filter(buy_type='live').aggregate(total=Sum('live_weight'))['total'] or 0
|
|
real_total_out_live_buying_province_carcasses_weight = total_out_live_buying_province_carcasses_weight
|
|
if new_out_selling_count_wage:
|
|
if out_selling_ignore:
|
|
before_total_out_live_buying_province_carcasses_weight = \
|
|
kill_house_free_bar_info.filter(create_date__date__lt=new_out_selling_count_wage_date,
|
|
buy_type='live').aggregate(total=Sum('live_weight'))[
|
|
'total'] or 0
|
|
after_total_out_live_buying_province_carcasses_weight = \
|
|
kill_house_free_bar_info.filter(create_date__date__gte=new_out_selling_count_wage_date,
|
|
buy_type='live').aggregate(total=Sum('live_weight'))[
|
|
'total'] or 0
|
|
get_new_wage = get_new_wage_for_free_buying(kill_house_free_sale_bar_info)
|
|
|
|
before_new_out_selling = get_new_wage['before_new_out_selling']
|
|
after_new_out_selling = get_new_wage['after_new_out_selling']
|
|
max_amount = before_total_out_live_buying_province_carcasses_weight * 0.80
|
|
if max_amount <= before_new_out_selling:
|
|
before_total_out_live_buying_province_carcasses_weight -= max_amount
|
|
else:
|
|
before_total_out_live_buying_province_carcasses_weight -= before_new_out_selling
|
|
|
|
if after_total_out_live_buying_province_carcasses_weight > after_new_out_selling:
|
|
extra_company_amount = int(after_new_out_selling * extra_company_amount)
|
|
after_total_out_live_buying_province_carcasses_weight -= after_new_out_selling
|
|
|
|
else:
|
|
extra_company_amount = int(
|
|
after_total_out_live_buying_province_carcasses_weight * extra_company_amount)
|
|
|
|
after_total_out_live_buying_province_carcasses_weight = 0
|
|
|
|
total_out_live_buying_province_carcasses_weight = before_total_out_live_buying_province_carcasses_weight + after_total_out_live_buying_province_carcasses_weight
|
|
company_before_total_out_live_buying_province_carcasses_weight = before_total_out_live_buying_province_carcasses_weight
|
|
|
|
else:
|
|
if out_selling_ignore:
|
|
max_amount = total_out_live_buying_province_carcasses_weight * 0.80
|
|
if max_amount <= new_out_selling:
|
|
total_out_live_buying_province_carcasses_weight -= max_amount
|
|
else:
|
|
total_out_live_buying_province_carcasses_weight -= new_out_selling
|
|
|
|
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_amount
|
|
difference_requests_price = difference_requests_weight * province_live_wage_amount
|
|
total_return_pure_province_carcasses_price = return_total_province_live_weight * province_live_wage_amount
|
|
total_out_selling_province_carcasses_price = total_out_selling_province_carcasses_weight * free_sell_carcesses_weight_amount
|
|
|
|
if new_out_selling_count_wage:
|
|
total_out_live_buying_province_carcasses_price = int(
|
|
(before_total_out_live_buying_province_carcasses_weight * before_out_buying_count_wage_amount) + (
|
|
after_total_out_live_buying_province_carcasses_weight * free_buying_live_weight_amount))
|
|
|
|
before_total_out_live_buying_province_carcasses_price = before_total_out_live_buying_province_carcasses_weight * before_out_buying_count_wage_amount
|
|
else:
|
|
total_out_live_buying_province_carcasses_price = total_out_live_buying_province_carcasses_weight * free_buying_live_weight_amount
|
|
|
|
# total_out_live_buying_province_carcasses_price = total_out_live_buying_province_carcasses_weight * free_buying_live_weight_amount
|
|
total_out_carcasses_buying_province_carcasses_price = total_out_carcasses_buying_province_carcasses_weight * free_buying_carcesses_weight_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 + out_province_poultry_request_wage + extra_company_amount + total_return_pure_province_carcasses_price
|
|
|
|
percentages_wage_type = PercentageOfWageType.objects.filter(trash=False)
|
|
union_province_kill_request_percent = percentages_wage_type.filter(
|
|
wage_type__en_name='province-kill-request', share_type__en_name='union').first().percent / 100
|
|
company_province_kill_request_percent = percentages_wage_type.filter(
|
|
wage_type__en_name='province-kill-request', share_type__en_name='company').first().percent / 100
|
|
guilds_province_kill_request_percent = percentages_wage_type.filter(
|
|
wage_type__en_name='province-kill-request', share_type__en_name='guilds').first().percent / 100
|
|
other_province_kill_request_percent = percentages_wage_type.filter(
|
|
wage_type__en_name='province-kill-request', share_type__en_name='other').first().percent / 100
|
|
|
|
union_free_buying_live_percent = percentages_wage_type.filter(wage_type__en_name='live-buy',
|
|
share_type__en_name='union').first().percent / 100
|
|
union_free_buying_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-buy',
|
|
share_type__en_name='union').first().percent / 100
|
|
company_free_buying_live_percent = percentages_wage_type.filter(wage_type__en_name='live-buy',
|
|
share_type__en_name='company').first().percent / 100
|
|
company_free_buying_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-buy',
|
|
share_type__en_name='company').first().percent / 100
|
|
guilds_free_buying_live_percent = percentages_wage_type.filter(wage_type__en_name='live-buy',
|
|
share_type__en_name='guilds').first().percent / 100
|
|
guilds_free_buying_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-buy',
|
|
share_type__en_name='guilds').first().percent / 100
|
|
other_free_buying_live_percent = percentages_wage_type.filter(wage_type__en_name='live-buy',
|
|
share_type__en_name='other').first().percent / 100
|
|
other_free_buying_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-buy',
|
|
share_type__en_name='other').first().percent / 100
|
|
|
|
union_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
|
share_type__en_name='union').first().percent / 100
|
|
company_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
|
share_type__en_name='company').first().percent / 100
|
|
guilds_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
|
share_type__en_name='guilds').first().percent / 100
|
|
other_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
|
share_type__en_name='other').first().percent / 100
|
|
|
|
union_province_kill_request_wage = total_pure_province_carcasses_price * union_province_kill_request_percent
|
|
return_union_province_kill_request_wage = total_return_pure_province_carcasses_price * union_province_kill_request_percent
|
|
union_free_buying_live_wage = (
|
|
total_out_live_buying_province_carcasses_price - before_total_out_live_buying_province_carcasses_price) * union_free_buying_live_percent
|
|
union_free_buying_carcasses_wage = total_out_carcasses_buying_province_carcasses_price * union_free_buying_carcasses_percent
|
|
union_free_sell_carcasses_wage = total_out_selling_province_carcasses_price * union_free_sell_carcasses_percent
|
|
union_total_wage = union_province_kill_request_wage + union_free_buying_live_wage + union_free_buying_carcasses_wage + union_free_sell_carcasses_wage + union_out_province_poultry_request_wage + return_union_province_kill_request_wage
|
|
union_total_paid_wage = slaughter_transactions.aggregate(total=Sum('union_share'))['total'] or 0
|
|
union_total_paid_wage += poultry_transactions.aggregate(total=Sum('union_share'))['total'] or 0
|
|
union_total_unpaid_wage = union_total_wage - union_total_paid_wage
|
|
|
|
shares_list.append({
|
|
"name": "اتحادیه",
|
|
"out_province_poultry_request_wage": union_out_province_poultry_request_wage,
|
|
"province_kill_request_wage": union_province_kill_request_wage,
|
|
"return_province_kill_request_wage": return_union_province_kill_request_wage,
|
|
"free_buying_live_wage": union_free_buying_live_wage,
|
|
"free_buying_carcasses_wage": union_free_buying_carcasses_wage,
|
|
"free_sell_carcasses_wage": union_free_sell_carcasses_wage,
|
|
"total_wage": union_total_wage,
|
|
"total_paid_wage": union_total_paid_wage,
|
|
"total_unpaid_wage": union_total_unpaid_wage,
|
|
|
|
})
|
|
|
|
guilds_difference_requests_price = difference_requests_price * guilds_province_kill_request_percent
|
|
other_difference_requests_price = difference_requests_price * other_province_kill_request_percent
|
|
guild_return_province_kill_request_wage = total_return_pure_province_carcasses_price * guilds_province_kill_request_percent
|
|
other_return_province_kill_request_wage = total_return_pure_province_carcasses_price * other_province_kill_request_percent
|
|
|
|
company_province_kill_request_wage = (
|
|
total_pure_province_carcasses_price * company_province_kill_request_percent) + (
|
|
guilds_difference_requests_price + other_difference_requests_price)
|
|
return_company_province_kill_request_wage = (
|
|
total_return_pure_province_carcasses_price * company_province_kill_request_percent) + (
|
|
guild_return_province_kill_request_wage + other_return_province_kill_request_wage)
|
|
company_free_buying_live_wage = ((
|
|
total_out_live_buying_province_carcasses_price - before_total_out_live_buying_province_carcasses_price) * company_free_buying_live_percent) + before_total_out_live_buying_province_carcasses_price
|
|
company_free_buying_carcasses_wage = total_out_carcasses_buying_province_carcasses_price * company_free_buying_carcasses_percent
|
|
company_free_sell_carcasses_wage = total_out_selling_province_carcasses_price * company_free_sell_carcasses_percent
|
|
company_total_wage = company_province_kill_request_wage + company_free_buying_live_wage + company_free_buying_carcasses_wage + company_free_sell_carcasses_wage + company_out_province_poultry_request_wage + return_company_province_kill_request_wage
|
|
company_total_paid_wage = slaughter_transactions.aggregate(total=Sum('company_share'))['total'] or 0
|
|
company_total_paid_wage += poultry_transactions.aggregate(total=Sum('company_share'))['total'] or 0
|
|
# company_total_pure_paid_wage = company_total_paid_wage - (company_total_paid_wage * 0.08))
|
|
company_total_unpaid_wage = company_total_wage - company_total_paid_wage
|
|
|
|
shares_list.append({
|
|
"name": "شرکت",
|
|
"out_province_poultry_request_wage": company_out_province_poultry_request_wage,
|
|
"province_kill_request_wage": company_province_kill_request_wage,
|
|
"return_province_kill_request_wage": return_company_province_kill_request_wage,
|
|
"free_buying_live_wage": company_free_buying_live_wage,
|
|
"free_buying_carcasses_wage": company_free_buying_carcasses_wage,
|
|
"free_sell_carcasses_wage": company_free_sell_carcasses_wage,
|
|
"total_wage": company_total_wage,
|
|
"total_paid_wage": company_total_paid_wage,
|
|
"total_unpaid_wage": company_total_unpaid_wage,
|
|
|
|
})
|
|
|
|
guilds_province_kill_request_wage = (
|
|
total_pure_province_carcasses_price * guilds_province_kill_request_percent) - guilds_difference_requests_price
|
|
# return_guilds_province_kill_request_wage = total_return_pure_province_carcasses_price * guilds_province_kill_request_percent
|
|
guilds_free_buying_live_wage = (
|
|
total_out_live_buying_province_carcasses_price - before_total_out_live_buying_province_carcasses_price) * guilds_free_buying_live_percent
|
|
guilds_free_buying_carcasses_wage = total_out_carcasses_buying_province_carcasses_price * guilds_free_buying_carcasses_percent
|
|
guilds_free_sell_carcasses_wage = total_out_selling_province_carcasses_price * guilds_free_sell_carcasses_percent
|
|
guilds_total_wage = guilds_province_kill_request_wage + guilds_free_buying_live_wage + guilds_free_buying_carcasses_wage + guilds_free_sell_carcasses_wage + guilds_out_province_poultry_request_wage
|
|
guilds_total_paid_wage = slaughter_transactions.aggregate(total=Sum('guilds_share'))['total'] or 0
|
|
guilds_total_paid_wage += poultry_transactions.aggregate(total=Sum('guilds_share'))['total'] or 0
|
|
guilds_total_unpaid_wage = guilds_total_wage - guilds_total_paid_wage
|
|
|
|
shares_list.append({
|
|
"name": "صنف پروتئین",
|
|
"out_province_poultry_request_wage": guilds_out_province_poultry_request_wage,
|
|
"province_kill_request_wage": guilds_province_kill_request_wage,
|
|
"return_province_kill_request_wage": 0,
|
|
"free_buying_live_wage": guilds_free_buying_live_wage,
|
|
"free_buying_carcasses_wage": guilds_free_buying_carcasses_wage,
|
|
"free_sell_carcasses_wage": guilds_free_sell_carcasses_wage,
|
|
"total_wage": guilds_total_wage,
|
|
"total_paid_wage": guilds_total_paid_wage,
|
|
"total_unpaid_wage": guilds_total_unpaid_wage,
|
|
|
|
})
|
|
|
|
other_province_kill_request_wage = (
|
|
total_pure_province_carcasses_price * other_province_kill_request_percent) - other_difference_requests_price
|
|
# return_other_province_kill_request_wage = total_return_pure_province_carcasses_price * other_province_kill_request_percent
|
|
other_free_buying_live_wage = (
|
|
total_out_live_buying_province_carcasses_price - before_total_out_live_buying_province_carcasses_price) * other_free_buying_live_percent
|
|
other_free_buying_carcasses_wage = total_out_carcasses_buying_province_carcasses_price * other_free_buying_carcasses_percent
|
|
other_free_sell_carcasses_wage = total_out_selling_province_carcasses_price * other_free_sell_carcasses_percent
|
|
other_total_wage = other_province_kill_request_wage + other_free_buying_live_wage + other_free_buying_carcasses_wage + other_free_sell_carcasses_wage + other_out_province_poultry_request_wage
|
|
other_total_paid_wage = slaughter_transactions.aggregate(total=Sum('other_share'))['total'] or 0
|
|
other_total_paid_wage += poultry_transactions.aggregate(total=Sum('other_share'))['total'] or 0
|
|
other_total_unpaid_wage = other_total_wage - other_total_paid_wage
|
|
|
|
shares_list.append({
|
|
"name": "دامپزشک",
|
|
"out_province_poultry_request_wage": other_out_province_poultry_request_wage,
|
|
"province_kill_request_wage": other_province_kill_request_wage,
|
|
"return_province_kill_request_wage": 0,
|
|
"free_buying_live_wage": other_free_buying_live_wage,
|
|
"free_buying_carcasses_wage": other_free_buying_carcasses_wage,
|
|
"free_sell_carcasses_wage": other_free_sell_carcasses_wage,
|
|
"total_wage": other_total_wage,
|
|
"total_paid_wage": other_total_paid_wage,
|
|
"total_unpaid_wage": other_total_unpaid_wage,
|
|
|
|
})
|
|
|
|
return {
|
|
"wage_counting_type": wage_counting_type,
|
|
"total_wage": total_price,
|
|
"total_paid_wage": total_paid_wage,
|
|
"off": off,
|
|
"total_unpaid_wage": total_price - (total_paid_wage + off),
|
|
"out_province_poultry_request_weight": out_province_poultry_request_weight,
|
|
"out_province_poultry_request_wage": out_province_poultry_request_wage,
|
|
"province_kill_requests_total_wage": total_pure_province_carcasses_price,
|
|
"province_kill_requests_total_weight": total_pure_province_carcasses_weight,
|
|
"free_bars_live_total_wage": total_out_live_buying_province_carcasses_price,
|
|
"free_bars_live_total_weight": real_total_out_live_buying_province_carcasses_weight,
|
|
"free_bars_carcases_total_wage": total_out_carcasses_buying_province_carcasses_price,
|
|
"free_bars_carcases_total_weight": total_out_carcasses_buying_province_carcasses_weight,
|
|
"free_bars_out_province_carcases_total_wage": total_out_selling_province_carcasses_price,
|
|
"free_bars_out_province_carcases_total_weight": total_out_selling_province_carcasses_weight,
|
|
"total_province_live_weight": total_province_live_weight,
|
|
"total_province_carcasses_weight": total_province_carcasses_weight,
|
|
"province_live_wage_amount": province_live_wage_amount,
|
|
"free_buying_live_weight_amount": free_buying_live_weight_amount,
|
|
"free_buying_carcesses_weight_amount": free_buying_carcesses_weight_amount,
|
|
"free_sell_carcesses_weight_amount": free_sell_carcesses_weight_amount,
|
|
"out_province_poultry_request_wage_amount": out_province_poultry_request_wage_amount,
|
|
"extra_company_amount": extra_company_amount,
|
|
"shares": shares_list,
|
|
"return_total_province_live_weight": return_total_province_live_weight,
|
|
"total_return_pure_province_carcasses_price": total_return_pure_province_carcasses_price,
|
|
}
|
|
|
|
|
|
class ParentCompanyTotalWageInformationSerializer(serializers.ModelSerializer):
|
|
wage_info = serializers.SerializerMethodField('get_wage_info')
|
|
|
|
class Meta:
|
|
model = TotalWageInformation
|
|
fields = ['key', 'wage_info']
|
|
|
|
def get_wage_info(self, obj):
|
|
shares_list = []
|
|
total_weight = 0
|
|
total_wage = 0
|
|
total_paid_wage = 0
|
|
total_wage_type = WageType.objects.filter(trash=False)
|
|
province_live_wage_amount = total_wage_type.filter(en_name='province-kill-request', trash=False).first().amount
|
|
free_buying_live_weight_amount = total_wage_type.filter(en_name='live-buy', trash=False).first().amount
|
|
free_buying_carcesses_weight_amount = total_wage_type.filter(en_name='carcasse-buy', trash=False).first().amount
|
|
free_sell_carcesses_weight_amount = total_wage_type.filter(en_name='carcasse-sell', trash=False).first().amount
|
|
out_province_poultry_request_wage_amount = total_wage_type.filter(en_name='poultry-sell-out-province',
|
|
trash=False).first().amount
|
|
|
|
kill_houses = KillHouse.objects.filter(out_province=False, trash=False).order_by('id')
|
|
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, calculate_status=True
|
|
)
|
|
kill_house_free_bar_info = KillHouseFreeBarInformation.objects.filter(kill_house__in=kill_houses,
|
|
archive_wage=False, calculate_status=True,
|
|
trash=False)
|
|
kill_house_free_sale_bar_info = KillHouseFreeSaleBarInformation.objects.filter(
|
|
kill_house__in=kill_houses,
|
|
archive_wage=False, calculate_status=True,
|
|
trash=False)
|
|
|
|
slaughter_transactions = InternalTransaction.objects.filter(
|
|
kill_house__in=kill_houses, status='completed',
|
|
trash=False)
|
|
|
|
poultry_transactions = InternalTransaction.objects.filter(
|
|
poultry__isnull=False, status='completed',
|
|
trash=False)
|
|
|
|
poultry_requests = PoultryRequest.objects.filter(trash=False, state_process__in=('pending', 'accepted'),
|
|
province_state__in=('pending', 'accepted'), out=True,
|
|
out_province_request_cancel=False, temporary_trash=False,
|
|
wage_pay=True, has_wage=True,
|
|
temporary_deleted=False)
|
|
|
|
out_province_poultry_request_weight = \
|
|
poultry_requests.aggregate(total=Sum(F('quantity') * F('Index_weight')))[
|
|
'total'] or 0
|
|
out_province_poultry_request_wage = poultry_requests.aggregate(total=Sum('total_wage_amount'))[
|
|
'total'] or 0
|
|
union_out_province_poultry_request_wage = poultry_requests.aggregate(total=Sum('union_share'))[
|
|
'total'] or 0
|
|
company_out_province_poultry_request_wage = poultry_requests.aggregate(total=Sum('company_share'))[
|
|
'total'] or 0
|
|
guilds_out_province_poultry_request_wage = poultry_requests.aggregate(total=Sum('guilds_share'))[
|
|
'total'] or 0
|
|
other_out_province_poultry_request_wage = poultry_requests.aggregate(total=Sum('other_share'))[
|
|
'total'] or 0
|
|
|
|
off = kill_houses.aggregate(total=Sum('off'))[
|
|
'total'] or 0
|
|
|
|
total_paid_wage = slaughter_transactions.aggregate(total=Sum('amount'))[
|
|
'total'] or 0
|
|
total_paid_wage += poultry_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
|
|
if wage_counting_type == 'live':
|
|
total_province_carcasses_weight = total_province_live_weight
|
|
total_pure_province_carcasses_weight = total_province_carcasses_weight
|
|
else:
|
|
|
|
total_province_carcasses_weight = total_province_live_weight * 0.75
|
|
total_out_carcasses_buying_for_pure_province_carcasses_weight = \
|
|
kill_house_free_bar_info.aggregate(total=Sum('weight_of_carcasses'))['total'] or 0
|
|
total_pure_province_carcasses_weight = total_province_carcasses_weight - get_difference_carcasses_weight(
|
|
kill_houses)
|
|
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_amount
|
|
total_out_selling_province_carcasses_price = total_out_selling_province_carcasses_weight * free_sell_carcesses_weight_amount
|
|
total_out_live_buying_province_carcasses_price = total_out_live_buying_province_carcasses_weight * free_buying_live_weight_amount
|
|
total_out_carcasses_buying_province_carcasses_price = total_out_carcasses_buying_province_carcasses_weight * free_buying_carcesses_weight_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 + out_province_poultry_request_wage
|
|
|
|
percentages_wage_type = PercentageOfWageType.objects.filter(trash=False)
|
|
union_province_kill_request_percent = percentages_wage_type.filter(wage_type__en_name='province-kill-request',
|
|
share_type__en_name='union').first().percent / 100
|
|
company_province_kill_request_percent = percentages_wage_type.filter(wage_type__en_name='province-kill-request',
|
|
share_type__en_name='company').first().percent / 100
|
|
guilds_province_kill_request_percent = percentages_wage_type.filter(wage_type__en_name='province-kill-request',
|
|
share_type__en_name='guilds').first().percent / 100
|
|
other_province_kill_request_percent = percentages_wage_type.filter(wage_type__en_name='province-kill-request',
|
|
share_type__en_name='other').first().percent / 100
|
|
|
|
union_free_buying_live_percent = percentages_wage_type.filter(wage_type__en_name='live-buy',
|
|
share_type__en_name='union').first().percent / 100
|
|
union_free_buying_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-buy',
|
|
share_type__en_name='union').first().percent / 100
|
|
company_free_buying_live_percent = percentages_wage_type.filter(wage_type__en_name='live-buy',
|
|
share_type__en_name='company').first().percent / 100
|
|
company_free_buying_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-buy',
|
|
share_type__en_name='company').first().percent / 100
|
|
guilds_free_buying_live_percent = percentages_wage_type.filter(wage_type__en_name='live-buy',
|
|
share_type__en_name='guilds').first().percent / 100
|
|
guilds_free_buying_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-buy',
|
|
share_type__en_name='guilds').first().percent / 100
|
|
other_free_buying_live_percent = percentages_wage_type.filter(wage_type__en_name='live-buy',
|
|
share_type__en_name='other').first().percent / 100
|
|
other_free_buying_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-buy',
|
|
share_type__en_name='other').first().percent / 100
|
|
|
|
union_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
|
share_type__en_name='union').first().percent / 100
|
|
company_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
|
share_type__en_name='company').first().percent / 100
|
|
guilds_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
|
share_type__en_name='guilds').first().percent / 100
|
|
other_free_sell_carcasses_percent = percentages_wage_type.filter(wage_type__en_name='carcasse-sell',
|
|
share_type__en_name='other').first().percent / 100
|
|
|
|
union_province_kill_request_wage = total_pure_province_carcasses_price * union_province_kill_request_percent
|
|
union_free_buying_live_wage = total_out_live_buying_province_carcasses_price * union_free_buying_live_percent
|
|
union_free_buying_carcasses_wage = total_out_carcasses_buying_province_carcasses_price * union_free_buying_carcasses_percent
|
|
union_free_sell_carcasses_wage = total_out_selling_province_carcasses_price * union_free_sell_carcasses_percent
|
|
union_total_wage = union_province_kill_request_wage + union_free_buying_live_wage + union_free_buying_carcasses_wage + union_free_sell_carcasses_wage + union_out_province_poultry_request_wage
|
|
union_total_paid_wage = slaughter_transactions.aggregate(total=Sum('union_share'))['total'] or 0
|
|
union_total_paid_wage += poultry_transactions.aggregate(total=Sum('union_share'))['total'] or 0
|
|
union_total_unpaid_wage = union_total_wage - union_total_paid_wage
|
|
|
|
shares_list.append({
|
|
"name": "اتحادیه",
|
|
"out_province_poultry_request_wage": union_out_province_poultry_request_wage,
|
|
"province_kill_request_wage": union_province_kill_request_wage,
|
|
"free_buying_live_wage": union_free_buying_live_wage,
|
|
"free_buying_carcasses_wage": union_free_buying_carcasses_wage,
|
|
"free_sell_carcasses_wage": union_free_sell_carcasses_wage,
|
|
"total_wage": union_total_wage,
|
|
"total_paid_wage": union_total_paid_wage,
|
|
"total_unpaid_wage": union_total_unpaid_wage,
|
|
|
|
})
|
|
|
|
company_province_kill_request_wage = total_pure_province_carcasses_price * company_province_kill_request_percent
|
|
company_free_buying_live_wage = total_out_live_buying_province_carcasses_price * company_free_buying_live_percent
|
|
company_free_buying_carcasses_wage = total_out_carcasses_buying_province_carcasses_price * company_free_buying_carcasses_percent
|
|
company_free_sell_carcasses_wage = total_out_selling_province_carcasses_price * company_free_sell_carcasses_percent
|
|
company_total_wage = company_province_kill_request_wage + company_free_buying_live_wage + company_free_buying_carcasses_wage + company_free_sell_carcasses_wage + company_out_province_poultry_request_wage
|
|
company_total_paid_wage = slaughter_transactions.aggregate(total=Sum('company_share'))['total'] or 0
|
|
company_total_paid_wage += poultry_transactions.aggregate(total=Sum('company_share'))['total'] or 0
|
|
# company_total_pure_paid_wage = company_total_paid_wage - (company_total_paid_wage * 0.08))
|
|
company_total_unpaid_wage = company_total_wage - company_total_paid_wage
|
|
|
|
shares_list.append({
|
|
"name": "شرکت",
|
|
"out_province_poultry_request_wage": company_out_province_poultry_request_wage,
|
|
"province_kill_request_wage": company_province_kill_request_wage,
|
|
"free_buying_live_wage": company_free_buying_live_wage,
|
|
"free_buying_carcasses_wage": company_free_buying_carcasses_wage,
|
|
"free_sell_carcasses_wage": company_free_sell_carcasses_wage,
|
|
"total_wage": company_total_wage,
|
|
"total_paid_wage": company_total_paid_wage,
|
|
"total_unpaid_wage": company_total_unpaid_wage,
|
|
|
|
})
|
|
|
|
guilds_province_kill_request_wage = total_pure_province_carcasses_price * guilds_province_kill_request_percent
|
|
guilds_free_buying_live_wage = total_out_live_buying_province_carcasses_price * guilds_free_buying_live_percent
|
|
guilds_free_buying_carcasses_wage = total_out_carcasses_buying_province_carcasses_price * guilds_free_buying_carcasses_percent
|
|
guilds_free_sell_carcasses_wage = total_out_selling_province_carcasses_price * guilds_free_sell_carcasses_percent
|
|
guilds_total_wage = guilds_province_kill_request_wage + guilds_free_buying_live_wage + guilds_free_buying_carcasses_wage + guilds_free_sell_carcasses_wage + guilds_out_province_poultry_request_wage
|
|
guilds_total_paid_wage = slaughter_transactions.aggregate(total=Sum('guilds_share'))['total'] or 0
|
|
guilds_total_paid_wage += poultry_transactions.aggregate(total=Sum('guilds_share'))['total'] or 0
|
|
guilds_total_unpaid_wage = guilds_total_wage - guilds_total_paid_wage
|
|
|
|
shares_list.append({
|
|
"name": "صنف پروتئین",
|
|
"out_province_poultry_request_wage": guilds_out_province_poultry_request_wage,
|
|
"province_kill_request_wage": guilds_province_kill_request_wage,
|
|
"free_buying_live_wage": guilds_free_buying_live_wage,
|
|
"free_buying_carcasses_wage": guilds_free_buying_carcasses_wage,
|
|
"free_sell_carcasses_wage": guilds_free_sell_carcasses_wage,
|
|
"total_wage": guilds_total_wage,
|
|
"total_paid_wage": guilds_total_paid_wage,
|
|
"total_unpaid_wage": guilds_total_unpaid_wage,
|
|
|
|
})
|
|
|
|
other_province_kill_request_wage = total_pure_province_carcasses_price * other_province_kill_request_percent
|
|
other_free_buying_live_wage = total_out_live_buying_province_carcasses_price * other_free_buying_live_percent
|
|
other_free_buying_carcasses_wage = total_out_carcasses_buying_province_carcasses_price * other_free_buying_carcasses_percent
|
|
other_free_sell_carcasses_wage = total_out_selling_province_carcasses_price * other_free_sell_carcasses_percent
|
|
other_total_wage = other_province_kill_request_wage + other_free_buying_live_wage + other_free_buying_carcasses_wage + other_free_sell_carcasses_wage + other_out_province_poultry_request_wage
|
|
other_total_paid_wage = slaughter_transactions.aggregate(total=Sum('other_share'))['total'] or 0
|
|
other_total_paid_wage += poultry_transactions.aggregate(total=Sum('other_share'))['total'] or 0
|
|
other_total_unpaid_wage = other_total_wage - other_total_paid_wage
|
|
|
|
shares_list.append({
|
|
"name": "دامپزشک",
|
|
"out_province_poultry_request_wage": other_out_province_poultry_request_wage,
|
|
"province_kill_request_wage": other_province_kill_request_wage,
|
|
"free_buying_live_wage": other_free_buying_live_wage,
|
|
"free_buying_carcasses_wage": other_free_buying_carcasses_wage,
|
|
"free_sell_carcasses_wage": other_free_sell_carcasses_wage,
|
|
"total_wage": other_total_wage,
|
|
"total_paid_wage": other_total_paid_wage,
|
|
"total_unpaid_wage": other_total_unpaid_wage,
|
|
|
|
})
|
|
|
|
return {
|
|
"wage_counting_type": wage_counting_type,
|
|
"total_wage": total_price,
|
|
"total_paid_wage": total_paid_wage,
|
|
"off": off,
|
|
"total_unpaid_wage": total_price - (total_paid_wage + off),
|
|
"out_province_poultry_request_weight": out_province_poultry_request_weight,
|
|
"out_province_poultry_request_wage": out_province_poultry_request_wage,
|
|
"province_kill_requests_total_wage": total_pure_province_carcasses_price,
|
|
"province_kill_requests_total_weight": total_pure_province_carcasses_weight,
|
|
"free_bars_live_total_wage": total_out_live_buying_province_carcasses_price,
|
|
"free_bars_live_total_weight": total_out_live_buying_province_carcasses_weight,
|
|
"free_bars_carcases_total_wage": total_out_carcasses_buying_province_carcasses_price,
|
|
"free_bars_carcases_total_weight": total_out_carcasses_buying_province_carcasses_weight,
|
|
"free_bars_out_province_carcases_total_wage": total_out_selling_province_carcasses_price,
|
|
"free_bars_out_province_carcases_total_weight": total_out_selling_province_carcasses_weight,
|
|
"total_province_live_weight": total_province_live_weight,
|
|
"total_province_carcasses_weight": total_province_carcasses_weight,
|
|
"province_live_wage_amount": province_live_wage_amount,
|
|
"free_buying_live_weight_amount": free_buying_live_weight_amount,
|
|
"free_buying_carcesses_weight_amount": free_buying_carcesses_weight_amount,
|
|
"free_sell_carcesses_weight_amount": free_sell_carcesses_weight_amount,
|
|
"out_province_poultry_request_wage_amount": out_province_poultry_request_wage_amount,
|
|
"shares": shares_list,
|
|
}
|
|
|
|
|
|
class CityLivestockSerializer(serializers.ModelSerializer):
|
|
address = SystemAddressSerializer(read_only=True)
|
|
user_bank_info = BankCardSerializer(required=False)
|
|
|
|
class Meta:
|
|
model = CityLivestock
|
|
fields = ['address', 'user_bank_info', 'identity_documents', 'active']
|
|
|
|
|
|
class ImprovingLivestockSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileSerializer(read_only=True)
|
|
address = SystemAddressSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = ImprovingLivestock
|
|
fields = '__all__'
|
|
|
|
|
|
class ReportSubmissionTimeSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = ReportSubmissionTime
|
|
fields = '__all__'
|
|
|
|
|
|
class ReportsSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Reports
|
|
fields = ['title', 'key', 'description']
|
|
|
|
|
|
class UserReportsForReportsUsersSerializer(serializers.ModelSerializer):
|
|
report = ReportsSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = UserReports
|
|
fields = ['report', 'active', 'key']
|
|
|
|
|
|
class ReportsUsersSerializer(serializers.ModelSerializer):
|
|
user_reports = serializers.SerializerMethodField('get_user_reports')
|
|
|
|
class Meta:
|
|
model = ReportsUsers
|
|
fields = '__all__'
|
|
|
|
def get_user_reports(self, obj):
|
|
user_reports = UserReports.objects.filter(user=obj).order_by('id')
|
|
serializer = UserReportsForReportsUsersSerializer(user_reports, many=True)
|
|
return serializer.data
|
|
|
|
|
|
class UserReportsSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = UserReports
|
|
fields = '__all__'
|
|
|
|
|
|
class MovingTextDashboardStatusSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = MovingTextDashboardStatus
|
|
fields = ['active']
|
|
|
|
|
|
class MovingTextRoleSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = MovingTextRole
|
|
fields = '__all__'
|
|
|
|
|
|
class MovingTextRoleForMovingTextWithRoleSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = MovingTextRole
|
|
fields = ['role']
|
|
|
|
|
|
class MovingTextWithRoleForMovingTextSerializer(serializers.ModelSerializer):
|
|
role = serializers.SerializerMethodField('get_role')
|
|
|
|
class Meta:
|
|
model = MovingTextWithRole
|
|
fields = ['key', 'active', 'role']
|
|
|
|
def get_role(self, obj):
|
|
return obj.role.role
|
|
|
|
|
|
class MovingTextSerializer(serializers.ModelSerializer):
|
|
roles = serializers.SerializerMethodField('get_roles')
|
|
|
|
class Meta:
|
|
model = MovingText
|
|
fields = ['key', 'id', 'moving_text', 'active', 'roles']
|
|
|
|
def get_roles(self, obj):
|
|
moving_text_with_roles = MovingTextWithRole.objects.filter(moving_text=obj).order_by('id')
|
|
serializer = MovingTextWithRoleForMovingTextSerializer(moving_text_with_roles, many=True)
|
|
return serializer.data
|
|
|
|
|
|
class MovingTextWithRoleSerializer(serializers.ModelSerializer):
|
|
moving_text = MovingTextSerializer(read_only=True)
|
|
role = MovingTextRoleSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = MovingTextWithRole
|
|
fields = '__all__'
|
|
|
|
|
|
class MovingTextForDashboardSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = MovingText
|
|
fields = ['moving_text']
|
|
|
|
|
|
class AdminXSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileSerializer(read_only=True)
|
|
address = SystemAddressSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = AdminX
|
|
fields = '__all__'
|
|
|
|
|
|
class SupporterSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileSerializer(read_only=True)
|
|
address = SystemAddressSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = Supporter
|
|
fields = '__all__'
|
|
|
|
|
|
class ZarinPalAccountsSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = ZarinPalAccounts
|
|
fields = ['key', 'name', 'account', 'en_name']
|
|
|
|
|
|
class PoultryExportSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = PoultryExport
|
|
fields = ['key', 'allow', 'limitation_status', 'limitation']
|
|
|
|
|
|
class PoultryOutProvinceRequestSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = PoultryOutProvinceRequest
|
|
fields = ['key', 'allow', 'limitation_status', 'limitation']
|
|
|
|
|
|
class VetFarmAggregatePermissionSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = VetFarmAggregatePermission
|
|
fields = ['key', 'allow', 'limitation']
|
|
|
|
|
|
class KillHouseBarLimitationSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = KillHouseBarLimitation
|
|
fields = ['key', 'allow', 'limitation']
|
|
|
|
|
|
class ProductPricingTypeSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = ProductPricingType
|
|
fields = ['key', 'province']
|
|
|
|
|
|
class OutOfProvinceSellingCarcassesPermissionSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = OutOfProvinceSellingCarcassesPermission
|
|
fields = ['key', 'active', 'type', 'percent']
|
|
|
|
|
|
class KillHouseDistributionManagementStewardGuildSerializer(serializers.ModelSerializer):
|
|
kill_house_operator = KillHouseOperatorForAutoAllocationsSerializer(read_only=True)
|
|
distribution_info = serializers.SerializerMethodField('get_distribution_info')
|
|
|
|
class Meta:
|
|
model = KillHouse
|
|
fields = ['key', 'name', 'kill_house_operator', 'distribution_info']
|
|
|
|
def get_distribution_info(self, obj):
|
|
province_kill_requests = ProvinceKillRequest.objects.filter(
|
|
return_to_province=False, state__in=('pending', 'accepted'), first_car_allocated_quantity=0,
|
|
trash=False).order_by(
|
|
'kill_request__recive_date')
|
|
kill_house_requests = KillHouseRequest.objects.filter(
|
|
Q(killhouse_user=obj, killer__isnull=True) | Q(killer=obj), trash=False).order_by(
|
|
'kill_request__recive_date')
|
|
total_weight = kill_house_requests.aggregate(total=Sum('accepted_real_quantity'))['total'] or 0
|
|
total_weight += province_kill_requests.aggregate(total=Sum('total_killed_quantity'))['total'] or 0
|
|
dates = kill_house_requests.values_list('kill_request__recive_date__date').distinct()
|
|
province_kill_requests_dates = province_kill_requests.values_list('kill_request__recive_date__date').distinct()
|
|
kill_house_relations = KillHouseStewardGuildRelation.objects.filter(kill_house=obj, trash=False)
|
|
stewards = len(kill_house_relations.filter(steward__isnull=False))
|
|
guilds = len(kill_house_relations.filter(guild__isnull=False))
|
|
total_daily_weight = kill_house_relations.aggregate(total=Sum('allocation_limit'))['total'] or 0
|
|
optional_daily_weight = \
|
|
kill_house_relations.filter(allocation_type='optional').aggregate(total=Sum('allocation_limit'))[
|
|
'total'] or 0
|
|
force_daily_weight = \
|
|
kill_house_relations.filter(allocation_type='force').aggregate(total=Sum('allocation_limit'))['total'] or 0
|
|
|
|
return {
|
|
"stewards": stewards,
|
|
"guilds": guilds,
|
|
"total_daily_weight": total_daily_weight,
|
|
"optional_daily_weight": optional_daily_weight,
|
|
"force_daily_weight": force_daily_weight,
|
|
"kill_house_requests": len(kill_house_requests),
|
|
"total_weight": total_weight * 0.75 if total_weight > 0 else 0,
|
|
"days": len(set(dates)) + len(set(province_kill_requests_dates)),
|
|
"ave_total_daily_weight": round(total_weight / (len(set(dates)) + len(set(province_kill_requests_dates))),
|
|
2) if (len(set(dates)) + len(set(province_kill_requests_dates))) > 0 else 0,
|
|
}
|
|
|
|
|
|
class StewardDistributionManagementGuildSerializer(serializers.ModelSerializer):
|
|
kill_house_operator = KillHouseOperatorForAutoAllocationsSerializer(read_only=True)
|
|
distribution_info = serializers.SerializerMethodField('get_distribution_info')
|
|
|
|
class Meta:
|
|
model = Guilds
|
|
fields = ['key', 'name', 'kill_house_operator', 'distribution_info']
|
|
|
|
def get_distribution_info(self, obj):
|
|
allocations = StewardAllocation.objects.filter(guilds=obj, kill_house__isnull=False, trash=False).order_by('id')
|
|
total_weight = allocations.aggregate(total=Sum('real_weight_of_carcasses'))['total'] or 0
|
|
dates = allocations.values_list('date__date').distinct()
|
|
steward_relations = KillHouseStewardGuildRelation.objects.filter(steward=obj, trash=False)
|
|
guilds = len(steward_relations.filter(guild__isnull=False))
|
|
total_daily_weight = steward_relations.aggregate(total=Sum('allocation_limit'))['total'] or 0
|
|
optional_daily_weight = steward_relations.aggregate(total=Sum('allocation_limit'))['total'] or 0
|
|
force_daily_weight = steward_relations.aggregate(total=Sum('allocation_limit'))['total'] or 0
|
|
|
|
return {
|
|
"guilds": guilds,
|
|
"total_daily_weight": total_daily_weight,
|
|
"optional_daily_weight": optional_daily_weight,
|
|
"force_daily_weight": force_daily_weight,
|
|
"kill_house_requests": len(allocations),
|
|
"total_weight": total_weight,
|
|
"days": len(set(dates)),
|
|
"ave_total_daily_weight": round(total_weight / len(set(dates)), 2) if len(set(dates)) > 0 else 0,
|
|
}
|
|
|
|
|
|
class BaseOutProvinceCarcassesBuyerSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = BaseOutProvinceCarcassesBuyer
|
|
exclude = (
|
|
'id',
|
|
'create_date',
|
|
'modify_date',
|
|
'created_by',
|
|
'modified_by'
|
|
)
|
|
|
|
|
|
class BaseOutProvinceCarcassesBuyerFordispensersSerializer(serializers.ModelSerializer):
|
|
kill_houses = serializers.SerializerMethodField('get_kill_houses')
|
|
requests_info = serializers.SerializerMethodField('get_requests_info')
|
|
|
|
class Meta:
|
|
model = BaseOutProvinceCarcassesBuyer
|
|
exclude = (
|
|
'id',
|
|
'create_date',
|
|
'modify_date',
|
|
'created_by',
|
|
'modified_by'
|
|
)
|
|
|
|
def get_kill_houses(self, obj):
|
|
kill_houses = OutProvinceCarcassesBuyer.objects.filter(trash=False, buyer=obj)
|
|
kill_houses = kill_houses.values_list('Kill_house__name', flat=True).distinct() if kill_houses else []
|
|
return kill_houses
|
|
|
|
def get_requests_info(self, obj):
|
|
free_sales = KillHouseFreeSaleBarInformation.objects.filter(trash=False, buyer__buyer=obj)
|
|
|
|
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
|
|
|
|
return {
|
|
"number_of_requests": len(free_sales),
|
|
"total_quantity": total_quantity,
|
|
"total_weight": total_weight,
|
|
}
|
|
|
|
|
|
class OutProvinceCarcassesBuyerrSerializer(serializers.ModelSerializer):
|
|
type_activity = TypeActivitySerializer(read_only=True)
|
|
Kill_house = KillHouseForAutoAllocationSerializer(read_only=True)
|
|
steward = GeneralGuildsSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = OutProvinceCarcassesBuyer
|
|
exclude = (
|
|
'id',
|
|
'create_date',
|
|
'modify_date',
|
|
'created_by',
|
|
'modified_by'
|
|
)
|
|
|
|
|
|
class OutProvinceCarcassesBuyerForChoosingBuyerSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = OutProvinceCarcassesBuyer
|
|
fields = ['key', 'fullname', 'mobile', 'unit_name', 'city', 'province']
|
|
|
|
|
|
class OutProvinceCarcassesBuyerForBuyerRequestSerializer(serializers.ModelSerializer):
|
|
# type_activity = TypeActivitySerializer(read_only=True)
|
|
Kill_house = KillHouseForAutoAllocationSerializer(read_only=True)
|
|
# steward = GeneralGuildsSerializer(read_only=True)
|
|
buyer = BaseOutProvinceCarcassesBuyerSerializer(read_only=True)
|
|
requests_info = serializers.SerializerMethodField('get_requests_info')
|
|
|
|
class Meta:
|
|
model = OutProvinceCarcassesBuyer
|
|
exclude = (
|
|
'id',
|
|
'create_date',
|
|
'modify_date',
|
|
'created_by',
|
|
'modified_by'
|
|
)
|
|
|
|
def get_requests_info(self, obj):
|
|
role = self.context.get('request').GET['role']
|
|
total_quantity = 0
|
|
total_weight = 0
|
|
total_weight = 0
|
|
if role == 'KillHouse':
|
|
free_sales = KillHouseFreeSaleBarInformation.objects.filter(trash=False, buyer=obj)
|
|
else:
|
|
free_sales = StewardFreeSaleBarInformation.objects.filter(trash=False, buyer=obj)
|
|
|
|
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
|
|
|
|
return {
|
|
"number_of_requests": len(free_sales),
|
|
"total_quantity": total_quantity,
|
|
"total_weight": total_weight,
|
|
}
|
|
|
|
|
|
class KillHousePricePermissionSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = KillHousePricePermission
|
|
fields = ['allow']
|
|
|
|
|
|
class AutomaticDirectBuyingPermissionSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = AutomaticDirectBuyingPermission
|
|
fields = '__all__'
|
|
|
|
|
|
class ProductsTransactionsSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = ProductsTransactions
|
|
fields = '__all__'
|
|
|
|
|
|
class NewPosMachineTransactionsSerializer(serializers.ModelSerializer):
|
|
products = serializers.SerializerMethodField('get_products')
|
|
|
|
class Meta:
|
|
model = PosMachineTransactions
|
|
fields = '__all__'
|
|
|
|
def get_products(self, obj):
|
|
transactions = ProductsTransactions.objects.filter(transaction=obj, trash=False)
|
|
serializer = ProductsTransactionsSerializer(transactions, many=True)
|
|
return serializer.data
|
|
|
|
|
|
class PosMachineTransactionsForLiveStockSerializer(serializers.ModelSerializer):
|
|
products = serializers.SerializerMethodField('get_products')
|
|
shares = serializers.SerializerMethodField('get_shares')
|
|
pos = POSMachineForLiveStockTransactionsSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = PosMachineTransactions
|
|
fields = '__all__'
|
|
|
|
def get_products(self, obj):
|
|
transactions = ProductsTransactions.objects.filter(transaction=obj, trash=False)
|
|
serializer = ProductsTransactionsSerializer(transactions, many=True)
|
|
return serializer.data
|
|
|
|
def get_shares(self, obj):
|
|
product_transaction = ProductsTransactions.objects.get(
|
|
trash=False,
|
|
live_stack_products__isnull=False,
|
|
transaction=obj
|
|
)
|
|
|
|
total_union_price = 0
|
|
total_company_price = 0
|
|
|
|
additional_data = json.loads(obj.additional)
|
|
for share in additional_data.get('shares', []):
|
|
share_price = int(share.get('price', 0))
|
|
if share.get('name') == 'union':
|
|
total_union_price = share_price * product_transaction.cur_weight
|
|
else:
|
|
total_company_price = share_price * product_transaction.cur_weight
|
|
total_cooperative_price = additional_data.get('cooperative_price', 0)
|
|
cur_heavy = additional_data.get('cur_heavy', 0)
|
|
cur_light = additional_data.get('cur_light', 0)
|
|
weight = product_transaction.cur_weight
|
|
|
|
dict_result = {
|
|
'totalCooperativePrice': total_cooperative_price,
|
|
'totalUnionPrice': total_union_price,
|
|
'totalCompanyPrice': total_company_price,
|
|
'curHeavy': cur_heavy,
|
|
'curLight': cur_light,
|
|
'curWeight': weight,
|
|
}
|
|
return dict_result
|
|
|
|
|
|
class PosMachineTransactionsSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = PosMachineTransactions
|
|
fields = '__all__'
|
|
|
|
|
|
class PosMachineTransactionsForInspectionSerializer(serializers.ModelSerializer):
|
|
pos = POSMachineForTransactionInspectionsSerializer(read_only=True)
|
|
product = RolesProductsForInspectionSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = PosMachineTransactions
|
|
fields = '__all__'
|
|
|
|
|
|
class PosAllocationTransactionsSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = PosAllocationTransactions
|
|
fields = '__all__'
|
|
|
|
# cart = serializers.CharField(allow_null=True, allow_blank=True, required=False)
|
|
# refnum = serializers.CharField(allow_null=True, allow_blank=True, required=False)
|
|
# terminal = serializers.CharField(allow_null=True, allow_blank=True,required=False)
|
|
# additional = serializers.CharField(allow_null=True, allow_blank=True,required=False)
|
|
|
|
|
|
class BroadcastPriceSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = BroadcastPrice
|
|
fields = ['active', 'kill_house_price', 'steward_price', 'guild_price']
|
|
|
|
|
|
class OutProvinceSaleLimitationSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = OutProvinceSaleLimitation
|
|
fields = ['active', 'kill_house', 'steward', 'guild']
|
|
|
|
|
|
class ParentCompanySerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileSerializer(read_only=True)
|
|
address = SystemAddressSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = ParentCompany
|
|
fields = '__all__'
|
|
|
|
|
|
class CityGuildSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileSerializer(read_only=True)
|
|
address = SystemAddressSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = CityGuild
|
|
fields = '__all__'
|
|
|
|
|
|
class CityGuildForSubSectorSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForGuildSerializer(read_only=True)
|
|
wage_info = serializers.SerializerMethodField('get_wage_info')
|
|
|
|
class Meta:
|
|
model = CityGuild
|
|
fields = ['key', 'user', 'wage_info']
|
|
|
|
def get_wage_info(self, obj):
|
|
total_wage_type = WageType.objects.filter(trash=False)
|
|
province_live_wage_amount = total_wage_type.filter(en_name='province-kill-request', trash=False).first().amount
|
|
percentages_wage_type = PercentageOfWageType.objects.filter(trash=False)
|
|
other_province_kill_request_percent = percentages_wage_type.filter(
|
|
wage_type__en_name='province-kill-request', share_type__en_name='other').first().percent / 100
|
|
if self.context.get('request').GET.get('date1'):
|
|
date1 = datetime.strptime(str(self.context.get('request').GET['date1']),
|
|
'%Y-%m-%d').date()
|
|
date2 = datetime.strptime(str(self.context.get('request').GET['date2']),
|
|
'%Y-%m-%d').date()
|
|
transactions = PosMachineTransactions.objects.filter(paid=True, pos__guild__user__city=obj.user.city,
|
|
trash=False, date__date__gte=date1,
|
|
date__date__lte=date2)
|
|
allocations = StewardAllocation.objects.filter(trash=False, to_guilds__user__city=obj.user.city,
|
|
calculate_status=True, temporary_trash=False,
|
|
temporary_deleted=False, receiver_state='accepted',
|
|
date__date__gte=date1, date__date__lte=date2)
|
|
sub_transactions = SubSectorTransactions.objects.filter(trash=False, city_guild=obj, date__date__gte=date1,
|
|
date__date__lte=date2)
|
|
else:
|
|
transactions = PosMachineTransactions.objects.filter(paid=True, pos__guild__user__city=obj.user.city,
|
|
trash=False)
|
|
allocations = StewardAllocation.objects.filter(trash=False, to_guilds__user__city=obj.user.city,
|
|
calculate_status=True, temporary_trash=False,
|
|
temporary_deleted=False, receiver_state='accepted')
|
|
sub_transactions = SubSectorTransactions.objects.filter(trash=False, city_guild=obj)
|
|
allocations_weight = allocations.aggregate(total=Sum('real_weight_of_carcasses'))[
|
|
'total'] or 0
|
|
|
|
transactions_weight = transactions.aggregate(total=Sum('weight'))[
|
|
'total'] or 0
|
|
transactions_weight = transactions_weight / 1000 if transactions_weight > 0 else 0
|
|
total_wage = transactions_weight * (province_live_wage_amount * other_province_kill_request_percent)
|
|
|
|
sub_transactions_amount = sub_transactions.aggregate(total=Sum('amount'))[
|
|
'total'] or 0
|
|
remain_wage = total_wage - sub_transactions_amount
|
|
|
|
result = {
|
|
"buy_weight": allocations_weight,
|
|
"sell_weight": transactions_weight,
|
|
"total_wage": total_wage,
|
|
"guild_deposit": sub_transactions_amount,
|
|
"remain_wage": remain_wage
|
|
}
|
|
return result
|
|
|
|
|
|
class CityGuildForSubsectorTransactionSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForGuildSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = CityGuild
|
|
fields = ['key', 'user']
|
|
|
|
|
|
class VetForSubSectorTransactionsSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForGuildSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = Vet
|
|
fields = ['key', 'user']
|
|
|
|
|
|
class SubSectorTransactionsSerializer(serializers.ModelSerializer):
|
|
city_operator = CityOperatorForSubSectorTransactionsSerializer(read_only=True)
|
|
vet = VetForSubSectorTransactionsSerializer(read_only=True)
|
|
city_guild = CityGuildForSubsectorTransactionSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = SubSectorTransactions
|
|
fields = '__all__'
|
|
|
|
|
|
class PosSegmentationSerializer(serializers.ModelSerializer):
|
|
buyer = serializers.SerializerMethodField('get_buyer')
|
|
|
|
class Meta:
|
|
model = PosSegmentation
|
|
fields = ['key', 'buyer', 'date', 'weight', 'production_date', 'distribution_type', 'amount', 'total_amount',
|
|
'sale_type', 'quota']
|
|
|
|
# def get_buyer(self, obj):
|
|
# buyer = obj.guild
|
|
# type = 'guild'
|
|
# return {
|
|
# "fullname": buyer.user.fullname,
|
|
# "mobile": buyer.user.mobile,
|
|
# "shop": buyer.guilds_name,
|
|
# "type": type,
|
|
#
|
|
# }
|
|
def get_buyer(self, obj):
|
|
buyer = obj.guild if obj.guild else obj.kill_house
|
|
type = 'guild' if obj.guild else 'kill_house'
|
|
return {
|
|
"fullname": buyer.user.fullname if obj.guild else buyer.kill_house_operator.user.fullname,
|
|
"mobile": buyer.user.mobile if obj.guild else buyer.kill_house_operator.user.mobile,
|
|
"shop": buyer.guilds_name if obj.guild else buyer.name,
|
|
"type": type,
|
|
|
|
}
|
|
|
|
|
|
class AppSegmentationSerializer(serializers.ModelSerializer):
|
|
buyer = serializers.SerializerMethodField('get_buyer')
|
|
to_guild = GuildsForBroadcastManagementSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = PosSegmentation
|
|
fields = ['key', 'buyer', 'date', 'weight', 'to_guild', 'sale_type', 'quota', 'production_date', 'amount',
|
|
'total_amount']
|
|
|
|
def get_buyer(self, obj):
|
|
buyer = obj.guild if obj.guild else obj.kill_house
|
|
type = 'guild' if obj.guild else 'kill_house'
|
|
return {
|
|
"fullname": buyer.user.fullname if obj.guild else buyer.kill_house_operator.user.fullname,
|
|
"mobile": buyer.user.mobile if obj.guild else buyer.kill_house_operator.user.mobile,
|
|
"shop": buyer.guilds_name if obj.guild else buyer.name,
|
|
"type": type,
|
|
|
|
}
|
|
|
|
|
|
class GuildsPosMachineForTransactionsSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForAutoAllocationSerializer(read_only=True)
|
|
transaction = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = Guilds
|
|
fields = ['key', 'guilds_name', 'user', 'transaction']
|
|
|
|
def get_transaction(self, obj):
|
|
request = self.context.get('request')
|
|
date1, date2 = self._get_dates_from_request(request)
|
|
|
|
pos_data = self._get_pos_transaction_data(obj, date1, date2)
|
|
allocation_data = self._get_allocation_data(obj, date1, date2)
|
|
product_data = self._get_product_data(obj, allocation_data)
|
|
|
|
return {
|
|
**pos_data,
|
|
**product_data,
|
|
}
|
|
|
|
def _get_dates_from_request(self, request):
|
|
date1_str = request.GET.get('date1')
|
|
date2_str = request.GET.get('date2')
|
|
|
|
date1 = datetime.strptime(date1_str, '%Y-%m-%d').date() if date1_str else None
|
|
date2 = datetime.strptime(date2_str, '%Y-%m-%d').date() if date2_str else None
|
|
|
|
return date1, date2
|
|
|
|
def _get_pos_transaction_data(self, guild, date1, date2):
|
|
pos_transactions = PosMachineTransactions.objects.filter(
|
|
trash=False, pos__guild=guild, paid=True
|
|
)
|
|
|
|
if date1 and date2:
|
|
pos_transactions = pos_transactions.filter(
|
|
date__date__gte=date1, date__date__lte=date2
|
|
)
|
|
|
|
len_pos = pos_transactions.count()
|
|
total_price = pos_transactions.aggregate(total=Sum('price'))['total'] or 0
|
|
real_allocated_weight = pos_transactions.aggregate(total=Sum('weight'))['total'] or 0
|
|
if real_allocated_weight > 0:
|
|
real_allocated_weight = round(real_allocated_weight / 1000, 1)
|
|
|
|
return {
|
|
"len_transaction": len_pos,
|
|
"total_price": total_price,
|
|
"real_allocated_weight": real_allocated_weight,
|
|
}
|
|
|
|
def _get_allocation_data(self, guild, date1, date2):
|
|
allocations = StewardAllocation.objects.filter(
|
|
(Q(to_steward=guild) | Q(steward=guild)),
|
|
trash=False, calculate_status=True,
|
|
receiver_state__in=('pending', 'accepted')
|
|
).order_by('id')
|
|
|
|
free_sale_bars = StewardFreeSaleBarInformation.objects.filter(
|
|
(Q(guild=guild) | Q(steward=guild)), trash=False
|
|
)
|
|
|
|
if date1 and date2:
|
|
allocations = allocations.filter(date__date__gte=date1, date__date__lte=date2)
|
|
free_sale_bars = free_sale_bars.filter(date__date__gte=date1, date__date__lte=date2)
|
|
|
|
return {
|
|
"allocations": allocations,
|
|
"free_sale_bars": free_sale_bars,
|
|
}
|
|
|
|
def _get_product_data(self, guild, allocation_data):
|
|
allocations = allocation_data["allocations"]
|
|
free_sale_bars = allocation_data["free_sale_bars"]
|
|
|
|
product = RolesProducts.objects.filter(trash=False, guild=guild).first()
|
|
|
|
if product:
|
|
recive_allocation = allocations.filter(to_steward=guild, receiver_state__in=('pending', 'accepted'))
|
|
|
|
real_weight_of_carcasses = recive_allocation.aggregate(
|
|
total=Sum('real_weight_of_carcasses')
|
|
)['total'] or 0
|
|
|
|
weight_free_sale_bars = free_sale_bars.aggregate(
|
|
total=Sum('weight_of_carcasses')
|
|
)['total'] or 0
|
|
|
|
product_total_carcasses_weight = real_weight_of_carcasses + weight_free_sale_bars
|
|
|
|
return {
|
|
"product": product.name,
|
|
"total_carcasses_weight": product_total_carcasses_weight,
|
|
"total_remain_weight": product.total_remain_weight,
|
|
}
|
|
else:
|
|
return {
|
|
"product": '-',
|
|
"total_carcasses_weight": 0,
|
|
"total_remain_weight": 0,
|
|
"real_allocated_weight": 0,
|
|
}
|
|
|
|
|
|
class CooperativeForAllocationsReportSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForInspectionSerializer(read_only=True)
|
|
info = serializers.SerializerMethodField('get_info')
|
|
|
|
class Meta:
|
|
model = Cooperative
|
|
fields = ['key', 'user', 'name', 'info']
|
|
|
|
def get_info(self, obj):
|
|
products = {
|
|
"bran": "سبوس",
|
|
"barley": "جو",
|
|
"soy": "سویا",
|
|
"corn": "ذرت",
|
|
"sheep_concentrate": "کنسانتره گوسفندی",
|
|
"high_cow_concentrate": "کنسانتره گاو شیری پرتولید",
|
|
"medium_cow_concentrate": "کنسانتره گاو شیری متوسط",
|
|
"fattening_calf_concentrate": "کنسانتره گوساله پرواری",
|
|
}
|
|
name = products[self.context.get('request').GET.get('name')]
|
|
cooperative_roles = LiveStockRolseProduct.objects.get(cooperative=obj, parent_product__name=name)
|
|
product_transactions = ProductsTransactions.objects.filter(live_stack_products=cooperative_roles,
|
|
transaction__paid=True)
|
|
transactions = PosMachineTransactions.objects.filter(
|
|
pk__in=product_transactions.values_list('transaction', flat=True), trash=False)
|
|
transactions_amount = product_transactions.aggregate(
|
|
total=Sum('total_price')
|
|
)['total'] or 0
|
|
|
|
total_transactions_weight = product_transactions.aggregate(
|
|
total=Sum('cur_weight')
|
|
)['total'] or 0
|
|
|
|
total_weight = cooperative_roles.total_weight
|
|
total_receipt_weight = cooperative_roles.total_receipt_weight
|
|
total_allocated_weight = cooperative_roles.total_allocated_weight
|
|
total_remain_weight = cooperative_roles.total_remain_weight
|
|
return {
|
|
"total_transactions_price": transactions_amount,
|
|
"total_transactions_weight": total_transactions_weight,
|
|
"transactions": len(transactions),
|
|
"total_weight": total_weight,
|
|
"total_receipt_weight": total_receipt_weight,
|
|
"total_allocated_weight": total_allocated_weight,
|
|
"total_remain_weight": total_remain_weight,
|
|
}
|
|
|
|
|
|
class PriceConfirmationSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = PriceConfirmation
|
|
fields = ['key', 'poultry_status']
|
|
|
|
|
|
class CityGuildForSubSectorSerializerForExcel(serializers.ModelSerializer):
|
|
user = SystemUserProfileForGuildSerializer(read_only=True)
|
|
wage_info = serializers.SerializerMethodField('get_wage_info')
|
|
|
|
class Meta:
|
|
model = CityGuild
|
|
fields = ['key', 'user', 'wage_info']
|
|
|
|
def get_wage_info(self, obj):
|
|
total_wage_type = WageType.objects.filter(trash=False)
|
|
province_live_wage_amount = total_wage_type.filter(en_name='province-kill-request', trash=False).first().amount
|
|
percentages_wage_type = PercentageOfWageType.objects.filter(trash=False)
|
|
other_province_kill_request_percent = percentages_wage_type.filter(
|
|
wage_type__en_name='province-kill-request', share_type__en_name='other').first().percent / 100
|
|
if self.context.get('request').GET['date1']:
|
|
date1 = datetime.strptime(str(self.context.get('request').GET['date1']),
|
|
'%Y-%m-%d').date()
|
|
date2 = datetime.strptime(str(self.context.get('request').GET['date2']),
|
|
'%Y-%m-%d').date()
|
|
transactions = PosMachineTransactions.objects.filter(paid=True, pos__guild__user__city=obj.user.city,
|
|
trash=False, date__date__gte=date1,
|
|
date__date__lte=date2)
|
|
allocations = StewardAllocation.objects.filter(trash=False, to_guilds__user__city=obj.user.city,
|
|
calculate_status=True, temporary_trash=False,
|
|
temporary_deleted=False, receiver_state='accepted',
|
|
date__date__gte=date1, date__date__lte=date2)
|
|
sub_transactions = SubSectorTransactions.objects.filter(trash=False, city_guild=obj, date__date__gte=date1,
|
|
date__date__lte=date2)
|
|
else:
|
|
transactions = PosMachineTransactions.objects.filter(paid=True, pos__guild__user__city=obj.user.city,
|
|
trash=False)
|
|
allocations = StewardAllocation.objects.filter(trash=False, to_guilds__user__city=obj.user.city,
|
|
calculate_status=True, temporary_trash=False,
|
|
temporary_deleted=False, receiver_state='accepted')
|
|
|
|
sub_transactions = SubSectorTransactions.objects.filter(trash=False, city_guild=obj)
|
|
|
|
allocations_weight = allocations.aggregate(total=Sum('real_weight_of_carcasses'))[
|
|
'total'] or 0
|
|
|
|
transactions_weight = transactions.aggregate(total=Sum('weight'))[
|
|
'total'] or 0
|
|
transactions_weight = transactions_weight / 1000 if transactions_weight > 0 else 0
|
|
total_wage = transactions_weight * (province_live_wage_amount * other_province_kill_request_percent)
|
|
|
|
sub_transactions_amount = sub_transactions.aggregate(total=Sum('amount'))[
|
|
'total'] or 0
|
|
remain_wage = total_wage - sub_transactions_amount
|
|
|
|
result = {
|
|
"buy_weight": allocations_weight,
|
|
"sell_weight": transactions_weight,
|
|
"total_wage": total_wage,
|
|
"guild_deposit": sub_transactions_amount,
|
|
"remain_wage": remain_wage
|
|
}
|
|
return result
|
|
|
|
|
|
class ProductsTransactionsSerializerForExcel(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = ProductsTransactions
|
|
fields = ['name', 'cur_weight', 'cur_weight']
|
|
|
|
|
|
class PosMachineTransactionsForLiveStockSerializerForExcel(serializers.ModelSerializer):
|
|
products = serializers.SerializerMethodField('get_products')
|
|
pos = POSMachineForLiveStockTransactionsSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = PosMachineTransactions
|
|
fields = ['fullname', 'additional', 'date', 'natcode', 'mobile', 'pos', 'result', 'products', 'price']
|
|
|
|
def get_products(self, obj):
|
|
transactions = ProductsTransactions.objects.filter(transaction=obj, trash=False)
|
|
serializer = ProductsTransactionsSerializerForExcel(transactions, many=True)
|
|
return serializer.data
|
|
|
|
|
|
class CompanyBeneficiaryAccountSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = CompanyBeneficiaryAccount
|
|
fields = ['key', 'name', 'shaba', 'percent', 'in_province', 'out_province']
|
|
|
|
|
|
class POSMachineForCompanySerializer(serializers.ModelSerializer):
|
|
pos_company = serializers.SerializerMethodField('get_pos_company')
|
|
user_info = serializers.SerializerMethodField('get_user_info')
|
|
|
|
class Meta:
|
|
model = POSMachine
|
|
fields = ['pos_id', 'key', 'receiver_number', 'receiver_number', 'terminal_number', 'Lat',
|
|
'active', 'Long', 'serial', 'password', 'user_info', 'pos_company']
|
|
|
|
def get_pos_company(self, obj):
|
|
pos_company = PosCompany.objects.get(key=obj.pos_company.key, trash=False)
|
|
return pos_company.name
|
|
|
|
def get_user_info(self, obj):
|
|
if obj.kill_house:
|
|
dict_info = {
|
|
'name': obj.kill_house.name,
|
|
'mobile': obj.kill_house.kill_house_operator.user.mobile,
|
|
'fullname': obj.kill_house.kill_house_operator.user.fullname,
|
|
'national_code': obj.kill_house.kill_house_operator.user.national_code,
|
|
'type': 'کشتارگاه',
|
|
}
|
|
elif obj.guild:
|
|
dict_info = {
|
|
'name': obj.guild.guilds_name,
|
|
'mobile': obj.guild.user.mobile,
|
|
'fullname': obj.guild.user.fullname,
|
|
'national_code': obj.guild.user.national_code,
|
|
'type': 'صنف',
|
|
}
|
|
else:
|
|
dict_info = {
|
|
'name': obj.cooperative.name,
|
|
'mobile': obj.cooperative.user.mobile,
|
|
'fullname': obj.cooperative.user.fullname,
|
|
'national_code': obj.cooperative.user.national_code,
|
|
'type': 'سامانه دام',
|
|
}
|
|
return dict_info
|
|
|
|
|
|
class POSDeviceSessionForCompanySerializer(serializers.ModelSerializer):
|
|
pos = POSMachineForCompanySerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = POSDeviceSession
|
|
fields = ['key', 'name', 'serial', 'password', 'session_create_date', 'session_last_seen_date', 'pos']
|
|
|
|
|
|
class ProteinGuildSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileSerializer(read_only=True)
|
|
address = SystemAddressSerializer(read_only=True)
|
|
user_bank_info = BankCardSerializer(required=False)
|
|
|
|
class Meta:
|
|
model = ProteinGuild
|
|
fields = ['key', 'user', 'address', 'user_bank_info']
|
|
|
|
|
|
class PosCompanyForPosVersionSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = PosCompany
|
|
fields = ['id', 'active', 'name', 'en_name', 'trash', 'key']
|
|
|
|
|
|
class PosDeviceVersionForOneCompanySerializer(serializers.ModelSerializer):
|
|
company = PosCompanyForPosVersionSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = PosDeviceVersion
|
|
fields = ["key", "trash", "name", "id", "code", "description", "enable", "remove", "company"]
|
|
|
|
|
|
class CommonlyUsedSerializer(serializers.ModelSerializer):
|
|
kill_house = KillHouseForCommonlyUsedSerializer(read_only=True)
|
|
guild = GuildsForBroadcastManagementSerializer(read_only=True)
|
|
steward = GuildsForBroadcastManagementSerializer(read_only=True)
|
|
exclusive = serializers.SerializerMethodField('get_exclusive')
|
|
|
|
class Meta:
|
|
model = CommonlyUsed
|
|
fields = ["key", "kill_house", "guild", "steward", "exclusive"]
|
|
|
|
def get_exclusive(self, obj):
|
|
if obj.kill_house:
|
|
kill_house = obj.kill_house
|
|
|
|
guild_ids = list(kill_house.guild_kill_houses.values_list('id', flat=True))
|
|
steward_ids = list(kill_house.steward_kill_houses.values_list('id', flat=True))
|
|
|
|
combined_ids = guild_ids + steward_ids
|
|
else:
|
|
steward = obj.steward
|
|
guild_ids = list(steward.guild_stewards.all().values_list('id', flat=True))
|
|
combined_ids = guild_ids
|
|
|
|
guilds_exist = Guilds.objects.filter(
|
|
id__in=combined_ids,
|
|
trash=False,
|
|
active=True
|
|
).exists()
|
|
|
|
return guilds_exist
|
|
|
|
|
|
class GetAllGuildsSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForPoultryLocSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = Guilds
|
|
fields = ['key', 'guilds_name', 'user']
|
|
|
|
|
|
class GuildsForGeneralConfigsSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForPoultryLocSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = Guilds
|
|
exclude = (
|
|
'id',
|
|
'create_date',
|
|
'modify_date',
|
|
'trash',
|
|
'created_by',
|
|
'modified_by',
|
|
'address',
|
|
'user_bank_info',
|
|
'wallet',
|
|
'guild_area_activity',
|
|
'guild_type_activity',
|
|
'cars',
|
|
'kill_house',
|
|
'steward_kill_house',
|
|
'stewards',
|
|
'user_level',
|
|
|
|
)
|
|
|
|
|
|
class PercentageDropLimitationSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = PercentageDropLimitation
|
|
fields = ['key', 'kill_house_limit_percent_down', 'kill_house_limit_percent_up']
|
|
|
|
|
|
class UploadImageLimitationSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = UploadImageLimitation
|
|
fields = ['key', 'kill_house_allocation', 'kill_house_free_sale', 'steward_allocation', 'steward_free_sale']
|
|
|
|
|
|
class ApkInfoSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = ApkInfo
|
|
fields = ['key', 'info', 'download_link']
|
|
|
|
|
|
class DirectBuyingVerificationSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = DirectBuyingVerification
|
|
fields = ['key', 'poultry_code_mandatory', 'payment_deadline', 'payment_deadline_days']
|
|
|
|
|
|
class FinePermissionSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = FinePermission
|
|
fields = ['key', 'name', 'start_time', 'end_time', 'fine_coefficient', 'fine']
|
|
|
|
|
|
class ShowMarketRequestSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = ShowMarketRequest
|
|
fields = ['key', 'allow', 'start_time', 'end_time']
|
|
|
|
|
|
class IndexWeightCategorySerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = IndexWeightCategory
|
|
fields = ['key', 'name', 'min_value', 'max_value']
|
|
|
|
|
|
class GuildsGeneralConfigsSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = GuildsGeneralConfigs
|
|
fields = '__all__'
|
|
|
|
|
|
class PoultryScienceSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForPoultryScienceWithoutRoleSerializer(read_only=True)
|
|
poultry = PoultryDetailForPoultryScienceSerializer(read_only=True, many=True)
|
|
|
|
class Meta:
|
|
model = PoultryScience
|
|
fields = '__all__'
|
|
|
|
|
|
class PoultryScienceForReportSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForPoultryScienceWithoutRoleSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = PoultryScience
|
|
fields = '__all__'
|
|
|
|
|
|
class PoultryScienceReportSerializer(serializers.ModelSerializer):
|
|
poultry_science = PoultryScienceForReportSerializer(read_only=True)
|
|
hatching = PoultryHatchingForPoultryAndHatchingForPoultryScienceSerializer(read_only=True)
|
|
user = SystemUserProfileForPoultryScienceWithoutRoleSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = PoultryScienceReport
|
|
fields = '__all__'
|
|
|
|
|
|
class AllowRegisterCodeForGuildsSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = AllowRegisterCodeForGuilds
|
|
fields = '__all__'
|
|
|
|
|
|
class StewardAppLoginSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = StewardAppLogin
|
|
fields = '__all__'
|
|
|
|
|
|
class StewardRequestSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = StewardRequest
|
|
fields = '__all__'
|
|
|
|
|
|
class RestrictionCarcassDistributionSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = RestrictionCarcassDistribution
|
|
fields = '__all__'
|
|
|
|
|
|
class AllowRegisterCodeForKillHouseFreeSaleBarInformationSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = AllowRegisterCodeForKillHouseFreeSaleBarInformation
|
|
fields = '__all__'
|
|
|
|
|
|
class AllowRegisterCodeForStewardFreeSaleBarInformationSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = AllowRegisterCodeForStewardFreeSaleBarInformation
|
|
fields = '__all__'
|
|
|
|
|
|
class LimitationForDirectPurchaseAndBarInformationSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = LimitationForDirectPurchaseAndBarInformation
|
|
fields = '__all__'
|
|
|
|
|
|
class GuildsPosMachineForTransactionsNewSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForAutoAllocationSerializer(read_only=True)
|
|
transaction = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = Guilds
|
|
fields = ['key', 'guilds_name', 'user', 'transaction', 'guilds_id', 'license_number', 'type_activity',
|
|
'area_activity']
|
|
|
|
def get_transaction(self, obj):
|
|
request = self.context.get('request')
|
|
date1, date2 = self._get_dates_from_request(request)
|
|
|
|
pos_data = self._get_pos_transaction_data(obj, date1, date2)
|
|
allocation_data = self._get_allocation_data(obj, date1, date2)
|
|
product_data = self._get_product_data(obj, allocation_data)
|
|
|
|
return {
|
|
**pos_data,
|
|
**product_data,
|
|
}
|
|
|
|
def _get_dates_from_request(self, request):
|
|
date1_str = request.GET.get('date1')
|
|
date2_str = request.GET.get('date2')
|
|
|
|
date1 = datetime.strptime(date1_str, '%Y-%m-%d').date() if date1_str else None
|
|
date2 = datetime.strptime(date2_str, '%Y-%m-%d').date() if date2_str else None
|
|
|
|
return date1, date2
|
|
|
|
def _get_pos_transaction_data(self, guild, date1, date2):
|
|
pos_transactions = PosMachineTransactions.objects.filter(
|
|
trash=False, pos__guild=guild, paid=True
|
|
)
|
|
pos_segmentation = PosSegmentation.objects.filter(trash=False, guild=guild)
|
|
|
|
if date1 and date2:
|
|
pos_transactions = pos_transactions.filter(
|
|
date__date__gte=date1, date__date__lte=date2
|
|
)
|
|
pos_segmentation = pos_segmentation.filter(
|
|
date__date__gte=date1, date__date__lte=date2
|
|
)
|
|
|
|
len_pos = pos_transactions.count()
|
|
total_price = pos_transactions.aggregate(total=Sum('price'))['total'] or 0
|
|
real_allocated_weight = pos_transactions.aggregate(total=Sum('weight'))['total'] or 0
|
|
if real_allocated_weight > 0:
|
|
real_allocated_weight = round(real_allocated_weight / 1000, 1)
|
|
pos_segmentation_weight = pos_segmentation.aggregate(total=Sum('weight'))['total'] or 0
|
|
if pos_segmentation_weight > 0:
|
|
pos_segmentation_weight = round(pos_segmentation_weight / 1000, 1)
|
|
return {
|
|
"len_transaction": len_pos,
|
|
"total_price": total_price,
|
|
"real_allocated_weight": real_allocated_weight + pos_segmentation_weight,
|
|
}
|
|
|
|
def _get_allocation_data(self, guild, date1, date2):
|
|
allocations = StewardAllocation.objects.filter(
|
|
to_guilds=guild,
|
|
trash=False, calculate_status=True,
|
|
receiver_state__in=('pending', 'accepted')
|
|
).order_by('id')
|
|
|
|
# allocations = StewardAllocation.objects.filter(
|
|
# (Q(to_steward=guild) | Q(to_guilds=guild)),
|
|
# trash=False, calculate_status=True,
|
|
# receiver_state__in=('pending', 'accepted')
|
|
# ).order_by('id')
|
|
|
|
# free_sale_bars = StewardFreeSaleBarInformation.objects.filter(
|
|
# (Q(guild=guild) | Q(steward=guild)), trash=False
|
|
# )
|
|
|
|
if date1 and date2:
|
|
allocations = allocations.filter(date__date__gte=date1, date__date__lte=date2)
|
|
# free_sale_bars = free_sale_bars.filter(date__date__gte=date1, date__date__lte=date2)
|
|
|
|
return {
|
|
"allocations": allocations,
|
|
# "free_sale_bars": free_sale_bars,
|
|
}
|
|
|
|
def _get_product_data(self, guild, allocation_data):
|
|
allocations = allocation_data["allocations"]
|
|
# free_sale_bars = allocation_data["free_sale_bars"]
|
|
|
|
product = RolesProducts.objects.filter(trash=False, guild=guild).first()
|
|
|
|
if product:
|
|
recive_allocation = allocations
|
|
|
|
real_weight_of_carcasses = recive_allocation.aggregate(
|
|
total=Sum('real_weight_of_carcasses')
|
|
)['total'] or 0
|
|
|
|
# weight_free_sale_bars = free_sale_bars.aggregate(
|
|
# total=Sum('weight_of_carcasses')
|
|
# )['total'] or 0
|
|
|
|
# product_total_carcasses_weight = real_weight_of_carcasses + weight_free_sale_bars
|
|
product_total_carcasses_weight = real_weight_of_carcasses
|
|
|
|
return {
|
|
"product": product.name,
|
|
"total_carcasses_weight": product_total_carcasses_weight,
|
|
"total_remain_weight": product.total_remain_weight,
|
|
}
|
|
else:
|
|
return {
|
|
"product": '-',
|
|
"total_carcasses_weight": 0,
|
|
"total_remain_weight": 0,
|
|
"real_allocated_weight": 0,
|
|
}
|
|
|
|
|
|
# class GuildsPosMachineForTransactionsNewSerializer(serializers.ModelSerializer):
|
|
# # user = SystemUserProfileForAutoAllocationSerializer(read_only=True)
|
|
# fullname = serializers.CharField(source='user.fullname', read_only=True)
|
|
# mobile = serializers.CharField(source='user.mobile', read_only=True)
|
|
# city = serializers.CharField(source='user.city.name', read_only=True)
|
|
# transaction = serializers.SerializerMethodField()
|
|
#
|
|
# class Meta:
|
|
# model = Guilds
|
|
# fields = ['key', 'guilds_name', 'fullname','mobile','city','guilds_id','license_number','type_activity','area_activity','transaction']
|
|
#
|
|
# def get_transaction(self, obj):
|
|
# # Read precomputed map passed by the view
|
|
# precomputed = self.context.get('precomputed_transactions', {})
|
|
# # obj.id is the guild id
|
|
# data = precomputed.get(obj.id)
|
|
# if not data:
|
|
# return {
|
|
# "len_transaction": 0,
|
|
# "total_price": 0,
|
|
# "real_allocated_weight": 0,
|
|
# "product": '-',
|
|
# "total_carcasses_weight": 0,
|
|
# "total_remain_weight": 0,
|
|
# }
|
|
# return data
|
|
|
|
|
|
class WarehouseArchiveSerializer(serializers.ModelSerializer):
|
|
kill_house = KillHouseForReturnBuyingSerializer(read_only=True)
|
|
steward = GuildsForStewardMenueSerializer(read_only=True)
|
|
guild = GuildsForStewardMenueSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = WarehouseArchive
|
|
fields = '__all__'
|
|
|
|
|
|
class SmsRecipientSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = SmsRecipient
|
|
fields = ['id', 'phone_number', 'name', 'is_active', 'create_date', 'modify_date']
|
|
read_only_fields = ['id', 'create_date', 'modify_date']
|
|
|
|
|
|
class TotalStewardRemainWeightSerializer(serializers.ModelSerializer):
|
|
info = serializers.SerializerMethodField('get_info')
|
|
|
|
class Meta:
|
|
model = Guilds
|
|
fields = ['key', 'guilds_name', 'info']
|
|
|
|
def get_info(self, obj):
|
|
product = RolesProducts.objects.filter(guild=obj, trash=False, name='مرغ گرم').first()
|
|
archives = WarehouseArchive.objects.filter(Q(steward=obj) | Q(guild=obj), trash=False)
|
|
guild_steward_allocations = StewardAllocation.objects.filter(
|
|
Q(guilds=obj) | Q(to_guilds=obj) | Q(steward=obj) | Q(to_steward=obj),
|
|
trash=False, calculate_status=True, warehouse=True, steward_warehouse=True
|
|
)
|
|
output_steward_allocations = guild_steward_allocations.filter(Q(guilds=obj) | Q(steward=obj))
|
|
input_steward_allocations = guild_steward_allocations.filter(Q(to_guilds=obj) | Q(to_steward=obj))
|
|
|
|
steward_free_bar_informations = StewardFreeBarInformation.objects.filter(
|
|
steward=obj, trash=False, temporary_trash=False, temporary_deleted=False, warehouse=True
|
|
)
|
|
steward_free_Sale_bar_informations = StewardFreeSaleBarInformation.objects.filter(
|
|
steward=obj, trash=False, temporary_trash=False, temporary_deleted=False, warehouse=True
|
|
)
|
|
segmentations = PosSegmentation.objects.filter(guild=obj, trash=False, warehouse=True)
|
|
transactions = ProductsTransactions.objects.filter(product=product, transaction__paid=True, trash=False,
|
|
warehouse=True)
|
|
|
|
days_set = set()
|
|
days_set.update(input_steward_allocations.values_list('date__date', flat=True))
|
|
days_set.update(output_steward_allocations.values_list('production_date__date', flat=True))
|
|
days_set.update(steward_free_bar_informations.values_list('date__date', flat=True))
|
|
days_set.update(steward_free_Sale_bar_informations.values_list('production_date__date', flat=True))
|
|
days_set.update(segmentations.values_list('production_date__date', flat=True))
|
|
days_set.update(transactions.values_list('transaction__date__date', flat=True))
|
|
days_set.update(archives.values_list('date__date', flat=True))
|
|
days_set = {day for day in days_set if day is not None}
|
|
|
|
days = sorted(days_set)
|
|
today = datetime.now().date()
|
|
yesterday = today - timedelta(days=1)
|
|
two_days_ago = yesterday - timedelta(days=1)
|
|
date_list = [two_days_ago, yesterday, two_days_ago]
|
|
|
|
governmental_list = []
|
|
free_list = []
|
|
final_dict = {}
|
|
|
|
for day in days:
|
|
input_steward_allocations_info = input_steward_allocations.aggregate(
|
|
total_input_allocations_governmental_weight=Sum('real_weight_of_carcasses',
|
|
filter=Q(receiver_state='accepted',
|
|
quota='governmental', date__date=day)),
|
|
total_input_allocations_free_weight=Sum('real_weight_of_carcasses',
|
|
filter=Q(receiver_state='accepted', quota='free',
|
|
date__date=day))
|
|
)
|
|
output_steward_allocations_info = output_steward_allocations.aggregate(
|
|
total_output_allocations_governmental_weight=Sum('real_weight_of_carcasses',
|
|
filter=Q(quota='governmental',
|
|
production_date__date=day)),
|
|
total_output_allocations_free_weight=Sum('real_weight_of_carcasses',
|
|
filter=Q(quota='free', production_date__date=day))
|
|
)
|
|
steward_free_bar_info = steward_free_bar_informations.aggregate(
|
|
total_free_bar_weight=Sum('weight_of_carcasses', filter=Q(date__date=day)),
|
|
)
|
|
steward_free_Sale_bar_info = steward_free_Sale_bar_informations.aggregate(
|
|
total_free_Sale_bar_governmental_weight=Sum('weight_of_carcasses',
|
|
filter=Q(quota='governmental', production_date__date=day)),
|
|
total_free_Sale_bar_free_weight=Sum('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_input_steward_allocations_governmental_weight = input_steward_allocations_info[
|
|
'total_input_allocations_governmental_weight'] or 0
|
|
total_input_steward_allocations_free_weight = input_steward_allocations_info[
|
|
'total_input_allocations_free_weight'] or 0
|
|
total_steward_free_buying_bars_weight = steward_free_bar_info['total_free_bar_weight'] or 0
|
|
total_output_steward_allocations_governmental_weight = output_steward_allocations_info[
|
|
'total_output_allocations_governmental_weight'] or 0
|
|
total_output_steward_allocations_free_weight = output_steward_allocations_info[
|
|
'total_output_allocations_free_weight'] or 0
|
|
total_steward_free_sale_bars_governmental_weight = steward_free_Sale_bar_info[
|
|
'total_free_Sale_bar_governmental_weight'] or 0
|
|
total_steward_free_sale_bars_free_weight = steward_free_Sale_bar_info[
|
|
'total_free_Sale_bar_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_input_steward_allocations_governmental_weight
|
|
total_free_input = total_input_steward_allocations_free_weight + total_steward_free_buying_bars_weight
|
|
total_governmental_output = total_output_steward_allocations_governmental_weight + total_steward_free_sale_bars_governmental_weight + segmentations_governmental_weight + int(
|
|
pos_governmental_allocated_weight / 1000)
|
|
total_free_output = total_output_steward_allocations_free_weight + total_steward_free_sale_bars_free_weight + segmentations_free_weight + int(
|
|
pos_free_allocated_weight / 1000)
|
|
|
|
governmental_amount = (
|
|
total_governmental_input - total_governmental_output) - archives_governmental_weight
|
|
free_amount = (total_free_input - total_free_output) - archives_free_weight
|
|
|
|
governmental_data = {
|
|
'day': day,
|
|
'amount': governmental_amount,
|
|
}
|
|
free_data = {
|
|
'day': day,
|
|
'amount': free_amount,
|
|
}
|
|
|
|
if day not in date_list:
|
|
|
|
if governmental_amount > 0:
|
|
governmental_list.append(governmental_data)
|
|
if free_amount > 0:
|
|
free_list.append(free_data)
|
|
|
|
final_dict['governmental'] = governmental_list
|
|
final_dict['free'] = free_list
|
|
|
|
return (final_dict)
|
|
|
|
|
|
# class TotalStewardRemainWeightSerializer(serializers.ModelSerializer):
|
|
# info = serializers.SerializerMethodField()
|
|
#
|
|
# class Meta:
|
|
# model = Guilds
|
|
# fields = [
|
|
# 'id',
|
|
# 'guilds_name',
|
|
# 'user',
|
|
# 'steward',
|
|
# 'total_remain_warehouse_weight',
|
|
# 'info',
|
|
# ]
|
|
#
|
|
# def get_info(self, obj):
|
|
# precomputed = self.context.get('precomputed_data', {})
|
|
# data = precomputed.get(obj.id, {})
|
|
#
|
|
# governmental = data.get('governmental', [])
|
|
# free = data.get('free', [])
|
|
#
|
|
# return {
|
|
# 'governmental': [
|
|
# {'day': item['day'], 'amount': float(item['amount'])} for item in governmental
|
|
# ],
|
|
# 'free': [
|
|
# {'day': item['day'], 'amount': float(item['amount'])} for item in free
|
|
# ],
|
|
# }
|
|
|
|
|
|
class TotalGuildStewardWarehouseArchiveDashboardSerializer(serializers.ModelSerializer):
|
|
info = serializers.SerializerMethodField('get_info')
|
|
|
|
class Meta:
|
|
model = Guilds
|
|
fields = ['key', 'guilds_name', 'info']
|
|
|
|
def get_info(self, obj):
|
|
date1 = self.context.get('date1')
|
|
date2 = self.context.get('date2')
|
|
owner_type = self.context.get('owner_type')
|
|
if date1:
|
|
if owner_type == 'steward':
|
|
archives = WarehouseArchive.objects.filter(trash=False, steward=obj, create_date__date__gte=date1,
|
|
create_date__date__lte=date2)
|
|
else:
|
|
archives = WarehouseArchive.objects.filter(trash=False, guild=obj, create_date__date__gte=date1,
|
|
create_date__date__lte=date2)
|
|
|
|
else:
|
|
if owner_type == 'steward':
|
|
archives = WarehouseArchive.objects.filter(trash=False, steward=obj)
|
|
else:
|
|
archives = WarehouseArchive.objects.filter(trash=False, guild=obj)
|
|
|
|
archives_info = archives.aggregate(
|
|
total_count=Count('id'),
|
|
total_governmental_count=Count('id', filter=Q(quota='governmental')),
|
|
total_free_count=Count('id', filter=Q(quota='free')),
|
|
total_weight=Sum('weight'),
|
|
total_governmental_weight=Sum('weight', filter=Q(quota='governmental')),
|
|
total_free_weight=Sum('weight', filter=Q(quota='free')),
|
|
)
|
|
|
|
total_count = archives_info['total_count'] or 0
|
|
total_governmental_count = archives_info['total_governmental_count'] or 0
|
|
total_free_count = archives_info['total_free_count'] or 0
|
|
total_weight = archives_info['total_weight'] or 0
|
|
total_governmental_weight = archives_info['total_governmental_weight'] or 0
|
|
total_free_weight = archives_info['total_free_weight'] or 0
|
|
|
|
result = {
|
|
'total_count': total_count,
|
|
'total_governmental_count': total_governmental_count,
|
|
'total_free_count': total_free_count,
|
|
'total_weight': total_weight,
|
|
'total_governmental_weight': total_governmental_weight,
|
|
'total_free_weight': total_free_weight,
|
|
}
|
|
return result
|
|
|
|
|
|
class MarketDailyLimitationSerializer(serializers.ModelSerializer):
|
|
market = serializers.SerializerMethodField('get_market')
|
|
|
|
class Meta:
|
|
model = MarketDailyLimitation
|
|
fields = ['key', 'active', 'quantity', 'register_role', 'register_fullname', 'register_mobile', 'market']
|
|
|
|
def get_market(self, obj):
|
|
return market_daily_limitation_info()
|
|
|
|
|
|
class HatchingArchivePercentSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = HatchingArchivePercent
|
|
fields = ['key', 'active', 'percent']
|
|
|
|
|
|
class POSMachineTransferSerializer(serializers.Serializer):
|
|
recipient_type = serializers.ChoiceField(
|
|
choices=['owner', 'current_user', 'representative']
|
|
)
|
|
recipient_key = serializers.CharField()
|
|
|
|
def validate(self, data):
|
|
recipient_type = data['recipient_type']
|
|
key = data['recipient_key']
|
|
|
|
if recipient_type in ['owner', 'current_user']:
|
|
data['recipient'] = SystemUserProfile.objects.get(key=key, trash=False)
|
|
|
|
elif recipient_type == 'representative':
|
|
data['recipient'] = Representative.objects.get(key=key, trash=False)
|
|
|
|
return data
|
|
|
|
def save(self, **kwargs):
|
|
pos = self.context['pos']
|
|
user = self.context['request'].user
|
|
|
|
return POSTransferService.transfer(
|
|
pos=pos,
|
|
recipient_type=self.validated_data['recipient_type'],
|
|
recipient=self.validated_data['recipient'],
|
|
performed_by=user
|
|
)
|
|
|
|
|
|
class POSAccessLevelSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = POSAccessLevel
|
|
fields = '__all__'
|
|
|
|
|
|
class POSMachineReadSerializer(serializers.ModelSerializer):
|
|
access_levels = POSAccessLevelSerializer(many=True, read_only=True)
|
|
|
|
class Meta:
|
|
model = POSMachine
|
|
fields = '__all__'
|
|
|
|
|
|
class StewardForRepresentativeSerializer(serializers.ModelSerializer):
|
|
user = SystemUserProfileForGuildSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = Steward
|
|
fields = ['key', 'user', 'city']
|
|
|
|
|
|
class RepresentativeSerializer(serializers.ModelSerializer):
|
|
kill_house = KillHouseForReturnBuyingSerializer(read_only=True)
|
|
steward = StewardForRepresentativeSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = Representative
|
|
fields = '__all__'
|
|
|
|
|
|
class UserPOSMachineSerializer(serializers.ModelSerializer):
|
|
owner = SystemUserProfileForGuildSerializer(read_only=True)
|
|
current_user = SystemUserProfileForGuildSerializer(read_only=True)
|
|
current_representative = RepresentativeSerializer(read_only=True)
|
|
access_levels = POSAccessLevelSerializer(many=True, read_only=True)
|
|
|
|
class Meta:
|
|
model = POSMachine
|
|
fields = '__all__'
|