from openerp import api, fields, models from openerp.exceptions import except_orm class AccountVoucher(models.Model): _inherit = 'account.voucher' @api.model def create_from_pos(self, values): # Activity 1: Create Sale Order sale_order_model = self.env['sale.order'] # sale_order_line_values = [ # [0, False, { # 'product_id': int(item['id']), # 'product_uom_qty': float(item['qty']), # 'price_unit': float(item['price']) # }] for item in values['cart_items']] # sale_order_values = { # 'partner_id': int(values['customer_id']), # 'order_line': sale_order_line_values, # 'picking_policy': 'direct' # } # sale_order_id = sale_order_model.create(sale_order_values) sale_order_id = 26 # Activity 2: Confirm Sale Order sale_order = sale_order_model.browse([sale_order_id]) # sale_order.write({ 'state': 'manual' }) # for sale_order_line in sale_order.order_line: # sale_order_line.write({ 'state': 'confirmed' }) # Activity 3: Create Invoice account_id = False decimal_precision = self.env['decimal.precision'].precision_get('Product Price') account_invoice_model = self.env['account.invoice'] for sale_order_line in sale_order.order_line: account_id = sale_order_line.product_id.property_account_income.id if not account_id: account_id = sale_order_line.product_id.categ_id.property_account_income_categ.id if not account_id: raise except_orm('Error', 'Es necesario denifir una cuenta de ingresos para este producto') uos_quantity = sale_order_line.product_uos_qty or 0.0 if sale_order_line.product_uos else sale_order_line.product_uom_qty uos_id = sale_order_line.product_uos.id if sale_order_line.product_uos else sale_order_line.product_uom.id fiscal_position = sale_order_line.order_id.fiscal_position or False subtotal = round(sale_order_line.price_unit * sale_order_line.product_uom_qty / uos_quantity, decimal_precision)