Esempio n. 1
0
def business_sale(request, business_url=None):
    if request.method == "POST":
        if not request.user.is_anonymous:
            business = Business.objects.filter(url=business_url).first()
            if not business:
                return Response(status=status.HTTP_400_BAD_REQUEST)
            business_owner = business.user
            user = User.objects.get(id=request.user.id)
            client_user_query = ClientUser.objects.filter(user=user)
            for client_user in client_user_query:
                if client_user.client.id_user == business_owner:
                    client = client_user.client
            sale = Sale()
            sale.id_user = business_owner
            sale.id_client = client
            sale.date = request.data.get('date')
            sale.discount = request.data.get('discount')
            sale.subtotal = request.data.get('subtotal')
            sale.pay_type = request.data.get('pay_type')
            sale.total = request.data.get('total')
            sale.finished = request.data.get('finished')
            sale.save()
            products = request.data.get('products')
            for product_request in products:
                product = Product.objects.get(
                    id=product_request.get('id_product'))
                SaleProduct.objects.create(
                    id_sale=sale,
                    product=product,
                    quantity=product_request.get('quantity'))
            return Response(status=status.HTTP_200_OK)
        else:
            return Response(status=status.HTTP_401_UNAUTHORIZED)
    else:
        return Response(status=status.HTTP_404_NOT_FOUND)
Esempio n. 2
0
    def process_item(self, item, spider):

        # / SALE >>>>

        # extra if check up. shouldn't trigger because we already only scraping since th last sale.
        if Sale.objects.filter(sale_id=item['sale_id'],
                               product__sku=item['sku']).exists():
            print('Sale already exists in database')
            return item
        else:
            sale = Sale()
            sale.sale_id = item['sale_id']  # nooks sale id
            sale.date = item['date']
            sale.product = Product.objects.get(
                Q(sku=item['sku']) | Q(sku_oshawa=item['sku']))
            sale.quantity = int(item['quantity'])  # int bc. its string

            # slice bcause first char is $, float bc. its string
            sale.price_per_unit = float(item['price_per_unit'][1:])

            sale.price = sale.price_per_unit * sale.quantity

            # TODO make real model for channels
            sale.channel = 'Nooks'

            # attribute nooks payout period to the sale
            nooks_payout_schedule = NooksPayoutSchedule.objects.get(
                start_date__lte=sale.date, end_date__gte=sale.date)
            sale.nooks_payout_schedule = nooks_payout_schedule

            sale.save()

            # / TRANSACTION >>>>

            # record change in inventory because of sale
            transaction = Transaction()
            transaction.date = item['date']
            transaction.product = sale.product
            transaction.type = TransactionType.objects.get(
                id=1)  # id 1 is Sale

            # minus because it's sale
            transaction.quantity = -int(item['quantity'])
            transaction.location = Location.objects.get(name=item['location'])

            # because each location has different sku need to check which sku to query
            # all because one sale id can be multiple items.
            # TODO: redesign

            if item['location'] == "Oshawa Centre":  # for now only check oshawa
                transaction.sale = Sale.objects.get(
                    sale_id=item['sale_id'], product__sku_oshawa=item['sku'])
            else:
                transaction.sale = Sale.objects.get(sale_id=item['sale_id'],
                                                    product__sku=item['sku'])

            transaction.save()
            return item
Esempio n. 3
0
def charge(request, amount):
    if request.method == 'POST':
        if amount == '0':
            return redirect('sales:checkout')
        u = User.objects.get(username=request.user)
        sale = Sale()
        #stripe charge
        success, instance = sale.charge(amount, request.POST['stripeToken'],
                                        u.email)
        if not success:
            print(instance)
            return HttpResponse("Error reading card.")
        else:
            try:
                billing = Billing.objects.get(user=u)
            except Billing.DoesNotExist:
                billing = Billing(user=u)
            billing.address = request.POST['args[billing_address_line1]']
            billing.city = request.POST['args[billing_address_city]']
            billing.state = request.POST['args[billing_address_state]']
            billing.zipcode = request.POST['args[billing_address_zip]']
            billing.country = request.POST['args[billing_address_country]']
            billing.save()

            try:
                shipping = Shipping.objects.get(user=u)
            except Shipping.DoesNotExist:
                shipping = Shipping(user=u)

            shipping.address = request.POST['args[shipping_address_line1]']
            shipping.city = request.POST['args[shipping_address_city]']
            shipping.state = request.POST['args[shipping_address_state]']
            shipping.zipcode = request.POST['args[shipping_address_zip]']
            shipping.country = request.POST['args[shipping_address_country]']
            shipping.save()

            sale.date = timezone.now()
            sale.amount = amount
            sale.user = u
            sale.save()
            request.session['sale_id'] = sale.id

            #Send Confirmation email.
            subject = "Master Faster Confirmation Email."
            message = "Thank you for shopping with Master Faster. \
Your payment successfully went through.\n\nConfirmation number: %s\n\n\
Shipping Address is:\n\n%s\n%s, %s\n%s %s\n\nBilling Address:\n\n%s\n%s, %s\n%s %s\n\n\
You will be receiving your receipt shortly.\n\n\
Please email us at %s to correct any order detail errors." % (
                sale.charge_id, shipping.address, shipping.city,
                shipping.state, shipping.zipcode, shipping.country,
                billing.address, billing.city, billing.state, billing.zipcode,
                billing.country, settings.EMAIL_HOST_USER)
            from_email = settings.EMAIL_HOST_USER
            to_email = request.POST.get('emailAddress', '')
            send_email(subject, message, from_email, to_email)
            return HttpResponse('Successful Charge.')
    return HttpResponse("Invalid match.")
Esempio n. 4
0
 def create(self, validated_data):
     sale = Sale()
     sale.id_user = validated_data.get('id_user')
     sale.id_client = validated_data.get('id_client')
     sale.date = validated_data.get('date')
     sale.discount = validated_data.get('discount')
     sale.subtotal = validated_data.get('subtotal')
     sale.pay_type = validated_data.get('pay_type')
     sale.total = validated_data.get('total')
     sale.finished = validated_data.get('finished')
     sale.products = validated_data.get('products')
     sale.save()
     # Save every product in table SaleProduct
     for product in sale.products:
         sale_product = SaleProduct()
         sale_product.id_sale = sale
         sale_product.product = Product.objects.get(
             id=product['id_product'])
         sale_product.quantity = product['quantity']
         sale_product.save()
     return sale