예제 #1
0
파일: cron.py 프로젝트: SpeeDly/partytask
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)
예제 #2
0
파일: views.py 프로젝트: SpeeDly/partytask
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})
예제 #3
0
파일: cron.py 프로젝트: SpeeDly/glamfame
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)
예제 #4
0
파일: views.py 프로젝트: SpeeDly/partytask
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'))
예제 #5
0
파일: views.py 프로젝트: SpeeDly/glamfame
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})
예제 #6
0
파일: cron.py 프로젝트: SpeeDly/partytask
    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)
예제 #7
0
파일: models.py 프로젝트: SpeeDly/partytask
    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)
예제 #8
0
파일: views.py 프로젝트: SpeeDly/glamfame
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})
예제 #9
0
파일: views.py 프로젝트: SpeeDly/partytask
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})
예제 #10
0
파일: models.py 프로젝트: SpeeDly/partytask
    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)