Example #1
0
def pay(request, id):
    if request.method == "POST":
        method = request.POST.get("method")
        tr = request.POST.get("tr")

        try:
            event = Event.objects.get(id=id)
            if Transactions.objects.filter(Q(event=event),
                                           Q(user=request.user)).count() != 0:
                raise ValueError
            obj = Transactions()
            obj.event = event
            obj.method = method.strip()
            obj.tr = tr.strip()
            obj.user = request.user
            obj.save()
            event.pending.add(request.user)
            event.save()
            subject = f"New payment request for {event.title} | {request.user.username}"
            message = f"Dear {event.host.username},\nYour event '{event.title}' in TourDay gets a new payment request. Kindly review the request on https://tourday.team/event/{event.id}\nBest Regards\nTourDay Team"
            async_send_mail(subject, message, EMAIL_HOST_USER,
                            event.host.email)
            return JsonResponse({"status": 200})
        except:
            pass
    return JsonResponse({"status": 400})
Example #2
0
def signupView(request):
    if request.user.is_authenticated:
        logout(request)
    if request.method == "POST":
        username = request.POST.get('username')
        email = request.POST.get('email')
        password = request.POST.get('password')
        if username != "" and password != "" and email != "":

            try:
                # if True:
                if re.match(r"^[a-zA-Z0-9_]+$", username) == None:
                    raise ValueError
                validate_email(email)
                if User.objects.filter(email=email).count() >= 1:
                    raise ValueError
                user = User()
                user.username = username
                user.set_password(password)
                user.email = email
                user.save()
                subject = "Welcome to TourDay!"
                message = f"Dear {username},\nYour new TourDay account has been created. Welcome to TourDay Community!\nFrom now on, please log in to your account using your email address or your username and your password.\n\nComplete your account at https://tourday.team/profile/\n\nIf you received this email but didn't register for an TourDay account, something's gone wrong, Reply to this email to de-activate and close this account.\n\nThanks for registering!\nTourDay Team"
                async_send_mail(subject, message, EMAIL_HOST_USER, email)
            except:
                return JsonResponse({'status': 400})  # bad request

            user = authenticate(username=username, password=password)
            if user is not None:
                login(request, user)
                return JsonResponse({'status': 200})  # user found
        else:
            return JsonResponse({'status': 400})  # bad request
    return render(request, "_auth/signup.html")
Example #3
0
def addPost(request):
    pro = get_object_or_404(Profile, user=request.user)

    if request.method == 'POST' and 'blog_submit' in request.POST:

        if pro.name is not None and pro.bio is not None and pro.fb is not None and pro.insta is not None:

            form = blogPostForm(request.POST, request.FILES)
            if form.is_valid():
                post_item = form.save(commit=False)
                post_item.blog_user = request.user
                post_item.slug = request.user
                # info.user_id = request.user.id
                post_item.save()

                user = User()

                for user in user.email:

                    email = user.email

                    subject = "From TourDay!"
                    message = f"This is addPost, massege"
                    async_send_mail(subject, message, EMAIL_HOST_USER, email)

                return redirect('blog_home')
        else:
            return redirect('edit_profile')

    else:
        form = blogPostForm()
    return render(request, 'blog/add_post.html', {'form': form})
Example #4
0
def action(request, id):
    if request.method == "POST":
        event = Event.objects.get(id=id)
        is_accepted = request.POST.get("is_accepted")
        user = User.objects.get(id=request.POST.get("user_id"))
        tr = Transactions.objects.filter(Q(user=user), Q(event=event))

        if is_accepted == "1":
            event.going.add(user)
            event.pending.remove(user)
            tr.status = True
            tr.update()
            profile = Profile.objects.get(user=user)
            context = {
                'status': 200,
                'img': profile.picture.url,
                "name": profile.name,
                "username": user.username,
                "email": user.email
            }
            subject = f"Payment request accepted for {event.title}."
            message = f"Dear {user.username},\nYour payment request for event '{event.title}' in TourDay got accepted. Pack your bags and get ready to explore!\nKeep eye on https://tourday.team/event/{event.id}\nBest Regards\nTourDay Team"
            async_send_mail(subject, message, EMAIL_HOST_USER, user.email)
            return JsonResponse(context)
        elif is_accepted == "0":
            event.pending.remove(user)
            tr.delete()
            subject = f"Payment request denied for {event.title}."
            message = f"Dear {user.username},\nYour payment request for event '{event.title}' in TourDay got denied. Kindly check your transaction number and try again.\nBest Regards\nTourDay Team"
            async_send_mail(subject, message, EMAIL_HOST_USER, user.email)
            return JsonResponse({'status': 200})

    return JsonResponse({'status': 400})
