Пример #1
0
    def handle(self, *args, **options):
        s = Addresess()
        s.autor = User.objects.get(id=1)
        s.city = "Montreal"
        s.country = "CA"
        s.zip_code = "2003"
        s.first_name = "mike"
        s.last_name = "thonson"
        s.address_line_1 = "montreal canada"
        s.address_line_2 = "Canada"
        s.address_type = "shipping"
        s.save()

        b = Addresess()
        b.autor = User.objects.get(id=1)
        b.city = "Montreal"
        b.country = "CA"
        b.zip_code = "2003"
        b.first_name = "mike"
        b.last_name = "thonson"
        b.address_line_1 = "montreal canada"
        b.address_line_2 = "Canada"
        b.address_type = "billing"
        b.save()

        p = PaymentMethod()
        p.amount = 100.00
        p.currency = "USD"
        p.payment_method = "paypal"
        p.save()

        pf = PaymentMethodFields()
        pf.key = "first_name"
        pf.value = "mike"
        pf.payment = p
        pf.save()

        pf = PaymentMethodFields()
        pf.key = "last_name"
        pf.value = "thonson"
        pf.payment = p
        pf.save()

        pf = PaymentMethodFields()
        pf.key = "city"
        pf.value = "FL"
        pf.payment = p
        pf.save()

        pf = PaymentMethodFields()
        pf.key = "country"
        pf.value = "US"
        pf.payment = p
        pf.save()

        pf = PaymentMethodFields()
        pf.key = "email"
        pf.value = "*****@*****.**"
        pf.payment = p
        pf.save()

        for o in range(1, 100):
            orders = Orders()
            orders.status = "approved"
            orders.autor = User.objects.get(id=1)
            orders.billing_addresss = b
            orders.shipping_addresss = b
            orders.payment_method = p
            orders.save()
            item = OrderShippingItem()
            item.order = orders
            item.product = PostItem.objects.get(id=1)
            item.price = 1.00
            item.qty = 15
            item.save()

        pass
