def renderDados(self):
		# já tenho os mesu dois acumuladores, quero é populá-los com clubes e árbitros
		lista_clubes = listas.get_lista_clubes()
		hash_clubes = {}
		lista_arbitros = listas.get_lista_arbitros()
		hash_arbitros = {}

		for clube in lista_clubes:
			hash_clubes[clube.key().id()] = clube
		for arbitro in lista_arbitros:
			hash_arbitros[arbitro.key().id()] = arbitro
	
		# preparar a tabela de icc		
		
		tabela_icc = self.acumulador_tabela_icc.acuc_content["tabela_icc"]
		for idx, val in enumerate(tabela_icc):
			if tabela_icc[idx].has_key("arb"):
				if hash_arbitros.has_key(tabela_icc[idx]["arb"]):
					tabela_icc[idx]["arbitro"] = hash_arbitros[tabela_icc[idx]["arb"]]
			if tabela_icc[idx].has_key("clus"):
				for idx2, va2 in enumerate(tabela_icc[idx]["clus"]):
					if (hash_clubes.has_key(tabela_icc[idx]["clus"][idx2]["clu"])):
						tabela_icc[idx]["clus"][idx2]["clube"] = hash_clubes[tabela_icc[idx]["clus"][idx2]["clu"]]

		# obter a lista de clubes pela qual está ordenada a tabela_icc
		
		clubes = []
		if len(tabela_icc) > 0:
			for idx, val in enumerate(tabela_icc[0]["clus"]):
				clubes.append(val["clube"])

		# preparar o gráfico de icc
		grafico_icc = self.acumulador_icc.acuc_content["icc"]
		for idx, val in enumerate(grafico_icc):
			grafico_icc[idx]["clube"] = hash_clubes[grafico_icc[idx]["clu"]]

		# preparar o gráfico de ica
		grafico_ica = self.acumulador_ica.acuc_content["ica"]
		for idx, val in enumerate(grafico_ica):
			grafico_ica[idx]["arbitro"] = hash_arbitros[grafico_ica[idx]["arb"]]

		if len(grafico_ica) > 16: 
			list_1 = grafico_ica[:8]
			list_2 = grafico_ica[-8:]
			for el in list_2:
				list_1.append(el)
			grafico_ica = list_1

		dados = {
		"clubes_tabela_icc":clubes,
		"tabela_icc":tabela_icc,
		"grafico_icc":grafico_icc,
		"grafico_ica":grafico_ica
		}
		return dados
Beispiel #2
0
	def get(self, objname):
		
		id = self.request.get('id')
		sid = self.get_sid_from_cookie()
		tab = self.request.get('tab')
		flash_message = None
		
		if sid:
			flash_message = memcache.get(str(sid), namespace="flash")
			if flash_message:
				memcache.delete(str(sid), namespace="flash")
		
		# há que forçar o encoding do & também
		raw_referer = "/admin/"+objname+"/"
		if os.environ.has_key('HTTP_REFERER'):
			raw_referer = re.sub("&","%38",urllib.quote_plus(os.environ['HTTP_REFERER']))
		
		values = {}
		omit_properties = [] # propriedades do objecto que não precisam de ser impressas e prontas para ser editadas

#############################
######## EDIT EPOCA #########
#############################		

		if objname == "epoca":
			
			try:
                            obj = Epoca.get_by_id(int(id))
			except: 
                            obj = Epoca.all().filter("epo_nome = ", id).get()

			#### DEPENDENTE 1: COMPETICAO ####
			objname1 = "competicao"
			
			try:
				page_index1 = int(self.request.get("pg_"+objname1,"1"))
			except ValueError:
				page_index1 = 1
				
			limit1 = 10
			
			# para editar batch de competições
			objs = []
			for competicao in obj.epo_competicoes:
				objs.append(competicao)
			
			self.render_subdir_to_output("admin", 'edit_%s.html' % objname, {

				'obj':obj, 'flash': flash_message,
				'objname': objname, 'fields': Epoca.fields, 'tab':tab,

				# editar this: editar época
				'edit': self.render_subdir("admin", 'obj_%s.html' % objname, {
						'edit':True, 'obj': obj
				}),
				
				# listar dependente 1: competições desta época
				'list1': List().gera_lista({
					"objs":obj.epo_competicoes, "objname":objname1, 
					"filter_field":None, "filter_needle":None, 
					"url":self.request.url, "referrer":objname,
					"page_index":page_index1, "limit":limit1
				}),
				
				# novos dependentes 1: novas múltiplas competições anexadas a esta época
				'mnew1': self.render_subdir("admin", 'obj_%s_multiple.html' % objname1, {
						'new_for_parent_id':True,
						'this_id':'epo_id', 'obj':obj, "objname":objname1, 
						'howmany':10
				}),

				# editar dependentes 1: editar múltiplas competições anexadas a esta época
				'medit1':self.render_subdir("admin", 'obj_%s_multiple.html' % objname1, {
						'multiple_edit':True, 'obj':obj, 'objs':objs, "objname":objname1, 
						'howmany':len(objs)
				})
				
			})
			
##################################
######## EDIT COMPETICAO #########		
##################################

		elif objname == "competicao":
			try:
                            obj = Competicao.get_by_id(int(id))
			except: 
                            obj = Competicao.all().filter("cmp_nome = ", id).get()
			
			#### DEPENDENTE 1: JORNADAS ####
			objname1 = "jornada"
			objs1 = []
			for o in obj.cmp_jornadas:
				objs1.append(o)

			try:
				page_index1 = int(self.request.get("pg_"+objname1,"1"))
			except ValueError:
				page_index1 = 1
			limit1 = 30

			#### DEPENDENTE 2: CLUBE JOGA COMPETICAO ####
			objname2 = "clube_joga_competicao"
			objs2 = []
			
			ob2 = ClubeJogaCompeticao.all().filter("cjc_competicao = ", obj)
			for o in ob2:
				objs2.append(o)
				
			try:
				page_index2 = int(self.request.get("pg_"+objname2,"1"))
			except ValueError:
				page_index2 = 1
			limit2 = 30

			self.render_subdir_to_output("admin", 'edit_%s.html' % objname, {
				'obj':obj, 'flash': flash_message,
				'objname': objname, 'fields': Competicao.fields, 'tab':tab,

				# editar this: editar competição
				'edit': self.render_subdir("admin", 'obj_%s.html' % objname, {
						'edit':True, 'obj': obj,
						'epocas':listas.get_lista_epocas()
				}),
				
				# listar dependente 1: jornadas desta competição
				'list1': List().gera_lista({
					"objs":obj.cmp_jornadas, "objname":objname1, 
					"filter_field":None, "filter_needle":None, 
					"url":self.request.url, "referrer":objname,
					"page_index":page_index1, "limit":limit1
				}),
				
				# novo dependente 1: novas jornadas anexada a esta competicao
				'mnew1': self.render_subdir("admin", 'obj_%s_multiple.html' % objname1, {
						'new_for_parent_id':True, "objname":objname1, 
						'this_id':'cmp_id', 'obj':obj, 'howmany':10
				}),
				
				# editar dependentes 1: editar múltiplas jornadas anexadas a esta competição
				'medit1':self.render_subdir("admin", 'obj_%s_multiple.html' % objname1, {
						'multiple_edit':True, "objname":objname1, 
						'obj':obj, 'objs':objs1, 'howmany':len(objs1)
				}),
				
				# listar dependente 2: clubes desta competição
				'list2': List().gera_lista({
					"objs":ob2, "objname":objname2, 
					"filter_field":None, "filter_needle":None, 
					"url":self.request.url, "referrer":objname,
					"page_index":page_index2, "limit":limit2
				}),
				
				# novos dependentes 2: novos clubes anexados a esta competicao
				'mnew2': self.render_subdir("admin", 'obj_%s_multiple.html' % objname2, {
						'new_for_parent_id':True, "objname":objname2, 
						'this_id':'cmp_id', 'obj':obj, 'howmany':10,
						'clubes':listas.get_lista_clubes(),
						'competicoes':listas.get_lista_competicoes()
				}),
				
				# editar dependentes 1: editar múltiplos clubes anexadas a esta competicao
				'medit2':self.render_subdir("admin", 'obj_%s_multiple.html' % objname2, {
						'multiple_edit':True, 'obj':obj, 'objs':objs2, 
						'this_id':'cmp_id','howmany':len(objs2), "objname":objname2, 
						'clubes':listas.get_lista_clubes(),
						'competicoes':listas.get_lista_competicoes()
				})
			})

