Example #1
0
def profile(request, artist_id=None, name=None):

    is_sub = False
    is_follower = None
    profiles = []
    user = request.user

    if not artist_id:
        artist = get_object_or_404(Artist, user__id=user.id)
    else:
        artist = get_object_or_404(Artist, id=artist_id)
        try:
            if user.salon:
                if artist.salon == user.salon:
                    is_sub = True
        except:
            is_sub = False

    listings = Listing.objects.filter(artist=artist, status=1)

    if user.is_authenticated():
        is_follower = get_object_or_None(Followers, user=user, artist=artist)

        if request.GET.get('followed', None) == '1' and not is_follower:
            is_follower = Followers.objects.create(artist=artist, user=user)
            start_following(user, artist.user)
        elif request.GET.get('followed', None) == '0' and is_follower:
            follower = Followers.objects.get(artist=artist, user=user)
            follower.delete()
    followers = Followers.objects.select_related().filter(artist=artist)
    followers = list(followers)
    for follower in followers:
        if follower.user.related_with == 'profiles':
            profiles.append(follower.user.profile)
        elif follower.user.related_with == 'artists':
            profiles.append(follower.user.artist)
        else:
            profiles.append(follower.user.salon)

    reviews = Review.objects.filter(artist=artist)
    rate = get_rate(reviews)

    work_time = get_object_or_None(WorkTime, artist=artist)
    return render(
        request, 'artists/profile.html', {
            'artist': artist,
            'listings': listings,
            'reviews': reviews,
            'rate': rate,
            'is_follower': is_follower,
            'is_sub': is_sub,
            'profiles': profiles,
            'work_time': work_time,
        })
Example #2
0
    def clean_email(self):

        email = self.cleaned_data['email']

        check_email = get_object_or_None(User, email=email)

        if check_email and get_object_or_None(Profile, user=check_email, auto_created=True):
            raise forms.ValidationError(
                _("A user associated with this email address already exists"))

        return email
Example #3
0
def profile(request, artist_id=None, name=None):

    is_sub = False
    is_follower = None
    profiles = []
    user = request.user

    if not artist_id:
        artist = get_object_or_404(Artist, user__id=user.id)
    else:
        artist = get_object_or_404(Artist, id=artist_id)
        try:
            if user.salon:
                if artist.salon == user.salon:
                    is_sub = True
        except:
            is_sub = False

    listings = Listing.objects.filter(artist=artist, status=1)

    if user.is_authenticated():
        is_follower = get_object_or_None(Followers, user=user, artist=artist)

        if request.GET.get('followed', None) == '1' and not is_follower:
                is_follower = Followers.objects.create(artist=artist, user=user)
                start_following(user, artist.user)
        elif request.GET.get('followed', None) == '0' and is_follower:
            follower = Followers.objects.get(artist=artist, user=user)
            follower.delete()
    followers = Followers.objects.select_related().filter(artist=artist)
    followers = list(followers)
    for follower in followers:
        if follower.user.related_with == 'profiles':
            profiles.append(follower.user.profile)
        elif follower.user.related_with == 'artists':
            profiles.append(follower.user.artist)
        else:
            profiles.append(follower.user.salon)

    reviews = Review.objects.filter(artist=artist)
    rate = get_rate(reviews)

    work_time = get_object_or_None(WorkTime, artist=artist)
    return render(request, 'artists/profile.html', {
        'artist': artist,
        'listings': listings,
        'reviews': reviews,
        'rate': rate,
        'is_follower': is_follower,
        'is_sub': is_sub,
        'profiles': profiles,
        'work_time': work_time,
    })
Example #4
0
    def clean_email(self):

        email = self.cleaned_data['email']

        check_email = get_object_or_None(User, email=email)

        if check_email and get_object_or_None(
                Profile, user=check_email, auto_created=True):
            raise forms.ValidationError(
                "A user associated with this email address already exists")

        return email
Example #5
0
def add(request, listing_id):
    listing_id = int(listing_id)
    user = request.user
    listing = Listing.objects.select_related("artist").get(id=listing_id)

    flag = get_object_or_None(Favorite, user=user, listing=listing)

    if not flag:
        listing.likes = listing.likes + 1
        listing.save()
        Favorite.objects.create(user=user, listing=listing)
        Notification.objects.create(
            sender=user,
            receiver=listing.artist.user,
            time=current_time(),
            short_text=NOTIFICATIONS_SHORT[7].format(user=user.first_name),
            long_text=NOTIFICATIONS_LONG[7].format(user=user.first_name,
                                                   listing=listing.title,
                                                   user_id=user.id,
                                                   metadata=listing_id),
        )
    else:
        listing.likes = listing.likes - 1
        listing.save()
        flag.delete()

    return HttpResponseRedirect(
        reverse('listing', kwargs={'listing_id': listing.id}))
Example #6
0
def calendar(request):
    if request.method == "POST":
        start_time = request.POST.get("start_time", None)
        end_time = request.POST.get("end_time", None)
        comment = request.POST.get("comment", None)
        if start_time and end_time:
            Busy.objects.create(artist=request.user.artist,
                                start_time=start_time,
                                end_time=end_time,
                                comment=comment)
    elif request.method == "GET":
        elem_id = request.GET.get("id", None)
        if elem_id:
            busy = get_object_or_None(Busy, id=int(elem_id))
            if busy:
                busy.delete()
    artist = get_object_or_404(Artist, user=request.user)
    bookings = Booking.objects.select_related().filter(artist=artist,
                                                       status__in=[0, 1])
    busy = Busy.objects.filter(artist=artist)
    return render(request, 'artists/management/calendar.html', {
        "artist": artist,
        "bookings": bookings,
        "busy": busy
    })
Example #7
0
def edit_artist(request, artist_id=None):
    artist = get_object_or_None(Artist, id=int(artist_id))
    user = artist.user

    if request.method == 'POST':
        form = EditArtist(request.POST, request.FILES, instance=artist)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(
                reverse('salons_artists_edit', kwargs={'artist_id':
                                                       artist_id}))
    else:
        form = EditArtist(instance=artist,
                          initial={
                              'name': user.first_name,
                              'avatar': artist.avatar,
                              'description': artist.description,
                              'style': artist.style,
                              'enable_emails': artist.enable_emails,
                              'enable_sms': artist.enable_sms
                          })

    return render(request, 'salons/artist_settings/edit_artist.html', {
        'artist': artist,
        "form": form
    })
Example #8
0
def facebook_registration(request):
    data = request.POST

    password = "".join(random.choice(string.ascii_lowercase + string.digits) for x in range(6))

    is_user = get_object_or_None(User, email=data["email"])

    if not is_user:
        username = "".join(random.choice(string.ascii_lowercase + string.digits) for x in range(16))
        new_user = User.objects.create_user(
            username=username, first_name=data["name"], email=data["email"], password=password, related_with="salons"
        )
        salon = Salon.objects.create(user=new_user, facebook_id=data["facebook_id"], step=2)
        ReceiverAccount.objects.create(user=new_user, paypal_email=new_user.email)

        hash_name = "".join(random.choice(string.ascii_lowercase + string.digits) for x in range(10))
        path = "/" + MEDIA_FOLDER + "/salons/" + str(salon.id) + "/avatar/" + hash_name + ".jpeg"
        full_path = MEDIA_ROOT + "salons/" + str(salon.id) + "/avatar/" + hash_name + ".jpeg"
        d = os.path.dirname(full_path)
        if not os.path.exists(d):
            os.makedirs(d)
        else:
            shutil.rmtree(d)
            os.makedirs(d)
        urllib.request.urlretrieve(data["avatar"], full_path)

        salon.avatar = path
        salon.save()

        welcome(None, new_user, password)

        login_user(request, new_user)
    else:
        raise Exception(_("Not registered"))
