class Kendo: def __init__(self): self.util = Util() def get_combobox_from_listaempresa(self, lista_empresa): lista_items = [] for empresa in lista_empresa: lista_items.append(ItemCombo('IdEmpresa', empresa.company_id, 'NomeEmpresa', empresa.company_name)) return Combo(lista_items) def get_combobox_from_listaprojetos(self, lista_projetos): lista_items = [] for projeto in lista_projetos: lista_items.append(ItemCombo('IdProjeto', projeto.projectid, 'NomeProjeto', projeto.projectid + " - " + projeto.projectname)) return Combo(lista_items) def get_combobox_from_listatarefas(self, lista_tarefas): lista_items = [] for tarefa in lista_tarefas: lista_items.append(ItemCombo('IdTarefa', tarefa.id_tarefa, 'NomeTarefa', tarefa.id_tarefa + " - " + tarefa.nome_tarefa)) return Combo(lista_items) def get_json_kendoui(self, request, combobox): if combobox != None and len(combobox.list_items) > 0: list_items = [] if '$filter' in request.GET: filter = request.GET['$filter'] filterfunction = re.search(r"(\w*)", filter).group(1).encode("utf-8") stringfilter = re.search(r"'(.*)'", filter).group(1).encode("utf-8") combobox_filtrado = self.filtra_combo(request, filterfunction, combobox, stringfilter) if combobox_filtrado != None: combobox = combobox_filtrado for item in combobox.list_items: dict = {} dict[item.label_value] = item.value dict[item.label_text] = item.text list_items.append(dict) data = simplejson.dumps({'d':{'results':list_items, '__count' : str(len(list_items))}}) else: data = simplejson.dumps({'d':{'results':[], '__count' : '0'}}) return HttpResponse(request.GET['$callback'] + '(' + data + ')',mimetype='text/javascript;charset=utf-8') def filtra_combo(self, request, funcao, combobox, stringfiltro): if funcao == 'substringof': lista_filtrada = [] for item in combobox.list_items: if self.util.is_string_equals_ignorecase(item.text, stringfiltro): lista_filtrada.append(item) return Combo(lista_filtrada)
def __init__(self): self.util = Util()
class Pmo: def __init__(self): self.util = Util() def login(self, usuario_pmo=None, senha_pmo=None, request=None, type='complete'): if usuario_pmo == None: usuario_pmo = request.session['usuario_pmo'] senha_pmo = request.session['senha_pmo'] post_login = {'login':'******', 'username':usuario_pmo, 'password':senha_pmo, 'login.x':'13', 'login.y':'12'} r = requests.post('http://www.dscon.com.br/pmo/index.php', post_login) if type == 'complete': pagina = requests.get('http://dscon.com.br/pmo/index.php?m=projects&tab=1', cookies=r.cookies) if pagina.content.find('Usuário e/ou senha inválidos.') != -1: raise RuntimeError('Usuario ou Senha Invalidos') return LoginInfo(r.cookies, pagina) else: return r.cookies def extrairColaboradorFromPagina(self, pagina): pagina = self.util.retirar_acento(pagina.content) nome_colaborador = re.search(r'Bem-vindo (.*)</td>', pagina).group(1) nomes_bem_vindo = nome_colaborador.split(' ') colaboradores = re.findall(r"<OPTION VALUE='\d*'>[\w()\s,-\.]*", pagina) id_colaborador = '' for colaborador in colaboradores: colaborador = colaborador.replace(',','').strip() colaborador = re.sub(r'\(.*\)', '', colaborador) colaborador = colaborador.strip() nomes_colaborador = re.search(r'<OPTION VALUE=.\d*.>(.*)', colaborador).group(1) nomes_colaborador = nomes_colaborador.split(' ') intersecao = set(nomes_bem_vindo).intersection(set(nomes_colaborador)) if len(intersecao) == len(nomes_bem_vindo) == len(nomes_colaborador): id_colaborador = re.search(r'<OPTION VALUE=.(\d*).>', colaborador).group(1) return Colaborador(id_colaborador, nome_colaborador) def extrairEmpresasFromPagina(self, pagina): lista_empresas = [] empresas = re.findall(r'<option value=.company..*</option>', pagina) for i,empresa in enumerate(empresas): nome_empresa = re.search(r"bold...(.*)</option>", empresa).group(1) lista_empresas.append(Empresa(i, nome_empresa)) return lista_empresas def extrairProjetosFromPagina(self, pagina): lista_projetos = [] projetos = re.findall(r"<td width=.30%.>\n.*\n</td>.*\n.*\n.*", pagina) for projeto in projetos: nome_empresa = re.search(r"<td width..30..>\n\t(.*)\n</td>", projeto).group(1) id_projeto = re.search(r"project_id.(\d*)..onmou", projeto).group(1) nome_projeto = re.search(r"eout=.nd.....(.*)</a>", projeto).group(1) lista_projetos.append(Projeto(company_id=self.getEmpresa_id_from_nome(nome_empresa, self.lista_empresas), projectid=id_projeto, projectname=nome_projeto)) return lista_projetos def extrairTarefasFromIdProjeto(self, request, idProjeto): lista_tarefas = [] cookie = self.login(request=request, type='cookie') pagina = requests.get('http://dscon.com.br/pmo/index.php?m=projects&a=view&project_id=' + str(idProjeto), cookies=cookie).content acabou = False while acabou == False: tarefas = re.findall(r"&project_id=\d*&open_task_id=\d*\"><img", pagina) if len(tarefas) > 0: tarefa = tarefas.pop() id_projeto = re.search(r"&project_id=(\d*)&op", tarefa).group(1) open_task_id = re.search(r"&open_task_id=(\d*)\"><img", tarefa).group(1) pagina = requests.get('http://dscon.com.br/pmo/index.php?m=projects&a=view&project_id=' + id_projeto + '&open_task_id=' + open_task_id, cookies=cookie).content else: acabou = True tarefas = re.findall(r"\"> <a href=../index.php.m=tasks&a=view&task_id=.*", pagina) for tarefa in tarefas: id_tarefa = re.search(r"task_id.(\d*).log", tarefa).group(1) nome_tarefa = re.search(r"#log\" >([^<]*)", tarefa).group(1) lista_tarefas.append(Tarefa(id_tarefa, nome_tarefa)) tarefas = re.findall(r"expand.gif\" border=\"0\" /></a> <a href=../index.php.m=tasks&a=view&task_id=.*", pagina) for tarefa in tarefas: id_tarefa = re.search(r"task_id.(\d*).log", tarefa).group(1) nome_tarefa = re.search(r"<b><i>(.*)</i></b>", tarefa).group(1) lista_tarefas.append(Tarefa(id_tarefa, nome_tarefa)) return lista_tarefas def obter_projetos(self,request): cookie = self.login(request=request, type='cookie') post_projetos = {'department':'company_0'} r = requests.post('http://dscon.com.br/pmo/index.php?m=projects', post_projetos, cookies=cookie) pagina = r.content self.lista_empresas = self.extrairEmpresasFromPagina(pagina) self.lista_projetos = self.extrairProjetosFromPagina(pagina) def getEmpresa_id_from_nome(self, nome_empresa, lista_empresas): for empresa in lista_empresas: if self.util.is_string_equals_ignorecase(empresa.company_name, nome_empresa): return empresa.company_id return None
class Kendo: def __init__(self): self.util = Util() def get_combobox_from_listaempresa(self, lista_empresa): lista_items = [] for empresa in lista_empresa: lista_items.append( ItemCombo('IdEmpresa', empresa.company_id, 'NomeEmpresa', empresa.company_name)) return Combo(lista_items) def get_combobox_from_listaprojetos(self, lista_projetos): lista_items = [] for projeto in lista_projetos: lista_items.append( ItemCombo('IdProjeto', projeto.projectid, 'NomeProjeto', projeto.projectid + " - " + projeto.projectname)) return Combo(lista_items) def get_combobox_from_listatarefas(self, lista_tarefas): lista_items = [] for tarefa in lista_tarefas: lista_items.append( ItemCombo('IdTarefa', tarefa.id_tarefa, 'NomeTarefa', tarefa.id_tarefa + " - " + tarefa.nome_tarefa)) return Combo(lista_items) def get_json_kendoui(self, request, combobox): if combobox != None and len(combobox.list_items) > 0: list_items = [] if '$filter' in request.GET: filter = request.GET['$filter'] filterfunction = re.search(r"(\w*)", filter).group(1).encode("utf-8") stringfilter = re.search(r"'(.*)'", filter).group(1).encode("utf-8") combobox_filtrado = self.filtra_combo(request, filterfunction, combobox, stringfilter) if combobox_filtrado != None: combobox = combobox_filtrado for item in combobox.list_items: dict = {} dict[item.label_value] = item.value dict[item.label_text] = item.text list_items.append(dict) data = simplejson.dumps({ 'd': { 'results': list_items, '__count': str(len(list_items)) } }) else: data = simplejson.dumps({'d': {'results': [], '__count': '0'}}) return HttpResponse(request.GET['$callback'] + '(' + data + ')', mimetype='text/javascript;charset=utf-8') def filtra_combo(self, request, funcao, combobox, stringfiltro): if funcao == 'substringof': lista_filtrada = [] for item in combobox.list_items: if self.util.is_string_equals_ignorecase( item.text, stringfiltro): lista_filtrada.append(item) return Combo(lista_filtrada)