###############################
######## EDIT JORNADA #########
###############################
		
		elif objname == "jornada":
			
			try:
                            obj = Jornada.get_by_id(int(id))
			except: 
                            obj = Jornada.all().filter("jor_nome = ", id).get()

			#### DEPENDENTE 1: JOGOS ####
			objname1 = 'jogo'
			objs1 = []
			for o in obj.jor_jogos:
				objs1.append(o)
			
			try:
				page_index1 = int(self.request.get("pg_"+objname1,"1"))
			except ValueError:
				page_index1 = 1
			
			limit1 = 10
			
			self.render_subdir_to_output("admin", 'edit_%s.html' % objname, {
				'obj':obj, 'flash': flash_message,
				'objname': objname, 'fields': Jornada.fields, 'tab':tab,

				# editar this: editar jornada
				'edit': self.render_subdir("admin", 'obj_%s.html' % objname, {
						'edit':True, 'obj': obj,
						'competicoes':listas.get_lista_competicoes()
				}),
				
				# listar dependente 1: jogos desta jornada
				'list1': List().gera_lista({
					"objs":obj.jor_jogos, "objname":objname1, 
					"filter_field":None, "filter_needle":None, 
					"url":self.request.url, "referrer":objname,
					"page_index":page_index1, "limit":limit1
				}),
				
				# novo dependente 1: novos jogos anexados a esta jornada
				'mnew1': self.render_subdir("admin", 'obj_%s_multiple.html' % objname1, {
						'new_for_parent_id':True, "objname":objname1, 
						'this_id':'jor_id', 'obj':obj, 'howmany':10,
						'clubes':listas.get_lista_clubes(),
						'arbitros':listas.get_lista_arbitros(), # para select com árbitros,
						'tacticas':listas.get_lista_tacticas()
				}),
				
				# editar dependentes 1: editar múltiplos jogos anexadas a esta jornada
				'medit1':self.render_subdir("admin", 'obj_%s_multiple.html' % objname1, {
						'multiple_edit':True, 'obj':obj, 'objs':objs1, 
						'howmany':len(objs1), 
						'clubes':listas.get_lista_clubes(),
						'arbitros':listas.get_lista_arbitros(), # para select com árbitros,
						'tacticas':listas.get_lista_tacticas()
				})
			})

############################
######## EDIT JOGO #########
############################

		elif objname == "jogo":
			try:
                            obj = Jogo.get_by_id(int(id))
			except: 
                            obj = Jogo.all().filter("jog_nome = ", id).get()

			# DEPENDENTE 1
			objname1 = 'jogador_joga_jogo'
			objs1 = []

			for o in obj.jog_jogadores:
				objs1.append(o)

			# DEPENDENTE 2
			objname2 = 'lance'
			objs2 = []
			for o in obj.jog_lances:
				objs2.append(o)

			try:
				page_index1 = int(self.request.get("pg_"+objname1,"1"))
			except ValueError:
				page_index1 = 1

			try:
				page_index2 = int(self.request.get("pg_"+objname2,"1"))
			except ValueError:
				page_index2 = 1
			
			limit1 = 30
			limit2 = 10		
	
			# vamos buscas jogadores dos dois clubes e colocar na select box
			# aproveitar e retirar aqueles que já lá estão
			todos_jogadores = []
			jogadores_clube1 = []
			jogadores_clube2 = []
			
			for jogador in obj.jog_jogadores:
				todos_jogadores.append(jogador.jjj_jogador)
				if jogador.jjj_clube == obj.jog_clube1:
					jogadores_clube1.append(jogador)
						
				else:
					if jogador.jjj_clube == obj.jog_clube2:
						jogadores_clube2.append(jogador)	

			todos_jogadores_clube1 = Jogador.all().filter("jgd_clube_actual = ", obj.jog_clube1).fetch(1000)
			todos_jogadores_clube2 = Jogador.all().filter("jgd_clube_actual = ", obj.jog_clube2).fetch(1000)
			
			# JOGADOR
			todos_jogadores_clube1 = sorted(todos_jogadores_clube1, cmp=lambda x,y: cmp(x.jgd_numero, y.jgd_numero))
			todos_jogadores_clube2 = sorted(todos_jogadores_clube2, cmp=lambda x,y: cmp(x.jgd_numero, y.jgd_numero))
			todos_jogadores = sorted(todos_jogadores, cmp=lambda x,y: cmp(x.jgd_nome, y.jgd_nome))
			
			# JJJ
			jogadores_clube1 = sorted(jogadores_clube1, cmp=lambda x,y: cmp(x.jjj_jogador.jgd_numero, y.jjj_jogador.jgd_numero))
			jogadores_clube2 = sorted(jogadores_clube2, cmp=lambda x,y: cmp(x.jjj_jogador.jgd_numero, y.jjj_jogador.jgd_numero))
			
			self.render_subdir_to_output("admin", 'edit_%s.html' % objname, {
				'obj':obj, 'flash': flash_message,
				'objname': objname, 'fields': Jogo.fields, 'tab':tab,

				# editar this: editar jogo
				'edit': self.render_subdir("admin", 'obj_%s.html' % objname, {
						'edit':True, 'obj': obj,
						'clubes':listas.get_lista_clubes(),
						'arbitros':listas.get_lista_arbitros(), # para select com árbitros,
						'tacticas':listas.get_lista_tacticas()
				}),
				
				# listar dependente 1: jjjs deste jogo
				'list1': List().gera_lista({
					"objs":obj.jog_jogadores, "objname":objname1, 
					"filter_field":None, "filter_needle":None, 
					"url":self.request.url, "referrer":objname,
					"page_index":page_index1, "limit":limit1
				}),
				
				# novo dependente 1: novos jjj anexados a este jogo
				'mnew1': self.render_subdir("admin", 'obj_%s_multiple.html' % objname1, {
						'new_for_parent_id':True, "objname":objname1, 
						'this_id':'jog_id', 'obj':obj, 'howmany':28, 
						# parâmetros extra
						'jogadores_clube1':todos_jogadores_clube1,
						'jogadores_clube2':todos_jogadores_clube2,
						'clubes':listas.get_lista_clubes(),
						'posicoes':listas.get_lista_posicoes(),
						'arbitros':listas.get_lista_arbitros(),
						'tacticas':listas.get_lista_tacticas()
						
				}),

				# editar dependentes 1: editar múltiplos jjj anexadas a este jogo
				
				# on the render, use jjj_clube1 and jjj_clube2 instead of obj.jog_jogadores
				# because they are ordered.
				'medit1':self.render_subdir("admin", 'obj_%s_multiple.html' % objname1, {
						'multiple_edit':True, 'obj':obj, 'objs':objs1, 
						'howmany':len(objs1),  "objname":objname1, 
						# parâmetros extra
						'jogadores_clube1':todos_jogadores_clube1,
						'jogadores_clube2':todos_jogadores_clube2,
						'clubes':listas.get_lista_clubes(),
						'posicoes':listas.get_lista_posicoes(),
						'jjj_clube1':jogadores_clube1,
						'jjj_clube2':jogadores_clube2,
						'arbitros':listas.get_lista_arbitros(), 
						'tacticas':listas.get_lista_tacticas()
				}),
				
				# listar dependente 2: lances deste jogo
				'list2': List().gera_lista({
					"objs":obj.jog_lances, "objname":objname2, 
					"filter_field":None, "filter_needle":None, 
					"url":self.request.url, "referrer":objname,
					"page_index":page_index2, "limit":limit2
				}),
				
				# novos dependentes 2: novos lances associados a este jogo
				'mnew2': self.render_subdir("admin", 'obj_%s_multiple.html' % objname2, {
						'new_for_parent_id':True, "objname":objname2, 
						'this_id':'jog_id', 'obj':obj, 'howmany':10,
						#parâmetros extra
						'jogadores_clube1':todos_jogadores_clube1,
						'jogadores_clube2':todos_jogadores_clube2,
						'jogadores':todos_jogadores,
						'clubes':listas.get_lista_clubes(),
						'tipos_lances':listas.get_lista_tipos_lances(),
						'tipos_jels':listas.get_lista_tipos_jels(),
						'comentadores':listas.get_lista_comentadores()
				}),
				
				# editar dependentes 1: editar múltiplos lances anexadas a este jogo
				'medit2':self.render_subdir("admin", 'obj_%s_multiple.html' % objname2, {
						'multiple_edit':True, 'obj':obj, 'objs':objs2, 
						'howmany':len(objs2),  "objname":objname2, 
						'jogadores_clube1':todos_jogadores_clube1,
						'jogadores_clube2':todos_jogadores_clube2,
						'jogadores':todos_jogadores,
						'clubes':listas.get_lista_clubes(),
						'tipos_lances':listas.get_lista_tipos_lances(),
						'tipos_jels':listas.get_lista_tipos_jels(),
						'comentadores':listas.get_lista_comentadores()
				}),
			})