Пример #2
0
    def handle(self, *args, **options):

        microsoft_customers = '/tmp/customers.json'

        migration_csvs = os.path.join(settings.BASE_DIR, 'migrations')
        order_csv = os.path.join(migration_csvs, 'orders.csv')

        microsoft_customers = '/tmp/customers.json'
        existing_microsoft_domains = os.path.join(migration_csvs,
                                                  'microsoft_domains.csv')

        m = MicrosoftBase()
        headers = m.getAccessHeaders()
        """headers = {
            'Authorization': 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCIsImtpZCI6InowMzl6ZHNGdWl6cEJmQlZLMVRuMjVRSFlPMCJ9.eyJhdWQiOiJodHRwczovL2dyYXBoLndpbmRvd3MubmV0IiwiaXNzIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvN2MyNjFhMTktM2VmZS00ZTZjLTg5ZGEtZDBlNmVhOTc0MzZkLyIsImlhdCI6MTQ5NTA2Nzc5NSwibmJmIjoxNDk1MDY3Nzk1LCJleHAiOjE0OTUwNzE2OTUsImFpbyI6IlkyWmdZT0N1MVh0NVdlS2Q0Y2RKTHNhRyszNGxBQUE9IiwiYXBwaWQiOiI5MzFhYTEzNy1mOGQ4LTQ3ZWMtYjZmNS04Y2ZlNzQ5ZWEyOGEiLCJhcHBpZGFjciI6IjEiLCJpZHAiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC83YzI2MWExOS0zZWZlLTRlNmMtODlkYS1kMGU2ZWE5NzQzNmQvIiwib2lkIjoiODk5YTg4NTUtMWU0Mi00OTVkLThlOTEtOGI0ODFkYTc3M2JkIiwicm9sZXMiOlsiRGlyZWN0b3J5LlJlYWQuQWxsIiwiRGlyZWN0b3J5LlJlYWRXcml0ZS5BbGwiLCJEb21haW4uUmVhZFdyaXRlLkFsbCJdLCJzdWIiOiI4OTlhODg1NS0xZTQyLTQ5NWQtOGU5MS04YjQ4MWRhNzczYmQiLCJ0aWQiOiI3YzI2MWExOS0zZWZlLTRlNmMtODlkYS1kMGU2ZWE5NzQzNmQiLCJ1dGkiOiJLTFZHMThwNHBreTFnaGxCS1I4Q0FBIiwidmVyIjoiMS4wIn0.oW6di_XNbT_ZQWNXWvVp0UaavkGg_JEQany5jog5ETeM_xWaRhAdv2L20FIIQ0H82N4yiHKZGG0N_VuYxU6_-jB4uckv6Y3n2KJnt2tpNtdJlZgbf3mSgLyP4gkOTkMFdRBW_swYAvnU03ZyTCN-eQxoV3n5S0eQkkrm8nCIEA1wcpwo7IWwTswKxIyIq44yM1PxjeIvHBp6P7IBP4Y8rDBaz0dZOWN_J4lpDi2Kr9v0VsGeHbgfkV8Ra3pj8q3uSoGZfe5iZ5yI_mki8JELMFsoMkO02v8-WfUiy_Fq6vkJwGI-0DmgWkX0nwvMsTPjSmInWbYApxvbFnX8_hJvpw',
            'Accept': 'application/json',
            'Content-Type': 'application/json'
        }"""

        customers = json.load(open('/tmp/customer_map.json', 'r'))

        processed_orders = json.load(open('/tmp/orders.json', 'r'))

        with open(order_csv, 'r', encoding='latin1') as csvfile:
            for row in reversed(list(csv.reader(csvfile))):
                order_status = row[6]
                if order_status == 'Provision':
                    customer = None
                    try:
                        customer = Customers.objects.get(pk=customers[row[1]])
                    except:
                        print("Could not find Customer for %s" % (row[1], ))
                        continue

                    # Handle only msft for now
                    vendor = row[11]
                    if vendor == 'MICROSOFT' or vendor == 'Office':
                        if not row[17]:
                            print("Could not find order for order: %s " %
                                  (row[2], ))
                            continue

                        if row[17] == 'Microsoft Azure':
                            print("Azure Order: %s" % (row[2], ))
                            pass  # Skip for now
                        else:
                            if row[2] in processed_orders:
                                continue  # Skip as its already processed

                            print("Processing Order: %s" % (row[2], ))
                            cloud_account_object = CloudAccounts.objects.filter(
                                customer=customer,
                                type='MS',
                                vendor=VendorDetails.objects.get(pk=4))
                            if not cloud_account_object:
                                print(
                                    "Could not find Cloud Account for order: %s"
                                    % (row[2], ))
                                continue

                            cloud_account = cloud_account_object.first()
                            if 'tenant_id' not in cloud_account.details:
                                print(
                                    "Could not find domain name for Order: %s, Check with Redington"
                                    % (row[2], ))
                                continue

                            tenant_id = cloud_account.details['tenant_id']

                            url = str.format(
                                'https://api.partnercenter.microsoft.com/v1/customers/{}/subscriptions',
                                tenant_id)

                            subscriptions_out = requests.get(url,
                                                             headers=headers)

                            if subscriptions_out.status_code == 401:
                                # Reprocess
                                m = MicrosoftBase()
                                headers = m.getAccessHeaders()
                                subscriptions_out = requests.get(
                                    url, headers=headers)

                            if subscriptions_out.status_code == 200:
                                subscriptions = json.loads(
                                    codecs.decode(subscriptions_out.content,
                                                  'utf-8-sig'))
                                items = subscriptions['items']
                                subscription_available = False
                                for item in items:
                                    if item['offerName'] == row[17]:
                                        # Insert into Orders, ordersItems and subscriptions
                                        subscription_available = True

                                        # Check if Order placed, then insert into items
                                        existing_order = Orders.objects.filter(
                                            order_number=row[2])
                                        if existing_order:
                                            # Get Order Reference
                                            order_pk = existing_order[0].pk
                                        else:
                                            # Insert into Order
                                            order = Orders()
                                            order.order_number = row[2]
                                            order.pk = int(row[2][3:])
                                            order.status = 6
                                            order.partner = customer.partner
                                            order.customer = customer
                                            order.vendor = VendorDetails.objects.get(
                                                pk=4)
                                            order.total_cost = 0
                                            try:
                                                dateVal = datetime.datetime.strptime(
                                                    row[4], '%d/%m/%y')
                                            except:
                                                dateVal = datetime.datetime.strptime(
                                                    row[4], '%d/%m/%Y')
                                            order.created_at = dateVal
                                            order.created_by = PartnerUserDetails.objects.filter(
                                                partner=customer.partner
                                            )[0].user
                                            order.billing_type = item[
                                                'billingCycle']
                                            if order.billing_type == 'monthly':
                                                order.billing_completed = 0
                                            else:
                                                order.billing_completed = 1
                                            order.modified_by_id = PartnerUserDetails.objects.filter(
                                                partner=customer.partner
                                            )[0].user.pk

                                            order.save()
                                            order_pk = order.pk

                                        # Insert into Order Items
                                        orderItem = OrderItems()
                                        orderItem.order = Orders.objects.get(
                                            pk=order_pk)
                                        orderItem.product = Products.objects.get(
                                            pk=4)
                                        orderItem.quantity = item['quantity']
                                        orderItem.discount = 0  # Check with Redington
                                        orderItem.price_per_unit = row[15]
                                        orderItem.cost = float(
                                            item['quantity']) * float(row[15])
                                        try:
                                            dateVal = datetime.datetime.strptime(
                                                row[4], '%d/%m/%y')
                                        except:
                                            dateVal = datetime.datetime.strptime(
                                                row[4], '%d/%m/%Y')
                                        orderItem.created_at = dateVal
                                        orderItem.created_by = PartnerUserDetails.objects.filter(
                                            partner=customer.partner)[0].user
                                        orderItem.modified_by_id = PartnerUserDetails.objects.filter(
                                            partner=customer.partner
                                        )[0].user.pk
                                        orderItem.save()

                                        # Insert into Subscription
                                        subscription = Subscriptions()
                                        subscription.customer = customer
                                        subscription.order = Orders.objects.get(
                                            pk=order_pk)
                                        subscription.product = Products.objects.get(
                                            pk=4)
                                        subscription.subscription = item['id']
                                        subscription.creation_date = parse_datetime(
                                            item['creationDate'])
                                        subscription.ms_order_id = item[
                                            'orderId']
                                        subscription.name = item['offerName']
                                        subscription.quantity = item[
                                            'quantity']
                                        subscription.unit_type = item[
                                            'unitType']
                                        subscription.effective_start_date = parse_datetime(
                                            item['effectiveStartDate'])
                                        subscription.commitment_end_date = parse_datetime(
                                            item['commitmentEndDate'])
                                        subscription.auto_renew_enabled = item[
                                            'autoRenewEnabled']
                                        subscription.status = item['status']
                                        subscription.is_trial = item['isTrial']
                                        subscription.billing_type = item[
                                            'billingType']
                                        subscription.billing_cycle = item[
                                            'billingCycle']
                                        subscription.contract_type = item[
                                            'contractType']
                                        subscription.save()

                                        processed_orders[row[2]] = order_pk
                                        json.dump(
                                            processed_orders,
                                            open('/tmp/orders.json', 'w')
                                        )  # Write back for further process

                                if not subscription_available:
                                    pprint.pprint(
                                        "Couldnt find subscription: %s for: %s and order: %s"
                                        % (row[17], tenant_id, row[2]))
                                    continue
                            else:
                                pprint.pprint(
                                    "No subscriptions found for %s for order %s"
                                    % (tenant_id, row[2]))
                                continue
                    else:
                        # Handle other vendors  (Amazon)
                        pass
