Ejemplo n.º 1
0
    def __new__(cls, load_date=load_date):

        if Foto.singleton is None or load_date != Foto.load_date:
            insumos = InsumoLog()
            df = insumos[insumos.type_file == 'FOTO'].nlargest(1, 'processed_date')
            foto = MysqlDAO().read_table('insumo_insumorastreabilidade', filters=f'id_file_id = {df.id.values[0]}')
            foto.drop(['id', 'id_file_id'], axis=1, inplace=True)

            foto['cod_cliente'] = pd.to_numeric(foto.cod_cliente.astype(pd.Int32Dtype()).astype(str).str[:-1],
                                                errors='coerce')
            foto['dat_importacao'] = pd.to_datetime(foto.dat_importacao, format='%d/%m/%Y', errors='coerce')
            foto['dat_puxada'] = pd.to_datetime(foto.dat_puxada, format='%d/%m/%Y', errors='coerce')

            foto.query(f'dat_puxada == "{load_date}"', inplace=True)

            foto = foto.merge(Dataset.load('sys_clientes'), on='cod_cliente', how='left')

            foto = foto[foto.cod_tipo_cli != 1]  # Cod 1 = Revenda

            foto['cod_cliente_orig'] = foto.cod_cliente

            foto['dsc_tipo_cliente'] = pd.to_numeric(foto.dsc_tipo_cliente, errors='coerce')  # Adicionado

            foto['cod_cliente'] = np.where(foto.dsc_tipo_cliente == 2, foto.cod_unb_comercial, foto.cod_cliente)

            foto['cod_cliente'] = pd.to_numeric(foto.cod_cliente, errors='coerce')  # Adicionado

            foto = foto[~foto.cod_tipo.isin([1, 99])]

            foto.rename(columns={
                'cod_justificativa_ca': 'cod_justificativa',
                'cod_unb_origem': 'cod_unb'
            }, inplace=True)

            foto = foto.merge(Dataset.load('sys_produtos'), suffixes=('', '_y'), on='cod_produto', how='left')
            foto = foto[foto.cod_tipo_produto.isin([1, 2, 10, 12])]

            foto = foto[~((foto.sgl_status_item == '') & (foto.sgl_status_item.isnull()))]

            # Removendo duplicados
            cols = ['num_carro', 'num_item', 'cod_produto', 'val_qtd_prod_hl', 'sgl_status_item', 'dat_puxada',
                    'num_pedido']
            foto = foto[foto.cod_cliente.notnull()].drop_duplicates(subset=cols)

            # ------
            Foto.load_date = load_date
            Foto.singleton = foto

        return Foto.singleton
Ejemplo n.º 2
0
    def __new__(cls):
        if SysUnidades.singleton is None:
            df = MysqlDAO().read_table('sys_unidades')
            df['cod_unidade'] = pd.to_numeric(df.cod_unidade, errors='coerce')
            SysUnidades.singleton = df

        return SysUnidades.singleton
Ejemplo n.º 3
0
    def __new__(cls):
        if SysProdutos.singleton is None:
            sys_produtos = MysqlDAO().read_table('sys_produtos')
            sys_produtos[
                'cod_prod_promax'] = sys_produtos.cod_prod_promax.astype(int)
            SysProdutos.singleton = sys_produtos

        return SysProdutos.singleton
Ejemplo n.º 4
0
    def __new__(cls):
        if EgVProduto.singleton is None:
            eg_v_produto = MysqlDAO().read_table('eg_v_produto')
            eg_v_produto = eg_v_produto[eg_v_produto.dat_exc.isnull(
            )].drop_duplicates(subset='cod_prod')
            # eg_v_produto = eg_v_produto.drop_duplicates(subset='cod_prod')

            EgVProduto.singleton = eg_v_produto

        return EgVProduto.singleton