#############################
######## EDIT LANCE #########
#############################
			
		elif objname == "lance":
			
			try:
                            obj = Lance.get_by_id(int(id))
			except: 
                            obj = Lance.all().filter("lan_nome = ", id).get()

			# DEPENDENTE 1	
			objname1 = 'comentador_comenta_lance'
			objs1 = []
			for o in ComentadorComentaLance.all().filter("ccl_lance = ", obj):
				objs1.append(o)

			# DEPENDENTE 2			
			objname2 = 'jogador_em_lance'
			objs2 = []
			for o in JogadorEmLance.all().filter("jel_lance = ", obj):
				objs2.append(o)

			try:
				page_index1 = int(self.request.get("pg_"+objname1,"1"))
			except ValueError:
				page_index1 = 1

			try:
				page_index2 = int(self.request.get("pg_"+objname2,"1"))
			except ValueError:
				page_index2 = 1
						
			limit1 = 10
			limit2 = 10
			
			self.render_subdir_to_output("admin", 'edit_%s.html' % objname, {
				'obj':obj, 'flash': flash_message,
				'objname': objname, 'fields': Lance.fields, 'tab':tab,

				# editar this: editar lance
				'edit': self.render_subdir("admin", 'obj_%s.html' % objname, {
						'edit':True, 'obj': obj, 'objname':objname,
						'tipos_lances':listas.get_lista_tipos_lances()
				}),
				
				# listar dependente 1: ccls deste lance
				'list1': List().gera_lista({
					"objs":obj.lan_comentadores, "objname":objname1, 
					"filter_field":None, "filter_needle":None, 
					"url":self.request.url, "referrer":objname,
					"page_index":page_index1, "limit":limit1
				}),
				
				# novo dependente 1: novos ccls anexados a este lance
				'mnew1': self.render_subdir("admin", 'obj_%s_multiple.html' % objname1, {
						'new_for_parent_id':True, 'objname':objname1,
						'this_id':'lan_id', 'obj':obj, 'howmany':3,
						# parâmetros extra
						'comentadores':listas.get_lista_comentadores()
				}),

				# editar dependentes 1: editar múltiplos ccls anexadas a este lance
				'medit1':self.render_subdir("admin", 'obj_%s_multiple.html' % objname1, {
						'multiple_edit':True, 'obj':obj, 'objs':objs1, 
						'this_id':'lan_id','howmany':len(objs1), 'objname':objname1,
						'comentadores':listas.get_lista_comentadores()
				}),
				
				# listar dependente 2: comentadores deste lance
				'list2': List().gera_lista({
					"objs":obj.lan_jogadores, "objname":objname2, 
					"filter_field":None, "filter_needle":None, 
					"url":self.request.url, "referrer":objname,
					"page_index":page_index2, "limit":limit2
				}),
				
				# novo dependente 2: novos ccls associados a este lance
				'mnew2': self.render_subdir("admin", 'obj_%s_multiple.html' % objname2, {
						'new_for_parent_id':True, 'objname':objname2,
						'this_id':'lan_id', 'obj':obj, 'howmany':3,
						#parâmetros extra
						'tipos_jels':listas.get_lista_tipos_jels(),
				}),
				# editar dependentes 1: editar múltiplos ccls anexadas a este lance
				'medit2':self.render_subdir("admin", 'obj_%s_multiple.html' % objname2, {
						'multiple_edit':True, 'obj':obj, 'objs':objs2, 
						'this_id':'lan_id','howmany':len(objs2),'objname':objname2,
						'tipos_jels':listas.get_lista_tipos_jels(),
				}),
			})

#############################
######## EDIT CLUBE #########
#############################
		
		elif objname == "clube":
			
			try:
                            obj = Clube.get_by_id(int(id))
			except: 
                            obj = Clube.all().filter("clu_nome = ", id).get()

			# DEPENDENTE 1	
			objname1 = 'jogador'
			
			# List() use Query object. medit use list of retrieved objectd
			objs = Jogador.all().filter("jgd_clube_actual = ", obj)
			objs1 = []
			for o in Jogador.all().filter("jgd_clube_actual = ", obj):
				objs1.append(o)
			
			objs1 = sorted(objs1, cmp=lambda x,y: cmp(x.jgd_numero, y.jgd_numero))
						
			try:
				page_index1 = int(self.request.get("pg_"+objname1,"1"))
			except ValueError:
				page_index1 = 1
			
			limit1 = 40
			posicoes = listas.get_lista_posicoes()
			clubes = listas.get_lista_clubes()
			
			logging.info("Starting lista")
			foo = List().gera_lista({
				"objs":objs, "objname":objname1, 
				"filter_field":None, "filter_needle":None, 
				"url":self.request.url, "referrer":objname,
				"page_index":page_index1, "limit":limit1
			})
			foo2 = None
			try :
				foo2 = self.render_subdir("admin", 'obj_%s_multiple.html' % objname1, {
					'new_for_parent_id':True, 'objname':objname1,
					'this_id':'clu_id', 'obj':obj, 'howmany':10,
					'clubes':clubes,
					'posicoes':posicoes
				})
			except:
				logging.info(sys.exc_info())

			foo3 = None
			try :
				foo3 = self.render_subdir("admin", 'obj_%s_multiple.html' % objname1, {
					'multiple_edit':True, 'obj':obj, 'objs':objs1, 
					'this_id':'clu_id','howmany':len(objs1), 'objname':objname1,
					'clubes':clubes,
					'posicoes':posicoes
					})
			except:
				logging.info(sys.exc_info())
			
			self.render_subdir_to_output("admin", 'edit_%s.html' % objname, {
				'obj':obj, 'flash': flash_message,
				'objname': objname, 'fields': Clube.fields, 'tab':tab,

				# editar this: editar clube
				'edit': self.render_subdir("admin", 'obj_%s.html' % objname, {
						'edit':True, 'obj': obj, 'objname': objname
				}),
				
				# listar dependente 1: jogadores actuais deste clube
				'list1': foo,
				
				# novo dependente 1: jogadores actuais deste clube
				'mnew1': foo2,

				# editar dependentes 1: editar jogadores actuais deste clube
				'medit1':foo3,
			})

##############################
####### EDIT JOGADOR #########
##############################

		elif objname == "jogador":
		
			try:
                            obj = Jogador.get_by_id(int(id))
			except: 
                            obj = Jogador.all().filter("jgd_nome = ", id).get()

			#dependente 1
			objname1 = 'clube_tem_jogador'
			objs1 = []
			for o in ClubeTemJogador.all().filter("ctj_jogador = ", obj):
				objs1.append(o)
			
			try:
				page_index1 = int(self.request.get("pg_"+objname1,"1"))
			except ValueError:
				page_index1 = 1

			limit1 = 20
			
			self.render_subdir_to_output("admin", 'edit_%s.html' % objname, {
				'obj':obj, 'flash': flash_message,
				'objname': objname, 'fields': Jogador.fields, 'tab':tab,

				# editar this: editar jogador
				'edit': self.render_subdir("admin", 'obj_%s.html' % objname, {
						'edit':True, 'obj': obj,
						'posicoes':listas.get_lista_posicoes(),
						'epocas':listas.get_lista_epocas(),
						'clubes':listas.get_lista_clubes()

				}),
				
				# listar dependente 1: clubes deste jogador
				'list1': List().gera_lista({
					"objs":obj.jgd_clubes, "objname":objname1, 
					"filter_field":None, "filter_needle":None, 
					"url":self.request.url, "referrer":objname,
					"page_index":page_index1, "limit":limit1
				}),
				
				# novo dependente 1: novos CTJs anexados a este jogador
				'mnew1': self.render_subdir("admin", 'obj_%s_multiple.html' % objname1, {
						'new_for_parent_id':True,
						'this_id':'jgd_id', 'obj':obj,
						'howmany':10, "objname":objname1, 
						'epocas':listas.get_lista_epocas(),
						'clubes':listas.get_lista_clubes()
				}),
				
				# edit dependente 1: editar CTJs anexados a este jogador
				'medit1': self.render_subdir("admin", 'obj_%s_multiple.html' % objname1, {
						'multiple_edit':True, 'obj':obj, 'objs':objs1, 
						'this_id':'jgd_id','howmany':len(objs1), 'objname':objname1,
						'epocas':listas.get_lista_epocas(),
						'clubes':listas.get_lista_clubes()
				}),
				
			})

##############################
####### EDIT ARBITRO #########
##############################
		
		elif objname == "arbitro":
			
			try:
                            obj = Arbitro.get_by_id(int(id))
			except: 
                            obj = Arbitro.all().filter("arb_nome = ", id).get()

			# DEPENDENCIA 1: JOGOS
			objname1 = 'jogo'

			try:
				page_index1 = int(self.request.get("pg_"+objname1,"1"))
			except ValueError:
				page_index1 = 1
			
			limit1 = 10

			self.render_subdir_to_output("admin", 'edit_%s.html' % objname, {
				'obj':obj, 'flash': flash_message,
				'objname': objname, 'fields': Arbitro.fields, 'tab':tab,

				# editar this: editar árbitro
				'edit': self.render_subdir("admin", 'obj_%s.html' % objname, {
						'edit':True, 'obj': obj
				}),
				
				# listar dependente 1: jogos deste árbitro
				'list1': List().gera_lista({
					"objs":obj.arb_jogos, "objname":objname1, 
					"filter_field":None, "filter_needle":None, 
					"url":self.request.url, "referrer":objname,
					"page_index":page_index1, "limit":limit1
				}),
				
				# novo dependente 1: novos jogos anexados a este árbitro
				'new1': self.render_subdir("admin", 'obj_%s_multiple.html' % objname1, {
						'new_for_parent_id':True, "objname":objname1, 
						'this_id':'arb_id', 'obj':obj
				})
			})

#################################
####### EDIT COMENTADOR #########
#################################

		elif objname == "comentador":
			
			obj = Comentador.get_by_id(id)
			# DEPENDENTE 1
			objname1 = 'comentador_comenta_lance'
			
			try:
				page_index1 = int(self.request.get("pg_"+objname1,"1"))
			except ValueError:
				page_index1 = 1
			
			limit1 = 10

			self.render_subdir_to_output("admin", 'edit_%s.html' % objname, {
				'obj':obj, 'flash': flash_message,
				'objname': objname, 'fields': Comentador.fields, 'tab':tab,

				# editar this: editar comentador
				'edit': self.render_subdir("admin", 'obj_%s.html' % objname, {
						'edit':True, 'obj': obj
				}),
				
				# listar dependente 1: lances deste comentador
				'list1': List().gera_lista({
					"objs":obj.com_lances, "objname":objname1, 
					"filter_field":None, "filter_needle":None, 
					"url":self.request.url, "referrer":objname,
					"page_index":page_index1, "limit":limit1
				}),
				
				# novo dependente 1: novos lances anexados a este comentador
				'new1': self.render_subdir("admin", 'obj_%s_multiple.html' % objname1, {
						'new_for_parent_id':True, "objname":objname1, 
						'this_id':'com_id', 'obj':obj, 'howmany':3
				})
			})		

