示例#1
0
文件: test.py 项目: YeWR/WeChatTicket
 def test_acti_create_fail_repeat(self):
     a = Activity(name=str(1),
                  key='11',
                  description='aaa',
                  start_time=timezone.now(),
                  end_time=timezone.now(),
                  place='ss',
                  book_end=timezone.now(),
                  book_start=timezone.now(),
                  total_tickets='123',
                  status=Activity.STATUS_PUBLISHED,
                  pic_url='sss',
                  remain_tickets='1')
     a.save()
     models.User.objects.create_user(username='******',
                                     email="*****@*****.**",
                                     password='******')
     c.login(username='******', password='******')
     resp = c.post(
         '/api/a/activity/create', {
             'name': a.name,
             'key': '11',
             'place': 'ss',
             'description': 'ss',
             'picUrl': 'ss',
             'startTime': a.start_time,
             'endTime': str(timezone.now()),
             'bookStart': str(timezone.now()),
             'bookEnd': str(timezone.now()),
             'totalTickets': '123',
             'status': Activity.STATUS_PUBLISHED
         })
     mess = json.loads(str(resp.content, encoding="utf-8"))
     self.assertEqual(mess['code'], 2)
     self.assertEqual(mess['msg'], 'already have this activity')
示例#2
0
 def post(self):
     """
     input:  self.input['name'] -------- 活动名称
             self.input['key'] -------- 活动代称
             self.input['place'] -------- 活动地点
             self.input['description'] -------- 活动描述
             self.input['picUrl'] -------- 活动配图url
             self.input['startTime'] -------- 活动开始时间
             self.input['endTime'] -------- 活动结束时间
             self.input['bookStart'] -------- 抢票开始时间
             self.input['bookEnd'] -------- 抢票结束时间
             self.input['totalTickets'] -------- 总票数
             self.input['status'] -------- 暂存或发布
             添加新活动
             需要登录
     """
     self.check_input('name', 'key', 'place', 'description', 'picUrl', 'startTime', 'endTime', 'bookStart',\
                      'bookEnd', 'totalTickets', 'status')
     if not self.request.user.is_authenticated():
         raise ValidateError("admin-user not login!")
     else:
         new_activity = Activity(name=self.input['name'], key=self.input['key'],place=self.input['place'],\
                                 description=self.input['description'], pic_url=self.input['picUrl'].replace(settings.MEDIA_SAVE_ROOT, settings.MEDIA_ROOT),\
                                 start_time=self.input['startTime'], end_time=self.input['endTime'],\
                                 book_start=self.input['bookStart'], book_end=self.input['bookEnd'],\
                                 total_tickets=self.input['totalTickets'], status=self.input['status'], remain_tickets=self.input['totalTickets'])
         new_activity.save()
         return new_activity.id
示例#3
0
文件: test.py 项目: YeWR/WeChatTicket
 def test_acti_del_succ(self):
     s = Activity(name='11111',
                  key='11',
                  description='aaa',
                  start_time=timezone.now(),
                  end_time=timezone.now(),
                  place='ss',
                  book_end=timezone.now(),
                  book_start=timezone.now(),
                  total_tickets='123',
                  status=Activity.STATUS_PUBLISHED,
                  pic_url='sss',
                  remain_tickets='1')
     s.save()
     name_test = s.name
     models.User.objects.create_user(username='******',
                                     email="*****@*****.**",
                                     password='******')
     c.login(username='******', password='******')
     resp = c.post('/api/a/activity/delete', {'id': s.id})
     mess = json.loads(str(resp.content, encoding="utf-8"))
     self.assertEqual(mess['code'], 0)
     self.assertEqual(mess['msg'], '')
     t = Activity.objects.filter(name=name_test)
     self.assertEqual(t[0].status, Activity.STATUS_DELETED)
