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)
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
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.")
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