Example #9
0
def facebook_registration(request):
    data = request.POST

    password = ''.join(random.choice(string.ascii_lowercase + string.digits) for x in range(6))

    is_user = get_object_or_None(User, email=data['email'])
    if not is_user:
        username = ''.join(random.choice(string.ascii_lowercase + string.digits)for x in range(16))
        new_user = User.objects.create_user(username=username,
                                            first_name=data['name'],
                                            email=data['email'],
                                            password=password,
                                            related_with="profiles")
        profile = Profile.objects.create(user=new_user, facebook_id=data['facebook_id'], is_activated=True)

        hash_name = ''.join(random.choice(string.ascii_lowercase + string.digits)for x in range(10))
        path = '/' + MEDIA_FOLDER + '/users/' + str(profile.id) + '/avatar/' + hash_name + '.jpeg'
        full_path = MEDIA_ROOT + 'users/' + str(profile.id) + '/avatar/' + hash_name + '.jpeg'
        d = os.path.dirname(full_path)
        if not os.path.exists(d):
            os.makedirs(d)
        else:
            shutil.rmtree(d)
            os.makedirs(d)
        urllib.request.urlretrieve(data['avatar'], full_path)

        profile.avatar = path
        profile.save()
        kwargs = {}
        kwargs['password'] = password
        welcome(None, new_user, password)

        login_user(request, new_user)
    else:
        raise Exception("Not registered")
Example #10
0
    def save(self):

        data = self.cleaned_data

        check_email = get_object_or_None(User, email=data['email'])

        if not check_email:
            username = ''.join(
                random.choice(string.ascii_lowercase + string.digits)
                for x in range(16))

            new_user = User.objects.create_user(
                username=username,
                first_name=data['name'],
                email=data['email'],
                password=data['password'],
                related_with="profiles",
            )
            profile = Profile.objects.create(user=new_user)
        else:
            check_email.first_name = data['name']
            check_email.set_password(data['password'])
            check_email.save()

            profile = Profile.objects.get(user=check_email)
            profile.auto_created = False
            profile.save()

        return profile
Example #11
0
def facebook_login(request):
    data = request.POST
    is_user = get_object_or_None(User, email=data['email'])
    if is_user:
        if is_user.first_name == "anonymous":
            is_user.first_name = data['name']
            is_user.facebook_id = data['facebook_id']
            is_user.save()
            profile = is_user.profile
            hash_name = ''.join(
                random.choice(string.ascii_lowercase + string.digits)
                for x in range(10))
            path = MEDIA_URL + 'users/' + str(
                profile.id) + '/avatar/' + hash_name + '.jpeg'
            full_path = MEDIA_ROOT + 'users/' + str(
                profile.id) + '/avatar/' + hash_name + '.jpeg'
            d = os.path.dirname(full_path)
            if not os.path.exists(d):
                os.makedirs(d)
            else:
                shutil.rmtree(d)
                os.makedirs(d)
            urllib.request.urlretrieve(data['avatar'], full_path)
            profile.avatar = path
            profile.save()
            login_user(request, is_user)
        else:
            login_user(request, is_user)

        return HttpResponse(simplejson.dumps("COMPLETE"),
                            content_type="application/json")
    else:
        raise Exception("Not registered")
Example #12
0
    def save(self):

        data = self.cleaned_data

        check_email = get_object_or_None(User, email=data['email'])

        if not check_email:
            username = ''.join(random.choice(string.ascii_lowercase + string.digits)for x in range(16))

            new_user = User.objects.create_user(username=username,
                                                first_name=data['name'],
                                                email=data['email'],
                                                password=data['password'],
                                                related_with="profiles")
            profile = Profile.objects.create(user=new_user)
        else:
            check_email.first_name = data['name']
            check_email.set_password(data['password'])
            check_email.save()

            profile = Profile.objects.get(user=check_email)
            profile.auto_created = False
            profile.save()

        return profile
Example #13
0
def facebook_login(request):
    data = request.POST
    is_user = get_object_or_None(User, email=data['email'])
    if is_user:
        if is_user.first_name == "anonymous":
            is_user.first_name = data['name']
            is_user.facebook_id =  data['facebook_id']
            is_user.save()
            profile = is_user.profile
            hash_name = ''.join(random.choice(string.ascii_lowercase + string.digits)for x in range(10))
            path = MEDIA_URL + 'users/' + str(profile.id) + '/avatar/' + hash_name + '.jpeg'
            full_path = MEDIA_ROOT + 'users/' + str(profile.id) + '/avatar/' + hash_name + '.jpeg'
            d = os.path.dirname(full_path)
            if not os.path.exists(d):
                os.makedirs(d)
            else:
                shutil.rmtree(d)
                os.makedirs(d)
            urllib.request.urlretrieve(data['avatar'], full_path)
            profile.avatar = path
            profile.save()
            login_user(request, is_user)
        else:
            login_user(request, is_user)


        return HttpResponse(simplejson.dumps("COMPLETE"), content_type="application/json")
    else:
        raise Exception("Not registered")
Example #14
0
    def save(self, listing, FILES):
        data = self.cleaned_data
        pictures = FILES.getlist('files')
        hash_name = ''.join(random.choice(string.ascii_lowercase + string.digits)for x in range(6))

        my_dir = MEDIA_ROOT + listing.picture[7:]

        deletes_files = data['deleted']
        if deletes_files:
            deletes_files = data['deleted'].split(',')[:-1]
            for d in deletes_files:
                os.remove(d)

        os.chdir(my_dir)

        cover = data["cover"]

        artist_id = str(listing.artist_id)

        for index, picture in enumerate(pictures):
            dataUrlPattern = re.compile('data:image/(png|jpeg);base64,(.*)$')
            my_file = dataUrlPattern.match(picture).group(2)

            hash_name = ''.join(random.choice(string.ascii_lowercase + string.digits)for x in range(6))

            if cover.isdigit() and index == int(cover):
                full_path = MEDIA_ROOT + 'artists/' + artist_id + '/listings/' + listing.metadata + '/' + hash_name + '.jpeg'
                cover = full_path
            else:
                full_path = MEDIA_ROOT + 'artists/' + artist_id + '/listings/' + listing.metadata + '/' + hash_name + '.jpeg'

            #if the folder doesn't exist, create on
            d = os.path.dirname(full_path)
            if not os.path.exists(d):
                os.makedirs(d)

            im = Image.open(BytesIO(base64.b64decode(my_file.encode('ascii'))))
            im.save(full_path, 'JPEG')

        ListingTags.objects.filter(listing=listing).delete()
        tags = data['tags'].split(',')
        for tag in tags:
            tag = tag.lower()
            current_tag = get_object_or_None(Tags, tag=tag)
            if not current_tag:
                current_tag = Tags.objects.create(tag=tag)

            ListingTags.objects.create(listing=listing, tags=current_tag)

        if cover:
            listing.picture_cover = cover
        listing.title = data['title']
        listing.description = data['description']
        listing.price = data['price']
        listing.duration = int(data['duration'])
        listing.gender = int(data['gender'])
        listing.save()

        return listing
Example #15
0
def confirm(request):
    sn = request.session.get('dummy_booking_id', None)
    if sn:
        dummy_booking = get_object_or_None(DummyBooking, id=int(sn))
    else:
        raise Http404

    return render(request, 'listings/confirm.html', {'booking': dummy_booking})
Example #16
0
def confirm(request):
    sn = request.session.get('dummy_booking_id', None)
    if sn:
        dummy_booking = get_object_or_None(DummyBooking, id=int(sn))
    else:
        raise Http404

    return render(request, 'listings/confirm.html', {'booking': dummy_booking})
Example #17
0
def create_widget(request):
    user = request.user
    token = get_object_or_None(ExternalToken, user=user)
    if not token:
        hash_name = ''.join(random.choice(string.ascii_lowercase + string.digits)for x in range(32))
        token = ExternalToken.objects.create(user=user, token=hash_name)
        token = token

    return render(request, user.related_with + '/management/widgets.html', {"token": token})
