diff --git a/.env.local b/.env.local index 4ff1bc4..63983c1 100644 --- a/.env.local +++ b/.env.local @@ -7,7 +7,7 @@ ENV_NAME=DEV # Database secrets DB_HOST=31.7.78.133 DB_PORT=14352 -DB_NAME=Development +DB_NAME=Production DB_USERNAME=postgres DB_PASSWORD=pfLIVXupbDetvFMt2gUvxLXUL9b4HIOHaPcKXsBEZ1i8zl0iLUjmhUfXlGfJKcTV diff --git a/apps/herd/services/services.py b/apps/herd/services/services.py index d527c33..8cdce45 100644 --- a/apps/herd/services/services.py +++ b/apps/herd/services/services.py @@ -1,16 +1,23 @@ -from apps.livestock.models import LiveStock, TemporaryLiveStock -from decimal import Decimal +import typing + +from django.db.models import Count, Q, Value +from django.db.models import Sum +from django.db.models.functions import Coalesce + from apps.herd.models import Rancher +from apps.herd.services.rancher_service import RancherService +from apps.livestock.models import LiveStock, TemporaryLiveStock +from apps.product.models import Quota, QuotaDistribution from apps.warehouse.models import ( InventoryEntry, InventoryQuotaSaleItem ) -from django.db.models import Sum -from apps.product.models import Quota, QuotaDistribution -from apps.herd.services.rancher_service import RancherService -from django.db.models import Count, Q, Value -from django.db.models.functions import Coalesce -import typing + +LIVESTOCK_GROPES = { + 'I': 'industrial', # صنعتی + 'V': 'rural', # روستایی + 'N': 'nomadic' # عشایری +} def get_rancher_statistics(rancher: Rancher = None) -> typing.Any: @@ -87,22 +94,23 @@ def rancher_quota_weight( # calculate quota base weight by livestock type & base total weight for item in allocations: # noqa if item.livestock_type: - animal_type_fa = item.livestock_type.name - animal_type_en = item.livestock_type.en_name - per_head = item.quantity_kg - count = livestock_counts_dict.get(live_stock_meta.get(animal_type_fa), 0) + if rancher.activity and LIVESTOCK_GROPES[rancher.activity] == item.livestock_group: + animal_type_fa = item.livestock_type.name + animal_type_en = item.livestock_type.en_name + per_head = item.quantity_kg + count = livestock_counts_dict.get(live_stock_meta.get(animal_type_fa), 0) - weight = per_head * count - total_weight += weight + weight = per_head * count + total_weight += weight - if animal_type_en not in merged: - merged[animal_type_en] = { - "name_fa": animal_type_fa, - "weight": weight, - "type": item.livestock_type.weight_type - } - else: - merged[animal_type_en]['weight'] += weight + if animal_type_en not in merged: + merged[animal_type_en] = { + "name_fa": animal_type_fa, + "weight": weight, + "type": item.livestock_type.weight_type + } + else: + merged[animal_type_en]['weight'] += weight # calculate rancher incentive plans weight by livestock type & add it to total_weight for item in incentive_plans: diff --git a/apps/warehouse/pos/api/v1/serializers.py b/apps/warehouse/pos/api/v1/serializers.py index 9541a4a..7e70c8c 100644 --- a/apps/warehouse/pos/api/v1/serializers.py +++ b/apps/warehouse/pos/api/v1/serializers.py @@ -252,15 +252,16 @@ class InventoryQuotaSaleTransactionSerializer(serializers.ModelSerializer): if 'quota_distribution' in item.keys(): distribution = QuotaDistribution.objects.get(id=item.get('quota_distribution')) - # if quota has not been in sale time - if not distribution.quota.is_in_sale_licence_time(): - raise QuotaSaleTimeException() - total_sale_weight = distribution.sale_items.aggregate( - total=models.Sum('weight') - )['total'] or 0 + if not distribution.pre_sale and not distribution.free_sale: + # if quota has not been in sale time + if not distribution.quota.is_in_sale_licence_time(): + raise QuotaSaleTimeException() + total_sale_weight = distribution.sale_items.aggregate( + total=models.Sum('weight') + )['total'] or 0 - if total_sale_weight + item.get('weight') > distribution.weight: - raise DistributionWeightException() + if total_sale_weight + item.get('weight') > distribution.weight: + raise DistributionWeightException() return attrs