def _add_order_impl(self, customer_id, product_ids, attributes, prices, user, discount_id, campaign_id, incl_tax=True): #pylint: disable-msg=R0913 """ KB: [2013-02-20]: attributes = [{quantity : 0, product : <Product...>}, {...}] """ cust = Customer.load(customer_id) self.forbid_if(not cust or cust.campaign.company.enterprise_id != self.enterprise_id) cart = Cart() campaign_id = campaign_id if campaign_id else cust.campaign_id cart.discount_id = discount_id for pid in product_ids.keys(): quantity = product_ids[pid] price = prices[pid] if prices and pid in prices else None attrs = {} for attr in [attr['attribute_product'] for attr in attributes.values() if str(attr['parent_product'].product_id) == pid]: attrs[attr.product_id] = { 'quantity' : 0, 'product' : attr} cart.add_item(product=Product.load(pid), campaign=cust.campaign, quantity=quantity, attributes=attrs, base_price=price) order = cust.add_order(cart, user, self.enterprise_id, cust.campaign, incl_tax=incl_tax) order.flush() return order.order_id