Example #18
0
    def save(self, FILES):

        data = self.cleaned_data
        artist = Artist.objects.get(id=int(data['artist']))
        artist_id = str(data['artist'])
        pictures = FILES.getlist('files')
        hash_name = ''.join(
            random.choice(string.ascii_lowercase + string.digits)
            for x in range(6))
        for index, picture in enumerate(pictures):

            dataUrlPattern = re.compile('data:image/(png|jpeg);base64,(.*)$')
            my_file = dataUrlPattern.match(picture).group(2)

            path = '/' + MEDIA_FOLDER + '/artists/' + artist_id + '/listings/' + hash_name + '/'
            if index == int(data["cover"]):
                full_path = MEDIA_ROOT + 'artists/' + artist_id + '/listings/' + hash_name + '/' + str(
                    index) + '.jpeg'
                cover = full_path
            else:
                full_path = MEDIA_ROOT + 'artists/' + artist_id + '/listings/' + hash_name + '/' + str(
                    index) + '.jpeg'

            #if the folder doesn't exist, create one
            d = os.path.dirname(full_path)
            if not os.path.exists(d):
                os.makedirs(d)

            im = Image.open(BytesIO(base64.b64decode(my_file.encode('ascii'))))
            im.save(full_path, 'JPEG')

        price = math.ceil(int(data['price']) * (1 + (get_fee() / 100)))

        listing = Listing.objects.create(artist=artist,
                                         picture=path,
                                         title=data['title'],
                                         description=data['description'],
                                         picture_cover=cover,
                                         original_price=data['price'],
                                         price=price,
                                         metadata=hash_name,
                                         gender=data['gender'],
                                         duration=int(data['duration']))

        tags = data['tags'].split(',')
        tags.append(artist.get_style_display())
        for tag in tags:
            tag = tag.lower()
            current_tag = get_object_or_None(Tags, tag=tag)
            if not current_tag:
                current_tag = Tags.objects.create(tag=tag)

            ListingTags.objects.create(listing=listing, tags=current_tag)
        listing.save()

        return [listing, artist]
Example #19
0
def toggle_logo(request):
    user = request.user
    token = get_object_or_None(ExternalToken, user=user)
    if token.have_image:
        token.have_image = False
        token.save()
    else:
        token.have_image = True
        token.save()

    return HttpResponse(json.dumps("COMPLETE"), content_type="application/json")
Example #20
0
def calendar(request, artist_id):
    if artist_id == "None":
        salon = request.user.salon
        try:
            artist = Artist.objects.filter(salon=salon, is_activated=True)[0]
            return HttpResponseRedirect(
                reverse('salons_calendar', kwargs={'artist_id': artist.id}))
        except:
            messages.add_message(
                request, messages.INFO,
                _('You cannot view the calendar, without have any artists.'))
            return HttpResponseRedirect(reverse('salons_artists'))

    if request.method == "POST":
        artist = get_object_or_404(Artist, id=int(artist_id))
        start_time = request.POST.get("start_time", None)
        end_time = request.POST.get("end_time", None)
        comment = request.POST.get("comment", None)
        if start_time and end_time:
            Busy.objects.create(artist=artist,
                                start_time=start_time,
                                end_time=end_time,
                                comment=comment)
    elif request.method == "GET":
        elem_id = request.GET.get("id", None)
        if elem_id:
            busy = get_object_or_None(Busy, id=int(elem_id))
            if busy:
                busy.delete()

    salon = request.user.salon
    artist_id = int(artist_id)
    artist = get_object_or_404(Artist, id=artist_id, salon=salon)
    bookings = Booking.objects.select_related().filter(artist=artist,
                                                       status__in=[0, 1])
    busy = Busy.objects.filter(artist=artist)

    artists = Artist.objects.filter(salon=salon, is_activated=True)
    artists = [a.id for a in artists]

    current_index = artists.index(artist_id)

    next = artists[0] if current_index + 1 == len(artists) else artists[
        current_index + 1]
    prev = artists[-1] if current_index == 0 else artists[current_index - 1]

    return render(
        request, 'salons/management/calendar.html', {
            "artist": artist,
            "bookings": bookings,
            "busy": busy,
            "next": next,
            "prev": prev
        })
Example #21
0
def toggle_logo(request):
    user = request.user
    token = get_object_or_None(ExternalToken, user=user)
    if token.have_image:
        token.have_image = False
        token.save()
    else:
        token.have_image = True
        token.save()

    return HttpResponse(json.dumps("COMPLETE"),
                        content_type="application/json")
Example #22
0
def create_widget(request):
    user = request.user
    token = get_object_or_None(ExternalToken, user=user)
    if not token:
        hash_name = ''.join(
            random.choice(string.ascii_lowercase + string.digits)
            for x in range(32))
        token = ExternalToken.objects.create(user=user, token=hash_name)
        token = token

    return render(request, user.related_with + '/management/widgets.html',
                  {"token": token})
Example #23
0
    def save(self, artist, FILES):
        data = self.cleaned_data
        artist_id = str(artist.id)
        pictures = FILES.getlist('files')
        hash_name = ''.join(random.choice(string.ascii_lowercase + string.digits)for x in range(6))

        for index, picture in enumerate(pictures):

            dataUrlPattern = re.compile('data:image/(png|jpeg);base64,(.*)$')
            my_file = dataUrlPattern.match(picture).group(2)

            path = '/' + MEDIA_FOLDER + '/artists/' + artist_id + '/listings/' + hash_name + '/'
            if index == int(data["cover"]):
                full_path = MEDIA_ROOT + 'artists/' + artist_id + '/listings/' + hash_name + '/' + str(index) + '.jpeg'
                cover = full_path
            else:
                full_path = MEDIA_ROOT + 'artists/' + artist_id + '/listings/' + hash_name + '/' + str(index) + '.jpeg'

            #if the folder doesn't exist, create one
            d = os.path.dirname(full_path)
            if not os.path.exists(d):
                os.makedirs(d)

            im = Image.open(BytesIO(base64.b64decode(my_file.encode('ascii'))))
            im.save(full_path, 'JPEG')

        price = math.ceil(int(data['price'])*(1 + (get_fee(artist)/100)))

        listing = Listing.objects.create(
            artist=artist,
            picture=path,
            title=data['title'],
            description=data['description'],
            picture_cover=cover,
            original_price=data['price'],
            price=price,
            metadata=hash_name,
            gender=data['gender'],
            duration=int(data['duration']),
        )

        tags = data['tags'].split(',')
        tags.append(artist.get_style_display())
        for tag in tags:
            tag = tag.lower()
            current_tag = get_object_or_None(Tags, tag=tag)
            if not current_tag:
                current_tag = Tags.objects.create(tag=tag)

            ListingTags.objects.create(listing=listing, tags=current_tag)
        listing.save()
        return listing
Example #24
0
def facebook_registration(request):
    data = request.POST

    password = ''.join(
        random.choice(string.ascii_lowercase + string.digits)
        for x in range(6))

    is_user = get_object_or_None(User, email=data['email'])

    if not is_user:
        username = ''.join(
            random.choice(string.ascii_lowercase + string.digits)
            for x in range(16))
        new_user = User.objects.create_user(username=username,
                                            first_name=data['name'],
                                            email=data['email'],
                                            password=password,
                                            related_with="artists")
        artist = Artist.objects.create(user=new_user,
                                       facebook_id=data['facebook_id'],
                                       step=2)
        ReceiverAccount.objects.create(user=new_user,
                                       paypal_email=new_user.email)
        WorkTime.objects.create(artist=artist)

        hash_name = ''.join(
            random.choice(string.ascii_lowercase + string.digits)
            for x in range(10))
        path = '/' + MEDIA_FOLDER + '/artists/' + str(
            artist.id) + '/avatar/' + hash_name + '.jpeg'
        full_path = MEDIA_ROOT + 'artists/' + str(
            artist.id) + '/avatar/' + hash_name + '.jpeg'
        d = os.path.dirname(full_path)
        if not os.path.exists(d):
            os.makedirs(d)
        else:
            shutil.rmtree(d)
            os.makedirs(d)
        urllib.request.urlretrieve(data['avatar'], full_path)

        artist.avatar = path
        artist.save()
        kwargs = {}
        kwargs['password'] = password
        send_email(case=3, receiver=new_user, **kwargs)

        login_user(request, new_user)
    else:
        raise Exception("Not registered")