############################
####### EDIT FONTE #########
############################

		elif objname == "fonte":
			
			obj = Fonte.get_by_id(id)

			# DEPENDENCIA1: 
			objname1 = 'comentador'
			
			try:
				page_index1 = int(self.request.get("pg_"+objname1,"1"))
			except ValueError:
				page_index1 = 1
			
			limit1 = 10

			# now let's render the edit page
			self.render_subdir_to_output("admin", 'edit_%s.html' % objname, {
				'obj':obj, 'flash': flash_message,
				'objname': objname, 'fields': Fonte.fields, 'tab':tab,

				# editar this: editar fonte
				'edit': self.render_subdir("admin", 'obj_%s.html' % objname, {
						'edit':True, 'obj': obj
				}),
				
				# listar dependente 1: comentadores desta fonte
				'list1': List().gera_lista({
					"objs":obj.fon_comentadores, "objname":objname1, 
					"filter_field":None, "filter_needle":None, 
					"url":self.request.url, "referrer":objname,
					"page_index":page_index1, "limit":limit1
				}),
				
				# novo dependente 1: novos comentadores anexados a esta fonte
				'new1': self.render_subdir("admin", 'obj_%s_multiple.html' % objname1, {
						'new_for_parent_id':True, "objname":objname1, 
						'this_id':'fon_id', 'obj':obj
				})
			})		
			

######## EDIT clube_tem_jogador #########
			
		elif objname == "clube_tem_jogador":

			obj = ClubeTemJogador.get_by_id(id)

			# now let's render the edit page
			self.render_subdir_to_output("admin", 'edit_%s.html' % objname, {
				'obj':obj, 'flash': flash_message,
				'objname': objname, 'fields': ClubeTemJogador.fields, 'tab':tab,

				# editar this: editar fonte
				'edit': self.render_subdir("admin", 'obj_%s.html' % objname, {
						'edit':True, 'obj': obj
				})
			})
				
######## EDIT clube_joga_competicao #########
				
		elif objname == "clube_joga_competicao":
			obj = ClubeJogaCompeticao.get_by_id(id)

			# now let's render the edit page
			self.render_subdir_to_output("admin", 'edit_%s.html' % objname, {
				'obj':obj, 'flash': flash_message,
				'objname': objname, 'fields': ClubeJogaCompeticao.fields, 'tab':tab,

				# editar this: editar fonte
				'edit': self.render_subdir("admin", 'obj_%s.html' % objname, {
						'edit':True, 'obj': obj
				})
			})

######## EDIT jogador_joga_jogo #########
						
		elif objname == "jogador_joga_jogo":
			obj = JogadorJogaJogo.get_by_id(id)

			# now let's render the edit page
			self.render_subdir_to_output("admin", 'edit_%s.html' % objname, {
				'obj':obj, 'flash': flash_message,
				'objname': objname, 'fields': JogadorJogaJogo.fields, 'tab':tab,

				# editar this: editar fonte
				'edit': self.render_subdir("admin", 'obj_%s.html' % objname, {
						'edit':True, 'obj': obj
				})
			})

######## EDIT comentador_comenta_lance #########

		elif objname == "comentador_comenta_lance":
			obj = ComentadorComentaLance.get_by_id(id)

			# now let's render the edit page
			self.render_subdir_to_output("admin", 'edit_%s.html' % objname, {
				'obj':obj, 'flash': flash_message,
				'objname': objname, 'fields': ComentadorComentaLance.fields, 'tab':tab,

				# editar this: editar fonte
				'edit': self.render_subdir("admin", 'obj_%s.html' % objname, {
						'edit':True, 'obj': obj
				})
			})

######## EDIT jogador_em_lance #########

		elif objname == "jogador_em_lance":
			obj = JogadorEmLance.get_by_id(id)

			# now let's render the edit page
			self.render_subdir_to_output("admin", 'edit_%s.html' % objname, {
				'obj':obj, 'flash': flash_message,
				'objname': objname, 'fields': JogadorEmLance.fields, 'tab':tab,

				# editar this: editar fonte
				'edit': self.render_subdir("admin", 'obj_%s.html' % objname, {
						'edit':True, 'obj': obj
				})
			})
		
######## EDIT acumulador jornada #########
			
		elif objname == "acumulador_jornada":
			obj = AcumuladorJornada.get_by_id(id)

			# now let's render the edit page
			self.render_subdir_to_output("admin", 'edit_%s.html' % objname, {
				'obj':obj, 'flash': flash_message,
				'objname': objname, 'fields': AcumuladorJornada.fields, 'tab':tab,

				# editar this: editar fonte
				'edit': self.render_subdir("admin", 'obj_%s.html' % objname, {
						'edit':True, 'obj': obj
				})
			})
			
			
######## EDIT acumulador competicao #########
			
		elif objname == "acumulador_competicao":
			obj = AcumuladorCompeticao.get_by_id(id)

			# now let's render the edit page
			self.render_subdir_to_output("admin", 'edit_%s.html' % objname, {
				'obj':obj, 'flash': flash_message,
				'objname': objname, 'fields': AcumuladorCompeticao.fields, 'tab':tab,

				# editar this: editar fonte
				'edit': self.render_subdir("admin", 'obj_%s.html' % objname, {
						'edit':True, 'obj': obj
				})
			})
	
######## EDIT acumulador epoca #########
			
		elif objname == "acumulador_epoca":
			obj = AcumuladorEpoca.get_by_id(id)

			# now let's render the edit page
			self.render_subdir_to_output("admin", 'edit_%s.html' % objname, {
				'obj':obj, 'flash': flash_message,
				'objname': objname, 'fields': AcumuladorEpoca.fields, 'tab':tab,

				# editar this: editar fonte
				'edit': self.render_subdir("admin", 'obj_%s.html' % objname, {
						'edit':True, 'obj': obj
				})
			})
