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.

84 lines
2.8 KiB

  1. # Copyright 2019-2020 Brainbean Apps (https://brainbeanapps.com)
  2. # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
  3. from datetime import datetime, timedelta
  4. from dateutil.relativedelta import relativedelta
  5. from pytz import timezone
  6. from random import randrange
  7. from odoo import api, fields, models
  8. class OnlineBankStatementProviderDummy(models.Model):
  9. _inherit = 'online.bank.statement.provider'
  10. @api.multi
  11. def _obtain_statement_data(self, date_since, date_until):
  12. self.ensure_one()
  13. if self.service != 'dummy':
  14. return super()._obtain_statement_data(
  15. date_since,
  16. date_until,
  17. ) # pragma: no cover
  18. if self.env.context.get('crash', False):
  19. exception = self.env.context.get(
  20. 'exception',
  21. Exception('Expected')
  22. )
  23. raise exception
  24. line_step_options = self.env.context.get('step', {
  25. 'minutes': 5,
  26. })
  27. line_step = relativedelta(**line_step_options)
  28. expand_by = self.env.context.get('expand_by', 0)
  29. data_since = self.env.context.get('data_since', date_since)
  30. data_until = self.env.context.get('data_until', date_until)
  31. data_since -= expand_by * line_step
  32. data_until += expand_by * line_step
  33. balance_start = self.env.context.get(
  34. 'balance_start',
  35. randrange(-10000, 10000, 1) * 0.1
  36. )
  37. balance = balance_start
  38. tz = self.env.context.get('tz')
  39. if tz:
  40. tz = timezone(tz)
  41. timestamp_mode = self.env.context.get('timestamp_mode')
  42. lines = []
  43. date = data_since
  44. while date < data_until:
  45. amount = self.env.context.get(
  46. 'amount',
  47. randrange(-100, 100, 1) * 0.1
  48. )
  49. transaction_date = date.replace(tzinfo=tz)
  50. if timestamp_mode == 'date':
  51. transaction_date = transaction_date.date()
  52. elif timestamp_mode == 'str':
  53. transaction_date = fields.Datetime.to_string(transaction_date)
  54. lines.append({
  55. 'name': 'payment',
  56. 'amount': amount,
  57. 'date': transaction_date,
  58. 'unique_import_id': str(int(
  59. (date - datetime(1970, 1, 1)) / timedelta(seconds=1)
  60. )),
  61. 'partner_name': 'John Doe',
  62. 'account_number': 'XX00 0000 0000 0000',
  63. })
  64. balance += amount
  65. date += line_step
  66. balance_end = balance
  67. statement = {}
  68. if self.env.context.get('balance', True):
  69. statement.update({
  70. 'balance_start': balance_start,
  71. 'balance_end_real': balance_end,
  72. })
  73. return lines, statement