Ejemplo n.º 1
0
    def test_get(self):

        event1 = Event(name = 'FST Pre-Orientation', start_date_time = '2020-08-05T09:00:00Z', end_date_time = '2020-08-05T14:00:00Z', location = 'Faculty of Science and Technology')
        event1.save()
        event2 = Event(name = 'Fresher\'s Orientation', start_date_time = '2020-08-28T09:00:00Z', end_date_time = '2020-08-28T14:00:00Z', location = 'UWI, Mona')
        event2.save()

        response = self.client.get('/events/')

        self.assertEqual(response.status_code, 200)

        data = response.json()

        self.assertEqual(len(data), 2)

        expected_response = [{
                                'id': event1.id,
                                'name': 'FST Pre-Orientation',
                                'start_date_time': '2020-08-05T09:00:00Z',
                                'end_date_time': '2020-08-05T14:00:00Z',
                                'location': 'Faculty of Science and Technology'
                            },
                            {
                                'id': event2.id,
                                'name': 'Fresher\'s Orientation',
                                'start_date_time': '2020-08-28T09:00:00Z',
                                'end_date_time': '2020-08-28T14:00:00Z',
                                'location': 'UWI, Mona' 
                            }]

        self.assertEqual(data, expected_response)
Ejemplo n.º 2
0
 def setUpTestData(cls):
     Event.objects.bulk_create([
         Event(description='Тестовое событие',
               date=datetime.datetime.now(pytz.utc)),
         Event(description='Второе тестовое событие',
               date=datetime.datetime.now(pytz.utc)),
         Event(description='Третье тестовое событие',
               date=datetime.datetime.now(pytz.utc))
     ])
Ejemplo n.º 3
0
    def setUp(cls):
        """
        Data setup for the Subscription Unit test cases
        """
        role = Role(role="subscriber")
        role.save()
        content = {
            "email": "*****@*****.**",
            "name": "user 12",
            "password": "******",
            "contact": "9999911111",
            "address": "Bangalore",
            "role": "subscriber",
            "organization": "Eventhigh"
        }

        url1 = reverse('registration')
        response = cls.client.post(url1,
                                   json.dumps(content),
                                   content_type='application/json')

        cls.user_id = response.data['data']['user']['user_id']
        cls.token = response.data['data']['access']

        cls.event_type = EventType(type="test")
        cls.event_type.save()

        cls.event = Event(name="test_event",
                          type=cls.event_type,
                          description="New Event",
                          date="2020-04-02",
                          time="12:38:00",
                          location="karnal",
                          subscription_fee=100,
                          no_of_tickets=250,
                          images="https://www.google.com/images",
                          sold_tickets=0,
                          external_links="google.com",
                          event_created_by_id=cls.user_id)
        cls.event.save()
        cls.event_free = Event(name="test_event_free",
                               type=cls.event_type,
                               description="New Event",
                               date="2020-04-02",
                               time="12:38:00",
                               location="karnal",
                               subscription_fee=0,
                               no_of_tickets=250,
                               images="https://www.google.com/images",
                               sold_tickets=0,
                               external_links="google.com",
                               event_created_by_id=cls.user_id)
        cls.event_free.save()

        cls.end_point = "/core/subscription/"
Ejemplo n.º 4
0
    def test_has_stats(self):
        event = Event()
        self.assertFalse(event.has_stats)

        event = Event(applicants_count=10)
        self.assertFalse(event.has_stats)

        event = Event(attendees_count=20)
        self.assertFalse(event.has_stats)

        event = Event(attendees_count=20, applicants_count=40)
        self.assertTrue(event.has_stats)
Ejemplo n.º 5
0
def test_has_stats():
    event = Event()
    assert event.has_stats is False

    event = Event(applicants_count=10)
    assert event.has_stats is False

    event = Event(attendees_count=20)
    assert event.has_stats is False

    event = Event(attendees_count=20, applicants_count=40)
    assert event.has_stats is True
Ejemplo n.º 6
0
def test_is_upcoming():
    now = timezone.now()
    now_event = Event(date=ApproximateDate(now.year, now.month, now.day))
    yesterday = now - timedelta(days=1)
    yesterday_event = Event(
        date=ApproximateDate(yesterday.year, yesterday.month, yesterday.day))
    tomorrow = now + timedelta(days=1)
    tomorrow_event = Event(
        date=ApproximateDate(tomorrow.year, tomorrow.month, tomorrow.day))
    assert now_event.is_upcoming()
    assert not yesterday_event.is_upcoming()
    assert tomorrow_event.is_upcoming()
