def post(self): # Creates new tickets data = TicketCreator.parser.parse_args() customer = UserModel.find_by_email(data['customer'], is_customer=True) # Check if username exists if customer: # Create ticket ticket = TicketModel(customer.id, data['subject']) try: ticket.add_to_db() except IntegrityError: return {"message": "An error occurred inserting the item."}, 500 # Add comment timestamp = int(time.time()) comment = CommentModel( ticket.number, timestamp, customer.email, data['content']) try: comment.add_to_db() except IntegrityError: return {"message": "An error occurred inserting the item."}, 500 return ticket.json(), 201 return {"message": "Customer not found"}, 400
def post(self): data = TicketGenerate.generateparser.parse_args() ticket = TicketModel(**data) try: ticket_id = ticket.save_to_db() except: return {"message": "An error occured while generating ticket"}, 500 return { "message": "Ticket generated successfully", "ticket_id": ticket_id }, 201
def post(self): data = TicketInfo.infoparser.parse_args() ticket = TicketModel.find_by_ticketid(data['ticket_id']) if ticket: return {"message": "Ticket Found", "ticket": ticket.json()}, 200 return {"message": "Error while searching for ticket"}, 500
def json(self): tickets = TicketModel.find_by_order(self.id) return { 'id': self.id, 'order_date': self.order_date, 'user_id': self.user_id, 'tickets': [ticket.json() for ticket in tickets] }
async def create_ticket(ticket: TicketModel): ticket = ticket.dict() ticket['created_at'] = datetime.now() ticket['started_at'] = None ticket['finished_at'] = None ticket_op = await database.ticketDB.insert_one(ticket) if ticket_op.inserted_id: ticket = await _get_ticket_or_404(ticket_op.inserted_id) return ticket return ticket
def get(self, id, is_customer): # Returns tickets that the employee/customer is assigned to user = UserModel.find_by_id(id, is_customer) if user: return { "tickets": [ ticket.json() for ticket in TicketModel.find_by_email( user.email, is_customer) ] } return {"message": "User not found"}
def patch(self, number): # Adds comment to ticket data = CommentAdder.parser.parse_args() ticket = TicketModel.find_by_number(number) if ticket: timestamp = int(time.time()) comment = CommentModel(number, timestamp, **data) try: comment.add_to_db() except IntegrityError: return { "message": "An error occurred inserting the item." }, 500 return comment.json(), 202 return {"message": "Ticket not found."}, 400
def patch(self, number): # Assigns employee to specific ticket, if it exists ticket = TicketModel.find_by_number(number) if ticket: # Checks if ticket exists data = TicketAssigner.parser.parse_args() employee = UserModel.find_by_email( data['employee'], is_customer=False) if employee: # Checks if employee exists ticket.employee_id = employee.id try: ticket.update_to_db() except IntegrityError: return {"message": "An error occurred inserting the item."}, 500 return ticket.json() return {"message": "Employee not found"}, 400 return {"message": "Ticket not found"}, 404
def put(self): data = TicketUpdate.updateparser.parse_args() ticket = TicketModel.find_by_ticketid(data['ticket_id']) ticket.user_id = data['user_id'] ticket.agent_id = data['agent_id'] ticket.type = data['type'] ticket.time_created = data['time_created'] ticket.time_solved = data['time_solved'] ticket.user_confirm = data['user_confirm'] ticket.agent_confirm = data['agent_confirm'] ticket.solved = data['solved'] ticket.valid = data['valid'] try: ticket.save_to_db() except: return { "message": "An error occured updating information of the ticket" }, 500 return {"message": "Ticket information updated successfully"}, 201
def delete(self, number): # Deletes ticket if it exists ticket = TicketModel.find_by_number(number) if ticket: ticket.delete_from_db() return {'message': 'Ticket deleted'}
def get(self, number): # Returns ticket with that specific number ticket = TicketModel.find_by_number(number) if ticket: return ticket.json() return {'message': 'Ticket not found'}, 404
def __init__(self, **kwargs): super().__init__(**kwargs) for ticket_type in ticket_types: self.tickets.append(TicketModel(ticket_type=ticket_type))
def put(self): meeting_uuid = request.json["meeting"] customer_uuid = request.json["customer"] bought = [] amount = 0 all_tickets = request.json["buy"] buy_limit = SettingModel.query.filter_by(key="buy_limit").first() if buy_limit and buy_limit.value.isdigit(): if len(all_tickets) + len( TicketModel.query.filter_by( customer=customer_uuid).all()) > int(buy_limit.value): return {"result": False} for ticket in all_tickets: seat_uuid = ticket["seat"] price_uuid = ticket["price"] seat: SeatModel = SeatModel.query.filter_by(uuid=seat_uuid).first() if seat.type == 0: meeting: MeetingModel = MeetingModel.query.filter_by( uuid=meeting_uuid).first() now = int(datetime.now().strftime("%s")) if meeting.start < now and now < meeting.stop: price: PriceModel = PriceModel.query.filter_by( uuid=price_uuid).first() customer: CustomerModel = CustomerModel.query.filter_by( uuid=customer_uuid).first() if TicketModel.query.filter_by( seat_id=seat.uuid, meeting_id=meeting.uuid).first(): return {"result": False} ticket: TicketModel = TicketModel.create( customer, meeting, seat, price) seat.reserved = True db.session.commit() amount = amount + price.value bought.append(ticket) if config["MAIL_ENABLED"] and len(bought) > 0: msg_title = SettingModel.query.filter_by( key="buy_mail_title").first().value msg_content = SettingModel.query.filter_by( key="buy_mail_content").first().value if msg_title != '' and msg_content != '': cc = SettingModel.query.filter_by(key="mail_cc").first() msg = Message(msg_title, recipients=[customer.email]) if cc and cc.value != '': msg.cc = [cc.value] customer_url = str( config['ENDPOINT']) + 'f/customer/' + customer.uuid msg_content = msg_content.replace( '{{name}}', customer.firstname + ' ' + customer.lastname) msg_content = msg_content.replace( '{{customer}}', '<a href="' + customer_url + '">' + customer_url + '</a>') msg_content = msg_content.replace('{{amount}}', str(int(amount))) msg_content = msg_content.replace('\n', '<br>') msg.html = msg_content mail.send(msg) return {"result": True}