Example #25
0
def forgotten_password(sender, receiver):
    '''Forgotten Password'''
    subject = SUBJECTS[1]
    name = receiver.first_name
    to = receiver.email
    email_token = ''.join(random.choice(string.ascii_lowercase + string.digits) for x in range(32))
    token = get_object_or_None(PasswordToken, email=receiver.email)
    if token:
            token.email_token = email_token
            token.save()
    else:
            PasswordToken.objects.create(email=receiver.email, email_token=email_token)
    link = 'http://glamfame.com/users/change_password/{0}'.format(email_token)
    html_content = render_to_string('emails/password.html', {'receiver_name': name, 'link': link})
    send_email(subject, html_content, to)
Example #26
0
def forgotten_password(sender, receiver):
    """Forgotten Password"""
    subject = SUBJECTS[1]
    name = receiver.first_name
    to = receiver.email
    email_token = "".join(random.choice(string.ascii_lowercase + string.digits) for x in range(32))
    token = get_object_or_None(PasswordToken, email=receiver.email)
    if token:
        token.email_token = email_token
        token.save()
    else:
        PasswordToken.objects.create(email=receiver.email, email_token=email_token)
    link = "http://glamfame.com/users/change_password/{0}".format(email_token)
    html_content = render_to_string("emails/password.html", {"receiver_name": name, "link": link})
    send_email(subject, html_content, to)
Example #27
0
def forgotten_password(request):
    if request.method == 'POST':
        form = ForgottenPasswordForm(request.POST)
        if form.is_valid():
            data = form.cleaned_data
            email = data.get('email', None)

            user = get_object_or_None(User, email=email)
            if user:
                send_email(case=4, receiver=user)

            return HttpResponseRedirect(reverse('home'))
    else:
        form = ForgottenPasswordForm()

    return render(request, 'user/forgotten_password.html', {'form': form})
Example #28
0
def forgotten_password(request):
    if request.method == 'POST':
        form = ForgottenPasswordForm(request.POST)
        if form.is_valid():
            data = form.cleaned_data
            email = data.get('email', None)

            user = get_object_or_None(User, email=email)
            if user:
                send_email(case=4, receiver=user)

            return HttpResponseRedirect(reverse('home'))
    else:
        form = ForgottenPasswordForm()

    return render(request, 'user/forgotten_password.html', {'form': form})
Example #29
0
def facebook_registration(request):
    data = request.POST

    password = ''.join(
        random.choice(string.ascii_lowercase + string.digits)
        for x in range(6))

    is_user = get_object_or_None(User, email=data['email'])

    if not is_user:
        username = ''.join(
            random.choice(string.ascii_lowercase + string.digits)
            for x in range(16))
        new_user = User.objects.create_user(username=username,
                                            first_name=data['name'],
                                            email=data['email'],
                                            password=password,
                                            related_with="salons")
        salon = Salon.objects.create(user=new_user,
                                     facebook_id=data['facebook_id'],
                                     step=2)
        ReceiverAccount.objects.create(user=new_user,
                                       paypal_email=new_user.email)

        hash_name = ''.join(
            random.choice(string.ascii_lowercase + string.digits)
            for x in range(10))
        path = '/' + MEDIA_FOLDER + '/salons/' + str(
            salon.id) + '/avatar/' + hash_name + '.jpeg'
        full_path = MEDIA_ROOT + 'salons/' + str(
            salon.id) + '/avatar/' + hash_name + '.jpeg'
        d = os.path.dirname(full_path)
        if not os.path.exists(d):
            os.makedirs(d)
        else:
            shutil.rmtree(d)
            os.makedirs(d)
        urllib.request.urlretrieve(data['avatar'], full_path)

        salon.avatar = path
        salon.save()

        welcome(None, new_user, password)

        login_user(request, new_user)
    else:
        raise Exception(_("Not registered"))
Example #30
0
def settings(request):
    user = request.user
    profile = get_object_or_None(Profile, user=user)

    if request.method == 'POST':
        form = EditProfile(request.POST, request.FILES, instance=profile)

        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('user_settings'))
    else:
        form = EditProfile(instance=profile,
                           initial={'name': user.first_name,
                                    'avatar': profile.avatar,
                                    'enable_emails': profile.enable_emails,
                                    'enable_sms': profile.enable_sms})

    return render(request, 'user/settings.html', {'profile': profile, 'form': form})
Example #31
0
def add(request, listing_id):
    listing_id = int(listing_id)
    user = request.user
    listing = Listing.objects.select_related("artist").get(id=listing_id)

    flag = get_object_or_None(Favorite, user=user, listing=listing)

    if not flag:
        listing.likes = listing.likes + 1
        listing.save()
        Favorite.objects.create(user=user, listing=listing)
        add_to_wishlist(user, listing.artist.user, listing)
    else:
        listing.likes = listing.likes - 1
        listing.save()
        flag.delete()

    return HttpResponseRedirect(reverse('listing', kwargs={'listing_id': listing.id, 'title': listing.title}))
Example #32
0
def settings(request):
    user = request.user
    profile = get_object_or_None(Profile, user=user)

    if request.method == 'POST':
        form = EditProfile(request.POST, request.FILES, instance=profile)

        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('user_profile'))
    else:
        form = EditProfile(instance=profile,
                            initial={
                                'name': user.first_name,
                                'avatar': profile.avatar,
                            })
    
    return render(request, 'user/settings.html', { 'profile': profile, 'form': form })
Example #33
0
def start_payment(request):
    sn = request.session.get('dummy_booking_id', None)
    dummy_booking = get_object_or_None(DummyBooking, id=int(sn))

    paypalrestsdk.configure({
        'mode': PAYPAL_MODE,
        'client_id': PAYPAL_CLIENT_ID,
        'client_secret': PAYPAL_CLIENT_SECRET
    })
    payment = paypalrestsdk.Payment({
        "intent":
        "authorize",
        "payer": {
            "payment_method": "paypal"
        },
        "redirect_urls": {
            "return_url": "http://partytask.com/success",
            "cancel_url": "http://partytask.com/error"
        },
        "transactions": [{
            "item_list": {
                "items": [{
                    "name": dummy_booking.title,
                    "price": int(dummy_booking.price),
                    "currency": "USD",
                    "quantity": 1
                }]
            },
            "amount": {
                "total": int(dummy_booking.price),
                "currency": "USD"
            },
            "description": dummy_booking.title
        }]
    })

    if not payment.create():
        print(payment.error)
        raise Http404

    request.session['Payment_id'] = payment['id']
    redirect = payment['links'][1]['href'] + "&no_shipping=1"

    return HttpResponseRedirect(redirect)
Example #34
0
def facebook_registration(request):
    data = request.POST

    password = ''.join(random.choice(string.ascii_lowercase + string.digits)
                   for x in range(6))

    is_user = get_object_or_None(User, email=data['email'])

    if not is_user:
        username = ''.join(random.choice(string.ascii_lowercase + string.digits)for x in range(16))
        new_user = User.objects.create_user(
            username = username,
            first_name = data['name'],
            email = data['email'], 
            password = password,
            related_with = "artists"
            )
        artist = Artist.objects.create(user=new_user, facebook_id=data['facebook_id'], step=2)
        ReceiverAccount.objects.create(user=new_user, paypal_email=new_user.email)
        WorkTime.objects.create(artist=artist)

        hash_name = ''.join(random.choice(string.ascii_lowercase + string.digits)for x in range(10))
        path = MEDIA_URL + 'artists/' + str(artist.id) + '/avatar/' + hash_name + '.jpeg'
        full_path = MEDIA_ROOT + 'artists/' + str(artist.id) + '/avatar/' + hash_name + '.jpeg'
        d = os.path.dirname(full_path)
        if not os.path.exists(d):
            os.makedirs(d)
        else:
            shutil.rmtree(d)
            os.makedirs(d)
        urllib.request.urlretrieve(data['avatar'], full_path)
        
        artist.avatar = path
        artist.save()
        kwargs = {}
        kwargs['password'] = password
        send_email(case=3, receiver=new_user, **kwargs)

        login_user(request, new_user)
    else:
        login_user(request, is_user)

    return HttpResponseRedirect(reverse('home'))
