fix - pos sharing on agc bug fixed influently
This commit is contained in:
@@ -40,3 +40,14 @@ def get_all_org_type_child(org_type: OrganizationType = None) -> typing.Any:
|
|||||||
descendants.append(child)
|
descendants.append(child)
|
||||||
descendants.extend(get_all_org_type_child(child))
|
descendants.extend(get_all_org_type_child(child))
|
||||||
return descendants
|
return descendants
|
||||||
|
|
||||||
|
|
||||||
|
def get_bank_info(org):
|
||||||
|
bank = org.bank_information.first()
|
||||||
|
if not bank:
|
||||||
|
return {}
|
||||||
|
return {
|
||||||
|
"credit_card": bank.card,
|
||||||
|
"sheba": f"IR{bank.sheba}",
|
||||||
|
"account": bank.account,
|
||||||
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ VISIBILITY_MAP = {
|
|||||||
'inventoryentry': 'organization',
|
'inventoryentry': 'organization',
|
||||||
'inventoryquotasaletransaction': 'seller_organization',
|
'inventoryquotasaletransaction': 'seller_organization',
|
||||||
'device': 'assignment__client__organization',
|
'device': 'assignment__client__organization',
|
||||||
|
'rancher': 'organization',
|
||||||
|
|
||||||
# 'deviceactivationcode': 'organization',
|
# 'deviceactivationcode': 'organization',
|
||||||
# 'deviceversion': 'organization',
|
# 'deviceversion': 'organization',
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
from apps.authentication import models as auth_models
|
from apps.authentication import models as auth_models
|
||||||
|
from apps.authentication.models import Organization
|
||||||
from apps.core.models import BaseModel
|
from apps.core.models import BaseModel
|
||||||
|
|
||||||
|
|
||||||
@@ -82,6 +83,13 @@ class Herd(BaseModel):
|
|||||||
|
|
||||||
|
|
||||||
class Rancher(BaseModel):
|
class Rancher(BaseModel):
|
||||||
|
organization = models.ForeignKey(
|
||||||
|
Organization,
|
||||||
|
on_delete=models.CASCADE,
|
||||||
|
related_name='ranchers',
|
||||||
|
null=True,
|
||||||
|
help_text="connect ranchers to their specific Taavoni" # noqa
|
||||||
|
)
|
||||||
ranching_farm = models.CharField(max_length=150, null=True)
|
ranching_farm = models.CharField(max_length=150, null=True)
|
||||||
union_name = models.CharField(max_length=50, null=True, blank=True)
|
union_name = models.CharField(max_length=50, null=True, blank=True)
|
||||||
union_code = models.CharField(max_length=50, null=True, blank=True)
|
union_code = models.CharField(max_length=50, null=True, blank=True)
|
||||||
|
|||||||
@@ -225,7 +225,7 @@ class RancherViewSet(BaseViewSet, RancherDashboardService, SoftDeleteMixin, view
|
|||||||
url_name='rancher_dashboard_by_quota_usage',
|
url_name='rancher_dashboard_by_quota_usage',
|
||||||
name='rancher_dashboard_by_quota_usage'
|
name='rancher_dashboard_by_quota_usage'
|
||||||
)
|
)
|
||||||
def rancher_dashboard_by_quota_usage(self, request, pk=None):
|
def ranchers_dashboard_by_quota_usage(self, request, pk=None):
|
||||||
""" rancher dashboard """
|
""" rancher dashboard """
|
||||||
|
|
||||||
rancher = self.get_object()
|
rancher = self.get_object()
|
||||||
@@ -261,3 +261,37 @@ class RancherViewSet(BaseViewSet, RancherDashboardService, SoftDeleteMixin, view
|
|||||||
rancher=rancher
|
rancher=rancher
|
||||||
)
|
)
|
||||||
return Response(rancher_dashboard_data)
|
return Response(rancher_dashboard_data)
|
||||||
|
|
||||||
|
@action(
|
||||||
|
methods=['get'],
|
||||||
|
detail=False,
|
||||||
|
url_name='org_ranchers',
|
||||||
|
url_path='org_ranchers',
|
||||||
|
name='org_ranchers'
|
||||||
|
)
|
||||||
|
def org_ranchers(self, request):
|
||||||
|
"""
|
||||||
|
list of ranchers by organization
|
||||||
|
"""
|
||||||
|
|
||||||
|
queryset = self.get_queryset(visibility_by_org_scope=True)
|
||||||
|
|
||||||
|
page = self.paginate_queryset(queryset)
|
||||||
|
if page is not None: # noqa
|
||||||
|
serializer = product_serializers.IncentivePlanRancherSerializer(page, many=True)
|
||||||
|
return self.get_paginated_response(serializer.data)
|
||||||
|
return Response(status=status.HTTP_200_OK)
|
||||||
|
|
||||||
|
@action(
|
||||||
|
methods=['get'],
|
||||||
|
detail=False,
|
||||||
|
url_name='org_ranchers_dashboard',
|
||||||
|
url_path='org_ranchers_dashboard',
|
||||||
|
name='org_ranchers_dashboard'
|
||||||
|
)
|
||||||
|
def org_ranchers_dashboard(self, request):
|
||||||
|
"""
|
||||||
|
dashboard of ranchers report
|
||||||
|
"""
|
||||||
|
|
||||||
|
queryset = self.get_queryset(visibility_by_org_scope=True)
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
from django.urls import path, include
|
from django.urls import path, include
|
||||||
from rest_framework import routers
|
from rest_framework import routers
|
||||||
|
|
||||||
from .api import HerdViewSet, RancherViewSet
|
from .api import HerdViewSet, RancherViewSet
|
||||||
|
|
||||||
router = routers.DefaultRouter()
|
router = routers.DefaultRouter()
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import typing
|
import typing
|
||||||
|
|
||||||
|
from apps.authentication.services.service import get_bank_info
|
||||||
from apps.pos_device.models import Device, StakeHolders
|
from apps.pos_device.models import Device, StakeHolders
|
||||||
from apps.product.models import (
|
from apps.product.models import (
|
||||||
Quota,
|
Quota,
|
||||||
@@ -19,64 +20,50 @@ def pos_organizations_sharing_information(
|
|||||||
pos sharing organizations' information,
|
pos sharing organizations' information,
|
||||||
device have multiple organizations (sub_accounts) for sharing money
|
device have multiple organizations (sub_accounts) for sharing money
|
||||||
"""
|
"""
|
||||||
stake_holders = device.stake_holders.select_related('broker', 'organization').filter()
|
stake_holders_qs = (
|
||||||
|
device.stake_holders
|
||||||
|
.select_related('broker', 'organization')
|
||||||
|
.prefetch_related('organization__bank_information')
|
||||||
|
)
|
||||||
|
|
||||||
|
broker_values_qs = quota.broker_values.all()
|
||||||
|
|
||||||
|
if quota_stat and quota_stat.broker_values.exists():
|
||||||
|
broker_values_qs = broker_values_qs.filter(org_quota_stat=quota_stat)
|
||||||
|
|
||||||
|
broker_value_map = {
|
||||||
|
bv.broker_id: bv.value
|
||||||
|
for bv in broker_values_qs
|
||||||
|
}
|
||||||
|
|
||||||
|
if owner_org.type.key == 'AGC':
|
||||||
|
agc_stake_holder = (
|
||||||
|
owner_org.pos_stake_holders
|
||||||
|
.filter(holders_share_amount__org_quota_stat=quota_stat)
|
||||||
|
.select_related('device')
|
||||||
|
.first()
|
||||||
|
)
|
||||||
|
|
||||||
|
if agc_stake_holder:
|
||||||
|
stake_holders_qs = (
|
||||||
|
agc_stake_holder.device.stake_holders
|
||||||
|
.select_related('broker', 'organization')
|
||||||
|
.prefetch_related('organization__bank_information')
|
||||||
|
)
|
||||||
|
|
||||||
sharing_information_list = []
|
sharing_information_list = []
|
||||||
for item in stake_holders:
|
|
||||||
if item.broker and not owner_org.type.key == 'AGC': # if stakeholder is not an agency, it is a broker
|
for item in stake_holders_qs:
|
||||||
|
if not item.broker:
|
||||||
|
continue
|
||||||
|
|
||||||
sharing_information_list.append({
|
sharing_information_list.append({
|
||||||
"organization_name": item.organization.name,
|
"organization_name": item.organization.name,
|
||||||
"bank_account": {
|
"bank_account": get_bank_info(item.organization),
|
||||||
"credit_card": item.organization.bank_information.first().card,
|
"broker": item.broker.name,
|
||||||
"sheba": "IR" + item.organization.bank_information.first().sheba,
|
"amount": broker_value_map.get(item.broker_id),
|
||||||
"account": item.organization.bank_information.first().account,
|
|
||||||
} if item.organization.bank_information.exists() else {},
|
|
||||||
"broker": item.broker.name if item.broker else None,
|
|
||||||
"amount": quota.broker_values.filter(
|
|
||||||
broker=item.broker,
|
|
||||||
# if quota price features was edited for this organization
|
|
||||||
org_quota_stat=quota_stat if quota_stat and quota_stat.broker_values.exists() else None
|
|
||||||
).first().value if quota.broker_values.filter(broker=item.broker).exists() else None,
|
|
||||||
# """
|
|
||||||
# if we will need to get agencies share amount, we can use this bellow code
|
|
||||||
#
|
|
||||||
# # item.holders_share_amount.filter(quota_distribution=distribution).first().share_amount
|
|
||||||
# # if item.holders_share_amount.filter(quota_distribution=distribution).exists() else None
|
|
||||||
# """
|
|
||||||
"agency": False,
|
"agency": False,
|
||||||
"default_account": item.default
|
"default_account": item.default,
|
||||||
})
|
|
||||||
elif owner_org.type.key == 'AGC':
|
|
||||||
agc_stake_holder = owner_org.pos_stake_holders.filter(
|
|
||||||
holders_share_amount__org_quota_stat=quota_stat,
|
|
||||||
).first()
|
|
||||||
print(quota_stat.id)
|
|
||||||
stake_holders = agc_stake_holder.device.stake_holders.select_related(
|
|
||||||
'broker', 'organization'
|
|
||||||
).filter()
|
|
||||||
for item in stake_holders:
|
|
||||||
if item.broker: # if stakeholder is not an agency, it is a broker
|
|
||||||
sharing_information_list.append({
|
|
||||||
"organization_name": item.organization.name,
|
|
||||||
"bank_account": {
|
|
||||||
"credit_card": item.organization.bank_information.first().card,
|
|
||||||
"sheba": "IR" + item.organization.bank_information.first().sheba,
|
|
||||||
"account": item.organization.bank_information.first().account,
|
|
||||||
} if item.organization.bank_information.exists() else {},
|
|
||||||
"broker": item.broker.name if item.broker else None,
|
|
||||||
"amount": quota.broker_values.filter(
|
|
||||||
broker=item.broker,
|
|
||||||
# if quota price features was edited for this organization
|
|
||||||
org_quota_stat=quota_stat if quota_stat.broker_values.exists() else None
|
|
||||||
).first().value if quota.broker_values.filter(broker=item.broker).exists() else None,
|
|
||||||
# """
|
|
||||||
# if we will need to get agencies share amount, we can use this bellow code
|
|
||||||
#
|
|
||||||
# # item.holders_share_amount.filter(quota_distribution=distribution).first().share_amount
|
|
||||||
# # if item.holders_share_amount.filter(quota_distribution=distribution).exists() else None
|
|
||||||
# """
|
|
||||||
"agency": False,
|
|
||||||
"default_account": item.default
|
|
||||||
})
|
})
|
||||||
|
|
||||||
# if device owner is an agency organization
|
# if device owner is an agency organization
|
||||||
@@ -108,13 +95,15 @@ def agency_organization_pos_info(
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
# get agency share amount
|
# get agency share amount
|
||||||
agc_share_amount = agency.pos_stake_holders.filter(
|
agc_stake_holder = (
|
||||||
holders_share_amount__org_quota_stat=quota_stat
|
agency.pos_stake_holders
|
||||||
|
.filter(holders_share_amount__org_quota_stat=quota_stat)
|
||||||
|
.select_related('device')
|
||||||
)
|
)
|
||||||
|
|
||||||
agc_share_amount = agc_share_amount.first().holders_share_amount.filter(
|
agc_share_amount = agc_stake_holder.first().holders_share_amount.filter(
|
||||||
org_quota_stat=quota_stat
|
org_quota_stat=quota_stat
|
||||||
) if agc_share_amount.exists() else None
|
) if agc_stake_holder.exists() else None
|
||||||
|
|
||||||
agc_share_amount = agc_share_amount.first().share_amount if agc_share_amount else None
|
agc_share_amount = agc_share_amount.first().share_amount if agc_share_amount else None
|
||||||
|
|
||||||
|
|||||||
@@ -274,8 +274,13 @@ class OrganizationQuotaStatsSerializer(serializers.ModelSerializer):
|
|||||||
representation['free_sale'] = instance.quota.free_sale
|
representation['free_sale'] = instance.quota.free_sale
|
||||||
representation['pre_sale'] = instance.quota.pre_sale
|
representation['pre_sale'] = instance.quota.pre_sale
|
||||||
|
|
||||||
if instance.distributions:
|
last_distribution = (
|
||||||
representation['distribution'] = instance.distributions.all().order_by('-create_date').first().id
|
instance.distributions
|
||||||
|
.order_by('-create_date')
|
||||||
|
.first()
|
||||||
|
)
|
||||||
|
|
||||||
|
representation['distribution'] = last_distribution.id if last_distribution else None
|
||||||
|
|
||||||
if instance.quota:
|
if instance.quota:
|
||||||
representation['quota'] = {
|
representation['quota'] = {
|
||||||
|
|||||||
@@ -229,6 +229,7 @@ class OrganizationQuotaStatsViewSet(viewsets.ModelViewSet, DynamicSearchMixin, P
|
|||||||
quotas = self.queryset.filter(
|
quotas = self.queryset.filter(
|
||||||
Q(organization=organization),
|
Q(organization=organization),
|
||||||
Q(quota__is_closed=False),
|
Q(quota__is_closed=False),
|
||||||
|
Q(total_amount__gt=0),
|
||||||
(
|
(
|
||||||
Q(quota__pre_sale=True) | Q(quota__free_sale=True) | Q(inventory_received__gt=0)
|
Q(quota__pre_sale=True) | Q(quota__free_sale=True) | Q(inventory_received__gt=0)
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user