75 lines
1.9 KiB
Python
75 lines
1.9 KiB
Python
import locale
|
|
locale.setlocale(locale.LC_ALL, '')
|
|
|
|
data_object['subscription']
|
|
|
|
|
|
def convert_int_to_currency(price):
|
|
return locale.currency(int(price) / 100)
|
|
|
|
|
|
def convert_int_to_decimal(price):
|
|
return Decimal(str(price)[:-2] + '.' + str(price)[-2:])
|
|
|
|
|
|
def find_shipping_cost(data):
|
|
for x in data:
|
|
if x['description'] == 'Shipping':
|
|
return convert_int_to_currency(x['amount'])
|
|
break
|
|
else:
|
|
continue
|
|
|
|
|
|
def format_product(data, unit_price):
|
|
return {
|
|
'product': Product.objects.get(pk=data['pk']),
|
|
'quantity': data['quantity']
|
|
}
|
|
|
|
|
|
def deserialize_subscription(data):
|
|
sub_data = {}
|
|
|
|
for x in data:
|
|
if 'products_and_quantities' in x['metadata']:
|
|
sub_data['customer_note'] = f"Grind: {x['metadata']['grind']}"
|
|
sub_data['unit_price'] = convert_int_to_decimal(x['price']['unit_amount'])
|
|
sub_data['items'] = map(format_product, x['metadata']['products_and_quantities'])
|
|
sub_data['total_weight'] = x['metadata']['total_weight']
|
|
|
|
if x['description'] == 'Shipping':
|
|
sub_data['shipping_cost'] = convert_int_to_decimal(x['amount'])
|
|
continue
|
|
|
|
return sub_data
|
|
|
|
|
|
# shipping_cost = find_shipping_cost(data_object['lines']['data'])
|
|
# items = find_products(data_object['lines']['data'])
|
|
# unit_price = find_unit_price(data_object['lines']['data'])
|
|
|
|
sub_data = deserialize_subscription(data_object['lines']['data'])
|
|
|
|
order = Order.objects.create(
|
|
customer=,
|
|
status=,
|
|
billing_address=,
|
|
shipping_address=,
|
|
subtotal_amount=,
|
|
shipping_total=,
|
|
total_amount=data_object['total'],
|
|
weight=
|
|
)
|
|
|
|
order.lines.add(
|
|
[OrderLine(
|
|
product=item['product'],
|
|
quantity=item['quantity'],
|
|
customer_note=sub_data['customer_note'],
|
|
unit_price=sub_data['unit_price']
|
|
) for item in sub_data['items']]
|
|
)
|
|
|
|
order.save()
|