Example #35
0
def start_payment(request):
    sn = request.session.get('dummy_booking_id', None)
    dummy_booking = get_object_or_None(DummyBooking, id=int(sn))
    
    paypalrestsdk.configure({
      'mode': PAYPAL_MODE,
      'client_id': PAYPAL_CLIENT_ID,
      'client_secret': PAYPAL_CLIENT_SECRET
    })
    payment = paypalrestsdk.Payment({
            "intent": "authorize",
            "payer": {
                "payment_method": "paypal"
            },
            "redirect_urls": {
                "return_url": "http://partytask.com/success",
                "cancel_url": "http://partytask.com/error"
            },
            "transactions": [ {
                "item_list": {
                    "items": [{
                        "name": dummy_booking.title,
                        "price": int(dummy_booking.price),
                        "currency": "USD",
                        "quantity": 1
                    }]
                },
                "amount": {
                    "total": int(dummy_booking.price),
                    "currency": "USD" 
                },
                "description": dummy_booking.title
            }]
        })

    if not payment.create():
        print(payment.error)
        raise Http404

    request.session['Payment_id'] = payment['id']
    redirect = payment['links'][1]['href'] + "&no_shipping=1"

    return HttpResponseRedirect(redirect)
Example #36
0
def calendar(request, artist_id):
    if artist_id == "None":
        salon = request.user.salon
        try:
            artist = Artist.objects.filter(salon=salon, is_activated=True)[0]
            return HttpResponseRedirect(reverse("salons_calendar", kwargs={"artist_id": artist.id}))
        except:
            messages.add_message(request, messages.INFO, _("You cannot view the calendar, without have any artists."))
            return HttpResponseRedirect(reverse("salons_artists"))

    if request.method == "POST":
        artist = get_object_or_404(Artist, id=int(artist_id))
        start_time = request.POST.get("start_time", None)
        end_time = request.POST.get("end_time", None)
        comment = request.POST.get("comment", None)
        if start_time and end_time:
            Busy.objects.create(artist=artist, start_time=start_time, end_time=end_time, comment=comment)
    elif request.method == "GET":
        elem_id = request.GET.get("id", None)
        if elem_id:
            busy = get_object_or_None(Busy, id=int(elem_id))
            if busy:
                busy.delete()

    salon = request.user.salon
    artist_id = int(artist_id)
    artist = get_object_or_404(Artist, id=artist_id, salon=salon)
    bookings = Booking.objects.select_related().filter(artist=artist, status__in=[0, 1])
    busy = Busy.objects.filter(artist=artist)

    artists = Artist.objects.filter(salon=salon, is_activated=True)
    artists = [a.id for a in artists]

    current_index = artists.index(artist_id)

    next = artists[0] if current_index + 1 == len(artists) else artists[current_index + 1]
    prev = artists[-1] if current_index == 0 else artists[current_index - 1]

    return render(
        request,
        "salons/management/calendar.html",
        {"artist": artist, "bookings": bookings, "busy": busy, "next": next, "prev": prev},
    )
Example #37
0
def add_artist(request):
    salon = get_object_or_None(Salon, user=request.user)

    if request.method == 'POST':
        form = AddArtist(request.POST, request.FILES)
        if form.is_valid():
            artist = form.save(salon)
            WorkTime.objects.create(artist=artist)
            artists = Artist.objects.filter(salon=salon)
            if len(artists) > 1:
                cp_id = ArtistPolicy.objects.filter(artist=artists[0])[0]
                ArtistPolicy.objects.filter(artist=artist).update(
                    cancellation_policy=cp_id.cancellation_policy, status=1)

            return HttpResponseRedirect(reverse('salons_profile'))

    else:
        form = AddArtist()

    return render(request, 'salons/add_artist.html', {'form': form})
Example #38
0
def add_artist(request):
    salon = get_object_or_None(Salon, user=request.user)

    if request.method == "POST":
        form = AddArtist(request.POST, request.FILES)
        if form.is_valid():
            artist = form.save(salon)
            WorkTime.objects.create(artist=artist)
            artists = Artist.objects.filter(salon=salon)
            if len(artists) > 1:
                cp_id = ArtistPolicy.objects.filter(artist=artists[0])[0]
                ArtistPolicy.objects.filter(artist=artist).update(
                    cancellation_policy=cp_id.cancellation_policy, status=1
                )

            return HttpResponseRedirect(reverse("salons_profile"))

    else:
        form = AddArtist()

    return render(request, "salons/add_artist.html", {"form": form})
Example #39
0
def calendar(request):
    if request.method == "POST":
        start_time = request.POST.get("start_time", None)
        end_time = request.POST.get("end_time", None)
        comment = request.POST.get("comment", None)
        if start_time and end_time:
            Busy.objects.create(
                artist=request.user.artist, 
                start_time=start_time,
                end_time=end_time,
                comment=comment
                )
    elif request.method == "GET":
        elem_id = request.GET.get("id", None)
        if elem_id:
            busy = get_object_or_None(Busy, id=int(elem_id))
            if busy:
                busy.delete()
    artist = get_object_or_404(Artist, user=request.user)
    bookings = Booking.objects.select_related().filter(artist=artist, status__in=[0,1])
    busy = Busy.objects.filter(artist=artist)
    return render(request, 'artists/calendar.html', {"artist": artist, "bookings": bookings, "busy": busy})
Example #40
0
def start_payment(request):
    sn = request.session.get("dummy_booking_id", None)
    dummy_booking = get_object_or_None(DummyBooking, id=int(sn))

    paypalrestsdk.configure({"mode": PAYPAL_MODE, "client_id": PAYPAL_CLIENT_ID, "client_secret": PAYPAL_CLIENT_SECRET})

    payment = paypalrestsdk.Payment(
        {
            "intent": "authorize",
            "payer": {"payment_method": "paypal"},
            "redirect_urls": {"return_url": "http://glamfame.com/success", "cancel_url": "http://glamfame.com/error"},
            "transactions": [
                {
                    "item_list": {
                        "items": [
                            {
                                "name": dummy_booking.title,
                                "price": int(dummy_booking.price),
                                "currency": dummy_booking.currency,
                                "quantity": 1,
                            }
                        ]
                    },
                    "amount": {"total": int(dummy_booking.price), "currency": "USD"},
                    "description": dummy_booking.title,
                }
            ],
        }
    )

    if not payment.create():
        raise Http404

    request.session["Payment_id"] = payment["id"]
    request.session["comment"] = request.POST.get("comment", None)
    _redirect = payment["links"][1]["href"] + "&no_shipping=1"

    return redirect(_redirect)
Example #41
0
def add(request, listing_id):
    listing_id = int(listing_id)
    user = request.user
    listing = Listing.objects.select_related("artist").get(id=listing_id)

    flag = get_object_or_None(Favorite, user=user, listing=listing)

    if not flag:
        listing.likes = listing.likes + 1
        listing.save()
        Favorite.objects.create(user=user, listing=listing)
        add_to_wishlist(user, listing.artist.user, listing)
    else:
        listing.likes = listing.likes - 1
        listing.save()
        flag.delete()

    return HttpResponseRedirect(
        reverse('listing',
                kwargs={
                    'listing_id': listing.id,
                    'title': listing.title
                }))