Ejemplo n.º 7
0
    def test_get(self):

        event1 = Event(
            name='General Orientation for New Undergraduate Students',
            start_date_time='2020-08-28T09:00:00Z',
            end_date_time='2020-08-28T15:00:00Z',
            location='Online',
            poster_image='assets/general_orientation_poster.JPG')
        event1.save()
        event2 = Event(name='FST Virtual Orientation',
                       start_date_time='2020-08-31T09:00:00Z',
                       end_date_time='2020-09-04T17:00:00Z',
                       location='Online',
                       poster_image='assets/fst_orientation_poster.JPG')
        event2.save()

        response = self.client.get('/events/')

        self.assertEqual(response.status_code, 200)

        data = response.json()

        self.assertEqual(len(data), 2)

        expected_response = [{
            'id':
            event1.id,
            'name':
            'General Orientation for New Undergraduate Students',
            'start_date_time':
            '2020-08-28T09:00:00Z',
            'end_date_time':
            '2020-08-28T15:00:00Z',
            'location':
            'Online',
            'poster_image':
            'assets/general_orientation_poster.JPG'
        }, {
            'id':
            event2.id,
            'name':
            'FST Virtual Orientation',
            'start_date_time':
            '2020-08-31T09:00:00Z',
            'end_date_time':
            '2020-09-04T17:00:00Z',
            'location':
            'Online',
            'poster_image':
            'assets/fst_orientation_poster.JPG'
        }]

        self.assertEqual(data, expected_response)
Ejemplo n.º 8
0
    def setUp(cls):
        """
        Data set up for the unit test
        """
        role = Role(role="organizer")
        role.save()

        user = User.objects.create_user(email="*****@*****.**", password="******")
        role_obj = Role.objects.get(role="organizer")

        user_profile_obj = UserProfile.objects.create(
            user=user, name="*****@*****.**", contact_number="9999911111",
            organization="organization", address="Bangalore",
            role=role_obj)
        user_profile_obj.save()

        data = dict(email="*****@*****.**", password="******")
        login_response = cls.client.post('/authentication/login', json.dumps(data),
                                         content_type='application/json')
        cls.user_id = login_response.data['data']['user']['user_id']
        cls.token = login_response.data['data']['access']
        cls.user = User.objects.get(id=cls.user_id)

        cls.event_type = EventType(type="test")
        cls.event_type.save()

        cls.event = Event(name="test_event", type=cls.event_type, description="New Event",
                          date="2020-04-02",
                          time="12:38:00", location="karnal", subscription_fee=500,
                          no_of_tickets=250,
                          images="https://www.google.com/images", sold_tickets=0,
                          external_links="google.com",
                          event_created_by_id=cls.user_id)
        cls.event.save()
