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, \ get_kill_houses_out_buying_info 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_live_buying_province_carcasses_weight = get_kill_houses_out_buying_info(kill_houses) 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__'