Exemple #1
0
 def __abrir_transacao(sap_session, codigo_fornecedor):
     try:
         SAPGuiElements.set_text(sap_session, ELEMENTO_CODIGO_FORNECEDOR,
                                 codigo_fornecedor)
         SAPGuiElements.set_text(sap_session, ELEMENTO_EMPRESA, '')
         SAPGuiElements.set_text(sap_session, ELEMENTO_ORGANIZACAO_COMPRAS,
                                 '')
         SAPGuiElements.marcar_elemento(sap_session, ELEMENTO_ENDERECO)
         SAPGuiElements.marcar_elemento(sap_session, ELEMENTO_CONTROLE)
         SAPGuiElements.enter(sap_session)
         SAPGuiElements.verificar_mensagem_barra_inferior(sap_session)
     except Exception as e:
         raise e
Exemple #2
0
 def pesquisar_transportador_por_codigo(sap_session, codigo_transportador):
     SAPGuiElements.set_text(
         sap_session,
         "wnd[0]/usr/tabsHEADER_TABSTRIP1/tabpTABS_OV_PR/ssubG_HEADER_SUBSCREEN1:"
         "SAPMV56A:1021/ctxtVTTK-TDLNR", codigo_transportador)
     SAPGuiElements.enter(sap_session)
     SAPGuiElements.verificar_mensagem_barra_inferior(sap_session)
     endereco_transportador = SAPGuiElements.get_text(
         sap_session, "wnd[0]/usr/tabsHEADER_TABSTRIP1/tabpTABS_OV"
         "_PR/ssubG_HEADER_SUBSCREEN1:SAPMV56A:1021/"
         "txtVTTKD-TXTSP")
     SAPTransaction.exit_transaction(sap_session)
     return True, codigo_transportador, endereco_transportador
Exemple #3
0
    def criar_remessa(sap_session, remessa, remessa_sem_transporte=False):
        try:
            ordem = remessa.itens[0].numero_ordem
            SAPTransaction.call(sap_session, 'vl01n')
            SAPGuiElements.set_text(sap_session, SHIPPING_PLACE_FIELD,
                                    SHIPPING_PLACE_VALUE)
            SAPGuiElements.set_text(sap_session, SHIPPING_ORDER_FIELD, ordem)
            SAPGuiElements.press_keyboard_keys(sap_session, "Enter")

            # verificando se houve alguma mensagem de erro.
            # Uma exceçao será lançada no caso de erro.
            SAPGuiElements.verificar_mensagem_barra_inferior(sap_session)
            SAPGuiElements.select_element(sap_session, ELEMENTO_ABA_PICKING)

            linha = 0
            for item in remessa.itens:
                item_str = VL01.__procurar_item_pelo_codigo_produto(
                    sap_session, item.produto.codigo_sap, ordem)
                VL01.__inserir_deposito(sap_session, item.produto.deposito,
                                        item_str)
                VL01.__inserir_lote(sap_session, item.produto.lote, item_str)
                VL01.__inserir_quantidade(sap_session, item.quantidade,
                                          item_str)
                VL01.__inserir_picking(sap_session, item.quantidade, item_str)
                VL01.__alterar_direitos_fiscais_se_necessario(
                    sap_session, item.produto, linha)

            VL01.__inserir_dados_cabecalho(sap_session,
                                           remessa.itens[0].produto)

            SAPGuiElements.enter(sap_session)
            # ignorando alerta de remessas parciais
            SAPGuiElements.ignorar_alerta(sap_session)

            if SAPGuiElements.verificar_mensagem_barra_inferior(sap_session):
                SAPGuiElements.enter(sap_session)

            SAPGuiElements.salvar(sap_session)

            # ignorando alerta de remessas parciais
            SAPGuiElements.ignorar_alerta(sap_session)

            # verificando se houve alguma mensagem de erro.
            mensagem = SAPGuiElements.verificar_mensagem_barra_inferior(
                sap_session)

            # retornando o número da remessa
            return VL01.extrair_numero_remessa(mensagem)

        except Exception as e:
            raise e
