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.

98 lines
3.0 KiB

  1. # Copyright 2020 CorporateHub (https://corporatehub.eu)
  2. # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
  3. from openupgradelib import openupgrade
  4. @openupgrade.migrate()
  5. def migrate(env, version):
  6. openupgrade.logged_query(
  7. env.cr,
  8. """
  9. WITH _mappings AS (
  10. SELECT
  11. m.id,
  12. l.field_to_assign,
  13. l.name,
  14. l.date_format
  15. FROM
  16. account_bank_statement_import_map AS m
  17. RIGHT OUTER JOIN (
  18. SELECT
  19. *,
  20. ROW_NUMBER() OVER (
  21. PARTITION BY map_parent_id, field_to_assign
  22. ORDER BY id ASC
  23. ) AS row_number
  24. FROM account_bank_statement_import_map_line
  25. WHERE field_to_assign IS NOT NULL
  26. ) AS l ON m.id = l.map_parent_id AND l.row_number = 1
  27. )
  28. INSERT INTO account_bank_statement_import_sheet_mapping (
  29. name,
  30. float_thousands_sep,
  31. float_decimal_sep,
  32. file_encoding,
  33. delimiter,
  34. quotechar,
  35. timestamp_format,
  36. timestamp_column,
  37. amount_column,
  38. original_currency_column,
  39. original_amount_column,
  40. description_column,
  41. reference_column,
  42. notes_column,
  43. partner_name_column,
  44. bank_account_column
  45. )
  46. SELECT
  47. m.name,
  48. m.float_thousands_sep,
  49. m.float_decimal_sep,
  50. m.file_encoding,
  51. (
  52. CASE
  53. WHEN m.delimiter='.' THEN 'dot'
  54. WHEN m.delimiter=',' THEN 'comma'
  55. WHEN m.delimiter=';' THEN 'semicolon'
  56. WHEN m.delimiter='' THEN 'n/a'
  57. WHEN m.delimiter='\t' THEN 'tab'
  58. WHEN m.delimiter=' ' THEN 'space'
  59. ELSE 'n/a'
  60. END
  61. ) AS delimiter,
  62. m.quotechar,
  63. COALESCE(_date.date_format, '%m/%d/%Y') AS timestamp_format,
  64. COALESCE(_date.name, 'Date') AS timestamp_column,
  65. COALESCE(_amount.name, 'Amount') AS amount_column,
  66. _o_currency.name AS original_currency_column,
  67. _o_amount.name AS original_amount_column,
  68. _description.name AS description_column,
  69. _ref.name AS reference_column,
  70. _notes.name AS notes_column,
  71. _p_name.name AS partner_name_column,
  72. _bank_acc.name AS bank_account_column
  73. FROM
  74. account_bank_statement_import_map AS m
  75. LEFT JOIN _mappings AS _date
  76. ON m.id = _date.id AND _date.field_to_assign = 'date'
  77. LEFT JOIN _mappings AS _description
  78. ON m.id = _description.id AND _description.field_to_assign = 'name'
  79. LEFT JOIN _mappings AS _o_currency
  80. ON m.id = _o_currency.id AND _o_currency.field_to_assign = 'currency'
  81. LEFT JOIN _mappings AS _amount
  82. ON m.id = _amount.id AND _amount.field_to_assign = 'amount'
  83. LEFT JOIN _mappings AS _o_amount
  84. ON m.id = _o_amount.id AND _o_amount.field_to_assign = 'amount_currency'
  85. LEFT JOIN _mappings AS _ref
  86. ON m.id = _ref.id AND _ref.field_to_assign = 'ref'
  87. LEFT JOIN _mappings AS _notes
  88. ON m.id = _notes.id AND _notes.field_to_assign = 'note'
  89. LEFT JOIN _mappings AS _p_name
  90. ON m.id = _p_name.id AND _p_name.field_to_assign = 'partner_name'
  91. LEFT JOIN _mappings AS _bank_acc
  92. ON m.id = _bank_acc.id AND _bank_acc.field_to_assign = 'account_number';
  93. """
  94. )