Ejemplo n.º 9
0
def create_event_viewset(request):
    getUserId = Token.objects.get(
        key=request.META.get("HTTP_AUTHORIZATION").split()[1]
    ).user_id
    getUserObj = User.objects.get(id=getUserId)
    ev = Event(owner=getUserObj)
    serializer = EventSerializer(ev, data=request.data)
    if serializer.is_valid():
        today = datetime.now().date()
        date_str = request.data.get("date")
        format_str = "%Y-%m-%d"
        date_obj = datetime.strptime(date_str, format_str)
        if date_obj.date() < today:
            raise serializers.ValidationError(
                {"date": "Il n'est pas possible de créer un événement dans le passé"}
            )
        crt_time = datetime.now().time()
        time_str = request.data.get("time")
        time_obj = datetime.strptime(time_str, "%H:%M")
        if time_obj.time() < crt_time and date_obj.date() <= today:
            raise serializers.ValidationError(
                {
                    "time": "Il n'est pas possible de \
                    créer un événement dans le passé"
                }
            )
        serializer.save()

        return Response(serializer.data, status=status.HTTP_201_CREATED)
    else:
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Ejemplo n.º 10
0
    def setUp(cls):
        """
        Data setup for Feedback Unit test cases
        """
        role = Role(role="organizer")
        role.save()
        role2 = Role(role="subscriber")
        role2.save()

        user = User.objects.create_user(email="*****@*****.**",
                                        password="******")
        cls.role_obj = Role.objects.get(role="organizer")

        user_profile_obj = UserProfile.objects.create(
            user=user,
            name="*****@*****.**",
            contact_number="9999911111",
            organization="organization",
            address="Bangalore",
            role=cls.role_obj)
        user_profile_obj.save()

        content2 = {
            "email": "*****@*****.**",
            "name": "user 20",
            "password": "******",
            "contact": "9999911111",
            "address": "Bangalore",
            "role": "subscriber",
            "organization": "Eventhigh"
        }

        response = cls.client.post('/authentication/registration',
                                   json.dumps(content2),
                                   content_type='application/json')
        cls.user_id = response.data['data']['user']['user_id']
        cls.token = response.data['data']['access']
        cls.end_point = "/core/feedback/"

        cls.event_type = EventType(type="test")
        cls.event_type.save()

        cls.event = Event(name="test_event",
                          type=cls.event_type,
                          description="New Event",
                          date="2020-04-02",
                          time="12:38:00",
                          location="karnal",
                          subscription_fee=499,
                          no_of_tickets=250,
                          images="https://www.google.com/images",
                          sold_tickets=0,
                          external_links="google.com",
                          event_created_by_id=User.objects.filter()[0].id)
        cls.event.save()
        cls.question = Question(question="Demo question1 ?")
        cls.question.save()
Ejemplo n.º 11
0
 def test_should_raise_validation_error_on_invalid_level(self):
     event = Event(
         title="Event",
         level="INVALID_LEVEL",
         description="django.core.exceptions.ValidationError",
         agent=self.agent,
         shelved=False,
     )
     self.assertRaises(ValidationError, event.full_clean)
Ejemplo n.º 12
0
def view(request, asso_id):
    asso = Association.objects.get(pk=asso_id)
    if request.method == 'POST':
        form = event_form(request.POST, request.FILES)
        if form.is_valid():
            event = Event.objects.all().filter(
                title=form.cleaned_data['title'])
            if event.count() != 0:
                form = event_form()
                return render(request, 'event_create.html', {
                    'form': form,
                    'fail': 'Evènement déjà créé'
                })
            evt = Event()
            evt.title = form.cleaned_data['title']
            evt.description = form.cleaned_data['description']

            start_date = form.cleaned_data['start_date']
            start_time = form.cleaned_data['start_time']
            evt.start = datetime.strptime(start_date + ' ' + start_time,
                                          '%Y-%m-%d %H:%M')

            end_date = form.cleaned_data['end_date']
            end_time = form.cleaned_data['end_time']
            evt.end = datetime.strptime(end_date + ' ' + end_time,
                                        '%Y-%m-%d %H:%M')

            evt.place = form.cleaned_data['place']
            evt.cover = form.cleaned_data['cover']
            evt.orga = asso

            closing_date = form.cleaned_data['closing_date']
            closing_time = form.cleaned_data['closing_time']
            evt.closing = datetime.strptime(closing_date + ' ' + closing_time,
                                            '%Y-%m-%d %H:%M')

            evt.int_capacity = form.cleaned_data['int_capacity']
            evt.ext_capacity = form.cleaned_data['ext_capacity']
            evt.int_price = form.cleaned_data['int_price']
            evt.ext_price = form.cleaned_data['ext_price']
            evt.display = form.cleaned_data['display']
            evt.status = EventStatus.WAITING._value_
            evt.token = ''
            evt.creator = request.user
            evt.premium = False
            evt.save()
            evt.token = generate_token(evt.id)
            evt.save()
            notify(event)
            return redirect(reverse('core:event', args=[evt.id]))
    else:
        form = event_form()
    return render(request, 'event_create.html', {'form': form, 'asso': asso})