示例#4
0
 def post(self):
     self.check_input('name', 'key', 'place', 'description', 'picUrl',
                      'startTime', 'endTime', 'bookStart', 'bookEnd',
                      'totalTickets', 'status')
     if not self.request.user.is_authenticated():
         raise ValidateError('User not logged in!')
     new_activity = Activity(
         name=self.input['name'],
         key=self.input['key'],
         place=self.input['place'],
         description=self.input['description'],
         pic_url=self.input['picUrl'],
         start_time=datetime.strptime(self.input['startTime'],
                                      "%Y-%m-%dT%H:%M:%S.%fZ") +
         timedelta(hours=8),
         end_time=datetime.strptime(self.input['endTime'],
                                    "%Y-%m-%dT%H:%M:%S.%fZ") +
         timedelta(hours=8),
         book_start=datetime.strptime(self.input['bookStart'],
                                      "%Y-%m-%dT%H:%M:%S.%fZ") +
         timedelta(hours=8),
         book_end=datetime.strptime(self.input['bookEnd'],
                                    "%Y-%m-%dT%H:%M:%S.%fZ") +
         timedelta(hours=8),
         remain_tickets=self.input['totalTickets'],
         total_tickets=self.input['totalTickets'],
         status=self.input['status'])
     new_activity.save()
     return new_activity.id
示例#5
0
    def post(self):
        if self.request.user.is_authenticated():
            self.check_input('name', 'key', 'place', 'description', 'picUrl',
                             'startTime', 'endTime', 'bookStart', 'bookEnd',
                             'totalTickets', 'status')

            try:
                new_activity = Activity(
                    name=self.input['name'],
                    key=self.input['key'],
                    place=self.input['place'],
                    description=self.input['description'],
                    pic_url=self.input['picUrl'],
                    start_time=self.input['startTime'],
                    end_time=self.input['endTime'],
                    book_start=self.input['bookStart'],
                    book_end=self.input['bookEnd'],
                    total_tickets=self.input['totalTickets'],
                    status=self.input['status'],
                    remain_tickets=self.input['totalTickets'])
                new_activity.save()
            except:
                raise ValidateError('创建失败')
            else:
                return new_activity.id

        else:
            raise ValidateError('没有登录')
示例#6
0
 def post(self):
     if self.request.user.is_authenticated():
         self.check_input('name', 'key', 'place', 'description', 'picUrl',
                          'startTime', 'endTime', 'bookStart', 'bookEnd',
                          'totalTickets', 'status')
         check = Activity.objects.filter(
             name=self.input['name'],
             start_time=self.input['startTime']).first()
         if check is not None:
             raise LogicError('already have this activity')
         if len(self.input['picUrl']) > 256:
             raise LogicError(
                 'picUrl is too long, please upload local picture')
         act = Activity(name=self.input['name'],
                        key=self.input['key'],
                        place=self.input['place'],
                        description=self.input['description'],
                        pic_url=self.input['picUrl'],
                        start_time=self.input['startTime'],
                        end_time=self.input['endTime'],
                        book_start=self.input['bookStart'],
                        book_end=self.input['bookEnd'],
                        total_tickets=self.input['totalTickets'],
                        status=self.input['status'],
                        remain_tickets=self.input['totalTickets'])
         act.save()
         return act.id
     else:
         raise LoginError('')
示例#7
0
 def post(self):
     # if self.request.user.is_authenticated():
     self.check_input('name', 'key', 'place', 'description', 'picUrl', 'startTime', 'endTime', 
     'bookStart', 'bookEnd', 'totalTickets', 'status')
     
     name = self.input['name']
     key = self.input['key']
     place = self.input['place']
     description = self.input['description']
     pic_url = self.input['picUrl']
     start_time = self.input['startTime']
     end_time = self.input['endTime']
     book_start = self.input['bookStart']
     book_end = self.input['bookEnd']
     total_tickets = self.input['totalTickets']
     remain_tickets = self.input['totalTickets']
     status = self.input['status']
     try:
         new = Activity(name=name, key=key, place=place, 
         description=description, pic_url=pic_url, start_time=start_time, 
         end_time=end_time, book_start=book_start, book_end=book_end, 
         total_tickets=total_tickets, remain_tickets=remain_tickets, status=status)
         new.save()
         return new.id
     except:
         raise ValidateError('Create activity error!')
示例#8
0
    def post(self):
        data = json.loads(self.request.body.decode('utf-8'))
        idList = data['ids']
        nameList = data['names']

        activities = []
        for idx, id in enumerate(idList):
            activity = Activity()
            activity.id = id
            activity.name = nameList[idx]
            activities.append(activity)

        CustomWeChatView.update_menu(activities)
