<commit_before>from pprint import pprint

from utils.functions.models import rows_to_dict_list
from utils.functions.queries import coalesce, sql_where, sql_where_none_if


def quant_estagio(
        cursor, estagio=None, ref=None, tipo=None, cor=None, tam=None,
        only=None, less=None, group=None, deposito=None):

    def monta_filtro(in_, estagios):
        filtro = ''
        if estagios is not None:
            lista_estagios = ''
            sep = ''
            for estagio in estagios:
                    lista_estagios += f'{sep}{str(estagio)}'
                    sep = ', '
            filtro = (
                f'AND l.CODIGO_ESTAGIO {in_} ({lista_estagios})')
        return filtro

    filtra_estagios = ' '.join([
        monta_filtro('IN', only),
        monta_filtro('NOT IN', less),
    ])

    filtra_estagio = sql_where_none_if('l.CODIGO_ESTAGIO', estagio, '')

    ref = coalesce(ref, '')
    filtra_ref = sql_where_none_if(
        'l.PROCONF_GRUPO', ref, '',
        operation="LIKE" if '%' in ref else "=")

    filtro_tam = sql_where_none_if('l.PROCONF_SUBGRUPO', tam, '')

    filtro_cor = sql_where_none_if('l.PROCONF_ITEM', cor, '')

    filtro_deposito = sql_where('o.DEPOSITO_ENTRADA', deposito, quote='')

    filtro_group = ''
    if group is not None:
        if group == 'o':
            filtro_group = ", o.ORDEM_PRODUCAO"
        elif group == 'op':
            filtro_group = """--
                , o.ORDEM_PRODUCAO
                , o.PEDIDO_VENDA"""

    filtro_tipo = ''
    if tipo is not None:
        if tipo == 'a':
            filtro_tipo = "AND l.PROCONF_GRUPO < 'A0000'"
        elif tipo == 'g':
            filtro_tipo = "AND l.PROCONF_GRUPO like 'A%'"
        elif tipo == 'b':
            filtro_tipo = "AND l.PROCONF_GRUPO like 'B%'"
        elif tipo == 'p':
            filtro_tipo = \
                "AND (l.PROCONF_GRUPO like 'A%' OR l.PROCONF_GRUPO like 'B%')"
        elif tipo == 'v':
            filtro_tipo = "AND l.PROCONF_GRUPO < 'C0000'"
        elif tipo == 'm':
            filtro_tipo = "AND l.PROCONF_GRUPO >= 'C0000'"

    sql = f"""
        SELECT
          sum(
            CASE WHEN (l.QTDE_DISPONIVEL_BAIXA + l.QTDE_CONSERTO) > 0
            THEN 1
            ELSE 0
            END
          ) LOTES
        , sum((l.QTDE_DISPONIVEL_BAIXA + l.QTDE_CONSERTO)) QUANT
        {filtro_group} -- filtro_group
        , l.PROCONF_NIVEL99 NIVEL
        , l.PROCONF_GRUPO REF<commit_msg>qyery quant_estagio filtro de tipo de referência utilizando sql_where<commit_after>from pprint import pprint

from utils.functions.models import rows_to_dict_list
from utils.functions.queries import coalesce, sql_where, sql_where_none_if


def quant_estagio(
        cursor, estagio=None, ref=None, tipo=None, cor=None, tam=None,
        only=None, less=None, group=None, deposito=None):

    def monta_filtro(in_, estagios):
        filtro = ''
        if estagios is not None:
            lista_estagios = ''
            sep = ''
            for estagio in estagios:
                    lista_estagios += f'{sep}{str(estagio)}'
                    sep = ', '
            filtro = (
                f'AND l.CODIGO_ESTAGIO {in_} ({lista_estagios})')
        return filtro

    filtra_estagios = ' '.join([
        monta_filtro('IN', only),
        monta_filtro('NOT IN', less),
    ])

    filtra_estagio = sql_where_none_if('l.CODIGO_ESTAGIO', estagio, '')

    ref = coalesce(ref, '')
    filtra_ref = sql_where_none_if(
        'l.PROCONF_GRUPO', ref, '',
        operation="LIKE" if '%' in ref else "=")

    filtro_tam = sql_where_none_if('l.PROCONF_SUBGRUPO', tam, '')

    filtro_cor = sql_where_none_if('l.PROCONF_ITEM', cor, '')

    filtro_deposito = sql_where('o.DEPOSITO_ENTRADA', deposito, quote='')

    filtro_group = ''
    if group is not None:
        if group == 'o':
            filtro_group = ", o.ORDEM_PRODUCAO"
        elif group == 'op':
            filtro_group = """--
                , o.ORDEM_PRODUCAO
                , o.PEDIDO_VENDA"""

    OPERATION_IDX = 0
    VALUE_IDX = 1
    tipo_params = {
        'a': ["<", "A0000"],
        'g': ["LIKE", "A%"],
        'b': ["LIKE", "B%"],
        'p': ["LIKE", ("A%", "B%")],
        'v': ["<", "C0000"],
        'm': [">=", "C0000"],
    }
    filtro_tipo = ""
    if tipo in tipo_params:
        filtro_tipo = sql_where(
            'l.PROCONF_GRUPO',
            tipo_params[tipo][VALUE_IDX],
            operation=tipo_params[tipo][OPERATION_IDX],
        )

    sql = f"""
        SELECT
          sum(
            CASE WHEN (l.QTDE_DISPONIVEL_BAIXA + l.QTDE_CONSERTO) > 0
            THEN 1
            ELSE 0
            END
          ) LOTES
        , sum((l.QTDE_DISPONIVEL_BAIXA + l.QTDE_CONSERTO)) QUANT
        {filtro_group} -- filtro_group
        , l.PROCONF_NIVEL99 NIVEL
        , l.PROCONF_GRUPO REF
{'fraction_non_alphanumeric': 0.1288596130094689, 'fraction_numerical': 0.007410456978180321, 'mean_word_length': 1.995684340320592, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 7, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3389216', 'n_tokens_mistral': 1876, 'n_tokens_neox': 1819, 'n_words': 339}