def post_competition(self):
    """Reads common info about competition and statistic flags from post-request and fills template's values"""
    try:
        errors = []
        start_date = self.request.POST['dateStartNew']
        #if start_date >= datetime.now():           # TODO: error because start_date is string not datetime object. Convert string to date
        #    pass
        finish_date = self.request.POST['dateFinishNew']
        #if finish_date >= datetime.now():
        #    pass#errors.append('Finish date in the past')
        comp_name = self.request.POST['nameCompNew']
        d_count = int(self.request.POST['dayCount'])
        show_places = self.request.POST['writePlaces']
        show_map = self.request.POST['showMap']
        stat_day = read_checkbox_post(self, 'statistic0')       #TODO: fix statistic
        stat_sex = read_checkbox_post(self, 'statistic1')
        stat_qual = read_checkbox_post(self, 'statistic2')
    except KeyError:
        errors.append('Key error at request')
    competition = Competition(name=comp_name, d_start=date_to_python(start_date), d_finish=date_to_python(finish_date),
                              days_count=d_count)#, statistic=[stat_day, stat_sex, stat_qual])
    competition.put()
    temp_values = {'start': start_date, 'finish': finish_date, 'name': comp_name, 'show_places': show_places,
                   'show_map': show_map, 'days_count': range(1, int(d_count) + 1)}
    return [competition, temp_values, errors]
 def get(self):
     """Displays list of all members in system to mark whom will take a part in competition"""
     login = users.create_login_url(dest_url="/postSignIn")
     comp_key = self.request.GET["competition"]
     comp = Competition.get(comp_key)
     membs = db.Query(Member).order("surname")
     keys_in_comp = []
     keys_not_in = []
     memb_not_in = []
     memb_in_comp = []
     membs_comps = db.Query(CompMemb).filter("competition =", comp).order("member").run(batch_size=10000)
     for m in membs_comps:
         if m.member.key() not in keys_in_comp:
             memb_in_comp.append(m.member)
             keys_in_comp.append(m.member.key())
     for m in membs:
         if m.key() not in keys_in_comp:
             keys_not_in.append(m.key())
             memb_not_in.append(m)
     temp_values = {
         "login": login,
         "logout": users.create_logout_url("/login"),
         "name": comp.name,
         "membs_count": membs.count(),
         "membs_in": memb_in_comp,
         "membs_not": memb_not_in,
         "keys_in": keys_in_comp,
         "keys_not": keys_not_in,
         "competition": comp_key,
     }
     template = JINJA_ENVIRONMENT.get_template("/templates/tmmosc/member/MemberList.html")
     self.response.write(template.render(temp_values))
 def post(self):
     """Saves members that will take a part in competition to database"""
     user = users.get_current_user()
     if not user:
         show_unauth_page(self)
     else:
         email = user.email()
         [is_org, is_lead, is_memb] = OtherHandlers.find_user(email)
         if is_lead and self.session.get("role") == "leader":
             days_checked_count = int(self.request.POST.get("daysCheckedCount"))
             comp_key = self.request.POST.get("competition")
             competition = Competition.get(comp_key)
             dist_query = db.Query(Distance).filter("competition =", competition)
             distances = dist_query.run(batch_size=1000)
             distinfos = []  # all groups of all days
             for dist in distances:
                 distinfo = (
                     db.Query(DistInfo).filter("distance =", dist).run()
                 )  # all groups for that day (=distance)
                 distinfos.append(distinfo)
             for i_day in range(days_checked_count):  # runs through all days one by one
                 memb_count_i_day = int(self.request.POST.get("membsInDay%s" % str(i_day)))
                 for j_memb in range(memb_count_i_day):  # runs through all member of i- day
                     memb_group = self.request.POST.get("checkMembGroup%s" % str(i_day) + "_%s" % str(j_memb))
                     keys = memb_group.split("_")
                     member = Member.get(keys[0])
                     group_code = keys[1]
                     CompMemb(competition=competition, member=member, group=group_code, day_numb=i_day + 1).put()
             time.sleep(0.1)
             self.redirect("/competition?dbKey=%s" % comp_key)
         else:
             show_unauth_page(self)
 def get(self):
     """Displays empty form to enter password of current user"""
     login = users.create_login_url(dest_url="/postSignIn")
     comp_key = self.request.GET["competition"]
     memb_key = self.request.GET["member"]
     comp = Competition.get(comp_key)
     member = Member.get(memb_key)
     try:
         self.request.GET["tooltip"]
         tooltip = u"Неверный пароль подтверждения. Попробуйте еще раз"
     except:
         tooltip = ""
     temp_values = {
         "login": login,
         "logout": users.create_logout_url("/login"),
         "name": comp.name,
         "competition": comp_key,
         "memb_key": memb_key,
         "surname": member.surname,
         "team": member.command.name,
         "card_title": u"Удаление участника из заявки",
         "tooltip": tooltip,
     }
     template = JINJA_ENVIRONMENT.get_template("/templates/tmmosc/member/EnterPass.html")
     self.response.write(template.render(temp_values))
 def post(self):
     """Displays group of current competition to check member"""
     login = users.create_login_url(dest_url="/postSignIn")
     memb_key = self.request.POST.get("member")
     memb = Member.get(memb_key)
     comp_key = self.request.POST.get("competition")
     comp = Competition.get(comp_key)
     distances = db.Query(Distance).filter("competition =", comp).order("day_numb")
     groups_by_days = []
     for dist in distances:
         groups_by_days.append(dist.distinfo_set.run(batch_size=100))
     temp_values = {
         "login": login,
         "logout": users.create_logout_url("/login"),
         "name": comp.name,
         "surname": memb.surname,
         "team": memb.command.name,
         "memb_key": memb_key,
         "competition": comp_key,
         "card_title": u"Заявка участника",
         "dists": distances,
         "groups_by_day": groups_by_days,
     }
     template = JINJA_ENVIRONMENT.get_template("/templates/tmmosc/member/ToDaysGroups.html")
     self.response.write(template.render(temp_values))
 def post(self):
     """Displays members added to current competition to check their groups"""
     user = users.get_current_user()
     if not user:
         show_unauth_page(self)
     else:
         email = user.email()
         [is_org, is_lead, is_memb] = OtherHandlers.find_user(email)
         roles = OtherHandlers.create_roles_head(self, is_org, is_lead, is_memb)
         if is_lead and self.session.get("role") == "leader":
             comp_key = self.request.POST.get("competition")
             competition = Competition.get(comp_key)
             days_count = competition.days_count
             membs_by_day = []
             show_tables = False
             for i in range(days_count):  # add members (keys) for each day
                 membs_key_day = self.request.POST.getall("checkMemb" + str(i))
                 membs_i_day = []
                 for memb_key in membs_key_day:
                     member = Member.get(memb_key)
                     membs_i_day.append(member)
                     if show_tables == False:
                         show_tables = True
                 membs_by_day.append(membs_i_day)
             show_arrow_back = True
             for membs_i_day in membs_by_day:
                 if len(membs_i_day) > 0:
                     show_arrow_back = False
                     break
             dist_query = db.Query(Distance).filter("competition =", competition)
             distances = dist_query.run()
             type_lent = []
             groups_on_day = []
             for dist in distances:
                 type_lent.append(dist.type + " " + dist.lent)
                 dist_infos = dist.distinfo_set.run(batch_size=1000)
                 groups_i_day = []
                 for info in dist_infos:
                     groups_i_day.append(info.group_name)
                 groups_on_day.append(groups_i_day)
             temp_values = {
                 "roles": roles,
                 "user_email": email,
                 "logout": users.create_logout_url("/login"),
                 "membs_by_day": membs_by_day,
                 "dists": type_lent,
                 "groups": groups_on_day,
                 "comp_key": comp_key,
                 "show_tables": show_tables,
                 "show_arrow": show_arrow_back,
             }
             template = JINJA_ENVIRONMENT.get_template("templates/tmmosc/leader/MembersToDays.html")
             self.response.write(template.render(temp_values))
         else:
             show_unauth_page(self)
 def post(self):
     """Deletes certain user from current competition"""
     memb_key = self.request.POST.get("member")
     member = Member.get(memb_key)
     paswd = self.request.POST.get("changePass")
     comp_key = self.request.POST.get("competition")
     comp = Competition.get(comp_key)
     if salt_pass(paswd) == member.pass_to_edit:
         comp_membs = CompMemb.all().filter("member =", member).filter("competition =", comp)
         db.delete(comp_membs)
         time.sleep(0.1)
         self.redirect("/entryOneMemb?competition=" + comp_key)
     else:
         self.redirect("/deleteFromComp?competition=" + comp_key + "&member=" + memb_key + "&tooltip=True")
 def get(self):
     """Displays list of team members to mark some on current competition"""
     user = users.get_current_user()
     if not user:
         show_unauth_page(self)
     else:
         email = user.email()
         [is_org, is_lead, is_memb] = OtherHandlers.find_user(email)
         roles = OtherHandlers.create_roles_head(self, is_org, is_lead, is_memb)
         if is_lead and self.session.get("role") == "leader":
             comp_key = self.request.GET["competition"]
             competition = Competition.get(comp_key)
             leader = db.Query(Leader).filter("user ="******"command =", team).order("surname")
             memb_team = team_q.run(batch_size=1000)
             entry_membs = []
             no_entry_membs = []
             days = []
             for memb in memb_team:
                 m = db.Query(CompMemb).filter("competition =", competition).filter("member =", memb)
                 membs = m.run()
                 if m.count():
                     entry_membs.append(memb)
                     m_d = []
                     for mem in membs:
                         m_d.append(mem.day_numb)
                     days.append(m_d)
                 else:
                     no_entry_membs.append(memb)
             temp_values = {
                 "roles": roles,
                 "user_email": email,
                 "logout": users.create_logout_url("/login"),
                 "team_name": team.name,
                 "membs_count": team_q.count(),
                 "entry_membs": entry_membs,
                 "no_entry_membs": no_entry_membs,
                 "comp_name": competition.name,
                 "days_count": range(1, int(competition.days_count) + 1),
                 "comp_key": comp_key,
                 "days": days,
             }
             template = JINJA_ENVIRONMENT.get_template("templates/tmmosc/leader/MembersToCompetition.html")
             self.response.write(template.render(temp_values))
         else:
             show_unauth_page(self)