Beispiel #3
0
	def parse(self, results):
			output = {}
			logging.info("Tenho resultados MaisFutebol em hash, a converter para FoiPenalti")
			clube1 = Clube.all().filter("clu_nome = ", self.clubes_hash[results["clube1"]]).get()
			if not clube1:
				message = u"Não sei que clube é: %s " % results["clube1"]
				logging.error(message)
				return self.response.out.write(simplejson.dumps({'status':'Erro', 'message':message}))

			clube2 = Clube.all().filter("clu_nome = ", self.clubes_hash[results["clube2"]]).get()
			if not clube2:
				message = u"Não sei que clube é: %s " % results["clube2"]
				logging.error(message)
				return self.response.out.write(simplejson.dumps({'status':'Erro', 'message':message}))

			logging.info("Clubes detectados")

			arbitro = None
			if results.has_key("arbitro"):
				arbitros = listas.get_lista_arbitros()
				for arb in arbitros:
					if arb.arb_nome == results["arbitro"]:
						arbitro = arb
						logging.info('Árbitro detectado')

			if not arbitro:
				logging.info('Árbitro NÃO detectado')
			else:
				output["arbitro"] = arbitro.key().id()
				
			if results.has_key("resultado_clube1"):
				output["resultado_clube1"] = results["resultado_clube1"]
			if results.has_key("resultado_clube2"):	
				output["resultado_clube2"] = results["resultado_clube2"]

			logging.info("Resultados detectados")
				
			jog_clube1 = Jogador.all().filter("jgd_clube_actual = ", clube1)
			jog_clube2 = Jogador.all().filter("jgd_clube_actual = ", clube2)

			remote_jogadores_nome1 = {}
			remote_jogadores_nome2 = {}
			local_jogadores_clube1 = {}
			local_jogadores_clube2 = {}

			logging.info("A obter jogadores do %s na DB" % results["clube1"])
			
			for j in jog_clube1:
				if j.jgd_numero != None and j.jgd_numero > 0:
					local_jogadores_clube1[j.jgd_numero] = j
				else:
					logging.error("Jogador %s do %s não tem número, corrige isso!" % (j, results["clube1"]))

			logging.info("A obter jogadores do %s na DB" % results["clube2"])

			for j in jog_clube2:
				if j.jgd_numero != None and j.jgd_numero > 0:
					local_jogadores_clube2[j.jgd_numero] = j
				else:
					logging.error("Jogador %s do %s não tem número, corrige isso!" % (j, results["clube2"]))	

			logging.info('Índices de jogadores preenchidos.')

			if results.has_key("tacticas_clube1"):
				output["tacticas_clube1"] = re.sub("x","-",results["tacticas_clube1"])
			if results.has_key("tacticas_clube2"):
				output["tacticas_clube2"] = re.sub("x","-",results["tacticas_clube2"])
	
			logging.info('Tácticas preenchidas.')

			# hash now. Use an array so we know the final order 
			output["jogadores_clube1"] = {}
			output["jogadores_clube2"] = {}

			jogadores_clube1_order = []
			jogadores_clube2_order = []


			logging.info("A analisar titulares do %s" % results["clube1"])
			
			# titulares: actualizar índice nome-número remoto, adicionar key a main hash
			for remote_jogador in results["jogadores_titulares_clube1"]:
				remote_jogadores_nome1[remote_jogador["nome"]] = remote_jogador["numero"]
				if local_jogadores_clube1.has_key(remote_jogador["numero"]):
					local_jogador = local_jogadores_clube1[remote_jogador["numero"]]
					output["jogadores_clube1"][local_jogador.key().id()] = {}
					jogadores_clube1_order.append(local_jogador.key().id())
					
				else:
					logging.error("Jogador MaisFutebol %s do %s com número %s não consta no FoiPenalti, corrige isso!" % (remote_jogador["nome"], results["clube1"], remote_jogador["numero"]) )	

			logging.info("A analisar titulares do %s" % results["clube2"])

			for remote_jogador in results["jogadores_titulares_clube2"]:
				remote_jogadores_nome2[remote_jogador["nome"]] = remote_jogador["numero"]
				if local_jogadores_clube2.has_key(remote_jogador["numero"]):
					local_jogador = local_jogadores_clube2[remote_jogador["numero"]]
					output["jogadores_clube2"][local_jogador.key().id()] = {}
					jogadores_clube2_order.append(local_jogador.key().id())
				else:
					logging.error("Jogador MaisFutebol %s do %s com número %s não consta no FoiPenalti, corrige isso!" % (remote_jogador["nome"], results["clube2"], remote_jogador["numero"]) )	

			# suplentes: apenas actualizar índice nome-número remoto

			logging.info("A analisar suplentes do %s" % results["clube1"])

			for remote_jogador in results["jogadores_suplentes_clube1"]:
				remote_jogadores_nome1[remote_jogador["nome"]] = remote_jogador["numero"]

			logging.info("A analisar suplentes do %s" % results["clube2"])
			
			for remote_jogador in results["jogadores_suplentes_clube2"]:
				remote_jogadores_nome2[remote_jogador["nome"]] = remote_jogador["numero"]

			# substituições: usar para recuparar mais 3 jogadores e adicionar a main-hash, alterar minutos de substituição

			logging.info("A analisar substituições do %s" % results["clube1"])

			for remote_substituicao in results["substituicoes_clube1"]:

				remote_jogador_saida_nome = remote_substituicao["jogador_saida"]
				remote_jogador_entrada_nome = remote_substituicao["jogador_entrada"]
				remote_jogador_minuto = remote_substituicao["minuto"]
				
				if local_jogadores_clube1.has_key(remote_jogadores_nome1[remote_jogador_saida_nome]):
					local_jogador_saida = local_jogadores_clube1[remote_jogadores_nome1[remote_jogador_saida_nome]]
					output["jogadores_clube1"][local_jogador_saida.key().id()]["substituicao_saida"] = remote_jogador_minuto
				else:	
					logging.error("Jogador MaisFutebol %s do %s, substituído ao minuto %s, não consta no FoiPenalti, corrige isso!" % (remote_jogador_saida_nome, results["clube1"], remote_jogador_minuto) )	
					
				if local_jogadores_clube1.has_key(remote_jogadores_nome1[remote_jogador_entrada_nome]):
					local_jogador_entrada = local_jogadores_clube1[remote_jogadores_nome1[remote_jogador_entrada_nome]]
					output["jogadores_clube1"][local_jogador_entrada.key().id()] = {"substituicao_entrada":remote_jogador_minuto}
					jogadores_clube1_order.append(local_jogador_entrada.key().id())
				else:	
					logging.error("Jogador MaisFutebol %s do %s, que entrou ao minuto %s, não consta no FoiPenalti, corrige isso!" % (remote_jogador_entrada_nome, results["clube1"], remote_jogador_minuto) )	

			logging.info("A analisar substituições do %s" % results["clube2"])

			for remote_substituicao in results["substituicoes_clube2"]:

				remote_jogador_saida_nome = remote_substituicao["jogador_saida"]
				remote_jogador_entrada_nome = remote_substituicao["jogador_entrada"]
				remote_jogador_minuto = remote_substituicao["minuto"]

				if local_jogadores_clube2.has_key(remote_jogadores_nome2[remote_jogador_saida_nome]):
					local_jogador_saida = local_jogadores_clube2[remote_jogadores_nome2[remote_jogador_saida_nome]]
					output["jogadores_clube2"][local_jogador_saida.key().id()]["substituicao_saida"] = remote_jogador_minuto
				else:	
					logging.error("Jogador MaisFutebol %s do %s, substituído ao minuto %s, não consta no FoiPenalti, corrige isso!" % (remote_jogador_saida_nome, results["clube2"], remote_jogador_minuto) )	
					
				if local_jogadores_clube2.has_key(remote_jogadores_nome2[remote_jogador_entrada_nome]):
					local_jogador_entrada = local_jogadores_clube2[remote_jogadores_nome2[remote_jogador_entrada_nome]]
					output["jogadores_clube2"][local_jogador_entrada.key().id()] = {"substituicao_entrada":remote_jogador_minuto}
					jogadores_clube2_order.append(local_jogador_entrada.key().id())
				else:	
					logging.error("Jogador MaisFutebol %s do %s, que entrou ao minuto %s, não consta no FoiPenalti, corrige isso!" % (remote_jogador_entrada_nome, results["clube2"], remote_jogador_minuto) )	

			# CARTOES

			logging.info("A analisar cartões do %s" % results["clube1"])

			for remote_cartoes in results["cartoes_clube1"]:
				remote_cartao_minuto = remote_cartoes["minuto"]
				remote_cartao_tipo = remote_cartoes["cartao"]
				remote_cartao_jogador = remote_cartoes["jogador"]

				if local_jogadores_clube1.has_key(remote_jogadores_nome1[remote_cartao_jogador]):
					local_jogador = local_jogadores_clube1[remote_jogadores_nome1[remote_cartao_jogador]]
					output["jogadores_clube1"][local_jogador.key().id()][remote_cartao_tipo] = remote_cartao_minuto
				else:	
					logging.error("Jogador MaisFutebol %s do %s, que viu cartão ao minuto %s, não consta no FoiPenalti, corrige isso!" % (remote_cartao_jogador, results["clube1"], remote_cartao_minuto) )	

			for remote_cartoes in results["cartoes_clube2"]:
				remote_cartao_minuto = remote_cartoes["minuto"]
				remote_cartao_tipo = remote_cartoes["cartao"]
				remote_cartao_jogador = remote_cartoes["jogador"]

				if local_jogadores_clube2.has_key(remote_jogadores_nome2[remote_cartao_jogador]):
					local_jogador = local_jogadores_clube2[remote_jogadores_nome2[remote_cartao_jogador]]
					output["jogadores_clube2"][local_jogador.key().id()][remote_cartao_tipo] = remote_cartao_minuto
				else:	
					logging.error("Jogador MaisFutebol %s do %s, que viu cartão ao minuto %s, não consta no FoiPenalti, corrige isso!" % (remote_cartao_jogador, results["clube2"], remote_cartao_minuto) )	

			# GOLOS

			logging.info("A analisar golos dos jogadores")

			for remote_golos in results["golos"]:
				remote_golo_minuto = remote_golos["minuto"]
				remote_golo_tipo = remote_golos["tipo"]
				remote_golo_jogador = remote_golos["jogador"]

				added = False
				
				if remote_jogadores_nome1.has_key(remote_golo_jogador) and local_jogadores_clube1.has_key(remote_jogadores_nome1[remote_golo_jogador]):

					local_jogador = local_jogadores_clube1[remote_jogadores_nome1[remote_golo_jogador]]
					
					if not output["jogadores_clube1"].has_key(local_jogador.key().id()):
							output["jogadores_clube1"][local_jogador.key().id()] = {}
					if not output["jogadores_clube1"][local_jogador.key().id()].has_key("golos"):
						output["jogadores_clube1"][local_jogador.key().id()]["golos"] = []

					output["jogadores_clube1"][local_jogador.key().id()]["golos"].append({
						"minuto":remote_golo_minuto,
						"tipo":remote_golo_tipo
					})
					added = True

				if remote_jogadores_nome2.has_key(remote_golo_jogador) and local_jogadores_clube2.has_key(remote_jogadores_nome2[remote_golo_jogador]):

					local_jogador = local_jogadores_clube2[remote_jogadores_nome2[remote_golo_jogador]]

					if not output["jogadores_clube2"].has_key(local_jogador.key().id()):
							output["jogadores_clube2"][local_jogador.key().id()] = {}

					if not output["jogadores_clube2"][local_jogador.key().id()].has_key("golos"):
						output["jogadores_clube2"][local_jogador.key().id()]["golos"] = []

					output["jogadores_clube2"][local_jogador.key().id()]["golos"].append({
						"minuto":remote_golo_minuto,
						"tipo":remote_golo_tipo
					})					
					added = True
				
				if not added:
					logging.error("Jogador MaisFutebol %s, que marcou golo ao minuto %s, não consta no FoiPenalti, corrige isso!" % (remote_golo_jogador, remote_golo_minuto) )	
		
			output_jogadores_1 = []
			output_jogadores_2 = []
			for idx, val in enumerate(jogadores_clube1_order):
				output_jogadores_1.append({"id":val, "info":output["jogadores_clube1"][val]})
			for idx, val in enumerate(jogadores_clube2_order):
				output_jogadores_2.append({"id":val, "info":output["jogadores_clube2"][val]})
			
			output["jogadores_clube1"] = output_jogadores_1
			output["jogadores_clube2"] = output_jogadores_2
			
			return self.response.out.write(simplejson.dumps({"status":"OK", "message":output}))
	def get(self):

		lances = None		
		num_resultados = self.request.get("nr")
		# critérios
	#	lan_epoca = self.request.get("epo")
		lan_competicao = self.request.get("cmp")
		#lan_jornada_numero = self.request.get("lan_jornada_numero")
		lan_clube1 = self.request.get("clu1")
		lan_clube2 = self.request.get("clu2")
		lan_arbitro = self.request.get("arb")
		lan_jogador = self.request.get("jgd")
		lan_classe = self.request.get("cla")
		cache = self.request.get("cache")
		sid =self.get_sid_from_cookie()
		
		# preciso de lista de epocas, lista de competições, lista de clubes, lista de árbitros
		
		try:
			page_index = int(self.request.get("pg","1"))
		except ValueError:
			page_index = 1
			
		# values I want, either from memcache, or to generate now
		resultados = None
		results_page = None
		results_total = None
		results_page_links = None
		
		# ok, if we have num_resultados, we have a search
		if num_resultados: 
			
			# let's take off the page. THe cache stores the full results, not the page view
			memcache_label = self.request.path+":"+self.request.query_string
			
			# if this search is in memcache, let's use it
			cacheresultados = memcache.get(memcache_label)
			
			# IF NOT or if it's obsolete, LET'S REBUILD IT
			cache_old = None
			if cacheresultados and cache != "false": 
				# let's check if there are new stuff from: jogador, clube_tem_jogador
				
				cache_old = False
				for elem in ['lance','comentador_comenta_lance','jogador_em_lance']:
					cache = memcache.get(elem)
					if cache and cache['date'] > cacheresultados['date']:
						cache_old = True
					
				
			if not cacheresultados or cache_old:
			
				# jogos = None, cono está no início
				# devia fazer default a Jogos.all(), mas de notar que há épocas, competições e jornadas 
				# como critérios antecessores. Estes podem já refinar. 
				