Ejemplo n.º 5
0
def sns_to_sql(dt):
    cols = {
        'Cod Unidade': 'cod_fab',
        'NomeUnidade': 'nom_abr_unb',
        'Cod Unidade Orig': 'cod_cliente',
        'Regional': 'dsc_regional',
        'Cod Cliente': 'cod_cliente_orig',
        'Nome Cliente': 'nom_fantasia_cliente',
        'Geografia': 'dsc_geo',
        'Categoria': 'liquido',
        'Emb. Aberta': 'embalagem_aberta',
        'Emb. Fechada': 'embalagem_fechada',
        'CodProduto': 'cod_produto',
        'Nome Prod': 'nom_abrev_prod',
        'Data Puxada': 'dat_original',
        'Marcacao': 'marcacao',
        'NS GROSS': 'ns_gross',
        'Status Item': 'sgl_status_item',
        'Motivo': 'dsc_motivo',
        'Numero Carro': 'num_carro',
        'Cod Justificativa': 'cod_justificativa',
        'Justificativa': 'dsc_justificativa',
        'Cod Justificativa BO': 'cod_justificativa_bo',
        'Justificativa BO': 'dsc_justificativa_bo',
        'Canal Marcacao': 'canal',
        'Entrada': 'entrada',
    }

    dt = dt.loc[:, list(cols.keys())].rename(columns=cols)
    dt['business_key'] = (
                            dt['dat_original'].astype('str')+'-' +
                            dt['cod_cliente'].astype('str')+'-' +
                            dt['cod_produto'].astype('str')+'-' +
                            dt['canal'].astype('str')+'-'
                        )

    engine = MysqlDAO.create_engine()
    # salva em uma tabela temporária
    dt.to_sql('temp_saidasns', con=engine, if_exists='replace', index=False)
    engine.dispose()

    # # deleta os registros que já existem
    sql_old_data = "SET SQL_SAFE_UPDATES = 0; DELETE SNS_SAIDASNS FROM SNS_SAIDASNS INNER JOIN temp_saidasns ON SNS_SAIDASNS.BUSINESS_KEY = temp_saidasns.BUSINESS_KEY;"

    columns = ",".join(list(cols.values()))
    sql_new_data = f"INSERT INTO sns_saidasns ({columns}) \
                     SELECT {columns} FROM temp_saidasns;"

    with engine.begin() as conn:  # TRANSACTION
        conn.execute(sql_old_data)
        conn.execute(sql_new_data)
Ejemplo n.º 6
0
    def __new__(cls, load_date=load_date):

        if Promax.singleton is None or Promax.load_date != load_date:
            insumos = InsumoLog()

            d7 = Dates.back_days(load_date, days=7)

            insumos.loc[insumos.type_file == 'PROMAX', 'fixed_name'] = \
                insumos[insumos.type_file == 'PROMAX'].file_name.str.split('_').str[:2].str.join('_')

            df = insumos[insumos.type_file == 'PROMAX'].nlargest(32, 'processed_date') \
                .drop_duplicates(subset='fixed_name')

            ids = [str(s) for s in df.id.values]

            promax = MysqlDAO().read_table(
                'insumo_insumopromax',
                filters=f'id_file_id IN({",".join(ids)})')

            promax.drop(['id', 'id_file_id'], axis=1, inplace=True)

            promax['dat_pedido'] = pd.to_datetime(promax.dat_pedido,
                                                  format='%d/%m/%Y',
                                                  errors='coerce')
            promax['qtd_sku'] = pd.to_numeric(promax.qtd_sku.str.replace(
                ',', '.'),
                                              errors='coerce')
            promax = promax[(promax.dat_pedido.notnull())
                            & (promax.dat_pedido >= pd.Timestamp(d7))]

            promax['cod_unidade'] = np.where(
                promax.dsc_canal == 'Revenda',
                pd.to_numeric(promax.cod_unidade.astype(
                    pd.Int32Dtype()).astype(str).str[:-1],
                              errors='coerce'), promax.cod_unidade)

            promax['cod_produto'] = promax.cod_produto.astype(int)

            promax = promax.merge(Dataset.load('sys_produtos'),
                                  left_on='cod_produto',
                                  right_on='cod_prod_promax',
                                  how='left')

            promax['cod_produto'] = np.where(promax.cod_produto_y.notnull(),
                                             promax.cod_produto_y,
                                             promax.cod_produto_x)

            promax['dsc_motivo'] = promax.dsc_motivo.str.strip()

            promax = (promax[promax.cod_unidade.notnull()].groupby(
                [
                    'cod_unidade', 'dat_pedido', 'cod_produto', 'dsc_motivo',
                    'dsc_canal'
                ],
                as_index=False).agg({'qtd_sku': 'sum'}))

            # -----
            Promax.load_date = load_date
            Promax.singleton = promax

        return Promax.singleton
Ejemplo n.º 7
0
    def __new__(cls):
        if SysDeParaGeo.singleton is None:
            SysDeParaGeo.singleton = MysqlDAO().read_table('sys_de_para_geo')

        return SysDeParaGeo.singleton
Ejemplo n.º 8
0
    def __new__(cls):
        if BasEmbalagemGrupo.singleton is None:
            BasEmbalagemGrupo.singleton = MysqlDAO().read_table(
                'bas_embalagem_grupo')

        return BasEmbalagemGrupo.singleton