示例#9
0
文件: test.py 项目: YeWR/WeChatTicket
 def setUp(self):
     s = Activity(name='11111',
                  key='11',
                  description='aaa',
                  start_time=timezone.now(),
                  end_time=timezone.now(),
                  place='ss',
                  book_end=timezone.now(),
                  book_start=timezone.now(),
                  total_tickets='123',
                  status=Activity.STATUS_PUBLISHED,
                  pic_url='sss',
                  remain_tickets='1')
     s.save()
示例#10
0
 def setUp(self):
     new_activity = Activity(
         name='玩玩',
         key='玩  ',
         description='桌游',
         start_time=datetime.datetime.fromtimestamp(1539844241),
         end_time=datetime.datetime.fromtimestamp(1539844945),
         place='THU ',
         book_start=datetime.datetime.fromtimestamp(1539844345),
         book_end=datetime.datetime.fromtimestamp(1539844545),
         total_tickets=11,
         pic_url='www.baidu.com',
         remain_tickets=10,
         status=1,
     )
     new_activity.save()
     self.id_success = new_activity.id
     new_activity = Activity(
         name='玩一玩',
         key='玩',
         description='玩桌游',
         start_time=datetime.datetime.fromtimestamp(1539844245),
         end_time=datetime.datetime.fromtimestamp(1539844945),
         place='THU',
         book_start=datetime.datetime.fromtimestamp(1539844345),
         book_end=datetime.datetime.fromtimestamp(1539844545),
         total_tickets=11,
         pic_url='www.baidu.com',
         remain_tickets=10,
         status=0,
     )
     new_activity.save()
     self.id_fail = new_activity.id
示例#11
0
def createActivityAfterBooking():
    act = Activity(name='act_after_booking',
                   key='after_booking',
                   description='desc1',
                   place='place1',
                   start_time=datetime.now(timezone.utc),
                   end_time=datetime.now(timezone.utc) + timedelta(days=1),
                   book_start=datetime.now(timezone.utc) - timedelta(days=2),
                   book_end=datetime.now(timezone.utc) - timedelta(days=1),
                   total_tickets=100,
                   status=Activity.STATUS_PUBLISHED,
                   pic_url='',
                   remain_tickets=100)
    act.save()
    return act
示例#12
0
    def status(self):
        content = self.input['Content'].split()
        if len(content) == 1:
            return self.STATUS_NOT_FIND
        else:
            content = content[1]
        if content is not None:
            # 在name字段匹配
            activity_1 = Activity.get_all_activities()
            if activity_1:
                activity_1 = activity_1.filter(name=content)
            if activity_1 and len(activity_1) > 0:
                activity_1 = activity_1[0]
            else:
                activity_1 = None

            # 在key字段匹配
            activity_2 = Activity.get_all_activities()
            if activity_2:
                activity_2 = activity_2.filter(name=content)
            if activity_2 and len(activity_2) > 0:
                activity_2 = activity_2[0]
            else:
                activity_2 = None

            if activity_1:
                activity = activity_1
            elif activity_2:
                activity = activity_2
            else:
                return self.STATUS_NO_ACTIVITY

            my_ticket = Ticket.get_by_activity_and_student_number(
                activity.id, self.user.student_id)
            valid_ticket = None
            for tic in my_ticket:
                if tic.status == Ticket.STATUS_VALID:
                    valid_ticket = tic
            if not my_ticket:
                return self.STATUS_NO_TICKET
            if not valid_ticket:
                return self.STATUS_NOT_LEGAL
            else:
                valid_ticket.status = Ticket.STATUS_CANCELLED
                valid_ticket.save()
                activity.remain_tickets = activity.remain_tickets + 1
                activity.save()
                return self.STATUS_VALID