# FILTRO POR ANTECESSORES (epoca, competicao, jornada)
# ou seja: estes filtros produzem a GqlQuery 'jogos'
					
				lances = Lance.all()
				
				# primeiro nível: 2
				# if lan_epoca:
				# 	epoca = Epoca.get_by_id(int(lan_epoca))
				# 	lances.filter("lan_epoca = ", epoca)
					
				# segundo nível: 2x2
				if lan_competicao:
					competicao = Competicao.all().filter("cmp_nome = ",lan_competicao).get()
					lances.filter("lan_competicao = ", competicao)
					
				# segundo nível: 2x2
				# if lan_jornada_numero:
				# 	jornadas = Jornada.all().filter("jor_nome_curto = ",lan_jornada_numero).fetch(1000)
				# 	lances.filter("lan_jornada in ", jornadas)

				if lan_clube1:
					clube = Clube.get_by_id(int(lan_clube1))
					lances.filter("lan_clube1 = ", clube)
					
				if lan_clube2:
					clube = Clube.get_by_id(int(lan_clube2))
					lances.filter("lan_clube2 = ", clube)
					
				if lan_arbitro:
					arbitro = Arbitro.get_by_id(int(lan_arbitro))
					lances.filter("lan_arbitro = ", arbitro)
				
				if lan_classe:
					lances.filter("lan_classe = ", int(lan_classe))
				
				if lan_jogador:
					jogador = Jogador.all().filter("jgd_nome =",lan_jogador).get()
					jels = JogadorEmLance.all().filter("jel_jogador = ", jogador).fetch(1000)
					lance_list = []
					for j in jels:
						lance_list.append(j.jel_lance.key())
			
					lances.filter("__key__ in ", lance_list)
					
# FIM DA FILTRAGEM
					
# INÍCIO DA PAGINAÇÃO
					
				# now, let's prepare the pages
				myPagedQuery = PagedQuery(lances, int(num_resultados))
		#		myPagedQuery.order("-lan_data")
		#		try:
				results_page = myPagedQuery.fetch_page(page_index)
		#		except:
		#			error = u"Lamentamos, mas essa combinação de pesquisas não podem ser satisfeitas:<UL><LI>Pesquisas só com épocas</LI><LI>Pesquisas com épocas e nomes de jogadores</LI></UL> Por favor, reformule os critérios para gerar uma pesquisa que o motor de busca consiga satisfazer."

				
					
				myLinks = PageLinks(page=page_index, page_count=myPagedQuery.page_count(), 
					url_root=re.sub("pg=\d+", "", self.request.url), page_field="pg")	
				results_page_links = myLinks.get_links()
				results_total = lances.count()
				
				memcache_label = self.request.path+":"+self.request.query_string
				
				# let's put search results on cache
				memcache.set(memcache_label, 
				{"date":datetime.datetime.today() , "results_page":results_page, 
					"results_total":results_total, "page":page_index, 
					"results_page_links":results_page_links},time=86400)
				
			else:
				results_page = cacheresultados['results_page']
				results_total = cacheresultados['results_total']
				results_page_links = cacheresultados['results_page_links']
		
			resultados = {
			"header":{
				"obj":"lance",
				"panel":"pesquisa",
				"total":results_total,
				"nr":num_resultados
			}, 
			"content":[]
			}

			if results_page:
			
				count = (page_index - 1)*int(num_resultados)
			
				for lance in results_page:
				
					count += 1
				
					prot = []
					for jel in lance.lan_jogadores:
						prot.append(jel.jel_jogador.jgd_nome)

					resultados["content"].append({
					"nome":lance.printlance(),
					"logo1":lance.lan_jogo.jog_clube1.clu_link_logo,
					"logo2":lance.lan_jogo.jog_clube2.clu_link_logo,
					"protagonistas":", ".join(prot),
					"data":lance.lan_jogo.jog_data.strftime("%Y-%m-%d"),
					"tipo":Lance.translation_classe[lance.lan_classe],
					"jogo":lance.lan_jogo.printjogo(),
					"jogo_id":lance.lan_jogo.jog_jornada.key().id(),
					"jornada":lance.lan_jogo.jog_jornada.jor_nome,
					"jornada_id":lance.lan_jogo.jog_jornada.key().id(),
					"competicao":lance.lan_jogo.jog_jornada.jor_competicao.cmp_nome_completo+" "+lance.lan_jogo.jog_jornada.jor_competicao.cmp_epoca.epo_nome,
					"competicao_id":lance.lan_jogo.jog_jornada.jor_competicao.key().id(),
					"id":lance.key().id(),
					"click":count
					})

		flash_message = None
		if sid:
			flash_message = memcache.get(str(sid), namespace="flash")
			if flash_message:
				memcache.delete(str(sid), namespace="flash")
						
		self.render_to_output('procurar_lance.html', {

			## feedback of get variables
		#	"lan_epoca": lan_epoca,
			"lan_competicao": lan_competicao,
		#	"lan_jornada_numero": lan_jornada_numero,
			"lan_clube1": lan_clube1,
			"lan_clube2": lan_clube2,
			"lan_arbitro": lan_arbitro,
			"lan_classe": lan_classe,
			"lan_jogador": lan_jogador,
			"num_resultados": num_resultados, 
			
			"flash":flash_message,
			
			# search results
			"results": resultados,
			"results_total": results_total,
			"results_page_links":results_page_links,

			# memcache stuff
			"clubes": listas.get_lista_clubes(),
			"competicoes": listas.get_lista_competicoes(), 
			"tipos_lances": listas.get_lista_tipos_lances(),
			"arbitros": listas.get_lista_arbitros(), 
			"resultados": [15, 30, 40]
		})
	def get(self):
		
		jogadores = None
		
		num_resultados = self.request.get("nr")
		sid =self.get_sid_from_cookie()
		
		# variáveis get que correspondem aos valores do form
		arb_nome = self.request.get("arb") #ID
		arb_clube1 = self.request.get("clu1") #ID
		arb_clube2 = self.request.get("clu2") #ID
		cache = self.request.get("cache") #ID
		
		try:
			page_index = int(self.request.get("pg","1"))
		except ValueError:
			page_index = 1
			
		# values I want, either from memcache, or to generate now
		arbitros = None 
		resultados = None
		results_page = None
		results_total = None
		results_page_links = None
		
		# ok, if we have num_resultados, we have a search
		if num_resultados: 
			
			# let's take off the page. THe cache stores the full results, not the page view
			memcache_label = self.request.path+":"+self.request.query_string
			
			# if this search is in memcache, let's use it
			cacheresultados = memcache.get(memcache_label)
			
			# IF NOT or if it's obsolete, LET'S REBUILD IT
			cache_old = None
			if cacheresultados and cache != "false": 
				# let's check if there are new stuff from: arbitro, jogo
				
				cache_old = False
				
				for elem in ['arbitro','jogo']:
					cache = memcache.get(elem)
					if cache and cache['date'] > cacheresultados['date']:
						cache_old = True
					
			if not cacheresultados or cache_old:
			
				arbitros = Arbitro.all()
				
				if arb_clube1:
					clube1 = Clube.get_by_id(int(arb_clube1))
					jogos = None
					jogos2 = None
					if arb_clube2:
						clube2 = Clube.get_by_id(int(arb_clube2))
						jogos = Jogo.gql("WHERE jog_clube1 = :1 AND jog_clube2 = :2",  clube1, clube2)
					else: 
						jogos = Jogo.gql("WHERE jog_clube1 = :1",  clube1)
						jogos2 = Jogo.gql("WHERE jog_clube2 = :1",  clube1)
					
					arbs = []	
					if jogos: 
						for jogo in jogos:
							if jogo.jog_arbitro:
								if not jogo.jog_arbitro.key().id() in arbs: 
									arbs.append(jogo.jog_arbitro.key())
					if jogos2: 
						for jogo in jogos2:
							if jogo.jog_arbitro:
								if not jogo.jog_arbitro.key().id() in arbs: 
									arbs.append(jogo.jog_arbitro.key())
					arbitros.filter("__key__ in",arbs)
					
				# arb_nome is an ID, really...
				if arb_nome:
					arbitro_key = Arbitro.get_by_id(int(arb_nome))
					arbitros.filter("__key__ IN",[arbitro_key.key()]) 
				# now, let's prepare the pages
				myPagedQuery = PagedQuery(arbitros, int(num_resultados))
				myPagedQuery.order("-arb_numero_visitas")
				results_page = myPagedQuery.fetch_page(page_index)
				myLinks = PageLinks(page=page_index, page_count=myPagedQuery.page_count(), 
					url_root=re.sub("&?pg=\d+", "", self.request.url), page_field="pg")	
				results_page_links = myLinks.get_links()
				results_total = arbitros.count()
				
				memcache_label = self.request.path+":"+self.request.query_string
				
				# let's put search results on cache
				memcache.set(memcache_label, 
				{"date":datetime.datetime.today() , "results_page":results_page, 
					"results_total":arbitros.count(), "page":page_index, 
					"results_page_links":results_page_links},time=86400)
				
			else:
				results_page = cacheresultados['results_page']
				results_total = cacheresultados['results_total']
				results_page_links = cacheresultados['results_page_links']
		
			resultados = {
			"header":{
				"obj":"arbitro",
				"panel":"pesquisa",
				"total":results_total,
				"nr":num_resultados
			}, 
			"content":[]
			}

			if results_page:
			
				count = (page_index - 1)*int(num_resultados)
			
				for arbitro in results_page:
				
					count += 1
				
					resultados["content"].append({
					"nome":arbitro.arb_nome,
					"foto":arbitro.arb_link_foto,
					"id":arbitro.key().id(),
					"click":count
					})

		flash_message = None
		if sid:
			flash_message = memcache.get(str(sid), namespace="flash")
			if flash_message:
				memcache.delete(str(sid), namespace="flash")

		self.render_to_output('procurar_arbitro.html', {
			"arb_nome": arb_nome,
			"arb_clube1": arb_clube1,
			"arb_clube2": arb_clube2,
			"num_resultados": num_resultados, 
			
			# search results
			"results": resultados,
			"results_total": results_total,
			"results_page_links":results_page_links,

			"flash":flash_message,

			# memcache stuff
			"clubes": listas.get_lista_clubes(),
			"arbitros": listas.get_lista_arbitros(),
			"resultados": [15, 30, 40]
		})
