account_analytic_account.py 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. # -*- coding: utf-8 -*-
  2. from dateutil.relativedelta import relativedelta
  3. from datetime import datetime
  4. import logging
  5. import time
  6. from openerp import models, fields, api
  7. from openerp.addons.decimal_precision import decimal_precision as dp
  8. class account_analytic_account(models.Model):
  9. _inherit = "account.analytic.account"
  10. recurring_date_due = fields.Date("Fecha de vencimiento")
  11. recurring_day = fields.Char("Día Vencimiento")
  12. recurring_total_amount = fields.Float(
  13. 'Monto',
  14. compute='_compute_recurring_total_amount',
  15. # we dont make storable so it is compatible with contract
  16. # discount
  17. # store=True,
  18. digits=dp.get_precision('Account'),
  19. )
  20. _defaults = {
  21. 'recurring_date_due': lambda *a: time.strftime('%Y-%m-%d')
  22. }
  23. @api.one
  24. @api.depends(
  25. 'recurring_invoice_line_ids.quantity',
  26. 'recurring_invoice_line_ids.price_unit',
  27. )
  28. def _compute_recurring_total_amount(self):
  29. self.recurring_total_amount = sum(
  30. self.recurring_invoice_line_ids.mapped('price_subtotal'))
  31. @api.multi
  32. def recurring_create_invoice(self):
  33. current_date = time.strftime('%Y-%m-%d')
  34. if(self.recurring_date_due, '<=', current_date):
  35. value = super(account_analytic_account, self).recurring_create_invoice()
  36. date_due=self.recurring_date_due
  37. for each in value:
  38. invoice = self.env['account.invoice'].search([('id','=',each)])
  39. invoice.write({'date_due': date_due})
  40. self.recurring_date_due = (datetime.strptime(self.recurring_date_due,'%Y-%m-%d') + relativedelta(months=1)).strftime('%Y-%m-%d')
  41. # self.recurring_next_date = (datetime.strptime(self.recurring_next_date,'%Y-%m-%d') + relativedelta(months=1)).strftime('%Y-%m-%d')
  42. return value
  43. else:
  44. raise Warning(_("Ya no puede generar cuotas para este contrato."))
  45. # value = super(
  46. # account_analytic_account,
  47. # self
  48. # ).recurring_create_invoice()
  49. # for each in value:
  50. # invoice = self.env['account.invoice'].browse(each)
  51. #
  52. # invoice.write({
  53. # 'date_due': self.recurring_date_due
  54. # })
  55. #
  56. # self.recurring_date_due = (
  57. # datetime.strptime(
  58. # self.recurring_date_due,
  59. # '%Y-%m-%d'
  60. # ) + relativedelta(months=1)
  61. # ).strftime('%Y-%m-%d')
  62. #
  63. # return value
  64. @api.model
  65. def recurring_create_invoice_giganet(self):
  66. value = super(account_analytic_account, self)._cron_recurring_create_invoice()
  67. for each in value:
  68. invoice = self.env['account.invoice'].search([('id','=',each)])
  69. contract = self.env['account.analytic.account'].search([('code','=',invoice.origin)])
  70. contract.recurring_date_due = (datetime.strptime(self.recurring_date_due,'%Y-%m-%d') + relativedelta(months=1)).strftime('%Y-%m-%d')
  71. # contract.recurring_next_date = (datetime.strptime(self.recurring_next_date,'%Y-%m-%d') + relativedelta(months=1)).strftime('%Y-%m-%d')
  72. self.env.cr.execute('update account_analytic_account set recurring_date_due = %s where id = %s', (contract.recurring_date_due, contract.id))
  73. self.env.cr.execute('update account_invoice set date_due = %s where id = %s', (date_due, invoice.id))
  74. return value