Example #5
0
def forget(request):
    # Comment out in production
    if settings.EMAIL_HOST_PASSWORD == "":
        raise ValueError(
            "Email password is missing. Set password in EMAIL_HOST_PASSWORD at settings.py")

    email = request.POST.get("email")
    try:
        user = User.objects.filter(
            Q(email=email) | Q(username=email)
        ).first()
        code = get_code()
        if Code.objects.filter(user=user).count() > 0:
            obj = Code.objects.filter(user=user).first()
        else:
            obj = Code()
        obj.code = get_hash(code)
        obj.user = user
        obj.save()
        username = user.username
        subject = "Bugbinder | Reset Password."
        message = f"Dear {username},\nYou recently requested to reset your password for your Bugbinder account.\n\nCODE: {code}\n\nIf you didn't request a password reset, please ignore this email.\n\nThanks,\nBugbinder"
        async_send_mail(subject, message, settings.EMAIL_HOST_USER, user.email)
        return JsonResponse({'status': 200})
    except:
        return JsonResponse({'status': 403})
Example #6
0
    def post(self, request, *args, **kwargs):
        method = request.POST.get("method")
        tr = request.POST.get("tr")
        id = kwargs.get('id')

        try:
            # if True:
            event = Event.objects.get(id=id)
            if Transactions.objects.filter(
                Q(event=event), Q(user=request.user)
            ).count() != 0:
                return Response({'message': 'Pendinng payment exists'}, status=status.HTTP_403_FORBIDDEN)
            transaction = Transactions.objects.filter(
                Q(user__in=event.pending.all()), Q(
                    status=False), Q(event=event)
            )
            if event.capacity <= event.going.count() + transaction.count():
                return Response({'message': 'Sorry housefull'}, status=status.HTTP_403_FORBIDDEN)

            obj = Transactions()
            obj.event = event
            obj.method = method.strip()
            obj.tr = tr.strip()
            obj.user = request.user
            obj.save()
            event.pending.add(request.user)
            event.save()
            subject = f"New payment request for {event.title} | {request.user.username}"
            message = f"Dear {event.host.username},\nYour event '{event.title}' in TourDay gets a new payment request. Kindly review the request on https://tourday.team/event/{event.id}\nBest Regards\nTourDay Team"
            async_send_mail(subject, message,
                            EMAIL_HOST_USER, event.host.email)
            return Response({"status": 200})
        except:
            pass
        return Response({"status": 400})
Example #7
0
    def post(self, request, *args, **kwargs):
        event_id = kwargs.get('id')
        tr_id = request.POST.get('tr_id')
        is_accepted = request.POST.get('action')
        user_id = request.POST.get("user_id")

        event = get_object_or_404(Event, id=event_id)
        user = User.objects.get(id=user_id)
        tr = Transactions.objects.filter(
            Q(user=user), Q(event=event)
        )
        if request.user != event.host:
            return Response({'message': 'No access'}, status=status.HTTP_403_FORBIDDEN)

        if is_accepted == "1":
            event.going.add(user)
            event.pending.remove(user)
            tr.status = True
            tr.update()
            profile = Profile.objects.get(user=user)
            subject = f"Payment request accepted for {event.title}."
            message = f"Dear {user.username},\nYour payment request for event '{event.title}' in TourDay got accepted. Pack your bags and get ready to explore!\nKeep eye on https://tourday.team/event/{event.id}\nBest Regards\nTourDay Team"
            async_send_mail(subject, message,
                            EMAIL_HOST_USER, user.email)
            return Response({"message": "Transaction accepted"}, status=status.HTTP_202_ACCEPTED)
        elif is_accepted == "0":
            event.pending.remove(user)
            tr.delete()
            subject = f"Payment request denied for {event.title}."
            message = f"Dear {user.username},\nYour payment request for event '{event.title}' in TourDay got denied. Kindly check your transaction number and try again.\nBest Regards\nTourDay Team"
            async_send_mail(subject, message,
                            EMAIL_HOST_USER, user.email)
            return Response({"message": "Transaction isn't accepted"}, status=status.HTTP_200_OK)