示例#13
0
    def handle(self):
        content = self.input['Content'].split()
        if len(content) == 1:
            return self.reply_text('退票失败,找不到需要退票的活动_(:з」∠)_')
        else:
            content = content[1]
        if content is not None:
            # 在name字段匹配
            activity_1 = Activity.get_all_activities()
            if activity_1:
                activity_1 = activity_1.filter(name=content)
            if activity_1 and len(activity_1) > 0:
                activity_1 = activity_1[0]
            else:
                activity_1 = None

            # 在key字段匹配
            activity_2 = Activity.get_all_activities()
            if activity_2:
                activity_2 = activity_2.filter(name=content)
            if activity_2 and len(activity_2) > 0:
                activity_2 = activity_2[0]
            else:
                activity_2 = None

            if activity_1:
                activity = activity_1
            elif activity_2:
                activity = activity_2
            else:
                return self.reply_text('退票失败,找不到需要退票的活动_(:з」∠)_')

            my_ticket = Ticket.get_by_activity_and_student_number(
                activity.id, self.user.student_id)
            valid_ticket = None
            for tic in my_ticket:
                if tic.status == Ticket.STATUS_VALID:
                    valid_ticket = tic
            if not my_ticket:
                return self.reply_text('退票失败,您没有此次活动的电子票!|・ω・`)')
            if not valid_ticket:
                return self.reply_text('退票失败,您没有此次活动的合法电子票!|・ω・`)')
            else:
                valid_ticket.status = Ticket.STATUS_CANCELLED
                valid_ticket.save()
                activity.remain_tickets = activity.remain_tickets + 1
                activity.save()
                return self.reply_text('活动 [' + activity.name + '] 退票成功!')
示例#14
0
 def get(self):
     self.check_input('id')
     if not self.request.user.is_authenticated():
         raise ValidateError('User has not logged in.')
     activity = Activity.get_by_id(self.input['id'])
     usedTickets = 0
     for ticket in activity.ticket_set.all():
         if ticket.status == Ticket.STATUS_USED:
             usedTickets += 1
     data = {
         'name': activity.name,
         'key': activity.key,
         'description': activity.description,
         'startTime': int(time.mktime(activity.start_time.timetuple())),
         'endTime': int(time.mktime(activity.end_time.timetuple())),
         'place': activity.place,
         'bookStart': int(time.mktime(activity.book_start.timetuple())),
         'bookEnd': int(time.mktime(activity.book_end.timetuple())),
         'totalTickets': activity.total_tickets,
         'picUrl': activity.pic_url,
         'bookedTickets': activity.total_tickets - activity.remain_tickets,
         'usedTickets': usedTickets,
         'currentTime': int(time.time()),
         'status': activity.status
     }
     return data
示例#15
0
    def get(self):
        if not self.request.user.is_authenticated():
            raise ValidateError('You need to login first.')
        self.check_input('id')
        try:
            activity = Activity.get_by_id(self.input['id'])
            if activity.status == Activity.STATUS_DELETED:
                raise ValidateError('The activity has been deleted.')

            item = {}
            item['name'] = activity.name
            item['key'] = activity.key
            item['description'] = activity.description
            item['startTime'] = int(activity.start_time.timestamp())
            item['endTime'] = int(activity.end_time.timestamp())
            item['place'] = activity.place
            item['bookStart'] = int(activity.book_start.timestamp())
            item['bookEnd'] = int(activity.book_end.timestamp())
            item['totalTickets'] = activity.total_tickets
            if activity.status == Activity.STATUS_PUBLISHED:
                item['status'] = 1
            else:
                item['status'] = 0
            item['picUrl'] = activity.pic_url

            item['currentTime'] = int(datetime.datetime.now().timestamp())
            item[
                'bookedTickets'] = activity.total_tickets - activity.remain_tickets
            item['usedTickets'] = Ticket.objects.filter(
                activity_id=activity.id, status=Ticket.STATUS_USED).count()
            return item
        except Exception as e:
            raise MySQLError('Query activity detail failed!')
示例#16
0
文件: test.py 项目: YeWR/WeChatTicket
 def test_acti_menu_get_succ(self):
     s = []
     for i in range(6):
         s.append(
             Activity(name=str(i),
                      key='11',
                      description='aaa',
                      start_time=timezone.now(),
                      end_time=timezone.now(),
                      place='ss',
                      book_end=timezone.now(),
                      book_start=timezone.now(),
                      total_tickets='123',
                      status=Activity.STATUS_PUBLISHED,
                      pic_url='sss',
                      remain_tickets='1'))
         s[i].save()
     models.User.objects.create_user(username='******',
                                     email="*****@*****.**",
                                     password='******')
     c.login(username='******', password='******')
     resp = c.get('/api/a/activity/menu/', {'arg': 'useless'})
     mess = json.loads(str(resp.content, encoding="utf-8"))
     self.assertEqual((mess['code']), 0)
     self.assertEqual(mess['msg'], '')
     m = mess['data']
     for i in range(len(m)):
         self.assertEqual(m[i]['name'], str(i))
