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.

830 lines
32 KiB

  1. # Author: Julien Coux
  2. # Copyright 2016 Camptocamp SA
  3. # Copyright 2020 ForgeFlow S.L. (https://www.forgeflow.com)
  4. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
  5. from odoo.tests import common
  6. class TestTrialBalanceReport(common.TransactionCase):
  7. def setUp(self):
  8. super(TestTrialBalanceReport, self).setUp()
  9. group_obj = self.env["account.group"]
  10. acc_obj = self.env["account.account"]
  11. self.group1 = group_obj.create({"code_prefix": "1", "name": "Group 1"})
  12. self.group11 = group_obj.create(
  13. {"code_prefix": "11", "name": "Group 11", "parent_id": self.group1.id}
  14. )
  15. self.group2 = group_obj.create({"code_prefix": "2", "name": "Group 2"})
  16. self.account100 = acc_obj.create(
  17. {
  18. "code": "100",
  19. "name": "Account 100",
  20. "group_id": self.group1.id,
  21. "user_type_id": self.env.ref("account.data_account_type_receivable").id,
  22. "reconcile": True,
  23. }
  24. )
  25. self.account110 = self.env["account.account"].search(
  26. [
  27. (
  28. "user_type_id",
  29. "=",
  30. self.env.ref("account.data_unaffected_earnings").id,
  31. )
  32. ],
  33. limit=1,
  34. )
  35. self.account200 = acc_obj.create(
  36. {
  37. "code": "200",
  38. "name": "Account 200",
  39. "group_id": self.group2.id,
  40. "user_type_id": self.env.ref(
  41. "account.data_account_type_other_income"
  42. ).id,
  43. }
  44. )
  45. self.account300 = acc_obj.create(
  46. {
  47. "code": "300",
  48. "name": "Account 300",
  49. "user_type_id": self.env.ref(
  50. "account.data_account_type_other_income"
  51. ).id,
  52. }
  53. )
  54. self.account301 = acc_obj.create(
  55. {
  56. "code": "301",
  57. "name": "Account 301",
  58. "group_id": self.group2.id,
  59. "user_type_id": self.env.ref(
  60. "account.data_account_type_other_income"
  61. ).id,
  62. }
  63. )
  64. self.previous_fy_date_start = "2015-01-01"
  65. self.previous_fy_date_end = "2015-12-31"
  66. self.fy_date_start = "2016-01-01"
  67. self.fy_date_end = "2016-12-31"
  68. self.date_start = "2016-01-01"
  69. self.date_end = "2016-12-31"
  70. self.partner = self.env.ref("base.res_partner_12")
  71. self.unaffected_account = self.env["account.account"].search(
  72. [
  73. (
  74. "user_type_id",
  75. "=",
  76. self.env.ref("account.data_unaffected_earnings").id,
  77. )
  78. ],
  79. limit=1,
  80. )
  81. def _add_move(
  82. self,
  83. date,
  84. receivable_debit,
  85. receivable_credit,
  86. income_debit,
  87. income_credit,
  88. unaffected_debit=0,
  89. unaffected_credit=0,
  90. ):
  91. journal = self.env["account.journal"].search([], limit=1)
  92. partner = self.env.ref("base.res_partner_12")
  93. move_vals = {
  94. "journal_id": journal.id,
  95. "date": date,
  96. "line_ids": [
  97. (
  98. 0,
  99. 0,
  100. {
  101. "debit": receivable_debit,
  102. "credit": receivable_credit,
  103. "partner_id": partner.id,
  104. "account_id": self.account100.id,
  105. },
  106. ),
  107. (
  108. 0,
  109. 0,
  110. {
  111. "debit": income_debit,
  112. "credit": income_credit,
  113. "partner_id": partner.id,
  114. "account_id": self.account200.id,
  115. },
  116. ),
  117. (
  118. 0,
  119. 0,
  120. {
  121. "debit": unaffected_debit,
  122. "credit": unaffected_credit,
  123. "partner_id": partner.id,
  124. "account_id": self.account110.id,
  125. },
  126. ),
  127. (
  128. 0,
  129. 0,
  130. {
  131. "debit": receivable_debit,
  132. "credit": receivable_credit,
  133. "partner_id": partner.id,
  134. "account_id": self.account300.id,
  135. },
  136. ),
  137. (
  138. 0,
  139. 0,
  140. {
  141. "debit": receivable_credit,
  142. "credit": receivable_debit,
  143. "partner_id": partner.id,
  144. "account_id": self.account301.id,
  145. },
  146. ),
  147. ],
  148. }
  149. move = self.env["account.move"].create(move_vals)
  150. move.post()
  151. def _get_report_lines(
  152. self, with_partners=False, account_ids=False, hierarchy_on="computed"
  153. ):
  154. company = self.env.ref("base.main_company")
  155. trial_balance = self.env["trial.balance.report.wizard"].create(
  156. {
  157. "date_from": self.date_start,
  158. "date_to": self.date_end,
  159. "target_move": "posted",
  160. "hide_account_at_0": True,
  161. "hierarchy_on": hierarchy_on,
  162. "company_id": company.id,
  163. "account_ids": account_ids,
  164. "fy_start_date": self.fy_date_start,
  165. "show_partner_details": with_partners,
  166. }
  167. )
  168. data = trial_balance._prepare_report_trial_balance()
  169. res_data = self.env[
  170. "report.account_financial_report.trial_balance"
  171. ]._get_report_values(trial_balance, data)
  172. return res_data
  173. def check_account_in_report(self, account_id, trial_balance):
  174. account_in_report = False
  175. for account in trial_balance:
  176. if account["id"] == account_id and account["type"] == "account_type":
  177. account_in_report = True
  178. break
  179. return account_in_report
  180. def _get_account_lines(self, account_id, trial_balance):
  181. lines = False
  182. for account in trial_balance:
  183. if account["id"] == account_id and account["type"] == "account_type":
  184. lines = {
  185. "initial_balance": account["initial_balance"],
  186. "debit": account["debit"],
  187. "credit": account["credit"],
  188. "final_balance": account["ending_balance"],
  189. }
  190. return lines
  191. def _get_group_lines(self, group_id, trial_balance):
  192. lines = False
  193. for group in trial_balance:
  194. if group["id"] == group_id and group["type"] == "group_type":
  195. lines = {
  196. "initial_balance": group["initial_balance"],
  197. "debit": group["debit"],
  198. "credit": group["credit"],
  199. "final_balance": group["ending_balance"],
  200. }
  201. return lines
  202. def check_partner_in_report(self, account_id, partner_id, total_amount):
  203. partner_in_report = False
  204. if account_id in total_amount.keys():
  205. if partner_id in total_amount[account_id]:
  206. partner_in_report = True
  207. return partner_in_report
  208. def _get_partner_lines(self, account_id, partner_id, total_amount):
  209. acc_id = account_id
  210. prt_id = partner_id
  211. lines = {
  212. "initial_balance": total_amount[acc_id][prt_id]["initial_balance"],
  213. "debit": total_amount[acc_id][prt_id]["debit"],
  214. "credit": total_amount[acc_id][prt_id]["credit"],
  215. "final_balance": total_amount[acc_id][prt_id]["ending_balance"],
  216. }
  217. return lines
  218. def _sum_all_accounts(self, trial_balance, feature):
  219. total = 0.0
  220. for account in trial_balance:
  221. if account["type"] == "account_type":
  222. for key in account.keys():
  223. if key == feature:
  224. total += account[key]
  225. return total
  226. def test_00_account_group(self):
  227. self.assertTrue(self.account100 in self.group1.compute_account_ids)
  228. self.assertTrue(self.account200 in self.group2.compute_account_ids)
  229. def test_01_account_balance_computed(self):
  230. # Generate the general ledger line
  231. res_data = self._get_report_lines()
  232. trial_balance = res_data["trial_balance"]
  233. check_receivable_account = self.check_account_in_report(
  234. self.account100.id, trial_balance
  235. )
  236. self.assertFalse(check_receivable_account)
  237. check_income_account = self.check_account_in_report(
  238. self.account200.id, trial_balance
  239. )
  240. self.assertFalse(check_income_account)
  241. self.assertTrue(
  242. self.check_account_in_report(self.unaffected_account.id, trial_balance)
  243. )
  244. # Add a move at the previous day of the first day of fiscal year
  245. # to check the initial balance
  246. self._add_move(
  247. date=self.previous_fy_date_end,
  248. receivable_debit=1000,
  249. receivable_credit=0,
  250. income_debit=0,
  251. income_credit=1000,
  252. )
  253. # Re Generate the trial balance line
  254. res_data = self._get_report_lines()
  255. trial_balance = res_data["trial_balance"]
  256. check_receivable_account = self.check_account_in_report(
  257. self.account100.id, trial_balance
  258. )
  259. self.assertTrue(check_receivable_account)
  260. check_income_account = self.check_account_in_report(
  261. self.account200.id, trial_balance
  262. )
  263. self.assertFalse(check_income_account)
  264. # Check the initial and final balance
  265. account_receivable_lines = self._get_account_lines(
  266. self.account100.id, trial_balance
  267. )
  268. group1_lines = self._get_group_lines(self.group1.id, trial_balance)
  269. self.assertEqual(account_receivable_lines["initial_balance"], 1000)
  270. self.assertEqual(account_receivable_lines["debit"], 0)
  271. self.assertEqual(account_receivable_lines["credit"], 0)
  272. self.assertEqual(account_receivable_lines["final_balance"], 1000)
  273. self.assertEqual(group1_lines["initial_balance"], 1000)
  274. self.assertEqual(group1_lines["debit"], 0)
  275. self.assertEqual(group1_lines["credit"], 0)
  276. self.assertEqual(group1_lines["final_balance"], 1000)
  277. # Add reversed move of the initial move the first day of fiscal year
  278. # to check the first day of fiscal year is not used
  279. # to compute the initial balance
  280. self._add_move(
  281. date=self.fy_date_start,
  282. receivable_debit=0,
  283. receivable_credit=1000,
  284. income_debit=1000,
  285. income_credit=0,
  286. )
  287. # Re Generate the trial balance line
  288. res_data = self._get_report_lines()
  289. trial_balance = res_data["trial_balance"]
  290. check_receivable_account = self.check_account_in_report(
  291. self.account100.id, trial_balance
  292. )
  293. self.assertTrue(check_receivable_account)
  294. check_income_account = self.check_account_in_report(
  295. self.account200.id, trial_balance
  296. )
  297. self.assertTrue(check_income_account)
  298. # Re Generate the trial balance line with an account filter
  299. res_data = self._get_report_lines(
  300. account_ids=(self.account100 + self.account200).ids
  301. )
  302. trial_balance = res_data["trial_balance"]
  303. self.assertTrue(self.check_account_in_report(self.account100.id, trial_balance))
  304. self.assertTrue(self.check_account_in_report(self.account200.id, trial_balance))
  305. # Unaffected account should not be present
  306. self.assertFalse(
  307. self.check_account_in_report(self.unaffected_account.id, trial_balance)
  308. )
  309. # Check the initial and final balance
  310. account_receivable_lines = self._get_account_lines(
  311. self.account100.id, trial_balance
  312. )
  313. account_income_lines = self._get_account_lines(
  314. self.account200.id, trial_balance
  315. )
  316. group1_lines = self._get_group_lines(self.group1.id, trial_balance)
  317. group2_lines = self._get_group_lines(self.group2.id, trial_balance)
  318. self.assertEqual(account_receivable_lines["initial_balance"], 1000)
  319. self.assertEqual(account_receivable_lines["debit"], 0)
  320. self.assertEqual(account_receivable_lines["credit"], 1000)
  321. self.assertEqual(account_receivable_lines["final_balance"], 0)
  322. self.assertEqual(account_income_lines["initial_balance"], 0)
  323. self.assertEqual(account_income_lines["debit"], 1000)
  324. self.assertEqual(account_income_lines["credit"], 0)
  325. self.assertEqual(account_income_lines["final_balance"], 1000)
  326. self.assertEqual(group1_lines["initial_balance"], 1000)
  327. self.assertEqual(group1_lines["debit"], 0)
  328. self.assertEqual(group1_lines["credit"], 1000)
  329. self.assertEqual(group1_lines["final_balance"], 0)
  330. self.assertEqual(group2_lines["initial_balance"], 0)
  331. self.assertEqual(group2_lines["debit"], 1000)
  332. self.assertEqual(group2_lines["credit"], 0)
  333. self.assertEqual(group2_lines["final_balance"], 1000)
  334. # Add another move at the end day of fiscal year
  335. # to check that it correctly used on report
  336. self._add_move(
  337. date=self.fy_date_end,
  338. receivable_debit=0,
  339. receivable_credit=1000,
  340. income_debit=1000,
  341. income_credit=0,
  342. )
  343. # Re Generate the trial balance line
  344. res_data = self._get_report_lines()
  345. trial_balance = res_data["trial_balance"]
  346. check_receivable_account = self.check_account_in_report(
  347. self.account100.id, trial_balance
  348. )
  349. self.assertTrue(check_receivable_account)
  350. check_income_account = self.check_account_in_report(
  351. self.account200.id, trial_balance
  352. )
  353. self.assertTrue(check_income_account)
  354. # Check the initial and final balance
  355. account_receivable_lines = self._get_account_lines(
  356. self.account100.id, trial_balance
  357. )
  358. account_income_lines = self._get_account_lines(
  359. self.account200.id, trial_balance
  360. )
  361. group1_lines = self._get_group_lines(self.group1.id, trial_balance)
  362. group2_lines = self._get_group_lines(self.group2.id, trial_balance)
  363. self.assertEqual(account_receivable_lines["initial_balance"], 1000)
  364. self.assertEqual(account_receivable_lines["debit"], 0)
  365. self.assertEqual(account_receivable_lines["credit"], 2000)
  366. self.assertEqual(account_receivable_lines["final_balance"], -1000)
  367. self.assertEqual(account_income_lines["initial_balance"], 0)
  368. self.assertEqual(account_income_lines["debit"], 2000)
  369. self.assertEqual(account_income_lines["credit"], 0)
  370. self.assertEqual(account_income_lines["final_balance"], 2000)
  371. self.assertEqual(group1_lines["initial_balance"], 1000)
  372. self.assertEqual(group1_lines["debit"], 0)
  373. self.assertEqual(group1_lines["credit"], 2000)
  374. self.assertEqual(group1_lines["final_balance"], -1000)
  375. self.assertEqual(group2_lines["initial_balance"], 0)
  376. self.assertEqual(group2_lines["debit"], 2000)
  377. self.assertEqual(group2_lines["credit"], 0)
  378. self.assertEqual(group2_lines["final_balance"], 2000)
  379. def test_02_account_balance_hierarchy(self):
  380. # Generate the general ledger line
  381. res_data = self._get_report_lines(hierarchy_on="relation")
  382. trial_balance = res_data["trial_balance"]
  383. check_receivable_account = self.check_account_in_report(
  384. self.account100.id, trial_balance
  385. )
  386. self.assertFalse(check_receivable_account)
  387. check_income_account = self.check_account_in_report(
  388. self.account200.id, trial_balance
  389. )
  390. self.assertFalse(check_income_account)
  391. # Add a move at the previous day of the first day of fiscal year
  392. # to check the initial balance
  393. self._add_move(
  394. date=self.previous_fy_date_end,
  395. receivable_debit=1000,
  396. receivable_credit=0,
  397. income_debit=0,
  398. income_credit=1000,
  399. )
  400. # Re Generate the trial balance line
  401. res_data = self._get_report_lines(hierarchy_on="relation")
  402. trial_balance = res_data["trial_balance"]
  403. check_receivable_account = self.check_account_in_report(
  404. self.account100.id, trial_balance
  405. )
  406. self.assertTrue(check_receivable_account)
  407. check_income_account = self.check_account_in_report(
  408. self.account200.id, trial_balance
  409. )
  410. self.assertFalse(check_income_account)
  411. # Check the initial and final balance
  412. account_receivable_lines = self._get_account_lines(
  413. self.account100.id, trial_balance
  414. )
  415. group1_lines = self._get_group_lines(self.group1.id, trial_balance)
  416. self.assertEqual(account_receivable_lines["initial_balance"], 1000)
  417. self.assertEqual(account_receivable_lines["debit"], 0)
  418. self.assertEqual(account_receivable_lines["credit"], 0)
  419. self.assertEqual(account_receivable_lines["final_balance"], 1000)
  420. self.assertEqual(group1_lines["initial_balance"], 1000)
  421. self.assertEqual(group1_lines["debit"], 0)
  422. self.assertEqual(group1_lines["credit"], 0)
  423. self.assertEqual(group1_lines["final_balance"], 1000)
  424. # Add reversale move of the initial move the first day of fiscal year
  425. # to check the first day of fiscal year is not used
  426. # to compute the initial balance
  427. self._add_move(
  428. date=self.fy_date_start,
  429. receivable_debit=0,
  430. receivable_credit=1000,
  431. income_debit=1000,
  432. income_credit=0,
  433. )
  434. # Re Generate the trial balance line
  435. res_data = self._get_report_lines(hierarchy_on="relation")
  436. trial_balance = res_data["trial_balance"]
  437. check_receivable_account = self.check_account_in_report(
  438. self.account100.id, trial_balance
  439. )
  440. self.assertTrue(check_receivable_account)
  441. check_income_account = self.check_account_in_report(
  442. self.account200.id, trial_balance
  443. )
  444. self.assertTrue(check_income_account)
  445. # Check the initial and final balance
  446. account_receivable_lines = self._get_account_lines(
  447. self.account100.id, trial_balance
  448. )
  449. account_income_lines = self._get_account_lines(
  450. self.account200.id, trial_balance
  451. )
  452. group1_lines = self._get_group_lines(self.group1.id, trial_balance)
  453. group2_lines = self._get_group_lines(self.group2.id, trial_balance)
  454. self.assertEqual(account_receivable_lines["initial_balance"], 1000)
  455. self.assertEqual(account_receivable_lines["debit"], 0)
  456. self.assertEqual(account_receivable_lines["credit"], 1000)
  457. self.assertEqual(account_receivable_lines["final_balance"], 0)
  458. self.assertEqual(account_income_lines["initial_balance"], 0)
  459. self.assertEqual(account_income_lines["debit"], 1000)
  460. self.assertEqual(account_income_lines["credit"], 0)
  461. self.assertEqual(account_income_lines["final_balance"], 1000)
  462. self.assertEqual(group1_lines["initial_balance"], 1000)
  463. self.assertEqual(group1_lines["debit"], 0)
  464. self.assertEqual(group1_lines["credit"], 1000)
  465. self.assertEqual(group1_lines["final_balance"], 0)
  466. self.assertEqual(group2_lines["initial_balance"], 0)
  467. self.assertEqual(group2_lines["debit"], 2000)
  468. self.assertEqual(group2_lines["credit"], 0)
  469. self.assertEqual(group2_lines["final_balance"], 2000)
  470. # Add another move at the end day of fiscal year
  471. # to check that it correctly used on report
  472. self._add_move(
  473. date=self.fy_date_end,
  474. receivable_debit=0,
  475. receivable_credit=1000,
  476. income_debit=1000,
  477. income_credit=0,
  478. )
  479. # Re Generate the trial balance line
  480. res_data = self._get_report_lines(hierarchy_on="relation")
  481. trial_balance = res_data["trial_balance"]
  482. check_receivable_account = self.check_account_in_report(
  483. self.account100.id, trial_balance
  484. )
  485. self.assertTrue(check_receivable_account)
  486. check_income_account = self.check_account_in_report(
  487. self.account200.id, trial_balance
  488. )
  489. self.assertTrue(check_income_account)
  490. # Check the initial and final balance
  491. account_receivable_lines = self._get_account_lines(
  492. self.account100.id, trial_balance
  493. )
  494. account_income_lines = self._get_account_lines(
  495. self.account200.id, trial_balance
  496. )
  497. group1_lines = self._get_group_lines(self.group1.id, trial_balance)
  498. group2_lines = self._get_group_lines(self.group2.id, trial_balance)
  499. self.assertEqual(account_receivable_lines["initial_balance"], 1000)
  500. self.assertEqual(account_receivable_lines["debit"], 0)
  501. self.assertEqual(account_receivable_lines["credit"], 2000)
  502. self.assertEqual(account_receivable_lines["final_balance"], -1000)
  503. self.assertEqual(account_income_lines["initial_balance"], 0)
  504. self.assertEqual(account_income_lines["debit"], 2000)
  505. self.assertEqual(account_income_lines["credit"], 0)
  506. self.assertEqual(account_income_lines["final_balance"], 2000)
  507. self.assertEqual(group1_lines["initial_balance"], 1000)
  508. self.assertEqual(group1_lines["debit"], 0)
  509. self.assertEqual(group1_lines["credit"], 2000)
  510. self.assertEqual(group1_lines["final_balance"], -1000)
  511. self.assertEqual(group2_lines["initial_balance"], 0)
  512. self.assertEqual(group2_lines["debit"], 4000)
  513. self.assertEqual(group2_lines["credit"], 0)
  514. self.assertEqual(group2_lines["final_balance"], 4000)
  515. def test_03_partner_balance(self):
  516. # Generate the trial balance line
  517. res_data = self._get_report_lines(with_partners=True)
  518. total_amount = res_data["total_amount"]
  519. check_partner_receivable = self.check_partner_in_report(
  520. self.account100.id, self.partner.id, total_amount
  521. )
  522. self.assertFalse(check_partner_receivable)
  523. # Add a move at the previous day of the first day of fiscal year
  524. # to check the initial balance
  525. self._add_move(
  526. date=self.previous_fy_date_end,
  527. receivable_debit=1000,
  528. receivable_credit=0,
  529. income_debit=0,
  530. income_credit=1000,
  531. )
  532. # Re Generate the trial balance line
  533. res_data = self._get_report_lines(with_partners=True)
  534. total_amount = res_data["total_amount"]
  535. check_partner_receivable = self.check_partner_in_report(
  536. self.account100.id, self.partner.id, total_amount
  537. )
  538. self.assertTrue(check_partner_receivable)
  539. # Check the initial and final balance
  540. partner_lines = self._get_partner_lines(
  541. self.account100.id, self.partner.id, total_amount
  542. )
  543. self.assertEqual(partner_lines["initial_balance"], 1000)
  544. self.assertEqual(partner_lines["debit"], 0)
  545. self.assertEqual(partner_lines["credit"], 0)
  546. self.assertEqual(partner_lines["final_balance"], 1000)
  547. # Add reversale move of the initial move the first day of fiscal year
  548. # to check the first day of fiscal year is not used
  549. # to compute the initial balance
  550. self._add_move(
  551. date=self.fy_date_start,
  552. receivable_debit=0,
  553. receivable_credit=1000,
  554. income_debit=1000,
  555. income_credit=0,
  556. )
  557. # Re Generate the trial balance line
  558. res_data = self._get_report_lines(with_partners=True)
  559. total_amount = res_data["total_amount"]
  560. check_partner_receivable = self.check_partner_in_report(
  561. self.account100.id, self.partner.id, total_amount
  562. )
  563. self.assertTrue(check_partner_receivable)
  564. # Check the initial and final balance
  565. partner_lines = self._get_partner_lines(
  566. self.account100.id, self.partner.id, total_amount
  567. )
  568. self.assertEqual(partner_lines["initial_balance"], 1000)
  569. self.assertEqual(partner_lines["debit"], 0)
  570. self.assertEqual(partner_lines["credit"], 1000)
  571. self.assertEqual(partner_lines["final_balance"], 0)
  572. # Add another move at the end day of fiscal year
  573. # to check that it correctly used on report
  574. self._add_move(
  575. date=self.fy_date_end,
  576. receivable_debit=0,
  577. receivable_credit=1000,
  578. income_debit=1000,
  579. income_credit=0,
  580. )
  581. # Re Generate the trial balance line
  582. res_data = self._get_report_lines(with_partners=True)
  583. total_amount = res_data["total_amount"]
  584. check_partner_receivable = self.check_partner_in_report(
  585. self.account100.id, self.partner.id, total_amount
  586. )
  587. self.assertTrue(check_partner_receivable)
  588. # Check the initial and final balance
  589. partner_lines = self._get_partner_lines(
  590. self.account100.id, self.partner.id, total_amount
  591. )
  592. self.assertEqual(partner_lines["initial_balance"], 1000)
  593. self.assertEqual(partner_lines["debit"], 0)
  594. self.assertEqual(partner_lines["credit"], 2000)
  595. self.assertEqual(partner_lines["final_balance"], -1000)
  596. def test_04_undistributed_pl(self):
  597. # Add a P&L Move in the previous FY
  598. journal = self.env["account.journal"].search([], limit=1)
  599. move_vals = {
  600. "journal_id": journal.id,
  601. "date": self.previous_fy_date_end,
  602. "line_ids": [
  603. (
  604. 0,
  605. 0,
  606. {"debit": 0.0, "credit": 1000.0, "account_id": self.account300.id},
  607. ),
  608. (
  609. 0,
  610. 0,
  611. {"debit": 1000.0, "credit": 0.0, "account_id": self.account100.id},
  612. ),
  613. ],
  614. }
  615. move = self.env["account.move"].create(move_vals)
  616. move.post()
  617. # Generate the trial balance line
  618. company = self.env.ref("base.main_company")
  619. trial_balance = self.env["trial.balance.report.wizard"].create(
  620. {
  621. "date_from": self.date_start,
  622. "date_to": self.date_end,
  623. "target_move": "posted",
  624. "hide_account_at_0": False,
  625. "hierarchy_on": "none",
  626. "company_id": company.id,
  627. "fy_start_date": self.fy_date_start,
  628. }
  629. )
  630. data = trial_balance._prepare_report_trial_balance()
  631. res_data = self.env[
  632. "report.account_financial_report.trial_balance"
  633. ]._get_report_values(trial_balance, data)
  634. trial_balance = res_data["trial_balance"]
  635. check_unaffected_account = self.check_account_in_report(
  636. self.unaffected_account.id, trial_balance
  637. )
  638. self.assertTrue(check_unaffected_account)
  639. unaffected_lines = self._get_account_lines(
  640. self.unaffected_account.id, trial_balance
  641. )
  642. self.assertEqual(unaffected_lines["initial_balance"], -1000)
  643. self.assertEqual(unaffected_lines["debit"], 0)
  644. self.assertEqual(unaffected_lines["credit"], 0)
  645. self.assertEqual(unaffected_lines["final_balance"], -1000)
  646. # Add a P&L Move to the current FY
  647. journal = self.env["account.journal"].search([], limit=1)
  648. move_vals = {
  649. "journal_id": journal.id,
  650. "date": self.date_start,
  651. "line_ids": [
  652. (
  653. 0,
  654. 0,
  655. {"debit": 0.0, "credit": 1000.0, "account_id": self.account300.id},
  656. ),
  657. (
  658. 0,
  659. 0,
  660. {"debit": 1000.0, "credit": 0.0, "account_id": self.account100.id},
  661. ),
  662. ],
  663. }
  664. move = self.env["account.move"].create(move_vals)
  665. move.post()
  666. # Re Generate the trial balance line
  667. trial_balance = self.env["trial.balance.report.wizard"].create(
  668. {
  669. "date_from": self.date_start,
  670. "date_to": self.date_end,
  671. "target_move": "posted",
  672. "hide_account_at_0": False,
  673. "hierarchy_on": "none",
  674. "company_id": company.id,
  675. "fy_start_date": self.fy_date_start,
  676. }
  677. )
  678. data = trial_balance._prepare_report_trial_balance()
  679. res_data = self.env[
  680. "report.account_financial_report.trial_balance"
  681. ]._get_report_values(trial_balance, data)
  682. trial_balance = res_data["trial_balance"]
  683. # The unaffected earnings account is not affected by a journal entry
  684. # made to the P&L in the current fiscal year.
  685. check_unaffected_account = self.check_account_in_report(
  686. self.unaffected_account.id, trial_balance
  687. )
  688. self.assertTrue(check_unaffected_account)
  689. unaffected_lines = self._get_account_lines(
  690. self.unaffected_account.id, trial_balance
  691. )
  692. self.assertEqual(unaffected_lines["initial_balance"], -1000)
  693. self.assertEqual(unaffected_lines["debit"], 0)
  694. self.assertEqual(unaffected_lines["credit"], 0)
  695. self.assertEqual(unaffected_lines["final_balance"], -1000)
  696. # Add a Move including Unaffected Earnings to the current FY
  697. journal = self.env["account.journal"].search([], limit=1)
  698. move_vals = {
  699. "journal_id": journal.id,
  700. "date": self.date_start,
  701. "line_ids": [
  702. (
  703. 0,
  704. 0,
  705. {"debit": 0.0, "credit": 1000.0, "account_id": self.account110.id},
  706. ),
  707. (
  708. 0,
  709. 0,
  710. {"debit": 1000.0, "credit": 0.0, "account_id": self.account100.id},
  711. ),
  712. ],
  713. }
  714. move = self.env["account.move"].create(move_vals)
  715. move.post()
  716. # Re Generate the trial balance line
  717. trial_balance = self.env["trial.balance.report.wizard"].create(
  718. {
  719. "date_from": self.date_start,
  720. "date_to": self.date_end,
  721. "target_move": "posted",
  722. "hide_account_at_0": False,
  723. "hierarchy_on": "none",
  724. "company_id": company.id,
  725. "fy_start_date": self.fy_date_start,
  726. }
  727. )
  728. data = trial_balance._prepare_report_trial_balance()
  729. res_data = self.env[
  730. "report.account_financial_report.trial_balance"
  731. ]._get_report_values(trial_balance, data)
  732. trial_balance = res_data["trial_balance"]
  733. # The unaffected earnings account affected by a journal entry
  734. # made to the unaffected earnings in the current fiscal year.
  735. check_unaffected_account = self.check_account_in_report(
  736. self.unaffected_account.id, trial_balance
  737. )
  738. self.assertTrue(check_unaffected_account)
  739. unaffected_lines = self._get_account_lines(
  740. self.unaffected_account.id, trial_balance
  741. )
  742. self.assertEqual(unaffected_lines["initial_balance"], -1000)
  743. self.assertEqual(unaffected_lines["debit"], 0)
  744. self.assertEqual(unaffected_lines["credit"], 1000)
  745. self.assertEqual(unaffected_lines["final_balance"], -2000)
  746. # The totals for the Trial Balance are zero
  747. total_initial_balance = self._sum_all_accounts(trial_balance, "initial_balance")
  748. total_final_balance = self._sum_all_accounts(trial_balance, "ending_balance")
  749. total_debit = self._sum_all_accounts(trial_balance, "debit")
  750. total_credit = self._sum_all_accounts(trial_balance, "credit")
  751. self.assertEqual(total_initial_balance, 0)
  752. self.assertEqual(total_final_balance, 0)
  753. self.assertEqual(total_debit, total_credit)