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, })
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
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, })
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
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}))
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 })
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 })
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"))
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")
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
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")
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
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")
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
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})
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})
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]
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")
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 })
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})
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
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")
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)
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)
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})
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"))
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})
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}))
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 })
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)
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'))
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)
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}, )
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})
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})
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})
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)
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 }))
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})
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}))
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()
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))
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})
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})
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 })
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
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 })