Пример #3
0
def process_mercadopago(request):
        
    if request.method == 'POST':
        pk = request.query_params.get("id")
         
        mp = mercadopago.MP(
            settings.MERCADOPAGO_CLIENT_ID, 
            settings.MERCADOPAGO_CLIENT_SECRET
        )
        paymentInfo = mp.get_payment (pk)
        
        if paymentInfo["status"] == 200:
            data = json.dumps(paymentInfo, indent=4)
          

            D.payment_method = "mercadopago"
            D.status = "Aprobbed"
            D.amount = 0.00
            D.currency = "VEF"

            for d in data['response']['items']:
                D.amount += d.unit_price

            D.save()

            pf = PaymentMethodFields()
            pf.payment = D
            pf.key = "first_name"
            pf.value = data['response']['payer']['first_name']
            pf.save()
            
            pf = PaymentMethodFields()
            pf.payment = D
            pf.key = "last_name"
            pf.value = data['response']['payer']['last_name']
            pf.save()
            pf = PaymentMethodFields()
            pf.payment = D
            pf.key = "email"
            pf.value = data['response']['payer']['email']
            pf.save()

            o = Orders()
            o.status = "pending"
            o.payment_method = pf
            
            try:
                o.shipping_addresss = Addresess.objects.get(id=int(paymentInfo['response']['external_reference']['shipping_addresss_id']))
            except Addresess.DoesNotExist:
                pass
            try:
                o.billing_addresss = Addresess.objects.get(id=int(paymentInfo['response']['external_reference']['billing_addresss_id']))
            except Addresess.DoesNotExist:
                pass
            try:
                o.autor = User.objects.get(id=int(paymentInfo['response']['external_reference']['user_id']))
            except User.DoesNotExist:
                pass
            
            o.save()

            cart = Cart(paymentInfo['response']['external_reference']['cart_id'])

            for c in cart.items():
                os = OrderShippingItem()
                os.order =o
                os.product = c.product
                os.variant_id = c.variant_id
                os.price = c.unit_price
                os.qty = c.quantity
                os.save()

