def post(self, idx, idx1):  # Apply a new activity
        applicant_id = idx
        activity_id = idx1

        # Search if the applicanttion has already existed in
        #  MongoDB collection 'Application'
        applications_exist = Application.objects(applicant_id=applicant_id)
        for application_exist in applications_exist:
            if application_exist.activity_id == activity_id:
                return jsonify("You already applied", 400)

        # Obtain applicant's information from collection 'User'
        user = User.objects(use_id=applicant_id).first()
        applicant_name = user.username

        # Obtain activity information from collection 'Activity'
        activity = Activity.objects(activity_id=activity_id).first()
        activity_name = activity.activity_name

        apply_id = Application.objects.count()
        apply_id += 1
        application = Application(apply_id=apply_id,
                                  applicant_id=applicant_id,
                                  applicant_name=applicant_name,
                                  activity_id=activity_id,
                                  activity_name=activity_name,
                                  status=0)
        application.save()
        return jsonify("Successfully apply", 200)
    def put(self, idx):
        accept = request.form.get("accept")
        reject = request.form.get("reject")
        applicant_name = request.form.get("applicant")
        activity_name = request.form.get("project")
        activity_name = activity_name

        if accept:
            application = Application.objects(
                activity_name=activity_name).first()
            application.update(status=1)

            return jsonify("The applicant successfully attend your activity",
                           200)

        elif reject:
            activity = Application.objects(activity_name=activity_name).first()
            activity.update(status=-1)

            return jsonify("The applicant fails to attend your activity", 200)
    def post(self, idx):
        # The activities the user attended
        user_id = idx  # idx = user_id
        applications = Application.objects(applicant_id=user_id)
        apply_activities = []

        if applications:
            for application in applications:
                activity_id = application.activity_id
                activity_id = activity_id
                status = application.status

                activity = Activity.objects(activity_id=activity_id).first()

                activity_name = activity.activity_name
                open_date = activity.open_date
                genre = activity.genre
                leader_name = activity.leader_name

                open_date_local = time.local(open_date)
                format_time = time.strftime("%Y-%m-%d %H:%M:%S",
                                            open_date_local)

                apply_activity_dict = {
                    "Project_Name": activity_name,
                    "Deadline": open_date,
                    "Deadline": format_time,
                    "Major": genre,
                    "Leader": leader_name,
                    "Application Status": status
                }

                apply_activities.append(apply_activity_dict)

            return jsonify(apply_activities, 200)

        return jsonify("You don't have any applied acticities", 400)
    def get(self, idx):  # idx = user_id
        user_id = idx
        activities = Activity.objects(leader_id=user_id).all()
        create_activities = []

        if activities:
            for activity in activities:

                activity_name = activity.activity_name
                applications = Application.objects(
                    activity_name=activity_name).all()
                application_list_zero = []
                application_list_one = []
                for application in applications:
                    if application.status == 0:
                        application_list_zero.append(application.applicant_id)
                    elif application.status == 1:
                        application_list_one.append(application.applicant_id)
                activity_id = activity.activity_id
                activity_name = activity.activity_name
                open_date = activity.open_date
                genre = activity.genre

                # '0': the application has not been decided by the leader
                # '1': the application is successful
                create_activity_dict = {
                    "Project_Name": activity_name,
                    "Deadline": open_date,
                    "Major": genre,
                    "0": application_list_zero,
                    "1": application_list_one
                }

                create_activities.append(create_activity_dict)
            return jsonify(create_activities, 200)

        return add_cors(jsonify("You do not have any created acticities", 400))