Untitled

 avatar
unknown
plain_text
5 months ago
5.5 kB
4
Indexable
from typing import List, Optional

from sqlalchemy import or_
from sqlalchemy.orm import Session, joinedload

from app.graphql.schema import Info
from app.graphql.types.field_detail_type import FieldDetailType
from app.graphql.types.product_type import (
    CountryType,
    ProductFieldType,
    ProductType,
    StatusType,
    TherapeuticType,
)
from app.models import Product, User


async def product_data(
    self, info: Info, user: str = None, page: int = 1, rows: int = 10
) -> List[ProductType]:
    session: Session = info.context.session
    try:
        # Fetch user details
        user_obj = session.query(User)
        if user:
            user_obj = user_obj.filter_by(login=user).first()
        if not user_obj:
            return "User not found"
        # Get associated countries and therapeutic areas
        country_ids = [uc.country_id for uc in user_obj.users_countries]
        ta_ids = [ut.ta_id for ut in user_obj.users_therapeutics]
        print(f"IDs: {country_ids}, {ta_ids}")
        # Apply filters on Product records
        products_query = session.query(Product).filter(Product.is_deleted != 2)
        print(f"Products after is_deleted filter: {products_query.count()}")
        products_query = products_query.filter(
            or_(
                Product.last_active > 0,
                Product.current_record == 1,
                Product.is_deleted == 1,
            )
        )
        print(f"Products after last active filter: {products_query.count()}")
        if country_ids:
            products_query = products_query.filter(Product.country_id.in_(country_ids))
        print(f"Products after country filter: {products_query.count()}")
        if ta_ids:
            products_query = products_query.filter(Product.th_area.in_(ta_ids))
        print(f"Products after therapeutic area filter: {products_query.count()}")
        products = products_query.options(
            joinedload(Product.status),
            joinedload(Product.users_country),
            joinedload(Product.therapeutic),
            joinedload(Product.product_fields),
        ).all()

        # Construct product response
        response = []
        for product in products:
            product_fields = [
                ProductFieldType(
                    id=pf.id,
                    record_id=pf.record_id,  # Corrected to use product_field_id
                    field_id=pf.field_id,
                    field_value=pf.field_value,  # Set field_value as max_field_value
                    field_detail=FieldDetailType(
                        id=pf.field_detail.id,
                        name=pf.field_detail.name,
                        label=pf.field_detail.label,
                        type=pf.field_detail.type,
                        order=pf.field_detail.order,
                        field_format=pf.field_detail.format,
                        validation_id=pf.field_detail.validation_id,
                        options=pf.field_detail.options,
                        rcvd_from_reltio=pf.field_detail.rcvd_frm_reltio,
                        is_dynamic=pf.field_detail.is_dynamic,
                        is_active=pf.field_detail.is_active,
                        is_editable=pf.field_detail.is_editable,
                        is_deleted=pf.field_detail.is_deleted,
                        is_visible=pf.field_detail.is_visible,
                        is_downstream=pf.field_detail.is_downstream,
                        is_published=pf.field_detail.is_published,
                        default_option=pf.field_detail.default_option,
                        created_date=pf.field_detail.created_date,
                        created_by_id=pf.field_detail.created_by_id,
                        updated_by_id=pf.field_detail.updated_by_id,
                    ),
                )
                for pf in product.product_fields
            ]

            response.append(
                ProductType(
                    id=product.id,
                    janssen_mstr_prdct_nm=product.janssen_mstr_prdct_nm,
                    product_phase=product.product_phase,
                    jnj_full_compound_id=product.jnj_full_compound_id,
                    generic_name=product.generic_name,
                    jnj_flag=product.jnj_flag,
                    product_status=product.product_status,
                    current_record=product.current_record,
                    last_active=product.last_active,
                    created_date=product.created_date,
                    updated_date=product.updated_date,
                    mdm_id=product.mdm_id,
                    series_id=product.series_id,
                    country_id=product.country_id,
                    product_name=product.product_name,
                    request_status_id=product.request_status_id,
                    is_deleted=product.is_deleted,
                    created_by_id=product.created_by_id,
                    updated_by_id=product.updated_by_id,
                    reltio_id=product.reltio_id,
                    group_type=product.group_type,
                    th_area=product.th_area,
                    ta_sub_type=product.ta_sub_type,
                )
            )
        print("RESPONSE: ", response)

        return response

    finally:
        session.close()
Editor is loading...
Leave a Comment