示例#9
0
 def get(self):
     """Displays list of competition"""
     try:
         loc_role = self.session.get('role')
     except:
         loc_role = 'anonim'
     comps = Competition.all().order('d_start')
     comps_count = comps.count()
     d_start = []
     d_finish = []
     pzs = []
     is_open_pz = []
     for c in comps:
         d_start.append(str(c.d_start))
         d_finish.append(str(c.d_finish))
         infos_of_comp = c.info_set.run(batch_size=1000)
         is_open = False
         for info_of_day in infos_of_comp:
             is_open = is_open or (info_of_day.pz_is_open and (datetime.today().date() < info_of_day.pz_add_end))
         is_open_pz.append(is_open)
     d_start = format_date_list(d_start)
     d_finish = format_date_list(d_finish)
     user = users.get_current_user()
     temp_values = {'comps': comps, 'c_count': comps_count, 'd_start': d_start, 'd_finish': d_finish, 'pzs': pzs,
                    'is_open_pz': is_open_pz}
     if not user:        # user is anonim
         login = users.create_login_url(dest_url='/postSignIn')
         temp_values.update({'login': login, 'is_user': False})
         template = JINJA_ENVIRONMENT.get_template('/templates/tmmosc/CompetitionList.html')
     else:
         email = user.email()
         [is_org, is_lead, is_memb] = find_user(email)
         roles = create_roles_head(self, is_org, is_lead, is_memb)
         temp_values.update({'user_email': email, 'roles': roles, 'logout': users.create_logout_url('/login'), 
                             'is_user': True})
         try:            # show compList corresponding to user's role
             template = JINJA_ENVIRONMENT.get_template('/templates/tmmosc/%s/CompetitionList.html' % loc_role)
         except:         # user is anonim
             login = users.create_login_url(dest_url='/postSignIn')
             temp_values = {'login': login, 'comps': comps, 'c_count': comps_count, 'd_start': d_start, 'd_finish':
                         d_finish, 'pzs': pzs, 'is_open_pz': is_open_pz, 'logout': users.create_logout_url('/login')}
             template = JINJA_ENVIRONMENT.get_template('/templates/tmmosc/CompetitionList.html')
     self.response.write(template.render(temp_values))