Ejemplo n.º 13
0
def login(request):
    username = request.data.get("username")
    if username:
        username = username.lower()
    password = request.data.get("password")
    disableLogEvent = request.data.get("disableLogEvent")

    user = authenticate(username=username, password=password)
    if not user:
        #maybe email
        try:
            user2Try = User.objects.get(email__iexact=username)
            user = authenticate(username=user2Try.username, password=password)
        except Exception as ex:
            user2Try = None
            user = None
        if not user2Try:
            return Response({
                "success": False,
                "error": "login.failed"
            },
                            status=HTTP_401_UNAUTHORIZED)
    try:
        profile = Profile.objects.get(user=user)
        if not profile.mobileVerified:
            return Response({
                "success": False,
                "error": 'mobile.notverified',
                'activationKey': profile.activationKey
            })
        wallet = Wallet.objects.get(profile=profile)
        profileSerializer = ProfileSerializer(profile,
                                              context={'request': request})
    except Profile.DoesNotExist:
        return Response({
            "success": False,
            "error": "login.failed"
        },
                        status=HTTP_401_UNAUTHORIZED)

    token, _ = Token.objects.get_or_create(user=user)
    if not disableLogEvent:
        Event().createEvent('LOGIN', 'USERACTIVITY', '', profile, request)
    return Response({
        "success": True,
        "token": token.key,
        'profile': profileSerializer.data,
    })
Ejemplo n.º 14
0
def create(request):
    data = json.loads(request.body.decode('utf-8'))

    if request.method == 'POST':
        booking = Event(author=data['author'],
                        title=data['title'],
                        description=data['msg'],
                        start=data['start'],
                        end=data['end'],
                        hex_color=data['hex_color'])
        booking.save()

        details = Event.objects.filter(author=data['author'],
                                       active=True).values()

        return JsonResponse(list(details), safe=False)
Ejemplo n.º 15
0
def events(request):
    if request.user.is_anonymous():
        return JsonResponse({'error': 'loggedOut'})

    if request.method == 'POST':
        event_data = convert_dict_keys_deep(json.loads(request.body))['event']
        if (not event_data['name'] or not event_data['date_from'] or not event_data['type'] or not event_data['color']):
            return JsonResponse({'error': 'badRequest'})

        if (not event_data['id']):
            event = Event(
                name=event_data['name'],
                date_from=event_data['date_from'],
                date_to=event_data['date_to'],
                type=event_data['type'],
                color=event_data['color'],
            )
            event.save()
            return JsonResponse({'event': serialize_event(event)})

    events = [serialize_event(event) for event in Event.objects.order_by('date_from').all()]
    return JsonResponse({'events': events})
Ejemplo n.º 16
0
    def setUp(cls):
        role = Role(role="subscriber")
        role.save()
        content = {
            "email": "*****@*****.**",
            "name": "user test",
            "password": "******",
            "contact": "9999911111",
            "address": "Bangalore",
            "role": "subscriber",
            "organization": "Eventhigh"
        }

        response = cls.client.post('/authentication/registration',
                                   json.dumps(content),
                                   content_type='application/json')

        cls.user_id = response.data['data']['user']['user_id']
        cls.token = response.data['data']['access']
        cls.user = User.objects.get(id=cls.user_id)

        event_type = EventType(type="test")
        event_type.save()

        cls.event = Event(name="test_event",
                          type=event_type,
                          description="New Event",
                          date="2020-04-02",
                          time="12:38:00",
                          location="karnal",
                          subscription_fee=500,
                          no_of_tickets=250,
                          images="https://www.google.com/images",
                          sold_tickets=0,
                          external_links="google.com",
                          event_created_by_id=cls.user_id)
        cls.event.save()
Ejemplo n.º 17
0
def quickCreate(name, sport, distance, city, date):
    """ example :
    quickCreate(name="Triathlon de Montélimar", sport="Triathlon", distance="XS", city="Montélimar", date="25/06/2015")
    """
    s = Sport
    try:
        s = Sport.objects.get(name=sport)
    except Sport.DoesNotExist:
        print("Sport {0} does not exist".format(sport))

    dc = DistanceCategory
    try:
        dc = DistanceCategory.objects.get(name=distance)
    except DistanceCategory.DoesNotExist:
        print("Distance {0} does not exist".format(distance))

    e = Event(name=name, edition=1)
    e.save()

    c = Contact(name="Pierre Dupont")
    c.save()

    l = Location(country=Location.objects.all()[0].country, city=city)
    l.save()

    r = Race(
        sport=s,
        event=e,
        date=datetime.strptime(date, "%d/%m/%Y"),
        distance_cat=dc,
        price=40,
        contact=c,
        location=l,
    )
    r.save()

    return r