示例#17
0
 def get_activity(self):
     """
     note: command can be followed by ONE space and activity key
     :return: current activity id, int
     """
     if self.is_text_command('抢票'):
         text = self.extract_activity_name()
         return Activity.get_by_activity_key(text)
     else:
         key = self.input['EventKey']
         key = key[len(self.view.event_keys['book_header']):]
         if key.isdigit():
             activity_id = int(key)
             return Activity.get_by_activity_id(activity_id)
         else:
             raise LogicError('EventKey does not contain id')
示例#18
0
    def post(self):
        if not self.request.user.is_authenticated():
            raise ValidateError('You need to login first.')
        #  self.check_input('id', 'name', 'place', 'description', 'picUrl',
        #                   'startTime', 'endTime', 'bookStart', 'bookEnd', 'totalTickets', 'status')
        try:
            activity = Activity.get_by_id(self.input['id'])
            if activity.status == Activity.STATUS_SAVED:
                activity.name = self.input['name']
                activity.place = self.input['place']
            activity.description = self.input['description']
            activity.pic_url = self.input['picUrl']
            current_time = datetime.datetime.now().timestamp()

            # 这一段的顺序比较重要,牵涉到数据库date对象和str对象的转换

            if current_time < activity.start_time.timestamp():
                activity.book_end = self.input['bookEnd']

            if current_time < activity.end_time.timestamp():
                activity.start_time = self.input['startTime']
                activity.end_time = self.input['endTime']

            if current_time < activity.book_start.timestamp():
                activity.total_tickets = self.input['totalTickets']

            if activity.status is not Activity.STATUS_SAVED:
                activity.book_start = self.input['bookStart']

            if activity.status is not Activity.STATUS_PUBLISHED:
                activity.status = self.input['status']
            activity.save()
        except Exception as e:
            raise MySQLError('Change activity detail failed!')
示例#19
0
文件: test.py 项目: YeWR/WeChatTicket
 def setUp(self):
     for i in range(6):
         u = User(open_id=str(i), student_id=str(i))
         u.save()
     a = Activity(name=str(1),
                  key='11',
                  description='aaa',
                  start_time=timezone.now(),
                  end_time=timezone.now(),
                  place='ss',
                  book_end=timezone.now(),
                  book_start=timezone.now(),
                  total_tickets='123',
                  status=Activity.STATUS_PUBLISHED,
                  pic_url='sss',
                  remain_tickets='1')
     a.save()
示例#20
0
 def get(self):
     self.check_input('openid', 'ticket')
     got_ticket = Ticket.get_student_ticket(self.input['openid'], self.input['ticket'])
     got_activity = Activity.get_by_id(got_ticket.activity_id)
     return prepare_data_reply(
         ['name', 'place', 'key', 'uniqueId', 'startTime', 'endTime', 'status'],
         got_ticket, got_activity, name='activityName', key='activityKey'
     )
示例#21
0
 def get(self):
     self.check_input('id')
     got_activity = Activity.get_by_id(self.input['id'])
     return prepare_data_reply(
         ['name', 'key', 'description', 'startTime', 'endTime', 'place', 'bookStart', 'bookEnd',
          'totalTickets', 'picUrl', 'remainTickets'],
         got_activity
     )
示例#22
0
 def post(self):
     if not self.request.user.is_authenticated():
         raise ValidateError('User has not logged in.')
     activityList = []
     for activity_id in self.input:
         activity = Activity.get_by_id(activity_id)
         activity.status = Activity.STATUS_PUBLISHED
         activity.save()
         activityList.append(activity)
     CustomWeChatView.update_menu(activityList)
