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
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
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
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
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)
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
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!')
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!')
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!')
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!')
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!')
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
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
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)
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