You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

100 lines
3.4 KiB

  1. # Copyright 2019-2020 Brainbean Apps (https://brainbeanapps.com)
  2. # Copyright 2019-2020 Dataplug (https://dataplug.io)
  3. # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
  4. import logging
  5. from odoo import models, fields, api, _
  6. _logger = logging.getLogger(__name__)
  7. class AccountJournal(models.Model):
  8. _inherit = 'account.journal'
  9. online_bank_statement_provider = fields.Selection(
  10. selection=lambda self: self.env[
  11. 'account.journal'
  12. ]._selection_online_bank_statement_provider(),
  13. )
  14. online_bank_statement_provider_id = fields.Many2one(
  15. string='Statement Provider',
  16. comodel_name='online.bank.statement.provider',
  17. ondelete='restrict',
  18. copy=False,
  19. )
  20. def __get_bank_statements_available_sources(self):
  21. result = super().__get_bank_statements_available_sources()
  22. result.append(('online', _('Online (OCA)')))
  23. return result
  24. @api.model
  25. def _selection_online_bank_statement_provider(self):
  26. return self.env[
  27. 'online.bank.statement.provider'
  28. ]._get_available_services() + [('dummy', 'Dummy')]
  29. @api.model
  30. def values_online_bank_statement_provider(self):
  31. res = self.env[
  32. 'online.bank.statement.provider'
  33. ]._get_available_services()
  34. if self.user_has_groups('base.group_no_one'):
  35. res += [('dummy', 'Dummy')]
  36. return res
  37. @api.multi
  38. def _update_online_bank_statement_provider_id(self):
  39. OnlineBankStatementProvider = (
  40. self.env['online.bank.statement.provider']
  41. )
  42. for journal in self.filtered('id'):
  43. provider_id = journal.online_bank_statement_provider_id
  44. if journal.bank_statements_source != 'online':
  45. journal.online_bank_statement_provider_id = False
  46. if provider_id:
  47. provider_id.unlink()
  48. continue
  49. if provider_id.service == journal.online_bank_statement_provider:
  50. continue
  51. journal.online_bank_statement_provider_id = False
  52. if provider_id:
  53. provider_id.unlink()
  54. journal.online_bank_statement_provider_id = (
  55. OnlineBankStatementProvider.create({
  56. 'journal_id': journal.id,
  57. 'service': journal.online_bank_statement_provider,
  58. })
  59. )
  60. @api.model
  61. def create(self, vals):
  62. rec = super().create(vals)
  63. if 'bank_statements_source' in vals \
  64. or 'online_bank_statement_provider' in vals:
  65. rec._update_online_bank_statement_provider_id()
  66. return rec
  67. @api.multi
  68. def write(self, vals):
  69. res = super().write(vals)
  70. if 'bank_statements_source' in vals \
  71. or 'online_bank_statement_provider' in vals:
  72. self._update_online_bank_statement_provider_id()
  73. return res
  74. @api.multi
  75. def action_online_bank_statements_pull_wizard(self):
  76. provider_ids = self.mapped('online_bank_statement_provider_id').ids
  77. return {
  78. 'name': _('Online Bank Statement Pull Wizard'),
  79. 'type': 'ir.actions.act_window',
  80. 'res_model': 'online.bank.statement.pull.wizard',
  81. 'views': [[False, 'form']],
  82. 'target': 'new',
  83. 'context': {
  84. 'default_provider_ids': [(6, False, provider_ids)],
  85. 'active_test': False,
  86. },
  87. }