#            payment_new.send(
#                sender=D.__class__, 
#                payment_method="MercadoPago",
#                cart_id=paymentInfo['response']['external_reference']['cart_id'],
#                user_id=paymentInfo['response']['external_reference']['user_id']
#            )

            

    return Response(status=status.HTTP_201_CREATED)
Пример #4
0
    def process_view(self, request, view_func, view_args, view_kwargs):
       
        
        current_url = resolve(request.path_info)
        url_name = current_url.url_name
        
        if url_name == 'payment_sucesss': 
            payer_id = request.GET.get('PayerID',None)
            payment_id = request.GET.get('paymentId',None)
            if payer_id is not None and payment_id is not None:
                paypalrestsdk.configure({
                    "mode": settings.PAYPAL_MODE,
                    "client_id": settings.PAYPAL_CLIENT_ID,
                    "client_secret": settings.PAYPAL_CLIENT_SECRET 
                })
                payment = paypalrestsdk.Payment.find(
                    payment_id
                )
               
                if payment.execute({"payer_id": payer_id}):
                    print("Payment execute successfully")
                    if len(payment.transactions) > 0:
                        params = parse_qs(payment.transactions[0].custom)
                        D = PaymentMethod()   
                        D.payment_method = "paypal"
                        D.status = "Aprobbed"
                        D.amount = payment.transactions[0].amount.total
                        D.currency = payment.transactions[0].amount.currency
                        D.save()

                        pf = PaymentMethodFields()
                        pf.payment = D
                        pf.key = "first_name"
                        pf.value = payment.payer.payer_info.first_name
                        pf.save()
                        
                        pf = PaymentMethodFields()
                        pf.payment = D
                        pf.key = "last_name"
                        pf.value = payment.payer.payer_info.last_name
                        pf.save()
                        pf = PaymentMethodFields()
                        pf.payment = D
                        pf.key = "email"
                        pf.value = payment.payer.payer_info.email


                        pf.save()
                            
                           
                        o = Orders()
                        o.status = "pending"
                        o.payment_method = pf


                        try:
                            o.shipping_addresss = Addresess.objects.get(id=int(params['shipping_addresss_id']))
                        except Addresess.DoesNotExist:
                            pass
                        try:
                            o.billing_addresss = Addresess.objects.get(id=int(params['billing_addresss_id']))
                        except Addresess.DoesNotExist:
                            pass
                        try:
                            o.autor = User.objects.get(id=int(params['user_id']))
                        except User.DoesNotExist:
                            pass
                        
                        o.save()

                        cart = Cart(params['cart_id'])

                        for c in cart.items():
                            os = OrderShippingItem()
                            os.order = o
                            os.product = c.product
                            os.variant_id = c.variant_id
                            os.price = c.unit_price
                            os.qty = c.quantity
                            os.save()
