sale_order.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. # -*- encoding: utf-8 -*-
  2. from openerp import models, api, fields
  3. from pytz import timezone
  4. from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT, DEFAULT_SERVER_DATE_FORMAT
  5. from datetime import datetime,timedelta
  6. DATE_FORMAT = '%Y-%m-%d'
  7. class SaleOrder(models.Model):
  8. _inherit = 'sale.order'
  9. _name = 'sale.order'
  10. invoice_number = fields.Char('Numero de Factura')
  11. ''' Timezone '''
  12. def get_timezone(self):
  13. return timezone(self._context.get('tz') or self.env.user.tz)
  14. def _convert_str_to_datetime(self, date):
  15. return datetime.strptime(date,DEFAULT_SERVER_DATETIME_FORMAT)
  16. @api.multi
  17. def order_process_now(self):
  18. """
  19. Confirms order and creates and validates invoice, confirms pickings.
  20. """
  21. for sale in self:
  22. sale.action_button_confirm()
  23. inv_id = sale.action_invoice_create()
  24. if inv_id:
  25. inv = self.env['account.invoice'].browse(inv_id)
  26. date = self._convert_str_to_datetime(sale.date_order)
  27. date = date.strftime(DATE_FORMAT)
  28. inv.write({
  29. 'date_invoice':date,
  30. 'supplier_invoice_number':self.invoice_number
  31. })
  32. self.update_state()
  33. inv.signal_workflow('invoice_open')
  34. for picking in sale.picking_ids:
  35. picking.force_assign()
  36. picking.action_done()
  37. @api.multi
  38. def update_state(self):
  39. for order in self:
  40. order.write({'state': 'done'})
  41. return True
  42. class SaleOrderLine(models.Model):
  43. _inherit = 'sale.order.line'
  44. _name = 'sale.order.line'
  45. amount_total = fields.Float(compute='_calculate_total_sale_line',string='Total',default=0.0)
  46. @api.depends('price_unit','product_uom_qty')
  47. def _calculate_total_sale_line(self):
  48. for line in self:
  49. line.amount_total = line.product_uom_qty * line.price_unit