fix - quota exception in distribution limit & sale licence and visibility free by org

This commit is contained in:
2025-11-02 10:59:57 +03:30
parent cca24d6f6a
commit 3b2dc4c522
10 changed files with 160 additions and 37 deletions

View File

@@ -0,0 +1,18 @@
# Generated by Django 5.0 on 2025-11-02 07:19
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('authentication', '0043_alter_user_options_alter_user_managers'),
]
operations = [
migrations.AddField(
model_name='organization',
name='free_visibility_by_scope',
field=models.BooleanField(default=False),
),
]

View File

@@ -116,6 +116,7 @@ class Organization(BaseModel):
('CI', 'City')
)
field_of_activity = models.CharField(max_length=2, choices=activity_fields, default="")
free_visibility_by_scope = models.BooleanField(default=False)
company_code = models.CharField(max_length=30, default="")
province = models.ForeignKey(
Province,

View File

@@ -0,0 +1,44 @@
import typing
from django.db.models import Q
from apps.authentication.models import Organization
from apps.core.visibility_registry import VISIBILITY_MAP
def get_visible_organizations(org: Organization) -> typing.Any:
"""
get visible organizations
"""
if org.free_visibility_by_scope:
if org.field_of_activity == 'CO':
return Organization.objects.all()
elif org.field_of_activity == 'CI':
return Organization.objects.filter(city=org.city)
elif org.field_of_activity == 'PR':
return Organization.objects.filter(province=org.province)
return Organization.objects.filter(id=org.id)
def apply_visibility_filter(queryset, org):
model_name = queryset.model.__name__.lower()
org_fields = VISIBILITY_MAP.get(model_name)
if not org_fields:
return queryset
visible_orgs = get_visible_organizations(org)
org_ids = visible_orgs.values_list('id', flat=True)
if isinstance(org_fields, str):
return queryset.filter(**{f"{org_fields}__in": org_ids})
q_obj = Q()
for field in org_fields:
q_obj |= Q(**{f"{field}__in": org_ids})
return queryset.filter(q_obj)