from apps.product.models import Quota, QuotaLivestockAllocation from apps.warehouse.models import InventoryEntry from apps.herd.models import Rancher import typing def get_products_in_warehouse(organization_id): """ get list of products from organization warehouse """ entries = InventoryEntry.objects.select_related( 'distribution__quota__product' ) product_objects = [ entry.distribution.quota.product for entry in entries ] return list(set(product_objects)) def quota_live_stock_allocation_info(quota: Quota) -> typing.Any: """ information of quota live stock allocations """ allocations = quota.livestock_allocations.select_related('livestock_type') if allocations: allocations_list = [{ "name": alloc.livestock_type.name, "quantity": alloc.quantity_kg, "type": alloc.livestock_type.weight_type } for alloc in allocations] return allocations_list def quota_incentive_plans_info(quota: Quota, rancher: Rancher) -> typing.Any: """ information of quota incentive plans """ incentive_plans = quota.incentive_assignments.select_related("livestock_type", "incentive_plan") if incentive_plans: incentive_plans_list = [] for plan in incentive_plans: rancher_plan = plan.incentive_plan.rancher_plans.select_related( 'rancher', 'livestock_type' ).filter(rancher=rancher, livestock_type=plan.livestock_type) incentive_plans_data = { 'name': plan.incentive_plan.name, 'heavy_value': plan.heavy_value, 'light_value': plan.light_value, 'livestock_type': plan.livestock_type.name if plan.livestock_type else "", 'livestock_weight_type': plan.livestock_type.weight_type if plan.livestock_type else "", 'quantity_kg': plan.quantity_kg, 'rancher_plan_statistic': { f'{rancher_plan.first().livestock_type.en_name}': rancher_plan.first().allowed_quantity } if rancher_plan else {} } incentive_plans_list.append(incentive_plans_data) return incentive_plans_list def quota_brokers_value(quota: Quota) -> typing.Any: """ information of quota brokers with their quota value """ brokers = quota.broker_values.select_related("broker") if brokers: broker_values_list = [{ 'name': broker.broker.name, 'amount': broker.value } for broker in brokers] return broker_values_list def quota_attribute_value(quota: Quota) -> typing.Any: """ information of quota pricing attribute values """ attributes = quota.attribute_values.select_related("attribute") if attributes: attribute_values_list = [{ 'name': attr.attribute.name, 'amount': attr.value } for attr in attributes] return attribute_values_list