def send_review_email(): print("something cool") now = current_time() # passed_bookings = Booking.objects.select_related("client__user, artist__user").filter(end_time__lt=now, is_mailed=False, status=1).update(is_mailed=True) passed_bookings = Booking.objects.all() print(passed_bookings) for b in passed_bookings: token = ''.join(random.choice(string.ascii_lowercase + string.digits) for x in range(32)) # b.is_mailed = True # b.save() w = WaitingForFeedback.objects.all() for x in w: x.delete() WaitingForFeedback.objects.create( client=b.client, artist=b.artist, listing=b.listing, booking=b, token=token ) kwargs = {} kwargs['artistname'] = b.artist.user.first_name kwargs['token'] = token send_email(case=17, receiver=b.client.user, **kwargs)
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 send_review_email(): now = current_time() passed_bookings = Booking.objects.select_related().filter(end_time__lt=now, review_email=False, status=1) bookings_ids = [] for b in passed_bookings: token = "".join(random.choice(string.ascii_lowercase + string.digits) for x in range(32)) WaitingForFeedback.objects.create(client=b.client, artist=b.artist, listing=b.listing, booking=b, token=token) full_capture(b.id) bookings_ids.append(b.id) kwargs = {} kwargs["artistname"] = b.artist.user.first_name kwargs["token"] = token send_email(case=17, receiver=b.client.user, **kwargs) Booking.objects.filter(id__in=bookings_ids).update(status=3, review_email=True)
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 sign_up(request): fee = None if request.GET.get("step") == '2': if request.method == "POST": form = LocationArtistDetails(request.POST) if form.is_valid(): data = form.cleaned_data artist = Artist.objects.filter(user=request.user).update( style=int(data['style']), lat=data["lat"], lng=data["lng"], step=0, ) return HttpResponseRedirect(reverse('artists_profile')+"?show_hint=1") else: form = LocationArtistDetails() else: if request.method == "POST": request.GET.get("step") form = ArtistForm(request.POST) if form.is_valid(): data = form.cleaned_data form.save() user = authenticate( email=data['email'], password=data['password']) artist = Artist.objects.create(user=user) ReceiverAccount.objects.create(user=user, paypal_email=user.email) WorkTime.objects.create(artist=artist) if user is not None and user.is_active: artist.step = 2 artist.save() auth_login(request, user) send_email(case=1, receiver=user) return HttpResponseRedirect(reverse('artists_sign_up')+"?step=2") else: form = ArtistForm() return render(request, 'artists/sign_up.html', {'form': form, "fee": fee})
def do(self): now = current_time() passed_bookings = Booking.objects.select_related().filter(end_time__lt=now, is_mailed=False, status=1) for b in passed_bookings: token = ''.join(random.choice(string.ascii_lowercase + string.digits) for x in range(32)) WaitingForFeedback.objects.create( client=b.client, artist=b.artist, listing=b.listing, booking=b, token=token ) full_capture(b.id) kwargs = {} kwargs['artistname'] = b.artist.user.first_name kwargs['token'] = token send_email(case=17, receiver=b.client.user, **kwargs) Booking.objects.select_related().filter(end_time__lt=now, is_mailed=False, status=1).update(is_mailed=True)
def save(self, force_insert=False, force_update=False, **kwargs): if self.id: super(Followers, self).save(force_insert, force_update) else: super(Followers, self).save(force_insert, force_update) if self.user.related_with == 'profiles': link_1 = '/users/profile/' + str(self.user.profile.id) elif self.user.related_with == 'artists': link_1 = '/artists/profile/' + str(self.user.artist.id) else: link_1 = '/salons/profile/' + str(self.user.salon.id) Notification.objects.create( sender = self.user, receiver = self.artist.user, time = current_time(), short_text = NOTIFICATIONS_SHORT[6].format(user=self.user.first_name), long_text = NOTIFICATIONS_LONG[6].format(user=self.user.first_name, link_1=link_1), ) kwargs = {} kwargs['username'] = self.user.first_name kwargs['count'] = Followers.objects.filter(artist=self.artist).count() kwargs['id'] = self.artist.id send_email(case=8, receiver=self.artist.user, **kwargs)
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 sign_up(request): if request.GET.get("step") == '2': if request.method == "POST": form = ArtistDetails(request.POST, request.FILES, artist=request.user.artist) if form.is_valid(): data = form.cleaned_data cropped_image = data['cropped_image'] user = request.user if data["avatar"]: path = form.handle_uploaded_file(cropped_image,user) artist = Artist.objects.filter(user=request.user).update(style=int(data['style']), specific_style=data["specific_style"], avatar=path, description=data['description'], step=3, ) else: artist = Artist.objects.filter(user=request.user).update(style=int(data['style']), specific_style=data["specific_style"], description=data['description'], step=3, ) return HttpResponseRedirect(reverse('artists_sign_up')+"?step=3") else: form = ArtistDetails() elif request.GET.get("step") == '3': if request.method == "POST": form = LocationArtistDetails(request.POST) if form.is_valid(): data = form.cleaned_data artist = Artist.objects.filter(user=request.user).update( lat=data["lat"], lng=data["lng"], mobile_number=data['mobile_number'], step=4, ) return HttpResponseRedirect(reverse('artists_sign_up')+"?step=4") else: form = LocationArtistDetails() elif request.GET.get("step") == '4': if request.method == "POST": artist = request.user.artist form = UploadListing(request.POST, request=request) if form.is_valid(): data = form.cleaned_data listing = form.save(artist, request.POST) messages.add_message(request, messages.INFO, "You have successfully created %s. Your listing is currently in under review. This may take up to a couple of hours." % listing.title) artist.step = 0 artist.save() return HttpResponseRedirect(reverse('all_listing')) else: form = UploadListing() else: if request.method == "POST": request.GET.get("step") form = ArtistForm(request.POST) if form.is_valid(): data = form.cleaned_data form.save() user = authenticate( email=data['email'], password=data['password']) artist = Artist.objects.create(user=user); ReceiverAccount.objects.create(user=user, paypal_email=user.email) WorkTime.objects.create(artist=artist) if user is not None and user.is_active: artist.step = 2 artist.save() auth_login(request, user) send_email(case=1, receiver=user) return HttpResponseRedirect(reverse('artists_sign_up')+"?step=2") else: form = ArtistForm() return render(request, 'artists/sign_up.html', {'form': form})
def save(self, force_insert=False, force_update=False, old_status=None, **kwargs): if self.id: cancelled_by = self.cancelled_by super(Booking, self).save(force_insert, force_update) print("start_function", cancelled_by, old_status, self.status) if cancelled_by == 1 and not old_status == self.status: """The real tricky moment here is the notation for nb 1 - the booking is approved, 2 - rejected, 3 declined""" notificated_user = self.client.user artist_user = self.artist.user if self.status == 1: nb = 1 cr = CancellationRate.objects.get(artist=self.artist) cr.approved += 1 cr.save() elif self.status == 2: if old_status == 0: nb = 2 else: nb = 3 cr = CancellationRate.objects.get(artist=self.artist) cr.cancelled += 1 cr.save() Notification.objects.create( sender=artist_user, receiver=notificated_user, time=current_time(), short_text=NOTIFICATIONS_SHORT[nb].format(artist=artist_user.first_name), long_text=NOTIFICATIONS_LONG[nb].format( artist=artist_user.first_name, listing=self.listing.title, user_id=self.artist_id, metadata=self.listing_id, ), ) kwargs = {} if nb == 1: kwargs["listing"] = self.listing kwargs["artistname"] = self.artist.user.first_name kwargs["when"] = self.start_time send_email(case=12, receiver=notificated_user, **kwargs) elif nb == 2: kwargs["artistname"] = self.artist.user.first_name send_email(case=13, receiver=notificated_user, **kwargs) elif nb == 3: kwargs["artistname"] = self.artist.user.first_name kwargs["when"] = self.start_time kwargs["listing_id"] = self.listing_id send_email(case=13, receiver=notificated_user, **kwargs) elif cancelled_by == 2 and not old_status == self.status: profile_user = self.client.user artist_user = self.artist.user Notification.objects.create( sender=profile_user, receiver=artist_user, time=current_time(), short_text=NOTIFICATIONS_SHORT[4].format(user=profile_user.first_name), long_text=NOTIFICATIONS_LONG[4].format( user=profile_user.first_name, listing=self.listing.title, user_id=self.client_id, metadata=self.listing_id, ), ) kwargs = {} # when user cancel an apoinment if old_status == 2: delta_time = self.start_time - current_time() kwargs["username"] = profile_user.first_name kwargs["when"] = self.start_time kwargs["day_before"] = round(delta_time / 86400) if delta_time > 150000: send_email(case=14, receiver=artist_user, **kwargs) else: send_email(case=15, receiver=artist_user, **kwargs) else: super(Booking, self).save(force_insert, force_update) user = self.client.user Notification.objects.create( sender=user, receiver=self.artist.user, time=current_time(), short_text=NOTIFICATIONS_SHORT[0].format(user=user.first_name), long_text=NOTIFICATIONS_LONG[0].format( user=user.first_name, listing=self.title, user_id=self.client_id, metadata=self.listing_id ), ) kwargs = {} kwargs["listing"] = self.listing kwargs["username"] = user.first_name send_email(case=10, receiver=self.artist.user, **kwargs)