Ejemplo n.º 9
0
    def __new__(cls):
        if SysJustificativaBo.singleton is None:
            SysJustificativaBo.singleton = MysqlDAO().read_table('sys_justificativa_bo') \
                .drop_duplicates(subset='cod_justificativa')

        return SysJustificativaBo.singleton
Ejemplo n.º 10
0
    def __new__(cls, load_date=None, limit=45):

        if Malha.singleton is None or Malha.load_date != load_date:
            insumos = InsumoLog()

            cols = {
                'id_file_id': 'id_file_id',
                'CodDir': 'cod_unb_dir',
                'CodCom': 'cod_com',
                'CodFab': 'cod_fab',
                'Cod_Cliente': 'cod_cliente',
                'CodPro': 'cod_produto',
                'Semana': 'dat_puxada',
                'Tipo_Malha': 'dsc_tipo_malha',
                'Malha': 'val_malha',
                'MalhaAjustada': 'val_malha_ajustada',
                'Real': 'val_real'
            }

            limit_day = Dates.back_days(load_date, days=limit)
            df = insumos.query(f'type_file == "MALHA" and data_max >= "{limit_day}"')

            ids = [str(s) for s in df.id.values]

            malha = MysqlDAO().read_table('insumo_insumoconsolidado',
                                          columns=list(cols.keys()),
                                          filters=f'id_file_id IN({",".join(ids)})')

            malha = malha.rename(columns=cols)[cols.values()]

            malha['cod_cliente'] = malha.cod_cliente.str.replace('-.*', '', regex=True).astype(int)
            malha['dat_puxada'] = pd.to_datetime(malha.dat_puxada, format='%d/%m/%Y')
            malha['dsc_tipo_malha'] = malha.dsc_tipo_malha.apply(lambda x: x.strip()[:4])
            malha[['val_malha', 'val_malha_ajustada', 'val_real']] = \
                malha[['val_malha', 'val_malha_ajustada', 'val_real']].replace(',', '.', regex=True).astype(float)

            malha.query(f'dat_puxada >= "{limit_day}" and val_malha != 0', inplace=True)
            malha.sort_values('id_file_id', ascending=False, inplace=True)

            malha.drop('id_file_id', axis=1, inplace=True)

            # Removendo duplicados na Malha - (Só para Alocação Normal AS IS)
            malha.drop_duplicates(subset=['cod_cliente', 'cod_produto', 'dat_puxada'], inplace=True)

            # ----------------------
            Malha.load_date = load_date
            Malha.singleton = malha

        return Malha.singleton
Ejemplo n.º 11
0
    def __new__(cls):
        if VProdutoTipoEmb.singleton is None:
            VProdutoTipoEmb.singleton = MysqlDAO().read_table('v_produto_tipo_emb')

        return VProdutoTipoEmb.singleton
Ejemplo n.º 12
0
    def __new__(cls):
        if SysMotivos.singleton is None:
            SysMotivos.singleton = MysqlDAO().read_table('sys_motivos')

        return SysMotivos.singleton
Ejemplo n.º 13
0
    def __new__(cls):
        if BasEmbalagemAberta.singleton is None:
            BasEmbalagemAberta.singleton = MysqlDAO().read_table(
                'bas_embalagem_aberta')

        return BasEmbalagemAberta.singleton
Ejemplo n.º 14
0
    def __new__(cls):
        if SysClientes.singleton is None:
            SysClientes.singleton = MysqlDAO().read_table('sys_clientes')

        return SysClientes.singleton
Ejemplo n.º 15
0
    def __new__(cls):
        if BasEmbalagemFechada.singleton is None:
            BasEmbalagemFechada.singleton = MysqlDAO().read_table(
                'bas_embalagem_fechada')

        return BasEmbalagemFechada.singleton
Ejemplo n.º 16
0
    def __new__(cls):
        if EgVUnidadeBasica.singleton is None:
            EgVUnidadeBasica.singleton = MysqlDAO().read_table(
                'eg_v_unidade_basica')

        return EgVUnidadeBasica.singleton
Ejemplo n.º 17
0
    def __new__(cls):
        if EgCliente.singleton is None:
            EgCliente.singleton = MysqlDAO().read_table('eg_cliente')

        return EgCliente.singleton
Ejemplo n.º 18
0
    def __new__(cls):
        if BasRegionalUnidade.singleton is None:
            BasRegionalUnidade.singleton = MysqlDAO().read_table(
                'bas_regional_unidade')

        return BasRegionalUnidade.singleton