示例#23
0
    def get(self):
        """
        input:  self.input['id'] -------- 活动id
                返回活动的详情数据
                需要登录
        """
        self.check_input('id')
        if not self.request.user.is_authenticated():
            raise ValidateError("admin-user not login!")
        else:
            activity = Activity.get_by_id(self.input['id'])

            return {
                'name':
                activity.name,
                'key':
                activity.key,
                'description':
                activity.description,
                'startTime':
                time.mktime(
                    time.strptime(
                        activity.start_time.strftime('%Y-%m-%d %H:%M:%S'),
                        '%Y-%m-%d %H:%M:%S')),
                'endTime':
                time.mktime(
                    time.strptime(
                        activity.end_time.strftime('%Y-%m-%d %H:%M:%S'),
                        '%Y-%m-%d %H:%M:%S')),
                'place':
                activity.place,
                'bookStart':
                time.mktime(
                    time.strptime(
                        activity.book_start.strftime('%Y-%m-%d %H:%M:%S'),
                        '%Y-%m-%d %H:%M:%S')),
                'bookEnd':
                time.mktime(
                    time.strptime(
                        activity.book_end.strftime('%Y-%m-%d %H:%M:%S'),
                        '%Y-%m-%d %H:%M:%S')),
                'totalTickets':
                activity.total_tickets,
                'picUrl':
                activity.pic_url,
                'bookedTickets':
                activity.total_tickets - activity.remain_tickets,
                'usedTickets':
                Ticket.count_used_tickets(activity.id),
                'currentTime':
                int(time.time()),  # 当前时间的秒级时间戳
                'status':
                activity.status,
            }
示例#24
0
文件: test.py 项目: YeWR/WeChatTicket
 def test_acti_det_mod_succ(self):
     s = Activity(name='11111',
                  key='11',
                  description='aaa',
                  start_time=timezone.now(),
                  end_time=timezone.now(),
                  place='ss',
                  book_end=timezone.now(),
                  book_start=timezone.now(),
                  total_tickets='123',
                  status=Activity.STATUS_SAVED,
                  pic_url='sss',
                  remain_tickets='1')
     s.save()
     models.User.objects.create_user(username='******',
                                     email="*****@*****.**",
                                     password='******')
     c.login(username='******', password='******')
     resp = c.post(
         '/api/a/activity/detail', {
             'id': s.id,
             'name': 'test',
             'place': 'test',
             'description': 'ss',
             'picUrl': 'to test',
             'startTime': s.start_time,
             'endTime': s.end_time,
             'bookStart': "test",
             'bookEnd': s.book_end,
             'totalTickets': '123',
             'status': str(Activity.STATUS_SAVED)
         })
     mess = json.loads(str(resp.content, encoding="utf-8"))
     self.assertEqual(mess['code'], 0)
     self.assertEqual(mess['msg'], '')
     # change
     t = Activity.objects.filter(id=s.id).first()
     self.assertEqual(t.pic_url, 'to test')
     self.assertEqual(t.place, 'test')
     self.assertEqual(t.name, 'test')
     self.assertEqual(t.book_start, 'test')
示例#25
0
文件: test.py 项目: YeWR/WeChatTicket
 def test_acti_del_fail(self):
     s = Activity(name='11111',
                  key='11',
                  description='aaa',
                  start_time=timezone.now(),
                  end_time=timezone.now(),
                  place='ss',
                  book_end=timezone.now(),
                  book_start=timezone.now(),
                  total_tickets='123',
                  status=Activity.STATUS_PUBLISHED,
                  pic_url='sss',
                  remain_tickets='1')
     s.save()
     name_test = s.name
     resp = c.post('/api/a/activity/delete', {'id': s.id})
     mess = json.loads(str(resp.content, encoding="utf-8"))
     self.assertEqual(mess['code'], 4)
     self.assertEqual(mess['msg'], '')
     t = Activity.objects.filter(name=name_test)
     self.assertEqual(t[0].status, Activity.STATUS_PUBLISHED)
示例#26
0
 def post(self):
     self.check_input('name', 'key', 'place', 'description', 'startTime',
                      'endTime', 'bookStart', 'bookEnd', 'totalTickets',
                      'status', 'picUrl')
     act_info = self.input
     new_act = Activity(name=act_info["name"],
                        key=act_info["key"],
                        place=act_info["place"],
                        description=act_info["description"],
                        start_time=act_info["startTime"],
                        end_time=act_info["endTime"],
                        book_start=act_info["bookStart"],
                        book_end=act_info["bookEnd"],
                        total_tickets=act_info["totalTickets"],
                        status=act_info["status"],
                        pic_url=act_info["picUrl"],
                        remain_tickets=act_info["totalTickets"],
                        used_tickets=0)
     new_act.save()
     id = new_act.id
     return id
