예제 #1
0
    def post(self, request):
        company = request.data.get("companyId")
        address = request.data.get("addressId")
        payment_method = request.data.get("paymentMethod")
        retry_in_local_request = request.data.get("retryInLocal")
        total = request.data.get("total")
        items = request.data.get("items")
        if payment_method is None \
                or total is None or items is None:
            return Response({'message': 'Some Atribute is not Found'},
                            status=400)
        client = Client.objects.get(user=self.request.user)
        company = Company.objects.get(pk=company)

        if not company.available_now:
            return Response({'state': "Cancelado", 'responseCode': 400})

        order = Order()
        order.id_company = company
        order.state = State.objects.get(pk=1)
        order.retry_in_local = retry_in_local_request
        if not retry_in_local_request:
            order.address = AddressSaved.objects.get(pk=address)
        order.client = client
        order.payment_method = PaymentMethod.objects.get(
            description=payment_method)
        order.total = int(total)
        order.save()

        for item in items:
            detail_order = DetailOrder()
            detail_order.order = order
            detail_order.product = Products.objects.get(pk=item.get('id'))
            detail_order.quantity = item.get('quantity')
            detail_order.save()

        response = {
            'dateCreated':
            formats.date_format(timezone.localtime(order.date), "d/m/Y H:i"),
            'orderId':
            order.pk,
            'state':
            order.state.description,
            'responseCode':
            200
        }
        title = "Hay un nuevo pedido Pendiente"
        text = "{} esta esperando a que lo confirmes".format(
            client.user.first_name)
        send_notification_to_seller(order, text, title)
        return Response(response)
    def post(self, request):
        data = request.data
        link = Link.objects.filter(code=data['code']).first()

        if not link:
            raise exceptions.APIException('Invalid code!')
        try:
            order = Order()
            order.code = link.code
            order.user_id = link.user.id
            order.ambassador_email = link.user.email
            order.first_name = data['first_name']
            order.last_name = data['last_name']
            order.email = data['email']
            order.address = data['address']
            order.country = data['country']
            order.city = data['city']
            order.zip = data['zip']
            order.save()

            line_items = []

            for item in data['products']:
                product = Product.objects.filter(pk=item['product_id']).first()
                quantity = decimal.Decimal(item['quantity'])

                order_item = OrderItem()
                order_item.order = order
                order_item.product_title = product.title
                order_item.price = product.price
                order_item.quantity = quantity
                order_item.ambassador_revenue = decimal.Decimal(.1) * product.price * quantity
                order_item.admin_revenue = decimal.Decimal(.9) * product.price * quantity
                order_item.save()

                line_items.append({
                    'name': product.title,
                    'description': product.description,
                    'images': [
                        product.image
                    ],
                    'amount': int(100 * product.price),
                    'currency': 'usd',
                    'quantity': quantity
                })

            stripe.api_key = 'sk_test_51H0wSsFHUJ5mamKOVQx6M8kihCIxpBk6DzOhrf4RrpEgqh2bfpI7vbsVu2j5BT0KditccHBnepG33QudcrtBUHfv00Bbw1XXjL'

            source = stripe.checkout.Session.create(
                success_url='http://localhost:5000/success?source={CHECKOUT_SESSION_ID}',
                cancel_url='http://localhost:5000/error',
                payment_method_types=['card'],
                line_items=line_items
            )

            order.transaction_id = source['id']
            order.save()

            return Response(source)
        except Exception:
            transaction.rollback()

        return Response({
            'message': "Error occurred"
        })
예제 #3
0
    def post(self, request):
        data = request.data
        link = Link.objects.filter(code=data['code']).first()
        if not link:
            raise exceptions.APIException('Invalid code!')

        try:
            order = Order()  # creo ordine
            # DATI PRESI DAL LINK (il carrello)
            order.code = link.code
            order.user_id = link.user.id
            order.ambassador_email = link.user.email
            # ===========================
            # DATI PRESI DALLA RICHIESTA POST (dal front-end)
            order.first_name = data['first_name']
            order.last_name = data['last_name']
            order.email = data['email']
            order.address = data['address']
            order.country = data['country']
            order.city = data['city']
            order.zip = data['zip']
            # salvo su db ma nella trnsazione
            order.save()

            # preparo lista di items dell'ordine CON I DATI -  lista di oggetti json
            line_items = []
            for item in data['products']:
                product = Product.objects.filter(pk=item['product_id']).first()
                quantity = decimal.Decimal(item['quantity'])

                order_item = OrderItem()  # creo item
                order_item.order = order
                order_item.product_title = product.title
                order_item.price = product.price
                order_item.quantity = quantity
                order_item.ambassador_revenue = decimal.Decimal(.1) * product.price * quantity
                order_item.admin_revenue = decimal.Decimal(.9) * product.price * quantity
                order_item.save()  # SALVO l'item dell'ordine

                line_items.append({
                    'name': product.title,
                    'description': product.description,
                    'images': [
                        product.image
                    ],
                    'amount': int(100 * product.price), #in centesimi di dollaro (per stripe)
                    'currency': 'usd',
                    'quantity': quantity
                })
            stripe.verify_ssl_certs = False
            stripe.api_key = "sk_test_B9N7bDJ1lEt8ey2GZ72qCCor"
            source = stripe.checkout.Session.create(
                success_url='http://localhost:5000/success?source={CHECKOUT_SESSION_ID}', #URL DEL FRONTEND
                cancel_url='http://localhost:5000/error',
                payment_method_types=['card'],
                line_items=line_items
            )
            order.transaction_id = source['id'] #id della transazione di stripe
            order.save()

            return Response(source)
        except Exception:
            transaction.rollback()
            return Response({
                'message': "Error occurred"
            })