@@ -58,19 +58,24 @@ def _create_from_cart_draft(self, draft: models.OrderFromCartDraft, id: str):
5858 cart_identifier = models .CartResourceIdentifier (id = draft .id )
5959
6060 cart_data = self ._storage .get_by_resource_identifier (cart_identifier )
61- cart = None
62- total_price = None
63- if cart_data :
64- cart : models .Cart = CartSchema ().load (cart_data )
65- total_price = copy .deepcopy (cart .total_price )
61+ if not cart_data :
62+ raise ValueError (f"Unknown cart { draft .id } " )
63+
64+ cart : models .Cart = CartSchema ().load (cart_data )
65+ total_price = copy .deepcopy (cart .total_price )
66+
67+ custom_line_items = [
68+ self ._create_custom_line_item_from_draft (line )
69+ for line in cart .custom_line_items
70+ ]
6671
6772 order = models .Order (
6873 id = id ,
6974 version = 1 ,
7075 created_at = datetime .datetime .now (datetime .timezone .utc ),
7176 last_modified_at = datetime .datetime .now (datetime .timezone .utc ),
7277 line_items = [],
73- custom_line_items = [] ,
78+ custom_line_items = custom_line_items ,
7479 total_price = total_price ,
7580 sync_info = [],
7681 last_message_sequence_number = 0 ,
@@ -83,13 +88,18 @@ def _create_from_cart_draft(self, draft: models.OrderFromCartDraft, id: str):
8388 return order
8489
8590 def _create_from_import_draft (self , draft : models .OrderImportDraft , id : str ):
91+ custom_line_items = [
92+ self ._create_custom_line_item_from_draft (line )
93+ for line in draft .custom_line_items
94+ ]
95+
8696 order = models .Order (
8797 id = id ,
8898 version = 1 ,
8999 created_at = datetime .datetime .now (datetime .timezone .utc ),
90100 last_modified_at = datetime .datetime .now (datetime .timezone .utc ),
91101 line_items = [],
92- custom_line_items = [] ,
102+ custom_line_items = custom_line_items ,
93103 total_price = money_to_typed (draft .total_price ),
94104 taxed_price = create_from_draft (draft .taxed_price ),
95105 sync_info = [],
@@ -99,9 +109,32 @@ def _create_from_import_draft(self, draft: models.OrderImportDraft, id: str):
99109 payment_state = draft .payment_state ,
100110 order_state = OrderState .OPEN ,
101111 origin = CartOrigin .CUSTOMER ,
112+ custom = create_from_draft (draft .custom ),
102113 )
103114 return order
104115
116+ def _create_custom_line_item_from_draft (self , draft : models .CustomLineItemDraft ):
117+ total_net_cents = draft .money .cent_amount * draft .quantity
118+ total_net = money_to_typed (
119+ models .Money (
120+ cent_amount = total_net_cents , currency_code = draft .money .currency_code
121+ )
122+ )
123+ return models .CustomLineItem (
124+ id = str (uuid .uuid4 ()),
125+ name = draft .name ,
126+ quantity = draft .quantity ,
127+ money = money_to_typed (draft .money ),
128+ total_price = total_net ,
129+ slug = draft .slug ,
130+ state = [],
131+ discounted_price_per_quantity = [],
132+ tax_category = draft .tax_category ,
133+ tax_rate = create_from_draft (draft .external_tax_rate ),
134+ custom = create_from_draft (draft .custom ),
135+ shipping_details = create_from_draft (draft .shipping_details ),
136+ )
137+
105138
106139def add_delivery ():
107140 def updater (self , obj , action ):
0 commit comments