Example #42
0
def edit_artist(request, artist_id=None):
    artist = get_object_or_None(Artist, id=int(artist_id))
    user = artist.user

    if request.method == "POST":
        form = EditArtist(request.POST, request.FILES, instance=artist)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse("salons_artists_edit", kwargs={"artist_id": artist_id}))
    else:
        form = EditArtist(
            instance=artist,
            initial={
                "name": user.first_name,
                "avatar": artist.avatar,
                "description": artist.description,
                "style": artist.style,
                "enable_emails": artist.enable_emails,
                "enable_sms": artist.enable_sms,
            },
        )

    return render(request, "salons/artist_settings/edit_artist.html", {"artist": artist, "form": form})
Example #43
0
def add(request, listing_id):
    listing_id = int(listing_id)
    user = request.user
    listing = Listing.objects.select_related("artist").get(id=listing_id)

    flag = get_object_or_None(Favorite, user=user, listing=listing)

    if not flag:
        listing.likes = listing.likes + 1
        listing.save()
        Favorite.objects.create(user=user, listing=listing)
        Notification.objects.create(
                        sender = user, 
                        receiver = listing.artist.user,
                        time = current_time(),
                        short_text = NOTIFICATIONS_SHORT[7].format(user=user.first_name),
                        long_text = NOTIFICATIONS_LONG[7].format(user=user.first_name, listing=listing.title, user_id=user.id, metadata=listing_id),
                    )
    else:
        listing.likes = listing.likes - 1
        listing.save()
        flag.delete()

    return HttpResponseRedirect(reverse('listing', kwargs={'listing_id': listing.id}))
Example #44
0
def send_email(case, receiver, **kwargs):
    # User Welcome message
    to = receiver.email
    from_email = SENDER

    if case == 0:
        subject = SUBJECTS[0]
        receiver_name = receiver.first_name
        email_token = ''.join(random.choice(string.ascii_lowercase + string.digits) for x in range(32))
        confirmation = ConfirmationToken(user=receiver, email_token=email_token)
        confirmation.save()
        link = 'http://glamfame.com/users/confirmation/{0}'.format(email_token)
        html_content = render_to_string('emails/1.html', {'receiver_name': receiver_name, 'link': link})

    # Artist Welcome Message
    elif case == 1:
        subject = SUBJECTS[0]
        receiver_name = receiver.first_name
        html_content = render_to_string('emails/artist_welcome.html', {'receiver_name': receiver_name})

    # Salon Welcome Message
    elif case == 2:
        subject = SUBJECTS[0]
        receiver_name = receiver.first_name
        html_content = render_to_string('emails/salon_welcome.html', {'receiver_name': receiver_name})

    # Facebook welcome message
    elif case == 3:
        subject = SUBJECTS[0]
        receiver_name = receiver.first_name
        html_content = render_to_string('emails/facebook_welcome.html', {'receiver_name': receiver_name, 'password': kwargs['password']})

    # Forgotten Password
    elif case == 4:
        subject = SUBJECTS[1]
        receiver_name = receiver.first_name
        email_token = ''.join(random.choice(string.ascii_lowercase + string.digits) for x in range(32))
        token = get_object_or_None(PasswordToken, email=receiver.email)
        if token:
                token.email_token = email_token
                token.save()
        else:
                PasswordToken.objects.create(email=receiver.email, email_token=email_token)
        link = 'http://glamfame.com/users/change_password/{0}'.format(email_token)
        html_content = render_to_string('emails/password.html', {'receiver_name': receiver_name, 'link': link})

    # After the artist have new follower
    elif case == 8:
        receiver_name = receiver.first_name
        username = kwargs.pop('username', None)
        subject = SUBJECTS[5].format(username=username)
        count = kwargs.pop('count', None)
        link = 'http://glamfame.com/artists/profile/{0}'.format(kwargs.pop('id', None))
        html_content = render_to_string('emails/5.html', {'receiver_name': receiver_name, 'username': username, 'count': count, 'link': link})

    # After the artist have new follower and is assigned to a salon
    elif case == 9:
        receiver_name = receiver.first_name
        username = kwargs.pop('username', None)
        artistname = kwargs.pop('artistname', None)
        subject = SUBJECTS[6].format(username=username, artistname=artistname)
        count = kwargs.pop('count', None)
        link = 'http://glamfame.com/artists/profile/{0}'.format(kwargs.pop('id', None))
        html_content = render_to_string('emails/6.html', {'receiver_name': receiver_name, 'username': username, 'artistname': artistname, 'count': count, 'link': link})

    # Email for artist when he have a new booking request
    elif case == 10:
        receiver_name = receiver.first_name
        listing = kwargs.pop('listing', None)
        username = kwargs.pop('username', None)
        subject = SUBJECTS[7].format(title=listing.title)
        link = 'http://glamfame.com/artists/bookings'
        html_content = render_to_string('emails/7.html', {'receiver_name': receiver_name, 'username': username, 'listing': listing, 'link': link})

    # Email for salon when artist who is assigned to him have a new booking request
    elif case == 11:
        listing = kwargs.pop('listing', None)
        subject = SUBJECTS[7].format(title=listing.title)
        receiver_name = receiver.first_name
        username = kwargs.pop('username', None)
        artistname = kwargs.pop('artistname', None)
        link = 'http://glamfame.com/salons/bookings'
        html_content = render_to_string('emails/8.html', {'receiver_name': receiver_name, 'username': username, 'artistname': artistname, 'listing': listing, 'link': link})

    # When booking request is approved
    elif case == 12:
        subject = SUBJECTS[9]
        receiver_name = receiver.first_name
        listing = kwargs.pop('listing', None)
        artistname = kwargs.pop('artistname', None)
        when = kwargs.pop('when', None)
        html_content = render_to_string('emails/10.html', {'receiver_name': receiver_name, 'artistname': artistname, 'listing': listing, 'when': when})

    # When booking request is rejected
    elif case == 13:
        subject = SUBJECTS[10]
        receiver_name = receiver.first_name
        artistname = kwargs.pop('artistname', None)
        html_content = render_to_string('emails/11.html', {'receiver_name': receiver_name, 'artistname': artistname})

    # When booking request is declined from the client, after it was approved, no charged
    elif case == 14:
        receiver_name = receiver.first_name
        username = kwargs.pop('username', None)
        when = kwargs.pop('when', None)
        subject = SUBJECTS[11].format(when=when)
        day_before = kwargs.pop('day_before', None)
        html_content = render_to_string('emails/12.html', {'receiver_name': receiver_name, 'username': username, 'when': when, 'day_before': day_before})

    # When booking request is declined from the client, after it was approved, with charge
    elif case == 15:
        receiver_name = receiver.first_name
        username = kwargs.pop('username', None)
        when = kwargs.pop('when', None)
        subject = SUBJECTS[11].format(when=when)
        day_before = kwargs.pop('day_before', None)
        html_content = render_to_string('emails/13.html', {'receiver_name': receiver_name, 'username': username, 'when': when, 'day_before': day_before})

    # When booking request is approved from the artist, and cancelled afterthat
    elif case == 16:
        receiver_name = receiver.first_name
        artistname = kwargs.pop('artistname', None)
        when = kwargs.pop('when', None)
        subject = SUBJECTS[11].format(when=when)
        listing_id = kwargs.pop('listing_id', None)
        html_content = render_to_string('emails/14.html', {'receiver_name': receiver_name, 'artistname': artistname, 'when': when, 'listing_id': listing_id})

    # After the book time. Email for feedback !
    elif case == 17:
        receiver_name = receiver.first_name
        artistname = kwargs.pop('artistname', None)
        token = kwargs.pop('token', None)
        subject = SUBJECTS[12]
        link = 'http://glamfame.com/reviews/{0}'.format(token)
        html_content = render_to_string('emails/15.html', {'receiver_name': receiver_name, 'artistname': artistname, 'link': link})

    # When we automatically create an user
    elif case == 18:
        subject = SUBJECTS[0]
        receiver_name = receiver.first_name
        html_content = render_to_string('emails/19.html', {'receiver_name': receiver_name, 'password': kwargs['password']})

    msg = EmailMultiAlternatives(subject, html_content, from_email, [to])
    msg.content_subtype = "html"
    msg.send()