Exemple #4
0
    def __inserir_remessas(sap_session, remessas):
        try:
            SAPGuiElements.press_button(sap_session,
                                        ELEMENTO_BOTAO_ADICIONAR_REMESSAS)

            remover_a = remessas[0].itens[0].produto.remover_a == 1
            if remover_a:
                VT01.__remover_a(sap_session)

            SAPGuiElements.press_button(
                sap_session, ELEMENTO_BOTAO_ADICIONAR_MAIS_REMESSAS)
            cont = 0
            for remessa in remessas:
                field = ELEMENT_SHIPPING_FIELDS.format(cont)
                sap_session.findById(field).text = remessa.numero_remessa
                cont = cont + 1

            SAPGuiElements.press_button(sap_session, ELEMENT_EXECUTE_BUTTON_1)
            SAPGuiElements.press_button(sap_session, ELEMENT_EXECUTE_BUTTON_2)

            mensagem = SAPGuiElements.verificar_mensagem_barra_inferior(
                sap_session)
            total_remessas_adicionadas = "".join(re.findall("\\d*", mensagem))
            total_remessas_adicionadas = int(total_remessas_adicionadas)
            total_remessas = len(remessas)

            if total_remessas_adicionadas != total_remessas:
                raise RuntimeError('Erro ao adicionar remessas!')

        except Exception as e:
            raise e
Exemple #5
0
    def gerar_produto_remessa_pronta(sap_session, numero_remessa):
        try:
            SAPTransaction.call(sap_session, 'vl03n')
            SAPGuiElements.set_text(sap_session, ELEMENTO_CAMPO_REMESSA,
                                    numero_remessa)
            SAPGuiElements.press_keyboard_keys(sap_session, "Enter")
            SAPGuiElements.verificar_mensagem_barra_inferior(sap_session)

            remessa = Remessa(None, None)
            proximo_item = True
            c = 0
            while proximo_item:
                numero_item = SAPGuiElements.get_text(
                    sap_session, ELEMENTO_NUMERO_ITEM.format(str(c)))
                proximo_item = str(numero_item).isdigit()
                if proximo_item:
                    codigo_produto = SAPGuiElements.get_text(
                        sap_session, ELEMENTO_CODIGOS_PRODUTO.format(str(c)))
                    deposito = SAPGuiElements.get_text(
                        sap_session, ELEMENTO_DEPOSITOS.format(str(c)))
                    quantidade = SAPGuiElements.get_text(
                        sap_session, ELEMENTO_QUANTIDADES.format(str(c)))
                    lote = SAPGuiElements.get_text(
                        sap_session, ELEMENTO_LOTES.format(str(c)))

                    produto = ProdutoService.pesquisar_produto_pelo_id(
                        codigo_produto)
                    '''
                    # TODO informar ao usuario se ele deseja continuar caso lote ou deposito esteja diferente
                    if produto.lote != lote:
                        raise RuntimeError('Lote da remessa diferente do lote cadastrado para o produto {}!'
                                           .format(produto.nome))

                    if produto.deposito != deposito:
                        raise RuntimeError('Deposito da remessa diferente do deposito cadastrado para o produto {}!'
                                           .format(produto.nome))
                    '''
                    item = ItemRemessa(quantidade=quantidade,
                                       produto=produto,
                                       numero_item=numero_item)
                    remessa.itens.append(item)
                c += 1
            return remessa
        except Exception as e:
            print(e)
Exemple #6
0
    def create(sap_session, carregamento):
        try:

            VT01.__abrir_transacao(sap_session)
            VT01.__inserir_codigo_transportador(
                sap_session, carregamento.transportador.codigo_sap)
            VT01.__inserir_dados_veiculo(sap_session, carregamento.veiculo)

            if carregamento.remessas[0].itens[0].produto.inspecao_produto == 1:
                VT01.__inserir_lote_controle_produto(
                    sap_session, carregamento.lotes_qualidade[-1])
            SAPGuiElements.enter(sap_session)

            SAPGuiElements.verificar_mensagem_barra_inferior(sap_session)

            VT01.__inserir_dados_motorista(sap_session, carregamento.motorista)

            # verificando se é necessário lacres para esse produto
            tipo_lacres = carregamento.remessas[0].itens[0].produto.tipo_lacres
            if tipo_lacres != 0:
                VT01.__inserir_lacres(sap_session, tipo_lacres,
                                      carregamento.lacres)

            # verificando se há número de pedido
            if carregamento.numero_pedido:
                VT01.__inserir_pedido(sap_session, carregamento.numero_pedido)

            SAPGuiElements.enter(sap_session)

            VT01.__inserir_remessas(sap_session, carregamento.remessas)
            SAPGuiElements.press_button(sap_session, ELEMENTO_SINTESE)
            sap_session.findById(ELEMENTO_ABA_DADOS).select()
            SAPGuiElements.press_button(sap_session,
                                        ELEMENTO_ORGANIZAR_TRANSPORTE)

            SAPGuiElements.salvar(sap_session)

            message = SAPGuiElements.verificar_mensagem_barra_inferior(
                sap_session)
            transport_number = VT01.extrair_numero_transport(message)
            return transport_number

        except Exception as e:
            traceback.print_exc(file=sys.stdout)
            raise e
