account_voucher.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. from openerp import api, fields, models
  2. from openerp.exceptions import except_orm
  3. class AccountVoucher(models.Model):
  4. _inherit = 'account.voucher'
  5. @api.model
  6. def create_from_pos(self, values):
  7. # Activity 1: Create Sale Order
  8. sale_order_model = self.env['sale.order']
  9. # sale_order_line_values = [
  10. # [0, False, {
  11. # 'product_id': int(item['id']),
  12. # 'product_uom_qty': float(item['qty']),
  13. # 'price_unit': float(item['price'])
  14. # }] for item in values['cart_items']]
  15. # sale_order_values = {
  16. # 'partner_id': int(values['customer_id']),
  17. # 'order_line': sale_order_line_values,
  18. # 'picking_policy': 'direct'
  19. # }
  20. # sale_order_id = sale_order_model.create(sale_order_values)
  21. sale_order_id = 26
  22. # Activity 2: Confirm Sale Order
  23. sale_order = sale_order_model.browse([sale_order_id])
  24. # sale_order.write({ 'state': 'manual' })
  25. # for sale_order_line in sale_order.order_line:
  26. # sale_order_line.write({ 'state': 'confirmed' })
  27. # Activity 3: Create Invoice
  28. account_id = False
  29. decimal_precision = self.env['decimal.precision'].precision_get('Product Price')
  30. account_invoice_model = self.env['account.invoice']
  31. for sale_order_line in sale_order.order_line:
  32. account_id = sale_order_line.product_id.property_account_income.id
  33. if not account_id:
  34. account_id = sale_order_line.product_id.categ_id.property_account_income_categ.id
  35. if not account_id:
  36. raise except_orm('Error', 'Es necesario denifir una cuenta de ingresos para este producto')
  37. uos_quantity = sale_order_line.product_uos_qty or 0.0 if sale_order_line.product_uos else sale_order_line.product_uom_qty
  38. uos_id = sale_order_line.product_uos.id if sale_order_line.product_uos else sale_order_line.product_uom.id
  39. fiscal_position = sale_order_line.order_id.fiscal_position or False
  40. subtotal = round(sale_order_line.price_unit * sale_order_line.product_uom_qty / uos_quantity, decimal_precision)