Example #45
0
        subject = SUBJECTS[0]
        receiver_name = receiver.first_name
        html_content = render_to_string('emails/salon_welcome.html', {'receiver_name': receiver_name})

    # Facebook welcome message
    elif case == 3:
        subject = SUBJECTS[0]
        receiver_name = receiver.first_name
        html_content = render_to_string('emails/facebook_welcome.html', {'receiver_name': receiver_name, 'password': kwargs['password']})

    # Forgotten Password
    elif case == 4:
        subject = SUBJECTS[1]
        receiver_name = receiver.first_name
        email_token = ''.join(random.choice(string.ascii_lowercase + string.digits) for x in range(32))
        token = get_object_or_None(PasswordToken, email=receiver.email)
        if token:
                token.email_token = email_token
                token.save()
        else:
                PasswordToken.objects.create(email=receiver.email, email_token=email_token)
        link = 'http://glamfame.com/users/change_password/{0}'.format(email_token)
        html_content = render_to_string('emails/password.html', {'receiver_name': receiver_name, 'link': link})

    # After the artist have new follower
    elif case == 8:
        receiver_name = receiver.first_name
        username = kwargs.pop('username', None)
        subject = SUBJECTS[5].format(username=username)
        count = kwargs.pop('count', None)
        link = 'http://glamfame.com/artists/profile/{0}'.format(kwargs.pop('id', None))
Example #46
0
def show(request, listing_id=None, title=None):

    if listing_id and listing_id.isdigit():
        try:
            listing = Listing.objects.select_related().get(id=int(listing_id))
        except:
            raise Http404
    else:
        raise Http404

    if listing.status == 3:
        raise Http404

    artist = listing.artist

    booked = False
    profile = None
    favorite = False

    ''' In case that the user start the booking '''
    if request.method == 'POST':
        ''' A hook for the case where the user is not logged in '''
        user = request.user
        back_url = request.POST.get("back_url", None)
        if user.is_authenticated() and not back_url:
            client = user.profile
        else:
            email = request.POST.get('email')
            user = get_object_or_None(User, email=email)
            if user:
                client = get_object_or_None(Profile, user=user)
                if client is not None:
                    login_user(request, user)
                else:
                    messages.add_message(request, messages.ERROR,
                        _("This email is already used by a beauty artist or salon. Please submit different email address in order to continue."))
                    return redirect(reverse('listing', kwargs={"listing_id": listing.id}))
            else:
                username = ''.join(random.choice(string.ascii_lowercase + string.digits)for x in range(16))
                password = ''.join(random.choice(string.ascii_lowercase + string.digits)for x in range(6))
                new_user = User.objects.create_user(username=username,
                                                    first_name='anonymous',
                                                    email=email,
                                                    password=password,
                                                    related_with="profiles",)
                client = Profile.objects.create(user=new_user, auto_created=True)
                kwargs = {}
                kwargs['password'] = password
                send_email(case=18, receiver=new_user, **kwargs)

        get_time = int(request.POST.get('time'))
        artist_policy = ArtistPolicy.objects.get(artist=artist, status=1)
        dummy_booking = DummyBooking.objects.create(artist=listing.artist,
                                                    listing=listing,
                                                    client=client,
                                                    cancellation_policy=artist_policy.cancellation_policy,
                                                    revenue=listing.price-listing.original_price,
                                                    price=listing.price,
                                                    title=listing.title,
                                                    start_time=get_time,
                                                    end_time=get_time + listing.duration,)

        request.session["dummy_booking_id"] = dummy_booking.id
        request.session["back_url"] = back_url
        return HttpResponseRedirect(reverse('booking_confirm'))

    else:
        ''' Just for reendering the page '''
        try:
            user = request.user
            favorite = get_object_or_None(Favorite, user=user, listing=listing)
            profile = get_object_or_None(Profile, user=user)
        except:
            pass
        # if current visiter is profile and the listing is not in his favorite list, the flag is turned on

        if not favorite and profile:
            favorite = False
        else:
            favorite = True

        # if current visiter is profile, we will give them a chance to book it
        if profile:
            bookings = Booking.objects.filter(client=profile, listing=listing)
            if bookings:
                for b in bookings:
                    if b.end_time > current_time() and b.status in [0, 1]:
                        booked = b.start_time

        hours = ['8:00 AM', '8:30 AM', '9:00 AM', '9:30 AM', '10:00 AM', '10:30 AM', '11:00 AM', '11:30 AM', '12:00 PM', '12:30 PM', '13:00 PM', '13:30 PM', '14:00 PM', '14:30 PM', '15:00 PM', '15:30 PM', '16:00 PM', '16:30 PM', '17:00 PM', '17:30 PM', '18:00 PM', '18:30 PM', '19:00 PM', '19:30 PM']
        artist_policy = ArtistPolicy.objects.get(artist=artist, status=1)
        tags = ListingTags.objects.select_related("tags").filter(listing=listing)
        tags = [t.tags.tag for t in tags]

        reviews = Review.objects.select_related().filter(listing=listing)
        reviews = list(reviews)
        rate = get_rate(reviews)
        artist_reviews = Review.objects.select_related().filter(artist=artist)
        artist_reviews = list(artist_reviews)
        artist_rate = get_rate(artist_reviews)

        current_date = time.strftime("%Y-%m-%d")

        listing_view, created = ListingView.objects.get_or_create(listing=listing, date=current_date)
        listing_view.views = listing_view.views + 1
        listing_view.save()

    return render(request, 'listings/details.html', {'listing': listing,
                                                     'artist': artist,
                                                     'reviews': reviews,
                                                     'rate': rate,
                                                     'artist_rate': artist_rate,
                                                     'favorite': favorite,
                                                     'hours': hours,
                                                     'booked': booked,
                                                     'policy': artist_policy,
                                                     'tags': tags})
Example #47
0
def widget(request, token=None):
    token = get_object_or_None(ExternalToken, token=token)
    all_artists = []
    all_listings = []
    if not token:
        raise PermissionDenied
    user = token.user
    if user.related_with == 'artists':
        artist = user.artist
        widget = {
            "avatar": artist.get_avatar,
            "name": user.first_name,
            "related_with": user.related_with,
            "have_image": token.have_image,
        }
        listings = Listing.objects.filter(artist=artist, status=1)
        for l in listings:
            listing = {
                "id": l.id,
                "artist_id": l.artist_id,
                "title": l.title,
                "picture": l.get_picture,
                "price": l.price,
                "currency": l.get_currency_display,
                "duration": l.duration,
            }
            all_listings.append(listing)
        widget["listings"] = all_listings

    elif user.related_with == 'salons':
        salon = user.salon
        widget = {
            "avatar": salon.get_avatar,
            "name": user.first_name,
            "related_with": user.related_with,
            "have_image": token.have_image,
        }
        artists = Artist.objects.filter(salon=salon)
        for a in artists:
            artist = {
                "id": a.id,
                "name": a.user.first_name,
                "avatar": a.get_avatar,
            }
            all_artists.append(artist)

        listings = Listing.objects.filter(artist__in=artists, status=1)
        for l in listings:
            listing = {
                "id": l.id,
                "artist_id": l.artist_id,
                "title": l.title,
                "picture": l.get_picture,
                "price": l.price,
                "currency": l.get_currency_display,
                "duration": l.duration,
            }
            all_listings.append(listing)
        widget["listings"] = all_listings

    return render(request, 'widget/widget.html', {"widget": widget, "artists": all_artists})
