account_invoice.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. # -*- coding: utf-8 -*-
  2. from openerp.http import request as r
  3. from openerp.tools import DEFAULT_SERVER_DATE_FORMAT
  4. from dateutil.parser import parse
  5. from dateutil.relativedelta import relativedelta as rd
  6. def create_invoice(supplier_id, cart_items, currency_id, payment_term_id=None, supplier_invoice_number=None):
  7. partner = r.env['res.partner'].browse(supplier_id)
  8. journal = r.env['account.journal'].search([('type', 'in', ['purchase']), ('company_id', '=', partner.company_id.id)])
  9. values = {
  10. 'name': '/',
  11. 'partner_id': partner.id,
  12. 'invoice_line': [[0, False, {
  13. 'name': line.get('name'),
  14. 'product_id': int(line.get('id')),
  15. 'quantity': float(line.get('quantity')),
  16. 'price_unit': float(line.get('price'))
  17. }] for line in cart_items],
  18. 'account_id': partner.property_account_payable.id,
  19. 'journal_id': journal.id,
  20. 'currency_id': currency_id,
  21. 'payment_term': payment_term_id,
  22. 'supplier_invoice_number': supplier_invoice_number,
  23. 'type': 'in_invoice'
  24. }
  25. return r.env['account.invoice'].create(values)
  26. def prepare_invoice(invoice_ids, currency_id, date_today):
  27. assert len(invoice_ids) == 1
  28. invoice = r.env['account.invoice'].browse(invoice_ids)
  29. date_due = parse(date_today) + rd(days=max(invoice.payment_term.line_ids.mapped(lambda x: x.days + x.days2)))
  30. invoice.write({
  31. 'currency_id': currency_id,
  32. 'date_invoice': date_today,
  33. 'date_due': date_due.strftime(DEFAULT_SERVER_DATE_FORMAT),
  34. 'state': 'open'
  35. })
  36. def validate_invoice(invoice_ids, type=None):
  37. assert len(invoice_ids) == 1
  38. invoice = r.env['account.invoice'].browse(invoice_ids)
  39. invoice.action_number()
  40. invoice.invoice_validate()
  41. if type == 'expense':
  42. name = 'GASTO' + invoice.name[invoice.name.index('/'):]
  43. invoice.write({
  44. 'number': name,
  45. 'internal_number': name
  46. })
  47. def close_invoice(invoice_ids):
  48. assert len(invoice_ids) == 1
  49. invoice = r.env['account.invoice'].browse(invoice_ids)
  50. if invoice.residual == 0:
  51. invoice.write({
  52. 'state': 'paid'
  53. })