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.

250 lines
7.5 KiB

  1. # Author: Damien Crier
  2. # Author: Julien Coux
  3. # Copyright 2016 Camptocamp SA
  4. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
  5. from odoo import _, models
  6. class JournalLedgerXslx(models.AbstractModel):
  7. _name = 'report.a_f_r.report_journal_ledger_xlsx'
  8. _inherit = 'report.account_financial_report.abstract_report_xlsx'
  9. def _get_report_name(self, report):
  10. report_name = _('Journal Ledger')
  11. return self._get_report_complete_name(report, report_name)
  12. def _get_report_columns(self, report):
  13. columns = [
  14. {
  15. 'header': _('Entry'),
  16. 'field': 'entry',
  17. 'width': 18
  18. },
  19. {
  20. 'header': _('Date'),
  21. 'field': 'date',
  22. 'width': 11
  23. },
  24. {
  25. 'header': _('Account'),
  26. 'field': 'account_code',
  27. 'width': 9
  28. },
  29. ]
  30. if report.with_account_name:
  31. columns.append({
  32. 'header': _('Account Name'),
  33. 'field': 'account',
  34. 'width': 15
  35. })
  36. columns += [
  37. {
  38. 'header': _('Partner'),
  39. 'field': 'partner',
  40. 'width': 25
  41. },
  42. {
  43. 'header': _('Ref - Label'),
  44. 'field': 'label',
  45. 'width': 40
  46. },
  47. {
  48. 'header': _('Taxes'),
  49. 'field': 'taxes_description',
  50. 'width': 11
  51. },
  52. {
  53. 'header': _('Debit'),
  54. 'field': 'debit',
  55. 'type': 'amount',
  56. 'width': 14,
  57. },
  58. {
  59. 'header': _('Credit'),
  60. 'field': 'credit',
  61. 'type': 'amount',
  62. 'width': 14
  63. }
  64. ]
  65. if report.foreign_currency:
  66. columns += [
  67. {
  68. 'header': _('Currency'),
  69. 'field': 'currency_id',
  70. 'type': 'many2one',
  71. 'width': 14
  72. },
  73. {
  74. 'header': _('Amount Currency'),
  75. 'field': 'amount_currency',
  76. 'type': 'amount',
  77. 'width': 18
  78. },
  79. ]
  80. columns_as_dict = {}
  81. for i, column in enumerate(columns):
  82. columns_as_dict[i] = column
  83. return columns_as_dict
  84. def _get_journal_tax_columns(self, report):
  85. return {
  86. 0: {
  87. 'header': _('Name'),
  88. 'field': 'tax_name',
  89. 'width': 35
  90. },
  91. 1: {
  92. 'header': _('Description'),
  93. 'field': 'tax_code',
  94. 'width': 18
  95. },
  96. 2: {
  97. 'header': _('Base Debit'),
  98. 'field': 'base_debit',
  99. 'type': 'amount',
  100. 'width': 14
  101. },
  102. 3: {
  103. 'header': _('Base Credit'),
  104. 'field': 'base_credit',
  105. 'type': 'amount',
  106. 'width': 14
  107. },
  108. 4: {
  109. 'header': _('Base Balance'),
  110. 'field': 'base_balance',
  111. 'type': 'amount',
  112. 'width': 14
  113. },
  114. 5: {
  115. 'header': _('Tax Debit'),
  116. 'field': 'tax_debit',
  117. 'type': 'amount',
  118. 'width': 14
  119. },
  120. 6: {
  121. 'header': _('Tax Credit'),
  122. 'field': 'tax_credit',
  123. 'type': 'amount',
  124. 'width': 14
  125. },
  126. 7: {
  127. 'header': _('Tax Balance'),
  128. 'field': 'tax_balance',
  129. 'type': 'amount',
  130. 'width': 14
  131. },
  132. }
  133. def _get_col_count_filter_name(self):
  134. return 2
  135. def _get_col_count_filter_value(self):
  136. return 3
  137. def _get_report_filters(self, report):
  138. target_label_by_value = {
  139. value: label
  140. for value, label in
  141. self.env['journal.ledger.report.wizard']._get_move_targets()
  142. }
  143. sort_option_label_by_value = {
  144. value: label
  145. for value, label in
  146. self.env['journal.ledger.report.wizard']._get_sort_options()
  147. }
  148. return [
  149. [
  150. _('Company'),
  151. report.company_id.name
  152. ],
  153. [
  154. _('Date range filter'),
  155. _('From: %s To: %s') % (report.date_from, report.date_to)
  156. ],
  157. [
  158. _('Target moves filter'),
  159. _("%s") % target_label_by_value[report.move_target],
  160. ],
  161. [
  162. _('Entries sorted by'),
  163. _("%s") % sort_option_label_by_value[report.sort_option],
  164. ],
  165. [
  166. _('Journals'),
  167. ', '.join([
  168. "%s - %s" % (report_journal.code, report_journal.name)
  169. for report_journal in report.report_journal_ledger_ids
  170. ])
  171. ]
  172. ]
  173. def _generate_report_content(self, workbook, report):
  174. group_option = report.group_option
  175. if group_option == 'journal':
  176. for report_journal in report.report_journal_ledger_ids:
  177. self._generate_journal_content(workbook, report_journal)
  178. elif group_option == 'none':
  179. self._generate_no_group_content(workbook, report)
  180. def _generate_no_group_content(self, workbook, report):
  181. self._generate_moves_content(
  182. workbook, report, "Report", report.report_move_ids)
  183. self._generate_no_group_taxes_summary(workbook, report)
  184. def _generate_journal_content(self, workbook, report_journal):
  185. sheet_name = "%s (%s) - %s" % (
  186. report_journal.code,
  187. report_journal.currency_id.name,
  188. report_journal.name,
  189. )
  190. self._generate_moves_content(
  191. workbook, report_journal.report_id, sheet_name,
  192. report_journal.report_move_ids)
  193. self._generate_journal_taxes_summary(workbook, report_journal)
  194. def _generate_no_group_taxes_summary(self, workbook, report):
  195. self._generate_taxes_summary(
  196. workbook, report, "Tax Report", report.report_tax_line_ids)
  197. def _generate_journal_taxes_summary(self, workbook, report_journal):
  198. sheet_name = "Tax - %s (%s) - %s" % (
  199. report_journal.code,
  200. report_journal.currency_id.name,
  201. report_journal.name,
  202. )
  203. report = report_journal.report_id
  204. self._generate_taxes_summary(
  205. workbook, report, sheet_name, report_journal.report_tax_line_ids)
  206. def _generate_moves_content(self, workbook, report, sheet_name, moves):
  207. self.workbook = workbook
  208. self.sheet = workbook.add_worksheet(sheet_name)
  209. self._set_column_width()
  210. self.row_pos = 1
  211. self.write_array_title(sheet_name)
  212. self.row_pos += 2
  213. self.write_array_header()
  214. for move in moves:
  215. for line in move.report_move_line_ids:
  216. self.write_line(line)
  217. self.row_pos += 1
  218. def _generate_taxes_summary(self, workbook, report, sheet_name, tax_lines):
  219. self.workbook = workbook
  220. self.sheet = workbook.add_worksheet(sheet_name)
  221. self.row_pos = 1
  222. self.write_array_title(sheet_name)
  223. self.row_pos += 2