Example #8
0
def resetPasswordView(request, slug):
    try:
        user = User.objects.get(username=slug)
    except:
        return HttpResponse("404 Not Found")

    if request.method == "POST":
        code = request.POST.get('code')
        password1 = request.POST.get('password1')
        password2 = request.POST.get('password2')
        if code != "" and password1 != "" and password1 == password2 and len(
                password1) > 7:
            try:
                code_obj = ResetCode.objects.get(user=user)
                if get_hash(code) == code_obj.code:
                    user.set_password(password1)
                    user.save()
                    code_obj.delete()
                    subject = "Success! Password Changed | TourDay"
                    message = f"Hi {user.username},\nSuccess! Your Password has been changed!\n\nIf you didn't changed your password, then your account is at risk. Contact TourDay Team as soon as possible.\n\nThanks,\nTourDay Team"
                    async_send_mail(subject, message, EMAIL_HOST_USER,
                                    user.email)
                    user = authenticate(username=slug, password=password1)
                    if user is not None:
                        login(request, user)
                        # Password changed
                        return JsonResponse({'status': 200})
                    else:
                        raise ValueError

                else:
                    raise ValueError
            except:
                return JsonResponse({'status': 404})  # bad request

        else:
            return JsonResponse({'status': 400})  # bad request
    return render(request, '_auth/reset_password.html', {'slug': slug})
Example #9
0
def order_details(request, id):

    profile = get_object_or_404(Profile, user=request.user)

    order = Order.objects.get(id=id)
    order_item = OrderItem.objects.filter(order=order).order_by('quantity')
    shipping = ShippingAddress.objects.get(order=order)
    paymt = payment.objects.get(order=order)

    if request.method == 'POST' and 'order_submit' in request.POST:
        order.status = request.POST.get('payment_mtd')
        order.save()

        #email here
        email = order.customer.email

        if order.status == "Approved":
            subject = f"Your order has been approved. Please match again."
            message = f"Dear {profile.name}, \nYour order has been approved. Your order ID is {order.order_id}.\n\nWe have started working on your order. We will deliver your product very quickly.\nHowever, for some reason, despite our sincere desire and effort, we are not able to deliver the product faster. Because of the weekly closure of product collection locations, it may take some time for us to collect products out of stock. Even then we will try our best to deliver your order as soon as possible.\nWe hope that your ordered products will be delivered to you soon.\n\nGood luck always.\nTourDay Team."
            async_send_mail(subject, message, EMAIL_HOST_USER, email)

        if order.status == "Shipped":

            subject = f"Your order has been shipped.Take a look at the details"
            message = f"Dear {profile.name}, \nYour order (ID {order.order_id}) has been prepared by us and sent to the delivery team. Your parcel is ready with utmost importance. Hope to receive your parcel very soon.We hope to receive your parcel in a few days. In case of delay in delivery, please contact [email protected] via email.\n\nWe hope that your ordered products will be delivered to you soon.\n\nGood luck always.\nTourDay Team."
            async_send_mail(subject, message, EMAIL_HOST_USER, email)

        return redirect('all_order')

    context = {
        'order': order,
        'order_item': order_item,
        'shipping': shipping,
        'paymt': paymt,
    }

    return render(request, 'ecommerce/stuff_page/order_details.html', context)