示例#10
0
 def post(self):
     """Saves current member to database so that he will take a part in competition"""
     memb_key = self.request.POST.get("member")
     memb = Member.get(memb_key)
     paswd = self.request.POST.get("changePass")
     comp_key = self.request.POST.get("competition")
     comp = Competition.get(comp_key)
     if salt_pass(paswd) == memb.pass_to_edit:
         for i in range(comp.days_count):
             infos_count = int(self.request.POST.get("infosCount%s" % str(i)))
             for group_num in range(infos_count):
                 checked_group = self.request.POST.get("checkMembGroup%s" % (str(i) + str(group_num)))
                 if checked_group:
                     entry = CompMemb(competition=comp, member=memb, group=checked_group, day_numb=i + 1)
                     entry.put()
                     time.sleep(0.1)
                     self.redirect("/entryOneMemb?competition=" + comp_key)
     else:
         login = users.create_login_url(dest_url="/postSignIn")
         distances = db.Query(Distance).filter("competition =", comp).order("day_numb")
         groups_by_days = []
         for dist in distances:
             groups_by_days.append(dist.distinfo_set.run(batch_size=100))
         temp_values = {
             "login": login,
             "logout": users.create_logout_url("/login"),
             "name": comp.name,
             "surname": memb.surname,
             "team": memb.command.name,
             "memb_key": memb_key,
             "competition": comp_key,
             "card_title": u"Заявка участника",
             "dists": distances,
             "groups_by_day": groups_by_days,
             "tooltip": u"Неверный пароль подтверждения. Попробуйте еще раз",
         }
         template = JINJA_ENVIRONMENT.get_template("/templates/tmmosc/member/ToDaysGroups.html")
         self.response.write(template.render(temp_values))
 def get(self):
     """Displays info about competition stored in database"""
     user = users.get_current_user()
     key = self.request.GET['dbKey']
     comp = Competition.get(key)
     info_values = info_from_db(comp)
     diz_values = diz_from_db(comp)
     memb_values = membs_from_db(comp)
     temp_values = {'start': format_date(str(comp.d_start)), 'finish': format_date(str(comp.d_finish)), 'name':
                    comp.name, 'days_count': range(1, comp.days_count + 1), 'comp_id': comp.key()}
     temp_values.update(info_values)
     temp_values.update(diz_values)
     temp_values.update(memb_values)
     if not user:    # user is anonim
         login = users.create_login_url(dest_url='/postSignIn')
         temp_values.update({'action': '/entryOneMemb', 'login': login})
         template = JINJA_ENVIRONMENT.get_template('templates/tmmosc/CertainCompetition.html')
     else:
         email = user.email()
         [is_org, is_lead, is_memb] = OtherHandlers.find_user(email)
         roles = OtherHandlers.create_roles_head(self, is_org, is_lead, is_memb)
         temp_values.update({'roles': roles, 'user_email': email, 'logout': users.create_logout_url('/login')})
         if is_org and self.session.get('role') == 'organizer':
             action = ''
             template = JINJA_ENVIRONMENT.get_template('templates/tmmosc/organizer/CertainCompetition.html')
         elif is_lead and self.session.get('role') == 'leader':
             action = '/entryMembs'
             template = JINJA_ENVIRONMENT.get_template('templates/tmmosc/leader/CertainCompetition.html')
         elif is_memb and self.session.get('role') == 'member':
             action = '/entryOneMemb'
             template = JINJA_ENVIRONMENT.get_template('templates/tmmosc/member/CertainCompetition.html')
         else:
             action = '/entryOneMemb'
             template = JINJA_ENVIRONMENT.get_template('templates/tmmosc/CertainCompetition.html')
         temp_values.update({'action': action})
     self.response.write(template.render(temp_values))