Beispiel #6
0
	def get(self, objname):
		
		sid = self.get_sid_from_cookie()
		flash_message = None
		if sid:
			flash_message = memcache.get(str(sid), namespace="flash")
			if flash_message:
				memcache.delete(str(sid), namespace="flash")

		# gera a lista de entradas para este obj_name
		# objs, objname, filter_field, filter_needle, url, page_index, limit
		
		initial_objs = None
		fields = None
		
		tab = self.request.get("tab")
		
		if objname == "clube":
			initial_objs =  Clube.all()
			fields = Clube.fields
		elif objname == "jogador":
			initial_objs =  Jogador.all()
			fields = Jogador.fields
		elif objname == "epoca":
			initial_objs =  Epoca.all()
			fields = Epoca.fields
		elif objname == "competicao":
			initial_objs =  Competicao.all()
			fields = Competicao.fields
		elif objname == "jogo":
			initial_objs =  Jogo.all()
			fields = Jogo.fields
		elif objname == "arbitro":
			initial_objs =  Arbitro.all()
			fields = Arbitro.fields
		elif objname == "comentador":
			initial_objs =  Comentador.all()
			fields = Comentador.fields
		elif objname == "fonte":
			initial_objs =  Fonte.all()
			fields = Fonte.fields
		elif objname == "jornada":
			initial_objs =  Jornada.all()
			fields = Jornada.fields
		elif objname == "lance":
			initial_objs =  Lance.all()
			fields = Lance.fields
			
		elif objname == "clube_tem_jogador":
			initial_objs =  ClubeTemJogador.all()
			fields = ClubeTemJogador.fields
		elif objname == "clube_joga_competicao":
			initial_objs =  ClubeJogaCompeticao.all()
			fields = ClubeJogaCompeticao.fields
		elif objname == "jogador_joga_jogo":
			initial_objs =  JogadorJogaJogo.all()
			fields = JogadorJogaJogo.fields
		elif objname == "comentador_comenta_lance":
			initial_objs =  ComentadorComentaLance.all()
			fields = ComentadorComentaLance.fields
		elif objname == "jogador_em_lance":
			initial_objs =  JogadorEmLance.all()
			fields = JogadorEmLance.fields

		elif objname == "acumulador_jornada":
			initial_objs =  AcumuladorJornada.all()
			fields = AcumuladorJornada.fields
		elif objname == "acumulador_competicao":
			initial_objs =  AcumuladorCompeticao.all()
			fields = AcumuladorCompeticao.fields
		elif objname == "acumulador_epoca":
			initial_objs =  AcumuladorEpoca.all()
			fields = AcumuladorEpoca.fields
	
                lista = List().gera_lista_vazia({
			"objs":initial_objs, 
			"objname":objname, 
			"filter_field":None,
			"filter_needle":None, 
			"url":self.request.url, 
			"referrer":objname,
			"flash":None,
                        "fields":fields
			})
#		lista = List().gera_lista({
#			"objs":initial_objs, 
#			"objname":objname, 
#			"filter_field":None,
#			"filter_needle":None, 
#			"url":self.request.url, 
#			"referrer":objname,
#			"page_index":1, 
#			"limit":15,
#			"flash":None})

#############
### EPOCA ###
#############

		if objname == "epoca":
			
			## TAB renders
			new_single = self.render_subdir("admin", 'obj_%s.html' % objname, {
				'objname': objname,
				'fields': fields,
				'new_single':True
			})
		
			## HOME render
			self.render_subdir_to_output("admin", 'home_'+objname+'.html', {
				'new_single':new_single,
				'objname': objname,
				'flash': flash_message,
				'list': lista,
				'tab':tab
			})

##################
### COMPETICAO ###
##################

		elif objname == "competicao":

			## TAB renders
			new_single = self.render_subdir("admin", 'obj_%s.html' % objname, {
				'objname': objname,
				'fields': fields,
				'new_single':True, 
				'epocas':listas.get_lista_epocas()
			})
		
			new_multiple = self.render_subdir("admin", 'obj_%s_multiple.html' % objname, {
				'objname': objname,
				'fields': fields,
				'new_multiple':True,
				'howmany':10, 
				'epocas':listas.get_lista_epocas()
			})
			
			## HOME render
			self.render_subdir_to_output("admin", 'home_'+objname+'.html', {
				'new_single':new_single,
				'new_multiple':new_multiple,
				'objname': objname,
				'flash': flash_message,
				'list': lista,
				'tab':tab
			})

###############
### JORNADA ###
###############

		elif objname == "jornada":

			## TAB renders
			new_single = self.render_subdir("admin", 'obj_%s.html' % objname, {
				'objname': objname,
				'fields': fields,
				'new_single':True,
				'competicoes':listas.get_lista_competicoes()

			})
		
			new_multiple = self.render_subdir("admin", 'obj_%s_multiple.html' % objname, {
				'objname': objname,
				'fields': fields,
				'new_multiple':True,
				'howmany':10,
				'competicoes':listas.get_lista_competicoes()
			})
			
			## HOME render
			self.render_subdir_to_output("admin", 'home_'+objname+'.html', {
				'new_single':new_single,
				'new_multiple':new_multiple,
				'objname': objname,
				'flash': flash_message,
				'list': lista,
				'tab':tab
			})
			
############
### JOGO ###
############

		elif objname == "jogo":

			## TAB renders
			new_single = self.render_subdir("admin", 'obj_%s.html' % objname, {
				'objname': objname,
				'fields': fields,
				'new_single':True,
				'clubes':listas.get_lista_clubes(),# para select com clubes,
				'arbitros':listas.get_lista_arbitros(), # para select com árbitros,
				'tacticas':listas.get_lista_tacticas()
			})
		
			new_multiple = self.render_subdir("admin", 'obj_%s_multiple.html' % objname, {
				'objname': objname,
				'fields': fields,
				'new_multiple':True,
				'howmany':10,
				'clubes':listas.get_lista_clubes(),# para select com clubes,
				'arbitros':listas.get_lista_arbitros(), # para select com árbitros,
				'tacticas':listas.get_lista_tacticas()
			})
			
			## HOME render
			self.render_subdir_to_output("admin", 'home_'+objname+'.html', {
				'new_single':new_single,
				'new_multiple':new_multiple,
				'objname': objname,
				'flash': flash_message,
				'list': lista,
				'tab':tab
			})

