64 lines
2.1 KiB
Python
64 lines
2.1 KiB
Python
from decimal import Decimal
|
|
|
|
from shop.models import OrderLine, Product, Order, Customer
|
|
|
|
|
|
def create_order_line_for_product(product: Product, quantity: Decimal, order: Order):
|
|
price = product.prices.last()
|
|
base_total = round(price.price * quantity, 2)
|
|
tax_value = price.tax.value / Decimal("100")
|
|
taxes = round(base_total * tax_value, 2)
|
|
|
|
return OrderLine.objects.create(
|
|
order=order,
|
|
product=product,
|
|
quantity=quantity,
|
|
price=price.price,
|
|
base_total=base_total,
|
|
tax_value=tax_value,
|
|
taxes=taxes,
|
|
total=base_total + taxes,
|
|
)
|
|
|
|
|
|
def create_order(
|
|
customer: Customer,
|
|
billing_address: str,
|
|
billing_city: str,
|
|
billing_state: str,
|
|
billing_country: str,
|
|
billing_zip: str,
|
|
shipping_address: str = "",
|
|
shipping_city: str = "",
|
|
shipping_state: str = "",
|
|
shipping_country: str = "",
|
|
shipping_zip: str = "",
|
|
) -> Order:
|
|
billing_address = billing_address if billing_address else customer.address
|
|
billing_city = billing_city if billing_city else customer.city
|
|
billing_state = billing_state if billing_state else customer.state
|
|
billing_country = billing_country if billing_country else customer.country
|
|
billing_zip = billing_zip if billing_zip else customer.zip
|
|
|
|
shipping_address = shipping_address if shipping_address else billing_address
|
|
shipping_city = shipping_city if shipping_city else billing_city
|
|
shipping_state = shipping_state if shipping_state else billing_state
|
|
shipping_country = shipping_country if shipping_country else billing_country
|
|
shipping_zip = shipping_zip if shipping_zip else billing_zip
|
|
|
|
order = Order.objects.create(
|
|
customer=customer,
|
|
billing_address=billing_address,
|
|
billing_city=billing_city,
|
|
billing_state=billing_state,
|
|
billing_country=billing_country,
|
|
billing_zip=billing_zip,
|
|
shipping_address=shipping_address,
|
|
shipping_city=shipping_city,
|
|
shipping_state=shipping_state,
|
|
shipping_country=shipping_country,
|
|
shipping_zip=shipping_zip,
|
|
)
|
|
|
|
return order
|