Exemple #7
0
    def __abrir_item_para_edicao(sap_session, linha):

        try:
            SAPGuiElements.selecionar_linha(sap_session, ELEMENTO_LINHA, linha)
            sap_session.findById("wnd[0]").sendVKey(2)
            SAPGuiElements.ignorar_alerta(sap_session)
            if SAPGuiElements.verificar_mensagem_barra_inferior(sap_session):
                SAPGuiElements.enter(sap_session)
        except Exception:
            raise RuntimeError('Erro ao inserir direitos fiscais!')
Exemple #8
0
    def __inserir_picking(sap_session, picking, linha_item):

        if picking:
            try:
                SAPGuiElements.select_element(
                    sap_session,
                    ELEMENTO_PICKINGS.split(SPLIT_STR)[0])
                SAPGuiElements.set_text(sap_session,
                                        ELEMENTO_PICKINGS.format(linha_item),
                                        picking)
            except Exception:
                if SAPGuiElements.verificar_mensagem_barra_inferior(
                        sap_session):
                    SAPGuiElements.enter(sap_session)
                raise RuntimeError('Erro ao inserir o picking!')
Exemple #9
0
    def __inserir_quantidade(sap_session, quantidade, linha_item):

        if quantidade:
            try:
                SAPGuiElements.select_element(
                    sap_session,
                    ELEMENTO_QUANTIDADES.split(SPLIT_STR)[0])
                SAPGuiElements.set_text(
                    sap_session, ELEMENTO_QUANTIDADES.format(linha_item),
                    quantidade)
            except Exception:
                if SAPGuiElements.verificar_mensagem_barra_inferior(
                        sap_session):
                    SAPGuiElements.enter(sap_session)
                raise RuntimeError('Erro ao inserir a quantidade!')
Exemple #10
0
    def __inserir_lote(sap_session, lote, linha_item):

        if lote:
            try:
                SAPGuiElements.select_element(
                    sap_session,
                    ELEMENTO_LOTES.split(SPLIT_STR)[0])
                SAPGuiElements.set_text(sap_session,
                                        ELEMENTO_LOTES.format(linha_item),
                                        lote)
            except Exception:
                if SAPGuiElements.verificar_mensagem_barra_inferior(
                        sap_session):
                    SAPGuiElements.enter(sap_session)
                raise RuntimeError('Erro ao inserir o lote!')
Exemple #11
0
    def __inserir_deposito(sap_session, deposito, linha_item):

        if deposito:
            try:
                SAPGuiElements.select_element(
                    sap_session,
                    ELEMENTO_DEPOSITOS.split(SPLIT_STR)[0])
                SAPGuiElements.set_text(sap_session,
                                        ELEMENTO_DEPOSITOS.format(linha_item),
                                        deposito)

            except Exception:
                if SAPGuiElements.verificar_mensagem_barra_inferior(
                        sap_session):
                    SAPGuiElements.enter(sap_session)
                raise RuntimeError('Erro ao inserir o depósito!')