Example #48
0
def widget(request, token=None):
    token = get_object_or_None(ExternalToken, token=token)
    all_artists = []
    all_listings = []
    if not token:
        raise PermissionDenied
    user = token.user
    if user.related_with == 'artists':
        artist = user.artist
        widget = {
            "avatar": artist.get_avatar,
            "name": user.first_name,
            "related_with": user.related_with,
            "have_image": token.have_image,
        }
        listings = Listing.objects.filter(artist=artist, status=1)
        for l in listings:
            listing = {
                "id": l.id,
                "artist_id": l.artist_id,
                "title": l.title,
                "picture": l.get_picture,
                "price": l.price,
                "currency": l.get_currency_display,
                "duration": l.duration,
            }
            all_listings.append(listing)
        widget["listings"] = all_listings

    elif user.related_with == 'salons':
        salon = user.salon
        widget = {
            "avatar": salon.get_avatar,
            "name": user.first_name,
            "related_with": user.related_with,
            "have_image": token.have_image,
        }
        artists = Artist.objects.filter(salon=salon)
        for a in artists:
            artist = {
                "id": a.id,
                "name": a.user.first_name,
                "avatar": a.get_avatar,
            }
            all_artists.append(artist)

        listings = Listing.objects.filter(artist__in=artists, status=1)
        for l in listings:
            listing = {
                "id": l.id,
                "artist_id": l.artist_id,
                "title": l.title,
                "picture": l.get_picture,
                "price": l.price,
                "currency": l.get_currency_display,
                "duration": l.duration,
            }
            all_listings.append(listing)
        widget["listings"] = all_listings

    return render(request, 'widget/widget.html', {
        "widget": widget,
        "artists": all_artists
    })
Example #49
0
    def save(self, listing, FILES):
        data = self.cleaned_data
        pictures = FILES.getlist('files')
        hash_name = ''.join(
            random.choice(string.ascii_lowercase + string.digits)
            for x in range(6))

        my_dir = MEDIA_ROOT + listing.picture[7:]

        deletes_files = data['deleted']
        if deletes_files:
            deletes_files = data['deleted'].split(',')[:-1]
            for d in deletes_files:
                os.remove(d)

        os.chdir(my_dir)

        cover = data["cover"]

        artist_id = str(listing.artist_id)

        for index, picture in enumerate(pictures):
            dataUrlPattern = re.compile('data:image/(png|jpeg);base64,(.*)$')
            my_file = dataUrlPattern.match(picture).group(2)

            hash_name = ''.join(
                random.choice(string.ascii_lowercase + string.digits)
                for x in range(6))

            if cover.isdigit() and index == int(cover):
                full_path = MEDIA_ROOT + 'artists/' + artist_id + '/listings/' + listing.metadata + '/' + hash_name + '.jpeg'
                cover = full_path
            else:
                full_path = MEDIA_ROOT + 'artists/' + artist_id + '/listings/' + listing.metadata + '/' + hash_name + '.jpeg'

            #if the folder doesn't exist, create on
            d = os.path.dirname(full_path)
            if not os.path.exists(d):
                os.makedirs(d)

            im = Image.open(BytesIO(base64.b64decode(my_file.encode('ascii'))))
            im.save(full_path, 'JPEG')

        ListingTags.objects.filter(listing=listing).delete()
        tags = data['tags'].split(',')
        for tag in tags:
            tag = tag.lower()
            current_tag = get_object_or_None(Tags, tag=tag)
            if not current_tag:
                current_tag = Tags.objects.create(tag=tag)

            ListingTags.objects.create(listing=listing, tags=current_tag)

        if cover:
            listing.picture_cover = cover
        listing.title = data['title']
        listing.description = data['description']
        listing.price = data['price']
        listing.duration = int(data['duration'])
        listing.gender = int(data['gender'])
        listing.save()

        return listing
Example #50
0
def show(request, listing_id=None, title=None):

    if listing_id and listing_id.isdigit():
        try:
            listing = Listing.objects.select_related().get(id=int(listing_id))
        except:
            raise Http404
    else:
        raise Http404

    if listing.status == 3:
        raise Http404

    artist = listing.artist

    booked = False
    profile = None
    favorite = False
    ''' In case that the user start the booking '''
    if request.method == 'POST':
        ''' A hook for the case where the user is not logged in '''
        user = request.user
        back_url = request.POST.get("back_url", None)
        if user.is_authenticated() and not back_url:
            client = user.profile
        else:
            email = request.POST.get('email')
            user = get_object_or_None(User, email=email)
            if user:
                client = get_object_or_None(Profile, user=user)
                if client is not None:
                    login_user(request, user)
                else:
                    messages.add_message(
                        request, messages.ERROR,
                        _("This email is already used by a beauty artist or salon. Please submit different email address in order to continue."
                          ))
                    return redirect(
                        reverse('listing', kwargs={"listing_id": listing.id}))
            else:
                username = ''.join(
                    random.choice(string.ascii_lowercase + string.digits)
                    for x in range(16))
                password = ''.join(
                    random.choice(string.ascii_lowercase + string.digits)
                    for x in range(6))
                new_user = User.objects.create_user(
                    username=username,
                    first_name='anonymous',
                    email=email,
                    password=password,
                    related_with="profiles",
                )
                client = Profile.objects.create(user=new_user,
                                                auto_created=True)
                kwargs = {}
                kwargs['password'] = password
                send_email(case=18, receiver=new_user, **kwargs)

        get_time = int(request.POST.get('time'))
        artist_policy = ArtistPolicy.objects.get(artist=artist, status=1)
        dummy_booking = DummyBooking.objects.create(
            artist=listing.artist,
            listing=listing,
            client=client,
            cancellation_policy=artist_policy.cancellation_policy,
            revenue=listing.price - listing.original_price,
            price=listing.price,
            title=listing.title,
            start_time=get_time,
            end_time=get_time + listing.duration,
        )

        request.session["dummy_booking_id"] = dummy_booking.id
        request.session["back_url"] = back_url
        return HttpResponseRedirect(reverse('booking_confirm'))

    else:
        ''' Just for reendering the page '''
        try:
            user = request.user
            favorite = get_object_or_None(Favorite, user=user, listing=listing)
            profile = get_object_or_None(Profile, user=user)
        except:
            pass
        # if current visiter is profile and the listing is not in his favorite list, the flag is turned on

        if not favorite and profile:
            favorite = False
        else:
            favorite = True

        # if current visiter is profile, we will give them a chance to book it
        if profile:
            bookings = Booking.objects.filter(client=profile, listing=listing)
            if bookings:
                for b in bookings:
                    if b.end_time > current_time() and b.status in [0, 1]:
                        booked = b.start_time

        hours = [
            '8:00 AM', '8:30 AM', '9:00 AM', '9:30 AM', '10:00 AM', '10:30 AM',
            '11:00 AM', '11:30 AM', '12:00 PM', '12:30 PM', '13:00 PM',
            '13:30 PM', '14:00 PM', '14:30 PM', '15:00 PM', '15:30 PM',
            '16:00 PM', '16:30 PM', '17:00 PM', '17:30 PM', '18:00 PM',
            '18:30 PM', '19:00 PM', '19:30 PM'
        ]
        artist_policy = ArtistPolicy.objects.get(artist=artist, status=1)
        tags = ListingTags.objects.select_related("tags").filter(
            listing=listing)
        tags = [t.tags.tag for t in tags]

        reviews = Review.objects.select_related().filter(listing=listing)
        reviews = list(reviews)
        rate = get_rate(reviews)
        artist_reviews = Review.objects.select_related().filter(artist=artist)
        artist_reviews = list(artist_reviews)
        artist_rate = get_rate(artist_reviews)

        current_date = time.strftime("%Y-%m-%d")

        listing_view, created = ListingView.objects.get_or_create(
            listing=listing, date=current_date)
        listing_view.views = listing_view.views + 1
        listing_view.save()

    return render(
        request, 'listings/details.html', {
            'listing': listing,
            'artist': artist,
            'reviews': reviews,
            'rate': rate,
            'artist_rate': artist_rate,
            'favorite': favorite,
            'hours': hours,
            'booked': booked,
            'policy': artist_policy,
            'tags': tags
        })