Пример #5
0
    def handle(self, *args, **options):
        migration_csvs = os.path.join(settings.BASE_DIR, 'migrations')

        existing_azure_accounts = os.path.join(migration_csvs,
                                               'existing_azure_accounts.csv')
        customers = json.load(open('/tmp/customer_map.json', 'r'))

        m = MicrosoftBase()
        headers = m.getAccessHeaders()

        with open(existing_azure_accounts, 'r', encoding='latin1') as csvfile:
            for row in list(csv.reader(csvfile)):
                print("Processing: %s" % (row[5]))
                customer_id = row[13]
                reference_number = None
                if not customer_id:
                    # insert into customers, cloudaccounts
                    customer = Customers()
                    partner = Partner.objects.filter(jba_code=row[11].strip())
                    if not partner:
                        print("Cannot find partner: %s" % (row[11]))
                        continue
                    else:
                        partner = partner[0]

                    customer.partner = partner
                    customer.company_name = row[5]
                    customer.address = row[5]
                    customer.save()

                    customer_contact1 = CustomerContacts()
                    customer_contact1.customer = customer
                    customer_contact1.name = ''
                    customer_contact1.save()

                    customer_contact2 = CustomerContacts()
                    customer_contact2.customer = customer
                    customer_contact2.name = ''
                    customer_contact2.save()
                    customer_id = customer.id
                elif not customer_id in customers:
                    print("Cannot find customers: %s" % (customer_id))
                    continue
                else:
                    customer = Customers.objects.get(pk=customers[customer_id])

                partner = PartnerUserDetails.objects.filter(
                    partner=customer.partner)
                orders = Orders()
                if not row[14]:
                    orders.order_number = generate_order_number()
                else:
                    orders.order_number = row[14]
                orders.status = 6
                orders.customer = customer
                orders.partner = customer.partner
                orders.vendor = VendorDetails.objects.get(pk=3)
                orders.total_cost = 0
                orders.created_by = partner[0].user
                orders.created_at = datetime.datetime.now()
                orders.modified_by = partner[0].user
                orders.billing_type = 'annually'
                orders.billing_completed = 0
                orders.save()
                reference_number = orders.id

                order_items = OrderItems()
                order_items.order = orders
                order_items.product = Products.objects.get(
                    product_sku_code='MS-AZR-0145P')
                order_items.quantity = 1
                order_items.discount = 0
                order_items.price_per_unit = 0
                order_items.cost = 0
                order_items.created_by = partner[0].user
                order_items.created_at = datetime.datetime.now()
                order_items.modified_by = partner[0].user
                order_items.save()

                cloud_account = CloudAccounts.objects.filter(
                    customer=customer,
                    type='MS',
                    vendor=VendorDetails.objects.get(pk=3))
                if not cloud_account.exists():
                    cloud_account = CloudAccounts()
                    cloud_account.customer = customer
                    cloud_account.vendor = VendorDetails.objects.get(pk=3)
                    cloud_account.type = 'MS'
                    cloud_account.active = True
                    partner = PartnerUserDetails.objects.filter(
                        partner=customer.partner)
                    cloud_account.created_by = partner[0].user
                    cloud_account.created_at = datetime.datetime.now()
                    cloud_account.modified_by = partner[0].user
                    discount = 10

                    reference_number = orders.order_number
                    if row[8]:
                        discount = row[8]
                    cloud_account.details = {
                        'active': True,
                        'tenant_id': row[16],
                        'domain_name': row[17],
                        'discount_status': 'Approved',
                        'standard_discount': discount,
                        'allow_order': 'Yes',
                        'reference_number': reference_number
                    }
                    cloud_account.save()

                # Insert into Subscriptions
                url = str.format(
                    'https://api.partnercenter.microsoft.com/v1/customers/{}/subscriptions/{}',
                    row[16], row[15])

                subscriptions_out = requests.get(url, headers=headers)

                if subscriptions_out.status_code == 401:
                    # Reprocess
                    m = MicrosoftBase()
                    headers = m.getAccessHeaders()
                    subscriptions_out = requests.get(url, headers=headers)

                if subscriptions_out.status_code == 200:
                    subscriptions = json.loads(
                        codecs.decode(subscriptions_out.content, 'utf-8-sig'))

                    # Insert into Subscription
                    subscription = Subscriptions()
                    subscription.customer = customer
                    subscription.order = orders
                    subscription.product = Products.objects.get(
                        product_sku_code='MS-AZR-0145P')
                    subscription.subscription = subscriptions['id']
                    subscription.creation_date = parse_datetime(
                        subscriptions['creationDate'])
                    subscription.ms_order_id = subscriptions['orderId']
                    subscription.name = subscriptions['offerName']
                    subscription.quantity = subscriptions['quantity']
                    subscription.unit_type = subscriptions['unitType']
                    subscription.effective_start_date = parse_datetime(
                        subscriptions['effectiveStartDate'])
                    subscription.commitment_end_date = parse_datetime(
                        subscriptions['commitmentEndDate'])
                    subscription.auto_renew_enabled = subscriptions[
                        'autoRenewEnabled']
                    subscription.status = subscriptions['status']
                    subscription.is_trial = subscriptions['isTrial']
                    subscription.billing_type = subscriptions['billingType']
                    subscription.billing_cycle = subscriptions['billingCycle']
                    subscription.contract_type = subscriptions['contractType']
                    subscription.save()