Exemple #12
0
    def create(sap_session, lote_inspecao):
        try:
            SAPTransaction.call(sap_session, 'qa01')
            SAPGuiElements.set_text(sap_session, ELEMENTO_CODIGO_PRODUTO, lote_inspecao.material)
            SAPGuiElements.set_text(sap_session, ELEMENTO_CENTRO, CENTRO)
            SAPGuiElements.set_text(sap_session, ELEMENTO_LOTE_ORIGEM, lote_inspecao.origem)
            SAPGuiElements.press_keyboard_keys(sap_session, "Enter")

            # verificando se o lote é de inspecao de produto(89) ou de veiculo(07)
            inspecionando_produto = lote_inspecao.origem == "89"
            if inspecionando_produto:
                sap_session.findById("wnd[1]/usr/lbl[1,3]").setFocus()
                SAPGuiElements.press_keyboard_keys(sap_session, "Enter")
                SAPGuiElements.set_text(sap_session, ELEMENTO_QUANTIDADE_LOTE, QUANTIDADE_LOTES)
                SAPGuiElements.set_text(sap_session, ELEMENTO_TXT_BREVE_INSP_PRODUTO, lote_inspecao.texto_breve)
            else:
                SAPGuiElements.set_text(sap_session, ELEMENTO_TXT_BREVE_INSP_VEICULO, lote_inspecao.texto_breve)

            # o lote e o deposito sao setados agora pq caso o lote seja de inspecao de produto, o sap mostra uma
            # mensagem antes de abrir a tela do lote
            SAPGuiElements.set_text(sap_session, ELEMENTO_LOTE, lote_inspecao.lote)
            SAPGuiElements.set_text(sap_session, ELEMENTO_DEPOSITO,
                                    lote_inspecao.deposito if lote_inspecao.deposito is not None else '')

            SAPGuiElements.salvar(sap_session)

            try:
                SAPGuiElements.press_button(sap_session, OPTIONAL_CREATE)
                error_message = SAPGuiElements.get_text(sap_session, ERROR_MESSAGE_ELEMENT)
                if error_message:
                    raise RuntimeError(QA01.get_formated_error_message(error_message, lote_inspecao.texto_breve))

            except AttributeError:
                pass

            mensagem = SAPGuiElements.verificar_mensagem_barra_inferior(sap_session)
            return QA01.get_batch_controller_number(mensagem)

        except Exception as e:
            traceback.print_exc(file=sys.stdout)
            raise e
Exemple #13
0
    def __pesquisar_codigo_transportador_por_cnpj_ou_cpf(
            sap_session, criterio):
        try:
            XK03.__abrir_campo_pesquisa_por_cnpj_cpf(sap_session)
            cnpj = len(criterio) == 14
            SAPGuiElements.set_text(
                sap_session,
                ELEMENTO_PESQUISA_CNPJ if cnpj else ELEMENTO_PESQUISA_CPF,
                criterio)
            SAPGuiElements.enter(sap_session)
            msg_nenhum_resultado = SAPGuiElements.verificar_mensagem_barra_inferior(
                sap_session)
            if msg_nenhum_resultado:
                raise RuntimeError(msg_nenhum_resultado)

            SAPGuiElements.enter(sap_session)
            return SAPGuiElements.get_text(sap_session,
                                           ELEMENTO_CODIGO_FORNECEDOR)

        except Exception as e:
            traceback.print_exc(file=sys.stdout)
            raise e
Exemple #14
0
 def __inserir_codigo_transportador(sap_session, codigo_transportador):
     SAPGuiElements.set_text(sap_session, ELEMENTO_CODIGO_TRANSPORTADOR,
                             codigo_transportador)
     SAPGuiElements.enter(sap_session)
     SAPGuiElements.verificar_mensagem_barra_inferior(sap_session)