Ejemplo n.º 18
0
    def post(self):

        form = RegisterForm()

        if form.validate_on_submit():

            photo = upload_file(request.files['photo'])

            obj = Event(name=form.name.data,
                        date=form.date.data,
                        description=form.description.data,
                        photo=photo)

            class_obj = get_class_by_id(form.class_id.data)
            if class_obj:

                print(class_obj.events)

                class_obj.events.append(obj)

                db.session.add_all([class_obj, obj])
                db.session.commit()

                return {'success': True}

            else:
                return {
                    'success': False,
                    "errors": {
                        "class_id": ["Turma não existe"]
                    }
                }

        else:

            return {'success': False, "errors": form.errors}
Ejemplo n.º 19
0
 def create_unsaved(self, **overrides):
     kwargs = self.get_default_data()
     kwargs.update(**overrides)
     return Event(**kwargs)
Ejemplo n.º 20
0
def populate():

    #Fashion House

    f1 = Fashion_House(fashion_name="Chanel", debrief_received=False)
    f2 = Fashion_House(fashion_name="Dior", debrief_received=True)
    f3 = Fashion_House(fashion_name="Lancel", debrief_received=False)
    f4 = Fashion_House(fashion_name="Gucci", debrief_received=False)
    f5 = Fashion_House(fashion_name="LVMH", debrief_received=True)
    f6 = Fashion_House(fashion_name="Louis Vuitton", debrief_received=True)

    f1.save()
    f2.save()
    f3.save()
    f4.save()
    f5.save()
    f6.save()

    # Event

    e1 = Event(title="Du style en croks",
               date_debut='2019-12-12T15:00:00Z',
               date_fin='2019-12-17T15:00:00Z',
               description=
               "Bienvenue a notre événement voici un sommaire des activites :",
               place="Paris",
               fashion_name=f1)
    e2 = Event(title="Hiver neige",
               date_debut='2020-11-12T15:00:00Z',
               date_fin='2020-11-17T15:00:00Z',
               description=
               "Bienvenue a notre événement voici un sommaire des activites :",
               place="Russie",
               fashion_name=f2)

    e1.save()
    e2.save()

    #One_to_One

    o1 = One_to_One(date='2019-12-12T15:00:00Z',
                    salon=10,
                    staff="Paul JP",
                    title=e1)
    o2 = One_to_One(date='2019-12-12T15:00:00Z',
                    salon=10,
                    staff="Marie JP",
                    title=e2)
    o3 = One_to_One(date='2019-12-12T15:00:00Z',
                    salon=10,
                    staff="Kevin JP",
                    title=e1)
    o4 = One_to_One(date='2019-12-12T15:00:00Z',
                    salon=10,
                    staff="Pierre JP",
                    title=e2)

    o1.save()
    o2.save()
    o3.save()
    o4.save()

    #Activity

    a1 = Activity(title="Restaut à la Giraffe ",
                  date_act='2019-12-13T00:00:00Z',
                  supplier_name="Chantal",
                  adress="89 rue de rivoli",
                  budget=100,
                  real_price=150,
                  cancelation_policy_deadline=48,
                  cancelation_policy_fees=0.8,
                  contact_name="Fabris",
                  phone_number="0604157343",
                  mail_adress="*****@*****.**",
                  status="cf",
                  typ_act="1")
    a2 = Activity(title="Tour Eiffel de nuit ",
                  date_act='2019-12-15T00:00:00Z',
                  supplier_name="Charly",
                  adress="17 rue des étudiants",
                  budget=200,
                  real_price=0,
                  cancelation_policy_deadline=72,
                  cancelation_policy_fees=0.6,
                  contact_name="Fabris",
                  phone_number="0604157343",
                  mail_adress="*****@*****.**",
                  status="cnf",
                  typ_act="2")
    a3 = Activity(title="Spa massage",
                  date_act='2019-12-17T00:00:00Z',
                  supplier_name="Joseph",
                  adress="50 rue de rivoli",
                  budget=1000,
                  real_price=800,
                  cancelation_policy_deadline=48,
                  cancelation_policy_fees=0.5,
                  contact_name="Fabris",
                  phone_number="0604157343",
                  mail_adress="*****@*****.**",
                  status="f",
                  typ_act="4")

    a1.save()
    a2.save()
    a3.save()

    #Concierge

    c1 = Concierge(login="******",
                   mdp="0001",
                   name="Jean",
                   last_name="Concierge")
    c2 = Concierge(login="******",
                   mdp="0002",
                   name="Kevin",
                   last_name="Concierge")
    c3 = Concierge(login="******",
                   mdp="0003",
                   name="Marie",
                   last_name="Concierge")

    c1.save()
    c2.save()
    c3.save()
    c1.list_events.add(e1, e2)
    c2.list_events.add(e1)
    c3.list_events.add(e2)

    #Chauffeur

    t1 = Chauffeur(name="Karim",
                   last_name="Uber",
                   langue="Fr",
                   lieu_depart="Paris Roissy",
                   lieu_arrivee="Carlton",
                   consigne="Ne pas perdre le client de vue",
                   horaire_chauffeur='2019-12-12T15:00:00Z')

    t1.save()

    #Hotel

    h1 = Hotel(reservation_nb=5,
               date_debut='2019-12-12T15:00:00Z',
               date_fin='2019-12-12T15:00:00Z',
               room_type="Suite Deluxe",
               tarif=500,
               estimated_budget=550,
               paid_by_JP=2,
               paid_by_client=3,
               night_booked_jp=2,
               night_booked_client=3,
               welcome_pack_arrived=True)

    h1.save()

    #Planning

    p1 = Planning(nights_booked=5,
                  digital_planning=True,
                  language="EN",
                  travel_fees=500)
    p2 = Planning(nights_booked=3, language="FR", travel_fees=500)
    p3 = Planning(nights_booked=2,
                  digital_planning=True,
                  language="EN",
                  travel_fees=2000)
    p4 = Planning(nights_booked=4,
                  digital_planning=True,
                  language="EN",
                  travel_fees=500)

    p2.save()
    p3.save()
    p4.save()
    p1.save()

    p1.list_activities.add(a1)
    p1.list_driver.add(t1)
    p1.list_hotel.add(h1)

    p2.list_activities.add(a2)
    p2.list_driver.add(t1)
    p2.list_hotel.add(h1)

    p3.list_activities.add(a3)
    p3.list_driver.add(t1)
    p3.list_hotel.add(h1)

    #Client

    cl1 = Client(name="Jacques",
                 last_name="Dupont",
                 zone="Asie",
                 contact_principal="*****@*****.**",
                 langue="En",
                 budget_jour=500,
                 budget_semaine=5000,
                 plan=p1,
                 date=o1,
                 telephone="0664587985",
                 date_arrival='2019-12-12T15:00:00Z',
                 date_leave='2019-12-17T15:00:00Z',
                 status='al')
    cl2 = Client(name="Hiba",
                 last_name="Beldi",
                 zone="Moyen-Orient",
                 langue="Arabe",
                 budget_jour=150,
                 budget_semaine=1500,
                 date=o2,
                 plan=p2,
                 telephone="0664152465",
                 date_arrival='2019-12-13T15:00:00Z',
                 date_leave='2019-12-16T15:00:00Z',
                 status='mn')
    cl3 = Client(name="Jérémie",
                 last_name="Bencini",
                 zone="Arctique",
                 langue="Anglais",
                 budget_jour=3000,
                 budget_semaine=30000,
                 date=o3,
                 plan=p3,
                 telephone="0668358476",
                 date_arrival='2019-12-11T15:00:00Z',
                 date_leave='2019-12-19T15:00:00Z',
                 status='mn')
    cl4 = Client(name="Diane",
                 last_name="Du Peloux",
                 zone="Afrique",
                 langue="Français",
                 budget_jour=300,
                 budget_semaine=3000,
                 date=o4,
                 plan=p4,
                 telephone="0542487945",
                 date_arrival='2019-12-14T15:00:00Z',
                 date_leave='2019-12-20T15:00:00Z',
                 status='al')

    cl1.save()
    cl2.save()
    cl3.save()
    cl4.save()

    cl1.title.add(e1)
    cl2.title.add(e1)
    cl3.title.add(e2)
    cl4.title.add(e2)

    #Hospitality_packs
    hp1 = Hospitality_Pack(collection="Printemps 2020",
                           horaires_dispo_concierge="Lundi-Dimance: 7h-23h",
                           title=e1)

    hp1.save()

    hp1.list_services.add(a1)