Example #10
0
def forgetPasswordView(request):
    if request.method == "POST":
        username_email = request.POST.get('username_email')
        try:
            user = User.objects.get(
                Q(username=username_email) | Q(email=username_email))
            if ResetCode.objects.filter(user=user).count() != 0:
                code_obj = ResetCode.objects.get(user=user)
            else:
                code_obj = ResetCode()
            code_obj.user = user
            code = get_code()
            code_obj.code = get_hash(code)
            code_obj.save()
            subject = "Reset Password | TourDay"
            message = f"Hi {user.username},\nYou recently requested to reset your password for your TourDay account.\n\nCODE: {code}\n\nGoto https://tourday.team/reset-password/{user.username} and use this code to reset your password.\n\nIf you didn't request a password reset, please ignore this email.\n\nThanks,\nTourDay Team"
            async_send_mail(subject, message, EMAIL_HOST_USER, user.email)

            return JsonResponse({"status": 200, "slug": user.username})
        except:
            return JsonResponse({
                "status": 404,
            })
    return render(request, "_auth/forget_password.html")
Example #11
0
def add_info(request, param):
    if request.method == "POST":
        if 'data' in request.POST:
            data = request.POST.get('data').strip()
        profile = Profile.objects.get(user=request.user)
        if param == "name" and data != "":
            if profile.name != data:
                profile.name = data
                profile.save()
            return JsonResponse({
                "status": 201,
            })
        elif param == "email" and data != "":
            try:
                if profile.email != data:
                    old_email = profile.email
                    profile.email = data
                    profile.save()
                    subject = "Success! Email Changed | TourDay"
                    message = f"Hi {request.user.username},\nSuccess! Your Email has been changed!\n\nYour new email address is {profile.email}.\n\nIf you didn't changed your email, then your account is at risk. Contact TourDay Team as soon as possible.\n\nThanks,\nTourDay Team"
                    async_send_mail(subject, message,
                                    EMAIL_HOST_USER, old_email)

                    subject = "Success! Email Added | TourDay"
                    message = f"Hi {request.user.username},\nSuccess! This email has been added as your default email for TourDay.\n\nIf you received this email but didn't register for an TourDay account, something's gone wrong, Reply to this email to de-activate and close this account.\n\nThanks,\nTourDay Team"
                    async_send_mail(subject, message,
                                    EMAIL_HOST_USER, profile.email)
                return JsonResponse({
                    "status": 201,
                })
            except:
                return JsonResponse({
                    "status": 400,
                })

        elif param == "fb" and data != "":
            if profile.fb != data:
                profile.fb = data
                profile.save()
            return JsonResponse({
                "status": 201,
            })
        elif param == "insta" and data != "":
            if profile.insta != data:
                profile.insta = data
                profile.save()
            return JsonResponse({
                "status": 201,
            })

        elif param == "password" and data != "":
            user = request.user
            user.set_password(data)
            user.save()
            login(request, user)
            subject = "Success! Password Changed | TourDay"
            message = f"Hi {user.username},\nSuccess! Your Password has been changed!\n\nIf you didn't changed your password, then your account is at risk. Contact TourDay Team as soon as possible.\n\nThanks,\nTourDay Team"
            async_send_mail(subject, message,
                            EMAIL_HOST_USER, request.user.email)
            return JsonResponse({
                "status": 201,
            })

        elif param == "bio" and data != "":
            if profile.bio != data:
                profile.bio = data
                profile.save()
            return JsonResponse({
                "status": 201,
            })

        elif param == "city" and data != "":
            if profile.city != data:
                profile.city = data
                profile.save()
            return JsonResponse({
                "status": 201,
            })

        elif param == "picture":
            image_data = request.POST.get("picture")
            format, imgstr = image_data.split(';base64,')
            print("format", format)
            ext = format.split('/')[-1]
            data = ContentFile(base64.b64decode(imgstr))
            file_name = "'myphoto." + ext
            profile.picture.save(file_name, data, save=True)

            return JsonResponse({
                "status": 201,
                "new_img": profile.picture.url,

            })
        else:
            return JsonResponse({}, status=404)