Exemple #15
0
    def consultar_saldo_cliente(sap_session, cnpj, data_inicial, data_final, produto):
        SAPTransaction.call(sap_session, 'zsd020')
        SAPGuiElements.set_text(sap_session, ELEMENTO_LOCAL_NEGOCIOS, '1014')
        SAPGuiElements.set_text(sap_session, ELEMENTO_ORGANIZACAO_VENDAS, '1000')
        SAPGuiElements.set_text(sap_session, ELEMENTO_CANAL_DISTRIBUICAO, produto.canal_distribuicao.codigo)
        SAPGuiElements.set_text(sap_session, ELEMENTO_SETOR_VENDAS, produto.setor_atividade.codigo)
        SAPGuiElements.set_text(sap_session, ELEMENTO_DATA_INICIAL, data_inicial)
        SAPGuiElements.set_text(sap_session, ELEMENTO_DATA_FINAL, data_final)
        SAPGuiElements.set_text(sap_session, ELEMENTO_CODIGO_MATERIAL, produto.codigo_sap)
        SAPGuiElements.select_element(sap_session, ELEMENTO_APENAS_ORDENS_VENDA)
        SAPGuiElements.set_checkbox(sap_session, ELEMENTO_INCLUIR_BLOQUEADAS)
        SAPGuiElements.set_focus(sap_session, ELEMENTO_EMISSOR_ORDEM)
        SAPGuiElements.send_key(sap_session, 4)

        SAPGuiElements.set_text(sap_session, ELEMENTO_CAMPO_CNPJ, cnpj)
        SAPGuiElements.enter(sap_session)
        SAPGuiElements.enter(sap_session)
        SAPGuiElements.send_key(sap_session, 8)
        if SAPGuiElements.verificar_mensagem_barra_inferior(sap_session):
            return []

        SAPGuiElements.press_button(sap_session, ELEMENTO_BOTAO_SELECIONAR_LAYOUT)
        row = 0
        while row < sap_session.findById(ELEMENTO_TABELA_LAYOUTS).RowCount:
            nome_layout = sap_session.findById(ELEMENTO_TABELA_LAYOUTS).GetCellValue(row, "TEXT")

            if nome_layout == 'KSLIMA':
                sap_session.findById(ELEMENTO_TABELA_LAYOUTS).selectedRows = row
                sap_session.findById(ELEMENTO_TABELA_LAYOUTS).setCurrentCell(row, "TEXT")
                sap_session.findById(ELEMENTO_TABELA_LAYOUTS).firstVisibleRow = row
                sap_session.findById(ELEMENTO_TABELA_LAYOUTS).clickCurrentCell()
                break
            row += 1

        row = 0
        ordens = []
        while row < sap_session.findById(ELEMENTO_TABELA_ORDENS).RowCount:
            # converterndo o número da ordem para inteiro e assim eliminar os zeros a esquerda
            numero_ordem = str(int(sap_session.findById(ELEMENTO_TABELA_ORDENS).GetCellValue(row, ELEMENTO_COLUNA_ORDEM)))
            data = sap_session.findById(ELEMENTO_TABELA_ORDENS).GetCellValue(row, ELEMENTO_COLUNA_DATA)
            cidade = sap_session.findById(ELEMENTO_TABELA_ORDENS).GetCellValue(row, ELEMENTO_COLUNA_CIDADE)
            uf = sap_session.findById(ELEMENTO_TABELA_ORDENS).GetCellValue(row, ELEMENTO_COLUNA_UF)
            cliente = sap_session.findById(ELEMENTO_TABELA_ORDENS).GetCellValue(row, ELEMENTO_COLUNA_CLIENTE)
            qtd = sap_session.findById(ELEMENTO_TABELA_ORDENS).GetCellValue(row, ELEMENTO_COLUNA_QTD_ORDEM)
            qtd_saida = sap_session.findById(ELEMENTO_TABELA_ORDENS).GetCellValue(row, ELEMENTO_COLUNA_QTD_SAIDA)
            qtd_disponivel = sap_session.findById(ELEMENTO_TABELA_ORDENS).GetCellValue(row, ELEMENTO_COLUNA_QTD_DISPONIVEL)
            material = sap_session.findById(ELEMENTO_TABELA_ORDENS).GetCellValue(row, ELEMENTO_COLUNA_MATERIAL)

            codigo_material = sap_session.findById(ELEMENTO_TABELA_ORDENS).GetCellValue(row, ELEMENTO_COLUNA_COD_MATERIAL)
            codigo_material = str(int(codigo_material))

            pedido = sap_session.findById(ELEMENTO_TABELA_ORDENS).GetCellValue(row, ELEMENTO_COLUNA_PEDIDO)
            tipo_ordem = sap_session.findById(ELEMENTO_TABELA_ORDENS).GetCellValue(row, ELEMENTO_COLUNA_TIPO_ORDEM)
            status = sap_session.findById(ELEMENTO_TABELA_ORDENS).GetCellValue(row, ELEMENTO_COLUNA_STATUS)
            cnpj = sap_session.findById(ELEMENTO_TABELA_ORDENS).GetCellValue(row, ELEMENTO_COLUNA_CNPJ)

            ordem = Ordem()
            ordem.data = data
            ordem.numero = numero_ordem
            ordem.material = material
            ordem.codigo_material = codigo_material
            ordem.cliente = cliente
            ordem.cidade = cidade
            ordem.uf = uf
            ordem.qtd = qtd
            ordem.qtd_saida = qtd_saida
            ordem.qtd_disponivel = qtd_disponivel
            ordem.pedido = pedido
            ordem.tipo = tipo_ordem
            ordem.cnpj = cnpj
            ordem.status = status

            ordens.append(ordem)

            row += 1
        return ordens