#############
### LANCE ###
#############

		elif objname == "lance":

			## TAB renders
			new_single = self.render_subdir("admin", 'obj_%s.html' % objname, {
				'objname': objname,
				'fields': fields,
				'new_single':True,
				'tipos_lances':listas.get_lista_tipos_lances(),
				'tipos_jels':listas.get_lista_tipos_jels(),
				'comentadores':listas.get_lista_comentadores()
			})
		
			new_multiple = self.render_subdir("admin", 'obj_%s_multiple.html' % objname, {
				'objname': objname,
				'fields': fields,
				'new_multiple':True,
				'howmany':10,
				'tipos_lances':listas.get_lista_tipos_lances(),
				'tipos_jels':listas.get_lista_tipos_jels(),
				'comentadores':listas.get_lista_comentadores()
			})
			
			## HOME render
			self.render_subdir_to_output("admin", 'home_'+objname+'.html', {
				'new_single':new_single,
				'new_multiple':new_multiple,
				'objname': objname,
				'flash': flash_message,
				'list': lista,
				'tab':tab
			})

#############
### CLUBE ###
#############

		elif objname == "clube":

			## TAB renders
			new_single = self.render_subdir("admin", 'obj_%s.html' % objname, {
				'objname': objname,
				'fields': fields,
				'new_single':True
			})
			
			## HOME render
			self.render_subdir_to_output("admin", 'home_'+objname+'.html', {
				'new_single':new_single,
				'objname': objname,
				'flash': flash_message,
				'list': lista,
				'tab':tab
			})

###############
### JOGADOR ###
###############

		elif objname == "jogador":

			## TAB renders
			new_single = self.render_subdir("admin", 'obj_%s.html' % objname, {
				'objname': objname,
				'fields': fields,
				'new_single':True,
				'posicoes': listas.get_lista_posicoes(),
				'clubes': listas.get_lista_clubes(),
				'epocas':listas.get_lista_epocas()
			})
		
			# new_multiple = self.render_subdir("admin", 'obj_%s_multiple.html' % objname, {
			# 	'objname': objname,
			# 	'fields': fields,
			# 	'new_multiple':True,
			# 	'howmany':10,
			# 	'posicoes': listas.get_lista_posicoes(),
			# 	'clubes': listas.get_lista_clubes(),
			#	'epocas':listas.get_lista_epocas()
			# })
			
			## HOME render
			self.render_subdir_to_output("admin", 'home_'+objname+'.html', {
				'new_single':new_single,
#				'new_multiple':new_multiple,
				'objname': objname,
				'flash': flash_message,
				'list': lista,
				'tab':tab
			})

###############
### ARBITRO ###
###############

		elif objname == "arbitro":

			## TAB renders
			new_single = self.render_subdir("admin", 'obj_%s.html' % objname, {
				'objname': objname,
				'fields': fields,
				'new_single':True
			})
			
			# new_multiple = self.render_subdir("admin", 'obj_%s_multiple.html' % objname, {
			# 	'objname': objname,
			# 	'fields': fields,
			# 	'new_multiple':True,
			# 	'howmany':10
			# })
			
			## HOME render
			self.render_subdir_to_output("admin", 'home_'+objname+'.html', {
			'new_single':new_single,
			'objname': objname,
			'flash': flash_message,
			'list': lista,
			'tab':tab
			})

##################
### COMENTADOR ###
##################

		elif objname == "comentador":

			## TAB renders
			new_single = self.render_subdir("admin", 'obj_%s.html' % objname, {
				'objname': objname,
				'fields': fields,
				'new_single':True
			})
		
			
			## HOME render
			self.render_subdir_to_output("admin", 'home_'+objname+'.html', {
			'new_single':new_single,
			'objname': objname,
			'flash': flash_message,
			'list': lista,
			'tab':tab
			})
			
#############
### FONTE ###
#############

		elif objname == "fonte":

			## TAB renders
			new_single = self.render_subdir("admin", 'obj_%s.html' % objname, {
				'objname': objname,
				'fields': fields,
				'new_single':True
			})
		
			
			## HOME render
			self.render_subdir_to_output("admin", 'home_'+objname+'.html', {
			'new_single':new_single,
			'objname': objname,
			'flash': flash_message,
			'list': lista,
			'tab':tab
			})
			
#########################
### CLUBE_TEM_JOGADOR ###
#########################

		elif objname == "clube_tem_jogador":

			## TAB renders
			new_single = self.render_subdir("admin", 'obj_%s.html' % objname, {
				'objname': objname,
				'fields': fields,
				'new_single':True
			})
		
			new_multiple = self.render_subdir("admin", 'obj_%s_multiple.html' % objname, {
				'objname': objname,
				'fields': fields,
				'new_multiple':True,
				'howmany':10
			})	
			
			## HOME render
			self.render_subdir_to_output("admin", 'home_'+objname+'.html', {
			'new_single':new_single,
			'new_multiple':new_multiple,
			'objname': objname,
			'flash': flash_message,
			'list': lista,
			'tab':tab
			})			

#############################
### CLUBE_JOGA_COMPETICAO ###
#############################

		elif objname == "clube_joga_competicao":

			## TAB renders
			new_single = self.render_subdir("admin", 'obj_%s.html' % objname, {
				'objname': objname,
				'fields': fields,
				'new_single':True
			})
		
			new_multiple = self.render_subdir("admin", 'obj_%s_multiple.html' % objname, {
				'objname': objname,
				'fields': fields,
				'new_multiple':True,
				'howmany':10
			})	
			
			## HOME render
			self.render_subdir_to_output("admin", 'home_'+objname+'.html', {
			'new_single':new_single,
			'new_multiple':new_multiple,
			'objname': objname,
			'flash': flash_message,
			'list': lista,
			'tab':tab
			})			

#########################
### JOGADOR_JOGA_JOGO ###
#########################

		elif objname == "jogador_joga_jogo":

			## TAB renders
			new_single = self.render_subdir("admin", 'obj_%s.html' % objname, {
				'objname': objname,
				'fields': fields,
				'new_single':True
			})
		
			new_multiple = self.render_subdir("admin", 'obj_%s_multiple.html' % objname, {
				'objname': objname,
				'fields': fields,
				'new_multiple':True,
				'howmany':10
			})	
			
			## HOME render
			self.render_subdir_to_output("admin", 'home_'+objname+'.html', {
			'new_single':new_single,
			'new_multiple':new_multiple,
			'objname': objname,
			'flash': flash_message,
			'list': lista,
			'tab':tab
			})			

################################
### COMENTADOR_COMENTA_LANCE ###
################################

		elif objname == "comentador_comenta_lance":

			## TAB renders
			new_single = self.render_subdir("admin", 'obj_%s.html' % objname, {
				'objname': objname,
				'fields': fields,
				'new_single':True
			})
		
			new_multiple = self.render_subdir("admin", 'obj_%s_multiple.html' % objname, {
				'objname': objname,
				'fields': fields,
				'new_multiple':True,
				'howmany':10
			})	
						
			## HOME render
			self.render_subdir_to_output("admin", 'home_'+objname+'.html', {
			'new_single':new_single,
			'new_multiple':new_multiple,
			'objname': objname,
			'flash': flash_message,
			'list': lista,
			'tab':tab
			})			

########################
### JOGADOR_EM_LANCE ###
########################

		elif objname == "jogador_em_lance":

			## TAB renders
			new_single = self.render_subdir("admin", 'obj_%s.html' % objname, {
				'objname': objname,
				'fields': fields,
				'new_single':True
			})
		
			new_multiple = self.render_subdir("admin", 'obj_%s_multiple.html' % objname, {
				'objname': objname,
				'fields': fields,
				'new_multiple':True,
				'howmany':10
			})	
			
			## HOME render
			self.render_subdir_to_output("admin", 'home_'+objname+'.html', {
			'new_single':new_single,
			'new_multiple':new_multiple,
			'objname': objname,
			'flash': flash_message,
			'list': lista,
			'tab':tab
			})			


##########################
### ACUMULADOR JORNADA ###
##########################

		elif objname == "acumulador_jornada":

			## TAB renders
			new_single = self.render_subdir("admin", 'obj_%s.html' % objname, {
				'objname': objname,
				'fields': fields,
				'new_single':True
			})

			new_multiple = self.render_subdir("admin", 'obj_%s_multiple.html' % objname, {
				'objname': objname,
				'fields': fields,
				'new_multiple':True,
				'howmany':10
			})
		
			## HOME render
			self.render_subdir_to_output("admin", 'home_'+objname+'.html', {
			'new_single':new_single,
			'new_multiple':new_multiple,
			'objname': objname,
			'flash': flash_message,
			'list': lista,
			'tab':tab
			})

##########################
### ACUMULADOR COMPETICAO ###
##########################

		elif objname == "acumulador_competicao":

			## TAB renders
			new_single = self.render_subdir("admin", 'obj_%s.html' % objname, {
				'objname': objname,
				'fields': fields,
				'new_single':True
			})
		
			
			## HOME render
			self.render_subdir_to_output("admin", 'home_'+objname+'.html', {
			'new_single':new_single,
			'objname': objname,
			'flash': flash_message,
			'list': lista,
			'tab':tab
			})
			
##########################
### ACUMULADOR EPOCA ###
##########################

		elif objname == "acumulador_epoca":

			## TAB renders
			new_single = self.render_subdir("admin", 'obj_%s.html' % objname, {
				'objname': objname,
				'fields': fields,
				'new_single':True
			})
		
			
			## HOME render
			self.render_subdir_to_output("admin", 'home_'+objname+'.html', {
			'new_single':new_single,
			'objname': objname,
			'flash': flash_message,
			'list': lista,
			'tab':tab
			})