Example #12
0
def checkout(request):

    data = cartData(request)

    product_type = Product_type.objects.all().order_by('-id')

    cartItems = data['cartItems']
    order = data['order']
    items = data['items']

    profile = get_object_or_404(Profile, user=request.user)

    if order['get_cart_total'] == 0 or order['get_cart_items'] == 0:
        return redirect('cart')

    if profile == None:
        return redirect(f'/u/request.user')

    criterion1 = Q(customer__exact=request.user)
    criterion2 = Q(status__exact="Pending")
    pending_check = bool(Order.objects.filter(criterion1 & criterion2))

    if pending_check:
        url = '/shop/'
        resp_body = '<script>alert("Your already have a pending items!");\
                    window.location="%s"</script>' % url
        return HttpResponse(resp_body)

    else:
        if request.method == 'POST' and 'checkout' in request.POST:

            random_order_id = int(random_with_N_digits(8))

            if Order.objects.filter(order_id=random_order_id).exists():
                random_order_id = random_order_id + 1

            ord = Order.objects.create(customer=request.user,
                                       total_money=order['get_cart_total'],
                                       total_items=order['get_cart_items'],
                                       order_id=random_order_id)
            ord.save()

            for item in items:
                product = Product.objects.get(id=item['product']['id'])

                orders = Order.objects.filter(customer=request.user)
                for order in orders:
                    if order.status == 'Pending':
                        order_item = OrderItem.objects.create(
                            order=order,
                            product=product,
                            quantity=item['quantity'])
                        order_item.save()

            shipping = ShippingAddress()

            order = Order.objects.get(order_id=random_order_id)

            shipping.order = order
            shipping.customer = request.user
            shipping.PhoneNo = request.POST.get('phone').strip()
            shipping.allPhoneNo = request.POST.get('al_phone').strip()
            shipping.address = request.POST.get('address').strip()
            shipping.city = request.POST.get('city').strip()
            shipping.state = request.POST.get('state').strip()
            shipping.zipcode = request.POST.get('zipcode').strip()
            shipping.save()

            pay = payment()

            pay.customer = request.user
            pay.order = order
            pay.method = request.POST.get('colorCheckbox')
            if request.POST.get('payment_mtd') == 'checked':
                pay.payment_method = None
            else:
                pay.payment_method = request.POST.get('payment_mtd')
            pay.PhoneNo = request.POST.get('pay_phone_no')
            pay.trxId = request.POST.get('trxid')
            pay.save()

            #email here
            email = request.user.email
            subject = "We've received your order, check to see if everything is OK before confirming"
            message = f"Dear {profile.name},\nWe've received your order. Order ID {ord.order_id}. You have ordered a total of {ord.total_items} products which cost BDT. {ord.total_money}. \n\n\nCongratulations on your prudence in ordering products online. With this decision you are saving your precious few hours which would have been spent on street jams, shopping in stores. We know the value of your time. So we will try to deliver the products to you as soon as possible. Our work on your order will start right now. We will approve your order shortly. You will receive a confirmation message via email/phone. We will then provide the courier service to get your parcel ready and sent as soon as possible and at the same time confirm you via email. So check the email inbox to stay updated about your order status.\n\nGood luck always,\nTourDay Team!"
            async_send_mail(subject, message, EMAIL_HOST_USER, email)

            return redirect('checkout_message')

    shipping_add = ShippingAddress.objects.all()

    shipping_check = False
    shipping_check = ShippingAddress.objects.filter(
        customer=request.user).order_by('-id').exists()

    if shipping_check:
        shipping_add = ShippingAddress.objects.filter(
            customer=request.user).order_by('-id')[0]

    context = {
        'items': items,
        'order': order,
        'cartItems': cartItems,
        'profile': profile,
        'product_type': product_type,
        'shipping_check': shipping_check,
        'shipping_add': shipping_add,
    }
    return render(request, 'ecommerce/checkout.html', context)