示例#27
0
 def post(self):
     """
     input:  self.input['id'] -------- 活动id
             删除此id对应的活动
             需要登录(没写,但我觉得应该要吧...不然直接打这个url进来不就渗透了吗...)
     """
     self.check_input('id')
     if not self.request.user.is_authenticated():
         raise ValidateError("admin-user not login!")
     else:
         activity = Activity.get_by_id(self.input['id'])
         activity.delete()
         return
示例#28
0
 def post(self):
     self.check_input('name', 'key', 'place', 'description', 'picUrl',
                      'startTime', 'endTime', 'bookStart', 'bookEnd',
                      'totalTickets', 'status')
     if len(list(Activity.objects.filter(key=self.input['key']))) > 0:
         raise InputError(
             "activity key %s already exists! use another key instead." %
             (self.input['key']))
     q = Activity(name=self.input['name'],
                  key=self.input['key'],
                  place=self.input['place'],
                  description=self.input['description'],
                  pic_url=self.input['picUrl'],
                  start_time=self.input['startTime'],
                  end_time=self.input['endTime'],
                  book_start=self.input['bookStart'],
                  book_end=self.input['bookEnd'],
                  total_tickets=self.input['totalTickets'],
                  status=self.input['status'])
     q.remain_tickets = q.total_tickets
     q.save()
     return q.id
示例#29
0
    def handle(self):
        text = self.extract_activity_name()

        activity = Activity.objects.filter(key=text).first()
        if activity is None or activity.status != Activity.STATUS_PUBLISHED:
            return self.reply_text(
                self.get_message('cancel_activity_not_found'))

        if self.user.student_id == '':  # not bind yet
            return self.reply_text(self.get_message('id_not_bind'))

        ticket = Ticket.objects.filter(student_id=self.user.student_id,
                                       activity=activity,
                                       status=Ticket.STATUS_VALID).first()
        if ticket is None:
            return self.reply_text(self.get_message('no_ticket_in_hand'))

        Activity.increase_ticket_exclusive(activity.id)
        ticket.status = Ticket.STATUS_CANCELLED
        ticket.save()

        return self.reply_text(
            self.get_message('cancel_complete', activity=activity))
示例#30
0
    def handle(self):
        try:
            activity = self.get_activity()
            if activity.status != Activity.STATUS_PUBLISHED:
                raise LogicError('activity not published')
        except LogicError:
            return self.reply_text(self.get_message('activity_not_found'))

        if self.user.student_id == '':  # not bind yet
            return self.reply_text(self.get_message('id_not_bind'))

        old_ticket = Ticket.objects.filter(student_id=self.user.student_id,
                                           activity=activity,
                                           status=Ticket.STATUS_VALID).first()
        if old_ticket is not None:  # in fact, it is not snap up ticket, it is withdraw ticket
            return self.reply_single_news({
                'Title':
                self.get_message('withdraw_ticket_title'),
                'Description':
                self.get_message('withdraw_ticket_detail', activity=activity),
                'Url':
                self.url_ticket_detail(old_ticket),
                'PicUrl':
                activity.pic_url,
            })

        if self.get_current_time() < activity.book_start.timestamp(
        ):  # not start yet
            return self.reply_text(self.get_message('book_not_start'))

        if self.get_current_time() > activity.book_end.timestamp(
        ):  # end already
            return self.reply_text(self.get_message('book_end_already'))

        result = Activity.decrease_ticket_exclusive(activity.id)
        if not result:
            return self.reply_text(self.get_message('sold_out'))

        ticket = Ticket.create_ticket(student_id=self.user.student_id,
                                      activity=activity)
        return self.reply_single_news({
            'Title':
            self.get_message('book_ticket_success_title'),
            'Description':
            self.get_message('book_ticket_success_detail', activity=activity),
            'Url':
            self.url_ticket_detail(ticket),
            'PicUrl':
            activity.pic_url,
        })