account_invoice.py 2.0 KB

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